Saya ingin membangun Mesin Virtual sebagai cara mandiri platform untuk menjalankan beberapa kode game (pada dasarnya skrip).
Mesin Virtual yang saya sadari dalam game agak lama: Infocom's Z-Machine , LucasArts ' SCUMM , id Software's Quake 3 . Sebagai Pengembang .net, aku akrab dengan CLR dan melihat ke dalam Instruksi CIL untuk mendapatkan gambaran tentang apa yang sebenarnya Anda menerapkan pada Tingkat VM (vs tingkat bahasa). Saya juga mencoba-coba sedikit di 6502 Assembler selama tahun lalu.
Masalahnya adalah, sekarang saya ingin¹ menerapkannya, saya perlu menggali sedikit lebih dalam. Saya tahu bahwa ada VM berbasis stack dan register, tapi saya tidak benar-benar tahu mana yang lebih baik dalam hal apa dan jika ada lebih banyak atau pendekatan hybrid. Saya perlu berurusan dengan manajemen memori, memutuskan jenis level rendah mana yang merupakan bagian dari VM dan perlu memahami mengapa hal-hal seperti ldstr bekerja seperti itu.
Satu-satunya buku referensi saya (terlepas dari hal-hal Z-Machine) adalah CLI Annotated Standard , tapi saya ingin tahu apakah ada kuliah yang lebih baik, lebih umum / mendasar untuk VM? Pada dasarnya sesuatu seperti Buku Naga , tetapi untuk VM? Saya mengetahui Seni Pemrograman Komputer Donald Knuth yang menggunakan VM berbasis register, tapi saya tidak yakin seberapa berlaku seri itu, terutama karena masih belum selesai?
Klarifikasi: Tujuannya adalah untuk membangun VM khusus. Sebagai contoh, Mesin Z Infocom berisi Opcode untuk mengatur Warna Latar Belakang atau memainkan suara. Jadi saya perlu mencari tahu berapa banyak masuk ke VM sebagai OpCodes vs kompiler yang mengambil skrip (bahasa TBD) dan menghasilkan bytecode dari itu, tetapi untuk itu saya perlu memahami apa yang sebenarnya saya lakukan.
¹ Saya tahu, teknologi modern akan memungkinkan saya untuk hanya menafsirkan bahasa scripting tingkat tinggi dengan cepat. Tapi di mana kesenangannya? :) Ini juga agak sulit untuk google karena Mesin Virtual saat ini sering dikaitkan dengan VMWare-type OS Virtualization ...
do { switch(opcode) {case OP1: ... case OP2: ...} while (nextop);
kemudian mungkin kompiler ... dan kemudian kesenangan dimulai - optimasi untuk membuatnya benar-benar berfungsi
Quake 3
mesin virtual?