Каковы самые большие преимущества LLVM? [закрыто]

StackOverflow https://stackoverflow.com/questions/172863

  •  05-07-2019
  •  | 
  •  

Вопрос

Кто-нибудь имеет опыт работы с LLVM , llvm-gcc или Clang ?

Идея, лежащая в основе llvm, кажется мне очень интересной, и мне интересно посмотреть, как она работает. Я просто не хочу тратить много времени на опробование инструментов, если инструменты не готовы к производству.

Если у вас есть опыт работы с инструментами, что вы о них думаете? С какими основными ограничениями вы столкнулись? Каковы самые большие преимущества?

Большое спасибо!

Это было полезно?

Решение

У меня была начальная тренировка с LLVM и работа над этим руководством слева я очень, очень взволнован его потенциалом; Идея, что я могу использовать его для создания JIT в приложении с относительной легкостью, меня вдохновляет.

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

Другие советы

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

Мы (Нейт Бегеман, я и некоторые другие) написали бэкэнд PPC без реального опыта разработки компиляторов, но он выглядел достаточно простым, чтобы к нему могли подойти не эксперты. Мы были довольно хорошо знакомы со сборкой PPC, но было невероятно, что нам удалось получить LLVM-gcc, выводящий код PPC за несколько недель нашего свободного времени. Определенно один из самых приятных Hello World's, который я когда-либо составлял.

Я играю с LLVM в течение многих месяцев. Я написал две OCaml Journal статьи, посвященные использованию LLVM, из OCaml язык программирования. Это особенно интересно, потому что язык OCaml идеально подходит для написания компиляторов и имеет множество мощных и зрелых инструментов и библиотек для синтаксического анализа и т. Д.

В целом мой опыт был чрезвычайно положительным. LLVM делает то, что говорит на жестяной банке, и очень прост в использовании. Производительность сгенерированного кода превосходна. Одной из написанных мною программ был простой маленький компилятор Brainf * ck, который генерирует некоторые из самых быстрых исполняемых файлов любого из протестированных мной компиляторов (включая GCC).

У меня только две проблемы с LLVM. Во-первых, он использует abort () всякий раз, когда что-то идет не так, вместо того, чтобы вызывать исключение. Это было преднамеренное дизайнерское решение его авторов, которые стремятся удалить все случаи использования исключений из LLVM, но это делает невозможным получение обратных следов от OCaml при попытке отладки компилятора, который использует LLVM: ваша программа просто умирает с текстовым объяснением от LLVM но не знаю, где произошла ошибка в вашем источнике. Во-вторых, скомпилированная библиотека LLVM чудовищно велика (20 Мб). Я предполагаю, что это происходит из-за раздувания, вызванного C ++, но это мучительно замедляет компиляцию.

РЕДАКТИРОВАТЬ: моя работа над LLVM завершилась созданием высокопроизводительной виртуальной машины высокого уровня для сбора мусора. Загрузите бесплатно здесь и ознакомьтесь с соответствующим тесты (вау!). @Alex: Я предоставлю вам компилятор BF где-нибудь как можно скорее.

Вы спрашивали об инструментах, и я хотел бы упомянуть, что есть плагин LLVM для Eclipse CDT (для Windows, Linux и Mac). Он прекрасно интегрирует LLVM в IDE, и пользователю не нужно ничего знать о LLVM. Нажатия кнопки сборки достаточно для создания .bc и исполняемых файлов (а промежуточные файлы на фоне не видны пользователю).

Последняя версия доступна на официальном сайте обновлений Eclipse: http://download.eclipse.org/releases / Марс

Он находится в разделе Языки программирования и называется "Поддержка сборки компилятора семейства LLVM семейства C / C ++".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top