成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

專訪鄧草原:從對象和函數(shù)式到現(xiàn)實(shí)世界的項(xiàng)目

原創(chuàng)
開發(fā) 后端
函數(shù)式編程是計(jì)算機(jī)世界最古老的編程范式之一。從最初的Lisp,Scheme和Haskell到今天的Erlang,F(xiàn)#和Scala,函數(shù)式語言從商業(yè)領(lǐng)域慢慢縮小到學(xué)術(shù)領(lǐng)域,而近幾年又開始回到大家的視野當(dāng)中。51CTO開發(fā)頻道近日在QCon 2010會(huì)場上采訪到NetBeans的Erlang和Scala插件的作者鄧草原先生,探討了函數(shù)式語言的應(yīng)用前景。

【51CTO獨(dú)家特稿】在09年7月,51CTO開發(fā)頻道的一篇譯文中,一位名叫Neil的美國開發(fā)者向我們廢了半天的口舌說明一個(gè)好的入門編程語言應(yīng)該要盡可能的鼓勵(lì)學(xué)生發(fā)展天生的好奇心,最好是像Python一樣簡單,而千萬不要用Scheme這種可能是“最好”的學(xué)習(xí)編程的方式去扼殺了大多數(shù)年輕人的熱情。當(dāng)然無論Neil持怎樣的觀點(diǎn),事實(shí)上Scheme在美國的很多著名大學(xué)中都被列入第一年的計(jì)算機(jī)課程,而Neil也并不否認(rèn)Scheme能夠?yàn)榻窈蟮木幊虒W(xué)習(xí)打下簡單而堅(jiān)實(shí)的基礎(chǔ),并認(rèn)為教授Scheme的學(xué)校很可能都是一流的。那么,這個(gè)Scheme是個(gè)什么樣的語言呢?

“Scheme是Lisp語言的一個(gè)分支,它是現(xiàn)今仍然在使用的最古老的編程語言之一。它提供了最少的語法和極少幾個(gè)操作符。同樣重要的是,Scheme支持函數(shù)式編程范式,這意味著它可以用數(shù)學(xué)函數(shù)表達(dá)式來編程。”

今天這篇文章的主角不是Scheme——這個(gè)古老的語言在國內(nèi)幾乎可以說是鮮為人知。不過,這個(gè)語言跟我們今天要討論的話題有很深的關(guān)系:為什么我們要開始關(guān)注和學(xué)習(xí)函數(shù)式語言。在剛剛結(jié)束不久的QCon 2010大會(huì)上,51CTO開發(fā)頻道有幸面對面的采訪到了NetBeans上的Erlang和Scala插件的作者鄧草原先生,對函數(shù)式語言在最近幾年的普及進(jìn)行了探討。(值得一提的是,草原最初接觸的函數(shù)式語言正是Scheme和Lisp。)

[[10531]]

鄧草原,宏爵財(cái)經(jīng)資訊技術(shù)主管。除了NetBeans Erlang和Scala插件項(xiàng)目之外,他也是開源軟件AIOTrade項(xiàng)目的主創(chuàng)者,以及NetBeans夢之隊(duì)成員。在2009年11月,51CTO開發(fā)頻道曾經(jīng)就Scala IDE的開發(fā)情況對草原做過一次郵件訪談,感興趣的讀者們可以參考這篇文章

本次采訪的內(nèi)容主要從兩個(gè)角度探討了函數(shù)式語言的普及:開發(fā)者的角度,以及項(xiàng)目的角度。從市場而言,這是一個(gè)供需的關(guān)系:因?yàn)轫?xiàng)目需要這種特點(diǎn)的編程語言,所以需要招聘掌握此種語言的開發(fā)者,所以開發(fā)者需要開始學(xué)習(xí)。軟件領(lǐng)域是一個(gè)日新月異的產(chǎn)業(yè),雖然說函數(shù)式語言是一個(gè)計(jì)算機(jī)界的老古董,但這個(gè)埋了許久的金子在近幾年來開始發(fā)光了起來。也許是時(shí)候開始仔細(xì)考慮這樣一個(gè)選擇,迎著風(fēng)險(xiǎn)前進(jìn)了。

以下是訪談實(shí)錄。

項(xiàng)目的角度:為什么要考慮函數(shù)式語言?

函數(shù)式語言近年來開始流行,原因何在?

草原:一個(gè)是我們現(xiàn)在的程序員適應(yīng)變化,開發(fā)的周期比以前要加快了。以前一個(gè)程序?qū)懗鰜恚赡芤荒耆ラ_發(fā),然后兩三年間只需要小的修修補(bǔ)補(bǔ)就可以了。但是現(xiàn)在一個(gè)很明顯的特點(diǎn)就是,很多程序都是要求你去非常快的,根據(jù)需求的變動(dòng),根據(jù)系統(tǒng)的壓力,不斷地做一些滾動(dòng)的開發(fā)。這個(gè)時(shí)候,對于一個(gè)語言的抽象能力就會(huì)有些新的要求。比如在Java里頭,我們可能會(huì)用到很多事件處理,內(nèi)部類,匿名類這些東西,但是Java在語言的簡潔性方面,可以說一直到Java 6以來都沒有考慮的太遠(yuǎn)。從這個(gè)角度來講,函數(shù)式編程它首先在語言的簡潔性方面帶來很多新的機(jī)制;或者說,函數(shù)式語言它提供了另外一種抽象的能力,可以讓你的代碼更加簡潔。

另外,有些問題本來就是適合用函數(shù)式來處理的。原來我們沒有這種手段的時(shí)候,這些問題可能要寫一堆命令式的代碼;那么現(xiàn)在有這種手段之后,我們就可以很快的跟實(shí)際問題通過函數(shù)的方式把它對上,代碼本身的質(zhì)量也會(huì)得到很大的提高。

當(dāng)然還有一個(gè)原因就是現(xiàn)在多核時(shí)代,并發(fā)和并行計(jì)算的要求。并發(fā)和并行,尤其是并行,相對而言是希望能夠把一個(gè)任務(wù)分配到多個(gè)CPU上去運(yùn)行。因?yàn)橄鄬碚f,函數(shù)式語言強(qiáng)調(diào)的是引用透明,就是說,一個(gè)函數(shù)只要你給我一個(gè)相同的輸入,那么按理來說我會(huì)給出一個(gè)相同的輸出。像這種應(yīng)用就是一個(gè)很好的并行計(jì)算的基本顆粒,這些顆粒可以簡單的把它分配到不同的CPU上面或者不同的節(jié)點(diǎn)上面去運(yùn)行。這個(gè)是函數(shù)式語言現(xiàn)在受到更多關(guān)注的一個(gè)重要原因。

在項(xiàng)目中應(yīng)用函數(shù)式語言,主要面對哪些障礙?

草原:我一直有這樣一個(gè)觀點(diǎn):我們的語言是為了解決現(xiàn)實(shí)世界中的問題,而現(xiàn)實(shí)世界應(yīng)該從對象和函數(shù)兩個(gè)角度去看。或者應(yīng)該這樣說,現(xiàn)實(shí)世界既是函數(shù),又是對象。所以從這個(gè)角度來看,如果我們用一個(gè)純函數(shù)式的語言去解決我們現(xiàn)實(shí)問題的時(shí)候,而不是為了解決一個(gè)學(xué)術(shù)問題或是做一些計(jì)算,那么做這些工作的時(shí)候就會(huì)發(fā)現(xiàn),純函數(shù)語言只發(fā)揮了語言抽象能力的一面而已。所以我認(rèn)為,如果讓函數(shù)式語言能夠得到更好的發(fā)展,最好的途徑是像Scala這樣:它是一個(gè)融合了OO和FP(函數(shù)式風(fēng)格)的,而且融合的相當(dāng)好的語言。我覺得更多的人以后會(huì)發(fā)現(xiàn),從函數(shù)的角度去抽象,Scala會(huì)幫助他們漸進(jìn)的了解這一點(diǎn)。

使用函數(shù)式語言與其他語言進(jìn)行多語言混合編程的效果如何?

草原:從多語言混合編程的角度來看,它們之間交互的關(guān)鍵我覺得還不是在它們是函數(shù)式或者是OO。因?yàn)楝F(xiàn)在,比如說Ruby,Erlang,還有Scala,Java,它們之間的互操作一般都是會(huì)通過一些特定的協(xié)議。只要這個(gè)協(xié)議得到保證,那么不管你之前在某個(gè)部件上面,或者是應(yīng)用的某一塊上使用了Ruby或者Erlang,實(shí)際上都沒有關(guān)系。所以從這個(gè)角度而言,當(dāng)你在一個(gè)項(xiàng)目中使用不同語言的時(shí)候,你重點(diǎn)考慮的可能是,我現(xiàn)在所要解決的這一塊是不是這個(gè)語言所適合的。

比如說我們以前有一個(gè)例子,是我們做過的一個(gè)銀行的項(xiàng)目,就是一個(gè)非常典型的混合語言的項(xiàng)目。這是個(gè)兩三年前的項(xiàng)目,那時(shí)候,銀行的業(yè)務(wù)系統(tǒng)是用Java編寫的,中間有一個(gè)Erlang的程式來把手機(jī)發(fā)過來的信息轉(zhuǎn)換成后臺(tái)的業(yè)務(wù)系統(tǒng)需要的協(xié)議,并且從后臺(tái)業(yè)務(wù)系統(tǒng)返回來的數(shù)據(jù)再轉(zhuǎn)換成手機(jī)上需要的協(xié)議。這個(gè)轉(zhuǎn)換過程是用Erlang來做的。但是在轉(zhuǎn)換過程中,我們用到了大量的XML文件的解析,這個(gè)解析本身,說實(shí)話,Erlang它并不擅長做這種字符串或是文本的處理,所以這一塊我們是用Scala寫的。Scala它包裝了一個(gè)XML的庫,這個(gè)時(shí)候,Scala就可以發(fā)揮它在JVM上運(yùn)算的效率優(yōu)勢。Erlang和Scala之間的通訊使用的是Erlang的那套IPC通訊機(jī)制。然后在我們的前端還有個(gè)Web應(yīng)用,這個(gè)Web應(yīng)用在那時(shí)是用Ruby寫的。所以這是一個(gè)非常典型的混合語言的應(yīng)用,試圖發(fā)揮不同的語言在做不同事情時(shí)的優(yōu)點(diǎn)。

但說實(shí)話,我本人是希望能找到一種更一般化的語言,能夠同時(shí)具有不同的抽象能力,它能同時(shí)在不同的領(lǐng)域用不同的方式去解決不同的問題。如果現(xiàn)在我再設(shè)計(jì)這套系統(tǒng)的話,可能里面就只剩Scala了。

#p#

開發(fā)者的角度:如何學(xué)習(xí)函數(shù)式語言?

51CTO:您是如何開始了解函數(shù)式語言的?

草原:我本身對函數(shù)式語言了解的話,可能是源于大學(xué)里頭了。大學(xué)里頭對于Lisp或是Scheme有過一些了解,只是那時(shí)候的了解還不夠深入,大概有個(gè)概念。真正把它應(yīng)用到自己的實(shí)際項(xiàng)目當(dāng)中應(yīng)該是從Erlang開始的。這個(gè)大概是在三、四年前。那時(shí)候開始認(rèn)真的去考慮,一個(gè)純函數(shù)式的語言,能夠在應(yīng)用中能帶來哪些新的,或者說,抽象的手段,還有處理問題的手段。

51CTO:您覺得學(xué)習(xí)函數(shù)式語言的難點(diǎn)都有哪些?

草原:掌握函數(shù)式語言,我覺得相對來說,數(shù)學(xué)的基礎(chǔ)要扎實(shí)一些。如果實(shí)在是覺得自己在這方面有所欠缺的話,沒有關(guān)系,你可以把過去的很多算法啊,數(shù)學(xué)方面的這些東西都拿回來看一看。然后你再回頭去看函數(shù)式編程,那個(gè)時(shí)侯你可能會(huì)理解的更深一點(diǎn)。

另外呢,還要多做練習(xí)。因?yàn)槿绻汩L久以來都是在做OO的開發(fā),忽然轉(zhuǎn)到函數(shù)式風(fēng)格的編程,可能是需要一個(gè)適應(yīng)的過程。這個(gè)時(shí)候,一些教程和練習(xí)就能起很大的作用。

51CTO:函數(shù)式編程的技術(shù)門檻會(huì)比較高嗎?

草原:以Scala為例,如果我從Java轉(zhuǎn)過去使用Scala的話,這個(gè)過渡實(shí)際上是比較循序漸進(jìn)的。我可以按照傳統(tǒng)的風(fēng)格寫很多命令式的代碼,但是在寫的過程中你會(huì)發(fā)現(xiàn),Scala提供了非常多的能夠以函數(shù)式風(fēng)格處理的API,你可能慢慢的就會(huì)熟悉這種API。熟悉了API之后,可能就會(huì)慢慢有了函數(shù)式編程的習(xí)慣。我覺得這是最切實(shí)可行的轉(zhuǎn)變的一種手段,這也是為什么我比較看好Scala的原因。

【相關(guān)閱讀】

Scala如何改變了我的編程風(fēng)格:從命令式到函數(shù)式

這篇可以算是是Artima總編Bill Venners的一個(gè)函數(shù)式語言初步體驗(yàn)感言。在學(xué)習(xí)Scala的過程中,Bill總結(jié)道:“函數(shù)化的編程風(fēng)格強(qiáng)調(diào)不可變對象、變量可被初始化但不能重新賦值(Java中的最終變量)、數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換,以及方法和控制的構(gòu)造,最終產(chǎn)生一個(gè)沒有副作用的結(jié)果。這個(gè)領(lǐng)域的另一端是命令式的風(fēng)格,以可變對象、變量可被重新賦值(Java里的正常變量)、在數(shù)據(jù)結(jié)構(gòu)中索引、以及帶副作用的方法和控制構(gòu)造為特征。”

因并發(fā)而生 因云計(jì)算而熱:Erlang專家訪談實(shí)錄

51CTO在08年對國內(nèi)Erlang陣營的兩位先驅(qū)者,趙東煒和成立濤兩人的訪談。云計(jì)算的背景和多核的需求使函數(shù)式語言開始復(fù)蘇,但Erlang的學(xué)習(xí)的確有很大難度:“它主要是把一個(gè)程序拆成各個(gè)不同的任務(wù),在并行上面跑,這其實(shí)不是很徹底的、完全新的東西,比如說我們從Google的地圖里面可以看到這個(gè)思想,但這就是并發(fā)的思想。它對我們大家目前所熟悉的語言會(huì)造成沖擊,這個(gè)思維模式會(huì)是一個(gè)難點(diǎn),除此之外語言的語法是一個(gè)難點(diǎn)。”

F#簡明教程一:F#與函數(shù)式編程概述

這是一個(gè)系列文章,適合剛剛開始起步學(xué)習(xí)F#的開發(fā)者。F#是微軟.NET開發(fā)平臺(tái)的一門編程語言,其最大的特點(diǎn)是對函數(shù)式編程(FP,F(xiàn)unctional Programming)的引入;F#對面向?qū)ο螅∣OP)編程的支持也很出色,使用F#語言,開發(fā)人員可以自由選擇函數(shù)式編程或面向?qū)ο缶幊虂韺?shí)現(xiàn)他們的項(xiàng)目。此外,F(xiàn)#還可以與.NET平臺(tái)上C#、VB等其他編程語言緊密結(jié)合。

兩個(gè)相關(guān)技術(shù)專題:Scala編程語言 | F#函數(shù)式編程語言

51CTO專訪鄧草原視頻請見下一頁

#p#

視頻采訪實(shí)錄

 

責(zé)任編輯:yangsai 來源: 51CTO.com
相關(guān)推薦

2023-08-28 09:00:00

強(qiáng)化學(xué)習(xí)深度學(xué)習(xí)人工智能

2022-10-27 15:34:00

物聯(lián)網(wǎng)智慧城市工業(yè)4.0

2011-10-25 10:22:57

Siri

2018-01-05 13:45:34

數(shù)據(jù)化互聯(lián)網(wǎng)人工智能

2019-01-17 11:00:28

ARAR手機(jī)AR眼鏡

2023-09-06 15:27:00

混合現(xiàn)實(shí)架構(gòu)

2009-07-09 00:25:00

Scala函數(shù)式

2015-04-03 15:48:44

UNITE

2020-11-25 13:33:07

區(qū)塊鏈比特幣加密貨幣

2023-07-27 14:44:03

物聯(lián)網(wǎng)IOT

2009-07-08 16:10:24

Scala簡介面向?qū)ο?/a>函數(shù)式

2009-09-27 15:29:00

Scala講座面向?qū)ο?/a>Scala

2010-03-26 11:21:41

Oracle流程管理工作流

2021-12-10 22:13:08

VR虛擬空間

2024-02-23 09:36:50

2018-03-07 13:30:09

數(shù)據(jù)庫Redis

2023-12-26 17:27:10

2021-01-21 15:40:45

VRARVR眼鏡

2023-09-20 14:32:07

云計(jì)算
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 久久久久久一区 | 中文字幕一区二区视频 | 欧美激情一区二区 | 精品少妇一区二区三区日产乱码 | 久久亚洲精品国产精品紫薇 | 亚洲欧美精品国产一级在线 | 午夜精品一区二区三区在线观看 | 国产999精品久久久久久 | 中文字幕爱爱视频 | 精品久久久久久 | 欧美亚洲一级 | 国产精品乱码一区二三区小蝌蚪 | 一区二区日韩 | 国产一二三区在线 | 久草院线 | 亚洲视频在线观看免费 | 欧美激情在线精品一区二区三区 | www.亚洲.com | 国产一区电影 | 久久蜜桃资源一区二区老牛 | 欧美午夜视频 | 91精品国产综合久久久久久丝袜 | 午夜羞羞 | 精品久久久精品 | 国产成人自拍一区 | 黄色片大全在线观看 | 成人小视频在线观看 | 国产一区二区欧美 | 国产不卡一区 | 亚洲国产免费 | 国产精品久久久久久久毛片 | 亚洲视频中文字幕 | 欧美福利一区 | 日韩一级欧美一级 | 欧美一级二级视频 | 一区二区三区国产在线观看 | 久久精品91久久久久久再现 | 大乳boobs巨大吃奶挤奶 | 亚洲综合天堂 | 91精品国产综合久久久久久 | 亚洲www啪成人一区二区麻豆 |