Подтвердить что ты не робот

В чем разница между LLVM и java байт-кодом?

Я не понимаю разницу между LLVM и java (байт-код), каковы они?

-edit- by "что они" я имею в виду различия между LLVM и java (байт-код), а не LLVM и java.

4b9b3361

Ответ 1

Предполагая, что вы имеете в виду JVM, а не Java:

LLVM - это виртуальная машина на основе регистров низкого уровня. Он предназначен для абстрагирования базового оборудования и построения чистой линии между коннектором компилятора (генерацией машинного кода) и интерфейсом (синтаксический анализ и т.д.).

JVM - это виртуальная машина на основе стека гораздо более высокого уровня. JVM предоставляет сборку мусора, имеет понятие объектов и вызовов виртуальных методов и многое другое. Таким образом, JVM обеспечивает гораздо более высокую инфраструктуру уровня для интероперабельности языков (подобно Microsoft CLR).

(Эти абстракции можно создавать над LLVM, так как их можно построить поверх C.)

Ответ 2

Слишком плохо, что этот вопрос вышел на неправильную ногу. Я подошел к нему, ища более подробное сравнение.

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

Биткод LLVM ближе к коду уровня машины, но не связан определенной архитектурой. Например, я думаю, что бит-код LLVM может использовать произвольное количество логических регистров. Может быть, кто-то более знакомый с LLVM может говорить здесь?

Ответ 3

Java - это язык программирования, который использует JVM как средство исполнения "Just in Time" (JIT), тогда как LLVM - это комплект для составления компилятора, предназначенный для разработки новых языков и интерфейсов для существующих языков. LLVM имеет механизм JIT, но его не нужно использовать, если вы его не требуете. Вы можете выбросить ассемблер LLVM, байт-код или ассемблер, специфичный для платформы, вместо использования JIT-исполнения.