【问题标题】:Can I compile a string containing Scala code to machine code using Scala Native as a library of my program?我可以使用 Scala Native 作为程序库将包含 Scala 代码的字符串编译为机器代码吗?
【发布时间】:2019-09-08 01:02:53
【问题描述】:

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

【问题讨论】:

  • 换句话说,scala-native 可以自己编译吗?
  • 不,Scala 编译器仅适用于 JVM,Scala Native 重用了原始 JVM 编译器的大部分(前端)。

标签: scala scala-native


【解决方案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)
  • 工具
  • 尼尔,实用
  • nirparser
  • 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 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 2012-08-09
    • 2010-09-13
    • 2023-03-07
    • 2016-06-21
    相关资源
    最近更新 更多