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