Tip na knihu: Crafting Interpreters od Roberta Nystroma
Kniha Crafting Interpreters od Roberta Nystroma, kterou jsem o víkendu dočetl, je dílem, které by se mohlo stát klasikou.
Pro koho kniha je? Chtěli jste někdy vytvořit svůj vlastní programovací jazyk, nebo mít jednoduchý "embedovaný" skriptovací jazyk v aplikaci ? Moc ambiciózní a vy jste spokojeni se stávajícími jazyky? Hráli jste si třeba s C# Roslyn SDK, nebo jste použili C# generators a zhrozili jste se, jak amatérsky a nevzhledně vypadá generátor kódu? Samozřejmě ne ten váš generátor, ale generátor kolegy? Tedy generátor zní pořád až příliš vznešeně, co jsem tak různě viděl, spíš spojování stringů na steroidech, u pokročilejších s využitím StringBuilderu?
V knize Crafting Intepreters Robert Nystrom navrhne jazyk Lox. Lox je taková mini-Java (mini-C#, prostě jazyk s C like syntaxí), ale i přes nehezké přízvisko mini, které jsem použil v předchozí větě, LOX podporuje i OOP nebo closures - funkce, které zachytí proměnné ve svém okolí.
V první části knihy autor nejprve napíše jednoduchý parser, lexer a interpreter Loxu v Javě.
V druhé a pro mě zajímavější části autor napíše pro LOX (stack based) virtuální stroj v jazyce C včetně jednoduchého, ale plně funkčního garbage collectoru (jednovláknový, nekonkurenční, "stop the world"). A vytvoříte všechny instrukce pro virtuální stroj včetně vlastního disassembleru. A když když máte VM v C, portování Loxu na další HW platformy je hračka.
Je poněkud tragické vidět vývojáře, kteří třeba intermediate language (IL) a VM v .NET považují za černé skříňky, kterým nemusejí vůbec rozumět. Do určité míry je to pravda, ale u každé netriviální aplikace potřebujete znát trochu více než syntaxi zvoleného programovacího jazyka a pár knihoven. A někdy ani nestačí, že jako firemní vývojářské eso rozpoznáte, kde je vyhledávací pole na StackOverflow, kam posléze vložíte své zoufalé a bezradné skřeky.
Na knize je skvělé, že obsahuje kompletní zdrojový kód. Ne útržky, ne odkazy na github. Veškerý výklad je prokládán kódem a je docela úleva číst knihu, ve které nejsou jen neoptimalizované fragmenty kódu, ale autor si dá práci, aby před vámi neskrýval žádné kroky, svůj kód před vámi vyladil a upozornil na typické chyby, kterých se dopustí asi každý, pokud píše třeba parser poprvé.
Zvláštní cenu autor dostává za to, že nepoužívá trapné věty typu "tuto funkci už psát nebudeme, ponecháme ji jako cvičení pro bystré čtenáře." Moudří vědí, že jako cvičení pro čtenáře se často nechávají úlohy, které autor knihy nezvládne. Tento otravný a trapný trik asi autoři knih převzali od přednášejících mdlého ducha, kteří mají času dost, ale stejně ve stanoveném čase nestihnou vykoktat penzum znalostí, které si sami čerstvě osvojili den před svou přednáškou na konferenci, a s chutí přehazují povinnosti na posluchače.
Také oceňuji, že kniha pro Kindle má všechny výpisy kódu čitelné. Pořád nejde o samozřejmost. Sami jste asi také narazili na odbornou eknihu, která byla formátována tak, že zdrojový kód nebo tabulky nebylo možné přečíst bez opičích chvatů (podržením prstu zvětším grafický objekt a skroluji tam a zpátky).
Za tuhle knihu si autor zaslouží zaplatit, ale kdybyste byli i po mé nadšené anotaci na vážkách, nebo máte zrovna hluboko do kapsy, kniha je na webu zdarma.
Monday, 04 October 2021 18:08:50 (Central Europe Standard Time, UTC+01:00)