Ответ 1
В этой статье описывается виртуальная машина GNU Smalltalk и ее байт-код. Googling для "smalltalk bytecode" придумает другие ресурсы.
Я разрабатываю язык программирования, который компилируется в промежуточный байт-код. Тем не менее, у меня много проблем при проектировании структуры байткода. У кого-нибудь есть указатели на то, как представлять программу в двоичном формате? В качестве альтернативы, есть ли какие-либо ресурсы (желательно бесплатно) о том, как это сделать? Самое близкое, что я нашел, это описание байт-кода интерпретатора Lua.
EDIT: немного больше информации: я реализую свою собственную схему сбора мусора, которая сильно оптимизирована для неизменности и concurrency. Для эффективности я нуждаюсь в некоторых уникальных инструкциях байткода, которые позволяют программам взаимодействовать с схемой сбора мусора.
В этой статье описывается виртуальная машина GNU Smalltalk и ее байт-код. Googling для "smalltalk bytecode" придумает другие ресурсы.
Не создавайте свой байт-код, это не нужно!
Я бы порекомендовал заглянуть в LLVM и GNU Lightning, которые много полезны для вас и просто требуют, чтобы вы создали схему, подобную AST, для перевода после того, как вы внесли аннотированные данные и разрешили область действия и т.д.
В книгу драконов также включены некоторые разделы по байт-коду. Искусство компьютерного программирования также может помочь, поскольку язык Mix содержит некоторые (датированные), но важные проектные решения.
Действительно, ваш промежуточный код должен быть:
Это все о ваших требованиях, не создавайте собственный IR/байт-код, если вам не нужно. Если что-то еще подходит, используйте его! Вам не нужно его поддерживать!
Вы можете перечислить список инструкции по байтовому протоколу python и использовать dis module, чтобы узнать, какие байткоды создаются для простых программ.
См. how-many-places-are-optimized-in-pythons-bytecodeversion-2-5 для обсуждения оптимизации байт-кода.
Вы можете счесть полезным ознакомиться с статьей Википедии о Bytecode http://en.wikipedia.org/wiki/Bytecode " и следуйте некоторым ссылкам на языки интересующего вас возраста и стиля.