Различия байт-кода в разных языках программирования

Я знаю, что несколько интерпретируемых языков программирования (PHP, Python, Java, Smalltalk) используют байт-код в качестве промежуточного шага для выполнения кода.

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

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


person Reflection    schedule 23.11.2013    source источник


Ответы (2)


Байт-код - это общее слово для инструкций, выполняемых виртуальной машиной, точно так же, как машинный язык является общим термином для инструкций, выполняемых реальным процессором. Так же, как существует множество различных наборов машинных команд, существует множество различных наборов команд байт-кода. Некоторые из них, например байт-код Java, являются документированной частью платформы. Все виртуальные машины Java по определению выполняют один и тот же байт-код. Остальные - всего лишь детали реализации и различаются от версии к версии.

Отвечая на ваш последний вопрос: нет, это неверно. Java не является интерпретируемым языком; он компилируется точно в срок. C # похож. Байт-код может быть частью множества различных архитектур.

person Ernest Friedman-Hill    schedule 23.11.2013
comment
Итак, практический ответ - да? Байт-код Java отличается от байт-кода Python? Существенны ли различия между этими популярными языками? - person Reflection; 23.11.2013
comment
Да они совершенно разные. Сходства немного, если вообще есть. - person Ernest Friedman-Hill; 23.11.2013

Как упомянул Эрнест, это реализация байт-кода на разных языках, зависящая от производителя. Пока уже есть попытки стандартизировать байт-код. Ознакомьтесь с решением от Microsoft CIL

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

person Boris Ivanov    schedule 23.11.2013
comment
Разве CIL не является просто байт-кодом, специфичным для .NET? Какая в нем попытка стандартизации по сравнению с байт-кодом Java JIT? - person Reflection; 23.11.2013
comment
Да, это .NET низкого уровня, также посмотрите этот поток stackoverflow.com/questions/95163/ - person Boris Ivanov; 23.11.2013