Bolt:一款超快速、静态类型的脚本语言
关于 Bolt
近日,开发者 beariish 在 Hacker News 上发布了其开发的脚本语言 Bolt,这是该语言的首个公开版本(0.1.0)。Bolt 是一款用 C 语言编写的超快速、静态类型脚本语言,开发者表示,多年来构建了许多解释器,而 Bolt 是其为打造自己理想中的脚本语言所做的尝试。
Bolt 旨在直接在语言层面实现安全性和类型化,而非将其作为预处理步骤,从而在安全性和性能方面都能获益。近年来,许多嵌入式语言都在朝着安全性和类型化方向发展,比如 Python 的类型提示、TypeScript 的迅速流行,甚至为世界上最大的脚本环境之一提供支持的 Luau 语言也引入了类型系统,Bolt 正是顺应了这一趋势。
目前,开发者计划在未来几周发布一些嵌入 Bolt 的玩具和应用示例,感兴趣的用户可以查看仓库中的示例和编程指南。
Hacker News 热门讨论
性能与技术实现
- 尾调用设计:haberman 对 Bolt 关注性能这一点表示赞赏,同时好奇开发者是否考虑为解释器采用尾调用设计,称这是让编译器生成优质代码的最佳方式,并提到该技术能与 LuaJIT 解释器的手工编码汇编相媲美,且 Python 3.14 也增加了对这种解释器调度风格的支持并获得性能提升,不过该技术在 MSVC 上无法移植。
- 调度方法:beariish 回应称,在确定 Bolt 现在使用的调度方法前,尝试过几种不同方法,但未专门针对尾调用,最终采用的方法在测试中与计算式 goto 解决方案不相上下,还能在 MSVC 上编译,且愿意尝试其他方法。
- 性能对比与实现:JonChesterfield 认为 Bolt 宣称“超越同类语言”缺乏与其他一些解释器的对比,编译到寄存器字节码是合理策略但并非最快,目前还不能称其实现为快速。而 phire 指出,Bolt 所属的“可嵌入解释型脚本语言”类别与普通解释器不同,其对比涵盖了该用例的许多主要语言,不过或许应该包括 mono 的解释器模式。
- 与编译型语言性能对比:有用户询问 Bolt 在性能上与 C 等编译型语言的对比,但目前暂未提及相关数据。
语言特性与语法
- 导入语法:perlgeek 对 Bolt 示例中“import abs, epsilon from math”这种将导入符号放在前面的语法表示不认可,认为库名很重要,大多数语言都将包/模块名放在前面,TypeScript 是个明显例外。
- 导入语法的妥协方案:beariish 询问采用 TypeScript 的方式对 Bolt 来说是否是合理的妥协,Bolt 已支持全模块重命名,实现类似“import abs as absolute, sqrt as square_root from math”的语法很简单。pepa65 则提出“import math with abs as absolute, sqrt as square_root”这样的语法。vhodges 提到根据编程指南,Bolt 支持导入别名。
- 错误处理:je42 询问 Bolt 中的错误处理/异常机制,但在快速浏览编程指南后未找到相关内容,目前也未得到明确回复。
- 变量可变性:tayistay 注意到用“let”声明的变量似乎是可变的,强烈建议添加“var”关键字。
- 函数返回类型推断:thrance 认为函数返回类型推断虽有趣但并非出色功能,会让库的使用者难以正确使用函数,也让维护者容易无意中破坏向后兼容性。beariish 回应称,对于稳定接口重要的地方,库作者完全可以显式标注返回类型,该特性更多用于小型函数或回调,或许会让示例更清晰地体现这一意图。jitl 则以 TypeScript 为例,说明源文件可以有推断的返回类型,然后通过构建步骤生成具有完全指定类型的类型文件供分发。
适用场景与移植性
- 嵌入式系统:conaclos 表示,Bolt 严重依赖双精度浮点数,这使其无法在很少支持浮点数的嵌入式系统中使用,才意识到自己误解了“embedded”的含义。devmor 也有同感,称 Bolt 很酷,但理想用例是在像 ESP32 这样的有限 ISA 架构上。
- 移植性:merksoftworks 指出,Bolt 目前还不能移植到 MacOS 或 aarm64,而这种可移植性对嵌入式脚本语言很有吸引力。
- 游戏开发:acron0 表示如果还在开发游戏,会非常关注 Bolt。Vandash 作为有 15 年以上游戏开发经验的开发者,喜欢 Github 上的第一个示例,询问 Bolt 是否是编译型的,能否替代 Lua。IshKebab 回应称,Bolt 和 Lua 的编译方式相同,能替代 Lua。beariish 则明确说明 Bolt 不是提前编译的,和 Lua 一样是字节码解释型。
命名与其他
- 命名问题:themonsu 认为 Bolt 这个名字已经被多次使用,希望不要再用这个名字。IAmLiterallyAB 称这是所知的第三个名为 Bolt 的编程语言,CyberDildonics 还提到 Facebook 有个名为 Bolt 的编译后优化器。
- 内存使用:Fraterkes 询问在引擎中包含 Bolt 大致需要多少内存,以及开发者是否写过关于如何编写 Bolt 的内容。beariish 回应称,在自己的测试中,Bolt 的内存使用量与 Lua 5.4/Luau 差不多,但在编译期间的内存开销明显高于同类其他语言,且正在准备关于 Bolt 创建过程和所学知识的材料。
- 调试支持:memophysic 询问 Bolt 是否支持断点或调试服务器,以及是否有相关计划。beariish 表示目前没有,但未来肯定会探索。
- 小脚本大量调用性能:astatine 想知道大量调用小脚本的性能数据,以及每次运行脚本的启动开销。beariish 回应称,这取决于具体用例,每次调用编译器会有一些开销,如果解析一次但多次运行脚本,Bolt 提供了一些工具来分摊成本。astatine 进一步说明其服务器使用基于 Lua 的脚本插件,想了解 Bolt 在这种情况下的表现以及能否替代 Lua 插件引擎。
- 长期维护与社区:eulgro 表示,看到这类项目时会关心开发者愿意维护多久,认为对新语言来说,长期支持和社区比性能、语法或特性更重要。brabel 则认为,判断一种语言能存在多久,只能看它已经存在多久,从这个角度看,应该使用较旧的语言,基准测试显示 Lua 及其变体非常有竞争力,应该坚持使用其中之一。01HNNWZ0MV43FF 也认为,在有更多贡献者和用户之前,不能期望长期支持,现在下结论还太早,即使是 JavaScript 也花了大约 20 年才流行起来。
- 32 位 ARM 支持:grodriguez100 认为 Bolt 在嵌入式系统中有很多用例,但这可能需要 32 位 ARM 支持,询问是否有相关计划。beariish 回应称,目前没有,开发时的主要目标是实时系统,尤其是游戏,但如果嵌入式领域有真正的目标,肯定会进行探索。
- 确定性:k__ 询问 Bolt 是否像 Lua 一样具有确定性,目前未得到明确回复。
- 与其他语言对比:freeopinion 提到,Bolt 的基准测试与同类解释型语言进行了对比,而不久前看到的 Q 语言是编译型的,Bolt 声称“每秒每线程处理超过 500kloc”,Q 声称编译速度以毫秒计,快到可以像脚本一样对待,建议两者都将对方纳入基准测试,互相增加曝光度。
- 与其他语言的相似性:kiririn 表示 Bolt 给人 Pawn 的感觉。
- 祝福与期待:Forgret 表示 Bolt 看起来很酷,祝开发者开发顺利,希望它有一天能流行起来。
总结
Bolt 作为一款新发布的超快速、静态类型脚本语言,在 Hacker News 上引发了广泛讨论。其在性能、语法设计、适用场景等方面都受到了关注,有赞赏也有疑问和建议。开发者也积极回应了各种问题,表示会根据反馈进行探索和改进。对于这样一款新兴语言,其未来的发展还有待观察,是否能在众多脚本语言中脱颖而出,获得更多开发者的认可和使用,让我们拭目以待。