从 Java 使用 LLVM

Sil*_*law 3 java llvm llvm-ir

我完全知道这里已经问过一个类似的问题:从 Java 生成 LLVM 代码

问题是,那是在 2012 年......我查看了解决方案,发现提到的大多数项目都被放弃了,或者至少非常不活跃。那么,作为最习惯使用 Java 的人,我使用 LLVM 的选择是什么(创建一种玩具语言,而不是使用 clang 或其他任何东西)?

  • 尝试使用这些项目之一,即使可能已经过时?听起来是个坏主意。
  • 学习 C/C++?不要误会我的意思,我已经有一本 C++ 书在身边,我并没有说它是一种糟糕的语言,但我非常怀疑我是否会觉得使用它很舒服。
  • 使用其他语言的绑定,比如 Haskell、Python 等?我可能更喜欢 C/C++,但这意味着在开始之前学习另一种完整的语言......
  • 编写我自己的绑定?我从来没有做过那样的事情,我什至不知道 JNI、JNA 等等之间的区别……但学习起来可能很有趣。
  • 尝试以文本形式格式化 LLVM IR?可能有用,但也可能不是最好的主意。

Sil*_*law 8

为了最终回答这个问题,Java C++ Presets 是一个有用且大部分是最新的选项:https : //github.com/bytedeco/javacpp-presets/tree/master/llvm


小智 1

最近我遇到了同样的问题,因为我在 Java/Scala 中使用 ANTLR 来定义我的词法分析器和解析器,并使用 LLVM 通过其 IR 生成实际的机器代码。在尝试将基于 JVM 的前端绑定到 LLVM IR 和后端时,我实际上正在尝试使用 GraalVM https://www.graalvm.org/ ,因为它提供了一种跨语言交互的无缝方式,包括 LLVM 位码,使用其多语言。

这里有一些参考:

您应该能够直接从 Java/Scala 代码访问 LLVM IR,反之亦然,您可以使用 Polyglot 调用从 LLVM/C++ 代码访问基于 JVM 的语言的 AST。