Qual è la lingua specifica del dominio? Qualcuno lo sta usando? E in che modo?

StackOverflow https://stackoverflow.com/questions/809574

  •  03-07-2019
  •  | 
  •  

Domanda

Immagino che sto cercando una sorta di introduzione e vedere se qualcuno l'ha usato. Ci sono dei particolari vantaggi nell'usarlo?

Wikipedia:

  

linguaggio specifico del dominio (DSL) è un linguaggio di programmazione o un linguaggio di specifica dedicato a un particolare dominio problematico, una particolare tecnica di rappresentazione del problema e / o una particolare tecnica di soluzione.

Qualcuno può fornire esempi specifici di come lo hai implementato o di come può essere utile in un determinato scenario?

È stato utile?

Soluzione

Una lingua specifica del dominio è una lingua scritta per gestire un dominio specifico o una serie di preoccupazioni. Ce ne sono molti in giro, come make, ant e rake per la descrizione di build software o lexx e yacc per la costruzione del linguaggio. Negli ultimi anni, sono diventati popolari poiché alcune cose si sono combinate per renderle più facili da costruire. Grande tra queste cose è stata la crescente popolarità di Ruby, che ha diverse funzionalità che semplificano la creazione di nuovi DSL.

Martin Fowler è un grande sostenitore dell'idea, come qui .

Altri suggerimenti

Puoi pensare ai DSL come argomenti eccessivamente complessi per funzioni scritte in un linguaggio di programmazione più generale. Il vero linguaggio di programmazione analizza il codice DSL e fa qualcosa con esso, in genere, il codice DSL si concentra solo sul cosa che vuoi fare, e il sistema più grande capisce il come .

Esempi di DSL includono tutti i linguaggi di query (SQL, XPath, ...), tutti i linguaggi di template (Django, Smarty, ...), script di shell, in particolare cose come twill, un browser web basato sui comandi (usato principalmente per test automatizzati), archiviazione dei dati e lingue di scambio (XML, YAML, ...) e linguaggi dei documenti come LaTex, HTML o CSS.

Alcune lingue con sintassi molto flessibile come TCL e Lisp costruiscono il loro DSL direttamente nella lingua ... quando possibile. La maggior parte delle lingue usa stringhe, generalmente caricate da file esterni.

Ci sono dei vantaggi particolari nell'utilizzarli? Usarli per gli scopi previsti è molto vantaggioso al punto che ti rivolgerai a loro senza saperlo, proprio come hai usato (presumo) SQL o HTML senza pensarli come DSL.

Oserei dire che ci sono abbastanza DSL là fuori per qualsiasi tipo di applicazione di cui potresti aver bisogno; quasi sicuramente non hai bisogno di imparare a scriverne uno tuo.

(affrontando il nocciolo della domanda)

Penso che la prima volta che ho visto DSL da qualche parte e la sua definizione come " dominio lingua specifica " Ho anche pensato che fosse un linguaggio particolare, concreto di cui non avevo mai sentito parlare - ma, no, è un termine generale per le lingue su misura per una particolare area di applicazione.

Ironia della sorte, se avessi appena sentito parlare di TCL come " linguaggio di comando dello strumento " potresti pensare, come i DSL, che ci sarebbero molti TCL per vari strumenti - ma, no, è il nome specifico di un particolare linguaggio di scripting.

Penso che sia un linguaggio adatto a risolvere problemi per un dominio specifico. Potrebbe essere un linguaggio di elaborazione delle regole o un linguaggio di descrizione del servizio.

Un opposto a una lingua specifica di dominio (DSL) è una lingua di uso generale .

Un DSL è un buon modo per sviluppare un linguaggio da usare per i non programmatori. Ad esempio, se si dispone di una DSL per gli addetti alle finanze in un'azienda, quindi piuttosto che programmare secondo le loro specifiche, è possibile lasciare che scrivano il programma che vogliono fare. Quindi, se è troppo lento, puoi prendere ciò che hanno scritto che funziona come vogliono, scrivilo in un linguaggio compilato per accelerarlo.

Tutto è un DSL ...

Assemblatore: MOV da R1 a R2
Compilatori: dichiarazioni di assegnazione - A = A + 1, condizionali - IF (TRUE) ..., Branch - RITORNO
HTML: ... descrivi una struttura nidificata
TCP / IP: descrivi da / a indirizzi
PDF: descrivi il posizionamento di testo / immagine su carta
Caratteri: descrivi i personaggi

Qualsiasi lingua che utilizziamo per descrivere un processo specifico è una DSL. Sfortunatamente mancano le lingue specifiche del dominio per descrivere anche i nostri processi più elementari, quindi usiamo le poche lingue che dobbiamo descrivere tutto ciò che facciamo. " Comprimi tutti i file html nel mio sito web " richiede 300 righe di 3 o 4 lingue diverse per il completamento.

Per creare un DSL, determinare il numero minimo di caratteri necessari per descrivere un processo che è possibile ricordare e che non richiede documentazione. Ricorda che la velocità e la facilità d'uso sono i criteri di progettazione principali. L'analisi è così veloce che qualsiasi sintassi che usi va bene, preferisco il linguaggio naturale come la mia sintassi nella maggior parte dei casi, "Paga i dipendenti nel primo mese", ma specifico del dominio è proprio questo, specifico del dominio, determini la sintassi che si adatta meglio al problema.

Starei lontano dall'usare altre soluzioni che potrebbero essere utili ma che non si adattano al problema come l'HTML che è stato usato per definire i dati (XML). CSV è molto utile, si adatta alla maggior parte dei problemi. JSON non si adatta alla porzione di facilità d'uso, è eccessivo che aggiunge complicazioni inutili se CSV funziona per la maggior parte dei problemi. Usiamo EXCEL molto per DSL, funziona benissimo per descrivere piccoli problemi, sotto 65K a 1M righe, come strutture o menu ad albero, la colonna A è il livello, altre colonne sono icone, colori, etichette e simili (EXCEL è un CSV modificabile).

Ho scoperto che l'HTML non risolveva davvero il problema del layout di pagina, quindi mi sono liberato di esso e ho definito un DSL adatto. Ho definito 6 regioni nella pagina, HEADER, BODY, FOOTER, LEFT / RIGHT MARGINS e LEFT / RIGHT MARGINS FULL. Potrei quindi dire al generatore di pagine di aggiungere una BARRA DEL TITOLO, BARRA DI STATO, MENU, TABELLA, FORME, ..., a celle specifiche. Ciascuna di queste celle potrebbe quindi essere suddivisa in righe e colonne a qualsiasi profondità. Il layout della pagina richiede pochi secondi per qualsiasi stile.

BODY contiene una tabella dei miei dipendenti
HEADER contiene la didascalia della barra del titolo "Hello World" con accesso a Collins Software

Un DSL menu non si adatta al DSL del layout di pagina, quindi ho creato un DSL unico per i menu.

Risorsa il mio menu principale
* Definire: menù, m, livello, Etichetta, Icona, Azione;
m, 0, il file;
m, 1, open, open.gif, Dialog Open File;

Ogni problema è unico, il computer può usare qualsiasi formato, è l'essere umano per cui i DSL sono progettati, quindi rendilo comprensibile agli esseri umani, qualcosa che possono scrivere e rendere il linguaggio di parole reali; perché sono le persone, i luoghi e le cose reali che stiamo descrivendo.

Bene! ci sono molte cose spiegate sopra. Proverò a spiegarlo in un modo molto più semplice come capirà qualcuno come me.

Poiché le lingue di uso generale sono utilizzate per scopi estesi, il DSL è realizzato solo per un dominio specifico. Come HTML o CSS.

Puoi dire se hai scritto istruzioni su un documento che solo una persona o il tuo unico migliore amico può capire e nessun altro potrebbe capire. Quindi potrebbe essere un DSL. Ma se hai scritto istruzioni in termini che molte persone potrebbero capire e seguire, allora questo non è DSL.

Ho creato una scheda Switch per l'utente che potrebbe essere gestita tramite la porta seriale di un computer e l'utente desidera un programma per quella scheda che potrebbe essere eseguito su quella scheda e gli switch di relè verranno attivati ??e disattivati ??di conseguenza. Quindi ho scritto alcune istruzioni e ho detto all'utente di programmare quella scheda in base a queste istruzioni. Questo è un esempio di DSL. Non ho inventato una nuova lingua, ma ho semplicemente creato un mucchio di stringhe che il microcontrollore poteva leggere dalla EEPROM e che poteva analizzare di conseguenza e svolgere un compito specifico.

Ho scritto un breve post sul blog per discutere del motivo per cui mi piace usare i DSL:

Vorrei che Lingue specifiche del dominio utilizzate (DSL) Altro

In esso, definisco un DSL come:

  

Un piccolo linguaggio di programmazione appositamente progettato per comunicare soluzioni per un determinato settore di problemi.

In termini di utilizzo, se hai mai usato Ant, Structured Query Language (SQL) o Cascading Style Sheets (CSS), hai usato un DSL.

Mi piace usare le DSL perché si concentrano sulla facilitazione della comunicazione di soluzioni a specifici spazi problematici e lo fanno in un modo che promuove l'inclusione di esperti di dominio.

Un semplice esempio di DSL (Domain Specific Language) è l'HTML che viene utilizzato per quel particolare dominio chiamato applicazioni basate sul Web.

Di recente ho sentito DSL ma trovo un esempio davvero utile: LUNA (ex lunascript).

È un linguaggio / framework di programmazione personalizzato creato dal team Asana per la propria piattaforma.

Come ho scoperto, molte aziende creano i propri framework e linguaggi per creare un adeguato vantaggio competitivo, alcuni esempi sono:

  • SAP con AbAp
  • PeopleSoft con PeopleCode
  • Apple con Objective-C
  • Facebook ha cose come FBML e FQL

Questi sono specifici del dominio perché li userai quasi esclusivamente per lavorare su queste piattaforme.

Spero che questa risposta ti aiuti a chiarire il concetto.

Un esempio di DSL utilizzato in Machine Learning è patsy in python: https://patsy.readthedocs.io/en/latest/formulas.html#

che si basa sulla formula DSL di R: https://stat.ethz.ch/ R-manuale / R-devel / library / statistiche / html / formula.html

https://cran.r-project.org /web/packages/Formula/vignettes/Formula.pdf

e Hadley ha una bella sezione del suo libro R avanzato che descrive come costruire un DSL con R: http://adv-r.had.co.nz/dsl.html

Una volta che il campo di apprendimento profondo si è stabilizzato in qualche modo (o anche ora), mi piacerebbe vedere qualcosa di simile emergere nel progetto Apache MXnet. Tuttavia, non ho ancora visto alcuna proposta in merito a ancora la pagina della proposta però.

DSL - DomainSpecificLanguage

  

DSL è un linguaggio informatico mirato a un particolare tipo di problema, piuttosto che un linguaggio generico destinato a qualsiasi tipo di problema software.

Dove: configurazioni (TravisCI .yaml), build script ( gradle ), dipendenze degli obiettivi (< a href = "https://guides.cocoapods.org/syntax/podspec.html" rel = "nofollow noreferrer"> pod ), programmazione UI ( Anko ) ecc.

DSL è una programmazione dichiarativa - Cosa fare invece come fare

DSL esterni hanno una propria sintassi personalizzata e si scrive un parser completo per elaborarli (ad es. XML, RegExp, SQL, HTML, CSS, UML).

DSL interni sono modi particolari di utilizzare una lingua host per dare alla lingua host la sensazione di una lingua particolare (ad esempio Lisp, Ruby, annotazioni Java, macro).

Leggi di più qui , qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top