我们目前正在为每个抽象语法树(AST)发出源映射行/列信息,无论操作类型。
这确保了我们具有全面的源映射信息,但对于许多常见用途来说,这可能是我们所需数量的很多。
某些操作类型可以被清楚地省略,例如例如{{:no-op}}。通过一点实验,您可以了解到仅使用两种或三种操作类型即可用于映射堆栈跟踪的源映射。
此附件中的补丁限制了源映射行/列的排放,只针对需要堆栈跟踪映射的标签以及Dirac(Dirac是堆栈跟踪映射所需标签的子集)的一些简单用途。这种策略的根本问题在于识别需要我们发出行/列信息的操作符的正确子集。
但是,如果我们能够成功识别出一个满足普遍需求的最小集合,这可能就值得了。使用此补丁,在编译Coal Mine并启用非并行模式时,相对当前主分支,我们获得了12%的性能提升。
使用此补丁,写入磁盘的源映射大小更小:对于{{cljs.core}},它变为432567字节,而不是640411字节。
附上此补丁以供反馈。如果我们能找到一个合适的子集,这可能会奏效。如果这证明过于困难,也许可以引入一个编译器选项来控制是否输出足以为堆栈跟踪映射提供信息的微小子集,或者为调试(Dirac)输出稍微大一些,或者输出所有操作符。