Запуск / интерпретация C поверх JVM? - PullRequest
22 голосов
/ 07 января 2009

Есть ли способ запустить простой код C поверх JVM?
Не подключаться через JNI, работает, как вы можете запустить код ruby ​​через JRuby или javascript через Rhino.

Если нет текущего решения, что бы вы посоветовали мне сделать?
Очевидно, что я хочу использовать столько частичных решений, сколько смогу, чтобы это произошло.

ANTLR кажется хорошим местом для начала, имея полную реализацию грамматики "ANSI C" ...
я должен построить "игрушечную" виртуальную машину поверх JVM, используя сгенерированный код ANTLR?

Ответы [ 5 ]

13 голосов
/ 07 января 2009

Обновлено 2012-01-26: согласно этой странице на сайте компании продукт был выкуплен и больше не доступен.

Да.

Вот коммерческий компилятор C, который создает байт-код JVM .

11 голосов
/ 11 марта 2009

Есть две другие возможности, обе с открытым исходным кодом:

JPC эмулирует весь компьютер x86 в JVM и может работать как под DOS, так и под Linux.

NestedVM предоставляет двоичный перевод для байт-кода Java. Это делается путем компиляции GCC в двоичный файл MIPS, который затем преобразуется в файл класса Java. Следовательно, любое приложение, написанное на C, C ++, Fortran или любом другом языке, поддерживаемом GCC, может быть запущено на 100% чистой Java без изменений исходного кода.

8 голосов
/ 07 января 2009

Может быть, не совсем то, что вам нужно, но коммерческий вариант http://www.axiomsol.com/

3 голосов
/ 02 апреля 2014

Кажется, что LLJVM также может удовлетворить ваши требования.

LLJVM: Исходный код сначала компилируется в промежуточное представление (IR) LLVM с помощью внешнего интерфейса, такого как llvm-gcc или clang. Затем LLVM IR преобразуется в код сборки Jasmin, связывается с другими классами Java и затем собирается в байт-код JVM.

2 голосов
/ 13 июня 2016

По состоянию на 2016 год существует молодая, но многообещающая опция под названием gcc-bridge . Его целью является использование реализации JVM R для использования R-библиотек, написанных на C или Fortran. Но gcc-bridge также может использоваться независимо как плагин maven.

...