日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Scala取代Java?可能嗎?熱議仍持續(xù)不斷

【精選譯文】前日,Groovy創(chuàng)始人James Strachan在博客上撰文稱Scala將成為Java的替代者。當(dāng)時(shí)的譯者對(duì)全文做出了翻譯,并節(jié)選出其中一些精彩的回復(fù)放入了文中。事實(shí)上,幾乎所有的評(píng)論都十分精彩,以至于我們決定對(duì)這些回復(fù)進(jìn)行更加緊密的跟蹤。

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供裕華網(wǎng)站建設(shè)、裕華做網(wǎng)站、裕華網(wǎng)站設(shè)計(jì)、裕華網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、裕華企業(yè)網(wǎng)站模板建站服務(wù),十載裕華做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

編輯推薦:Scala編程語(yǔ)言專題

原文入口:Groovy創(chuàng)始人:Java面臨終結(jié) Scala將取而代之(BlogSpot上的原文地址在此)。下面的評(píng)論中,我們對(duì)博主James的回復(fù)做了藍(lán)色標(biāo)注。

◆Alan said...

在用Scala開發(fā)程序的過(guò)程,最吸引我的一點(diǎn)就是簡(jiǎn)單的構(gòu)建過(guò)程。它能非常智能地幫我解決Scala項(xiàng)目的依賴關(guān)系處理,編譯,以及常見的Ant/Maven任務(wù),而且不需要編寫XML文件。

◆Justin Lee said...

我很想知道你對(duì)fandev.org上的東西是怎樣的看法。它似乎提供了很多你期望在Scala里出現(xiàn)的功能(我不太懂Scala,所以我也沒(méi)法準(zhǔn)確地進(jìn)行對(duì)比)。我用Java開發(fā)已經(jīng)有很長(zhǎng)的時(shí)間了,一直希望能找到其它更好用的語(yǔ)言,現(xiàn)在我覺得fan這種語(yǔ)言就是我要找的。不過(guò)從你對(duì)Scala的評(píng)價(jià)來(lái)看,顯然Scala也可能是。所以,我想知道你是否了解過(guò)Fan。我并有沒(méi)有要為Fan打廣告或者說(shuō)要說(shuō)服你改變看法的意思。毫不隱瞞地說(shuō),我只是看看你的想法,因?yàn)槟闶且粋€(gè)語(yǔ)言天才,而我遠(yuǎn)遠(yuǎn)不是。

◆James Strachan said...

我也認(rèn)為Fan是一門很棒的語(yǔ)言,盡管我有點(diǎn)擔(dān)心它會(huì)變得既不像.Net又不像Java。它的靜態(tài)和動(dòng)態(tài)類型實(shí)現(xiàn)方式和Groovy里幾乎一模一樣。我本人還是更偏好靜態(tài)類型實(shí)現(xiàn)一點(diǎn),而且Scala里的泛型/運(yùn)算符的重載都非常好用。

最后,相比于fan/groovy里生硬地加入對(duì)閉包的支持,Scala提供的對(duì)函數(shù)式編程和不變狀態(tài)(immutable state)的支持看起來(lái)更適用一點(diǎn)。

◆Jeff Foster said...

我個(gè)人覺得根本就沒(méi)有必要發(fā)明一種語(yǔ)言來(lái)取代JVM里的Java。像現(xiàn)在這樣在一個(gè)虛擬機(jī)之上運(yùn)行多種語(yǔ)言我覺得非常好(編者注:事實(shí)上,在哪種語(yǔ)言將統(tǒng)治多核時(shí)代 再看函數(shù)式語(yǔ)言特性一文中也有這樣的看法,那就是多種語(yǔ)言并存的前景),不同的人各取所需。

您是否嘗試過(guò)Clojure?它就需要大量的擊鍵輸入(因?yàn)樗莿?dòng)態(tài)類型的),但是宏和并行能力(因?yàn)樗С周浖聞?wù)性內(nèi)存(STM)的提供使得這門語(yǔ)言也非常吸引人。

◆R. Mark Volkmann said...

我看到作者作了不少這樣的辯解:

“Scala給人的最初印象可能是符號(hào)用得太多了點(diǎn),但是你并不需要使用所有的符號(hào)”。

我對(duì)這類說(shuō)法非常不滿,因?yàn)殡m然你可能用不到所有的符號(hào),但是你得閱讀并理解別人的代碼,那個(gè)人說(shuō)不定就用到所有的符號(hào)了。

◆The Kaos Jester said...

我想以幾個(gè)問(wèn)題回應(yīng)你:

0 )既然我們會(huì)一直停留在Java 6,為什么我們還要這么急切地想掙脫Java呢?你先是嫌Java的語(yǔ)法標(biāo)準(zhǔn)太厚了,但接著又怪它沒(méi)有什么新功能。為什么我們放棄Java?(編者注:Java EE 6的草案早在2007年初便已經(jīng)提交,但是JavaOne 09都已經(jīng)結(jié)束了,還是千呼萬(wàn)喚出不來(lái)。詳情可參考之前的譯文Java EE 6遙遙無(wú)期 預(yù)覽版兩極分化)

1 )你怎么看待數(shù)組?我知道鏈表用起來(lái)是“很好”,但是數(shù)組這一數(shù)據(jù)結(jié)構(gòu)并不僅僅是描述了數(shù)據(jù)的存儲(chǔ),它還提供了一個(gè)可在O(1)時(shí)間復(fù)雜度內(nèi)訪問(wèn)的內(nèi)存分布。如果采用鏈表,就根本沒(méi)法保證這樣的高效。這買賣劃算嗎?

2 )Java里的泛型和C++里的模板差不多就是一個(gè)東西,只不過(guò)泛型在編譯時(shí)沒(méi)有類型推斷。Scala也差不多,只不過(guò)有類型推斷,但是程序員現(xiàn)在還根本沒(méi)有辦法控制它。比如,每次我要實(shí)現(xiàn)一個(gè)KD樹時(shí),我就通過(guò)擴(kuò)展TreePoint來(lái)在變量T上實(shí)現(xiàn)泛型。其中TreePoint是一個(gè)提供了getVal(int axis)函數(shù)的接口。這樣就讓我得以構(gòu)建一個(gè)泛型的空間樹,而且它肯定能在任何實(shí)現(xiàn)了TreePoint的類下工作。如果我想用Scala構(gòu)建這樣的數(shù)據(jù)結(jié)構(gòu)的話怎樣才能辦得到呢?是不是我得TreePoint變成一個(gè)對(duì)象,并通過(guò)其它對(duì)象來(lái)擴(kuò)展它?Scala甚至連繼承都不支持吧?還有接口呢?(有關(guān)Scala泛型的優(yōu)勢(shì),曾致信Scala創(chuàng)始人Martin Odersky,他曾比較詳細(xì)的解釋過(guò)。詳情可點(diǎn)擊這里)

3 )您稱贊Scala說(shuō)它更優(yōu)雅。我覺得有必要展示一下。

這是用Java編寫的打印偶數(shù)的程序。

 
 
 
  1. even(int max) {
  2. for(int i = 0; i < max; i++) {
  3. if (i % 2 == 0) System.out.print(i + " ");
  4. }

這是用Scala寫的:

 
 
 
  1. def even(to: Int): List[Int] =
  2. for (i <- List.range(0, to) if i % 2 == 0) yield i
  3. Console.println(even(0, 20)) 

這樣的寫法對(duì)我來(lái)講是件痛苦的事情。另外,Scala寫的示例程序讓人覺得代碼結(jié)構(gòu)不太清晰。這樣非標(biāo)準(zhǔn)的for循環(huán)如何能有助于代碼的復(fù)雜性和簡(jiǎn)潔性?它對(duì)編寫代碼有什么好處?

4 )由于它是一個(gè)腳本語(yǔ)言,行尾不使用' ; ' ,而是使用' \n'作為結(jié)束符,這再一次給我們帶來(lái)麻煩。我也知道Ruby,Python這些語(yǔ)言都很酷,因?yàn)樗鼈兌疾恍枰銓懶薪Y(jié)束符,但是難道你不覺得這樣很容易讓人迷惑嗎?事實(shí)上,我認(rèn)為這會(huì)讓Scala程序員非??鄲?,因?yàn)檫B下面這樣的寫法都是合法的:

 
 
 
  1. val t = a(i); a(i) = a(j); a(j) = t 

5 )你首先就拿Java語(yǔ)法手冊(cè)有600多頁(yè)說(shuō)事,后面又說(shuō)Scala有多少擴(kuò)展庫(kù)可以實(shí)現(xiàn)類似功能。但是,Java語(yǔ)法手冊(cè)這么長(zhǎng)的原因本來(lái)就是因?yàn)楣俜綖楸WC各個(gè)Java版本的一致性而集成了大量庫(kù)。試問(wèn)Scala又是如何保證這些后來(lái)加進(jìn)來(lái)的庫(kù)的一致性呢?

6 )你說(shuō)Java的基本類型很是讓人不爽。我不知道你為什么會(huì)有這種感覺,Scala又采取了什么措施來(lái)解決這一問(wèn)題呢?

7 )我想你肯定知道JavaScript不能用來(lái)開發(fā)桌面應(yīng)用程序,對(duì)不對(duì)?同樣的道理,也不會(huì)有哪種語(yǔ)言可以替代Java,Python,Ruby等。

8 )Java里有一點(diǎn)和字符串相關(guān)的多態(tài)性值得一提:Java里的所有對(duì)象都提供了一個(gè)toString方法,并且所有你自己編寫的對(duì)象都可以自定義toString方法(只要在類里面定義這個(gè)方法并在方法前加上"@Override")。所以,你可以讓Java完全按照你的所想去打印任何對(duì)象。試問(wèn)在Scala里怎樣才能實(shí)現(xiàn)這一功能呢?

以上只是我個(gè)人的一些愚見。Scala看起來(lái)還是挺強(qiáng)大的(不過(guò)我仍然會(huì)選擇Java和Scheme),但是似乎你所抱怨的Java中的這些問(wèn)題也同樣存在于Scala中,并沒(méi)有得到什么改善。我們?nèi)匀辉谑褂锰摂M機(jī),它帶有虛擬機(jī)內(nèi)存,字節(jié)碼在運(yùn)行時(shí)才編譯,它還帶有可變類型。這篇文章并不是要招來(lái)口水戰(zhàn),但是我讀了你的這篇文章之后確實(shí)產(chǎn)生了一系列的疑問(wèn)。

◆James Strachan said...

0 )javac的過(guò)期時(shí)間已經(jīng)步步逼近。難道我們不該投奔另一種更好的語(yǔ)言嗎?你可以選擇繼續(xù)死守。這一點(diǎn)都不奇怪,直到現(xiàn)在還有人在用COBOL呢。

1 )數(shù)組不是Collection,它們沒(méi)有實(shí)現(xiàn) Iterbale < T>。(Scala里的FWIW鏈表和數(shù)組支持迭代和自然數(shù)索引操作,例如myArray(5) )

2 )我不確定我可以100%做到這點(diǎn),但是我想可能值得去讀讀Scala里如何支持這種抽象類型。

3 )我不太認(rèn)同你所說(shuō)的。這一段Scala代碼定義了一段隨時(shí)都可以方便地結(jié)束的代碼,而在Java里必須得進(jìn)行迭代。你不光是拿蘋果和桔子在進(jìn)行比較。你還把Scala 的for語(yǔ)句的好多強(qiáng)大功能給忽視掉了。

http://www.scala-lang.org/node/111

這可避免大量丑陋的嵌套循環(huán)。

4 )Scala和Javac一樣嚴(yán)格,當(dāng)然,我也一樣喜歡像JavaScript、Ruby、Groovy那樣的寬松語(yǔ)法。

5 )Scala是一門簡(jiǎn)單卻又非常強(qiáng)大的語(yǔ)言。優(yōu)雅設(shè)計(jì)的訣竅就是如何盡可能地進(jìn)行化簡(jiǎn)卻依然保持原有的功能。

6 )比如說(shuō),在Java中有那么多的與基本類型、自動(dòng)封裝以及數(shù)組相關(guān)的麻煩。

7 )JavaScript和Java/Ruby之間根本就沒(méi)有什么可比性。你還可以用Rhino在JVM里完成大部分任務(wù)呢。

8 )Scala里,一切都是對(duì)象。

總之,我非常喜歡JVM以及它的平臺(tái)和無(wú)數(shù)擴(kuò)展庫(kù)。我只是在為javac作長(zhǎng)遠(yuǎn)打算,而且我覺得Scala是一個(gè)巨大的進(jìn)步。

◆James Strachan said...

@The Kaos Jester

我想順便再?gòu)?qiáng)調(diào)下希望你能看看我在文章里提到的兩本Scala編程書。不要心懷芥蒂。

Scala很好地解決了Java里的大部分問(wèn)題(我看了這些Scala編程書之后才想起來(lái)Java有這么多不盡如人意的地方),而且它能讓我們大開眼界,看到如何漂亮地把面向?qū)ο缶幊毯秃瘮?shù)式編程統(tǒng)一起來(lái)。

因此,Scala不僅僅是比Java更好,它完全就是面向?qū)ο笳Z(yǔ)言和函數(shù)式語(yǔ)言的結(jié)合體,而且還有比Java更簡(jiǎn)潔優(yōu)雅的語(yǔ)法,它所編譯成的字節(jié)碼運(yùn)行效率也和Java不相上下(有時(shí)候要相對(duì)快一點(diǎn),有時(shí)候要慢一點(diǎn))。

◆Cedric said...

對(duì)不起James,但我真的不認(rèn)為Java社區(qū)已經(jīng)對(duì)Scala 這樣復(fù)雜的東西做好了準(zhǔn)備。因?yàn)樗_實(shí)是復(fù)雜的,不管你是不是這樣認(rèn)為。此外,我認(rèn)為像你自己這樣的語(yǔ)法設(shè)計(jì)者有時(shí)候太淵博了,所作的判斷也和我們普通人不太一樣(你不是把“單體”(monad)單獨(dú)列出來(lái)嗎?想想這個(gè)問(wèn)題吧。)

很多時(shí)候,我都覺得Scala之于Java就像C++之于C。有著豐富的功能,并且也辯稱“你不必掌握所有這些功能”,但到了實(shí)際開發(fā)中,往往加大了工程的復(fù)雜程度。你可以去看看我在Scala每日郵件列表里發(fā)的代碼片段,我想說(shuō)的是:它比Java的泛型復(fù)雜10倍。

和你一樣,我也經(jīng)常對(duì)Java的哆嗦感到惱火,不過(guò)如果我想在Java里達(dá)到類型推斷和靜態(tài)類型的話,我就可以折中地寫成"List< String> l = Lists.newArrayList()",這樣就能基本上實(shí)現(xiàn)類型推斷。

我敢打賭,在五年內(nèi),Java將依然是最主要的JVM語(yǔ)言,但還是會(huì)有一幫人在提倡Scala是一個(gè)更好的替代。

純粹從設(shè)計(jì)角度看,F(xiàn)an更容易吸引Java社區(qū)的開發(fā)人員加入,因?yàn)樗幌馭cala那樣需要跨過(guò)那么復(fù)雜的門檻。但是 1).NET兼容性問(wèn)題讓我擔(dān)心這語(yǔ)言會(huì)不會(huì)被削弱。 2)我懷疑Andy和Frank沒(méi)有在他們的IDE上做足夠的努力。

◆Tom Flaherty said...

難得的好文章!在我最近所作的演示中我就暗示過(guò)一個(gè)類似的觀點(diǎn),就是說(shuō)Scala未來(lái)可能會(huì)取代Java。我的主要依據(jù)是強(qiáng)類型是實(shí)現(xiàn)一個(gè)穩(wěn)定基礎(chǔ)系統(tǒng)的關(guān)鍵,而其它弱類型動(dòng)態(tài)語(yǔ)言也只有在這個(gè)穩(wěn)定的基礎(chǔ)系統(tǒng)上才能實(shí)現(xiàn)。而根據(jù)目前所知,Scala簡(jiǎn)直無(wú)所不能。我真得感謝你的深入分析和你推薦的資料。

【相關(guān)閱讀】

  1. Groovy創(chuàng)始人:Java面臨終結(jié) Scala將取而代之
  2. Scala如何改變了我的編程風(fēng)格:從命令式到函數(shù)式
  3. Scala的類型系統(tǒng) 比Java更靈活
  4. Java程序員,你為什么要關(guān)注Scala
  5. Scala編程語(yǔ)言

分享文章:Scala取代Java?可能嗎?熱議仍持續(xù)不斷
本文來(lái)源:http://www.5511xx.com/article/djcsjde.html