LLVM (ранее Low Level Virtual Machine) |
Автор: admin Просмотров: 2517 Комментарии:
Добавлен: 8 апреля 2016
Обновлено: 11.04.2016 - 22:42
Набор модульных многократно используемых технологий компилирования. Несмотря на свое название, LLVM имеет мало общего с традиционными виртуальными машинами, хотя он действительно имеет полезные библиотеки, которые можно использовать для создания виртуальных машин.
Название "LLVM" само по себе не является аббревиатурой, это полное название проекта.
LLVM начинался как научно-исследовательский проект Иллинойского университета, с целью обеспечения современной, основанной на SSA стратегии компиляции, способной поддерживать как статические, так и динамическая компиляции произвольных языков программирования. С тех пор как LLVM превратилась в зонтик проектов, состоящий из ряда подпроектов, многие из которых используются в производстве, среди многих других коммерческих и открытых проектов, а также широко используется в научных исследованиях. Код проекта LLVM лицензирован по лицензии "UIUC"
Основными подпроектами LLVM являются:
- LLVM Core libraries обеспечивают современный, независимый от исходников и платформы оптимизатор кода, наряду с поддержкой генерации кода для многих популярных процессоров (а также некоторые менее распространенные из них!). Эти библиотеки построены вокруг хорошо документированного представления кода, известного как промежуточное представление LLVM (Intermediate Representation, IR). LLVM Core библиотеки хорошо документированы, что позволяет легко изобрести свой собственный язык или порт существующего компилятора, чтобы использовать LLVM в качестве генератора и оптимизатора кода.
- Clang. Родной LLVM компилятор C/C++/Objective-C, который стремиться ускорить компиляцию (в 3 раза быстрее GCC при компиляции кода Objective-C) с чрезвычайно полезными сообщениями о ошибках и предупреждениями. Статический анализатор Clang является инструментом, который автоматически находит ошибки в коде и является отличным примером инструмента подобного рода, который можно построить с использованием внешнего интерфейса Clang в качестве библиотеки для разбора C / C ++ кода
- dragonegg интегрирует LLVM оптимизаторы и генератор кода с GCC анализаторами. Это позволяет использовать LLVM для компиляции Ada, Fortran и других языков, поддерживаемых фронтендом компилятора GCC, а также получить доступ к возможностям C, не поддерживаемым в Clang.
- LLDB проект опирается на библиотеки, предоставляемые LLVM и Clang, чтобы обеспечить родной отладчик. Он использует Clang ASTS и парсер выражений, LLVM JIT, LLVM дизассемблер и т.д. Он намного быстрее и эффективнее потребляет памяти, чем при загрузке GDB символов.
- libc++ и libc++ ABI обеспечивают совместимость со стандартами и высокую производительность при выполнении стандартной библиотеки C++, включая полную поддержку C++11.
- Проект compiler-rt обеспечивает очень точные настройки реализаций низкоуровневых процедур поддержки генератора кода, такие как __fixunsdfdi и другие вызовы, генерируемые, когда цель не имеет короткую последовательность нативных инструкции по выполнению операции ядра IR. Он также поддерживает run-time библиотеки для динамических инструментов тестирования, таких как AddressSanitizer, ThreadSanitizer, MemorySanitizer и DataFlowSanitizer.
- Подпроект OpenMP обеспечивает OpenMP runtime для использования с реализацией OpenMP в Clang.
- Vmkit является реализацией виртуальных машин Java и .NET построенных на технологиях LLVM.
- Polly проект реализует набор оптимизаций cache-locality, а также автоматический параллелизм и векторизацию, используя многогранную модель.
- Libclc проект направлен на реализацию стандартной библиотеки OpenCL.
- Klee реализует символьную виртуальную машину (symbolic virtual machine), который использует автоматическое доказательство, чтобы попытаться оценить все динамические пути через программу в попытке найти ошибки и доказать свойства функций. Главной особенностью Klee является то, что он может производить TestCase в том случае, если он обнаруживает баг.
- SafeCode компилятор безопасности памяти для программ C/C++ Это инструмент кода с рунтайм проверками памяти на ошибки безопасности (например, переполнения буфера) во время выполнения. Его можно использовать для защиты программного обеспечения от атак, а также как инструмент отладки ошибок безопасности памяти, как Valgrind.
- LLD проект стремиться быть встроенным компоновщиком для clang/llvm. В настоящее время, Clang должен вызывать системный компоновщик для создания исполняемых файлов.
В дополнение к официальным подпроектам LLVM, существует широкое разнообразие других проектов, которые используют компоненты LLVM для решения различных задач. С помощью этих внешних проектов вы можете использовать LLVM для компиляции Ruby, Python, Haskell, Java, D, PHP, Pure, Lua, а также ряда других языков. Одним из основных преимуществ LLVM является его универсальность, гибкость и возможность многократного использования, поэтому он используется для такого широкого спектра различных задач: всё для облегчения JIT компиляции встроенных языков, таких как Lua для компиляции Fortran кода для мощном супер компьютере.
LLVM имеет дружественное сообщество, заинтересованное в создании мощных низкоуровневых инструментов. Если вы заинтересованы в участии, посетите блог LLVM и подпишитесь на списки рассылок разработчиков LLVM. Информация о том как отправить патч, получить доступ к коммитам, а также о авторских правах и лицензии, смотрите политику разработчиков LLVM.
------------------------
ТРИО теплый пол отзыв
Заработок на сокращении ссылок
Earnings on reducing links
Код PHP на HTML сайты
Категория: Компиляторы
Лицензия:
University of Illinois/NCSA Open Source License
Язык программирования:
C++
Сайт проекта
Скачать LLVM (ранее Low Level Virtual Machine)
Комментарии |
Информация Комментирование данной новости запрещено. |