dc (desk calculator) ist einer der ältesten Rechner von Unix: Lorinda Cherry und Robert Morris schrieben ihn an den Bell Labs, noch bevor die Sprache C entwickelt wurde (Version 6 Unix, 1975; seit 4.1BSD auch in BSD). dc arbeitet mit Umgekehrter Polnischer Notation (UPN/RPN) — Operanden zuerst, Operator danach: 2 3 + ergibt 5. Kernstärke ist die beliebige Genauigkeit (Arbitrary Precision): Zahlen mit Tausenden Stellen sind kein Problem. Register, Makros und Strings machen dc zu einer vollwertigen, minimalen Stack-Programmiersprache — die Grundlage des Stack-Modells. bc (basic calculator) ist der Infix-Präprozessor von dc: Er wurde von denselben Entwicklern (Lorinda Cherry und Robert Morris) geschrieben und übersetzt C-ähnliche Ausdrücke nach dc — wer bc-Befehle nutzt, bekommt die gleiche beliebige Genauigkeit in vertrauter Schreibweise, das Sprachen wie Forth und Joy verallgemeinern.
Kernbefehle
- Zahlen & Arithmetik: Ziffernfolgen pushen (z. B.
12.5), dann+,-,*,/,%,^(Potenz),v(Quadratwurzel) - Stack:
p(print),n(print ohne Newline),f(gesamten Stack ausgeben),d(dup),r(swap),c(clear),z(Stacktiefe),Z(Länge der Zahl),X(Anzahl Nachkommastellen),R(reverse) - Register:
sR(in Register R speichern),lR(laden),SR/LR(ganzen Stack in/aus Register) - Strings, Makros & Steuerung:
[ ... ]definiert einen String bzw. Makro,<R/>R/=Rführen ein Makro bedingt aus,?liest eine Zeile,q(quit),Q(quit n Ebenen) - Genauigkeit:
ksetzt die Skala (Nachkommastellen),Kpusht die aktuelle Skala
Beispiele
echo '5 k 10 3 / p' | dc # → 3.33333
echo '16 i 2 o 255 p' | dc # → FF (255 zur Basis 16)
Mit i und o lässt sich die Eingabe- und Ausgabebasis umschalten — daher ist dc auch bei Systemadministratoren für schnelle Umrechnungen beliebt. Factor und andere Concatenative-Sprachen führen das UPN-Prinzip von dc in die allgemeine Programmierung fort.