Ответ 1
Обновлено 2012-01-26: Согласно эта страница на сайте компании продукт был выкуплен и больше не доступен.
Да.
Здесь коммерческий компилятор C, который создает байт-код JVM.
Есть ли способ запустить простой код c поверх JVM?
Не подключайтесь через JNI, работая, как вы можете запускать ruby-код через JRuby или javascript через Rhino.
Если нет текущего решения, что бы вы порекомендовали мне сделать?
Очевидно, я хочу использовать как можно больше решений частичных решений, чтобы это произошло.
ANTLR кажется хорошим местом для начала, имея полную реализацию грамматики ANSI C...
должен ли я построить "игрушечную" виртуальную машину через JVM с использованием кода, сгенерированного ANTLR?
Обновлено 2012-01-26: Согласно эта страница на сайте компании продукт был выкуплен и больше не доступен.
Да.
Здесь коммерческий компилятор C, который создает байт-код JVM.
Есть еще две возможности, оба с открытым исходным кодом:
JPC имитирует весь ПК x86 в JVM и способен запускать как DOS, так и Linux.
NestedVM обеспечивает двоичный перевод для Java Bytecode. Это делается путем компиляции GCC в двоичный код MIPS, который затем переводится в файл класса Java. Следовательно, любое приложение, написанное на C, С++, Fortran или любом другом языке, поддерживаемое GCC, может быть запущено на 100% чистой Java без изменений источника.
Возможно, не совсем то, что вам нужно, но коммерческий вариант http://www.axiomsol.com/
Кажется, что LLJVM также может удовлетворить ваши требования.
LLJVM: Исходный код сначала компилируется в промежуточное представление LLVM (IR) с помощью интерфейса, такого как llvm-gcc или clang. Затем LLVM IR переводится на ассемблерный код Jasmin, связанный с другими классами Java, а затем собирается в байт-код JVM.
По состоянию на 2016 год существует молодой, но многообещающий вариант под названием gcc-bridge. Его целью является использование реализации R. виртуальной машины Java. Цель состоит в том, чтобы использовать R-библиотеки, написанные на C или Fortran. Но gcc-bridge может использоваться независимо как обычный плагин maven. Также смотрите пример gcc-brigde.