自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Haskell語言為什么值得你去學(xué)習(xí)

開發(fā) 開發(fā)工具 后端
Haskell并不是我工作時(shí)的主要語言(我基本上是為嵌入式系統(tǒng)寫C程序),但我仍然發(fā)現(xiàn)Haskell難以置信的有用。雖然我的工作從來不用Haskell,我仍然認(rèn)為花時(shí)間去學(xué)習(xí)它是值得的。那么,為什么要學(xué)習(xí)Haskell語言呢?

函數(shù)式編程

當(dāng)我向一些新手推薦學(xué)習(xí)Haskell語言時(shí),得到的反應(yīng)通常是:“為什么要學(xué)Haskell?”,“這是一種實(shí)用的語言嗎?”或者“這是一種我可以真正的語言嗎?”我的回答是明確的YES

Haskell并不是我工作時(shí)的主要語言(我基本上是為嵌入式系統(tǒng)寫C程序),但我仍然發(fā)現(xiàn)Haskell難以置信的有用。雖然我的工作從來不用Haskell,我仍然認(rèn)為花時(shí)間去學(xué)習(xí)它是值得的。那么,為什么要學(xué)習(xí)Haskell語言呢?

1. Haskell語言能很好的幫助運(yùn)用C語言

事實(shí)證明,Haskell語言是一種非常強(qiáng)大的工具,能幫助你寫好C程序。我使用Haskell能做的事情經(jīng)常是我平時(shí)認(rèn)為用常規(guī)方法根本不可行的事。

比如說,我的同事想在代碼庫(kù)里找到所有用在if條件語句里的叫做foo的變量。感謝神奇的language-c程序包以及Haskell語言的泛型,我可以寫出一個(gè)Haskell函數(shù),讓它接受一個(gè)預(yù)處理的C源代碼路徑作為輸入值,輸出找到的位置(如果有的話),就像下面:

  1. parseAndFindFoos :: FilePath -> IO (Either ParseError [Position])  
  2.  
  3. parseAndFindFoos path = liftM (fmap findFooLocations) (parseCFilePre path)  
  4.  
  5. findFooLocations input = fmap posOf (listify isIfOfInterest input)  
  6.  
  7. isIfOfInterest (CIf cond _ _ _) = not (null (listify isFooIdent cond))  
  8.  
  9. isFooIdent (Ident name _ _) = name == "foo" 

如果不包括類型標(biāo)識(shí),只有4行Haskell代碼!類型標(biāo)識(shí)通常用來做推導(dǎo),它通常會(huì)被當(dāng)作說明放到doc里。

這只是一個(gè)用在文章里起說明作用的小例子。我使用Haskell語言做了遠(yuǎn)比這復(fù)雜多的任務(wù),例如從全局聲明或函數(shù)里提取名稱和類型,或執(zhí)行變換,往符合條件的表達(dá)式里插入日志函數(shù)或邊界檢查代碼。你找不出多少其它語言能像Haskell語言那樣讓你又快又簡(jiǎn)潔的完成這種事情。

我并非是唯一一個(gè)在C語言開發(fā)中使用Haskell語言的人

我的一個(gè)同事開發(fā)了一個(gè)神奇的工具,叫做plunge,它能讓你比較預(yù)處理的C代碼和源代碼,顯示出源代碼中的每行出現(xiàn)在經(jīng)過預(yù)處理的代碼的什么位置。

同樣,還有:

  • atom – 一種Haskell語言開發(fā)的面向領(lǐng)域編程語言(DSL),能夠執(zhí)行編譯調(diào)度,在限定的內(nèi)存使用和準(zhǔn)確的時(shí)間里編譯編譯代碼。
  • copilot – 一種用Haskell開發(fā)的流式(例如無限長(zhǎng)列表)DSL,可以編譯進(jìn)嵌入式C程序中。
  • ImProv – 用Haskell寫的一種命令式編程語言,用于高保障性應(yīng)用。

還有很多。

2. Haskell語言會(huì)改變你思維的方式

我真切的認(rèn)為,學(xué)習(xí)Heskell編程能夠立即直接帶來的在編程方式上的附加效應(yīng)就是,它會(huì)永遠(yuǎn)的改變你編程思考的方式。沒錯(cuò),沒錯(cuò),我知道這聽起來像那種不疼不癢的、含糊的廢話,但我是很嚴(yán)肅的!學(xué)習(xí)Haskell語言已經(jīng)對(duì)我編程方式、我思考的方式產(chǎn)生了大量的影響,比任何我在學(xué)校里學(xué)的任何東西的影響都大,比任何我工作上的經(jīng)驗(yàn)的作用都大。

你是否嘗試過寫出一個(gè)復(fù)雜的函數(shù),但里面不含任何的可變變量?頭次嘗試這樣寫是十分痛苦的。但一旦你有了一些經(jīng)驗(yàn),不僅你會(huì)發(fā)現(xiàn)它會(huì)變得很容易,而且你會(huì)開始認(rèn)識(shí)到,你的函數(shù)可以分割成更小的片段,比你最初想象的更小。那些復(fù)雜的函數(shù)將會(huì)變的完全不是那么復(fù)雜;它們可以變成由三個(gè)簡(jiǎn)單函數(shù)組成的函數(shù)!

這就像是,你只用右腳踢足球,但有一天,你的教練禁止你使用右腳。起初你怎么踢都覺得別扭。但最終你左腳變的和你的右腳一樣厲害,你最終成為了一名更優(yōu)秀的足球運(yùn)動(dòng)員。

Haskell語言是如此的與眾不同,以至于它會(huì)迫使你用完全不同的方式思考你的程序。這就是它是一種很難學(xué)的語言的原因之一,但同樣也是為什么學(xué)習(xí)它能獲得這么多益處的原因。

3.Haskell語言陡峭的學(xué)習(xí)曲線是件好事

在學(xué)習(xí)Haskell語言時(shí),人們最常見的抱怨是它陡峭的學(xué)習(xí)曲線。人們的感覺是對(duì)的,它的確具有一個(gè)陡峭的學(xué)習(xí)曲線。它給你的感覺就像是完全重新學(xué)習(xí)編程。它需要你費(fèi)點(diǎn)功夫來忘掉你直覺上想用的那種編程模式。沒有可變變量!靜態(tài)類型!我的神呀,它可以把一個(gè)函數(shù)當(dāng)成參數(shù),并返回這個(gè)函數(shù)!怎么會(huì)有這種事???

Haskell語言的難點(diǎn)并不是那些復(fù)雜的東西,而是那些簡(jiǎn)單的東西。比如Monads;Monads是出奇的簡(jiǎn)單。它就是一種數(shù)據(jù)類型,它的實(shí)例由兩個(gè)非常簡(jiǎn)單的函數(shù)實(shí)現(xiàn)。大部分的實(shí)現(xiàn)都只有一、兩行代碼!領(lǐng)會(huì)這些隱式的,有用的,強(qiáng)大的東西會(huì)花去你大量的努力。深?yuàn)W的東西需要花時(shí)間去學(xué)。這很正常。這意味著你在學(xué)一些值得學(xué)的知識(shí)。

“只是因?yàn)槿嗆嚭脤W(xué),你就要一輩子騎三輪車嗎?” – Douglas Englebart

英文原文:Why Haskell Is Worth Learning

原文鏈接:http://www.aqee.net/why-haskell-is-worth-learning/

責(zé)任編輯:林師授 來源: 外刊IT評(píng)論
相關(guān)推薦

2012-04-11 09:19:08

Haskell編程

2018-01-10 08:45:57

編程語言PythonKotlin

2020-10-23 09:07:17

開源代碼開發(fā)

2017-04-05 18:10:05

R語言開發(fā)Ross

2015-03-02 10:21:28

沿編程語言編程語言

2010-01-22 15:14:37

學(xué)習(xí)C++

2017-02-07 09:37:46

2015-05-25 15:31:56

C語言學(xué)習(xí)和使用 C 語言

2020-04-16 11:19:55

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)層

2021-03-23 10:08:02

編程互聯(lián)網(wǎng)數(shù)據(jù)科學(xué)

2011-08-01 14:33:44

SQL

2019-11-15 13:10:17

潘石屹Python語言

2022-06-09 17:37:27

數(shù)據(jù)湖云原生

2020-04-07 16:12:56

Go編程語言開發(fā)

2024-04-03 09:23:31

ES索引分析器

2017-01-18 09:42:11

Go

2023-01-24 16:13:22

編程語言JavaIT

2016-08-19 01:59:22

APPAPM用戶

2019-11-05 14:34:37

KubernetesLinux服務(wù)器

2020-06-23 14:09:49

枚舉JDK場(chǎng)景
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)