Respuestas:
LLVM es una biblioteca que se utiliza para construir, optimizar y producir código de máquina intermedio y / o binario.
LLVM se puede usar como un marco de compilación, donde se proporciona el "front-end" (analizador y lexer) y el "back-end" (código que convierte la representación de LLVM en código de máquina real).
LLVM también puede actuar como un compilador JIT: tiene soporte para x86 / x86_64 y la generación de ensamblaje PPC / PPC64 con optimizaciones de código rápidas destinadas a la velocidad de compilación.
Si está interesado, puede jugar con el código de máquina de LLVM que se genera a partir del código C o C ++ en su página de demostración , pero la página de demostración está actualmente desactivada desde el año 2013.
Un buen resumen de LLVM es este:
En la interfaz tienes Perl y muchos otros idiomas de alto nivel. En el backend, tiene el código nativo que se ejecuta directamente en la máquina.
En el centro está su representación de código intermedio. Si cada lenguaje de alto nivel puede representarse en este formato LLVM IR, entonces las herramientas de análisis basadas en este IR pueden reutilizarse fácilmente, esa es la razón básica.
LLVM (solía significar "Máquina virtual de bajo nivel", pero ya no es más) es una infraestructura de compilación, escrita en C ++, que está diseñada para la optimización de los programas escritos en tiempo de compilación, tiempo de enlace, tiempo de ejecución y "tiempo de inactividad". en lenguajes de programación arbitrarios. Originalmente implementado para C / C ++, el diseño independiente del lenguaje (y el éxito) de LLVM ha generado una amplia variedad de front-end, incluidos Objective C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL , y otros.
Lea esto para obtener más explicaciones.
Consulte también Unladen Swallow
De acuerdo con el libro 'Comenzando con las bibliotecas principales de LLVM' (c):
De hecho, el nombre LLVM podría referirse a cualquiera de los siguientes:
El proyecto / infraestructura de LLVM: este es un paraguas para varios proyectos que, juntos, forman un compilador completo: frontends, backends, optimizadores, ensambladores, enlazadores, libc ++, compiler-rt y un motor JIT. La palabra "LLVM" tiene este significado, por ejemplo, en la siguiente oración: "LLVM se compone de varios proyectos".
Un compilador basado en LLVM: este es un compilador construido parcial o completamente con la infraestructura LLVM. Por ejemplo, un compilador podría usar LLVM para el front-end y el back-end, pero usar las bibliotecas del sistema GCC y GNU para realizar el enlace final. LLVM tiene este significado en la siguiente oración, por ejemplo: "Usé LLVM para compilar programas C en una plataforma MIPS".
Bibliotecas LLVM: esta es la porción de código reutilizable de la infraestructura LLVM. Por ejemplo, LLVM tiene este significado en la oración: "Mi proyecto usa LLVM para generar código a través de su marco de compilación Just-in-Time".
Núcleo LLVM: las optimizaciones que ocurren en el nivel de lenguaje intermedio y los algoritmos de back-end forman el núcleo LLVM donde comenzó el proyecto. LLVM tiene este significado en la siguiente oración: "LLVM y Clang son dos proyectos diferentes".
El LLVM IR: Esta es la representación intermedia del compilador LLVM. LLVM tiene este significado cuando se usa en oraciones como "Construí una interfaz que traduce mi propio lenguaje a LLVM".
LLVM es básicamente una biblioteca utilizada para compilar compiladores y / o software orientado al lenguaje. La esencia básica es que aunque tiene gcc, que es probablemente el conjunto de compiladores más común, no está diseñado para ser reutilizable, es decir. es difícil tomar componentes de gcc y usarlos para construir su propia aplicación. LLVM aborda bien este problema mediante la creación de un conjunto de "tecnologías compiladoras y de herramientas modulares y reutilizables" que cualquiera podría usar para construir compiladores y software orientado al lenguaje.
La infraestructura del compilador LLVM es particularmente útil para realizar optimizaciones y transformaciones en el código. También consta de una serie de herramientas que sirven para distintos usos. llvm-prof es una herramienta de creación de perfiles que le permite crear perfiles de ejecución para identificar puntos de acceso de programas. Opt es una herramienta de optimización que ofrece varios pases de optimización (eliminación de código muerto, por ejemplo).
Es importante destacar que LLVM le proporciona las bibliotecas para escribir sus propios pases. Por ejemplo, si necesita agregar una verificación de rango en ciertos argumentos que se pasan a ciertas funciones de un Programa, sería suficiente escribir un Pase LLVM simple.
Para obtener más información sobre cómo escribir su propio Pase, consulte http://llvm.org/docs/WritingAnLLVMPass.html