Відповіді:
LLVM - це бібліотека, яка використовується для побудови, оптимізації та створення проміжного та / або двійкового машинного коду.
LLVM може використовуватися як структура компілятора, де ви надаєте "передній кінець" (аналізатор і лексеру) і "задній кінець" (код, який перетворює представлення LLVM у фактичний код машини).
LLVM також може виступати компілятором JIT - він підтримує генерацію x86 / x86_64 та PPC / PPC64 з швидкими оптимізаціями коду, спрямованими на швидкість компіляції.
Якщо вам цікаво, ви можете грати з машинним кодом LLVM, який генерується з коду C або C ++ на їх демонстраційній сторінці , але демо-сторінку наразі вимкнено з 2013 року.
Хороший підсумок LLVM такий:
У передній частині у вас є Perl та багато інших мов високого рівня. На вихідному у вас є вихідний код, який працює безпосередньо на машині.
У центрі - ваше проміжне представлення коду. Якщо кожна мова високого рівня може бути представлена в цьому ІК-форматі LLVM, то інструменти аналізу, засновані на цьому ІК, можуть бути легко використані - це основне обгрунтування.
LLVM (раніше використовується "Віртуальна машина низького рівня", але більше не є) - це інфраструктура компілятора, написана на C ++, яка призначена для оптимізації часу компіляції, часу зв’язку, часу виконання та "простою" програми написаних програм. у довільних мовах програмування. Спочатку реалізований для C / C ++, мовна незалежна конструкція (і успіх) LLVM з тих пір породила широкий спектр передньої частини, включаючи Objective C, Fortran, Ada, Haskell, байт-код Java, Python, Ruby, ActionScript, GLSL , і інші.
Читати це для більш докладного пояснення
Також перевірте порожню Ластівку
Відповідно до книги "Початок роботи з основними бібліотеками LLVM" :
Насправді назва LLVM може посилатися на будь-яке з наведених нижче:
Проект / інфраструктура LLVM: Це парасолька для декількох проектів, які разом утворюють повноцінний компілятор: frontends, backends, оптимізатори, асемблери, лінкери, libc ++, компілятор-rt та двигун JIT. Слово "LLVM" має таке значення, наприклад, у наступному реченні: "LLVM складається з декількох проектів".
Компілятор на основі LLVM: це компілятор, побудований частково або повністю з інфраструктурою LLVM. Наприклад, компілятор може використовувати LLVM для інтерфейсу та бекенда, але використовувати системні бібліотеки GCC та GNU для завершального посилання. LLVM має таке значення в наступному реченні, наприклад: "Я використовував LLVM для компіляції програм C на платформу MIPS".
Бібліотеки LLVM: Це частина коду для багаторазового використання інфраструктури LLVM. Наприклад, LLVM має таке значення у реченні: "Мій проект використовує LLVM для генерування коду через його компіляційну систему Just-in-Time".
Ядро LLVM: Оптимізації, які відбуваються на проміжному мовному рівні, та алгоритми резервного копіювання утворюють ядро LLVM, з якого розпочався проект. LLVM має таке значення у наступному реченні: "LLVM та Clang - це два різні проекти".
LLVM IR: Це проміжне представлення компілятора LLVM. LLVM має таке значення, коли використовується в реченнях, таких як "Я створив frontend, що перекладає мою власну мову на LLVM".
LLVM - це в основному бібліотека, яка використовується для створення компіляторів та / або програмного забезпечення, орієнтованого на мову. Основна суть, хоча у вас є gcc, який, мабуть, є найпоширенішим набором компіляторів, він не створений для повторного використання, тобто. важко брати компоненти з gcc і використовувати їх для створення власного додатку. LLVM добре вирішує цю проблему, створюючи набір "модульних компіляторів та технологій компіляції та багаторазового використання", які кожен може використовувати для створення компіляторів та програмно орієнтованого на мову.
Інфраструктура компілятора LLVM особливо корисна для оптимізації та перетворення коду. Він також складається з ряду інструментів, що обслуговують різні звички. llvm-prof - це інструмент профілювання, який дозволяє виконувати профілювання виконання з метою виявлення точкових точок програми. Opt - це засіб оптимізації, який пропонує різні пропуски оптимізації (наприклад, усунення мертвого коду).
Важливо, що LLVM надає вам бібліотеки, щоб написати власні пасажі. Наприклад, якщо вам потрібно додати перевірку діапазону певних аргументів, переданих певним функціям програми, достатньо написати простого проходу LLVM.
Для отримання додаткової інформації про написання власного проходу перегляньте цей http://llvm.org/docs/WritingAnLLVMPass.html