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/=R führen ein Makro bedingt aus, ? liest eine Zeile, q (quit), Q (quit n Ebenen)
  • Genauigkeit: k setzt die Skala (Nachkommastellen), K pusht 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.