JetBrains MPS
Főnév
JetBrains MPS (tsz. JetBrains MPSs)
- (informatika) A JetBrains MPS (Meta Programming System) egy különleges, erőteljes fejlesztőeszköz, amelynek célja domain-specifikus nyelvek (DSL-ek) létrehozása, bővítése és integrálása. Ellentétben a legtöbb hagyományos IDE-vel, nem csak programokat lehet írni benne, hanem új nyelveket is lehet kitalálni és implementálni, majd más fejlesztők által is használhatóvá tenni.
🧠 Mi is az MPS?
A JetBrains MPS egy structure-based (strukturális szerkesztő), projectional editing-et alkalmazó környezet, amely eltér a klasszikus, karakteralapú szövegszerkesztéstől. Itt nem szöveget írsz, hanem absztrakt szintaxisfákat (AST – abstract syntax tree) manipulálsz egy vizuális szerkesztőben.
Ez azt jelenti, hogy a nyelv szintaxisa nem feltétlenül szövegalapú. Lehet például Excel-szerű, táblázatos, diagram-alapú, vagy akár saját, teljesen egyedi megjelenésű.
🎯 Mire használható?
JetBrains MPS-t tipikusan a következő területeken alkalmazzák:
- Domain-specific language (DSL) tervezés
- Saját szabályrendszerrel rendelkező modellező nyelvek
- Generált kód alapú fejlesztés
- Formális modellezés (például: állapotgépek, matematikai nyelvek)
- Compiler frontend fejlesztés (parsing helyett AST szerkesztés)
- Low-code / no-code eszközök backendje
🧰 Főbb jellemzők
| Funkció | Leírás |
|---|---|
| Projectional editing | Nem szöveget, hanem szintaxisfát szerkesztesz |
| DSL-ek definiálása | Saját nyelvek struktúrája, szintaxisa, típusrendszere, editora |
| Nyelvbővítés | Létező nyelvek bővítése új szintaktikai elemekkel |
| Code generation | A saját DSL-ekből kód generálható pl. Java, C, XML, SQL |
| Integráció más nyelvekkel | Cross-language editor, referenciák, validációk |
| Modularitás | Nyelvek modulárisan újrahasznosíthatók, kombinálhatók |
| IDE-szintű támogatás | Refaktorálás, navigáció, hibajelzés, autokomplettálás saját nyelvhez is |
🧱 Alapfogalmak MPS-ben
1. Language
Egy teljesen új nyelv (vagy nyelvkiterjesztés). A következő komponenseket tartalmazza:
- Structure: az AST szerkezete – hogyan néz ki egy program “belülről”
- Editor: hogyan jelenik meg a nyelvi elem a képernyőn
- Constraints: típusellenőrzés, szabályok, hogy mi érvényes
- Behavior: hogyan viselkednek az elemek (pl. evaluáció)
- Typesystem: típusok kezelése, típusellenőrzés
- Generator: hogyan generáljunk kódot (pl. Java kódot)
2. Model
Egy konkrét “program” vagy rendszer, amit az adott nyelven írsz.
3. Solution
Egy vagy több modell együttese, amelyek a nyelvet használják.
4. Module
Általános fogalom, amely lehet Language, Solution, vagy DevKit.
📐 Példa: Saját DSL létrehozása
Tegyük fel, hogy készíteni akarunk egy “Workflow DSL”-t. Ebben lépések (step), döntések (decision), ágak (branch) szerepelnek.
Lépések:
- Language létrehozása
workflow.dsl
- Structure definiálása
Step,Decision,Workflowosztályok
- Editor szerkesztése
Stepelem megjelenik:step: <name>
- Generator írása
- A DSL elemekből például Java kódot generálunk: minden
StepegyRunnable
- A DSL elemekből például Java kódot generálunk: minden
🛠️ Kódgenerálás
Minden DSL-elemhez megadhatjuk, hogy milyen más nyelvi kódot generáljon (pl. Java, XML).
Példa:
workflow "Example" {
step "Login"
decision "Authenticated?" {
yes -> step "Dashboard"
no -> step "Error"
}
}
Ez fordítás után például ilyen Java kóddá alakulhat:
if (user.isAuthenticated()) {
showDashboard();
} else {
showError();
}
🧪 Validáció és típusrendszer
Az MPS lehetőséget ad saját típusellenőrző szabályok írására. Például:
- A
Decisionelemnek mindig kétbranchága kell hogy legyen. - Egy
Step-nek csak egynextkapcsolata lehet.
Ezt az MPS typesystem DSL-ben lehet deklarálni.
📚 Integráció más nyelvekkel
- Az MPS képes Java API-t meghívni, Java kódot generálni, Java környezetben futni.
- Támogatja a nyelvek egymásba ágyazását is: pl. SQL kód egy DSL struktúrában.
- Több célnyelvre is generálhatunk: pl. Java backend + SQL lekérdezés.
💡 Hasznos képességek
- Versioning és diff támogatás AST szinten
- Live templates saját DSL-ekhez
- Nyelvi modulok újrafelhasználhatósága
- Nyelvkompozíció: meglévő nyelvek összeillesztése új DSL-ekhez
- Beépített hibakereső és validátor
📦 MPS vs hagyományos IDE
| Tulajdonság | JetBrains MPS | VS Code / IntelliJ |
|---|---|---|
| Szöveg alapú szerkesztés | ❌ (AST-alapú) | ✔️ |
| Saját nyelv definiálás | ✔️ strukturálisan | ✖️ |
| Nyelvkompozíció | ✔️ | ✖️ |
| Kódgenerálás irányítása | ✔️ (template engine) | Csak plugin szinten |
| Szokásos kódírás | ✔️ (Java, XML stb.) | ✔️ |
| Tanulási görbe | Meredek | Enyhébb |
📦 Telepítés és használat
- Letöltés: https://www.jetbrains.com/mps/
- Projekt létrehozása:
New Project→ Add Language + Solution
- Nyelv szerkesztése:
- Structure → Editor → Generator
- Program írása:
- Model/Solution modulban
- Generált kód megtekintése:
Generate→Show Generated Files
📚 Hasznos források
✅ Összefoglalás
A JetBrains MPS nem egy hagyományos kódszerkesztő – ez egy nyelvépítő eszköz, amely lehetővé teszi, hogy:
- Saját nyelveket hozz létre
- Más nyelvekkel ötvözd őket
- Strukturálisan szerkeszd és generáld a kódot
Ha például egy banknál, ipari cégnél vagy tudományos területen egyedi szabályrendszerek szerint működő szoftvert írsz, az MPS kiváló alap lehet egy domain-specifikus nyelv megvalósításához.
- JetBrains MPS - Szótár.net (en-hu)
- JetBrains MPS - Sztaki (en-hu)
- JetBrains MPS - Merriam–Webster
- JetBrains MPS - Cambridge
- JetBrains MPS - WordNet
- JetBrains MPS - Яндекс (en-ru)
- JetBrains MPS - Google (en-hu)
- JetBrains MPS - Wikidata
- JetBrains MPS - Wikipédia (angol)