2014-02-17 4 views
2

Я планирую реализовать виртуальную машину в Go. Я видел учебники, в которых люди разработали собственный тип сборки для своей виртуальной машины, но виртуальная машина не выполнила код сборки напрямую. Они закодировали каждую из инструкций для своей виртуальной машины, назначая им каждый номер и формируя специальный байт-код для своей машины. Лучше ли интерпретировать байт-код или вы можете интерпретировать код сборки и добиваться тех же результатов?Должна ли виртуальная машина интерпретировать Bytecode или может ли она напрямую интерпретировать сборку VM?

+0

Если вы планируете поддерживать только одну платформу, например. x86, нет необходимости в абстрагировании инструкций. Так что это зависит от того, чего вы хотите достичь. – nemo

+0

Я бы хотел, чтобы моя виртуальная машина могла запускать платформу самостоятельно. – user3318845

+0

Извините за облачное, я имел в виду гостевые платформы. Вы хотите поддерживать разные платформы в качестве гостей? – nemo

ответ

3

Если вы хотите использовать свою виртуальную машину на разных гостевых платформах, то да.

Преимущества, что байткод дает это портативность (поэтому альтернативное именования «р-коду», который короток для «переносимого кода»).

Если вы планируете использовать свою виртуальную машину на разных платформах, вы должны пойти на байт-код. Тогда вам придется позаботиться о компиляции программы в инструкции по байт-коду, и VM позаботится обо всем остальном.

1

Язык исполнения выполняется скомпилированным байт-кодом, а не текстовыми инструкциями по сборке, поскольку синтаксический анализ выполняется медленно. Хорошо написанная среда выполнения может анализировать и выполнять инструкцию байт-кода в течение нескольких циклов процессора, но для анализа текстовых операторов требуется гораздо больше работы. Самый простой способ сделать это - разобрать весь файл сборки и сохранить его в памяти в промежуточном представлении, что является именно тем, что является байт-кодом. Кроме того, некоторые вещи, такие как переходы и адресация, действительно имеют смысл в байт-коде.

Вместо того, чтобы думать как байт-код как двоичное представление сборки, рассмотрите сборку как текстовое представление байт-кода.