JavaScript运行时Bun中的算法优化

💡 原文中文,约2200字,阅读约需6分钟。
📝

内容提要

Node、Deno和Bun是三种在浏览器之外运行JavaScript的选择。Bun是一个使用Zig进行编程的JavaScript运行时,基于JavaScriptCore构建,具有尾调用优化功能。尾调用优化使得JavaScript可以表达复杂且高效的程序,TCO仅在JavaScriptCore中实现。

🎯

关键要点

  • Node、Deno和Bun是三种在浏览器之外运行JavaScript的选择。

  • Bun是一个使用Zig编程的JavaScript运行时,刚刚发布了1.0版本。

  • Bun的卖点之一是速度,且基于JavaScriptCore构建。

  • Node和Deno是基于V8构建的,V8是Chrome的JavaScript引擎。

  • Bun实现了尾部调用优化(TCO),而V8没有。

  • 尾部调用优化允许通过递归表达复杂的程序而不超出调用堆栈限制。

  • 使用递归时,必须将状态移至参数,并确保递归调用是函数的最后一件事。

  • Bun能够成功运行使用尾调用优化的递归函数,而Deno会超出调用堆栈限制。

  • 尽管Bun支持TCO,但使用TCO的解决方案在性能上仍然较慢。

  • 通过突变的方法可以在保持递归的情况下获得与for循环相似的性能。

  • TCO使得JavaScript能够表达复杂而高效的程序,且不依赖于命令式循环。

  • 大多数初学者被教导循环语句是基础,但使用TCO可以用递归表达任何循环。

  • TCO在JavaScriptCore中实现,Bun和Safari使用JavaScriptCore。

➡️

继续阅读