Что именно LLVM? - PullRequest
       17

Что именно LLVM?

409 голосов
/ 01 марта 2010

Я постоянно слышу о LLVM. Это на Perl, потом на Haskell, потом кто-то использует его на каком-то другом языке? Что это?

Ответы [ 6 ]

320 голосов
/ 01 марта 2010

LLVM - это библиотека, которая используется для создания, оптимизации и производства промежуточного и / или двоичного машинного кода.

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

LLVM также может выступать в качестве JIT-компилятора - он поддерживает генерацию сборок x86 / x86_64 и PPC / PPC64 с быстрой оптимизацией кода, нацеленной на скорость компиляции.

Если вам интересно, вы можете поиграть с машинным кодом LLVM, сгенерированным из кода C или C ++, на их демонстрационной странице , но демонстрационная страница в настоящее время отключена с 2013 года.

66 голосов
/ 03 марта 2018

Хорошая сводка LLVM такова:

enter image description here

На вашем фронте есть Perl и многие другие языки высокого уровня. На сервере у вас есть встроенный код, который запускается прямо на компьютере.

В центре ваше промежуточное кодовое представление. Если все языки высокого уровня могут быть представлены в этом формате IR LLVM, то инструменты анализа, основанные на этом IR, могут быть легко использованы повторно - это является основным рациональным.

63 голосов
/ 01 марта 2010

LLVM (используется для обозначения «Виртуальная машина низкого уровня», но больше не является) - это инфраструктура компилятора, написанная на C ++, которая предназначена для оптимизации во время компиляции, во время соединения, во время выполнения и в режиме ожидания программ, написанных на произвольных языках программирования. Первоначально реализованный для C / C ++, независимый от языка дизайн (и успех) LLVM породил широкий спектр внешних интерфейсов, включая Objective C, Fortran, Ada, Haskell, байт-код Java, Python, Ruby, ActionScript, GLSL. и др.

Прочитайте это для более подробного объяснения
Также посмотрите Ласточка без груза

47 голосов
/ 26 января 2015

Согласно «Начало работы с базовыми библиотеками LLVM» book (c):

На самом деле имя LLVM может относиться к любому из следующего:

* +1007 *

Проект / инфраструктура LLVM: Это зонтик для нескольких проекты, которые вместе образуют полный компилятор: внешние интерфейсы, бэкэнды, оптимизаторы, ассемблеры, компоновщики, libc ++, compiler-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 два разных проекты».

IR LLVM: Это промежуточное звено компилятора LLVM представление. LLVM имеет это значение при использовании в таких предложениях, как «Я создал интерфейс, который переводит мой собственный язык на LLVM».

32 голосов
/ 05 мая 2014

LLVM - это библиотека, используемая для создания компиляторов и / или программного обеспечения, ориентированного на язык. Основная суть в том, что хотя у вас есть gcc, который, вероятно, является наиболее распространенным набором компиляторов, он не предназначен для повторного использования, т.е. трудно взять компоненты из gcc и использовать его для создания собственного приложения. LLVM хорошо решает эту проблему, создавая набор «модульных и многократно используемых технологий компиляторов и наборов инструментов», которые каждый может использовать для создания компиляторов и языкового программного обеспечения.

5 голосов
/ 05 февраля 2014

Инфраструктура компилятора LLVM особенно полезна для выполнения оптимизации и преобразования кода. Он также состоит из ряда инструментов, обслуживающих различные виды использования. llvm-prof - это инструмент профилирования, который позволяет вам выполнять профилирование выполнения для определения горячих точек программы. Opt - это инструмент оптимизации, который предлагает различные этапы оптимизации (например, удаление мертвого кода).

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

Для получения дополнительной информации о написании вашего собственного Pass, отметьте это http://llvm.org/docs/WritingAnLLVMPass.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...