初尝 core.typed
美丽的远景
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相关推荐
- 初尝微信小程序2-基本框架
基本框架: .wxml :页面骨架 .wxss :页面样式 .js :页面逻辑 描述一些行为 .json :页面配置 创建一个小程序之后,app.js,app.json,app.wxss是必须的 ...
- 初尝微信小程序2-Swiper组件、导航栏标题配置
swiper 滑块视图容器. 很多网页的首页都会有一个滚动的图片模块,比如天猫超市首页,滚动着很多优惠活动的图片,用来介绍优惠内容,以及供用户点击快速跳转到相应页面. Swiper不仅可以滚动图片,也 ...
- 初尝Java动态代理
Title: 初尝Java动态代理 Date: 2018-11-22 12:30 Category: 技术博客 Modified: 2018-11-22 12:30 Tags: 动态代理 Slug: ...
- typed.js_对CircleCI的“为什么我们不再使用Core.typed”的答案
typed.js CircleCI最近发表了一篇非常有用的文章" 为什么我们不再使用Core.typed ",引发了有关Type Clojure的一些重要问题,在特定情况下会导致成 ...
- HTTP协议,之入门初尝
在学习HTTP协议的时候,看了一些文章,感觉都很晦涩难懂,尝试图解一下,方便更好的理解记忆.现在先简单记录一篇入门粗浅的博客,更深入的学习,待后续学习跟进再更新. 1.HTTP协议是什么? HTTP- ...
- IQueryable和IQueryProvider初尝
前言 相信大家对Entity Framework一定不陌生,我相信其中Linq To Sql是其最大的亮点之一,但是我们一直使用到现在却不曾明白内部是如何实现的,今天我们就简单的介绍IQueryabl ...
- 写给过去的自己-No.2-数据结构篇-初尝柔性数组
过去你的自己,你好. 照顾宝宝,写完第一篇就没什么时间,既然上次讲的就是数据结构,这次也讲点相关的. 其实接触柔性数组也是个比较奇妙的过程,你以后会遇到个学长,毕业后从事软件行业,在中 ...
- Silverlight WCF 初尝小结
一年多的时间一直在等待Silverlight的稳定版本,但是从1.0 2.0 到现在的3.0BETA 一直吸引着我,于是终于按奈不住,一窥了Silverlight的魅力. Silverlight是什么 ...
- BluePrism初尝2
在接近三周的自学中,初步体验到了RPA的甜头. 在对BP这个工具慢慢的深入接触中,从0 到1的探索式学习,从最开始的一个个的小功能模块的用途,每一个的属性的功能,到现在自己能初步尝试组织一些简单的流程 ...
最新文章
- DEDECMS v5.5 GBK Final 的一个鸡肋漏洞
- poj2017——Speed Limit
- Wireshark网络分析实例集锦2.1.2隐藏、删除、重新排序及编辑列
- java基础知识回顾之javaIO类总结
- 洛谷 1658 购物
- 技术开发中一些名词解释
- 返回函数之循环变量问题
- Android的GridView和Gallery结合Demo
- SAP Spartacus B2B页面Banner Component的路由url是在哪里定义的
- 最小错误率贝叶斯决策的基本思想_太赞了!机器学习基础核心算法:贝叶斯分类!(附西瓜书案例及代码实现)...
- mac apache2 php,Mac OSX 之 PHP开发环境Apache2配置
- 图片md5修改工具_如何修改视频和图片的MD5,用电脑自带的命令
- 合泰单片机市场占有率_holtek单片机图文全面详解
- CSS基础「三」盒子模型/产品模块案例/圆角边框/盒子阴影/文字阴影
- 无法获得 VMCI 驱动程序的版本: 句柄无效。 驱动程序“vmci.sys”的版本不正确。请尝试重新安装 VMware Workstation。 开启模块 DevicePowerOn 的操作失败
- 分治法解决组合总和问题(leetcode216)
- git 如何忽略掉指定目录
- WORD中输入已知编码的特殊字符
- sigmoid激活函数
- C语言序列求和epa,Altera Innovateasia