Другая причина, по которой программирование байт-кодами гораздо менее популярно / распространено, чем программирование на ассемблере, заключается в универсальности байт-кода - его простоте.
Наборы инструкций байт-кода в значительной степени являются "ультра-RISC", очень простыми инструкциями.Предназначен для двух целей: предоставить виртуальной машине возможность быстро переводить / отображать ее в собственный набор инструкций и позволить высокоуровневому компилятору легко создавать почти родной байт-код.
Ассемблер, с другойhand, также имеет такие простые общие части - и это те, которые интерпретатор байт-кода / компилятор "точно в срок" фактически использует для реализации функциональности байт-кода.Лишь немногие люди используют эти части собственного набора команд для написания программ на ассемблере.(Just-in-time-) компилятор сделает это за вас.
Но ассемблер имеет гораздо больше , особенно SIMD / векторные инструкции.Эти инструкции имеют специальное назначение и очень эффективны для очень специфических рабочих нагрузок («потоковая передача данных», в самом широком смысле - всего, что перетекает через такие данные, как Дракула в женскую глотку).На сегодняшний день существуют ситуации, когда небольшое вмешательство человека может превзойти результат компилятора на несколько порядков.Для этого часто требуется использование таких векторных инструкций, в частности, что компилятор не может быть принужден к выполнению за вас.
Плата, которую приходится платить, заключается в написании встроенной функции сборки.
В байт-коде отсутствуют эти специальные инструкции, и такое расширение байт-кода даст одно из самых больших преимуществ наличия байт-кода в первую очередь.Это сделало бы его непереносимым между типами ЦП - векторные расширения, скажем, x86 / x64 (SSEx), ARM (Neon) или PowerPC (AltiVec) слишком разные, чтобы отобразить один слой подкладки сверху.
Что касается обучения программирования на уровне ассемблера, для этого не требуется фактический набор инструкций ЦП;Дональд Кнут в «Искусстве компьютерного программирования» использовал «виртуальный» ассемблер под названием MIX / MMIX так долго, что он предшествовал существованию слова «байт-код» на несколько десятилетий.Концепции, которые можно преподавать на языке ассемблера x86, которые можно преподавать также с помощью байт-кода .NET.
Но главная причина (за пределами академии, см. Предыдущий абзац), почему люди пишут на языке ассемблера, - использование возможностей оптимизации для конкретной платформы сделало возможнымпо специальным расширениям набора команд - недопустимая причина для непосредственного написания байт-кода.