7

È possibile costruire il mio interprete che potrebbe essere trasformato in un compilatore? Se sì, come faccio a costruirlo?Costruire il proprio interprete che può funzionare come compilatore

+6

Potresti approfondire un po 'questo? A quale lingua ti stai riferendo? Come sarebbe "un interprete che può funzionare come compilatore" essere diverso da un compilatore? – Syntactic

+0

http://stackoverflow.com/questions/1669/learning-to-write-a-compiler –

+1

@Syntactic: non sarebbe diverso, questo è il punto. Ma non dovresti * scrivere * un compilatore. Ad esempio, il progetto PyPy lo usa. Devi solo scrivere un interprete semplice e diretto per la tua lingua e il framework PyPy genera automaticamente un compilatore JIT di codice nativo per te. –

risposta

11

Questo è chiamato Second Proiezione Futamura. È stato descritto per la prima volta da Prof. Yoshihiko Futamura nel suo documento del 1971 Partial Evaluation of Computation Process – An approach to a Compiler-Compiler (Japanese), un numero English version di cui è stato ripubblicato 28 anni dopo.

Utilizza Partial Evaluation, valutando parzialmente lo stesso valutatore parziale rispetto all'interprete, ottenendo così un compilatore.

Quindi, sono necessari due ingredienti: un interprete per la lingua di destinazione, scritto in una lingua ospite (che può o non può essere uguale alla lingua di destinazione) e un valutatore parziale in grado di valutare sia l'interprete che se stesso, in altre parole, ha bisogno di valutare parzialmente la lingua ospite e ha bisogno di essere scritta nella lingua ospite che può valutare.

+5

Il mio cervello sommerso dalla cultura pop legge automaticamente come * Second Futurama Projection * – kibibu

0

Una valutazione parziale già citata è uno dei possibili metodi (uno molto intenso dal punto di vista computazionale, ma piuttosto generico dall'altro). Un altro approccio è la metaprogrammazione: se un interprete di una lingua viene implementato in una forma di un semplice traduttore che si rivolge a un altro linguaggio interpretato, è molto facile re-targetizzarlo in seguito a un linguaggio compilato o sostituire l'interprete di destinazione con un compilatore.

+0

@Guildenstern, grazie, rimosso un collegamento. –

0

Oltre alle proiezioni di Futaruma, un altro approccio è il jit di meta-traccia. Meta-tracing jit non traccia direttamente o jit i tuoi programmi, ma indirettamente, attraverso l'interprete. RPython è un ottimo framework per meta-traccia. Scrivi un interprete in una versione limitata di python e RPython lo trasforma in un compilatore jit in C.

Problemi correlati