Вопрос

Я разрабатываю язык программирования, который компилируется в промежуточный байт-код.Однако у меня возникли большие проблемы с разработкой структуры байт-кода.Есть ли у кого-нибудь подсказки о том, как представить программу в двоичном виде?Альтернативно, есть ли какие-нибудь ресурсы (желательно бесплатные) о том, как это сделать?Самое близкое, что я нашел, это описание байт-кода интерпретатора Lua.

РЕДАКТИРОВАТЬ:Еще немного информации:Я реализую свою собственную схему сбора мусора, которая сильно оптимизирована для обеспечения неизменности и параллелизма.В целях повышения эффективности мне нужны уникальные инструкции байт-кода, которые позволят программам взаимодействовать со схемой сборки мусора.

Это было полезно?

Решение

Эта статья описывает виртуальную машину GNU Smalltalk и ее байт-код.Если поискать в Google «smalltalk bytecode», найдутся и другие ресурсы.

Другие советы

Не проектируйте свой байт-код это ненужно!

Я бы рекомендовал изучить ЛЛВМ и ГНУ Молния это делает за вас большую часть тяжелой работы и просто требует от вас создания AST-подобной схемы для перевода после того, как вы все аннотировали, определили область и так далее.

Книга драконов также включает в себя несколько разделов, посвященных байт-коду.«Искусство компьютерного программирования» также может помочь, поскольку на языке Mix излагаются некоторые (устаревшие), но важные проектные решения.

Действительно, ваш промежуточный код должен быть:

  1. Что-то, что ты написан как эффективная промежуточная форма, позволяющая использовать популярные алгоритмы оптимизации и трансляцию на серверную часть без потеря семантики через плохой перевод и тому подобное:
  2. Хорошо известный и используемый IR, который можно использовать для перевода в машинный код с помощью других инструментов.Даже если вы используете настройку .NET/Mono в качестве IR, то, если она соответствует вашим потребностям, тогда отлично.

Все зависит от ваших требований, не создавайте свой собственный IR/байт-код, если в этом нет необходимости.Если что-то другое подходит, используйте это!Вам не нужно его поддерживать!

Вы можете просмотреть список инструкции байт-кода Python, и используйте модуль дис чтобы увидеть, какие байт-коды генерируются для простых программ.

Видеть сколько-мест-оптимизировано-в-pythons-bytecodeversion-2-5 для обсуждения оптимизации байт-кода.

Возможно, вам будет полезно посмотреть статью в Википедии о байт-коде. http://en.wikipedia.org/wiki/Байткод» и проследите за некоторыми ссылками на языки той эпохи и стиля, которые вас интересуют.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top