Подтвердить что ты не робот

Есть ли llvm java front end, который преобразует источник java в промежуточную форму llvm?

Из того, что я прочитал, есть программа llvm, которая преобразует java-байт-код в промежуточную форму llvm, называемую class2llvm. Мой вопрос в том, как мне получить доступ к этому. Какой интерфейс мне нужно установить, чтобы получить доступ к этому.

VMkit - это их реализация JVM, но я ищу, как скомпилировать исходный код java с llvm, а не как его запустить.

4b9b3361

Ответ 2

Вы можете взглянуть на dragonegg, что позволяет llvm использовать gcc-интерфейсы. Поскольку gcc уже имеет интерфейс для java, называемый gcj, возможно, llvm может использовать его для компиляции java-кода. Но я не уверен, насколько хорошо llvm взаимодействует с интерфейсом gcc, поэтому это может не сработать.

Ответ 3

Я выполнил класс java, используя vmkit (http://vmkit.llvm.org/) на основе LLVM. Он использует LLVM для компиляции и оптимизации языков высокого уровня для машинного кода. J3 - это реализация JVM с VMKit.

Ответ 4

[ ПРИМЕЧАНИЕ. С ноября 2015 года он больше не является открытым исходным кодом, поэтому этот хак в основном бесполезен.]

RoboVM может стать решением, которое вы ищете. Он с открытым исходным кодом и компилирует байт-код JVM (файлы .class) в машинный код.

Я предполагаю, что они делают это, используя что-то вроде class2llvm.

К сожалению, он все еще в альфе. Я просто протестировал его на HelloWorld.java. Это дало 5-кратное ускорение времени загрузки, работающего на одном ядре. (Большая часть времени выполнения - время загрузки.)

echo Hello World! : <1 ms : 31K (/usr/bin/echo binary)

java HelloWorld : ~70 ms : 0.4K (байт-код JVM HelloWorld.class)

./HelloWorld : ~13 ms : 9.4MB (9.3MB двоичный + 57K robovm-rt.jar)

Обратите внимание, что java вызывает файл 32MB $JAVA_HOME/lib/rt.jar(и, возможно, больше). Поиск в таком большом файле должен быть частью причины, по которой java загружается так медленно. Если RoboVM станет более умным, возможно, он может выбросить большую часть двоичного файла 9.3 МБ для еще более быстрой загрузки?

Сайт упоминает iOS, но я думаю, что, поскольку они продают свои дополнительные библиотеки пользовательского интерфейса. RoboVM собрал для меня штраф за вкус Ubuntu. Просто убедитесь, что сделали

$sudo apt-get install g++ - multilib

сначала (и, возможно, установить libpthread-stubs0-dev и libpthread-workqueue0... не знаю, имели ли значение).