实用编程类型系统与无线网络定时进程代数
1. Typed Clojure 类型系统分析
Typed Clojure 作为 Clojure 的可选类型版本,其类型系统设计紧密贴合 Clojure 语言的特点。在对 464 个顶级定义(包含 57 个 defmethod 调用和 407 个 def 表达式)的检查中发现,每 1.4 个顶级定义会出现 1 次 HMap 查找,每 4.4 个顶级定义会出现 1 次 Java 交互。在 1834 个类型化代码的 def 表达式中,仅有 407 个(22%)被检查,剩下 1427 个(78%)未检查,原因包括未注释的第三方库、向 Typed Clojure 转换的工作未完成、不支持的 Clojure 习惯用法以及难以检查的代码。
从这些数据可以看出,HMaps 和 Java 互操作性支持是 Typed Clojure 中非常重要的特性,平均每个类型化函数使用这些特性的次数超过一次。而多方法在案例研究中相对不常见,例如 CircleCI 的代码库在 55000 行混合无类型和类型化的 Clojure 代码中,总共只有 26 个多方法。
1.1 Typed Clojure 面临的挑战
- 性能问题 :重新检查具有传递依赖的文件成本很高,因为必须重新检查所有依赖项。可以通过缓存类型状态来显著提高重新检查的性能,但在任意代码重新加载的情况下保持静态健全性仍是一个有待探索的领域。
- 库注释问题 :外部代码的注释很少,因此将无类型代码转换为类型化代码的大部分工作是对库进行逆向工程。
超级会员免费看
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



