В чем причина создания LLVM? - PullRequest
       10

В чем причина создания LLVM?

18 голосов
/ 14 сентября 2009

В чем различия между LLVM и обычным компилятором?
Является ли он более динамичным и, следовательно, может использоваться для компиляции обычно очень динамических языков (например, Javascript) в статический двоичный код? Каковы принципы его создания?
Я знаю Dragon Book для компиляторов, но есть ли такая вещь для LLVM?

EDIT: Я нашел этот интересный проект.

Ответы [ 3 ]

26 голосов
/ 14 сентября 2009

Есть несколько различий между LLVM и «обычным компилятором», которые я буду считать «gcc»:

  • LLVM предназначен для анализа всей программы (он же анализ времени компоновки), поэтому он может компилировать код в «битовый код», формат, который он может анализировать позже.
  • LLVM предоставляет компилятор "точно в срок" (JIT), чтобы он мог повторно анализировать программы во время их работы, как это делает JVM.
  • LLVM очень хорошо спроектирован:
    • его компоненты модульные и хорошо разделены,
    • у него есть 3 формата для его промежуточного представления (текстовое, двоичное и представление в памяти), которые эквивалентны,
    • его промежуточное представление использует форму SSA,
    • его промежуточное представление имеет систему типов.

Что касается Javascript и других динамических языков, мы видим много интересного в LLVM от сообщества динамических языков, когда его тестируют реализации Python и Ruby. Тем не менее, они не пытаются быть статическими компиляторами. Они сосредоточены на использовании JIT. В частности, они оптимизируют долго выполняемые исполняемые файлы, используя «интерпретатор смешанного режима», где они первоначально интерпретируют программы, а затем компилируют их, используя LLVM во время выполнения. Я не видел движок javascript, использующий LLVM, но, вероятно, он есть. Он просто не будет создавать статические исполняемые файлы, за исключением необычных обстоятельств или для урезанных версий Javascript.

Что касается причины создания LLVM, то это началось как часть работы Vikram Adve по исследовательской группе над пожизненной компиляцией (что означает JIT и оптимизацию времени соединения). ). После получения степени доктора наук Крис Латтнер перешел в Apple, что значительно продвинуло проект вперед (возможно, потому, что оно лицензировано BSD, что в прошлом вызывало у них проблемы с gcc, то есть GPL).

5 голосов
/ 14 сентября 2009

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

2 голосов
/ 01 августа 2011

Я вовсе не разработчик, но: даже если gpl вынудил NeXt опубликовать свою среду выполнения ObjC в 80-х, основной причиной для Apple финансировать другой компилятор (GPL или нет) является его желание интегрироваться в IDE. В GCC оказалось слишком много инерции в этой области, и GCC недостаточно модульна, чтобы разрешить повторное использование частей кода (функция xcode «fix it»). Вот что я понял из моих чтений

...