satgo1546’s ocean

Any sufficiently primitive magic is indistinguishable from technology.

慢报:Unison语言现已发布1.0版本

Unison语言现已发布1.0版本

Unison语言有别于传统的文本式编程语言,以结构化的格式(目前是SQLite)保存代码,文本形式只是一种方便编辑用的窗口。虽然程序员仍会为函数命名,但函数的真正名字是函数体本身(的散列)。这样一来,命名不同但内容相同的函数会自动合并,而命名相同的函数的不同版本在系统内部被认为是独立的函数,从而使程序的多个版本共存互不冲突;因为函数内容永远不会变化——变了的话那压根就是另一个函数了——也就不存在编译缓存失效的难题。

语言的其余部分基本上继承自Haskell:纯函数式,ML系语法,支持自定义运算符等。用户数据类型有按名称和按结构两种;惰性求值的部分需要显式声明;还支持代数作用(algebraic effect),称为ability。

我在2022年简单调查过该语言,观看了Strange Loop演讲视频;当时尚处于内测期间,我无法上手体验。印象里那时网站上文档还比较技术性,关联的云产品Unison Cloud也还没有出现。但我仍对其是否真的能解决它宣称能解决的问题,以及不会创造出许多始料未及的新问题表示怀疑。

将程序以结构化形式存储确能带来诸多好处,例如编写基于语义的分析工具更容易。但也正是因其剑走偏锋,无法利用任何已有的基于文本的软件开发生态,例如版本控制不能用Git,只能用专门的Unison Share;最优部署方案需要基于Unison Cloud……这不免令人担忧是否会被技术套牢(vendor lock-in)。

Unison采用的内容寻址设计还要求地基极为稳固:同样以内容寻址为核心思想的Git已在从设计之初选择的SHA-1转向同时支持SHA-256的漫漫长路上匍匐前进了至少五年。以后发现的一切不如意的Unison 1.0版设计都将作为系统不可或缺的一部分,永远伴随下去。

说到底,分布式与兼容性的问题真的能通过函数不可变的性质就解决掉吗?就算在系统内能解决,一旦与外部交互,这些问题很难不会卷土重来。就像Rust之所以是Rust,不是因为它有多安全,恰是因为它可以不安全(unsafe),才令Rust得以接入现有软件,直面C的垄断地位。而Unison现在似乎已经彻底沉浸在它的云服务中,没有交出答卷的打算了。

在GitHub上查看和发表评论