Sono il principale autore e designer di MELT , un linguaggio specifico per il dominio per estendere GCC (la raccolta di compilatori Gnu). L'implementazione è disponibile software gratuito (licenza GPLv3). Se desideri una descrizione dettagliata, dal punto di vista di una lingua specifica del dominio, leggi il mio documento DSL2011 su MELT .
Ho scelto una sintassi simile a Lisp per MELT , così come in Lisp o in Scheme, ogni operazione è scritta con "Un sacco di Insipid Stupid Parenthesis" così il applicazione della funzione f
agli argomenti a
e b
è scritta (f a b)
(come se fosse in Schema o in Lisp). Certamente, (f)
-un'applicazione di funzione senza argomento- non è la stessa di f
-una cosa semplice denotata da una variabile -.
MELT condivide con molti altri Lisp-s e con Scheme i soliti operatori di "controllo" come let if defun define cond lambda letrec list definstance
ecc ...
MELT non usa i nomi comuni per le operazioni primitive (no car
o +
in MELT , che ha pair_head
list_first
+i
+iv
con significati diversi). E MELT si occupa sia di valori di prima classe (come in Scheme) che di "roba" (per dati GCC grezzi come Gimple , i dettagli sono nel documento DSL2011)
I motivi per cui ho scelto una sintassi simile a Lisp includono:
- prima, sono zoppo e volevo una rapida implementazione. Parsing Lisp è banale;
- Ero (e sono) in grado di usare per es. Emacs
lisp-mode
per MELT senza problemi. - Una piccola implementazione MELT è stata originariamente prototipata in Common Lisp
- Il traduttore MELT corrente viene riavviato, quindi è scritto in MELT
- L'implementazione utilizza i classici trucchi Lisp: le espressioni S vengono espanse da un meccanismo macro (in una sorta di albero interno di sintassi astratto), quindi normalizzate e infine tradotte in codice C.
- GCC ha diversi formalismi Lisp come all'interno (in particolare per il back-end, per i file "machine description").
- i progetti GNU hanno Emacs Lisp e Guile come dialetti simili a Lisp (non ero in grado di usarli per motivi tecnici dettagliati nel mio documento DSL2011).
La mia domanda è: dovrei offrire una sintassi alternativa simile a infisso (un po 'Pythonic o Lua-esque)?
Da un lato, temo che alcune persone (in particolare quelle giovani, che non hanno mai incontrato linguaggi di programmazione simili al Lisp, ho avuto un corso su Lisp negli anni '80) sono completamente allergiche a Lisp e non lo faranno nemmeno prova MELT a causa del suo aspetto.
D'altra parte, l'unica cosa che potrei fare è un semplice parser che produca lo stesso AST di MELT oggi, e la sintassi sarà ad-hoc (ma infissa) e probabilmente non carina .
Inoltre, lavorare su una sintassi alternativa che non userò mi distrarrà (o prenderò tempo) da altri sforzi (scrivendo documentazione e tutorial, facendo buoni esempi di MELT , eseguendo il debug e migliorando l'implementazione).
Alcuni giovani (in particolare Jeremie Salvucci e Pierre Vittet) sono stati in grado di apprendere e codificare MELT senza precedente esposizione a MELT , a dialetti Lisp (o Scheme) o anche alla compilazione.
Una sintassi alternativa attirerebbe le persone allergiche al Lisp? Un bravo ragazzo mi ha detto che la sintassi non conta davvero per i DSL-s. Possono essere adottati se portano qualche valore, anche con una sintassi non molto sexy.