看作者们的意思是要在 Common Lisp 的基础上实现一门新的语言,加入一些 Haskell、Scala 等函数式编程语言才有的功能特性,简单体验了一下,发现有以下比较有意思的功能与特性:
- ADT
Coalton 默认提供了 Optional
、 Result
,用于处理空值与异常。
- 模式匹配
虽然 Common Lisp 已经有 trivia
了,但是 Coalton 提供的模式匹配会更加函数式一点,对 ADT 进行匹配时会更加自然。
- 静态类型 + 类型推导
Coalton 的类型推导挺强大的,常量自动推导类型,甚至可以从被调用函数的参数与返回值中推导出调用者的参数与返回值的类型,
这样其实基本不用手动声明类型,享受静态类型带来的好处了,比如可以给编译器(目前仅支持 SBCL)提供更多的信息进行性能优化,
并且在编译时进行类型检查,减少运行时出错的可能性。
- 类型类
没什么好说的了,函数式编程语言标配,像 Eq
、 Ord
这些基本的类型类都内置了。
- 高阶类型
没想到有生之年能够在 Common Lisp 上看到真正的 Functor
、 Monad
实现,不依赖于 CLOS 。
- 与 Common Lisp 互操作
不管是在 Coalton 中调用 Common Lisp 定义的函数,还是在 Common Lisp 中调用 Coalton 定义的函数都是挺方便的,
这样可以实现多范式编程,虽然 Coalton 本身并没有限制程序员进行纯函数式编程。
简单体验下来,我个人还是比较看好这个项目的,因为我个人比较喜欢函数式编程,但 Haskell、F# 的缩进语法我不太喜欢,Scala 依赖于 JVM 又太过臃肿,
Coalton 能用 Lisp 语法进行类 Haskell 的函数式编程,还能利用 Common Lisp 现有的生态我觉得挺不错的,不知道大家有什么看法?
2 个赞
在 Emacs China 总感觉你都老得能进博物馆了,在 QQ 群又感觉你像个小年轻,着实让人敬佩
1 个赞
ixnij
10
这些特性我不大感兴趣,现在就 racket 最吸引我了。我近来有种倾向:感觉 pure 不 pure 无所谓,ocaml 那样最好。
我觉得 Coalton 能在 CL 上实现这些已经挺不容易了 ,类型系统对于提高代码抽象程度和正确性而言还是有一定帮助的
好像不只类型声明呀,静态类型的好处还有多态函数可以进行静态分发或者内联提升性能。
LdBeth
13
这么一说我想起来了,
支持 typeclass 没有的 subtype polymorphism,和 CLOS defgeneric/defmethod 用法贴近
倒是以我用 FriCAS 和 ATS 这些“编译到另一种语言的带类型语言”的经验来说,写代码时同时处理类型系统的迷之报错和通过 type check 后定位 compile/runtime 的报错(对于这类语言类型系统上有洞极为常见,更别说 logical error 了),可以说是地獄样的体验。
LdBeth
14
建议题主去用个几天写几个小项目后回来做个汇报,我一不用 SBCL 二对 type system 不是很 found 就不试了。