Parole chiave per la definizione di costrutti nei linguaggi di programmazione

0

Sto progettando una lingua concettualmente simile a Go.

In Vai, ad esempio, la parola chiave func viene utilizzata per definire le funzioni:

func abs (a int) uint { ... }

Uguale per la definizione dei tipi.

Tuttavia, stavo pensando ad una grammatica che non considera queste parole chiave.

Ad esempio:

abs (a int => uint) { ... }

Oppure, per le strutture:

Tree {size int; age int}

Cosa c'è di sbagliato in una tale sintassi? Ci sono alcuni potenziali problemi che potrebbero verificarsi?

Ad esempio, pensavo che se esistesse un costrutto che usasse la stessa grammatica di una struct, come un'interfaccia, sarebbe vaga (è una struct o un'interfaccia)?

    
posta Aber Kled 09.10.2013 - 16:09
fonte

1 risposta

4

What's wrong with such a syntax?

Ci sono due cose fondamentali che possono essere sbagliate con una sintassi del genere:

  1. È ambiguo - identificatore, paren, blocco è una sintassi comune che può essere utilizzata per blocchi, definizioni di classi e altre cose. È probabile che si imbattano in casi in cui la grammatica non è in grado di distinguere tra le dichiarazioni di funzione e queste altre cose. O se può, usa trucchi sporchi. O che può, ma fa davvero male in situazioni di parsing parziale (intellisense, debugging / segnalazione di errori).

  2. È confuso - anche se il compilatore può ingannare la fonte, gli umani non possono. Se la dichiarazione della funzione sembra troppo simile ad altre cose, la gente si confonderà. Se le persone si confondono, non useranno la tua lingua o inizieranno ad adottare idiomi (contrastanti) per chiarire la sintassi.

risposta data 09.10.2013 - 16:43
fonte

Leggi altre domande sui tag