domain-specific language
Főnév
domain-specific language (tsz. domain-specific languages)
- (informatika) A domain-specific language (röviden: DSL) olyan programozási vagy leíró nyelv, amelyet egy adott probléma- vagy alkalmazási terület (ún. domain) megoldására terveztek. Szemben az általános célú programozási nyelvekkel (például C++, Python vagy Java), a DSL-ek szűkebb körű feladatokra fókuszálnak, és kifejezetten ezek hatékony, expresszív és olvasható kezelésére szolgálnak.
1. DSL típusai
a) Leíró DSL-ek (declarative DSL)
Ezeket arra használják, hogy leírják egy rendszer viselkedését, szerkezetét vagy konfigurációját anélkül, hogy konkrét utasításokat adnánk a végrehajtásra.
Példák:
- HTML – a weboldalak szerkezetének leírására szolgál.
- SQL – adatbázis-lekérdezésekre.
- CSS – stílusok leírására.
b) Eljárásorientált DSL-ek (imperative DSL)
Itt a hangsúly a műveletek sorrendiségén van: hogyan hajtsunk végre bizonyos lépéseket.
Példák:
- Makefile – fordítási szabályok meghatározása.
- Gradle DSL – Java projekt fordítási lépéseinek definiálása.
2. DSL vs Általános célú nyelvek (GPL)
| Jellemző | DSL | GPL |
|---|---|---|
| Cél | Egy adott feladatra | Széleskörű programozási célokra |
| Tanulási görbe | Alacsony, a domain ismeretében | Magasabb |
| Rugalmasság | Korlátozott | Magas |
| Kifejezőkészség a domainre | Nagyon jó | Általános |
3. DSL példák különböző területeken
| Terület | DSL példa | Funkció |
|---|---|---|
| Web | HTML, CSS | Struktúra és stílus |
| Adatbázis | SQL | Adatlekérdezés és -manipuláció |
| Build rendszerek | Makefile, Gradle, Ant | Fordítás, csomagolás |
| Hálózat | Cisco IOS CLI, Junos CLI | Eszközkonfiguráció |
| Hardver | VHDL, Verilog | Hardvertervezés |
| Machine Learning | Keras DSL (Python belül) | Modellek deklarálása |
4. DSL-ek előnyei
- Egyszerűség: A célközönség (nem programozók is) számára is érthető lehet.
- Expresszivitás: A DSL nyelvi elemei gyakran megfelelnek a domain fogalmainak, így könnyen olvasható és írható.
- Hatékonyság: Gyors fejlesztést tesz lehetővé egy szűk feladatra.
- Kevés hiba: A korlátozott nyelvi eszköztár csökkenti a hibázás lehetőségét.
5. DSL-ek hátrányai
- Korlátozott felhasználhatóság: Általában nem alkalmasak más feladatokra.
- Fenntarthatóság: Egy saját DSL hosszú távú karbantartása költséges lehet.
- Tanulási igény: Bár egyszerűek, új szintaxisok megtanulását igényelhetik.
- Integráció: Külső rendszerekkel való összekapcsolása nehézkesebb lehet.
6. Internal vs External DSL
a) Internal DSL
Egy meglévő általános célú nyelv (például Python, Ruby, Scala) szintaxisán belül valósítja meg a DSL-t.
Példa:
# példa belső DSL-re (DSL a Pythonban)
from sqlalchemy import Table, Column, Integer
user = Table('user', metadata,
Column('id', Integer, primary_key=True),
Column('name', String))
b) External DSL
Saját szintaxisú, önálló nyelv. Külön parserrel, fordítóval vagy interpreterrel rendelkezik.
Példa:
SELECT name FROM users WHERE age > 18;
7. DSL-ek megvalósítása
a) Interpreter
A DSL közvetlen értelmezése (pl. regex motor, SQL interpreter).
b) Fordító (compiler)
A DSL programot lefordítja egy másik nyelvre (pl. JavaScript generátor egy sablon DSL-ből).
c) Parser generátorok
Lex/Yacc, ANTLR, vagy más parsergenerátorok segítségével könnyen létrehozhatók saját DSL-ek.
8. Mikor érdemes DSL-t használni?
- Ha a célcsoport nem programozó (pl. doménszakértők).
- Ha a feladat jól körülhatárolt és gyakran ismétlődik.
- Ha fontos az olvashatóság és egyszerűség.
- Ha egy komplex rendszer egy részét le akarjuk választani és izolálni.
9. DSL-ek a gyakorlatban
- Terraform (DSL a felhőinfrastruktúra kezelésére):
resource "aws_instance" "web" {
ami = "ami-123456"
instance_type = "t2.micro"
}
- Dockerfile (konténer konfiguráció DSL):
FROM python:3.8
COPY . /app
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
- GraphQL lekérdezések (DSL az API kommunikációhoz):
query {
user(id: "123") {
name
email
}
}
10. DSL-ek jövője
A modern szoftverfejlesztés egyre inkább specializálódik. A Low-code / No-code irányzatok terjedésével egyre több domain-specifikus megoldás jelenik meg, sokszor DSL formájában – akár vizuálisan is. A DSL-ek kulcsszerepet játszanak a model-driven development, a configuration-as-code és a declarative programming területein.
Összefoglalás
A domain-specific language egy olyan nyelv, amelyet egy konkrét alkalmazási területre terveztek. Hatékonyabbá, olvashatóbbá és fenntarthatóbbá teszi a fejlesztést ezen a szűk területen. Bár korlátozottabb, mint egy általános célú nyelv, előnyei ott érvényesülnek igazán, ahol a célterület jól definiált, és ismétlődő vagy konzisztens logikát kíván meg. A jövő szoftveres architektúráiban a DSL-ek valószínűleg még hangsúlyosabb szerepet kapnak – különösen az automatizálás és infrastruktúra menedzsment területein.
- domain-specific language - Szótár.net (en-hu)
- domain-specific language - Sztaki (en-hu)
- domain-specific language - Merriam–Webster
- domain-specific language - Cambridge
- domain-specific language - WordNet
- domain-specific language - Яндекс (en-ru)
- domain-specific language - Google (en-hu)
- domain-specific language - Wikidata
- domain-specific language - Wikipédia (angol)