meaning for descargar c++ llvm clang

c++ - descargar - llvm for linux



¿Vinculando el código JV de LLVM a las bibliotecas estáticas de LLVM? (3)

  1. ¡Si podemos! Dependiendo de la versión de LLVM que uses, hay diferentes llamadas a la API. necesitará llvm :: getBitcodeModuleProvider en 2.5.
  2. La forma más sencilla de llamar a las funciones de C ++ es crear una función (llvm :: Function :: Create) utilizando el indicador llvm :: Function :: ExternalLinkage y luego addGlobalMapping para que apunte a la función de C ++.

Estoy en el proceso de implementar una aplicación multiplataforma (Mac OS X, Windows y Linux) que hará un montón de análisis intensivo de CPU de datos financieros. La mayor parte del motor de análisis se escribirá en C ++ por razones de velocidad, con un motor de secuencias de comandos accesible al usuario que interactúa con el motor de pruebas de C ++. Quiero escribir varios frontales de scripting a lo largo del tiempo para emular otros programas populares con grandes bases de usuarios existentes. El primer frente será un lenguaje de scripts similar a VisualBasic.

Estoy pensando que LLVM sería perfecto para mis necesidades. El rendimiento es muy importante debido a la gran cantidad de datos; puede llevar horas o días ejecutar una única serie de pruebas para obtener una respuesta. Creo que usar LLVM también me permitirá usar una única solución de back-end mientras implemento diferentes front-end para diferentes versiones del lenguaje de scripting a lo largo del tiempo.

El motor de prueba se separará de la interfaz y la prueba se llevará a cabo en un proceso separado con el progreso y los resultados informados a la interfaz de gestión de pruebas. Las pruebas consistirán en un código de secuencias de comandos integrado con el código del motor de pruebas.

En una implementación anterior de un sistema de prueba comercial similar que escribí, construí un intérprete rápido que interactuaba fácilmente con la biblioteca de prueba porque estaba escrito en C ++ y estaba directamente vinculado a la biblioteca del motor de prueba. Las devoluciones de llamada del código de secuencias de comandos a los objetos de biblioteca de prueba implicados traducen entre los formatos con una sobrecarga significativa.

Estoy imaginando que con LLVM, podría implementar las devoluciones de llamada en C ++ directamente, de modo que pudiera hacer que el código de scripting funcionara casi como si hubiera sido escrito en C ++. Del mismo modo, si todo el código se compiló en formato de código de bytes LLVM, parece que los optimizadores de LLVM podrían optimizar a través de los límites entre el lenguaje de secuencias de comandos y el código del motor de prueba que se escribió en C ++.

No quiero tener que compilar el motor de prueba cada vez. Idealmente, me gustaría JIT compilar solo el código de scripting. Para pruebas pequeñas, omitiría algunas pasadas de optimización, mientras que para pruebas grandes, realizaría optimizaciones completas durante el enlace.

Entonces, ¿es esto posible? ¿Puedo precompilar el motor de prueba en un archivo de objeto .o o en un archivo de biblioteca y luego vincular el código de secuencias de comandos utilizando el JIT?

Finalmente, idealmente, me gustaría que el código de scripting implementara métodos específicos como subclases para una clase específica de C ++. Por lo tanto, el motor de prueba de C ++ solo vería los objetos de C ++ mientras que el código de configuración JIT compiló el código de secuencias de comandos que implementó algunos de los métodos para los objetos. Parece que si utilizara el algoritmo de gestión de nombres correcto, sería relativamente fácil configurar la generación de LLVM para que el lenguaje de scripting se vea como una llamada al método C ++ que luego podría vincularse al motor de prueba.

Por lo tanto, la etapa de vinculación iría en dos direcciones: llamadas desde el lenguaje de scripting a los objetos del motor de prueba para recuperar información de precios e información de estado de prueba y llamadas desde el motor de prueba de los métodos de algunos objetos C ++ en particular donde el código se suministró no desde C ++ sino del lenguaje de scripting.

En resumen:

1) ¿Puedo vincular archivos precompilados (ya sea .bc, .o o .a) como parte de la compilación JIT, proceso de generación de código?

2) ¿Puedo enlazar en código usando el proceso en 1) anterior de tal manera que pueda crear código que actúe como si todo estuviera escrito en C ++?


  1. Eso creo.
  2. Esto es peludo Debe coincidir con la ABI de C ++ de las funciones a las que está llamando y asegurarse de que el código generado utiliza las mismas estructuras de datos, clases, diseño, etc. (a través de un equivalente de archivos de encabezado). El ABI de C ++ tiene muchos matices y problemas de portabilidad. Tal vez prototipo con hacer interoperabilidad con C primero. clang tiene soporte limitado para C ++ en este momento.

1) Puede cargar y vincular archivos .bc, los archivos .o si se han compilado en un archivo .so deben poder cargarse y los símbolos que se encuentran en ellos deben poder utilizarse.

2) Siempre que no quiera hacer cosas horribles con las devoluciones de llamada, probablemente pueda pasar los punteros de función C estándar y hacer devoluciones de llamada mediante los punteros de función. También puede hacer ciertas otras cosas, pero tratar de definir objetos o plantillas de C ++ o llamar a funciones de miembros sin ser un compilador de C ++ es algo que no quiere hacer.

debe conocer el ABI de C ++, debe conocer la plataforma a la que apunta, debe conocer todo tipo de cosas, debe ser un compilador de C ++ para generar código que parezca que es C ++. El nombre mangler es una de las partes más molestas.