2010-04-08 18 views
43

Ho usato Eclipse Xtext in diversi progetti. Mi è piaciuta la facilità di definire una grammatica su un modello di Ecore (meta) e di lasciare tutto generato per te incluso l'editor di plugin Eclipse, ma ero piuttosto a disagio con il sottostante EMF framework con tutto cablato nei campi statici.Quali sono le principali differenze tra MPS e Eclipse Xtext di Jetbrains?

Ultimamente mi sono imbattuto in MPS (Meta Programming System) di Jetbrains. È basato su una filosofia completamente diversa. Mentre Xtext è per creare DSL basati su testo che generano un parser per te (e per istanziare quegli EObject), nella lingua creata da MPS si modifica direttamente la struttura del modello sottostante. Finora ho capito.

Qualcuno ha esperienza con entrambi questi strumenti DSL per evidenziare le principali differenze in termini di lavoro con loro, casi d'uso previsti e pubblico, complessità, curva di apprendimento (per essere onesti, per iniziare a usare Xtext si dovrebbe sapere molto sull'intestino di EMF), generazione di codice ecc.?

risposta

49

Xtext è un approccio basato su parser tradizionale che funziona con file di testo ordinari. Questi possono essere spediti, archiviati e confrontati con qualsiasi sistema di controllo di versione e persino modificati al di fuori dell'editor usando il tuo strumento a riga di comando preferito. Si integra strettamente in Eclipse EMF e funziona molto bene con un sacco di strumenti che puoi trovare nell'ecosistema Eclipse. Recentemente, si è evoluto (e lo sta ancora facendo) in una sorta di "toolkit di sviluppo del linguaggio di programmazione" in cui consente di supportare tutti i tipi di strumenti aggiuntivi.

MPS sull'altro lato funziona con un editor basato sulla proiezione che "sembra" come un testo mentre si lavora all'interno dell'ambiente. Il formato di archiviazione sottostante è specifico dello strumento (leggi: inutilizzabile senza programmi speciali) e non analizza i file di testo. Questo offre alcuni grandi vantaggi come l'incorporamento di arbitrari linguaggi (ad esempio Regex all'interno di SQL all'interno di Java). La toolchain abilita la generazione in forma di modello per modellare trasformazioni che, come l'editor, all'inizio si sentono insolite ma anche potenti.

Entrambi gli strumenti ti bloccano in qualche modo nel loro mondo (MPS/Eclipse). Anche se è possibile eseguire entrambi in modalità headless, non è possibile avviare facilmente l'editor Xtext all'interno di un altro IDE. Lo stesso vale per MPS. Direi che Xtext è "più aperto", dal momento che funziona con file di testo ordinari da una parte e gioca bene con gli strumenti consolidati (EMF ed Eclipse in generale) dall'altra.

Questo risponde alla tua domanda? Cercherò di darti risposte più precise se hai domande più dettagliate.

+0

Grazie, Heiko, ho una visione migliore ora :) Ho ottenuto la roba basata su testo basata sulla proiezione e le sue conseguenze sul controllo di versione, diff ecc. Quello che vorrei sapere ulteriormente è le differenze in "uso tipico" degli strumenti e nelle loro toolchain. Con Xtext, ottengo un sacco di codice Java generato dal modello Ecore sottostante che posso usare immediatamente in qualsiasi programma Java. Ciò che mi ha spaventato durante la lettura del tutorial ufficiale di MPS è stato il materiale di generazione del codice che ha preso un bel pezzo di esso. Posso attraversare il modello creato da ciò che scrivo nella mia lingua in qualche modo ... facilmente come con EMF? –

+2

In realtà, le persone dietro Xtext stanno facendo un sacco di sforzi per rendere possibile l'uso dei linguaggi Xtext in altri ambienti oltre a Eclipse, ad esempio gli editor Web tramite il progetto Orion e il supporto per IntelliJ IDEA. Puoi leggere ulteriori informazioni al riguardo in https://eclipse.org/Xtext/news.html –

+2

Tutto ciò è vero, tuttavia MPS supporta l'archiviazione personalizzata. Mentre per impostazione predefinita salva il file nel proprio formato (basato su XML), è possibile fornire serializzazione/unserializzazione personalizzate. –

16

L'idea principale di MPS non è quella di utilizzare un editor di proiezione anziché uno basato su testo. È la compasabilità del linguaggio. Ad esempio, è possibile estendere Java con tuple e un'altra persona potrebbe estendere Java con chiamate di metodi asincroni. Negli strumenti testuali (come XText), è impossibile garantire che due estensioni funzionino bene insieme, poiché la grammatica risultante potrebbe essere ambigua. MPS rende questo possibile. Basta aggiungere la lingua al progetto come si aggiungono le librerie.

14

A mio parere, MPS di Jetbrain è più facile da apprendere in un primo momento. Non è necessario lavorare con i file di configurazione come il flusso di lavoro-Files in xtext.

Una differenza principale è che in MPS si modifica direttamente il modello e questo modello viene visualizzato in una vista sintassi/editor. In xtext si modifica la sintassi e il modello viene generato/analizzato.

A mio parere, MPS è più potente. È possibile combinare le lingue in modo molto più semplice ed estenderle. Un grande vantaggio degli editor di proiezione è che è possibile nascondere le informazioni o mostrare ulteriori informazioni recuperate dal modello. Puoi anche utilizzare visualizzazioni diverse come tabelle o grafici (in arrivo in MPS 2.1).

Il controllo della versione può essere eseguito con MPS. È uno strumento di fusione/diff che funziona sul modello ad albero.

Problemi correlati