Tôi đang tìm cách xây dựng Máy ảo như một cách độc lập với nền tảng để chạy một số mã trò chơi (về cơ bản là kịch bản).
Các máy ảo mà tôi biết trong các trò chơi khá cũ: Z-Machine của Infocom , SCUMM của LucasArts , Quake 3 của Phần mềm id . Là một Nhà phát triển .net, tôi quen thuộc với CLR và xem Hướng dẫn CIL để có cái nhìn tổng quan về những gì bạn thực sự triển khai ở cấp VM (so với cấp độ ngôn ngữ). Tôi cũng đã học được một chút về 6502 Trình biên dịch trong năm ngoái.
Vấn đề là, bây giờ tôi muốn thực hiện nó, tôi cần đào sâu hơn một chút. Tôi biết rằng có các VM dựa trên stack và đăng ký, nhưng tôi không thực sự biết cái nào tốt hơn cái gì và nếu có nhiều cách tiếp cận lai hay hơn. Tôi cần phải xử lý việc quản lý bộ nhớ, quyết định loại cấp thấp nào là một phần của VM và cần hiểu lý do tại sao những thứ như ldstr hoạt động theo cách của nó.
Cuốn sách tham khảo duy nhất của tôi (ngoài công cụ Z-Machine) là Tiêu chuẩn chú thích CLI , nhưng tôi tự hỏi liệu có một bài giảng cơ bản, tổng quát / cơ bản hơn cho VM không? Về cơ bản một cái gì đó giống như Dragon Book , nhưng đối với VM? Tôi biết về Nghệ thuật lập trình máy tính của Donald Knuth sử dụng máy ảo dựa trên đăng ký, nhưng tôi không chắc chắn loạt ứng dụng đó vẫn còn, đặc biệt là vì nó vẫn còn dang dở?
Làm rõ: Mục tiêu là xây dựng một VM chuyên dụng. Ví dụ: Z-Machine của Infocom chứa OpCodes để đặt Màu nền hoặc phát âm thanh. Vì vậy, tôi cần phải tìm ra bao nhiêu đi vào VM như OpCodes so với trình biên dịch lấy tập lệnh (ngôn ngữ TBD) và tạo mã byte từ nó, nhưng tôi cần hiểu những gì tôi đang làm.
Tôi biết, công nghệ hiện đại sẽ cho phép tôi diễn giải một ngôn ngữ kịch bản cấp cao một cách nhanh chóng. Nhưng đâu là niềm vui trong đó? :) Điều này cũng hơi khó với google vì các máy ảo hiện nay thường được liên kết với ảo hóa hệ điều hành kiểu VMWare ...
do { switch(opcode) {case OP1: ... case OP2: ...} while (nextop);
trình biên dịch ) và sau đó là phiên bản đầu tiên của VM là một vòng lặp, sau đó có thể là trình biên dịch ... và sau đó, trò vui bắt đầu - tối ưu hóa để làm cho nó thực sự hoạt động
Quake 3
một máy ảo?