【问题标题】:Running/Interpreting C on top of the JVM?在 JVM 之上运行/解释 C?
【发布时间】:2010-09-30 03:12:38
【问题描述】:

有没有办法在 JVM 上运行纯 c 代码?
不通过 JNI 连接,运行,就像你可以通过 JRuby 运行 ruby​​ 代码,或者通过 Rhino 运行 javascript。

如果目前没有解决方案,您建议我应该怎么做?
显然,我想使用尽可能多的部分解决方案来实现它。

ANTLR 似乎是一个不错的起点,拥有完整的“ANSI C”语法实现...
我应该使用 ANTLR 生成的代码在 JVM 上构建一个“玩具”虚拟机吗?

【问题讨论】:

  • 这很有趣.. 尝试制作一些 portable c 代码?
  • 尝试在一个共同点(JVM)上交互不同的代码(来自不同的语言)
  • 自从我查看 JVM 规范以来已经有很长时间了,但是 IIRC 试图防止数据类型转换过于快速和松散。如果情况仍然如此,那么您将无法在 JVM 上运行 C 程序。
  • 并非如此。编译器可以为您插入不可见的数据转换。

标签: java c jvm antlr interpreter


【解决方案1】:

截至 2016 年,有一个年轻但很有前途的选择,称为 gcc-bridge。它的目的是利用 JVM 的 R 实现。目标是使用用 C 或 Fortran 编写的 R 库。但是 gcc-bridge 可以作为常规的 maven 插件独立使用。另请参阅gcc-brigde-example

【讨论】:

    【解决方案2】:

    还有另外两种可能性,都是开源的:

    JPC 在 JVM 中模拟整个 x86 pc,并且能够运行 DOS 和 Linux。

    NestedVM 为 Java 字节码提供二进制翻译。这是通过将 GCC 编译为 MIPS 二进制文件来完成的,然后将其转换为 Java 类文件。因此,任何用 C、C++、Fortran 或 GCC 支持的任何其他语言编写的应用程序都可以在 100% 纯 Java 中运行,而无需更改源代码。

    【讨论】:

    • 自 2013 年 4 月起,JPC 和 NestedVM 都是以速度为代价的有效灵魂(因为它们在 JavaVM 中被模拟)。商业解决方案 axiomsol.com 已被出售,其网站上未提供更多信息。
    • 关于 JPC,它很简洁,但如何与 x86 代码交互?
    【解决方案3】:

    看来LLJVM也可以满足你的要求。

    LLJVM:源代码首先由 llvm-gcc 或 clang 等前端编译为 LLVM 中间表示 (IR)。然后将 LLVM IR 转换为 Jasmin 汇编代码,链接到其他 Java 类,然后汇编为 JVM 字节码。

    【讨论】:

      【解决方案4】:

      2012-01-26 更新:根据this page on the company's site,该产品已被买断,不再可用。

      是的。

      这里是a commercial C compiler that produces JVM bytecode

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多