Есть ли у кого-нибудь опыт работы с LLVM, llvm-gcc или Лязг?
Сама идея, лежащая в основе llvm, кажется мне очень интригующей, и мне интересно посмотреть, как она работает. Я просто не хочу тратить много времени на опробование инструментов, если они не готовы к производству.
Если у вас есть опыт работы с инструментами, что вы о них думаете? С какими основными ограничениями вы столкнулись? Какие самые большие преимущества?
Большое спасибо!





Я сначала поигрался с LLVM, и работа с этот учебник оставила меня очень взволнованным его потенциалом; Идея о том, что я могу использовать его для сравнительной легкости встраивания JIT в приложение, воодушевила меня.
Я не углубился достаточно глубоко, чтобы предложить какое-либо полезное мнение о его ограничениях, стабильности, производительности и тому подобном. Я понимаю, что это хорошо по всем статьям, но это чисто слухи.
Я не могу сказать достаточно хороших слов о LLVM. С ним так легко работать по сравнению с другими проектами компиляторов, на которые я смотрел. Я не специалист по компиляторам, но когда меня расстраивают некоторые ограничения LLVM или clang, обычно довольно легко погрузиться и изменить их.
Мы (Нейт Бегеман, я и несколько других) написали бэкэнд PPC, не имея реального опыта в проектировании компиляторов, но он выглядел достаточно простым, чтобы неспециалисты могли к нему подойти. Мы были хорошо знакомы со сборкой PPC, но все равно было невероятно, что нам удалось заставить LLVM-gcc выводить код PPC за несколько недель нашего свободного времени. Определенно один из самых приятных Hello World, которые я когда-либо скомпилировал.
Я играл с LLVM уже много месяцев. Я написал две статьи Журнал OCaml, посвященные использованию LLVM из языка программирования OCaml. Это особенно интересно, потому что язык OCaml идеально подходит для написания компиляторов и имеет множество мощных и зрелых инструментов и библиотек для синтаксического анализа и так далее.
В целом мой опыт был исключительно положительным. LLVM делает то, что написано на упаковке, и очень прост в использовании. Производительность сгенерированного кода превосходна. Одна из написанных мною программ была простым маленьким компилятором Brainf * ck, который генерирует одни из самых быстрых исполняемых файлов из всех тестируемых мной компиляторов (включая GCC).
У меня только две претензии к LLVM. Во-первых, он использует abort () всякий раз, когда что-то идет не так, вместо того, чтобы вызывать исключение. Это было намеренное дизайнерское решение его авторов, которые стремятся удалить все случаи использования исключений из LLVM, но это делает невозможным получение обратных трассировок из OCaml при попытке отладки компилятора, использующего LLVM: ваша программа просто умирает с текстовым объяснением из LLVM. но не знаю, где произошла ошибка в вашем источнике. Во-вторых, скомпилированная библиотека LLVM чудовищно велика (20Мб). Я предполагаю, что это происходит из-за раздувания, вызванного C++, но это делает компиляцию мучительно медленной.
Обновлено: Моя работа над LLVM завершилась созданием высокопроизводительной виртуальной машины со сборкой мусора. Бесплатно скачайте здесь и проверьте соответствующий ориентиры (вау!). @Alex: Я принесу вам компилятор BF как можно скорее.
Можете выложить компилятор BF? Я написал переводчик BF-> C, который, как мне кажется, настолько хорош, насколько вы можете получить за один проход, а llvm-gcc очень плохо работает в действительно больших программах. Хотя они вроде как несправедливы.
Вы спрашивали об инструментах, и я хотел бы упомянуть, что есть плагин LLVM для Eclipse CDT (для Windows, Linux и Mac). Он прекрасно интегрирует LLVM с IDE, и пользователю не нужно ничего знать о LLVM. Нажатия кнопки сборки достаточно для создания .bc и исполняемых файлов (и промежуточных файлов в фоновом режиме, невидимых для пользователя).
Последняя версия доступна на официальном сайте обновлений Eclipse: http://download.eclipse.org/releases/mars
Он находится в разделе «Языки программирования» и называется «Поддержка сборки компилятора семейства C / C++ LLVM».
Я написал следующий документ, в котором обсуждаются преимущества LLVM. llvm4eclipsecdt.googlecode.com/files/…