Programavimas

DSL kūrimas „Java“ sistemoje, 1 dalis: Kas yra domenui būdinga kalba?

Jei kada nors parašėte makefile arba sukūrėte tinklalapį naudodami CSS, jau susidūrėte su DSL arba domeno kalba. DSL yra mažos, išraiškingos programavimo kalbos, pritaikytos konkrečioms užduotims atlikti. Šioje keturių dalių serijoje „Venkat Subramaniam“ pristato DSL koncepciją ir galiausiai parodo, kaip jas sukurti naudojant „Java“. Šiame pirmame straipsnyje „Venkat“ paaiškina, kas yra DSL, ir apibrėžia skirtumą tarp išorinio DSL ir vidinio. Tada jis atkreipia dėmesį į kai kuriuos DSL, kuriuos greičiausiai naudojate daugelį metų, galbūt net to nesuprasdami.

Jei dalyvavote rašydami ar net naudodamiesi programomis, tikėtina, kad jau susidūrėte su domeno kalbomis arba DSL, net jei tuo metu to nesuvokėte. Raktinių žodžių įvesties failas į programą, kuri gauna įvesties duomenis, yra DSL. Konfigūracijos failas yra DSL. Makefile yra DSL, naudojamas nurodyti taisykles ir priklausomybes kuriant programą. Jei parašėte bet kurį iš šių dalykų, jau atlikote pirmuosius veiksmus kurdami konkrečiam domenui skirtas kalbas.

Žodis kalba frazėje galite tikėtis, kad DSL naudos sintaksę tam tikrai semantikai išreikšti. Skirtingai nuo bendrosios kalbos, tokios kaip „Java“, DSL taikymo sritis ir galimybės yra gana ribotos; kaip rodo pavadinimas, DSL labai stengiasi sutelkti dėmesį į tam tikros rūšies problemą ar sritį ir į siaurą sprendimų rinkinį šios ribotos srities kontekste. Ir tai yra geras dalykas - DSL yra paprastos ir glaustos.

Gerai, tai L; o kaip su D ir S?

Žodis domenas DSL reiškia „žinių, įtakos ar veiklos sritį ar sferą“. (Norėdami gauti daugiau informacijos, skaitykite Erico Evanso domenų valdomą dizainą.) Susitelkę į domeną galite: kontekste - logiška sistema, kurioje galite kurti programos modelius.

Žodis specifinis DSL suteikia jums ribotą kontekstą. Tai padeda išlaikyti dalykus aktualius, sutelktus, trumpus ir išraiškingus.

DSL sėkmei labai svarbus paprastumas. Asmuo, susipažinęs su kalbos sritimi, turi ją lengvai suprasti. Pvz., Jei kuriate DSL, kurį aktuarai naudos draudimo srities verslo taisyklėms išreikšti, nenorite, kad jie praleistų daug laiko mokydamiesi sudėtingos ir sudėtingos kalbos. Norite, kad jie sutelktų dėmesį į informacijos, susijusios su draudimo rizika, išsakymą taip, kad galėtų lengvai suprasti, aptarti, vystytis ir palaikyti. Jiems sukurtas DSL turi būti pagrįstas jų žodynu, terminais, kuriuos jie kasdien naudoja bendraujant su bendraamžiais. Norite, kad jie naudotų jūsų pateiktą sintaksę, tačiau jiems turėtų atrodyti, kad jie tik nurodo kai kurias atskiras taisykles. Jie turėtų tai padaryti neturėdami įspūdžio, kad jie tikrai programuoja ar net vartoja kažkokią kalbą.

Geros DSL sukūrimas yra tarsi maistingo maisto gaminimas; kaip ir jūs norite, kad vaikai valgytų daržoves, patys to nesuprasdami ir nesivaržydami, norite, kad klientai naudotų jūsų DSL nesijaudindami dėl jo sintaksės.

Glaustumas yra dar viena gero DSL rašymo dalis, o tai reiškia, kad reikia pasirinkti tiek griežtą, tiek išraiškingą sintaksę. Protingumo ribotumas leidžia lengviau perskaityti ir prižiūrėti jūsų kodą. Išraiškingumas padeda skatinti bendravimą, supratimą ir greitį. Pavyzdžiui, tam, kuris supranta matricos dauginimą, matrica A. dauginti (matrica B); yra mažiau išraiškingas ir glaustas nei matricaA * matricaB. Pirmasis apima funkcijų iškvietimą ir skliaustų naudojimą, taip pat apima bauginančią kabliataškį. Pastarasis jau yra išraiška, kuri bus gana pažįstama.