tutorial - 什麼是Haskell實際上有用的?




learning haskell (7)

這種語言有哪些常見用途?

快速應用開發。

如果你想知道“為什麼Haskell?”,那麼你需要考慮函數式編程語言的優點(摘自http://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming ):

  • 功能性程序往往比其強制性語言同行更為簡潔。 通常這會提高程序員的生產力

  • FP鼓勵快速成型。 因此,我認為這是ExtremeProgrammers的最佳軟件設計範例......但我知道什麼?

  • FP在功能維度上是模塊化的,其中ObjectOrientedProgramming在不同組件的維度上是模塊化的。

  • 有蛋糕和吃它的能力。 想像一下,你有一個複雜的面向對象的系統處理消息 - 每個組件可能會根據消息進行狀態更改,然後將消息轉發給它所鏈接的某些對象。 如果調用層次中的某個對象決定該消息存在缺陷,那麼如果能夠輕鬆地回滾每一項更改,這不是太酷嗎? 有不同國家的歷史怎麼樣?

  • 許多家務管理任務為您完成:解構數據結構(PatternMatching),存儲變量綁定(帶閉包的LexicalScope),強類型(TypeInference),GarbageCollection,存儲分配,是直接使用boxed(指向值)還是unboxed )表示...

  • 安全的多線程! 不可變的數據結構不受數據競爭條件的限制,因此不必受鎖保護。 如果您始終分配新對象,而不是破壞性地操作現有對象,則鎖定可以隱藏在分配和GarbageCollection系統中。

除此之外,Haskell還有其自身的優勢,例如:

  • 清晰直觀的語法靈感來自數學符號。
  • 列出解析以基於現有列表創建列表。
  • Lambda表達式:創建函數而不給它們顯式名稱。 所以處理大公式更容易。
  • Haskell完全透明 。 任何使用I / O的代碼都必須標記為這樣。 通過這種方式,它鼓勵您將代碼與副作用(例如,將文本放在屏幕上)分開,而不使用(計算)代碼。
  • 懶惰評估是一個非常好的功能:
    • 即使有些事情通常會導致錯誤,只要您不使用結果,它仍然會工作。 例如,您可以將1 / 0作為列表的第一項,如果僅使用第二項,它仍然可以工作。
    • 編寫諸如這個數獨求解器之類的搜索程序比較容易,因為它不會一次加載所有的組合,它只是隨著它一起生成它們。 你可以在其他語言中做到這一點,但只有Haskell 默認這樣做

您可以查看以下鏈接:

例如,如果我開始學習Haskell,我可以發現自己使用它。 我聽說這種語言的一些常見用途是功能性的嗎?


Haskell在行動中的一個例子是xmonad ,它是一個“少於1200行代碼的有特色的窗口管理器”。


來自Haskell

Haskell是一種標準化的通用純函數編程語言 ,具有非嚴格的語義和強大的靜態類型。 它以邏輯學家Haskell Curry命名。

基本上,Haskell可以用來創建你通常使用其他通用語言(例如C#,Java,C,C ++等)創建的任何東西。


來自haskell.org/haskellwiki/Haskell_in_industry

Haskell在航空和國防,金融,網絡初創公司,硬件設計公司和割草機製造商等領域有多種商業用途。 本頁收集Haskell工業用途的資源。

根據維基百科, Haskell語言的創建Haskell將現有的功能語言合併為一種常見的功能語言,該功能語言可用於功能語言設計的未來研究。

根據現有的信息顯而易見的是,它已經超出了它的原始目的,並且不僅僅用於研究。 它現在被認為是一種通用的函數式編程語言。

如果你仍然在問自己:“為什麼我應該使用它?”,然後閱讀為什麼要使用它? Haskell Wiki簡介部分。


對於像Haskell這樣的通用語言是否有好處,有一個很好的答案:一般編寫程序。

對於它在實踐中的用途,我有三種方法來確定:

表示它適用於圖形,網絡,系統編程,數據結構,數據庫,開發,文本處理...

最後,我認為它真的很強大:

我希望這給你一個關於你的問題有多廣泛的意義,如果是以任何特殊性來回答。


我有一個很酷的,Facebook創建了一個用於重寫PHP代碼的自動化工具。 他們將源代碼解析為抽象語法樹,進行一些轉換:

if ($f == false) -> if (false == $f)

我不知道為什麼,但這似乎是他們特別的風格,然後他們漂亮地打印出來。

https://github.com/facebook/lex-pass

我們使用haskell來製作特定於領域的小語言。 大量的數據處理。 Web開發。 網絡蜘蛛。 測試應用程序 編寫系統管理腳本。 後端腳本,與其他方通信。 監控腳本(我們有一個與munin一起工作良好的DSL,可以為您的應用程序編寫正確的監控代碼變得更容易)。

實際上所有種類的東西。 它只是一種日常通用語言,如果你在數學上有些傾向,那麼它具有一些非常強大和有用的特性。






programming-languages