Estensione della sintassi nelle lingue tipizzate debolmente?

1

Mi piacciono le lingue che mi danno la possibilità di estendere la sintassi della lingua. Allo stesso tempo, tutte le lingue che conosco mi permetteranno di estendere la sintassi dei sistemi di tipo relativamente pesanti. Esistono linguaggi più leggeri che consentono lo stesso tipo di estensibilità della sintassi? Oppure la sintassi flessibile richiede la possibilità di definire nuovi tipi di dati (e operazioni su questi tipi)?

Fondamentalmente, voglio la flessibilità sintattica di Haskell senza il sistema di tipi di Haskell. C'è un modo per ottenere questo, o quella flessibilità sintattica richiede l'assistenza di un sistema di tipi?

Esempi di lingue in cui so che il sistema di tipi può essere usato per creare nuova sintassi sono Haskell, C ++ e Python.

Possibili esempi di dove la sintassi potrebbe essere modificata senza un sistema di tipo strong forse Schema , Avanti e Common Lisp .

Tuttavia, mentre posso vedere come sovraccaricare gli operatori nel primo elenco per generare nuovi costrutti sintattici, non so abbastanza per sapere come farlo nel secondo elenco. Forse la risposta è per me di andare a leggere su macro in Common Lisp.

Quello che vorrei è un linguaggio con la semplicità concettuale di C, Lua o Erlang , ma con la possibilità di creare operatori sintattici aggiuntivi come desiderato.

TLDR - riepilogo di base della domanda:

È possibile che un linguaggio debolmente tipizzato supporti l'estensione della sintassi, oppure la capacità di estendere la sintassi di una lingua (all'interno della stessa lingua) richiede un sistema di tipi da implementare?

    
posta Peter Mortensen 08.04.2011 - 17:51
fonte

4 risposte

4

Puoi davvero giocare con la sintassi di Common Lisp. Non ci sono solo macro regolari, ma anche macro leggere.

Tuttavia, non è tipizzato debolmente; è in realtà piuttosto strongmente tipizzato. Forse stavi cercando una digitazione dinamica piuttosto che una digitazione debole.

    
risposta data 08.04.2011 - 23:12
fonte
3

Perl ha parole chiave a cui si può fare riferimento dalla versione 5.12 delta . Prima di quel Perl aveva filtri. Ciò ha portato a una nuova generazione di moduli che sono molto utili. Potresti dare un'occhiata a Moose link . Devel :: Dichiara link . E i suoi moduli associati come Moosex :: Declare, Try :: Tiny ecc. Una ricerca su CPAN ti darà tutte le cose che stai cercando.

Lisp è un altro esempio di linguaggio altamente estensibile. Non penso che Python sia molto estendibile rispetto a Lisp e Perl. Infatti Python enfatizza l'esatto contrario, la leggibilità del codice a scapito del sacrificio della potenza. Anche questo non è un brutto obiettivo, serve solo un pubblico diverso.

Suppongo che dal momento che stai cercando specificatamente l'estensibilità nelle lingue di scripting kinda, il Lisp è la soluzione migliore. E se non sembra troppo pragmatico per il mondo reale, Perl è tuo amico.

    
risposta data 09.04.2011 - 09:49
fonte
1

Common Lisp è probabilmente il classico esempio di un linguaggio in cui è possibile definire praticamente qualsiasi sintassi che si desidera con macro e macro di lettura (come dice @David Thornley), ad esempio è ottimo per i DSL.

Anch'io considererei Smalltalk qui. Ha una sintassi molto piccola, e tutto il resto è un messaggio inviato. Dipende molto da cosa stai cercando di fare.

    
risposta data 09.04.2011 - 18:15
fonte
0

PFront è un linguaggio tipizzato dinamicamente con la possibilità di estendere la propria sintassi. Nessuna tipizzazione rigorosa, è solo una Lisp con un lettore modificato, nient'altro. Non vedo alcuna connessione tra il sistema di tipi e le estensioni di sintassi, a condizione che il tuo sistema di tipi ti permetta di rappresentare una lingua AST sottostante. È lo stesso per MetaOCaml, per Template Hakell, per Katahdin, per PFront, ecc.

    
risposta data 09.04.2011 - 15:11
fonte

Leggi altre domande sui tag