精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
為什么大家都覺得函數式編程將會流行?
為什么大家都覺得函數式編程將會流行?
司馬牽牛 編譯  51CTO.com  2009-11-06

【51CTO精選譯文】這幾年來,函數式編程似乎忽然紅火了起來,但事實上,函數式編程卻是個已經存在了四十余年但長期只活躍于學術領域而非商業開發領域的一個編程方式。那么,為什么大家會認為函數式編程將流行?有一位從事電子商務Web應用開發的程序員在stackoverflow上提出了自己的疑問,而這個疑問也普遍存在于很多程序員的腦中。讓我們先看看這位程序員是怎樣說的:

51CTO編輯推薦:Scala編程語言專題

jjnguy:

不管什么時候去 stackoverflow 或 reddit 這樣的網站,總會遇到一群 Haskell / Scala / F# 語言的粉絲,頑固地堅持函數式編程將是下一個“大事件”。不可否認,有一些問題的確適合使用函數式編程的方式來解決,但是我過往的經驗告訴我:

◆普通的公司程序員,比如和我一起工作的大多數同事,并不懂函數式編程,并且多數工作環境也不會讓你使用它來編程。

◆實際上,大學不教函數式編程這門課(或者現在大學有這門課?)

◆大多數應用程序足夠簡單,使用普通的面向對象方式就可以解決。

函數式編程真的有必要嗎?或者只不過是一個很酷的玩具?我不是想要貶低它,我只是真的不確定:如果在我的日常工作(編寫電子商務 web 應用程序)中使用函數式編程的幾率接近零,我是否還應該去學習這種編程?
 

而對函數式編程充滿信心的程序員們往往不會默默認同這樣的觀點,而他們大多數也不是第一次遇到這樣的疑問。51CTO編者選取了以下幾個比較有代表性的回答進行了編譯:

#t#joel.neely:

我覺得,對于函數式編程會流行這一話題沒有任何疑問,因為作為一種編程方式,它都用了大約四十年了。面向對象的程序員,每當為了編寫干凈簡潔的代碼而使用了不可變對象時(immutable object),這都是借用了函數式編程的概念。

不過,強制性的函數式編程語言最近這些日子里的確獲得了很多文章的關注,而這些語言是否將主宰未來的編程語言還是一個懸而未決的問題。我自己的推測是,那種混合型、多范式的語言,比如 Scala 或 OCaml ,很可能會超過那些“純正的”函數式語言,正如純正的面向對象語言(Smalltalk、Beta 等):他們影響了主流編程但并未最終成為使用最多的語言。

最后,我要實在忍無可忍地指出,你那些有關函數式編程的評論和不久前我從過程式編程程序員聽到的論述高度相似:

◆“傳說中的”“普通”程序員不懂它。

◆沒有大范圍內教授這種語言。

◆用它編寫的任何程序都可以使用當前的技術完成。

圖像用戶界面和“作為商業模型的代碼”這些概念讓面向對象受到更多好評,同樣,我相信對不可變性的使用逐步增加以及更為簡單的(大規模)并行操作將讓更多程序員看到函數式編程所具有的優點。雖然在過去 50 年左右的時間里(這個時間構成了數字化計算機編程的整個歷史)我們經歷了很多,但我認為仍然有很多東西需要學習。

從今日起,二十年后,程序員回頭再看,看到我們當下所用的那些工具是如此原始,其中包括現在流行的面向對象和函數式編程語言,他們將會大吃一驚。 

Greg Hewgill:

對我來說,主要的加分處在于它固有的并行操作性,尤其是現在更高頻率的CPU正在轉變為更多內核。

我認為,函數式編程不會成為下一個編程范式并完全替代面向對象類型的方式。但我的確認為,如下說法非常正點:我們或者需要使用函數式語言編寫某些代碼,或者那些通用的語言將逐漸包含更多函數式構造。 

stbuton:

即使你在工作中從不會用到函數式語言,理解函數式編程將能夠讓你成為一個更優秀的開發人員。總的來講,對于代碼和編程,它將給予你一個新的視角。

讓我說,沒有理由不去學它。

我認為,那些能夠將函數式和命令式這兩種風格很好地混合在一起的語言將是最有趣的,并且最可能獲得成功。 

Norman Ramsey:

我可以告訴你人們為什么因函數式編程而興奮:很多很多程序員在使用函數式編程時都有一種“信仰改變”的體驗:生產力提升了一倍(或者十倍),而產出的代碼更加容易改寫,bug也更加的少。這些人把函數式編程看作是秘密武器。一個很好的例子是Paul Graham的《Beating the Averages》(擊敗平均值)。而你知道他的應用是什么?電子商務Web應用。

========

我們來總結一下上面這些答案。綜上所述,函數式編程的優勢主要針對兩點:

1. 不可變性(immutability)

2. 并行操作性(parallelism)

這兩個概念其實與編程范式或編程語言無關。比如,Java也有不可變對象,只是需要通過自己編寫實現方法來實現;而并行編程,近日在TechED大會上頻頻露臉的Visual Studio 2010就以并行編程為一大亮點。對于函數式編程在這兩個方面的優勢,我們有現成的論據可以引用。先看看這篇Scala語言的簡介(這篇文章來自《Scala編程》一書,而這本書的聯合作者之一就是Scala創始人)。文中有這樣的一句話:“不可變數據結構是函數式語言的一塊基石。”而這篇《哪種語言將統治多核時代 再看函數式語言特性》一文中,則十分詳細的描述了函數式語言天生的并行操作性:“函數式語言已經在簡化并行開發中證明了它的作用, 這得益于它既不用共享內存,也不會產生副作用(side effect)的函數。”可以說,函數式編程在這兩個方面上的優勢是毫無疑問的。

事實上,這兩個優勢是同進同退的,因為良好的不可變性的使用才能確保不會成為并行操作時性能的瓶頸。而這個優勢的重要性,前面的答案中已經很明顯的給出來了:如今的CPU在增高頻率上已經遇到了瓶頸,多核CPU成為趨勢,因此能夠充分發揮多核性能的應用程序將越來越重要。

技術領域的改變是極快的,因此,“大多數程序員不了解它”或者“沒有大范圍教授這種語言”都是十分無力的論證(比如說,OO編程并非從一開始就流行)。種種發展趨勢都指向了函數式編程,而那些在編程范式上“兼容”的多范式編程(如Scala語言同時支持函數式和命令式的風格,雖然它的使用者很可能最終會傾心于函數式)將必然會流行。

編者一直在推薦Scala編程語言,因為這個基于JVM的多范式編程語言無論怎么看都有很好的發展前景。如果你有Java開發的經驗,那么51CTO的Scala編程語言專題中收集的一系列針對Java程序員的教程文章相信一定會對你有所助益。

做為程序員,沒有理由不去學習任何一門編程相關的技術,更不用說那些很可能會影響到自己未來幾年飯碗的技術。編者一直相信對于一位程序員,沒有“與我無關的語言”或者“與我無關的編程方法”,因為編程有著共通的哲學。沒有哪個優秀的程序員會自稱“Java程序員”,“.NET程序員”,“PHP程序員”。他們的唯一稱呼就是“程序員”。因此,如果你還沒有開始學習函數式編程,那么現在就開始吧。

【責任編輯:楊賽 TEL:(010)68476606】
本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
歐盟資助開源語言Scala
每個程序員都該學習的5種開發語言
9個殺手級 JVM 編程語言
erlang-scala真鋒對決
編程語言:最完整的編程語言分類!知道你學的語言屬于什么嗎?
程序員不糾結:九大非主流頂尖編程語言!
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 伊吾县| 宜昌市| 淮阳县| 阳新县| 江孜县| 从江县| 阿巴嘎旗| 安塞县| 甘南县| 郸城县| 湖南省| 肥东县| 保靖县| 霍城县| 阿图什市| 长海县| 盐城市| 永福县| 色达县| 山阳县| 科技| 明星| 赤城县| 神池县| 开原市| 闸北区| 安达市| 新巴尔虎左旗| 嵊州市| 科尔| 渭源县| 安顺市| 中山市| 沂南县| 嵊泗县| 南投县| 八宿县| 浦东新区| 昔阳县| 柯坪县| 百色市|