Есть ли реальное преимущество от выполнения JIT байт-кода над собственным кодом помимо переносимости?(Общий и OS-дизайн) - PullRequest
1 голос
/ 04 января 2012

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

Очевидно, что языки, которые используют "виртуальные машины" по сравнению с выполнением JIT байт-кода, имеют несколько преимуществ. Но в какой степени это действительно повлияет на обсуждение преимуществ / недостатков нативного кода и выполнения JIT?

Вот список атрибутов, которые я идентифицирую, вопрос в том, в какой степени это относится и к нативному коду - если компилятор его поддерживает ...

Безопасность

Среды выполнения ВМ могут наблюдать за запущенным приложением, например, переполнение буфера.

  • Итак, первый вопрос: если это делается «средой выполнения», например, библиотекой классов или во время выполнения JIT?

  • Проверка границ памяти существует также для компиляторов собственного кода. Любые другие / общие ограничения здесь?

Оптимизация

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

  • Может быть, что-то вроде динамической оптимизации в JIT, например, определение вещей для оптимизации, связанных с контекстом выполнения. Может быть возможно и для собственного компилятора сгенерировать некоторый код для оптимизации выполнения во время выполнения. Но не знаю, реализовано ли что-то подобное.

  • Популярные реализации виртуальных машин делают это - вопрос в том, действительно ли это оправдывает реальные преимущества перед нативным кодом.

Threading

Я не вызываю этого, хотя многопоточность в виртуальной машине также зависит от собственной реализации ОС в потоке.

Если мы обнаружим, что нет реального преимущества по сравнению с нативным кодом и что всегда есть недостаток времени выполнения в JIT ... тогда это приводит к следующему вопросу:

Имеет ли смысл разработка операционной системы на основе выполнения JIT (например, Singularity, Cosmos, ...)?

Возможно, я мог бы выделить одно из преимуществ: ОС с таким дизайном не нуждается в MMU. Означает, что нет разделения процессов, которое использует MMU, но есть разделение между объектами / компонентами в программном обеспечении. Но стоит ли это того?

С уважением; -)

1 Ответ

1 голос
/ 04 января 2012

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

На практике лично я не сталкивался ни с одним случаем, когда это действительно происходило.

Но есть и другие проблемы. Языки более высокого уровня, которые компилируются в байт-код, также имеют сборку мусора, что очень полезно в некоторых областях. Это не , потому что компилятора JIT как такового, но наличие JITter делает его намного проще практически, потому что часто JITter легче анализировать и вычислять язык, например. куда идут указатели в стеке и т. д.

...