《Haskell函数式编程入门》——Haskell的由来

简介:

本节书摘来自异步社区《Haskell函数式编程入门》一书中的第1章,第1.1节Haskell的由来,作者 张淞,更多章节内容可以访问云栖社区“异步社区”公众号查看

第1章Haskell简介
Haskell函数式编程入门
本章首先介绍Haskell相关的历史,从Lisp诞生到多种函数式编程语言百花齐放,再到Haskell诞生的过程和现在发展的概况;接下来讲解安装Haskell编译器和编写Haskell程序所需要的软件,以及调试与测试函数的工具GHCi;然后介绍Haskell中定义的两种源代码文件(一个是以lhs为扩展名,另外一个是以hs为扩展名)有着怎样的不同;最后编写一个Helloworld程序当做学习Haskell旅程的第一步。

1.1 Haskell的由来
要讲述Haskell的由来还要从函数式编程的诞生说起。函数式编程有着非常悠久的历史,比C语言还要久远。20世纪30年代,美国数学家Alonzo Church引入了λ演算(Lambda Calculus),这是一个通过使用符号表达变量的绑定和替换来定义函数计算的系统,它是函数式编程语言的重要基石。也就是说,早在电子计算机还没有诞生的20世纪30年代,函数式编程语言就已经在孕育之中了。

1958年,斯坦福大学的教授John McCarthy受卡内基梅隆大学开发的一个名为IPL(Information Processing Language)语言的影响,开发了一个名为Lisp的函数式编程语言。虽然IPL并不是严格意义上的函数式编程语言,但是它已经有了一些基本思想,如列表内包、高阶函数等,本书会在后面的章节中依次做介绍。这些特性深深地影响了Lisp的设计。在Lisp诞生之后,越来越多的人开始加入到函数式编程的阵营中来。同时,Lisp的诞生也影响了很多编程语言的设计,时至今日,仍然有相当一部分人在使用Lisp。

在20世纪60年代,牛津大学的Peter Landin和Christopher Strachey明确了λ演算对函数式编程具有极高的重要性,并于1966年开发出了一个名为ISWIM(If you See What I Mean)的函数式编程语言,这是一个基于λ演算的纯函数式编程语言,一定程度上奠定了函数式编程语言设计的基础。

函数式编程发展到20世纪70年代早期的时候,爱丁堡大学的Rod Burstall和John Darlington使用函数式编程语言通过模式匹配来进行程序变换,并且明确地引入了列表内包的语法来更好地生成列表。几乎在同一时期,David Tuner教授在英国圣安德鲁斯大学,又开发了一个名为SASL(St Andrews Static Language)的纯函数式编程语言,一定基础上奠定了圣安德鲁斯大学在函数式编程领域研究的地位。

1975年,麻省理工学院的Gerry Sussman与Guy Steele开发了Scheme,这是一个更接近λ演算的语言,广泛应用于实践编程与教学中。如今,Scheme仍然被很多高校作为首要的课程来讲解。

不久,美国计算机科学家John Backus致力于函数式编程的研究,开发了一种名为FP的函数式编程语言。他引入了BNF符号系统以及对语言编译器系统的开发做出了突出的贡献,于1977年获得了图灵奖—他著名的图灵奖报告《编程是否能从冯诺依曼的体系风格中解放出来》(Can Programming be Liberated from the von Neumann Style ?)1中提到的“解放”的方式,实际上指的就是函数式编程。

也几乎是在同一时期,剑桥大学的Robin Milner开发了ML(Meta-Language),并发展出了多态类型系统——HM-System(Hindley-Milner type system),其中包括类型推断以及类型安全与异常处理机制。这个语言中的多态类型系统对函数式编程的发展意义重大,值得一说的是,Haskell使用的正是这种类型系统。

Scheme与ML都具有一定的顺序式语言的特性,但是这些语言改善了函数式编程的风格并且明确地引入了高阶函数的概念。20世纪70年代末与80年代初,惰性求值这一概念被重新被发展。SASL在1976年加入了惰性求值的功能,也出现了Lazy ML,即ML的惰性版本。在程序的运行过程中,惰性求值可使计算机仅仅计算需要的数据。

在近几十年的时间里,各个大学的学者们通过对函数式编程的研究,涌现出了很多基于函数式编程的理论。当然,与此同时还出现了很多不同的函数式编程语言。1987年,在美国俄勒冈州举行的函数式编程与计算机结构的会议(Functional Programming and Computer Architecture Conference,FPCA)上,与会者们就当时函数式编程语言种类过多、语法相似且大多数效率不高的现状进行了讨论。他们认为,这样下去的结果将会是越来越多的人研究和使用函数式编程语言,但是人们所使用的语言却得不到很好的统一。这种情形不利于函数式编程的研究、应用与发展。于是会议决定设计一个开源、免费、语法简单、运行稳定、效率高,可适用于函数式编程教学、研究,并且可编写应用软件的纯函数式编程语言来缓解函数式编程语言过多的混乱的局面,它的名字就是Haskell。它的命名源于美国数学家Haskell Brooks Curry,为纪念他在λ演算与组合逻辑(combinatory logic)方面作出的突出贡献。Haskell Curry使得函数式编程语言的设计在理论上有了非常坚实的基础。由此可见,Haskell是函数式编程发展了近60年的结晶,汇集了其他函数式编程语言的精华于一身,经过了20余年的发展,如今还在不断地壮大。

Haskell仅仅意为一门计算机编程语言,语言标准的1.0版本于1990年发布,语法的主要设计者之一是现任职于微软剑桥研究院的Simon Peyton Jones2教授。Haskell这门语言的编译器有很多种,其中GHC(Glasgow Haskell Compiler)是最常用的Haskell语言的编译器,名为哥拉斯哥是因为该编译器最初是基于Kevin Hammond教授在英国哥拉斯哥大学于1989年用Lazy ML所编写的原型。一年后,在Simon Peyton Jones的带领下,这个原型除分析器(parser)的部分全部被重写。第一个GHC的测试版于1991年4月1日发布,同时GHC也被作为了英国学术研究项目之一并且开始接受英国政府的资金支持。除GHC外,Haskell还有很多其他的编译器,比如由荷兰乌特勒克大学编写的UHC(Utrecht Haskell Compiler),由John Meacham所编写的JHC等。随着发展,Haskell语言的标准也开始发生变化,越来越多的特性与功能被逐渐加进来,两个里程碑的版本分别是Haskell 98和Haskell 2010。本书的大部分代码是符合Haskell 98标准的,但有一部分用到了Haskell 2010中增加的内容。读者可以参阅Haskell 98 report3和Haskell 2010 Report4来了解Haskell语法标准。

相关文章
|
Java PHP 开发工具
编程语言Clojure入门
在众多的编程语言中,不少开发人员熟悉Java、C#、PHP等。但是很早以前,也有一些小众的语言,比如Lisp语言,它是一种适用于符号处理和自动推理的编程语言,内部使用表结构来表达非数值计算。而Clojure语言是在JVM上实现的Lisp风格的语言,语法与Lisp类似,且可以和Java语言进行互操作
1302 0
编程语言Clojure入门
|
JavaScript 前端开发 程序员
热爱函数式的你,句句纯正的 Haskell【类型篇】
Haskell 是一门纯的函数式语言。 也就是说计算机主要是通过函数来完成的(像在数学中一样),而不是通过“先做这个,再做那个”的命令式操作顺序进行的(像在主流的编程语言中一样)。—— Simon Peyton Jones
热爱函数式的你,句句纯正的 Haskell【类型篇】
|
JavaScript 编译器
热爱函数式的你,句句纯正的 Haskell【库函数篇】
本篇是笔记篇,介绍 Haskell 的强大的库函数,也可感受下与我们平常的 js 操作异同之处:
热爱函数式的你,句句纯正的 Haskell【库函数篇】
|
编译器
热爱函数式的你,句句纯正的 Haskell【函数篇】
Haskell 值与函数是统一的,函数只是需要其他参数输入的值。如果定义的是函数,那么这个函数的行为在运行过程中也是不会改变的,对于某一个特定的输入返回的结果总是确定的,这样的函数为纯函数。
|
Shell BI 测试技术
Haskell 编程入门
在过去的几个月里,学习Haskell让我觉得非常快乐,但是入门的过程并没有我原先想象的那么简单。我非常幸运地在一个正确的地方工作,并且因此能够在Facebook参加Bryan O'Sullivan的Haskell课程。在Try Haskell上玩了一段时间后,最终你就会想要在自己的电脑上安装GHC了。
207 0
Haskell 编程入门
haskell简明入门(一)
本文的主要内容参考自《Haskell趣学指南》 1. What is Haskell?     以下内容引用自Haskell官网: Haskell是一个先进的,纯粹的函数式编程语言。一个典型的声明式地,静态类型的代码如下: primes = filterPrime [2.
1503 0
|
前端开发 JavaScript 容器
|
编译器
《Haskell函数式编程入门》——导读
本节书摘来自异步社区《Haskell函数式编程入门》一书中的导读,作者 张淞,更多章节内容可以访问云栖社区“异步社区”公众号查看
1401 0
|
安全 C语言
《Haskell函数式编程入门》—— 第1章,第1.6节本章小结
本节书摘来自异步社区《Haskell函数式编程入门》一书中的第1章,第1.6节本章小结,作者 张淞,更多章节内容可以访问云栖社区“异步社区”公众号查看
1545 0
下一篇
无影云桌面