2010-01-30 12 views
8

Sto pensando di scrivere la mia piccola lingua.Che cos'è una buona macchina virtuale per lo sviluppo di una lingua per hobby?

Ho trovato alcune opzioni, ma non esitate a suggerire di più.

  • JVM
  • Parrot
  • OSA

Un sacco di lingue stanno usando la JVM, ma a meno che non si scrive un linguaggio Java-ish, tutta la potenza che stdlib dà sta per sentirsi brutti; Non è molto buono anche nelle cose dinamiche.

Parrot sembra una buona macchina virtuale per lo sviluppo di lingue, ma ha un odore di progetto abbandonato/incompiuto/hobby ad esso.

L'OSA è ciò che alimenta Applescript, non una VM particolarmente nota, ma io uso Mac e offre una buona integrazione di sistema.

CLR + Mac non sembra una buona combinazione ...

La mia lingua sarà un oggetto orientato funzionale linguaggio a flusso di dati in concomitanza con la tipizzazione forte e un mix di Python e la sintassi Lisp. Sembra buono, eh?

[modifica]
Ho accettato Python per ora, ma mi piacerebbe saperne di più su OSA e Parrot.

+0

Come su Scheme? –

+0

E i requisiti di prestazioni e scalabilità? – skaffman

+0

Preferisco usare Python o Lua di Scheme, penso. Non ci sono quasi requisiti di prestazioni e scalabilità, sarà solo usato per piccoli strumenti che scrivo. – Pepijn

risposta

5

Un approccio con cui ho giocato è quello di utilizzare il modulo Python ast per creare un albero di sintassi astratto che rappresenta il codice da eseguire. La funzione Python compile può compilare un codice AST in bytecode Python, che può quindi eseguire exec. Questo è un po 'più alto rispetto al generare direttamente bytecode, ma dovrete affrontare alcuni aspetti del linguaggio Python (ad esempio, la differenza fondamentale tra istruzioni ed espressioni).

Nel fare ciò ho anche scritto un modulo "deparse" che tenta di convertire un AST in codice sorgente Python equivalente, solo per il debug. Se sei interessato, puoi trovare il codice nel repository psil.

+0

Ciò significa scrivere il mio linguaggio in Python, no? Sarebbe divertente ... Dovrò pensare ai limiti. – Pepijn

+0

È vero, l'uso della libreria 'ast' di Python è sicuramente più semplice da Python. Potresti sicuramente fare peggio di scegliere Python. –

+0

Com'è 'ast' per creare un sistema di tipo statico e specialmente per scrivere funzioni di stile del flusso di dati (chiamate non appena arrivano i dati)? – Pepijn

2
  • Lua ha un piccolo, ben scritto e veloce VM
  • Python VM - si può davvero attaccare un nuovo linguaggio ad esso se si vuole. Oppure scrivi (usa?) Qualcosa come tinypy che è una piccola e semplice implementazione della VM Python.

Entrambe le opzioni sopra hanno accesso a utili librerie standard che ti faranno risparmiare lavoro e sono codificate in C relativamente pulite e modulari, quindi non dovrebbero essere difficili da connettere.

Detto questo, non sono d'accordo sul fatto che Parrot sia abbandonato/hobby. È abbastanza maturo e ha degli sviluppatori molto forti che ci lavorano. Inoltre, è specificamente una VM progettata per essere indirizzata da più linguaggi dinamici. Pertanto, è stato progettato pensando alla flessibilità.

+0

Mi piacerebbe sapere di più sul motivo per cui pensi che la VM Lua o Python sia adatta a me. Il pappagallo potrebbe essere maturo, almeno la maggior parte delle lingue su di esso sono incomplete o abbandonate. – Pepijn

+0

@Pepijn: ho aggiornato la risposta. Non sai che altro suggerire, a meno che tu non abbia domande più specifiche? –

+0

Voglio passare funzioni e oggetti come valori e sto pensando a un sistema di tipi più o meno statici, ho anche bisogno di materiale di flusso di dati. Python ha una chiara distinzione tra funzioni, valori, espressioni e istruzioni, ma il suo sistema di tipi è piuttosto dinamico. Questo mi ostacolerà? Com'è quello per Lua, Parrot, JVM o OSA? – Pepijn

4

Dai un'occhiata allo LLVM. Non è una VM pura in quanto tale, più un framework con il suo IR personale che ti permette di costruire macchine virtuali di alto livello. Ha cose belle come l'analisi del codice statico e supporto JIT

+0

Conosco LLVM da Unladen swallow. Poiché il mio linguaggio è solo un progetto per hobby, penso che sia meglio prendere in prestito una VM con uno stdlib. – Pepijn

1

Avete considerato Pypy?Da quello che ho letto, oltre ad essere un compilatore JIT Python, ha anche la capacità di gestire altre lingue. Per esempio c'è a tutorial che spiega come creare un compilatore JIT Brainfuck usando Pypy.

Problemi correlati