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

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

Есть ли у кого-нибудь опыт работы с LLVM, llvm-gcc, или Clang?

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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

EDIT: Моя работа над LLVM завершилась созданием высокопроизводительной виртуальной машины с высоким уровнем сбора мусора. Загрузите здесь и проверьте соответствующие тесты (ничего себе!). @Alex: Я получу этот компилятор BF для вас где-нибудь как можно скорее.

Ответ 4

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

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

Он находится в разделе Языки программирования и называется "C/С++ LLVM-Family Compiler Build Support".