dc (program)
První vydání | 1971 |
---|---|
Operační systém | multiplatformní, původně UNIX |
Vyvíjeno v | původně B |
Typ softwaru | software calculator |
Některá data mohou pocházet z datové položky. |
dc (desc calculator) je softwarový kalkulátor s reverzní polskou notací a neomezenou aritmetickou přesností.[1] Je jednou z nejstarších unixových utilit a předchází dokonce vzniku programovacího jazyka C.[pozn. 1] Stejně jako jiné utility té doby vyznačuje výkonnými funkcemi, také však extrémně strohou syntaxí.[zdroj?] Tradičně, na základě dc byl vytvořen uživatelsky příjemnější kalkulační program bc (s infixovou notací), ačkoli současné implementace bc nebývají na dc závislé.[3]
Historie
[editovat | editovat zdroj]Nástroje dc a bc byly vyvinuty Lorindou Cherryovou a Robertem Morrisem z Bellových laboratoří v roce 1971.[4][5][6] Ken Thompson tvrdil, že dc byl zcela první program napsaný v Bellových laboratořích pro počítač PDP-11.[7]
Popis
[editovat | editovat zdroj]Tento článek přináší několik příkladů ve snaze ukázat jazyk jako takový. Kompletní seznam příkazů a syntaxe je třeba nastudovat z manuálové stránky konkrétní implementace.
Na rozdíl od bc je dc založen na postfixové notaci, což znamená, že matematické výrazy jsou prováděny na způsob zásobníku.
Vynásobení čísel čtyři a pět (většinu bílých znaků lze vynechat):
4 5 *
p
Toto lze přeložit jako „vlož čtyři a pět do zásobníku, pak s operátorem násobení vyjmi dva prvky ze zásobníku, vynásob je a vlož výsledek zpět do zásobníku.“ Příkaz p slouží k vypsání horního prvku v zásobníku.
Pro výpočet (12 + 3^4)/11-22:
12 3 4 ^ + 11 / 22 -
p
Krom základních aritmetických a zásobníkových operací zahrnuje dc i podporu maker, podmínek a ukládání výsledků pro pozdější použití. Však je jeho syntaxe velmi strohá a komplexní programy bývají jen velmi obtížně čitelné.[zdroj?]
Mechanismem, který se skrývá se za makry a podmínkami, je tzv. registr. Registr je v dc úložný prostor s jednoznakovým názvem, do nějž lze ukládat a naopak z něj načítat. Pro práci s nimi se používají příkazy s a l. Například sc vyjme horní prvek ze zásobníku a uloží jej do registru c; lc vloží hodnotu z registru c do zásobníku:
3 sc 4 lc * p
S registry lze pracovat také jako se sekundárními zásobníky, takže lze mezi nimi a hlavním zásobníkem hodnoty vyjímat a vkládat.
Makra jsou implementována tak, že umožňují, aby hodnoty v registrech a zásobníku byly řetězci i čísly. Řetězec lze vypsat, může být ale také zpracován jako posloupnost příkazů. Kupříkladu je možné do registru m uložit makro pro přičtení jedničky a poté vynásobení dvěma:
[1 + 2 *] sm
S použitím příkazu x, který provede operaci na horní pozici zásobníku, je možné:
3 lm x p
Mechanismus maker lze využít i ke konstrukci podmínek. Příkaz =r vyjme ze zásobníku dvě hodnoty a makro, uložené v registru r, provede pouze v případě, že jsou si rovny. Následující příklad vypíše řetězec shodne jen tehdy, je-li hodnota na vrcholu zásobníku rovna 5:
[shodne]p] sm 5 =m
Cyklus je možné vytvořit definicí makra, které podmínečně volá samo sebe.
Příkladem budiž následující výpočet faktoriálu:
# F(x): return x!
# if x-1 > 1
# return x * F(x-1)
# otherwise
# return x
[d1-d1<F*]dsFxp
Příklad převedu vzdálenost v metrech na stopy a palce. Velká část příkladu se zabývá výzvami pro zadání hodnot na vstup, vypisováním výstupu ve vhodném formátu a probíhání cyklem pro převod dalšího čísla¨. Je zde ukázáno i pouštění jednořádkového příkazu z příkazového řádku.
dc -e '[[Zadej cislo (v metrech) nebo 0 pro ukonceni.]psj]sh[q]sz[lhx?d0=z10k39.370079*.5+0k12~1/rn[ stop ]Pn[ palcu]P10Pdx]dx'
Odkazy
[editovat | editovat zdroj]Poznámky
[editovat | editovat zdroj]- ↑ dc je z roku 1971 a napsáno v programovacím jazyce B.[2]. Jazyk C byl vytvořen v roce 1972.
Reference
[editovat | editovat zdroj]V tomto článku byl použit překlad textu z článku Dc (computer program) na anglické Wikipedii.
- ↑ Manuálová stránka programu dc
- ↑ A Research UNIX Reader: Annotated Excerpts from the Programmer’s Manual, 1971-1986
- ↑ bc - GNU Project - Free Software Foundation. www.gnu.org [online]. [cit. 2025-04-01]. Dostupné v archivu pořízeném z originálu dne 2025-03-05. (anglicky)
- ↑ Lorinda Cherry, Robert Morris - BC - An Arbitrary Precision Desk-Calculator Language dostupné anglicky online
- ↑ Or if you're a fan of cli tools, check out dc! | Hacker News. news.ycombinator.com [online]. [cit. 2022-02-17]. Dostupné online.
- ↑ KRČMÁŘ, Petr. Zemřela Lorinda Cherryová, autorka utilit bc a dc. Root.cz [online]. [cit. 2022-02-17]. Dostupné online.
- ↑ KERNIGHAN, Brian; KEN, Thompson. A nerdy delight for any Vintage Computer Fest 2019 attendee: Kernighan interviewing Thompson about Unix [video]. 2019-05-19 [cit. 2025-04-01]. Čas 29:45. Dostupné online.
Externí odkazy
[editovat | editovat zdroj]- Manuálová stránka GNU dc
- Linux v příkazech – aritmetika – článek na serveru linuxsoft.cz, jehož část se zabývá dc