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

Scala取代Java?可能嗎?熱議仍持續不斷

譯文
開發 后端
前日,Groovy創始人撰博文稱Scala將取代Java。他說,如果他在2003年看過《Programming Scala》的話,那可能就不會有Groovy了。這篇文章引發的討論十分精彩,從中可以了解到很多方面的不同觀點。

【51CTO精選譯文】前日,Groovy創始人James Strachan在博客上撰文稱Scala將成為Java的替代者。當時51CTO的譯者對全文做出了翻譯,并節選出其中一些精彩的回復放入了文中。事實上,幾乎所有的評論都十分精彩,以至于我們決定對這些回復進行更加緊密的跟蹤。

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

原文入口:Groovy創始人:Java面臨終結 Scala將取而代之(BlogSpot上的原文地址在此)。下面的評論中,我們對博主James的回復做了藍色標注。

◆Alan said...

在用Scala開發程序的過程,最吸引我的一點就是簡單的構建過程。它能非常智能地幫我解決Scala項目的依賴關系處理,編譯,以及常見的Ant/Maven任務,而且不需要編寫XML文件。 

◆Justin Lee said...

我很想知道你對fandev.org上的東西是怎樣的看法。它似乎提供了很多你期望在Scala里出現的功能(我不太懂Scala,所以我也沒法準確地進行對比)。我用Java開發已經有很長的時間了,一直希望能找到其它更好用的語言,現在我覺得fan這種語言就是我要找的。不過從你對Scala的評價來看,顯然Scala也可能是。所以,我想知道你是否了解過Fan。我并有沒有要為Fan打廣告或者說要說服你改變看法的意思。毫不隱瞞地說,我只是看看你的想法,因為你是一個語言天才,而我遠遠不是。

◆James Strachan said...

我也認為Fan是一門很棒的語言,盡管我有點擔心它會變得既不像.Net又不像Java。它的靜態和動態類型實現方式和Groovy里幾乎一模一樣。我本人還是更偏好靜態類型實現一點,而且Scala里的泛型/運算符的重載都非常好用。

最后,相比于fan/groovy里生硬地加入對閉包的支持,Scala提供的對函數式編程和不變狀態(immutable state)的支持看起來更適用一點。

◆Jeff Foster said...

我個人覺得根本就沒有必要發明一種語言來取代JVM里的Java。像現在這樣在一個虛擬機之上運行多種語言我覺得非常好(51CTO編者注:事實上,在哪種語言將統治多核時代 再看函數式語言特性一文中也有這樣的看法,那就是多種語言并存的前景),不同的人各取所需。

您是否嘗試過Clojure?它就需要大量的擊鍵輸入(因為它是動態類型的),但是宏和并行能力(因為它支持軟件事務性內存(STM)的提供使得這門語言也非常吸引人。

◆R. Mark Volkmann said...

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

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

我對這類說法非常不滿,因為雖然你可能用不到所有的符號,但是你得閱讀并理解別人的代碼,那個人說不定就用到所有的符號了。

◆The Kaos Jester said...

我想以幾個問題回應你:

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

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

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

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

這是用Java編寫的打印偶數的程序。

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

這是用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(020))   

這樣的寫法對我來講是件痛苦的事情。另外,Scala寫的示例程序讓人覺得代碼結構不太清晰。這樣非標準的for循環如何能有助于代碼的復雜性和簡潔性?它對編寫代碼有什么好處?

4 )由于它是一個腳本語言,行尾不使用' ; ' ,而是使用' \n'作為結束符,這再一次給我們帶來麻煩。我也知道Ruby,Python這些語言都很酷,因為它們都不需要你寫行結束符,但是難道你不覺得這樣很容易讓人迷惑嗎?事實上,我認為這會讓Scala程序員非常苦惱,因為連下面這樣的寫法都是合法的:

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

5 )你首先就拿Java語法手冊有600多頁說事,后面又說Scala有多少擴展庫可以實現類似功能。但是,Java語法手冊這么長的原因本來就是因為官方為保證各個Java版本的一致性而集成了大量庫。試問Scala又是如何保證這些后來加進來的庫的一致性呢?

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

7 )我想你肯定知道JavaScript不能用來開發桌面應用程序,對不對?同樣的道理,也不會有哪種語言可以替代Java,Python,Ruby等。

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

以上只是我個人的一些愚見。Scala看起來還是挺強大的(不過我仍然會首選Java和Scheme),但是似乎你所抱怨的Java中的這些問題也同樣存在于Scala中,并沒有得到什么改善。我們仍然在使用虛擬機,它帶有虛擬機內存,字節碼在運行時才編譯,它還帶有可變類型。這篇文章并不是要招來口水戰,但是我讀了你的這篇文章之后確實產生了一系列的疑問。

◆James Strachan said...

0 )javac的過期時間已經步步逼近。難道我們不該投奔另一種更好的語言嗎?你可以選擇繼續死守。這一點都不奇怪,直到現在還有人在用COBOL呢。 

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

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

3 )我不太認同你所說的。這一段Scala代碼定義了一段隨時都可以方便地結束的代碼,而在Java里必須得進行迭代。你不光是拿蘋果和桔子在進行比較。你還把Scala 的for語句的好多強大功能給忽視掉了。

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

這可避免大量丑陋的嵌套循環。

4 )Scala和Javac一樣嚴格,當然,我也一樣喜歡像JavaScript、Ruby、Groovy那樣的寬松語法。

5 )Scala是一門簡單卻又非常強大的語言。優雅設計的訣竅就是如何盡可能地進行化簡卻依然保持原有的功能。 

6 )比如說,在Java中有那么多的與基本類型、自動封裝以及數組相關的麻煩。

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

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

總之,我非常喜歡JVM以及它的平臺和無數擴展庫。我只是在為javac作長遠打算,而且我覺得Scala是一個巨大的進步。

◆James Strachan said...

@The Kaos Jester

我想順便再強調下希望你能看看我在文章里提到的兩本Scala編程書。不要心懷芥蒂。 

Scala很好地解決了Java里的大部分問題(我看了這些Scala編程書之后才想起來Java有這么多不盡如人意的地方),而且它能讓我們大開眼界,看到如何漂亮地把面向對象編程和函數式編程統一起來。

因此,Scala不僅僅是比Java更好,它完全就是面向對象語言和函數式語言的結合體,而且還有比Java更簡潔優雅的語法,它所編譯成的字節碼運行效率也和Java不相上下(有時候要相對快一點,有時候要慢一點)。 

◆Cedric said...

對不起James,但我真的不認為Java社區已經對Scala 這樣復雜的東西做好了準備。因為它確實是復雜的,不管你是不是這樣認為。此外,我認為像你自己這樣的語法設計者有時候太淵博了,所作的判斷也和我們普通人不太一樣(你不是把“單體”(monad)單獨列出來嗎?想想這個問題吧。)

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

和你一樣,我也經常對Java的哆嗦感到惱火,不過如果我想在Java里達到類型推斷和靜態類型的話,我就可以折中地寫成"List< String> l = Lists.newArrayList()",這樣就能基本上實現類型推斷。

我敢打賭,在五年內,Java將依然是最主要的JVM語言,但還是會有一幫人在提倡Scala是一個更好的替代。

純粹從設計角度看,Fan更容易吸引Java社區的開發人員加入,因為它不像Scala那樣需要跨過那么復雜的門檻。但是 1).NET兼容性問題讓我擔心這語言會不會被削弱。 2)我懷疑Andy和Frank沒有在他們的IDE上做足夠的努力。

◆Tom Flaherty said...

難得的好文章!在我最近所作的演示中我就暗示過一個類似的觀點,就是說Scala未來可能會取代Java。我的主要依據是強類型是實現一個穩定基礎系統的關鍵,而其它弱類型動態語言也只有在這個穩定的基礎系統上才能實現。而根據目前所知,Scala簡直無所不能。我真得感謝你的深入分析和你推薦的資料。

【相關閱讀】

  1. Groovy創始人:Java面臨終結 Scala將取而代之
  2. Scala如何改變了我的編程風格:從命令式到函數式
  3. Scala的類型系統 比Java更靈活
  4. Java程序員,你為什么要關注Scala
  5. Scala編程語言
責任編輯:yangsai 來源: 51CTO.com
相關推薦

2022-04-26 10:04:56

VMware

2012-02-07 10:31:09

2013-01-18 14:00:59

VMware

2015-08-19 10:12:16

CIO時代網

2015-08-26 09:54:50

大數據創業

2011-03-11 15:16:43

國產數據庫

2009-06-10 09:29:40

Scala類型通配符

2013-03-25 14:10:02

Windows Blu

2023-05-29 15:46:59

2009-11-30 15:05:54

2010-03-12 09:52:51

Python語言

2019-10-21 13:58:22

爬蟲互聯網程序員

2010-01-07 10:30:26

80后

2014-11-11 14:31:07

應用交付/地鋪科技

2012-02-02 16:37:44

海底撈華為智真視頻聚餐系統

2020-07-13 14:59:59

程序員技能開發者

2022-05-27 10:19:03

Lombok?JavaJDK14

2018-02-08 21:15:33

區塊鏈去中心化加密貨幣

2017-01-10 08:51:20

人工智能產城融合智能

2013-02-22 15:06:46

WPS陳歐體金山軟件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久久久冷 | 欧美国产视频 | 最新一级毛片 | 九九精品在线 | 在线一区 | 成年视频在线观看 | av免费成人| 一区二区视频在线观看 | 亚洲精品中文字幕在线观看 | 亚洲福利电影网 | 久草在线 | 久久看精品 | 男人的天堂久久 | 成人在线视频一区 | 一级a性色生活片久久毛片 一级特黄a大片 | 亚洲+变态+欧美+另类+精品 | 在线观看成人小视频 | 久久久精品视频免费看 | 久艹网站 | 九九热精品视频 | 欧美一区免费在线观看 | 激情网站 | 成人免费在线视频 | 日韩国产中文字幕 | 国产中文一区二区三区 | a级片在线观看 | 99精品国产一区二区三区 | 欧美二区三区 | 国产九九精品视频 | 在线观看成人小视频 | 色www精品视频在线观看 | 亚洲天堂一区 | 欧美精品一二三区 | 久久久精品一区 | 狠狠操婷婷 | 一区二区中文字幕 | 人和拘一级毛片c | 国产在线观看不卡一区二区三区 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 国产视频线观看永久免费 | 久久网一区二区 |