亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2976 | 回復(fù): 0
打印 上一主題 下一主題

技術(shù)趨勢:Functional Pogramming函數(shù)編程風云再起 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-11-10 11:56 |只看該作者 |倒序瀏覽
甫于日前落幕的Software Development 2.0研討會,來賓之一的Andrei Alexandrescu被問到未來編程語言的趨勢時,他認為函數(shù)編程(Functional Pogramming)可能會再度興起。我認同他的看法,我過去發(fā)表的JavaFX文章中,碰巧也有提到這一點。

目前兩大開發(fā)平臺(Java與.NET)都開始出現(xiàn)函數(shù)編程思維的蹤跡。Java平臺的JavaFX語言,具備所有重要函數(shù)編程的特色,所以應(yīng)該歸類為函數(shù)語言(或者至少是多重思維語言);.NET平臺的C# 3.0也存在相當多函數(shù)編程的影子。微軟的LINQ本來就源自于函數(shù)語言,更不用提微軟官方的F#語言,F(xiàn)#沿用相當多ML語言的語法,更是徹底的函數(shù)語言(其中的F,應(yīng)該是Functional的意思)。

根據(jù)Tiobe對于2007年12月語言需求所做的統(tǒng)計,面向?qū)ο笳Z言占54.4%,程序語言(Procedure Language)占41.9%,函數(shù)語言占2.0%,而邏輯語言占1.8%。以上加起來剛好百分之百。

但是,這樣的分類并不精確。現(xiàn)在的語言很少是單一思維,幾乎都是多重思維(Multi-paradigm),特別是面向?qū)ο蠛秃瘮?shù)編程,因為兩者間并沒有沖突的地方,許多面向?qū)ο笳Z言會漸漸納入函數(shù)編程的特色。例如,盡管C# 3.0具有相當多函數(shù)語言的特色,但是依然會被Tiobe歸類于面向?qū)ο笳Z言的類別。

函數(shù)編程最重要的基礎(chǔ)是Lambda Calculus,在C# 3.0稱為「Lambda表示式」,在Python稱為「Lambda函數(shù)」,在PowerShell稱為Scriptblock(劇本區(qū)塊),在Java稱為匿名方法(Anonymous Method),不同語言會用不同名詞稱呼它,但其實都是類似的東西。從這個角度來看,許多主流語言多少都具備函數(shù)編程的能力。這個趨勢應(yīng)該會延續(xù)下去,許多既有語言推出新版本時,會持續(xù)加入函數(shù)語言的特色。

另外,我最喜歡的REBOL,許多人工智能專家使用的Common Lisp,近年興起的Erlang,Perl高手唐鳳專精的Haskell,這些也都是函數(shù)語言。為什么我們喜歡函數(shù)編程?因為函數(shù)編程可以讓我們把時間花在有生產(chǎn)力的事情上,而不是處理許多瑣碎的事。簡單地說,函數(shù)語言可以讓我們用簡單的方式寫程序,但是威力又強大。

編程語言專家Ravi Sethi教授認為「簡單」與「威力」,正是函數(shù)編程的兩大優(yōu)勢。簡單,來自于以「值」(Value)為中心,不用理會下面平臺是什么機器、內(nèi)存要如何配置、如何指定。函數(shù)編程的威力,則來自于「遞歸」以及將函數(shù)視為「First-class」(一等)的值(函數(shù)本身就是值,可以被傳遞、被指定)。

自動內(nèi)存管理雖然始于函數(shù)語言,但是近年來已經(jīng)進入各大主流語言。而將函數(shù)視為一等的數(shù)據(jù)型別,也開始進入各大主流語言。這些都要歸功于函數(shù)語言,尤其是Lisp。

Lisp是函數(shù)語言的始祖,誕生于1958年,相當于50年前。換算成人類年齡的話,Lisp已經(jīng)算是程序語言中的人瑞了。Lisp的后繼者眾多,其中,至今仍然最活躍的是誕生于1980年代的Common Lisp,它在Tiobe的排名是第十七名。在Peter Seibel寫出《Practical Common Lisp》一書,并得到Jolt Award之后,讓大家逐漸對Common Lisp一改印象,開始認為它不只是學術(shù)上的語言,而是一種務(wù)實的語言。

一般來說,相較于C、Pascal這類命令式編程(Imperative Programming),函數(shù)編程的缺點是效率比較差,這也是函數(shù)語言一直無法流行的主因之一。不過,隨著處理器速度的提升,編譯程序技術(shù)的進步,都讓效率不再是問題,甚至在數(shù)學運算上,用Clean與OCaml(這些都是函數(shù)語言)開發(fā)出來的程序,效率也不會比C差。

尤其是在多核心處理器和分布式計算時代,函數(shù)編程更是比Imperative編程具有更強的優(yōu)勢。例如近年來逐漸受到重視的Erlang,正是將重點放在Concurrency與容錯上。用Erlang可以輕松開發(fā)出來的系統(tǒng),如果改用別種語言開發(fā),可能會造成程序長度暴增以及不穩(wěn)定的情況。

如果你想學習函數(shù)編程,而且如果你使用.NET平臺,我會建議你使用F#;如果你使用Java平臺,你可以考慮JavaFX;如果你沒有Java與.NET平臺考慮的話,那么你可以選擇Common Lisp與Erlang。

若未曾使用過函數(shù)編程技術(shù),思維就會受到傳統(tǒng)Imperative編程作法的拉扯,一開始時會很不習慣,但只要堅持下去,等到跨過門坎之后,函數(shù)編程其實更自然,生產(chǎn)力更高
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP