注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

一种标准化的、通用纯函数式编程语言:haskell  

2013-10-31 09:02:22|  分类: 现代编程方法 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Haskell:它是一门纯函数式语言,这意味着大体上,Haskell中的函数没有副作用。

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

1概述

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

2发展

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

Haskell 1.0到1.4

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

Haskell 98

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

3特性

Haskell支持惰性求值、模式匹配、列表内包、类型类和类型多态。它是一门纯函数式语言,这意味着大体上,Haskell中的函数没有副作用。存在一个明确的类型表达副作用,与函数类型正交。一个纯函数可以返回后续执行的副作用、模块化其它语言的非纯函数。
Haskell拥有一个强、静态类型系统。Haskell在此领域的主要改革就是加入了类型类(type classes),原本设想作为重载的主要方式,在之后发现了更多用途。
用于表达边际效应的类型是monad的一个例子。Monad是一个通用框架,可以建模不同种类的计算。包括错误捕捉、非确定性计算、解析以及软件交互内存。Monad用普通数据类型定义,Haskell也为其提供了几种语法糖。
Haskell是现有的一门开放的、已发布标准的,且有多种实现的语言。
Haskell有一个活跃的社区,在线上包仓库Hackage上已有3600多个第三方开源库/工具。
Haskell的主要实现——GHC——是个解释器,也是个原生代码编译器。它可以在大多数平台运行。提到GHC是因其在并发和并行上的高性能实现,也因其丰富的类型系统,包括最近的创新,如广义代数数据类型和类型族(Type Families)。

4相关语言

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

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017