Какво е LLVM и защо е полезно?
Множество мини-проекти работят под чадъра на LLVM. Мини-проектите се занимават основно с компилаторни технологии. Изглежда има известно объркване по отношение на именуването на LLVM. Хората погрешно предполагат, че е свързано с виртуални машини. Няма връзка. Терминът LLVM не означава нищо. Това е просто име, което е използвано в началото на проекта.
Проектът LLVM се управлява под лиценза BSD-стил „UIUC“. Проектът възниква в Университета на Илинойс. Оттогава той придоби популярност и се използва за голямо разнообразие от проекти. Той е особено популярен в академичните среди. Основната цел на проекта е да осигури SSA-базирана статична и динамична компилация на различни програмни езици.
Ето мини-проекта на LLVM:
- LLVM ядро: Основните библиотеки осигуряват оптимизация и поддръжка за генериране на код за процесори. LLVM IR (междинно представителство) осигурява основата за библиотеките. Общността е свършила добра работа по документирането на LLVM Core. Така че можете лесно да използвате тези библиотеки, за да създадете своя нов програмен език или да създадете порт на съществуващ компилатор. Ако искате да се впуснете в тези територии, LLVM Core е добро място да започнете.
- Clang: Това е компилатор, който е три пъти по-бърз от GCC. Той е насочен към C, C ++ и Objective-C. Грешките и предупрежденията на Clang са по-лесни за разбиране. Той също има инструмент за статичен анализатор. Самият инструмент за статичен анализатор е изграден с помощта на компилатора Clang.
- LLDB: Това е дебъгер. Той е по-бърз и по-ефективен от GDB. Дебъгерът е изграден с помощта на Clang и LLVM Core.
- libc ++ и libc ++ ABI: По-добро изпълнение на C ++ STD.
- compiler-rt: Той осигурява поддръжка за код от ниско ниво. Той също така разполага с библиотеки за динамично тестване.
- OpenMP: Open Multi-Processing (OpenMP) е API, който помага за многопоточност. Този проект поддържа родното време за изпълнение на OpenMP, което ще се използва с Clang.
- Поли: В света на LLVM това е цикъл на високо ниво и оптимизатор на местоположението на данни. Той оптимизира моделите за достъп до паметта на програмите.
- libclc: Библиотека за OpenCL.
- klee: Това е символична виртуална машина. Можете да използвате klee, за да прекосите всички динамични пътеки в програма, за да намерите проблеми. Машината може да произвежда автоматизирани тестови случаи.
- БЕЗОПАСНОСТ: Той е компилатор за C / C ++, за да гарантира безопасността на паметта. Това е чудесен инструмент за изследване на експертите по киберсигурност. Той може да помогне при откриване на грешки в безопасността на паметта.
- lld: Изгражда линкер за работа с Clang и LLVM.
LLVM има репутация за създаване на по-чисти двоични файлове от GCC. Също така, LLVM има външни проекти, които могат да се използват за компилиране на Python, Haskell, PHP, LUA, Ruby и други езици. LLVM се счита за универсално, гъвкаво и многократно решение. Така той набира популярност в общността на разработчиците. Използва се като JIT компилатори за вградени езици. LLVM се използва и за суперкомпютри. Широката подкрепа от общността на разработчиците го прави надежден инструмент.
Допълнително проучване:
- http: // www.drdobbs.com / architecture-and-design / the-design-of-llvm / 240001128
- https: // llvm.org / docs / tutorial /
- http: // clang.llvm.организация /
- http: // lldb.llvm.организация /
- http: // libcxx.llvm.организация /
- http: // libcxxabi.llvm.организация /
- http: // compiler-rt.llvm.организация /
- http: // openmp.llvm.организация /
- http: // polly.llvm.организация /
- http: // libclc.llvm.организация /
- http: // klee.github.io /
- http: // safecode.cs.Илинойс.edu /
- http: // lld.llvm.организация /