Para escribir un compilador, ¿cuáles son las ventajas y desventajas de utilizar LLVM IR contra C para un idioma de destino? Sé que ambos se usan, y me imagino que el código de la máquina final sería similar si tuviera que utilizar clang para compilar C. Entonces, ¿qué otras cosas hay que considerar?Idioma de salida del compilador - LLVM IR vs C
Respuesta
He utilizado LLVM IR para algunos extremos del compilador y he trabajado con compiladores que usan C como back-end. Una cosa que encontré que le dio al LLVM IR una ventaja es que está tipada. Es difícil hacer una salida completamente mal formada sin obtener errores de las bibliotecas LLVM.
También es más fácil mantener una estrecha correlación entre el código fuente y el IR para la depuración, en mi opinión.
Además, obtendrá todas las geniales herramientas de línea de comandos de LLVM para analizar y procesar el IR que emite su interfaz.
Arquitecturas y sistemas operativos para los que no existe CLANG obviamente, o para los que está en estado experimental.
C es más ampliamente aceptado, pero LLVM IR le permite alimentar con cuchara el motor LLVM. No todos los caminos hacia IR son iguales.
dudo puede implementar soporte de depuración adecuado para su idioma cuando la orientación C.
Esa fue exactamente la razón por la que he estado buscando este hilo. No veo forma de que haya "mapas de origen" en los símbolos de depuración, porque hay cambios incompatibles hacia atrás en los generadores de símbolos de depuración de los compiladores de C. Uno tendría que actualizar el software de asignación de símbolos de depuración con cada cambio de compiladores C admitidos. –
ventajas llvm:
- JIT - se puede compilar y ejecutar el código de forma dinámica. Claro que lo mismo es posible con C (por ejemplo, usando un
tcc
incrustado), pero es una opción mucho menos robusta y portátil. - Puede ejecutar sus propias pasadas de optimización sobre el IR generado.
- Reflection de free - inspeccionar el código generado es mucho más fácil con LLVM.
- La biblioteca LLVM no es tan grande como la mayoría de los compiladores de C (sin contar
tcc
, por supuesto).
inconvenientes llvm:
- Código no es portátil, usted tiene que cambiar ligeramente dependiendo de su objetivo. Existe un subconjunto algo portátil de LLVM, pero sigue siendo una práctica poco fiable.
- La dependencia del tiempo de ejecución en las bibliotecas C++ puede ser un problema.
se le olvidó: si quiere C interoperabilidad (¿qué idioma no?) Usted mismo tiene que codificar todos esos C ABI desagradables porque llvm no hace eso por sí mismo (divide ese trabajo 50/50 con clang) – cap
- 1. Idioma para el compilador basado en LLVM
- 2. C++ g ++ llvm-clang perfil de compilador
- 3. frontend al compilador basado en LLVM
- 4. Cómo convertir el código IR de llvm a c?
- 5. Apple LLVM compilador error 3.1
- 6. manejo en Google idioma ir
- 7. Analizando y modificando el código IR LLVM
- 8. Convertir a ARC - LLVM compilador 3.0 Error
- 9. Infraestructura del compilador LLVM para las arquitecturas VLIW
- 10. ¿Hay algún intérprete de PHP -> LLVM IR?
- 11. llvm ir a lenguaje de origen legible para los humanos?
- 12. Obtener código de salida - Ir
- 13. LLVM vs. C--; ¿Cómo puede LLVM fundamentalmente no ser mejor para Haskell que C--?
- 14. ¿Hay una gramática similar a BNF para describir LLVM IR?
- 15. Ir a idioma en el iPhone
- 16. ¿Borrando una primera instrucción en bloque básico de LLVM IR?
- 17. LLVM enlace automático de C++
- 18. ¿Cómo implementar de manera eficiente cierres en LLVM IR?
- 19. ¿Cómo cambio el idioma de los mensajes de error del compilador de Microsoft C#?
- 20. Traducción de la fuente G-Machine a LLVM IR
- 21. ¿Cómo incrustar LLVM?
- 22. Llamar LLVM Jit desde el programa c
- 23. Salida diferente para compilador diferente - C y C++
- 24. Vinculación del código LLVM JIT a las bibliotecas LLVM estáticas?
- 25. Cómo reemplazar el motor de JavaScript del navegador con LLVM?
- 26. Comportamiento extraño del compilador con literales float vs variables float
- 27. SpecFlow vs Cuke4Nuke vs Cucumber + IR
- 28. generación binaria de LLVM
- 29. Optimizador del compilador delegado C#
- 30. ¿En qué idioma está escrito el compilador de F #?
¿Qué quiere decir IR está escrito? ¿No está tipado C también? – Dan
Derecha, C está escrito. Pero no obtiene una indicación del error hasta que intente compilar el código C. Con LLVM IR obtienes una indicación del error cuando generas el IR. Mucho más fácil de depurar. –