Sorbet 类型语法的过去、现在和未来 – Jake Zimmerman

主要观点:Sorbet 语法丑陋但语义重要,设计语言时语义比语法更重要。Sorbet 是因工程师需求而开发,其设计经历多种尝试,包括与 TypeScript、Python 等的比较,目前采用的 DSL 方法有其优势和问题,如类型是表达式带来的限制等,未来可考虑支持可选的猴子补丁语法、改变元组类型声明等,还可探索让 Ruby VM 解析 RBS 注释以解决一些问题。
关键信息

  • 2017 年 Stripe 工程师对静态类型检查需求高,此前已有相关工具和尝试。
  • 设计类型语法时考虑多种途径,如改写为类型语言、现有类型检查器等均不可行,最终决定从头写。
  • Sorbet 选择复用 Stripe 的declare_methodDSL,其语法不断演变。
  • 类型是表达式带来诸多限制,如与已有语法冲突、需处理前向引用等。
  • 未来可考虑让 Ruby VM 解析 RBS 注释等方案。
    重要细节
  • 2013 年 Stripe 有自己的对象数据库映射器和接口定义库,2016 年实现“接口约束”,后演变为 Sorbet 的sig语法。
  • JavaScript 代码库 2016 年支持静态类型,推动 Ruby 静态类型需求。
  • 不同类型语法设计方法的优缺点,如 TypeScript 方式与 Ruby 开发习惯冲突,Python 方式需改变 VM 等。
  • 类型是表达式导致的具体问题,如|&等符号的冲突,前向引用导致的加载顺序问题等。
  • 未来可考虑的方案如支持可选猴子补丁语法、改变元组类型声明、让 Ruby VM 解析 RBS 注释等及其可能带来的好处。
阅读 10
0 条评论