Un limbaj dedicat (în engleză, limbaj specific domeniului sau DSL ) este un limbaj de programare ale cărui specificații sunt concepute pentru a satisface constrângerile unui anumit domeniu de aplicație . Conceptual se opune limbajelor de programare clasice (sau generaliste) precum Java sau C , care tind să se ocupe de un set de domenii. Cu toate acestea, nu există un consens care să definească exact ce este un limbaj dedicat. Această lipsă a unei definiții precise a naturii unui limbaj dedicat face dificilă sarcina de a stabili o istorie clară a originii conceptului.
În IT, limbile dedicate se ocupă de diverse domenii IT (piloți IT, calcul științific, baze de date) sau se ocupă de diferite alte domenii în care este implicat IT ( medicină , aeronautică ). Utilizarea unui limbaj dedicat nu este specifică computerelor, există limbaje dedicate domeniilor medicinei, gătitului etc. .
Construcția limbajelor dedicate este fundamental diferită de cea a unui limbaj clasic. Procesul de dezvoltare poate fi foarte complex. Proiectarea sa necesită abilități duale în domeniu pentru a fi tratate și în dezvoltarea IT. Fie că este vorba de un limbaj intern sau extern dedicat, implementarea acestui tip de limbaj necesită utilizarea unui model de proiectare . Există modele de proiectare care descriu implementarea așa cum este descrisă de Spinellis și în schimb descriu etapele dezvoltării limbajului. Aceste două abordări, deși bazate pe idei diferite, se completează reciproc.
Utilizarea limbilor dedicate are avantaje și dezavantaje în comparație cu utilizarea limbilor generale. Justificarea utilizării limbajelor dedicate se poate baza pe considerente tehnologice sau financiare. Pe de altă parte, avantajele și dezavantajele nu sunt aceleași, fie că este vorba de un limbaj intern sau extern dedicat.
Există limbi dedicate în alte domenii decât informatica. Cele mai faimoase sunt în special:
De asemenea, putem găsi dicționare dedicate limbii medicinei, gătitului, filosofiei etc. .
O limbă dedicată unui domeniu (în engleză : domain-specific language "sau DSL) oferă o notație orientată către acest domeniu de aplicație. Se bazează pe conceptele și funcționalitatea domeniului în cauză. Ca atare, un limbaj dedicat este un mod eficient de a descrie și genera programe într-o anumită zonă.
Potrivit lui Gilles Muller, un limbaj dedicat este un limbaj de programare specific unei familii de probleme date numită „domeniu”. Permite programatorului să se asigure că construiește un limbaj adecvat și că acest limbaj îndeplinește cerințele specifice domeniului vizat.
O altă definiție este dată de Deursen, Klint și Visser. Un limbaj dedicat este un limbaj de programare sau un limbaj de specificație executabil care oferă, prin notații și abstractizări adecvate , putere expresivă axată pe, și în general limitată la, un domeniu specific.
Există două tipuri de limbi dedicate: limbi interne dedicate, numite și limbi încorporate, sau limbi încorporate (în engleză : limbă încorporată specifică domeniului sau DSEL) și limbi externe dedicate.
Primele sunt destinate a fi utilizate în codul sursă al unui program, exprimat în altă parte într-o altă limbă denumită limbă gazdă. Limbile care se pretează bine la recepția unui limbaj încorporat sunt, de exemplu: Lisp, Haskell, Tcl ...
Acestea din urmă nu sunt destinate expresiei suplimentare într-o altă limbă. Codurile sursă ale programelor pe care le permit implementarea sunt autonome și independente de orice alt limbaj de programare.
Potrivit lui Watt, limbajul dedicat trebuie să aibă anumite criterii:
Un limbaj dedicat poate evolua în funcție de evoluția domeniului de aplicare. De asemenea, se întâmplă ca un limbaj dedicat să evolueze pentru a deveni un limbaj de programare generalist.
Domeniile de aplicare a limbilor dedicate sunt foarte variate. Aceste limbi sunt totuși create pentru a îndeplini o sarcină specifică. Exemplele de utilizare de mai jos sunt doar o foarte mică parte a câmpurilor de aplicare a limbilor dedicate.
Exemplu de generare de pagini web cu HTML și 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>Exemplu de interogare SQL în 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); ?>Nu există o istorie reală a limbilor dedicate, deoarece nu există un consens real cu privire la o definiție exactă.
Primele limbaje de programare ( Cobol , Lisp , Fortran ) sunt ele însele considerate a fi limbaje dedicate, deși nu sunt denumite ca atare. Aceste prime limbaje de programare au fost, de fapt, dedicate unui domeniu de aplicație. Odată cu dezvoltarea posibilităților de aplicare, limbile au avut tendința de a se răspândi. În același timp, a continuat să se simtă nevoia de limbaje specializate pentru a rezolva nevoi specifice. Au fost găsite mai multe soluții:
Termenul „limbaj dedicat” ar fi apărut pentru prima dată în Septembrie 1984, într-o publicație a JM Neighbours. Apoi am găsit ideea de limbaj dedicat , sub diferite nume, în special „petit langue“ ( limbaj Mica ) sau chiar „limba micro“ , în 1986. În 1996, o conceptualizare a limbajului dedicat a fost pusă în aplicare. Autorii discută în special viziunea de a adopta abordarea dintre „domeniul ca o lume reală” ( domeniul ca o lume reală ) sau abordarea „domeniului ca un set de sisteme” ( domeniul ca un set de sisteme ) pentru a modela un limba.
Realizarea limbajelor dedicate este fundamental diferită de cea a limbajelor de programare tradiționale. Procesul de dezvoltare poate fi foarte complex. Necesită expertiză în domeniul în cauză, dar și cunoștințe în domeniul proiectării limbajului de programare.
În practică, dezvoltarea unui limbaj dedicat nu este un simplu proces secvențial, ci un proces iterativ. Pentru ca limbajul să fie cât mai apropiat de domeniul vizat, construcția necesită fie o dublă abilitate (a domeniului aplicației și a programării limbajului), fie o colaborare strânsă între echipa de programatori și experții celor tratați domeniu.
Diomidis Spinellis (ro) și Anthony M Sloane oferă modele dedicate de proiectare a limbajului.
Metoda de caracterizare a unui limbaj dedicat specifică faptul că acesta trebuie descris în conformitate cu două sintaxi:
Acesta trebuie construit folosind aceste două părți, începând cu arborele sintaxei abstracte și completând cu una sau mai multe ramuri ale sintaxei concrete.
Modelele Spinellis sunt legate în principal de implementarea limbajelor dedicate, spre deosebire de modelele Sloane care clasifică fazele de dezvoltare și construcție a unui limbaj dedicat. Spinellis oferă opt modele de design pentru limbi dedicate, clasificate în trei tipuri:
Modele structurale ( limbi încorporate ( piggyback ) ) Aceste tipare sunt interesate de interacțiunile dintre limba dedicată și celelalte limbi. Oferă un limbaj de programare ca gazdă dedicată. Modele comportamentale ( conductă ) Aceste tipare vizează rezolvarea problemelor de compoziție a limbajelor dedicate. Un sistem poate fi descris prin utilizarea unei familii de limbi dedicate în straturi, conducta este mai precis elementul în care sunt împărțite execuția și execuția instrucțiunilor acestei familii de limbi dedicate. Tipare creative Limbajele dedicate sunt, prin urmare, limbaje reale de programare caracterizate prin sintaxa și semantica lor. Descrierea sintaxei, proiectării și implementării acestor limbaje corespunde celor șase tipare creative ale Spinellis: Prelucrare lexicală ( Prelucrare lexicală ) Acest model de procesare lexicală creativă oferă o modalitate eficientă de a proiecta și implementa sintaxa limbajelor dedicate; Extensie de limbă ( Extensie de limbă ) Acest model este utilizat pentru a adăuga funcționalități noi unui limbaj dedicat existent. Adesea, un limbaj existent poate servi în mod eficient unei noi nevoi cu adăugarea unor noi funcționalități la nucleul său, care îl fac un limbaj de bază; Limba de specializare ( Specializare lingvistică ) Acest model elimină sau modifică caracteristicile unui limbaj de bază (sau generalist) pentru a forma un limbaj dedicat; Transformare sursă-sursă (transformare sursă-sursă ) Programul de limbă dedicat este tradus într-un program echivalent într-o limbă generală, făcând astfel posibilă reutilizarea tuturor instrumentelor legate de acest limbaj fără a fi nevoie să le modificați; Reprezentarea structurilor de date ( Structura de reprezentare a datelor ) Structurile complexe sunt uneori dificil de exprimat, proiectarea unui limbaj dedicat este o soluție interesantă pentru a reprezenta date și structuri complexe; Sistem frontal ( sistem frontal ) Acest model gestionează configurarea și adaptarea funcționalităților sistemului de limbi dedicate pentru a fi limitat la cele necesare pentru a crea o aplicație dată. Modelele lui SloaneProiectarea unui limbaj dedicat este o sarcină dificilă, există multe abordări legate în principal de constrângerile domeniului. Au fost propuse mai multe clasificări pentru a înțelege mai bine motivațiile și limitele fiecăreia dintre aceste concepții, cum ar fi modelele Sloane care sunt clasificate în funcție de fazele dezvoltării limbajului. Diferitele faze ale dezvoltării lui Sloane sunt următoarele:
În afară de specificitățile diferitelor limbi, utilizarea unui limbaj dedicat în comparație cu utilizarea limbajelor generaliste are avantaje și dezavantaje.
Consultați Probleme economice pentru mai multe despre implicațiile economice.
Avantajele limbajelor interne dedicate
Avantajul limbajelor dedicate externe
Utilizarea limbilor dedicate unui domeniu implică diverse probleme economice, cum ar fi costul de învățare și costul de întreținere.
Una dintre problemele economice se referă la timpul petrecut în învățarea limbii. Într-adevăr, costul învățării unei limbi generale poate fi amortizat mai ușor prin multiplicarea câmpurilor de aplicație tratate. În cazul unui limbaj dedicat, câmpul de amortizare este mai mic în funcție de domeniul de aplicare. Este necesar să se poată măsura câștigul de productivitate generat de utilizarea sa și să se determine în ce măsură acest câștig compensează timpul de învățare.
Pe de altă parte, se discută și utilizarea limbilor dedicate în educație. Este posibil să se ofere învățarea unei limbi dedicate, pe care elevii ar putea să o folosească pentru a învăța alte limbi generale. De asemenea, este posibil să se ofere învățarea mai multor limbi generale pentru a putea apoi folosi limbi dedicate în funcție de domeniul de aplicare.
Utilizarea unui limbaj dedicat implică implementarea acestuia. Costul inițial al dezvoltării limbajului trebuie luat în considerare și la măsurarea impactului economic. Paul Hudak (ro) propune o abordare pentru a limita acest cost inițial. Această abordare se bazează pe limbaje dedicate încorporate (interne). Principiul este de a profita de infrastructura și instrumentele mediului de dezvoltare al unui limbaj general.
Una dintre provocările economice este menținerea programelor produse, precum și posibilitatea dezvoltării limbajului. De fapt, costul menținerii unui limbaj dedicat este mai mic decât cel al unui limbaj general.
(ro) Modelarea domeniului organizației: Raport tehnic STARS-VC-A025 / 001/00, Synquiry Technologies,1996, 509 p. ( citește online )