Почему программирование в байт-коде не так популярно или распространено, как программирование на ассемблере? - PullRequest
3 голосов
/ 08 мая 2011

Вы видите ассемблерный код и ассемблерные кодеры по всему Интернету, но в байт-коде почти ничего нет. Это почему ? Потребности и преимущества программирования на ассемблере должны сохраняться и для программирования в байт-коде.

Ответы [ 4 ]

5 голосов
/ 09 мая 2011

Другая причина, по которой программирование байт-кодами гораздо менее популярно / распространено, чем программирование на ассемблере, заключается в универсальности байт-кода - его простоте.

Наборы инструкций байт-кода в значительной степени являются "ультра-RISC", очень простыми инструкциями.Предназначен для двух целей: предоставить виртуальной машине возможность быстро переводить / отображать ее в собственный набор инструкций и позволить высокоуровневому компилятору легко создавать почти родной байт-код.

Ассемблер, с другойhand, также имеет такие простые общие части - и это те, которые интерпретатор байт-кода / компилятор "точно в срок" фактически использует для реализации функциональности байт-кода.Лишь немногие люди используют эти части собственного набора команд для написания программ на ассемблере.(Just-in-time-) компилятор сделает это за вас.
Но ассемблер имеет гораздо больше , особенно SIMD / векторные инструкции.Эти инструкции имеют специальное назначение и очень эффективны для очень специфических рабочих нагрузок («потоковая передача данных», в самом широком смысле - всего, что перетекает через такие данные, как Дракула в женскую глотку).На сегодняшний день существуют ситуации, когда небольшое вмешательство человека может превзойти результат компилятора на несколько порядков.Для этого часто требуется использование таких векторных инструкций, в частности, что компилятор не может быть принужден к выполнению за вас.

Плата, которую приходится платить, заключается в написании встроенной функции сборки.

В байт-коде отсутствуют эти специальные инструкции, и такое расширение байт-кода даст одно из самых больших преимуществ наличия байт-кода в первую очередь.Это сделало бы его непереносимым между типами ЦП - векторные расширения, скажем, x86 / x64 (SSEx), ARM (Neon) или PowerPC (AltiVec) слишком разные, чтобы отобразить один слой подкладки сверху.

Что касается обучения программирования на уровне ассемблера, для этого не требуется фактический набор инструкций ЦП;Дональд Кнут в «Искусстве компьютерного программирования» использовал «виртуальный» ассемблер под названием MIX / MMIX так долго, что он предшествовал существованию слова «байт-код» на несколько десятилетий.Концепции, которые можно преподавать на языке ассемблера x86, которые можно преподавать также с помощью байт-кода .NET.

Но главная причина (за пределами академии, см. Предыдущий абзац), почему люди пишут на языке ассемблера, - использование возможностей оптимизации для конкретной платформы сделало возможнымпо специальным расширениям набора команд - недопустимая причина для непосредственного написания байт-кода.

5 голосов
/ 08 мая 2011

Большинство байт-кодов (в любом случае, все они я видел) предназначены для удобной компиляции.С x86 (например) вы можете получить приличную сумму с рукописной сборкой, потому что это такая боль для компиляции.Гораздо проще компилировать байт-коды Java (для одного примера), поэтому выигрыш от написания их вручную имеет тенденцию быть сравнительно небольшим.

.NET облегчает написание программ, генерирующих и использующих его ILтак что, как правило, это происходит немного чаще, хотя, честно говоря, большинство примеров, которые я видел, выглядели для меня так, будто они были выполнены почти так же, как и там, и потому, что это было действительно необходимо.

3 голосов
/ 08 мая 2011

Другая причина популярности сборки, которая не относится к байт-коду, заключается в том, что иногда требуется для использования сборки (например, при записи определенных зависящих от ЦП частей ОС).

3 голосов
/ 08 мая 2011

У меня есть сомнения по поводу ваших утверждений о популярности программирования на ассемблере, но это не главное.

Ответ прост: «потому что в этом нет необходимости».Искусственные языки ассемблера предназначены для удовлетворения потребностей языка, для которого они предназначены, и имеют очень тесную связь с ними, а не с аппаратными средствами.С ними мало что можно сделать, чего не так легко достичь на языке более высокого уровня.

...