Programování

Vytváření DSL v Javě, část 1: Co je to jazyk specifický pro doménu?

Pokud jste někdy psali soubor makefile nebo navrhovali webovou stránku pomocí CSS, již jste se setkali s jazykem DSL nebo jazykem pro konkrétní doménu. DSL jsou malé expresivní programovací jazyky navržené na míru konkrétním úkolům. V této čtyřdílné sérii představuje Venkat Subramaniam koncept DSL a nakonec vám ukáže, jak je vytvořit pomocí Javy. V tomto prvním článku Venkat vysvětluje, co je DSL, a definuje rozdíl mezi externím DSL a interním. Poté poukáže na některé DSL, které pravděpodobně používáte už roky, možná si to ani neuvědomujete.

Pokud jste se podíleli na psaní nebo dokonce jen na používání aplikací, je pravděpodobné, že jste již narazili na jazyky specifické pro doménu nebo DSL - i když jste si to v té době neuvědomili. Vstupním souborem klíčového slova do aplikace, která přijímá vstupní data, je DSL. Konfigurační soubor je DSL. Makefile je DSL používaný k určení pravidel a závislostí pro sestavení aplikace. Pokud jste některý z těchto textů napsali, již jste podnikli první kroky k vytvoření jazyků specifických pro doménu.

Slovo Jazyk ve frázi vás může vést k očekávání, že DSL použije syntaxi k vyjádření určité sémantiky. Na rozdíl od obecného jazyka, jako je Java, je DSL poměrně omezený rozsahem a schopnostmi; jak název napovídá, DSL se intenzivně zaměřují na určitý typ problému nebo domény a na vyjádření úzké sady řešení v kontextu tohoto omezeného rozsahu. A to je dobrá věc - DSL jsou jednoduché a stručné.

Dobře, to je L; co D a S?

Slovo doména v DSL označuje „oblast nebo sféru znalostí, vlivu nebo činnosti“. (Další informace najdete v Designu založeném na doméně od Erica Evanse.) Zaměření na doménu vám dává a kontext - logický rámec, ve kterém můžete vyvíjet modely pro aplikaci.

Slovo charakteristický v DSL vám dává ohraničený kontext. Pomůže vám udržet věci relevantní, soustředěné, strohé a expresivní.

Pro úspěch DSL je zásadní jednoduchost. Osoba obeznámená s doménou jazyka jí musí snadno porozumět. Například pokud vytváříte DSL, který pojistní matematici použijí k vyjádření obchodních pravidel v oblasti pojištění, nechcete, aby trávili spoustu času učením obtížného a komplikovaného jazyka. Chcete, aby se soustředili na vyjádření podrobností souvisejících s pojistnými riziky způsobem, kterému snadno porozumí, budou o nich diskutovat, vyvíjet se a udržovat je. DSL, které pro ně vytvoříte, musí být postaveno na jejich slovníku, což jsou výrazy, které každý den používají ke komunikaci se svými vrstevníky. Chcete, aby používali syntaxi, kterou zadáte, ale mělo by se jim zdát, že pouze určují některá diskrétní pravidla. A měli by být schopni to udělat, aniž by měli dojem, že skutečně programují nebo dokonce používají nějaký druh jazyka.

Vytvoření dobrého DSL je jako vaření výživného jídla; stejně jako chcete, aby děti jedly zeleninu, aniž by si to uvědomovaly a rozčilovaly se o ně, chcete, aby klienti používali vaši DSL bez obav o její syntaxi.

Stručnost je další částí psaní dobrého DSL, což znamená výběr syntaxe, která je stručná i expresivní. Treseness within reason makes your code easier to read and údržba. Expresivita pomáhá podporovat komunikaci, porozumění a rychlost. Například pro někoho, kdo rozumí násobení matic, matrixA.multiply (matrixB); je méně výrazný a výstižný než matrixA * matrixB. První zahrnuje volání funkcí a použití závorek a zahrnuje zastrašující středník. Ten druhý je již výrazem, který bude docela dobře známý.

$config[zx-auto] not found$config[zx-overlay] not found