Come posso scrivere una specifica del linguaggio di programmazione?


16

Mi piace molto la progettazione del linguaggio di programmazione. A volte penso che i miei progetti linguistici e i loro potenziali utenti trarrebbero beneficio da un documento standard completo. Ho esaminato molti standard linguistici, che vanno dal molto formale (C ++) al piuttosto informale (ECMAScript), ma non riesco davvero a capire come dovrei scomporre le cose e organizzare un simile documento, anche se penso di essere abbastanza bravo nella scrittura tecnica in generale.

Dovrei scriverlo come un lungo tutorial o più come un documento di matematica formale? Come lo tengo aggiornato se lo sto sviluppando insieme a un'implementazione di riferimento? Dovrei semplicemente rinunciare e trattare l'implementazione e la documentazione come standard di fatto? Inoltre, c'è davvero qualche vantaggio significativo nell'avere uno standard? Fa che richiedono una media standard che il linguaggio è inutilmente complessa?


1
Hai già letto le lingue specifiche del dominio di Martin Fowler? amazon.com/…
Gary Rowe,

@Gary Rowe: non l'ho fatto. Sembra una lettura decente, anche se forse non è esattamente quello che sto cercando.
Jon Purdy,

Il vantaggio di uno standard rispetto a un'implementazione di riferimento è che puoi definire dove altre implementazioni possono discostarsi da ciò che fa la tua implementazione.
Bart van Ingen Schenau,

Risposte:


3

Ho trovato le specifiche del linguaggio Java sia formali che leggibili, e penso che abbia una struttura ragionevole. Alcune specifiche del W3C potrebbero anche essere dei buoni esempi.

Fare il lavoro formale potrebbe aiutarti a mantenere bassa la complessità del linguaggio e vedere i casi angolari.

Intestazione brain dump: codifica sorgente, lexing, tipi fondamentali, valori letterali, operatori, espressioni, istruzioni semplici, condizionali, loop, funzioni (definizioni e chiamate), dichiarazioni di tipo, moduli, unità di compilazione, scoping variabile, vari tipi di risoluzione dei nomi (ad es. importazioni, metodi), modello di memoria, effetti collaterali, dattilografia, concorrenza ...


La tua lista di suggerimenti è molto utile. Penso che quello che farò è fare un brainstorming di un elenco simile, ordinarlo in un formato simile a un tutorial e scrivere una breve specifica informale con alcune aggiunte formali come una grammatica EBNF. Sicuramente darò un'altra occhiata alle specifiche che hai citato per le idee.
Jon Purdy,

7

Leggi i lotti e mantienilo semplice

Progettare una nuova lingua è difficile. Davvero difficile. Ma alla fine è molto soddisfacente se diventa popolare e risolve davvero un problema che le persone stanno vivendo in modo elegante.

Come ho detto nei commenti, ti consiglio di leggere le lingue specifiche del dominio di Martin Fowler per i seguenti motivi:

  1. Approfondisce in modo molto approfondito il motivo per cui dovresti progettare una lingua
  2. Ci sono dettagli su come farlo (parser, analizzatori lessicali, banchi di lavoro linguistici ecc.)
  3. Ci sono istruzioni dettagliate per l'implementazione su come la sintassi scelta può essere fatta per gestire concetti come chiusure, annotazioni, elenchi letterali, ricezione dinamica ecc.

Per quanto riguarda come scrivere le specifiche, pensa al tuo pubblico. Ovviamente, prima di mettere il dito sulla tastiera per progettare la tua lingua, avrai riflettuto attentamente su ciò che è destinato a fare.

Se si tratta di un nuovo linguaggio interpretato per sostituire JavaScript, allora avrai bisogno di un approccio molto lassista al fine di raggiungere gli sviluppatori Web con un intervallo di attenzione limitato e il desiderio di risultati immediati - o più rapidamente se possibile.

Se verrà utilizzato nella prossima missione su Titano, le specifiche estremamente dettagliate che mostrano prove formali esatte del comportamento di ciascun componente saranno il livello minimo di accesso.

Quindi, non è una cosa semplice. Per avvicinarti alle specifiche, probabilmente staresti meglio acquisendo molta esperienza nella creazione delle tue lingue e lavorando anche con coloro che le usano effettivamente quotidianamente. Se hai vittime volontarie ... ehm ... sviluppatori, al lavoro che possono impiegare del tempo per imparare la tua lingua, allora possono darti un feedback su ciò che è necessario per farle usare.

In breve, mantienilo semplice e più persone lo useranno.


Grazie per questo. Ho molta esperienza nello sviluppo di lingue e persino nel documentarle in modo piuttosto approfondito, ma è l'idea di uno standard che mi dà costantemente. Potrei semplicemente prendere la lettura raccomandata e sperimentare un po '.
Jon Purdy,

@Jon Purdy Hai qualche esempio delle lingue online che potresti includere nella domanda?
Gary Rowe,

Non ho ancora esempi del mio progetto attuale. L'unico esempio pubblico davvero completo di una lingua che ho creato (che uso effettivamente!) È su vision-language.sourceforge.net/cgi-bin/Home
Jon Purdy il

@Jon Purdy Vision sembra interessante - una sorta di Velocity truccata. Per inciso, potresti prendere in considerazione uno screencast di YouTube che mostra come installarlo e scrivere un piccolo sito Web di esempio (ad esempio per un idraulico locale). Ciò renderebbe la curva di apprendimento molto più semplice poiché le persone possono vederla in azione e assumerne immediatamente i benefici. Puoi parlare dei vantaggi rispetto a JSP, Velocity, ASP.Net, Freemarker ecc.
Gary Rowe,

Questa è una buona idea; Ultimamente ho fatto molti video su YouTube (circa tre a settimana), quindi penso che potrei sicuramente inserirne uno.
Jon Purdy,

3

Wirth ha progettato e implementato molti linguaggi di programmazione: di questi, le specifiche per i linguaggi Oberon e Oberon2 sono notevoli per completezza, terseness e leggibilità.


2

Common Lisp e Haskell hanno standard linguistici. Ruby e Python hanno implementazioni e documentazione. Quindi direi che uno standard linguistico non è necessario, ma potrebbe essere utile se ti aspetti che ci sia più di un'implementazione della lingua che stai progettando. D'altra parte, uno standard è prematuro se ti aspetti cambiamenti significativi nella definizione della tua lingua.


In realtà, Ruby ha due cose che potrebbero essere considerate "specifiche". C'è la specifica ISO Ruby, che è attualmente nel suo stato Final Draft e che è stata scritta da alcune persone che hanno esperienza con le specifiche del linguaggio (avendo lavorato su ANSI Common Lisp e ISO C ++). E c'è il progetto RubySpec, che è un insieme di esempi eseguibili in stile RSpec che formano sia una specifica leggibile dall'uomo che una suite di test di conformità eseguibile dalla macchina per quella specifica.
Jörg W Mittag,

1

qualsiasi specifica deve essere concisa e in grado di resistere alla prova del tempo

questo è il motivo per cui vedi un'astrazione come BNF usata per molti standard linguistici ... è concisa e sarà ancora compresa molto tempo dopo che molti dei nostri strumenti attuali sono stati lasciati indietro.

ovviamente c'è molto di più di una semplice grammatica. guarda cosa hanno fatto gli altri ... perl6, schema, C ... affrontano problemi che anche l'importatore si preoccupa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.