Haskell

Haskell

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

基本介紹

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”)。 委員會形成了一系列的語言定義(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標記語句。

相關詞條

相關搜尋

熱門詞條

聯絡我們