LLVM

LLVM, tamén chamado LLVM Core, é un optimizador e xerador de código independente. Pode ser utilizado para desenvolver un frontend para calquera linguaxe de programación e un backend para calquera arquitectura de conxunto de instrucións. LLVM está deseñado arredor dunha representación intermedia (IR) independente da linguaxe que serve como un linguaxe ensambladora portátil e de alto nivel que pode ser optimizada con diversas transformacións a través de múltiples pasaxes. O nome LLVM orixinalmente significaba Low Level Virtual Machine. Con todo, o proxecto ampliouse desde entón, e o nome xa non é un acrónimo senón un inicialismo orfo.
LLVM está escrito en C++ e está deseñado para optimización en tempo de compilación, tempo de enlace, tempo de execución e "optimización en tempo inactivo". Inicialmente implementado para C e C++, o deseño independente da linguaxe de LLVM deu lugar desde entón a unha ampla variedade de frontends: as linguaxes con compiladores que utilizan LLVM (ou que non utilizan directamente LLVM pero poden xerar programas compilados como LLVM IR) inclúen ActionScript, Ada, C# para. NET, Common Lisp, PicoLisp, Crystal, CUDA, D, Delphi, Dylan, Forth, Fortran, FreeBASIC, Free Pascal, Halide, Haskell, Idris, Jai (só para compilacións de liberación optimizadas), bytecode de Java, Julia, Kotlin, a linguaxe G de LabVIEW, Objective-C, OpenCL, SQL e PLpgSQL de PostgreSQL, Ruby, Rust, Scala, Standard ML, Swift, Xojo e Zig. Historia
O proxecto LLVM comezou en 2000 na Universidade de Illinois en Urbana–Champaign, baixo a dirección de Vikram Adve e Chris Lattner. LLVM foi desenvolvido inicialmente como unha infraestrutura de investigación para investigar técnicas de compilación dinámica para linguaxes de programación estáticas e dinámicas. LLVM foi liberado baixo a Licenza de Código Aberto da Universidade de Illinois/NCSA, unha licenza de software libre permisiva. En 2005, Apple Inc. contratou a Lattner e formou un equipo para traballar no sistema LLVM para diversos usos dentro dos sistemas de desenvolvemento de Apple. LLVM foi unha parte integral das ferramentas de desenvolvemento Xcode de Apple para macOS e iOS desde Xcode 4 en 2011.
En 2006, Lattner comezou a traballar nun novo proxecto chamado Clang. A combinación do frontend Clang e do backend LLVM denomínase Clang/LLVM ou simplemente Clang. O nome LLVM era orixinalmente un inicialismo para Low Level Virtual Machine. Con todo, o proxecto LLVM evolucionou cara a un proxecto paraguas que ten pouca relación co que a maioría dos desenvolvedores actuais consideran unha máquina virtual. Isto fixo que o inicialismo fose "confuso" e "inadecuado", e desde 2011 LLVM é "oficialmente xa non un acrónimo", senón unha marca que se aplica ao proxecto paraguas de LLVM. O proxecto abrangue a representación intermedia (IR) de LLVM, o depurador de LLVM, a implementación de LLVM da Biblioteca Estándar de C++ (con soporte completo para C++11 e C++14), etc. LLVM é administrado pola Fundación LLVM. A enxeñeira de compiladores Tanya Lattner converteuse na súa presidenta en 2014.
"Para o deseño e a implementación de LLVM", a Asociación para a Maquinaria de Computación presentou a Vikram Adve, Chris Lattner e Evan Cheng co Premio ao Sistema de Software ACM 2012.
O proxecto estaba orixinalmente dispoñible baixo a licenza UIUC. Despois da versión 9. 0. 0 lanzada en 2019, LLVM foi re-licenciado baixo a Licenza Apache 2. 0 con Excepcións de LLVM. A partir de novembro de 2022, aproximadamente 400 contribucións non foron re-licenciadas. Características
LLVM pode proporcionar as capas intermedias dun sistema de compilador completo, tomando código de representación intermedia (IR) dun compilador e emitindo un IR optimizado. Este novo IR pode ser convertido e vinculado a código de linguaxe ensambladora dependente da máquina para unha plataforma de destino. LLVM pode aceptar o IR da colección de ferramentas do GNU Compiler Collection (GCC), permitindo que se utilice cunha ampla variedade de frontends de compilador existentes escritos para ese proxecto. LLVM tamén se pode compilar con gcc despois da versión 7. 5.