Costruire un DSL: scritto in cima a un linguaggio generico o autonomo?

9

Sto discutendo sulla progettazione di un linguaggio specifico del dominio per semplificare un dato, oscuro modello di programmazione. Parte del dibattito è se costruirlo (come script) su una lingua / runtime esistente (ad es. Java) o renderlo autonomo (proprio compilatore, & c).

Quelli con esperienza di progettazione DSL, hai pro / contro e una risposta sicura all'approccio appropriato?

    
posta Jé Queue 24.01.2011 - 05:17
fonte

4 risposte

7

Raccomando di creare il tuo DSL su una lingua esistente (DSL interno). Ho fatto questo alcune volte con Python, creando sistemi in cui il consumatore del DSL scrive un file python che viene usato come un file di configurazione per il sistema. Il file di configurazione utilizza costrutti (classi, funzioni) che ho definito. Questi costrutti formano il DSL.

IMO, un linguaggio come Python (IronPython o Jython se il sistema host è .NET o Java) o Ruby (IronRuby, JRuby) è migliore per basare la tua DSL su Java o C #.

Nel mio caso i sistemi host sono stati anche (C) Python, quindi scegliere Python per la DSL è stata la cosa naturale.

Alcuni professionisti:

  • Minori costi di costruzione. C'è molto meno da implementare. Puoi concentrarti sul problema, invece di dedicare del tempo ad implementare un parser / compilatore / interprete.
  • Accesso alla lingua ospite: la tua lingua avrà accesso a tutta la potenza della lingua / piattaforma esistente.
risposta data 24.01.2011 - 11:11
fonte
2

Guarda Xtext (http://www.eclipse.org/Xtext/) e Xbase (http://blog.efftinge.de/2010/09/xbase-new-programming- language.html). Se gli utenti non sono programmatori, non penso che dovresti basare la tua DSL su un linguaggio di programmazione esistente. Sarà troppo complicato per loro. Un DSL "pulito" può essere molto efficace se eseguito correttamente.

    
risposta data 24.01.2011 - 15:27
fonte
2

Piuttosto che raccomandare un approccio particolare, permettimi di raccomandare le Lingue specifiche del dominio di Martin Fowler come una risorsa eccellente per prendere una decisione. Ha una vasta e stimolante analisi dei meriti relativi dei DSL interni ed esterni.

    
risposta data 12.04.2011 - 21:25
fonte
1

Esiste una terza opzione: crea un DSL come compilatore su una lingua generica. Qualsiasi linguaggio con un certo grado di capacità di metaprogrammazione farà il lavoro, incluso anche un oggetto di basso livello come C ++. Preferisco le lingue Lisp e simili per questo genere di cose, ma Template Haskell o Nemerle potrebbero fornire lo stesso livello di flessibilità.

    
risposta data 24.01.2011 - 12:11
fonte

Leggi altre domande sui tag