我们思考破坏性变更的方式真的很愚蠢

主要观点:现代编译器缺乏时间概念,导致不直接允许更改函数类型,仅因某些语法巧合存在非破坏性更改。联合类型破坏参数化且嵌套行为差,更倾向Maybe。但现有编译器做法很傻,需一直支持旧语法。数据库早已解决此问题,即通过迁移。

关键信息

  • 编译器处理代码时不考虑时间变化,更新依赖仅更新代码,错误被视为程序根本问题。
  • 非破坏性更改常因语法巧合存在,如将函数参数从Int改为Int | null
  • 联合类型的问题及对Maybe的偏好。
  • 数据库通过迁移解决旧调用站点不被破坏的问题。

重要细节

  • 示例中函数类型更改及迁移方式,如data Maybe a = Nothing | Just a,通过迁移宏将Int转换为Maybe Int
  • 不同的迁移方式,如自动类型迁移和迁移文件,自动应用迁移以保证代码编译。
  • 不仅函数调用可进行迁移,还可处理模块中函数添加、Rust 中特质实例添加等情况,且当前语言服务器兴起下,此功能未普及。
  • lookup :: key -> Map key value -> value | null类型会因value的实例化而出现问题,说明无参数化时需单独考虑所有可能实例。
阅读 7
0 条评论