Sto cercando di costruire una macchina virtuale come un modo indipendente dalla piattaforma per eseguire alcuni codici di gioco (essenzialmente script).
Le macchine virtuali di cui sono a conoscenza nei giochi sono piuttosto vecchie: Infocom's Z-Machine , LucasArts ' SCUMM , id Software Quake 3 . Come sviluppatore .net, ho familiarità con CLR e ho esaminato Istruzioni CIL per avere una panoramica di ciò che effettivamente implementa su un VM Level (rispetto al livello di lingua). Ho anche dilettato un po 'in 6502 Assembler durante l'ultimo anno.
Il fatto è che ora voglio implementarlo uno, ho bisogno di scavare un po 'più a fondo. So che esistono macchine virtuali basate su stack e basate su registri, ma non so in realtà quale sia il migliore su cosa e se ci sono approcci più o ibridi. Devo occuparmi della gestione della memoria, decidere quali tipi di basso livello fanno parte della VM e devono capire perché cose come ldstr funziona come fa.
Il mio unico libro di riferimento (a parte il materiale di Z-Machine) è lo standard annotato dalla CLI , ma io chiedo se c'è una lezione migliore, più generale / fondamentale per VM? Fondamentalmente qualcosa come Dragon Book , ma per le VM? Sono a conoscenza di Art of Computer Programming di Donald Knuth che utilizza una macchina virtuale basata su registro, ma non sono sicuro di come applicabile quella serie è ancora, soprattutto dal momento che è ancora incompiuta?
Chiarimento: l'obiettivo è costruire una VM specializzata. Ad esempio, la Z-Machine di Infocom contiene OpCodes per l'impostazione del colore di sfondo o la riproduzione di un suono. Quindi ho bisogno di capire quanto vada nella VM come OpCodes rispetto al compilatore che accetta uno script (linguaggio TBD) e ne genera il bytecode, ma per quello ho bisogno di capire cosa sto facendo veramente.
¹ Lo so, la tecnologia moderna mi permetterebbe di interpretare al volo un linguaggio di scripting di alto livello. Ma dov'è il divertimento in questo? :) È anche un po 'difficile da google perché Virtual Machines è oggi spesso associato alla virtualizzazione del SO tipo VMWare ...