tutorial - 什麼是Haskell實際上有用的?
learning haskell (7)
例如,如果我開始學習Haskell,我可以發現自己使用它。 我聽說這種語言的一些常見用途是功能性的嗎?
這種語言有哪些常見用途?
快速應用開發。
如果你想知道“為什麼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 默認這樣做 。
- 即使有些事情通常會導致錯誤,只要您不使用結果,它仍然會工作。 例如,您可以將
您可以查看以下鏈接:
- http://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming
- http://blogs.msdn.com/wesdyer/archive/2007/01/18/why-functional-programming-is-important-in-a-mixed-environment.aspx
- http://blog.kickino.org/archives/2007/05/22/T22_34_16/
- http://useless-factor.blogspot.com/2007/05/advantage-of-functional-programming.html
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這樣的通用語言是否有好處,有一個很好的答案:一般編寫程序。
對於它在實踐中的用途,我有三種方法來確定:
- Haskell庫和應用程序區域的標籤雲 ,由Hackage上的頻率加權。
表示它適用於圖形,網絡,系統編程,數據結構,數據庫,開發,文本處理...
- 它在工業中使用的領域 - 很多DSL,網絡應用程序,編譯器設計,網絡,分析,系統編程......
最後,我認為它真的很強大:
我希望這給你一個關於你的問題有多廣泛的意義,如果是以任何特殊性來回答。
我有一個很酷的,Facebook創建了一個用於重寫PHP代碼的自動化工具。 他們將源代碼解析為抽象語法樹,進行一些轉換:
if ($f == false) -> if (false == $f)
我不知道為什麼,但這似乎是他們特別的風格,然後他們漂亮地打印出來。
https://github.com/facebook/lex-pass
我們使用haskell來製作特定於領域的小語言。 大量的數據處理。 Web開發。 網絡蜘蛛。 測試應用程序 編寫系統管理腳本。 後端腳本,與其他方通信。 監控腳本(我們有一個與munin一起工作良好的DSL,可以為您的應用程序編寫正確的監控代碼變得更容易)。
實際上所有種類的東西。 它只是一種日常通用語言,如果你在數學上有些傾向,那麼它具有一些非常強大和有用的特性。
這是有關Haskell及其用途的相當好的資源: