Есть ли реальное преимущество от исполнения JIT Bytecode над собственным кодом наряду с возможной реализацией независимости платформы?Есть ли какое-либо реальное преимущество от исполнения JIT Bytecode над собственным кодом помимо переносимости? (General и OS-Design)
Очевидно, что языки, использующие «виртуальные машины» над исполнением JIT Bytecode, приписываются нескольким преимуществам. Но в какой степени это действительно повлияет на обсуждение преимуществ/недостатков собственного кода и выполнения JIT?
Вот список атрибутов, которые я выделяю, вопрос заключается в том, что распространяется ли это также распространяется на машинный код - если компилятор поддерживает его ...
безопасности
среды выполнения VM может наблюдать за запущенным приложением, например переполнение буфера.
Итак, первый вопрос заключается в том, выполняется ли это «среда выполнения», например, библиотекой классов или во время выполнения JIT?
Проверка границ памяти существует также для собственных компиляторов кода. Любые другие/общие ограничения здесь?
Оптимизация
Классическая оптимизация должна быть возможность в родных компиляторов кода тоже. См. LLVM, который фактически использует сгенерированный бит-код для запуска оптимизации, перед компиляцией в собственный код.
Возможно, что-то вроде динамической оптимизации в JIT, например. идентифицируя вещи для оптимизации, связанные с контекстом выполнения. Возможно, возможно и для собственного компилятора, чтобы создать некоторый код для оптимизации выполнения во время выполнения. Но не знаю, реализовано ли что-то подобное.
Популярные реализации VM делают это - вопрос в том, действительно ли это оправдывает реальные преимущества по сравнению с собственным кодом.
Многопоточность
Я не cound это время нарезания резьбы также в VM зависит от собственной реализации темы ОС.
Если мы идентифицируем, что нет никакого реального преимущества над машинным кодом, и что всегда есть время выполнения недостаток в JIT ... чем это приводит к следующему вопросу:
делает дизайн операционной системы на основе выполнения JIT (например, Singularity, Cosmos, ...) имеют смысл?
Я мог бы определить один из преимуществ: ОС с этим дизайном не нуждается в MMU. Это означает, что нет раздельного процесса, использующего MMU, а разделение между объектами/компонентами в программном обеспечении. Но стоит ли это?
С наилучшими пожеланиями ;-)
Что касается динамической оптимизации встроенным компилятором: если компилятор AOT «генерирует некоторый код для оптимизации выполнения во время выполнения», у вас уже есть JIT. И что JIT, безусловно, будет использовать более высокоуровневое описание программы, потому что это намного проще оптимизировать. Вы пробовали встраивать виртуальные вызовы, давая только машинный код (например, никакой информации о классах)? – delnan
Хорошее возражение. Поэтому динамическая оптимизация, а также GC должны быть добавлены в мой список выше. Подумайте, чтобы ответить на него подробно, ему потребуется подробное измерение текущих реализаций ... –