Programmering

Oprettelse af DSL'er i Java, del 1: Hvad er et domænespecifikt sprog?

Hvis du nogensinde har skrevet en makefile eller designet en webside med CSS, er du allerede stødt på et DSL- eller domænespecifikt sprog. DSL'er er små, udtryksfulde programmeringssprog, der er specielt designet til specifikke opgaver. I denne firedelte serie introducerer Venkat Subramaniam konceptet med DSL'er og viser dig til sidst, hvordan du bygger dem ved hjælp af Java. I denne første artikel forklarer Venkat, hvad en DSL er, og definerer forskellen mellem en ekstern DSL og en intern. Han påpeger derefter nogle DSL'er, som du sandsynligvis har brugt i årevis, måske uden engang at indse det.

Hvis du har været involveret i skrivning eller endda bare ved at bruge applikationer, er chancerne for, at du allerede har stødt på domænespecifikke sprog eller DSL'er - selvom du ikke var klar over det på det tidspunkt. En nøgleordsinputfil til et program, der modtager inputdata, er en DSL. En konfigurationsfil er en DSL. En makefile er en DSL, der bruges til at specificere regler og afhængigheder til opbygning af en applikation. Hvis du har skrevet nogen af ​​disse, har du allerede taget dine første skridt til at oprette domænespecifikke sprog.

Ordet Sprog i sætningen kan få dig til at forvente, at et DSL bruger syntaks til at udtrykke visse semantik. I modsætning til et almindeligt sprog som Java er en DSL ret begrænset i omfang og kapacitet; Som navnet antyder, fokuserer DSL'ere meget på en bestemt type problem eller domæne og på at udtrykke et snævert sæt løsninger inden for rammerne af det begrænsede anvendelsesområde. Og det er en god ting - DSL'er er enkle og koncise.

Okay, det er L; hvad med D og S?

Ordet domæne i DSL henviser til "et område eller en sfære af viden, indflydelse eller aktivitet." (For mere information henvises til Domain-Driven Design af Eric Evans.) Fokusering på et domæne giver dig en sammenhæng - en logisk ramme, inden for hvilken du kan udvikle modeller til en applikation.

Ordet bestemt i DSL giver dig den afgrænsede kontekst. Det hjælper dig med at holde tingene relevante, fokuserede, kortfattede og udtryksfulde.

Enkelhed er afgørende for en DSLs succes. En person, der er fortrolig med sprogets domæne, skal let forstå det. For eksempel, hvis du opretter en DSL, som aktuarer bruger til at udtrykke forretningsregler inden for forsikringsområdet, vil du ikke have, at de bruger meget tid på at lære et vanskeligt og kompliceret sprog. Du vil have dem til at fokusere på at udtrykke detaljerne forbundet med forsikringsrisici på en måde, som de let kan forstå, diskutere, udvikle og vedligeholde. DSL, du opretter til dem, skal være bygget på deres ordforråd, de vilkår, de bruger hver dag til at kommunikere med deres jævnaldrende. Du vil have dem til at bruge den syntaks, du giver, men det ser ud til, at de blot angiver nogle diskrete regler. Og det skal de være i stand til uden at få det indtryk, at de virkelig programmerer eller endda bruger en slags sprog.

At skabe en god DSL er som at lave et nærende måltid; ligesom du vil have børn til at spise grøntsager uden at indse og vrede sig over dem, vil du have klienter til at bruge din DSL uden at bekymre sig om syntaksen.

Kortfattethed er en anden del af at skrive en god DSL, hvilket betyder at vælge syntaks, der er både kort og udtryksfuld. Terseness inden for grund gør din kode lettere at læse og vedligeholde. Ekspressivitet hjælper med at fremme kommunikation, forståelse og hurtighed. For eksempel for en person, der forstår matrixmultiplikation, matrixA.multiply (matrixB); er mindre udtryksfuld og kortfattet end matrixA * matrixB. Førstnævnte involverer opkaldsfunktioner og brug af parenteser og inkluderer et skræmmende semikolon. Sidstnævnte er allerede et udtryk, der vil være ganske velkendt.

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