Haskell

来自站长百科
跳转至: 导航、​ 搜索

Haskell是一种标准化的,通用纯函数式编程语言,有非限定性语义和强静态类型。它的命名源自美国逻辑学家Haskell Brooks Curry,他在数学逻辑方面的工作使得函数式编程语言有了广泛的基础。在Haskell中,函数是一等公民。作为函数式编程语言,主要控制结构是函数。Haskell语言是1990年在编程语言Miranda的基础上标准化的,并且以λ演算(Lambda-Calculus)为基础发展而来。具有“证明即程序、结论公式即程序类型”的特征。这也是Haskell语言以希腊字母「λ」(Lambda)作为自己标志的原因。Haskell语言的最重要的两个执行环境是GHCHugs

概述[ ]

Haskell(发音为 /ˈhæskəl/)[是一种标准化的,通用纯函数式编程语言,有非限定性语义和强静态类型。它的命名源自美国逻辑学家Haskell Brooks Curry,他在数学逻辑方面的工作使得函数式编程语言有了广泛的基础。在Haskell中,“函数是一等公民”。作为函数式编程语言,主要控制结构是函数。Haskell语言是1990年在编程语言Miranda的基础上标准化的,并且以λ演算(Lambda-Calculus)为基础发展而来。具有“证明即程序、结论公式即程序类型”的特征。这也是Haskell语言以希腊字母「λ」(Lambda)作为自己标志的原因。Haskell语言的最重要的两个应用是GHC(Glasgow Haskell Compiler)和Hugs(一个Haskell语言的解释器)。

发展[ ]

1985年,Miranda发行后,惰性函数式语言的关注度增长。到1987年前,出现了十多种非限定性、纯函数式语言。其中,Miranda使用的最为广泛,但还没有出现在公共领域。在波兰俄勒冈的函数式编程语言与计算机结构大会(FPCA '87)上,参加者一致同意形成一个委员会来为这样的语言定义一种开放性标准。该委员会旨在整合已有函数式语言,作为将来的函数式语言设计研究工作的基础。

Haskell 1.0到1.4   

1990年定义了Haskell的第一个版本(“Haskell 1.0”)。[8]委员会形成了一系列的语言定义(1.0,1.1,1.2,1.3,1.4)。

Haskell 98   

1997年底,该系列形成了Haskell 98,旨在定义一个稳定、最小化、可移植的语言版本以及相应的标准库,以用于教学和作为将来扩展的基础。委员会明确欢迎创建各种增加或集成实验性特性的Haskell 98的扩展和变种。[7]   1999年2月,Haskell 98语言标准公布,名为《The Haskell 98 Report》。[7]2003年1月,《Haskell 98 Language and Libraries: The Revised Report》公布。[9]接着,Glasgow Haskell Compiler(GHC)实现了当时的de facto标准,Haskell快速发展。

Haskell Prime    2006年早期,开始了定义Haskell 98标准后续的进程,非正式命名为Haskell Prime。这是个修订语言定义的不断增补的过程,每年产生一个新的修订版。第一个修订版于2009年11月完成、2010年7月发布,称作Haskell 2010。   

Haskell 2010   

Haskell 2010加入了外部函数接口(Foreign Function Interface,FFI),允许绑定到其它编程语言,修正了一些语法问题(在正式语法中的改动)并废除了称为“n加k模式”(换言之,不再支持 fact (n+1) = (n+1) * fact n )。引入了语言级编译选项语法扩展(Language-Pragma-Syntax-Extension),使得在Haskell源代码中可以明确要求一些扩展功能。Haskell 2010引入的这些扩展的名字是DoAndIfThenElse、HierarchicalModules、EmptyDataDeclarations、FixityResolution、ForeignFunctionInterface、LineCommentSyntax、PatternGuards、RelaxedDependencyAnalysis、LanguagePragma、NoNPlusKPatterns。

特性[ ]

 Haskell支持惰性求值、模式匹配、列表内包、类型类和类型多态。它是一门纯函数式语言,这意味着大体上,Haskell中的函数没有边际效应。存在一个明确的类型表达边际效应,与函数类型正交。一个纯函数可以返回后续执行的边际效应、模块化其它语言的非纯函数。  

Haskell拥有一个强、静态类型系统。Haskell在此领域的主要改革就是加入了类型类(type classes),原本设想作为重载的主要方式,在之后发现了更多用途。   

用于表达边际效应的类型是monad的一个例子。Monad是一个通用框架,可以建模不同种类的计算。包括错误捕捉、非确定性计算、解析以及软件交互内存。Monad用普通数据类型定义,Haskell也为其提供了几种语法糖。   

Haskell是现有的一门开放的、已发布标准的,且有多种实现的语言。   

Haskell有一个活跃的社区,在线上包仓库Hackage上已有3600多个第三方开源库/工具。  

Haskell的主要实现——GHC——是个解释器,也是个原生代码编译器。它可以在大多数平台运行。提到GHC是因其在并发和并行上的高性能实现,也因其丰富的类型系统,包括最近的创新,如广义代数数据类型和类型族(Type Families)。

相关语言[ ]

现在以Haskell为基础的衍生语言有很多种,它们分别是:并行Haskell,扩充Haskell(旧名Goffin),Eager Haskell, Eden, DNA-Hakell 和面向对象的变体(Haskell++, O'Haskell, Mondrian)。另外Haskell还被作为其他语言设计新功能时的样板,例如Python中的Lambda标记语句。


相关条目[ ]


参考资料[ ]