Programovanie

Vytváranie DSL v Jave, 1. časť: Čo je to jazyk špecifický pre doménu?

Ak ste niekedy písali súbor makefile alebo navrhovali webovú stránku pomocou CSS, už ste sa stretli s jazykom DSL alebo doménou. DSL sú malé, expresívne programovacie jazyky, ktoré sú špeciálne navrhnuté pre konkrétne úlohy. V tejto štvordielnej sérii Venkat Subramaniam predstavuje koncept DSL a nakoniec vám ukáže, ako ich zostaviť pomocou Javy. V tomto prvom článku Venkat vysvetľuje, čo je DSL, a definuje rozdiel medzi externým DSL a interným. Potom poukazuje na niektoré DSL, ktoré ste pravdepodobne používali už roky, možno bez toho, aby ste si to vôbec uvedomovali.

Ak ste sa venovali písaniu alebo dokonca iba používaniu aplikácií, je pravdepodobné, že ste sa už stretli s jazykmi špecifickými pre danú doménu alebo s jazykmi DSL - aj keď ste si to v tom čase neuvedomovali. Vstupným súborom kľúčového slova do aplikácie, ktorá prijíma vstupné údaje, je DSL. Konfiguračný súbor je DSL. Makefile je DSL používaný na špecifikáciu pravidiel a závislostí pre zostavenie aplikácie. Ak ste niečo z toho napísali, už ste podnikli prvé kroky k vytvoreniu jazykov špecifických pre doménu.

Slovo Jazyk vo fráze vás môže viesť k očakávaniu, že DSL použije syntax na vyjadrenie určitej sémantiky. Na rozdiel od univerzálneho jazyka, ako je Java, je rozsah DSL a schopností dosť obmedzený; ako už názov napovedá, DSL sa dôrazne zameriavajú na určitý typ problému alebo domény a na vyjadrenie úzkeho súboru riešení v kontexte tohto obmedzeného rozsahu. A to je dobrá vec - DSL sú jednoduché a stručné.

Dobre, to je L; čo D a S?

Slovo doména v DSL označuje „oblasť alebo oblasť vedomostí, vplyvu alebo činnosti“. (Ďalšie informácie nájdete v dokumente Design zameranom na doménu od Erica Evansa.) Zameranie na doménu vám dáva a kontext - logický rámec, v ktorom môžete vyvíjať modely pre aplikáciu.

Slovo konkrétne v DSL vám dáva ohraničený kontext. Pomáha vám udržiavať veci relevantné, sústredené, strohé a výrazné.

Pre úspech DSL je rozhodujúca jednoduchosť. Osoba oboznámená s doménou jazyka musí ľahko pochopiť. Napríklad ak vytvárate DSL, ktoré aktuári použijú na vyjadrenie obchodných pravidiel v oblasti poistenia, nechcete, aby trávili veľa času učením zložitého a komplikovaného jazyka. Chcete, aby sa zamerali na vyjadrenie detailov spojených s poistnými rizikami spôsobom, ktorému ľahko porozumejú, diskutujú o ňom, vyvíjajú sa a udržiavajú ho. DSL, ktoré pre nich vytvoríte, musí byť postavené na ich slovníku, výrazoch, ktoré každý deň používajú na komunikáciu so svojimi rovesníkmi. Chcete, aby používali vami zadanú syntax, ale malo by sa im zdať, že iba určujú niektoré samostatné pravidlá. A mali by byť schopní tak urobiť bez toho, aby mali dojem, že skutočne programujú alebo dokonca používajú nejaký jazyk.

Vytvorenie dobrého DSL je ako varenie výživného jedla; Rovnako ako chcete, aby deti jedli zeleninu bez toho, aby si to uvedomovali a rozčuľovali sa nad nimi, chcete, aby klienti používali vašu DSL bez obáv o jej syntax.

Stručnosť je ďalšou časťou písania dobrého jazyka DSL, čo znamená zvoliť si stručnú a expresívnu syntax. Vďaka únave z dôvodu rozumnosti je váš kód ľahšie čitateľný a udržiavateľný. Expresivita pomáha podporovať komunikáciu, porozumenie a rýchlosť. Napríklad pre niekoho, kto rozumie násobeniu matíc, matrixA.multiply (matrixB); je menej výrazné a stručné ako matrixA * matrixB. Prvý zahrnuje volanie funkcií a používanie zátvoriek a obsahuje zastrašujúci bodkočiarku. To posledné je už výraz, ktorý bude celkom známy.

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