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