Roto一周年:新特性、新机制、新应用,编译型脚本语言发展正当时!
语言特性更新为Roto语言添加了许多新特性如支持 while 和 for 循环、f 字符串、更多运算符如 %、enum、复合赋值运算符如 、全局 const 绑定以及类型的泛型参数。最大的新增特性之一是 List 类型可创建任何Roto类型的列表并进行操作。还调整了语法使用 fn 代替 function用 // 进行注释更接近Rust但Roto不会是Rust的完整子集。const DUTCH_CITIES: List[String] [ Amsterdam, Rotterdam, Utrecht, Delft, ]; fn is_dutch_location(x: String) - String { // 注意你也可以使用列表的 contains 方法但这里展示了更多新的语言特性。 for city in DUTCH_CITIES { if x city { return fThe beautiful Dutch city of {x}!; } } f{x} is not in the Netherlands... }此为展示Roto新语言特性的小脚本。若想了解Roto支持的所有特性可查看[语言参考](https://roto.docs.nlnetlabs.nl/en/stable/reference/language_reference.html)。注册机制改进Roto与Rust良好集成很重要关键是将Rust类型、函数和常量注册到Roto脚本中。重大创新是 library! 宏可轻松批量注册类型和函数。对比之前的实现方式现在注册函数更像编写普通Rust代码支持使用 impl 块、文档字符串和 self还能为注册的函数构建模块树。标志设计Roto有了由 [Richard de Ruijter](https://richardderuijter.com) 设计的标志传达了有趣且富有创意的理念。标志有多种变体可在 [手册](https://roto.docs.nlnetlabs.nl/en/stable/index.html)、幻灯片和贴纸很快会有上看到。会议演讲自去年5月发布Roto以来团队在2025年的EuroRust和2026年的FOSDEM上进行了相关演讲。EuroRust演讲全面介绍了Roto及其工作原理还有有趣的演示FOSDEM演讲更深入探讨了Roto的底层工作原理以及列表的实现方式。项目亮点Iocaine过去一年Roto在NLnet Labs之外得到应用第一个采用者是 [Iocaine](https://iocaine.madhouse-project.org/)这是一个可脚本化的代理用于保护Web服务器免受AI爬虫攻击并提供虚假数据。Iocaine可使用Roto、Lua或Fennel进行脚本编写默认脚本用Roto编写因其性能最佳。Iocaine的使用促进了Roto的大规模测试其作者 [Algernon](https://gergo.csillger.hu/) 提交了大量Bug和功能请求。未来展望虽然Roto比去年成熟很多但工作还未结束。对于某些用例可能缺少关键特性如哈希表、用户自定义状态、泛型函数等。除语法高亮功能外还想在工具方面投入更多精力如开发格式化工具和语言服务器协议LSP。若对使用Roto感兴趣但发现缺少所需功能可在 [论坛](https://community.nlnetlabs.nl/c/roto/7) 上反馈。想尝试Roto可查看 [手册](https://roto.docs.nlnetlabs.nl/)、[代码仓库](https://codeberg.org/NlnetLabs/roto) 和 [示例](https://codeberg.org/NLnetLabs/roto/tree/main/examples)。团队将继续开发Roto及其周边工具持续关注未来更新。