
Jaké nástroje pro nový jazyk?
Stejně důležité jako vlastnosti samotného jazyka je rozhodnout se, jaké nástroje s ním budeme používat. Pro nový jazyk budeme nevyhnutelně potřebovat vlastní zvýrazňovač syntaxe. Otázka ale zní – v jakém jazyce ho napsat?
Někdy potřebujeme zvýrazňovat syntaxi v editoru na straně klienta v JavaScriptu. Jindy chceme zvýraznit kód při generování webu nebo třeba blogového článku na serveru. Řešení se tak nabízí samo – vytvoříme ho opět v našem vlastním jazyce, který poběží jak v prohlížeči, tak na serveru.
Proč si jazyk vyrábět sám?
Možná si někdo řekne: proč si to všechno vyrábět sám? Vždyť je to spousta práce. Odpověď je jednoduchá: Schopnost navrhnout vlastní DSL (doménově specifický jazyk) patří do výbavy každého kreativního programátora.
Někdy totiž narazíme na problém, jehož řešení je v běžných jazycích zbytečně komplikované. A právě v takové chvíli dává smysl navrhnout si jazyk na míru. Není to nic výjimečného – literatury o tom existuje dost, i když často spíš teoretické. V praxi je ale tahle dovednost překvapivě užitečná.
Vytvořit jazyk není magie
Kdo si někdy vytvořil vlastní jazyk, ví, že to není žádná magie. Pomocí tokenizeru rozdělíte kód na jednotlivé tokeny, parser sestaví abstraktní syntaktický strom (AST), na kterém můžete provést analýzy či optimalizace, a nakonec builder vygeneruje výstupní kód.
Tím to ale zdaleka nekončí. V literatuře se o tom moc nemluví, ale pro každý nový DSL musíte připravit další nástroje: zvýrazňovač syntaxe, našeptávače, kontextovou nápovědu, šablony kódu, debuger… Často se to neobejde ani bez vlastního editoru, k jazyku je prostě potřeba vybudovat celý ekosystém zvlášť pokud s ním má pracovat i někdo jiný..
Proč vlastně tyto nástroje vyvíjíme?
První důvod je jednoduchý: editor a zvýrazňovač prostě potřebujeme, pokud chceme náš jazyk používat v reálném projektu. A druhý – neméně důležitý – je, že se tím vším chceme naučit, jak tyhle nástroje navrhovat.
A když už je budujeme, tak rovnou tak, aby byly přímo integrované do našeho projektu. Protože to je podle mne ta pravá výhoda, která dává webovým editorům smysl.
Integrace vývojového prostředí přímo do vašeho projektu je ta „killer funkce“, na kterou když si jednou zvyknete, už se vám nebude chtít vracet – ani k PSPadu, ani k PHPStormu… a někteří možná opustí i Vim :-)
Výhoda? Jednoduchost. Jeden klik a hned vidíte výstup svého kódu. Druhý klik a jste ve zdrojovém kódu dané stránky, další klik a jste ve úpravě struktury vypisované tabulky. Žádné zdlouhavé přepínání mezi soubory, editorem, prohlížečem, sql-adminem či nápovědou. Kód, výsledek i kontext – všechno na jednom místě, přímo ve webovém prohlížeči a navzájem propojené. Tohle vám umožní ladit rychleji, učit se efektivněji a tvořit s větší lehkostí.
Vytvořit vlastní DSL je jen začátek. Skutečná síla přichází ve chvíli, kdy si k němu navrhnete i vlastní vývojové prostředí. Takové, které přesně odpovídá vašemu způsobu práce, nezdržuje vás a umožní vám tvořit rychle, efektivně a s radostí. Když vám nástroje nepřekážejí, ale pomáhají, programování se mění z boje na tvořivou hru.