2009-07-17 13 views
13

Sto progettando un linguaggio di programmazione che viene compilato con un bytecode intermedio. Tuttavia, sto avendo molti problemi a progettare la struttura bytecode. Qualcuno ha qualche indicazione su come rappresentare un programma in binario? In alternativa, ci sono risorse (preferibilmente gratuite) su come farlo? Il più vicino che ho trovato è il description of the Lua interpreter's bytecode.Progettazione Bytecode?

MODIFICA: Un po 'più di informazioni: sto implementando il mio schema di raccolta dei rifiuti che è fortemente ottimizzato per immutabilità e concorrenza. Per motivi di efficienza, ho bisogno di alcune istruzioni bytecode univoche che consentano ai programmi di interagire con lo schema di garbage collection.

risposta

4

This article descrive GNU Smalltalk VM e la sua bytecode. Googling per "Smalltalk bytecode" si presenti con altre risorse.

5

non progettare il bytecode è inutile!

Suggerirei esaminando LLVM e 0.123.che fanno un sacco di duro lavoro per te e ti chiedono solo di creare uno schema simile a AST per la traduzione dopo aver annotato le cose e l'ambito risolto e così via.

Il libro del drago include anche alcune sezioni sul bytecode. L'Art of Computer Programming potrebbe anche essere d'aiuto in quanto il linguaggio Mix indica alcune (datate) ma importanti decisioni progettuali.

Davvero, il codice intermedio dovrebbe essere:

  1. Qualcosa che si scritto per essere una forma intermedia efficiente che permette di algoritmi di ottimizzazione popolari e traduzione di un back-end, senza perdita della semantica attraverso cattiva traduzione e simili:
  2. Un IR noto e utilizzato che è possibile utilizzare altri strumenti per tradurre in codice macchina. Anche se utilizzi l'installazione .NET/Mono come IR, allora se soddisfa le tue esigenze allora è grandioso.

Si tratta di requisiti, non progettare il proprio IR/bytecode a meno che non sia necessario. Se qualcos'altro si adatta, usalo! Non hai bisogno di mantenerlo!

+0

Grazie per l'input, ma le funzionalità più innovative del mio linguaggio sono nelle strutture di dati incorporate e nel modo in cui vengono raccolte informazioni inutili, che purtroppo devono essere implementate a livello di VM. – Imagist

+0

@Imagist ... allora forse una soluzione sarebbe quella di costruire un motore bytecode che consentisse l'aggancio esterno per queste cose creando un motore bytecode con interni guidati dagli eventi e deleghe di funzionalità. Sarebbe davvero fantastico, permetterebbe alle persone di specificare nel BC quale GC vorrebbero usare (e cose) –