2008-10-05 19 views
45

¿Alguien tiene experiencia con LLVM, llvm-gcc o Clang?¿Cuáles son los mayores beneficios de LLVM?

Toda la idea detrás de llvm me parece muy intrigante y me interesa ver cómo funciona. Simplemente no quiero invertir mucho tiempo en probar las herramientas si las herramientas no están listas para producción.

Si tiene experiencia con las herramientas, ¿qué piensa de ellas? ¿Qué limitaciones principales has encontrado? ¿Cuáles son los mayores beneficios?

¡Muchas gracias!

+1

He escrito el siguiente documento en el que se analizan los beneficios de LLVM. http://llvm4eclipsecdt.googlecode.com/files/Benefits%20of%20the%20LLVM%20compiler%20infrastructure.pdf –

Respuesta

21

He tenido un juego inicial con LLVM y trabajando a través de this tutorial me dejó muy entusiasmado con su potencial; la idea de que puedo usarla para construir un JIT en una aplicación con relativa facilidad me ha entusiasmado.

No he profundizado lo suficiente como para poder ofrecer ningún tipo de opinión útil sobre sus limitaciones, estabilidad, rendimiento y similares. Entiendo que es bueno en todos los aspectos, pero eso es puramente de oídas.

39

No puedo decir suficientes cosas buenas sobre LLVM. Es muy fácil trabajar con él en comparación con otros proyectos de compilación que he analizado. No soy compilador, pero cuando me siento frustrado con algunas limitaciones de LLVM o clang, generalmente es bastante fácil sumergirse y cambiarlo.

Nosotros (Nate Begeman, yo mismo y algunos otros) escribimos el back-end de PPC sin experiencia real en el diseño de compiladores, pero parecía lo suficientemente simple como para que los no expertos pudieran abordarlo. Estábamos bastante familiarizados con el ensamblado de PPC, pero aún así fue bastante increíble logramos obtener LLVM-gcc dando como resultado el código PPC en unas pocas semanas de nuestro tiempo libre. Definitivamente uno de los Hello World's más satisfactorios que he compilado.

25

He estado jugando con LLVM de forma intermitente durante muchos meses. Escribí dos artículos OCaml Journal que cubren el uso de LLVM del lenguaje de programación OCaml. Esto es particularmente interesante porque el lenguaje OCaml es ideal para escribir compiladores y tiene una gran cantidad de herramientas y bibliotecas potentes y maduras para analizar y demás.

En general, mi experiencia ha sido extremadamente positiva. LLVM hace lo que dice en la lata y es muy fácil de usar. El rendimiento del código generado es excelente. Uno de los programas que escribí fue un simple pequeño compilador Brainf * ck que genera algunos de los ejecutables más rápidos de cualquier compilador que probé (incluido GCC).

Tengo solo dos quejas con LLVM. En primer lugar, usa abort() cada vez que algo sale mal en lugar de generar una excepción. Esta fue una decisión de diseño deliberada de sus autores que intentan eliminar todos los usos de excepciones de LLVM, pero hace que sea imposible obtener retrocesos de OCaml cuando se intenta depurar un compilador que usa LLVM: su programa simplemente muere con una explicación textual de LLVM pero no hay ninguna pista sobre dónde ocurrió el error en su fuente. En segundo lugar, la biblioteca compilada de LLVM es monstruosamente grande (20Mb). Supongo que esto se debe a la hinchazón en la que incurre C++, pero hace que la compilación sea muy lenta.

EDIT: Mi trabajo en LLVM culminó en la creación de una máquina virtual recolectada de basura de alto rendimiento de alto nivel. Descarga gratuita here y echa un vistazo a la correspondiente benchmarks (wow!). @Alex: Voy a obtener ese compilador de BF en algún lugar lo antes posible.

+2

¿Se puede publicar el compilador BF? Escribí un traductor BF-> C que, creo, es tan bueno como se puede obtener en una sola pasada, y llvm-gcc se cae bastante mal en programas realmente grandes. Aunque son un poco injustos. –

2

Ha preguntado acerca de las herramientas y me gustaría mencionar que hay un plugin LLVM para Eclipse CDT (para Windows, Linux y Mac). Integra LLVM muy bien a IDE y el usuario no necesita saber nada sobre LLVM.Presionar el botón de compilación es suficiente para producir archivos .bc y ejecutables (y archivos intermedios en el fondo no visibles para el usuario).

La última versión está disponible a través del sitio oficial de actualizaciones de Eclipse: http://download.eclipse.org/releases/mars

Es bajo Lenguajes de Programación y lleva el nombre "C/C++ Compiler LLVM-Familia conseguir apoyo".

Cuestiones relacionadas