2009-08-10 11 views

risposta

7

Non ho alcuna esperienza personale con MPS, ma è stato menzionato nel recente episodio di Herding Code with Markus Völter. Ecco la mia comprensione. MPS è un editor di proiezione che significa che, invece di analizzare e modificare il testo, si modifica direttamente la struttura dei dati della lingua di sottolineatura. Come menzionato da Markus, MPS ti consente di definire la tua lingua ma puoi anche introdurre nuovi concetti linguistici nelle lingue esistenti. Ad esempio, è possibile aggiungere una nuova parola chiave a Java in pochi minuti. MPS sfoca le linee tra DSL interni ed esterni e, con questo, si ottiene tipizzazione statica e supporto degli strumenti che non si otterrebbe quando si sviluppa una DSL con un linguaggio dinamico come Ruby.

2

MPS è una bestia interessante e ha un enorme potenziale. L'idea è semplicemente fantastico:

  • All'interno di un IDE (MPS) l'utente definisce più o meno visivamente la DSL (s)
  • l'IDE permette di generare non solo il linguaggio stesso (il runtime o ciò che fa), ma anche lo "strumento", ovvero un IDE più o meno completo, che lui o altri utenti possono utilizzare per modificare quella nuova lingua.

Detto questo, purtroppo, almeno per le versioni attuali disponibili MPS, JetBrains riusciti a fornire il sopra (almeno per me), perché: - è molto molto difficile e complicato da usare - come non lo farebbe sono stati realizzati dagli autori di IntelliJ, facile da usare. - ci sono troppi concetti e "modi" che l'utente deve imparare prima di poter fare qualcosa di utile, e tuttavia si ha la sensazione di attingere al buio. - l'IDE non genererà un IDE per te, ma qualcosa anche all'interno di MPS, un "Editor basato su celle" solo (in questa versione).

Ho provato MPS diverse volte (perché il concetto è così meraviglioso e promettente), ma sfortunatamente a partire da questo momento non ero in grado di fare qualcosa di utile con esso. Potrei essere stupido per MPS, ma nel tempo che stavo solo cercando di capire di base su MPS, ero in grado di fornire DSL Groovy utilizzabile completamente soffiato.

Sto ancora seguendo l'evoluzione di MPS, e spero che un giorno possa offrire ciò che inizialmente è stato promesso, poiché è un'idea così fantastica.

5

Lavoro per JetBrains. Ho guidato il progetto MPS per diversi anni, e ora sto lavorando a un altro progetto che è anche completamente scritto in MPS. Secondo la mia esperienza, vale la pena usare MPS :-)

La risposta alla tua domanda dipende da molte cose. Se si dispone di un sistema basato su Ruby o si desidera creare rapidamente una lingua, la DSL interna basata su Ruby potrebbe essere la scelta migliore. Se vuoi generare Java e avere tempo per imparare MPS, MPS potrebbe essere il caso migliore. Potresti anche considerare sistemi come XText, ecc., Che sono una via di mezzo tra DSL e MPS basati su Ruby.

3

Macro nel comune sistema di oggetti LOS CLOS può alterare la sintassi in modo abbastanza drammatico, MPS è molto simile a ANTLR, ma viene fornito con un editor grafico. Tuttavia MPS non apprezza la frammentazione del codice oltre la compilazione e il runtime e quindi sia MPS che ANTLR ruotano attorno ai problemi di metaprogrammazione statica. Non è ancora possibile creare costrutti che accetteranno un numero arbitrario di argomenti di sub-costrutti come Monadics, ad esempio; un costruttore di list comprehension che accetta un numero arbitrario di filtri ed elenca i generatori. Per rendere ciò possibile è necessario modificare a livello di codice l'AST non elaborato. I Lispers più esperti possono probabilmente indicare altre trasformazioni che non possono essere fatte.

2

Sono d'accordo che la documentazione è stata un problema per i principianti durante l'apprendimento di MPS. Questo era certamente vero quando è stato scritto il post precedente (2010). Avendo sperimentato questa prima mano e finalmente riuscito a capire il sistema, ho scritto The MPS Language Workbench (volumi I e II) per facilitare la curva di apprendimento. Il feedback che ricevo dai lettori è che i libri sono sufficienti per aiutarti a iniziare (Volume I) e ad apprendere aspetti più avanzati della piattaforma MPS (Volume II).

Riguardo alla risposta alla domanda originale. Sì, credo che MPS abbia vantaggi chiave rispetto allo sviluppo di una DSL in Ruby o Groovy. La ragione è che come designer lingua

  1. hanno molto meglio il controllo su tutti gli aspetti della lingua,
  2. Le lingue si genera con MPS possono includere notazioni grafiche e gli elementi dell'interfaccia utente, che li rendono un ibrido tra rendono un'interfaccia utente e uno script/programma DSL di testo,
  3. MPS consente di migrare i programmi man mano che si evolve la lingua (ad esempio, refactoring o altre modifiche alla lingua possono propagarsi agli utenti finali delle lingue, utilizzando lo script/programma DSL automatico migrazioni).

È possibile visualizzare un buon esempio di DSL integrato con MPS nello MetaR project.