Un linguaggio specifico del dominio (DSL) è un linguaggio destinato all’uso nel contesto di un particolare dominio. Un dominio potrebbe essere un contesto di business (ad esempio, banche, assicurazioni, ecc.) o un contesto applicativo (ad esempio, un’applicazione web, un database, ecc.) Al contrario, un linguaggio di uso generale (GPL) può essere utilizzato per una vasta gamma di problemi di business e applicazioni.
Un DSL non cerca di soddisfare tutti. Invece, è creato per una sfera limitata di applicabilità e uso, ma è abbastanza potente da rappresentare e affrontare i problemi e le soluzioni in quella sfera. Un buon esempio di un DSL è l’HTML. È un linguaggio per il dominio delle applicazioni web. Non può essere usato, per esempio, per l’elaborazione di numeri, ma è chiaro quanto sia ampiamente usato l’HTML sul web.
Un creatore di GPL non sa dove il linguaggio potrebbe essere usato o i problemi che l’utente intende risolvere con esso. Quindi, una GPL è creata con costrutti generici che potenzialmente sono utilizzabili per qualsiasi problema, soluzione, business o necessità. Java è una GPL, in quanto è usato su desktop e dispositivi mobili, incorporato nel web nei settori bancario, finanziario, assicurativo, manifatturiero, ecc. e altro ancora.
Classificazione dei DSL
Nel mondo dei DSL, ci sono due tipi di linguaggi:
- Linguaggio specifico del dominio (DSL): Il linguaggio in cui un DSL è scritto o presentato
- Linguaggio host: Il linguaggio in cui un DSL viene eseguito o elaborato
Un DSL scritto in un linguaggio distinto ed elaborato da un altro linguaggio host è chiamato un DSL esterno.
Questo è un DSL in SQL che può essere elaborato in un linguaggio ospite:
SELECT account
FROM accounts
WHERE account = '123' AND branch = 'abc' AND amount >= 1000
Per questo, un DSL potrebbe essere scritto in inglese con un vocabolario e una forma definiti che possono essere elaborati in un altro linguaggio ospite usando un generatore di parser come ANTLR:
if smokes then increase premium by 10%
Se il DSL e il linguaggio ospite sono gli stessi, allora il tipo di DSL è interno, dove il DSL è scritto nella semantica del linguaggio e processato da esso. Questi sono anche chiamati DSL incorporati. Ecco due esempi.
- Un DSL Bash che può essere eseguito in un motore Bash:
if today_is_christmas; then apply_christmas_discount; fi
Questo è un Bash valido che è scritto come l’inglese.
- Un DSL scritto in una GPL come Java:
orderValue = orderValue
.applyFestivalDiscount()
.applyCustomerLoyalityDiscount()
.applyCustomerAgeDiscount();Questo usa uno stile fluente ed è leggibile come l’inglese.
Sì, i confini tra DSL e GPL a volte sfumano.
Esempi di DSL
Alcuni linguaggi usati per DSL includono:
- Web: HTML
- Shell: sh, Bash, CSH, e simili per *nix; MS-DOS, Windows Terminal, PowerShell per Windows
- Linguaggi di markup: XML
- Modellazione: UML
- Gestione dei dati: SQL e le sue varianti
- Regole di business: Drools
- Hardware: Verilog, VHD
- Strumenti di costruzione: Maven, Gradle
- Calcolo numerico e simulazione: MATLAB (commerciale), GNU Octave, Scilab
- Vari tipi di parser e generatori: Lex, YACC, GNU Bison, ANTLR
Perché DSL?
Lo scopo di un DSL è di catturare o documentare i requisiti e il comportamento di un dominio. L’uso di un DSL potrebbe essere ancora più ristretto per aspetti particolari all’interno del dominio (ad esempio, il commercio di materie prime nella finanza). I DSL mettono insieme team tecnici e di business. Questo non implica che un DSL sia solo per uso aziendale. Per esempio, progettisti e sviluppatori possono usare un DSL per rappresentare o progettare un’applicazione.
Un DSL può anche essere usato per generare codice sorgente per un dominio o un problema affrontato. Tuttavia, la generazione di codice da un DSL non è considerata obbligatoria, poiché il suo scopo primario è la conoscenza del dominio. Tuttavia, quando viene usato, la generazione di codice è un serio vantaggio nell’ingegneria del dominio.
Pro e contro dei DSL
Sul lato positivo, i DSL sono potenti per catturare gli attributi di un dominio. Inoltre, poiché i DSL sono piccoli, sono facili da imparare e da usare. Infine, un DSL offre un linguaggio per gli esperti di dominio e tra gli esperti di dominio e gli sviluppatori.
Sul lato negativo, un DSL è usato strettamente all’interno del dominio e dello scopo previsto. Inoltre, un DSL ha una curva di apprendimento, anche se potrebbe non essere molto alta. Inoltre, anche se ci possono essere vantaggi nell’uso di strumenti per l’acquisizione di DSL, non sono essenziali, e lo sviluppo o la configurazione di tali strumenti è uno sforzo aggiuntivo. Infine, i creatori di DSL hanno bisogno di conoscenza del dominio così come di conoscenza dello sviluppo del linguaggio, e gli individui raramente hanno entrambi.
Opzioni software DSL
Le opzioni software DSL open source includono:
- Xtext: Xtext permette lo sviluppo di DSL ed è integrato con Eclipse. Rende possibile la generazione di codice ed è stato utilizzato da diversi prodotti open source e commerciali per fornire funzioni specifiche. MADS (Multipurpose Agricultural Data System) è un’idea interessante basata su Xtext per la “modellazione e analisi delle attività agricole” (tuttavia, il progetto sembra non essere più attivo).
- JetBrains MPS: JetBrains MPS è un ambiente di sviluppo integrato (IDE) per creare DSL. Si definisce un editor proiettivo che memorizza un documento come struttura ad albero astratta sottostante. (Questo concetto è usato anche da programmi come Microsoft Word.) JetBrains MPS supporta anche la generazione di codice in Java, C, JavaScript, o XML.
Migliori pratiche DSL
Vuoi usare un DSL? Ecco alcuni consigli:
- Le DSL non sono GPL. Cercate di affrontare una gamma limitata di problemi nel dominio definitivo.
- Non è necessario definire la propria DSL. Sarebbe noioso. Cercate un DSL esistente che risolva il vostro bisogno su siti come DSLFIN, che elenca DSL per il dominio della finanza. Se non riuscite a trovare un DSL adatto, potete definirne uno vostro.
- È meglio fare DSL “come l’inglese” piuttosto che troppo tecnici.
- La generazione di codice da un DSL non è obbligatoria, ma offre vantaggi significativi e produttivi quando viene fatta.
- I DSL sono chiamati linguaggi ma, a differenza dei GPL, non devono essere necessariamente eseguibili. Essere eseguibili non è l’intento di una DSL.
- Le DSL possono essere scritte con elaboratori di testi. Tuttavia, l’uso di un editor DSL rende più facile il controllo della sintassi e della semantica.