Come faccio a scrivere una specifica del linguaggio di programmazione?

16

Mi piace molto programmare la progettazione del linguaggio. 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 rompere le cose e organizzare un tale documento, anche se io penso di essere abbastanza bravo in scrittura tecnica in generale.

Dovrei scriverlo come un lungo tutorial o più come un documento matematico formale? Come posso tenerlo aggiornato se lo sto sviluppando insieme a un'implementazione di riferimento? Dovrei semplicemente rinunciare e considerare l'implementazione e la documentazione come standard di fatto? Inoltre, c'è davvero qualche vantaggio significativo nell'avere uno standard? richiedere uno standard significa che la lingua è inutilmente complessa?

    
posta Jon Purdy 03.12.2010 - 20:58
fonte

5 risposte

3

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

Effettuare il lavoro formale potrebbe aiutarti a ridurre la complessità della lingua e a visualizzare i casi d'angolo.

Heads dump del cervello: codifica sorgente, lexing, tipi fondamentali, letterali, operatori, espressioni, istruzioni semplici, condizionali, cicli, funzioni (definizioni e chiamate), dichiarazioni di tipo, moduli, unità di compilazione, scope variabile, vari tipi di nome risoluzione (es. importazioni, metodi), modello di memoria, effetti collaterali, digitazione, concorrenza ...

    
risposta data 04.12.2010 - 00:23
fonte
7

Leggi i lotti e mantieni la semplicità

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 menzionato nei commenti, ti consiglio di leggere Lingue specifiche del dominio di Martin Fowler per i seguenti motivi:

  1. Ha un sacco di informazioni pratiche sul perché dovresti progettare una lingua
  2. Ci sono dettagli su come farlo (parser, analizzatori lessicali, banchi di lavoro della lingua ecc.)
  3. Vi sono istruzioni dettagliate sull'implementazione su come la sintassi scelta può essere fatta per gestire concetti come chiusure, annotazioni, liste letterali, ricezione dinamica ecc.

Per quanto riguarda come scrivere le tue specifiche, pensa al tuo pubblico. Ovviamente, prima di mettere il dito sulla tastiera per progettare la tua lingua, avrai pensato attentamente a cosa avrebbe dovuto fare.

Se si tratta di un nuovo linguaggio interpretato per sostituire JavaScript, ti verrà richiesto un approccio molto leale per raggiungere gli sviluppatori web con una capacità di attenzione limitata e il desiderio di risultati immediati o, se possibile, più rapidi.

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

Quindi, non è una cosa semplice. Per avvicinarti alle specifiche, probabilmente starai meglio guadagnando molta esperienza nella creazione delle tue lingue e anche lavorando con coloro che effettivamente le usano 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 farli usare.

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

    
risposta data 03.12.2010 - 21:28
fonte
3

Wirth ha progettato e implementato molti linguaggi di programmazione: tra questi, le specifiche per Oberon e Oberon2 le lingue sono notevoli per la loro completezza, chiarezza e leggibilità.

    
risposta data 04.12.2010 - 00:35
fonte
2

Common Lisp e Haskell hanno standard linguistici. Ruby e Python hanno implementazioni e documentazione. Quindi direi che uno standard di lingua 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 si prevedono cambiamenti significativi nella definizione della propria lingua.

    
risposta data 03.12.2010 - 22:26
fonte
1

qualsiasi specifica dovrebbe 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 ... il suo terso e sarà ancora compreso 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 i problemi a cui anche l'implementor si interessa.

    
risposta data 03.12.2010 - 23:28
fonte