【黄金时代厅】
1985年,Miranda正式问世。由David Turner主导开发,面向跨平台平台用户。
首个纯函数式商业编程语言,启发了Haskell的设计。
技术特色:函数式编程、编程语言、学术。
影响力评估:技术维度 8/10,商业维度 3/10,文化维度 5/10,用户维度 2/10。
作为黄金时代厅的经典代表,Miranda在软件发展史上留下了深刻的印记。
首个纯函数式商业编程语言,启发了Haskell的设计。
【黄金时代厅】
1985年,Miranda正式问世。由David Turner主导开发,面向跨平台平台用户。
首个纯函数式商业编程语言,启发了Haskell的设计。
技术特色:函数式编程、编程语言、学术。
影响力评估:技术维度 8/10,商业维度 3/10,文化维度 5/10,用户维度 2/10。
作为黄金时代厅的经典代表,Miranda在软件发展史上留下了深刻的印记。
1985年,当David Turner发布Miranda编程语言时,个人计算机革命正进入第二个十年。那一年,微软发布了Windows 1.0,但大多数人仍在使用命令行界面;C语言是系统编程的王者,而Lisp在人工智能领域独领风骚。在这样一个命令式语言主导的世界里,Miranda的出现如同一颗异星——它完全抛弃了变量赋值和循环结构,用数学函数的纯定义来编写程序。这不仅是技术上的叛逆,更是一场关于计算本质的哲学宣言。
Miranda的诞生并非偶然。它的创造者David Turner,1946年出生于英国,在牛津大学攻读数学和计算机科学期间,就深受Alonzo Church的λ演算和Haskell Curry的组合子逻辑影响。Turner早年开发了SASL(St. Andrews Static Language)和KRC(Kent Recursive Calculator),这两款语言已经包含了惰性求值和模式匹配的雏形,但都停留在学术实验阶段。1982年,Turner在肯特大学任职时,决定将这些思想整合成一门真正的商业级语言。他花了三年时间设计语言规范,编写编译器,最终在1985年发布了Miranda——这个名字取自莎士比亚《暴风雨》中的精灵,寓意“值得惊叹的事物”。
Miranda的核心技术特征,即使在今天看来依然令人惊叹。首先,它是第一个将惰性求值作为默认策略的纯函数式语言。这意味着表达式只在需要时才被计算,从而允许程序员定义无限的数据结构,比如全体自然数列表或斐波那契数列,而无需担心内存耗尽。这种设计直接源于Turner对λ演算中正规序求值的理解,他曾在论文中写道:“惰性求值不是优化技巧,而是函数式编程的数学基础。”
其次,Miranda引入了模式匹配作为函数定义的主要方式。程序员可以通过描述输入的结构来定义函数,而不是通过检查条件语句。例如,计算列表长度的函数可以写成:len [] = 0;len (x:xs) = 1 + len xs。这种优雅的表达方式后来被Haskell、Elixir和Rust等语言广泛采纳。Turner在1986年的论文《An Overview of Miranda》中自豪地写道:“模式匹配让程序看起来像数学定义,而不是机器指令。”
第三,Miranda是列表推导(list comprehension)的发明者。这种语法允许程序员用类似集合论的符号来生成列表,例如:[x*x | x <- [1..10], x mod 2 = 0] 会生成2到10之间偶数的平方。Turner从数学中的集合构造符号获得灵感,这一特性后来被Python、Haskell和Scala等语言直接复制Python的创始人Guido van Rossum曾公开承认,Python的列表推导语法直接鉴了Miranda。
Miranda的编译器实现也体现了Turner的工程智慧。他采用了一种称为“组合子归约”的技术,将Miranda程序编译成由基本组合子(如S、K、I)构成的图,然后通过图归约实现惰性求值。这种方法避免了传统编译器需要处理变量绑定和栈帧的复杂性,使得编译器本身非常精简——整个Miranda系统最初只用了约5000行C代码。Turner在回忆录中写道:“我想证明,函数式语言不仅可以在理论上优雅,也可以在实际机器上高效运行。”
从1985年到1990年代初,Miranda在学术界和工业界都引起了波澜。它被英国多所大学用于函数式编程教学,包括剑桥、牛津和爱丁堡。Turner亲自编写了详尽的用户手册和教程,其中包含大量数学和算法示例,从快速排序到八皇后问题,展示了函数式编程的简洁与强大。1987年,Miranda被美国计算机协会(ACM)的SIGPLAN会议选为演示语言,Turner在会上发表了题为《Functional Programming and the Miranda System》的演讲,观众中包括后来参与Haskell设计的Simon Peyton Jones、Paul Hudak和John Hughes等人。据说,Peyton Jones在听完演讲后对同事说:“这就是我们想要的语言,但我们可以做得更好。”
然而,Miranda的商业之路并不平坦。Turner将Miranda的版权授权给了一家名为Research Software Ltd.的小公司,后者试图将其作为商业产品推广,定价约500美元。在1980年代,这个价格对于个人开发者来说过于昂贵,而大学实验室又倾向于使用免费的Lisp或Scheme。更关键的是,Miranda的编译器只提供了DOS和Unix版本,且缺乏图形界面和数据库支持,难以融入主流软件开发流程。到1990年代初,Miranda的用户群从未超过5000人,大部分集中在英国和欧洲的学术机构。
但Miranda的真正影响力,不在于它的商业成功,而在于它为后来者铺平了道路。1987年,一群函数式编程研究者,包括Turner、Peyton Jones、Hudak、Wadler和Hughes,在俄勒冈州波特兰市的一次会议上决定设计一门新的纯函数式语言。他们以Miranda为参照,吸收了其惰性求值、模式匹配和列表推导,同时加入了类型类(type classes)、单子(monads)和更强大的类型系统。这门语言就是Haskell,以逻辑学家Haskell Curry命名。Haskell 1.0于1990年发布,而Miranda的设计哲学几乎完整地融入了其中。Peyton Jones曾坦言:“没有Miranda,Haskell可能不会存在,或者会走完全不同的方向。”
除了Haskell,Miranda还间接影响了其他语言。Python的列表推导语法直接来自Miranda;Scala的模式匹配和函数式特性也受到Miranda的启发;甚至JavaScript的数组方法(如map、filter)和箭头函数,都可以追溯到Miranda所倡导的纯函数式风格。在编程语言理论领域,Miranda的“组合子归约”实现技术启发了后来Haskell的Glasgow Haskell Compiler(GHC)的STG(Spineless Tagless G-machine)架构。Turner在1995年的一篇论文中总结道:“Miranda就像一座灯塔,虽然自身并不庞大,但它照亮了函数式编程的前进方向。”
在Miranda的社区文化中,流传着许多轶事。据说,1986年Turner在一场学术会议上演示Miranda时,为了展示惰性求值的威力,他编写了一个生成所有质数的无限列表,然后过滤出前100个。当程序运行并瞬间输出结果时,台下一位教授惊呼:“这怎么可能?它怎么知道什么时候停止?”Turner微笑着回答:“它不知道,它只是恰好在你问它的时候停下。”这个故事后来被多次引用,成为解释惰性求值的经典笑话。
另一个有趣的故事是关于Miranda的名字。Turner最初想称其为“Mira”,但发现这个名字已被一家数据库公司注册。他于是改为“Miranda”,取自莎士比亚戏剧中的角色。但有人指出,Miranda在拉丁中意为“值得被钦佩的”,这恰好符合Turner对这门语言的期望。不过,也有批评者调侃说,Miranda的“商业失败”让它更像一个“被遗忘的精灵”。Turner本人对此并不在意,他曾在采访中说:“我设计Miranda不是为了赚钱,而是为了证明一种理念。如果它启发了Haskell,那它就完成了使命。”
如今,Miranda的源代码和文档被保存在计算机历史博物馆(Computer History Museum)的藏品中,编号102739930。在博物馆的展柜里,你还能看到1985年的原始发行磁盘、Turner的手写设计笔记,以及一份带有批注的用户手册。这些展品静静地诉说着一个时代:当编程语言还是少数人的精英工具时,一位英国数学家敢于用纯数学的优雅挑战命令式的霸权。Miranda从未成为主流,但它像一颗种子,在函数式编程的土壤中生根发芽,最终长成了Haskell这棵参天大树。对于每一位走进博物馆的参观者,Miranda的故事都在提醒我们:技术史上最伟大的贡献,往往不是那些最成功的产品,而是那些最勇敢的思想。
对技术发展和工程实践的推动程度
对商业模式和市场格局的影响深度
在科技文化和社会层面的持久影响力
用户群体的广度和普及程度