Domanda

Sto scrivendo un Tiger compilatore F # e ho finalmente raggiunto il punto in cui non riesco più a rinviare la decisione di un'architettura di destinazione.

Questo è il mio primo compilatore, ma sarà sicuramente non sarà l'ultima. Quindi ... cosa sarebbe un buon architettura target per un primo compilatore?

ho pensato di mira il CIL (NET), ma il codice intermedio in il libro sembra più adatto per una macchina registro.

Vorrei anche sapere dove dovrei andare quando ho finito questo compilatore. Dovrei provare mira un'altra architettura? Dovrei concentrarsi su un'altra parte del compilatore? Perché?

È stato utile?

Soluzione

Per pura soddisfazione personale, non c'è alcun sostituto per targeting per l'hardware che hai e ed eseguire il codice compilato sul metallo nudo . Tuttavia, ci sono alternative ragionevoli:

  • Il MIPS è un'istruzione molto pulito impostati e simulatori come SPIM sono già disponibile. Il compilatore sarà semplice e le tue esperienze di debug relativamente felice.

  • A seconda perché si sta scrivendo un compilatore, si può essere felici mira un basso livello di lingua compilatore bersaglio come LLVM o C-- . Ma perché qualcun altro avere tutto il divertimento di scrivere il back-end?

  • Se si dispone di Intel o hardware AMD, Mi consiglia di utilizzare l'istruzione a 64 bit insieme con le estensioni SSE. Avrete il doppio dei registri con cui giocare, e il codice in virgola mobile (se presente) sarà sano di mente.

Altri suggerimenti

Se si sta utilizzando F # di scrivere il compilatore, che emette CIL suona certamente come una buona decisione, in quanto sarete in grado di utilizzare tutte le funzionalità integrate di CodeDOM etc.

In alternativa si potrebbe progettare il proprio formato di output e scrivere una VM in esecuzione all'interno di .NET, se che renderebbe più facile l'uscita (in virtù di essere un'architettura più adatto). Potrebbe essere più facile per eseguire il debug - anche se naturalmente vuol dire scrivere il VM così:)

Avete mai pensato di mira assembly x86? Ho fatto un Tiger compilatore me stesso alcuni anni fa, e l'emettitore di montaggio, anche se difficile da scrivere, era una delle cose più gratificanti in tutto il progetto. Scrivere il proprio piccolo VM in C è anche un buon (se non migliore) idea.

Targeting VM esistente è pragmatico, se si sta creando un linguaggio di produzione, ma rimuove molte possibilità di apprendimento dall'esercizio.

Se fossi in te, vorrei dare un'occhiata più da vicino a diverse tecniche di ottimizzazione in seguito nel progetto.

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