Je cherche à construire une machine virtuelle comme un moyen indépendant de la plate-forme pour exécuter du code de jeu (essentiellement des scripts).
Les machines virtuelles que je connais dans les jeux sont plutôt anciennes: Z-Machine d' Infocom , SCUMM de LucasArts , Quake 3 d' id Software . En tant que développeur .net, je connais le CLR et j'ai examiné les instructions CIL pour obtenir un aperçu de ce que vous implémentez réellement au niveau d'une machine virtuelle (par rapport au niveau de la langue). J'ai également essayé un peu le 6502 Assembler au cours de la dernière année.
Le truc, c'est que maintenant que je veux en implémenter un, je dois creuser un peu plus. Je sais qu'il existe des machines virtuelles basées sur la pile et les registres, mais je ne sais pas vraiment laquelle est meilleure dans quoi et s'il existe des approches plus ou hybrides. J'ai besoin de gérer la gestion de la mémoire, de décider quels types de bas niveau font partie de la machine virtuelle et de comprendre pourquoi des choses comme ldstr fonctionnent ainsi.
Mon seul livre de référence (à part les éléments Z-Machine) est le CLI Annotated Standard , mais je me demande s'il y a une meilleure conférence, plus générale / fondamentale pour les VM? Fondamentalement, quelque chose comme le Dragon Book , mais pour les machines virtuelles? Je connais l' art de la programmation informatique de Donald Knuth qui utilise une machine virtuelle basée sur un registre, mais je ne sais pas dans quelle mesure cette série est toujours applicable, d'autant plus qu'elle n'est toujours pas terminée?
Clarification: L'objectif est de construire une VM spécialisée. Par exemple, la Z-Machine d'Infocom contient des codes d'opération pour définir la couleur d'arrière-plan ou jouer un son. J'ai donc besoin de comprendre combien va dans la machine virtuelle en tant que OpCodes par rapport au compilateur qui prend un script (langage TBD) et génère le bytecode à partir de celui-ci, mais pour cela, je dois comprendre ce que je fais vraiment.
¹ Je sais, la technologie moderne me permettrait d'interpréter à la volée un langage de script de haut niveau. Mais où est le plaisir là-dedans? :) C'est aussi un peu difficile à google car les machines virtuelles sont aujourd'hui souvent associées à la virtualisation de système d'exploitation de type VMWare ...
do { switch(opcode) {case OP1: ... case OP2: ...} while (nextop);
puis peut-être un compilateur ... et puis le plaisir commence - optimisation pour que cela fonctionne réellement
Quake 3
une machine virtuelle?