Что такое LLVM?

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

Ответ 1

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

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

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

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

Ответ 2

Хорошее резюме LLVM это:

enter image description here

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

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

Ответ 3

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

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

Ответ 4

Согласно "Начало работы с библиотеками основных библиотек LLVM" (c):

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

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

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

Ответ 5

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

Ответ 6

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

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

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