主要观点:现代编译器缺乏时间概念,导致不直接允许更改函数类型,仅因某些语法巧合存在非破坏性更改。联合类型破坏参数化且嵌套行为差,更倾向Maybe
。但现有编译器做法很傻,需一直支持旧语法。数据库早已解决此问题,即通过迁移。
关键信息:
- 编译器处理代码时不考虑时间变化,更新依赖仅更新代码,错误被视为程序根本问题。
- 非破坏性更改常因语法巧合存在,如将函数参数从
Int
改为Int | null
。 - 联合类型的问题及对
Maybe
的偏好。 - 数据库通过迁移解决旧调用站点不被破坏的问题。
重要细节:
- 示例中函数类型更改及迁移方式,如
data Maybe a = Nothing | Just a
,通过迁移宏将Int
转换为Maybe Int
。 - 不同的迁移方式,如自动类型迁移和迁移文件,自动应用迁移以保证代码编译。
- 不仅函数调用可进行迁移,还可处理模块中函数添加、Rust 中特质实例添加等情况,且当前语言服务器兴起下,此功能未普及。
- 如
lookup :: key -> Map key value -> value | null
类型会因value
的实例化而出现问题,说明无参数化时需单独考虑所有可能实例。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。