评论者:mfikes
目前我们为每个AST发出源映射行/列信息,不管操作类型如何。虽然这确保了我们拥有全面的源映射信息,但这可能远远超过许多常见用途所需的集合。
一些操作类型可以显然省略,例如{{:no-op}}。通过一些实验,你会发现为了在有限的映射堆栈跟踪的目的中仅使用两种或三种操作类型就可以进行源映射。Dirac DevTools会利用源映射信息来正确识别源代码中的局部变量、绑定形式等。
附带的补丁将源映射行/列发射限制在堆栈跟踪映射所需的标签上,以及Dirac的一些简单用途(Dirac是堆栈跟踪映射所需要集合的超集)。这种策略的基本问题在于确定我们应该发射哪些操作类型的子集的相关行/列信息。
但,如果我们可以成功识别满足一般需求的最低限度的集合,这可能是值得的。使用附带的补丁,与非并行模式编译Coal Mine相比,我们获得了12%的性能提升。
使用此补丁,写入磁盘的源映射大小更小:对于{{cljs.core}},它是432567字节,而不是640411字节。
附上此补丁以供反馈。如果我们能找到合适的子集,这可能可行。如果这证明过于困难,也许可以引入编译器选项来控制是否发射足够的小子集以进行堆栈跟踪映射,或者为了调试(Dirac)而稍微大一点的,或者所有操作。