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。
🏷️
标签
➡️