首页 > 解决方案 > 我可以使用 Scala Native 作为我的程序库将包含 Scala 代码的字符串编译为机器代码吗?

问题描述

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

标签: scalascala-native

解决方案


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)
  • 工具
  • 尼尔,实用程序
  • 解析器
  • testRunner(测试运行器)

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


推荐阅读