如何编译一个编译器阶段的输出?

马里奥·加里奇(Mario Galic)

使用-Xprintflagscalac可以得到不同编译器阶段的输出,例如,给出以下内容Foo.scala

object Foo {
  val x = 42
}

然后scalac -Xprint:jvm Foo.scala输出

package <empty> {
  object Foo extends Object {
    <static> private[this] val x: Int = _;
    <stable> <accessor> def x(): Int = Foo.this.x;
    def <init>(): Foo.type = {
      Foo.super.<init>();
      Foo.this.x = 42;
      ()
    }
  }
}

如何编译阶段本身,也就是我们说我们有源文件,jvmphase.scala像这样

package <empty> { ...

包含阶段源代码而不是原始的香草Scala源代码,那么如何实现类似于以下内容的代码scalac jvmphase.scala

米米(Dmytro Mitin)

“编译阶段的编译输出”听起来很奇怪。从字面上看,编译器将编译源文件。编译器阶段的输出不再是源(尽管scalac -Xprint:...尝试以类似方式打印它)。例如jvm阶段在erasure阶段之后除了原始源代码的编译结果之外,尚不清楚在“编译编译器阶段的输出”时期望得到什么。

如果要在阶段之间进行更改,则应该创建编译器插件。

https://docs.scala-lang.org/overviews/plugins/index.html

https://dotty.epfl.ch/docs/reference/changed-features/compiler-plugins.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

第一个编译器是如何编译的?

第一个编译器是如何编写的?

如何告诉编译器“忽略”一个类?

清理阶段之后的Scala编译器输出

这是一个Java编译器错误?

一个Makefile中有多个编译器

如何查看编译器输出?

如何运行一个文件源代码的Java程序时,通过编译器选项?

是否有一个官方的C编译器,如何安装?

如何为正在构建的每个端口添加一个编译器选项?

如何从另一个Go应用程序运行Go编译器

如何仅显示Microsoft Typescript编译器的第一个错误?

如何编写一个生成模块的Rust编译器插件?

如何使用 hanami 编译器将 scss 文件导入另一个 scss?

如何基于编译器指令-D自动选择一个include.h文件?

如何停止在编译器阶段运行代码?

同一程序在一个编译器中而不是其他编译器中给出编译器错误

“编译消息文件中断” - 我想一个Java编译器错误?

gcc 是否有一个工具或编译器选项可以计算“编译的代码行数”?

为什么编译器会发出一个stloc和一个ldloca?

OpenCl 是一个库还是一个编译器?

如何简洁地让编译器知道一个值应该是什么类型并检查它?

如果ptr是静态数组的第一个元素的ptr,编译器将如何评估++ * ptr ++?

是否有一个编译器设置来控制在Delphi中如何键入浮点文字?

一个人输错名字时,编译器如何猜测正确的名字?

我在 C 中声明了一个变量。编译器如何为变量分配内存空间?

如何告诉编译器可以有一个未初始化的不可为空的属性

编译器似乎使一个重载方法的两个版本混淆。为什么?

防止编译器将两个动态对象精简为一个