在查看了最近宣布的对 WebAssembly 的支持后,我突然想到,如果有一些方法可以显着提高它的效用:
让 TurboFan(V8 JIT Crankshaft 优化器的继任者)输出它生成的所有汇编代码以及静态类型签名和生成代码的执行配置文件。
允许程序员为覆盖优化器的特定静态类型签名提供自己的 asm.js/WebAssembly 代码。
有没有办法做到这一点?
有一些迹象表明它可能来自本文的以下段落:
在底层,V8 中的 WebAssembly 实现旨在重用大部分现有的 JavaScript 虚拟机基础设施,特别是 TurboFan 编译器。一个专门的 WebAssembly 解码器通过一次检查类型、局部变量索引、函数引用、返回值和控制流结构来验证模块。解码器生成一个 TurboFan 图,该图经过各种优化处理,最终由同一后端转换为机器码,该后端为优化的 JavaScript 和 asm.js 生成机器码。在接下来的几个月里,团队将专注于通过编译器调优、并行性和编译策略改进来改善 V8 实现的启动时间。
为更广泛的受众扩展这个想法:
典型的自上而下优化涉及高级编程,然后执行分析以确定哪些代码需要更多的努力。无论优化是自动代码生成还是优化代码的手动编码,都是如此。在动态类型语言的情况下,您经常希望超越仅仅优化动态类型算法并提供专门用于特定静态类型的代码。事实上,这就是 V8 JIT 优化器自动执行的操作。如果人们想手动提供一些特别“热门”的专门案例,他们需要以某种方式通知自动优化器他们已经完成了工作,以便自动优化器可以合并手动优化的代码,而不是自动生成次优代码。