Haskell

Haskell

Haskell徠是一種標準化的、通用純函數式編程語言,有非限定性語義和強靜態類型。它的命名源自美國邏輯學家Haskell Brooks Curry,他在數學邏輯方面的工作使得函數式編程語言有了廣泛的基礎。在Haskell中,函數是一等公民。作為函數式編程語言,主要控制結構是函數。Haskell語言是1990年在編程語言Miranda的基礎上標準化的,並且以λ演算(Lambda-Calculus)為基礎發展而來。具有“證明即程序、結論公式即程序類型”的特徵。這也是Haskell語言以希臘字母「λ」(Lambda)作為自己標誌的原因。Haskell語言的最主要的執行環境是GHC。

發展


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。

特性


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標記語句。