resumen - plataforma java
¿Hay un front-end de jav llvm que convierta el origen de Java en la forma intermedia de llvm? (4)
El frontend de Java traduce el bytecode de Java (archivos .class) en un bytecode de LLVM. Eche un vistazo a este enlace:
https://llvm.org/svn/llvm-project/java/trunk/docs/java-frontend.txt
Por lo que he leído, hay un programa llvm que convierte bytecode java en la forma intermedia de llvm llamada class2llvm. Mi pregunta es, ¿cómo puedo acceder a esto? ¿Qué interfaz tengo que instalar para acceder a esto?
VMkit es su implementación de una JVM, pero estoy buscando cómo compilar el código fuente de Java con llvm, no cómo ejecutarlo.
He ejecutado una clase Java usando vmkit ( http://vmkit.llvm.org/ ) basado en LLVM. Utiliza LLVM para compilar y optimizar idiomas de alto nivel para código de máquina. J3 es una implementación de una JVM con VMKit.
Puedes echar un vistazo a dragonegg , que permite a llvm usar las interfaces de gcc. Como gcc ya tiene un frontend para java, llamado gcj , quizás llvm puede usarlo para compilar código java. Pero no estoy seguro de qué tan bien interfaces con la interfaz de gcc llvm, por lo que puede que esto no funcione.
[ NOTA: A partir de noviembre de 2015 ya no es de código abierto, por lo que este truco es en gran parte inútil. ]
RoboVM podría convertirse en la solución que estás buscando. Es de código abierto y compila el bytecode de JVM (archivos .class) para codificar la máquina.
Supongo que lo hacen usando algo como class2llvm.
Lamentablemente, todavía está en alfa. Acabo de probarlo en HelloWorld.java. Dio 5 veces la velocidad del tiempo de carga ejecutándose en un solo núcleo. (La mayor parte del tiempo de ejecución es el tiempo de carga).
echo Hello World! : <1 ms : 31K
echo Hello World! : <1 ms : 31K
(/ usr / bin / echo binary)
java HelloWorld : ~70 ms : 0.4K
(HelloWorld.class JVM bytecode)
./HelloWorld : ~13 ms : 9.4MB
(9.3MB binario + 57K robovm-rt.jar)
Tenga en cuenta que java llama a un archivo $ JAVA_HOME / lib / rt.jar de 32MB (y tal vez más). La búsqueda en un archivo tan grande debe ser parte de la razón por la cual java tarda mucho en cargar. Si RoboVM se vuelve más inteligente, ¿quizás pueda tirar la mayor parte del binario de 9.3MB para una carga aún más rápida?
El sitio web menciona iOS, pero creo que es porque están vendiendo sus bibliotecas de IU adicionales. RoboVM compiló bien para mí en un sabor de Ubuntu. Solo asegúrate de hacer
$ sudo apt-get install g ++ - multilib
primero (y tal vez instale libpthread-stubs0-dev y libpthread-workqueue0 ... no sé si importaron).