2010-05-04 18 views
8

Ho scremato Programmazione in Lua, ho guardato il riferimento Lua.Descrizione concisa della Lua vm?

Tuttavia, entrambi mi dice questa funzione fa questo, ma non come.

Durante la lettura di SICP, ho avuto questa sensazione di: "ah, ecco lo schema sottostante del modello di calcolo"; Sto cercando di ottenere lo stesso senso riguardo a Lua - cioè una descrizione concisa di esso è vm, un "come" piuttosto che un "cosa".

Qualcuno sa di un buon documento (oltre alla sorgente C) che descrive questo?

risposta

15

È possibile leggere lo No-Frills Intro to Lua 5(.1) VM Instructions (selezionare un collegamento, fare clic sulla scheda Docs, selezionare Inglese -> Vai).

Non mi ricordo esattamente dove ho visto, ma mi ricordo di aver letto che gli autori di Lua specificamente scoraggiano gli utenti finali di entrare troppo nel dettaglio sulla VM; Penso che vogliano che sia il più dettagliato possibile di implementazione.

+2

[Collegamento diretto a 5.1 PDF] (http://luaforge.net/docman/view.php/83/98/ANoFrillsIntroToLua51VMInstructions.pdf), [Collegamento diretto a 5.1 ODT] (http://luaforge.net/ docman/view.php/83/98/ANoFrillsIntroToLua51VMInstructions.pdf) –

3

Il modello computazionale sottostante a Lua è praticamente lo stesso del modello di calcolo sottostante Scheme, tranne per il fatto che la struttura centrale dei dati non è la cella di controllo; è il tavolo hash mutevole. (Almeno fino a quando non entri in metaprogrammazione con i metabli.) Altrimenti tutte le cose familiari sono lì: funzioni di prima classe annidate con variabili locali mutabili (variabili let-bound in Scheme), e così via.

Non mi è chiaro che otterresti molto da uno studio della VM. Ho fatto un po 'di hacking sulla VM qualche tempo fa ed è molto simile a qualsiasi altra VM orientata ai registri, anche se forse un po' più pulita. Solo una manciata di istruzioni sono specifiche per Lua.

Se siete curiosi dei metabli, la semantica viene descritta chiaramente, se in modo un po 'verboso, in Section 2.8 of the reference manual for Lua 5.1. Se guardi il codice della macchina virtuale in src/lvm.c vedrai quasi esattamente quella logica implementata in C (ad es. La funzione interna Arith). Le istruzioni VM sono specializzate per i casi comuni, ma è tutto terribilmente semplice; niente di intelligente è coinvolto.

Per anni ho sempre voluto una specificazione più formale del modello computazionale di Lua, ma i miei gusti correre più verso semantica formale ...

+0

Sono davvero curioso di tutto ciò che riguarda i metabli. Se non sono documentati nella VM, dove sono documentati? – anon

+0

Ho aggiunto alcune note sui metabli, ma non c'è davvero molto da dire. –

3

Ho trovato The Implementation of Lua 5.1 molto utile per capire cosa sta facendo Lua.

Spiega le tecniche di hashing, la garbage collection e alcuni altri frammenti.

+1

Quel foglio è buono, ma si noti che è per Lua 5.0 non 5.1. – mlepage

-3

Sono sorpreso che si riferisca alla sorgente C per la VM poiché è protetta da lua.org e tecgraf/puc rio in Brasile, specialmente perché la lingua viene utilizzata per applicazioni commerciali e commerciali reali in diversi paesi. Il documento sull'implementazione di lua contiene dettagli sulla VM nel modo più dettagliato che è consentito includere, ma la struttura della VM è proprietaria. Vale la pena notare che le versioni 5.0 e 5 'sono stati commissionati da IBM in Europa per l'uso sui mainframe dei clienti e la loro versione basata su registro dispone di una VM che accetta il formato definito da IBM delle istruzioni intermedie.

+7

La sorgente Lua VM è un software gratuito e può essere utilizzata liberamente. La tua risposta fa sembrare che Lua sia closed source con problemi legali se inclusa in qualche altro progetto. Si prega di fornire anche la prova che IBM ha commissionato la Lua VM. – Neopallium

0

Un'altra grande carta è The Implmentation of Lua 5.0, che descrive la progettazione e le motivazioni di vari sistemi chiave nella VM. Ho scoperto che leggere era un ottimo modo per analizzare e capire cosa stavo vedendo nel codice C.

Problemi correlati