-Yrangepos 除了在宏中给我源位置之外,还有什么影响



所以我有点googl,但是除了稀疏外没有其他信息:

-Yrangepos                     Use range positions for syntax trees.

好的。而且我知道,如果要在宏中捕获源片段,我需要使用它。

现在我的两个问题是:

  • 为什么默认情况下不在?
  • 使用它有任何副作用(例如增加类文件大小)?

当makro被拼写为burmak(r)o时,引入-Yrangepos的问题是由您的用例激励的。

-X选项建议永久性,而-Y可能随时消失,这意味着它可能成为默认行为。

也许不是因为错误和崩溃。

在摩尔人写的团队会议上:

范围位置[Martin]

尊重范围位置 - IDE中的衰减,这与 泰珀或解析器中的转换不尊重范围的事实 位置

  • 每次检查中的每个检查 - 自动检查范围位置
  • 范围位置=不仅是位置点,还可以起点和结尾,包含在树节点中(rangeposition是位置的子类)
  • compilationunit中有刻度贴图

不变:

  • 子节点的范围位置包含在父节点的范围内
  • 无重叠(除透明范围位置除外)
  • rangpos覆盖整个程序

问题:

  • 模板

检查文件包含位置

rangeposition(start,point,end).focus == OffsetPosition(point)// 逃离非重叠不变

2012年,使用-Yrangepos的PR验证经常失败;它是固定的,但变成了每晚验证以减少资源。

休伯特提供了以下注释:

关于rangpos的一些事情:

  • 如果您尝试使用'scalac -ybrowse:typer -yrangepos file.scala'运行任何代码。
  • 有些人没有,是的,这有点不幸 可能是一个错误。情况大大改善 从 2.9至2.10.0-snapshots。
  • 句法树通常是分配的偏移位置(这是您可能正在遇到的东西,但我必须看到一个 示例)
  • 对于编译器,我们只关心范围位置有效至(包括)Typer。之后,我们不在乎。你正在运行你的 从我所看到的拨进后,工具会干扰 在重新检查中发生的几个转换 操纵/分配范围或偏移位置。

似乎很容易切换到范围位置,因为基本数学,但仍然有类似的错误证明在合成或重组树时涉及分配位置的额外劳动。

尽管演示编译器需要范围位置,但它们并不是批处理汇编的关键路径。有了更多的资源来提高鲁棒性,也许他们可以翻转开关。

我只能猜测默认情况下scalac出于绩效原因不使用范围位置。

在常规汇编中,位置仅用于错误报告和将行号信息保存到classfiles中。偏移位置足以做到这一点,因此完成操纵范围位置所需的所有工作是没有意义的。

我认为,除了简单的汇编速度以外,范围位置不会产生其他费用。

相关内容

  • 没有找到相关文章

最新更新