写点什么

Clojure 1.9 引入 Spec 和更多语言特性

  • 2017 年 12 月 14 日
  • 本文字数:885 字

    阅读完需:约 3 分钟

正如 InfoQ 之前报道的最近发布的Colojure 1.9 中最有趣的新特性是 Spec ,它为数据和函数的规范和测试提供了一个标准化集成系统。

考虑到之前其它的合同系统(contract systems)所做的工作,比如说 Racket ,Spec 的目标是使 Clojure 代码的自动验证成为可能,同时还要支持其它功能,比如生成测试、错误报告、代码析构等等。下面这个例子向你展示了你该如何通过使用spec/keys来规范化一个map

复制代码
(spec/keys :req [::x ::y (or ::secret (and ::user ::pwd))]
:opt [::z])

map规范中使用的 key 在某种程度上让人想起了在其他语言中受歧视的 union 标签,因为在全局的命名空间中定义了它们的类型:

复制代码
(spec/def ::x integer?)
(spec/def ::y integer?)
(spec/def ::z integer?)
(spec/def ::secret string?)

这就意味着,在同一模块中定义的任何map中,相同的类型规范都会被应用到出现的给定 key 上。如果您想要使用在不同命名空间中定义的 key,那么可以使用新的 map 命名空间语法:

复制代码
#:types{ :x 1
:y 2
:secret "xyz" }

这会被解释为:

复制代码
{ :types/x 1
:types/y 2
:types/secret "xyz }

虽然现在 Clojure 1.9 是一个稳定版本,但是 Spec 仍然处于 alpha 测试阶段,并且要使用它必须要引入相应的库文件。处于 alpha 阶段意味着不能保证其 API 的兼容性。

为了提升 Spec 的表达能力,Clojure 1.9 提供了许多新的断言(predicates),包括boolean?double?simple-symbol等等。在编程语言方面,clojure.core引入了下列新的函数:

  • bounded-count:它能够对集合中的元素进行计数,并且不需要在集合边界外进行实现。
  • swap-vals!reset-vals!:这是两个新的原子(atomic)函数,它们能够返回旧的和新的数值。
  • halt-when:它是一个 transducer (推导式),当给定的断言(predicates)被满足时会结束推导。

Clojure 1.9 还引入了许多性能的提升,包括对seq的优化以及析构、通过对派生类的缓存加速编译等等。

在 Mac 上可以通过brew来安装 Clojure 1.9,在 Linux 可以用安装脚本进行安装。在 Windows 上,你仍然需要安装 Leiningen Boot

查看英文原文: Clojure 1.9 Brings Spec and More Language Features

2017 年 12 月 14 日 18:001218

评论

发布
暂无评论
发现更多内容

开源即巅峰!阿里首次分享:Java架构师全栈“成长笔记”

Java架构师迁哥

YOLOV1解读

re-执着

全网首发!“阿里爸爸”最新出品SpringBoot高级笔记(内部笔记!)

Java spring

《持之以恒的从事运动》三

Changing Lin

CODING 助力推进腾讯游戏国际化进程

CODING DevOps

DevOps 开发工具 腾讯游戏 软件研发

数字货币大趋势,DC EP出征,带老百姓进入新时代!

CECBC

区块链互操作性:大规模应用的关键

CECBC

一叶红船见百年!百度大脑助力南湖红船泛起国人心中红色情怀

百度大脑

数据准备的能力,决定企业AI研发的边界

百度大脑

人工智能

重磅!不容错过的阿里内部微服务速成手册也太赞了(2021版)

Java 程序员 面试 java编程

辞职1000小时后,我走进字节跳动拿了offer

Java 程序员 面试 java编程

第一周作业

Morphling

#架构实战营

自制深度学习照片数据集

re-执着

面试官问的那些Android原理你都懂吗?值得一看

欢喜学安卓

android 程序员 面试 移动开发

算法面试通关

zz1998

面试

灵魂拷问:我们该如何写一个适合自己的状态管理库?

尔达Erda

开源 云原生 大前端 API 运维开发

面试官问的那些Android原理你都懂吗?快来收藏!

欢喜学安卓

android 程序员 面试 移动开发

人民网发文:区块链如何跨越未来10年

CECBC

模块一作业:微信业务架构图和毕设架构设计

Felix

Hive学习笔记(一)

五分钟学大数据

hive 7月日更

数据安全法下,企业如何平衡数据安全合规与业务性能?

腾讯安全云鼎实验室

数据安全 数据安全法

当法律纽带变成“机器红线”,能让自动驾驶汽车更安全吗?

脑极体

5分钟速读之Rust权威指南(三十六)模式匹配

码生笔谈

rust

DICOM--网关(路由器/适配器)

鸟哥

医学影像 DICOM PACS dicom4che DICOMWeb

程序员外包避坑指南?

孙叫兽

程序员 外包

就是它,帮我斩获了8家大厂offer,由于太全被各大厂要求Github连夜下架

Java架构师迁哥

Java 8 新特性

Bf-Bus

CDH 安装搭建(二)

大数据技术指南

CDH 7月日更

iOS端屏幕录制开发指南

anyRTC开发者

音视频 WebRTC ios开发 屏幕录制

RedHat7.2 切换yum源记录

Bruce Xiong

redhat yum源

云计算还有多久能够替代高性能计算?

北鲲云

Clojure 1.9引入Spec和更多语言特性_语言 & 开发_Sergio De Simone_InfoQ精选文章