Una lingua dedicata (in inglese, lingua specifica del dominio o DSL ) è un linguaggio di programmazione le cui specifiche sono progettate per soddisfare i vincoli di uno specifico campo di applicazione . Concettualmente è opposto ai linguaggi di programmazione classici (o generalisti) come Java o C , che tendono a trattare con un insieme di domini. Tuttavia, non c'è consenso che definisca esattamente cosa sia una lingua dedicata. Questa mancanza di una definizione precisa della natura di una lingua dedicata rende difficile il compito di stabilire una chiara storia dell'origine del concetto.
Nell'informatica, i linguaggi dedicati trattano vari campi informatici (piloti di computer, informatica scientifica, database) o si occupano di vari altri campi in cui è coinvolta l'informatica ( medicina , aeronautica ). L'uso di una lingua dedicata non è specifica per i computer, ci sono lingue dedicate ai campi della medicina, della cucina, ecc. .
La costruzione di lingue dedicate è fondamentalmente diversa da quella di una lingua classica. Il processo di sviluppo può essere molto complesso. Il suo design richiede una doppia competenza nel campo da trattare e nello sviluppo IT. Che si tratti di un linguaggio interno o esterno dedicato, l'implementazione di questo tipo di linguaggio richiede l'uso di un modello di progettazione . Esistono modelli di progettazione che descrivono l'implementazione come descritto da Spinellis e descrivono invece le fasi di sviluppo del linguaggio. Questi due approcci, sebbene basati su idee diverse, si completano a vicenda.
L'utilizzo di linguaggi dedicati presenta vantaggi e svantaggi rispetto all'utilizzo di linguaggi generali. La giustificazione per l'uso di lingue dedicate può essere basata su considerazioni tecnologiche o finanziarie. D'altra parte, i vantaggi e gli svantaggi non sono gli stessi sia che si tratti di un linguaggio dedicato interno o esterno.
Esistono lingue dedicate in aree diverse dall'informatica. I più famosi sono in particolare:
Possiamo anche trovare dizionari dedicati alla lingua della medicina, della cucina, della filosofia, ecc. .
Una lingua dedicata a un dominio (in inglese : lingua specifica del dominio "o DSL) fornisce una notazione orientata a questo dominio dell'applicazione. Si basa sui concetti e sulle funzionalità del dominio in questione. In quanto tale, un linguaggio dedicato è un modo efficiente per descrivere e generare programmi in un'area specifica.
Secondo Gilles Muller, un linguaggio dedicato è un linguaggio di programmazione specifico per una famiglia di problemi definiti "dominio". Consente al programmatore di assicurarsi di costruire un linguaggio appropriato e che questo linguaggio soddisfi i requisiti specifici del dominio di destinazione.
Un'ulteriore definizione è data da Deursen, Klint e Visser. Un linguaggio dedicato è un linguaggio di programmazione o un linguaggio di specifica eseguibile che offre, attraverso notazioni e astrazioni appropriate , un potere espressivo focalizzato e generalmente limitato a un dominio specifico.
Esistono due tipi di lingue dedicate: lingue interne dedicate, chiamate anche lingue incorporate, o lingue incorporate (in inglese : lingua incorporata specifica del dominio o DSEL) e lingue dedicate esterne.
I primi sono destinati ad essere utilizzati all'interno del codice sorgente di un programma, espresso altrove in un'altra lingua denominata lingua host. Le lingue che si prestano bene alla ricezione di un linguaggio incorporato sono ad esempio: Lisp, Haskell, Tcl ...
Questi ultimi non sono intesi per ulteriori espressioni in un'altra lingua. I codici sorgente dei programmi che consentono di implementare sono autonomi e indipendenti da qualsiasi altro linguaggio di programmazione.
Secondo Watt, la lingua dedicata deve avere determinati criteri:
Un linguaggio dedicato può evolversi secondo l'evoluzione stessa del campo di applicazione. Succede anche che un linguaggio dedicato si evolva fino a diventare un linguaggio di programmazione generalista.
I campi di applicazione dei linguaggi dedicati sono molto vari. Queste lingue sono nondimeno create per eseguire un compito specifico. Gli esempi di utilizzo riportati di seguito sono solo una piccolissima parte dei campi di applicazione dei linguaggi dedicati.
Esempio di generazione di pagine web con HTML e PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <!-- entre les balises <?php ?>, du code PHP inclus dans du code HTML --> <title><?php echo 'Hello World'; ?></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <!-- entre les balises <?php ?>, du code PHP inclus dans du code HTML --> <p><?php echo 'Hello World'; ?></p> </body> </html>Esempio di query SQL in PHP.
<?php // Requete SQL à l'intérieur d'une variable PHP $query = "SELECT id, name FROM products ORDER BY name ;"; // PostgreSQL $result = pg_query($conn, $query); // MySQL $result = mysql_query($query); ?>Non esiste una vera storia sulle lingue dedicate perché non esiste un vero consenso su una definizione esatta.
I primi linguaggi di programmazione ( Cobol , Lisp , Fortran ) sono essi stessi considerati linguaggi dedicati sebbene non siano denominati come tali. Questi primi linguaggi di programmazione erano, infatti, dedicati a un dominio di applicazione. Con lo sviluppo delle possibilità applicative, le lingue hanno avuto la tendenza a diffondersi. Allo stesso tempo, continuava a farsi sentire la necessità di lingue specializzate per risolvere esigenze specifiche. Sono state trovate diverse soluzioni:
Il termine "lingua dedicata" sarebbe apparso per la prima volta in Settembre 1984, in una pubblicazione di JM Neighbors. Troviamo quindi l'idea di linguaggio dedicato con nomi diversi, in particolare “petit langue” ( Little language ) o anche “micro language” nel 1986. Nel 1996 è stata implementata una concettualizzazione del linguaggio dedicato. Gli autori discutono in particolare il punto di vista di adottare l'approccio tra "dominio come un mondo reale" ( dominio come un mondo reale ) o l'approccio del "dominio come un insieme di sistemi" ( dominio come un insieme di sistemi ) per modellare un linguaggio.
La realizzazione di linguaggi dedicati è fondamentalmente diversa da quella dei linguaggi di programmazione tradizionali. Il processo di sviluppo può essere molto complesso. Richiede esperienza nel campo in questione, ma anche conoscenza nel campo della progettazione del linguaggio di programmazione.
In pratica, lo sviluppo di un linguaggio dedicato non è un semplice processo sequenziale ma un processo iterativo. Affinché il linguaggio sia il più vicino possibile al dominio di destinazione, la costruzione richiede o una doppia competenza (del dominio applicativo e della programmazione del linguaggio), oppure una stretta collaborazione tra il team di programmatori e gli esperti del settore trattato dominio.
Diomidis Spinellis (en) e Anthony M Sloane offrono modelli di design del linguaggio dedicati.
Il metodo di caratterizzazione di un linguaggio dedicato specifica che deve essere descritto secondo due sintassi:
Deve essere costruito utilizzando queste due parti, iniziando con l'albero della sintassi astratta e completando con uno o più rami della sintassi concreta.
I pattern di Spinelli sono principalmente legati all'implementazione di linguaggi dedicati, a differenza dei pattern di Sloane che classificano le fasi di sviluppo e costruzione di un linguaggio dedicato. Spinellis offre otto modelli di progettazione per linguaggi dedicati, classificati in tre tipi:
Modelli strutturali ( linguaggi incorporati ( piggyback ) ) Questi modelli sono interessati alle interazioni tra la lingua dedicata e le altre lingue. Offre un linguaggio di programmazione come host di linguaggio dedicato. Modelli comportamentali ( pipeline ) Questi modelli mirano a risolvere i problemi di composizione di linguaggi dedicati. Un sistema può essere descritto utilizzando una famiglia di linguaggi dedicati a strati, la pipeline è più precisamente l'elemento in cui si suddividono l'esecuzione e l'esecuzione delle istruzioni di questa famiglia di linguaggi dedicati. Modelli creativi I linguaggi dedicati sono quindi veri e propri linguaggi di programmazione caratterizzati da una propria sintassi e semantica. La descrizione della sintassi, del design e dell'implementazione di questi linguaggi corrisponde ai sei modelli creativi di Spinelli: Elaborazione lessicale ( elaborazione lessicale ) Questo modello di elaborazione lessicale creativa offre un modo efficiente per progettare e implementare la sintassi di linguaggi dedicati; Estensione della lingua ( estensione della lingua ) Questo modello viene utilizzato per aggiungere nuove funzionalità a una lingua dedicata esistente. Spesso un linguaggio esistente può soddisfare efficacemente una nuova esigenza con l'aggiunta di alcune nuove funzionalità al suo kernel che lo rendono un linguaggio di base; Lingua di specializzazione ( specializzazione linguistica ) Questo modello elimina o modifica le caratteristiche di una lingua di base (o generalista) per formare una lingua dedicata; Trasformazione da sorgente a sorgente (trasformazione da sorgente a sorgente ) Il programma linguistico dedicato viene tradotto in un programma equivalente in una lingua generale rendendo così possibile riutilizzare tutti gli strumenti legati a questa lingua senza doverli modificare; Rappresentazione delle strutture dati ( Struttura di rappresentazione dei dati ) Strutture complesse a volte sono difficili da esprimere, la progettazione di un linguaggio dedicato è una soluzione interessante per rappresentare dati e strutture complesse; Sistema frontale ( sistema front-end ) Questo pattern gestisce la configurazione e l'adattamento delle funzionalità del sistema di linguaggi dedicati in modo da essere limitato a quello necessario per creare una data applicazione. Modelli di SloaneLa progettazione di un linguaggio dedicato è un compito difficile, ci sono molti approcci principalmente legati ai vincoli del dominio. Diverse classificazioni sono state proposte per comprendere meglio le motivazioni ei limiti di ciascuna di queste concezioni, come i modelli Sloane che sono classificati in base alle fasi di sviluppo del linguaggio. Le diverse fasi dello sviluppo di Sloane sono le seguenti:
Oltre alle specificità delle diverse lingue, l'uso di una lingua dedicata rispetto all'uso di lingue generaliste presenta vantaggi e svantaggi.
Vedere Questioni economiche per ulteriori informazioni sulle implicazioni economiche.
Vantaggi delle lingue interne dedicate
Vantaggio di linguaggi dedicati esterni
L'uso di linguaggi dedicati a un dominio coinvolge varie questioni economiche, come il suo costo di apprendimento e il suo costo di mantenimento.
Una delle questioni economiche riguarda il tempo per l'apprendimento delle lingue. Il costo dell'apprendimento di una lingua generale, infatti, può essere più facilmente ammortizzato moltiplicando i campi di applicazione trattati. Nel caso di una lingua dedicata, il campo di smorzamento è inferiore a seconda del campo di applicazione. È necessario essere in grado di misurare il guadagno di produttività generato dal suo utilizzo e determinare in che misura questo guadagno compensa il tempo di apprendimento.
D'altra parte, viene discusso anche l'uso di lingue dedicate nell'insegnamento. È possibile offrire l'apprendimento di una lingua dedicata, che gli studenti potrebbero utilizzare per apprendere altre lingue generali. È inoltre possibile offrire l'apprendimento di più lingue generaliste per poter poi utilizzare linguaggi dedicati a seconda del campo di applicazione.
L'uso di un linguaggio dedicato ne implica l'implementazione. Anche il costo iniziale dello sviluppo del linguaggio deve essere preso in considerazione quando si misura l'impatto economico. Paul Hudak (en) propone un approccio per limitare questo costo iniziale. Questo approccio si basa su linguaggi dedicati incorporati (interni). Il principio è sfruttare l'infrastruttura e gli strumenti dell'ambiente di sviluppo di un linguaggio generalista.
Una delle sfide economiche è la manutenibilità dei programmi prodotti, così come la possibilità di sviluppo del linguaggio. In effetti, il costo per mantenere una lingua dedicata è inferiore a quello di una lingua generale.
(it) Modellazione del dominio dell'organizzazione: Rapporto tecnico STARS-VC-A025 / 001/00, Synquiry Technologies,1996, 509 p. ( leggi online )