Мне интересно, является ли LLVM типичной виртуальной машиной, такой как Java или .Net, или это просто среда выполнения, такая же, как обычная среда выполнения C ++?
Это не из тех вещей.
LLVM раньше означало «виртуальная машина низкого уровня», но это никогда не означало полноценную виртуальную машину в смысле Java или .NET, и с тех пор «LLVM» перестало быть аббревиатурой.
Центральная часть LLVM — LLVM IR.
IR означает внутреннее представление, которое является терминологией, используемой в компиляторах и относящейся к программному представлению, используемому между интерфейсом и бэкэндом. IR позволяет отделить детали синтаксического анализа от деталей генерации кода. В традиционном дизайне компилятора в идеале можно свободно смешивать внешние и внутренние компоненты, так что N внешних и M внутренних компонентов позволят вам создавать NxM-компиляторы.
IR LLVM отличается от традиционных внутренних представлений; вместо того, чтобы основываться на абстрактных синтаксических деревьях, LLVM IR является своего рода ассемблером или байтовым кодом, похожим на Java и .NET. Вот тут и появилась «виртуальная машина». Однако LLVM IR не обеспечивает семантику высокого уровня, такую как проверка границ массивов, как это делают .NET и JVM. Кроме того, LLVM IR может быть скомпилирован с помощью JIT, но обычно он статически компилируется в нативный код, как это сделал бы любой бэкэнд любого традиционного компилятора с IR.
LLVM стал называться зонтичным проектом для многих компонентов, связанных с базовой инфраструктурой компилятора. Изначально LLVM был IR и инструментами для работы с ним (оптимизация, codegen), но расширился, чтобы охватить гораздо больше, включая некоторые внешние интерфейсы, предназначенные для LLVM IR, инфраструктуру машинного кода для анализа и генерации сборки, обработку универсальных объектных файлов, отладчик , линкер …
Если вам интересно, каждый год проводится конференция LLVM, на которой рассказывается о том, что происходит в LLVM и проектах с использованием LLVM, и они записывают и публикуют презентации: http://llvm.org/devmtg/. Этот год проводится только на следующей неделе.
Других решений пока нет …