一个浮点数走进了一个渐进式类型系统

主要观点:作者在构建新的配置语言 RCL,它是 JSON 的超集,旨在生成 JSON、YAML 和 TOML 文件,同时也是不错的 JSON 查询工具。添加浮点数到 RCL 面临诸多挑战,需在不同设计选择间权衡。
关键信息

  • RCL 继承并扩展 JSON 数语法,需考虑不同应用对数字语义的理解差异。
  • RCL 有渐进类型系统,区分整数和浮点数在类型系统中有作用,但也存在边界问题。
  • 作者对 RCL 中数字的期望包括单独整数类型、所有值可比较、尊重数值相等、引用透明等。
  • 不同设计选择间存在冲突,如满足引用透明和数值相等会导致 1 和 1.0 可相互赋值为整数和浮点数。
  • 作者最终选择单个数类型,实现了 RCL 0.8.0 版本,虽舍弃了一些特性,但追求简单和实用。
    重要细节
  • Python 和 Javascript 对 1 和 1.0 的处理不同,RCL 需考虑各种应用对数字的接受情况。
  • 在 RCL 中,一些操作如列表索引接受整数不接受浮点数,区分整数和浮点数有其用途。
  • 放弃单独整数类型可采用 Typescript 的单个数类型方式,但作者认为失去两者区别可惜;放弃所有值可比较需抛弃非字符串键的集合和字典;放弃引用透明虽实用但破坏基本推理原则;放弃数值相等虽可行但违背“明显且不出乎意料”目标。
  • 选择单个数类型后,虽减少了概念但增加了一些运行时检查,且“Number”类型比“Int”更冗长,作者表示可根据实际感受调整。
阅读 6
0 条评论