所以我googl'ed了一点,但除了稀疏之外没有其他信息:
-Yrangepos Use range positions for syntax trees.
确定。而且我知道如果我想在宏中捕获源片段,我需要使用它。
现在我的两个问题是:
答案 0 :(得分:4)
当makro拼写为Burmak(r)o时,问题introducing -Yrangepos
会被您的用例所激励。
-X
选项表示持久性,而-Y
可能随时消失,这意味着它可能成为默认行为。
也许因为bugs and crashes而没有。
a team meeting written up by Moors:
范围位置[马丁]
尊重范围位置 - 与ide有关的ide衰变 事实上,typer或parser中的转换不符合范围 位置
- 每次检查更改 - 自动检查范围位置
- 范围位置=不仅仅是一个位置点,而是开始和结束,包含在树节点中(RangePosition是Position的子类)
- CompilationUnit中有RangePositions的地图
不变量:
- 子节点的范围位置包含在父节点的范围pos
中- 无重叠(透明范围位置除外)
- rangepos cover整个程序
问题:
- 模板
- 的
检查文件包含位置
rangeposition(start,point,end).focus == offsetposition(point)// 从非重叠不变量中逃脱
2012年,-Yrangepos
的PR验证频繁失败;它已修复,但turned into a nightly validation可以减少资源。
Hubert offered these notes:
关于rangepos的一些事情:
- 如果您尝试使用&scalac -Ybrowse运行任何代码:typer -Yrangepos FILE.scala'你会看到大多数树木都有射程。
- 有些人不,是的,这有点不幸,但我们正在努力改进 - 实际上每当你在Yrangepos模式中找到它时 可能是一个bug。情况有了很大改善 从 2.9到2.10.0-snapshots。
- 语法树通常被赋予偏移位置(这是你可能正在经历的东西,但我必须看到一个 例如)
- 对于编译器,我们只关心范围位置是否有效(包括)typer。在那之后,我们不在乎。你正在运行你的 从我所看到的内容重新检查之后的工具,这可能会干扰一个 可以在重新检查中发生的一些转换 操纵/指定范围或偏移位置。
切换到范围位置似乎很容易,因为基本数学,但在合成或重构树时,仍有错误like this one在分配位置时显示the extra labor involved。
虽然演示编译器需要范围位置,但它们不在批处理编译的关键路径中。有了更多的资源来提高稳健性,也许他们可以翻转开关。
答案 1 :(得分:1)
我只能猜测默认情况下scalac
出于性能原因不使用范围位置。
在常规编译中,职位仅用于错误报告并将行号信息保存到类文件中。偏移位置足以做到这一点,因此完成操纵范围位置所需的所有工作毫无意义。
我认为范围位置不会产生任何其他成本,而不是简单的编译速度。