初識Haskell

在COMP30026 Models of Computation中接觸了新的編程語言Haskell,一個以前聽都沒有聽過的語言,在此記錄關於Haskell的一些最基本概念。express


1.Haskell是一個函數式編程語言(functional programming language),函數式編程語言最基本的操做是function application。編程

2.GHC(the Glasgow Haskell Compiler)是Haskell的編譯器,GHCi是Haskell的互動編程環境。服務器

3.官網www.haskell.org,相關下載、文檔、教程都在其中。併發

4.Haskell語言的特色(摘自官網):app

  (1) 靜態類型statically typed編程語言

  在Haskell中全部的表達式(expression)的類型(type)在編譯時肯定,在function application中的類型必須匹配,不匹配會被編譯器拒絕。類型在Haskell中不只是一種保證形式,也是Haskell對程序構建的表示。ide

  (2) 純函數purely functional函數式編程

  在Haskell中的每個函數(function)都是數學意義上的函數,即便是反作用(side-effect)的IO操做也只是對純代碼產生的操做的描述。沒有語句和指令,只有不能改變(局部或全局)變量和訪問如時間和隨機數狀態的表達式,也就是無狀態。函數

  *反作用通常是針對操做(表達式)而言的,一個操做/表達式有「反作用」是指在對該表達式求值時,會改變程序的一個或多個數據,以至再次對該表達式求值時,可能會得出不一樣的結果。事實上,Java的4種表達式語句如賦值、自增自減、方法調用、對象建立均可能帶來反作用。性能

  (3) 類型推斷type inference

  沒必要在Haskell中明確寫出每一個類型。類型將經過雙向統一每個類型來推斷出。但若是選擇寫出類型或是要求編譯器寫出。

  (4) 併發concurrent

  Haskell對效果的明確處理,很是適合併發編程。它的編譯器GHC帶有高性能並行垃圾收集器和輕量級併發庫,其中包含許多有用的併發原語和抽象。

  (5) 惰性lazy

  函數不檢測其參數,這意味程序能夠很好地經過普通函數和控制結構(如if/else)來組合在一塊兒。Haskell代碼的純粹使得功能鏈更容易融合在一塊兒,從而取得性能優點。

  (6) 包packages

  Haskell的開源貢獻很是活躍,公共包服務器上提供了範圍很是廣的包。

相關文章
相關標籤/搜索