scala - 我可以使用 Scala Native 作为我的程序库将包含 Scala 代码的字符串编译为机器代码吗?
问题描述
我成功地使用 Scala Native 将 Scala 项目编译为机器代码。但是我想在运行时生成一些可执行代码(我计划实现一个独立的编译器,从类似 scala 的语言到机器代码)。目标是拥有一种独立于 JVM 的自托管语言。是否有可能以某种方式将 Scala 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 已经在 JVM 中。
推荐阅读
- android - 在 KOTLIN 中的 Fragment 之间发送值
- php - 使用 Slim v4.1 请求参数为空
- swiftui - SwiftUI onDismiss 在呈现工作表时未触发(Xcode Beta 5)
- javascript - Gatsby 警告:validateDOMNesting(...):不能作为子级出现
- mysql - 用 mysql python 选择
- java - 比较 2 个文本文件并找出列表中的差异并找出哪些列表值不匹配
- sql - 将 FileSystem::\\ 添加到文件路径会从 SQL 导出一个空白 CSV
- python - 从 twitter 数据中删除表情符号/图像十六进制代码
- reporting-services - 对现有 ssrs 报告的数据集的更改
- google-apps-script - 根据表单响应和时间戳发送自动电子邮件