Domanda

ho usato Eclipse xtext in diversi progetti. Ho adorato la facilità di definire una grammatica su un modello Ecore (Meta) e lasciare che tutto ciò che è stato generato per te, incluso un fantastico editor di plug -in Eclipse, ma ero abbastanza a disagio con la sottostante Framework EMF Con tutto cablato in campi statici.

Ultimamente mi sono imbattuto in jetbrains MPS (sistema di programmazione Meta). Si basa su filosofia completamente diversa. Mentre XText è per la creazione di DSL basati sul testo che generano un parser per te (e istanziano quegli ebjetti), in linguaggio creato da MPS uno modifica direttamente la struttura del modello sottostante. Finora lo capisco.

Chiunque abbia esperienza con entrambi gli strumenti DSL per sottolineare le principali differenze in termini di lavoro con loro, casi d'uso previsti e pubblico, complessità, curva di apprendimento (ad essere onesti, per iniziare a usare Xtext si dovrebbe sapere molto sulle viscere di EMF) , generazione di codice ecc.?

È stato utile?

Soluzione

Xtext è un approccio tradizionale basato sul parser che funziona con file testuali ordinari. Questi possono essere spediti, archiviati e confrontati con qualsiasi sistema di controllo della versione e persino modificati all'esterno dell'editor utilizzando il tuo strumento di riga di comando preferito. Si integra strettamente in ECLIPSE EMF e funziona abbastanza bene con un sacco di strumenti che puoi trovare nell'eco-sistema Eclipse. Di recente, si è evoluto (e lo sta facendo ancora) in una sorta di "strumento di sviluppo del linguaggio di programmazione" in cui ti consente di supportare tutti i tipi di utensili aggiuntivi.

I parlamentari dall'altra parte lavora con un editor basato sulla proiezione che "assomiglia" a testo mentre lavori all'interno dell'ambiente. Il formato di archiviazione sottostante è specifico per lo strumento (leggi: inutilizzabile senza programmi speciali) e non analizza i file di testo semplice. Ciò offre alcuni grandi vantaggi come l'integrazione di langauges arbitrari (ad esempio Regex all'interno di SQL all'interno di Java). La toolchain consente la generazione sotto forma di modello per le trasformazioni del modello che all'inizio si sentono insoliti ma sono anche potenti.

Entrambi gli strumenti ti stanno in qualche modo bloccati nel loro mondo (parlamentari/eclissi). Anche se è possibile eseguire entrambi in modalità senza testa, non è possibile lanciare facilmente l'editor Xtext all'interno di un altro IDE. Lo stesso vale per i parlamentari. Direi che Xtext è "più aperto", poiché funziona con file di testo ordinari da un lato e gioca bene con strumenti consolidati (EMF ed Eclipse in generale).

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

Altri suggerimenti

L'idea principale di MPS non è usare un editor proiezione anziché basato sul testo. È la compatibilità linguistica. Ad esempio, è possibile estendere Java con le tuple e un'altra persona potrebbe estendere Java con le chiamate del metodo asincrone. Negli strumenti basati sul testo (come XText), è impossibile garantire che due estensioni funzionino bene insieme, poiché la grammatica risultante potrebbe essere ambigua. MPS lo rende possibile. Aggiungi una lingua al tuo progetto come se aggiungi librerie.

Secondo me i parlamentari di Jetbrain è più facile da imparare all'inizio. Non è necessario lavorare con file di configurazione come i file di flusso di lavoro in XText.

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

Secondo me i parlamentari è più potente. Puoi combinare le lingue molto più facilmente ed estenderle. Un grande vantaggio degli editori proiezionisti è che puoi nascondere informazioni o mostrare ulteriori informazioni recuperate dal modello. Puoi anche utilizzare viste diverse come tabelle o grafici (in arrivo in MPS 2.1).

Il controllo della versione può essere eseguito con MPS. C'è uno strumento di unione/diff che funziona sul modello ad albero.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top