我可以使用Scala Native作为程序库将包含Scala代码的字符串编译为机器代码吗?

时间:2019-09-08 01:02:53

标签: scala scala-native

我成功使用Scala Native将scala项目编译为机器代码。 但是我想在运行时生成一些可执行代码(我计划实现从类似scala的语言到机器代码的独立编译器)。 目标是拥有独立于JVM的自托管语言。 是否可以以某种方式将Scala Native编译器嵌入我的项目中?

1 个答案:

答案 0 :(得分:1)

https://www.scala-native.org/en/v0.4.0/contrib/build.html中所述,

  • Scala Native 的构建包含以下基于 JVM 的部分,其中第 1、3 和 4 部分对于嵌入您自己的编译器中的 Scala Native 编译器来说似乎是必需的:
<块引用>

Scala Native sbt 插件及其依赖项(目录名在括号中)。这些是 JVM 项目。

  • sbtScalaNative (sbt-scala-native)
  • 工具
  • nir, util
  • 解析器
  • testRunner(测试运行器)

因此 Scala Native 并不像 OP 的问题所寻求的那样独立于 JVM。相反,研究 Scala Native 代码库的 NIR(scala-Native 中间表示)部分可能表明一个点(接近 NIR 向前发射的地方)来分解非 JVM NIR 到 LLVM 后端。然后 OP 的“自托管语言”将 NIR 编译为 LLVM IR 到机器代码“从类似 Scala 的语言到机器代码”作为 OP 的问题寻求可能是可能的,因为它源自 Scala Native 代码库的一些后端提取/片段之后解析器,也许是在 AST 之后,它依赖于 Scala(-proper) 的基于 JVM 的解析器,而从 NIR 开始就在 JVM 中,因为解析器和 AST 已经在 J​​VM 中了。