我一直在查看Roslyn代码库,并注意到它们有两个版本的语法(一个内部版本和一个公共版本)。通常这些似乎被称为“红色”节点和“绿色”节点。我想知道是否有人可以解释这两种语法版本的原因是什么。
答案 0 :(得分:9)
来自Persistence, Facades and Roslyn’s Red-Green Trees:
“绿色”树是不可变的,持久的,没有父引用,是“自下而上”构建的,并且每个节点都跟踪其宽度而不是其绝对位置。当编辑发生时,我们只重建受编辑影响的绿树部分,通常是树中总解析节点的O(log n)。
“红色”树是围绕绿树建造的不可变立面;它根据需要“自上而下”构建,并在每次编辑时丢弃。它通过在从顶部向下穿过树时按需制造它们来计算父引用。它通过从宽度计算它们来制造绝对位置,再次,当你下降时。
你是Roslyn API的消费者,只看到红树;绿树是一个实现细节。 (如果你使用调试器来查看解析节点的内部状态,你实际上会看到有另一个类型的另一个解析节点的引用;那就是绿树节点。)
顺便提一下,这些被称为“红/绿树”,因为它们是我们在设计会议中用于绘制数据结构的白板标记颜色。颜色没有其他意义。