Ruby 类型 2024:RBS、Steep、RBS 集合、主观感受

主要观点:作者近期在写新 Ruby gem 时,因支持类型检查,深入研究了当前技术,以在自己项目中实现对 gem API 的类型检查。介绍了 RBS 文件(类似 Ruby 但有细微差别且包含类型)、相关的 CLI 和原型设计、手动维护 RBS 文件的不便(每次修改需在.rb 和.rbs 中重复)、使用 Steep 进行类型检查(虽效果好但对 DSL 支持少,通过魔法注释实现类型断言)、RBS 集合(用于获取第三方代码的类型签名)、IDE 工具支持(VSCode 插件仅提供错误诊断)以及对 RBS 用户的观察(感觉在现有代码库中安装困难,虽新但已四年仍不够成熟)。

关键信息:

  • Sorbet 在 Stripe 使用多年,虽有不便但能减少 bug。
  • Matz 宣布 Sorbet 类型方法错误并建立 RBS 文件。
  • RBS 文件支持多种类型范式。
  • rbs prototype可生成现有.rb 文件的骨架.rbs 文件。
  • 手动维护 RBS 文件增加工作量和组织负担。
  • Steep 是 RBS 倡议支持的替代 Sorbet CLI 的工具。
  • RBS 集合可安装第三方 gem 的 RBS 文件。
  • Steep VSCode 插件仅提供错误诊断。

重要细节:

  • 示例 RBS 文件展示了模块、接口、类等的类型定义。
  • bundle exec steep check运行类型检查。
  • RBS 集合通过rbs collection install安装。
  • 作者对 RBS 未来发展持保留态度,担心其重蹈 Ractors 的覆辙。
阅读 16
0 条评论