欢迎您访问科普小知识本站旨在为大家提供日常生活中常见的科普小知识,以及科普文章!
您现在的位置是:首页  > 科普文章

Haskell

科普小知识2023-01-01 08:26:53
...

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

外文名:Haskell

本质:纯函数式编程语言

名字由来:Haskell*sCurry

重要应用:GHC和Hugs

特点:证明即程序、结论公式

创始时间:1990年

1、发展

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

Haskell1.0到1.4

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

Haskell98

1999年2月,Haskell98语言标准公布,名为《TheHaskell98Report》。2003年1月,《Haskell98LanguageandLibraries:TheRevisedReport》公布。接着,GlasgowHaskellCompiler(GHC)实现了当时的defacto标准,Haskell快速发展。

HaskellPrime

Haskell2010

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

2、特性

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

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

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

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

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

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

3、相关语言

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

上一篇:埃迪·拉马

下一篇:熔断器

推荐阅读