美丽的远景

core.typed 是一个有趣的项目:它试图给 duck type 的 clojure 语言加上一个可选的类型系统。这个类型系统与 Haskell 语言的类型有些相似,比 Java/C++ 等语言的类型系统要强大得多:毕竟 Clojure 是一个函数式语言。例如:

  • my-str :- (t/Nilable String) 可以是 nil 或者一个字符串。
  • (map f my-seq) 这个表达式中,如果 f 是这个函数:(t/fn [a :- Num] :- Num (inc a))(类型是一个单一数字参数返回值是数字的函数),那么它会检查 my-seq 是否每个元素都是数字。

如此强大的类型系统当然会对有些过于灵活的 Clojure 提供了更多的吸引力:对于大型项目,能够进行更多的编译时检查似乎总比全部依赖测试来得更令人放心。何况,它还是可选的层次,你大可以先快速书写没有类型的程序,然后在完成部分代码(比如一个 namespace 后)再加上类型信息,让 core.typed 的编译检查来帮忙。

有些暗淡的现实

可惜,试用了 core.typed 的当前版本 0.2.68 后,发现它离一个强悍的工具还有些距离:

  • 它本身实现有些 bug 。如错误信息,经常让人摸不到头脑。
  • 支持 core.typed 的类型定义的库极少。它自带了 clojure.core 等核心库的类型定义,但还有很多缺失:如 clojure 1.7.0-alpha1 的新 transducer 支持。
  • 类型推断系统还不够聪明,做不到 Haskell 的水平。

未来

试用几个小时后,我将 core.typed 依赖从 project.clj 里拿掉了,目前看来用更齐备的单元测试来检查更实用些。可能我会尝试加入 schema 来试验下运行时类型检查。

如果 core.typed 将成为重要的工具,估计需要合并进 clojure.core,毕竟核心的支持会让更多人研究它,会让更多库支持它。不过除非 Rich Hickey 对类型系统的价值有新的判断,这步工作不一定会成为现实。而如果这个决定做出,显然会让 clojure 进入 2.x 时代。

初尝 core.typed相关推荐

  1. 初尝微信小程序2-基本框架

    基本框架: .wxml :页面骨架 .wxss :页面样式 .js :页面逻辑    描述一些行为 .json :页面配置 创建一个小程序之后,app.js,app.json,app.wxss是必须的 ...

  2. 初尝微信小程序2-Swiper组件、导航栏标题配置

    swiper 滑块视图容器. 很多网页的首页都会有一个滚动的图片模块,比如天猫超市首页,滚动着很多优惠活动的图片,用来介绍优惠内容,以及供用户点击快速跳转到相应页面. Swiper不仅可以滚动图片,也 ...

  3. 初尝Java动态代理

    Title: 初尝Java动态代理 Date: 2018-11-22 12:30 Category: 技术博客 Modified: 2018-11-22 12:30 Tags: 动态代理 Slug: ...

  4. typed.js_对CircleCI的“为什么我们不再使用Core.typed”的答案

    typed.js CircleCI最近发表了一篇非常有用的文章" 为什么我们不再使用Core.typed ",引发了有关Type Clojure的一些重要问题,在特定情况下会导致成 ...

  5. HTTP协议,之入门初尝

    在学习HTTP协议的时候,看了一些文章,感觉都很晦涩难懂,尝试图解一下,方便更好的理解记忆.现在先简单记录一篇入门粗浅的博客,更深入的学习,待后续学习跟进再更新. 1.HTTP协议是什么? HTTP- ...

  6. IQueryable和IQueryProvider初尝

    前言 相信大家对Entity Framework一定不陌生,我相信其中Linq To Sql是其最大的亮点之一,但是我们一直使用到现在却不曾明白内部是如何实现的,今天我们就简单的介绍IQueryabl ...

  7. 写给过去的自己-No.2-数据结构篇-初尝柔性数组

    过去你的自己,你好.     照顾宝宝,写完第一篇就没什么时间,既然上次讲的就是数据结构,这次也讲点相关的.     其实接触柔性数组也是个比较奇妙的过程,你以后会遇到个学长,毕业后从事软件行业,在中 ...

  8. Silverlight WCF 初尝小结

    一年多的时间一直在等待Silverlight的稳定版本,但是从1.0 2.0 到现在的3.0BETA 一直吸引着我,于是终于按奈不住,一窥了Silverlight的魅力. Silverlight是什么 ...

  9. BluePrism初尝2

    在接近三周的自学中,初步体验到了RPA的甜头. 在对BP这个工具慢慢的深入接触中,从0 到1的探索式学习,从最开始的一个个的小功能模块的用途,每一个的属性的功能,到现在自己能初步尝试组织一些简单的流程 ...

最新文章

  1. DEDECMS v5.5 GBK Final 的一个鸡肋漏洞
  2. poj2017——Speed Limit
  3. Wireshark网络分析实例集锦2.1.2隐藏、删除、重新排序及编辑列
  4. java基础知识回顾之javaIO类总结
  5. 洛谷 1658 购物
  6. 技术开发中一些名词解释
  7. 返回函数之循环变量问题
  8. Android的GridView和Gallery结合Demo
  9. SAP Spartacus B2B页面Banner Component的路由url是在哪里定义的
  10. 最小错误率贝叶斯决策的基本思想_太赞了!机器学习基础核心算法:贝叶斯分类!(附西瓜书案例及代码实现)...
  11. mac apache2 php,Mac OSX 之 PHP开发环境Apache2配置
  12. 图片md5修改工具_如何修改视频和图片的MD5,用电脑自带的命令
  13. 合泰单片机市场占有率_holtek单片机图文全面详解
  14. CSS基础「三」盒子模型/产品模块案例/圆角边框/盒子阴影/文字阴影
  15. 无法获得 VMCI 驱动程序的版本: 句柄无效。 驱动程序“vmci.sys”的版本不正确。请尝试重新安装 VMware Workstation。 开启模块 DevicePowerOn 的操作失败
  16. 分治法解决组合总和问题(leetcode216)
  17. git 如何忽略掉指定目录
  18. WORD中输入已知编码的特殊字符
  19. sigmoid激活函数
  20. C语言序列求和epa,Altera Innovateasia

热门文章

  1. AutoJs学习-自动筛选探探对象
  2. echarts中formatter修改鼠标悬浮事件信息操作、echarts地图块、散点区分触发点击事件 只触发散点问题详解
  3. 【分享】集简云小程序识别财务票据同步到金蝶云星辰流程搭建示例
  4. 江苏联通查询统计平台建设(分担系统压力)
  5. (翻译)可变形控件(Morphing Controls)
  6. UG数控编程应该具备的知识在这里
  7. 华为华三交换机路由器
  8. 2022起重机司机(限桥式起重机)上岗证题目及答案
  9. 2021年制冷与空调设备运行操作考试试卷及制冷与空调设备运行操作模拟考试题库
  10. 生产环境Redis连接,长时间无响应被服务器断开问题