Domanda

voglio fare un po 'metaprogrammazione in un linguaggio a tipizzazione statica, in cui verranno digitati entrambi i miei programmi e le mie meta-programmi. Voglio dire questo in un senso forte:. Se le mie compilazioni generatore di programmi, voglio il sistema di tipi di essere abbastanza forte che solo i programmi di tipo-corrette possono essere generati

Per quanto ne so, solo metaocaml può fare questo. (Modelli No, né modello né Haskell C ++ in forma il conto - vedi questo carta ). Domanda: Quali altre lingue / sistemi consentono questo

EDIT: Per quanto posso dire, metaocaml è morto. Oleg cercato di far risorgere lo , ma che è ancora bloccato diverse versioni dietro OCaml si. Se si vuole andare con linguaggi sperimentali (cioè anche più di quanto metaocaml, sembra che Ur e abbastanza possibilmente Idris misura la fattura. Qualsiasi altra new entry al campo?

È stato utile?

Soluzione

F # può fare anche questo attraverso citazioni Codice .

Altri suggerimenti

Per fare questo, è necessario assicurarsi che il sistema di tipi del languge sottostante è direttamente onorata / controllato dal metaprogramma stesso. In pratica, questo quasi costringe il metaprogrammazione di essere nella lingua sottostante ... quindi credo che io non sono sorpreso che si potrebbe essere in grado di fare questo in metaocaml.

La maggior parte di noi non ottengono gli strumenti integrati nella lingua sottostante metaprogrammazione (C ++ essendo piuttosto un'eccezione e mi respingerla e sistemi di riflessione basati come troppo debole per effettuare trasformazioni arbitrarie).

Un sistema in grado di svolgere arbitraria trasformazioni (o metaprograms composti da insiemi di coloro) sul codice è DMS Software Reengineering Toolkit . DMS ha front-end per molti linguaggi reali, costruisce strutture di dati del compilatore durante l'analisi (compresi AST). DMS fornisce source-to-source trasformazioni programma che rappresentano le trasformazioni come AST-riscrive utilizzando la sintassi superficie della lingua di destinazione. Si riunisce il vostro requisito in una certa misura: se le regole di trasformazione sono sintatticamente corretti (e che sono controllati da DMS), quindi il programma trasformato sarà sintatticamente corretto. Essa non raggiunge la vostra esigenza di tipo correttezza, come i meccanismi di tipo-controllo sono attuate al di fuori della lingua di destinazione. In linea di principio, si potrebbe un correttore type-safe per aumentare le trasformazioni programma; in pratica, abbiamo scoperto che siamo in grado di codificare trasformazioni abbastanza affidabile.

E anche se si dispone di trasformazioni type-safe, non avere una garanzia di semantica di sicurezza rispetto al programma originale. Così, avrai ancora per eseguire il debug delle metaprograms.

tempo di compilazione metaprogrammazione in Scala.

Our flavor of macros is reminiscent of Lisp macros, adapted to incorporate type safety and rich syntax. Unlike infamous C/C++ preprocessor macros, Scala macros: 1) are written in full-fledged Scala, 2) work with expression trees, not with raw strings, 3) cannot change syntax of Scala.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top