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