Groovy創(chuàng)始人James Strachan前日在其博客上發(fā)表了一篇文章,題目為《Scala將取代Java /javac?》。以下是正文部分的翻譯:

不要誤解我的意思——我在過(guò)去的這十來(lái)年里寫了無(wú)數(shù)的Java代碼,并且堅(jiān)信它相對(duì)C++和Smalltalk來(lái)說(shuō)是一個(gè)巨大的進(jìn)步(當(dāng)然,很多其它語(yǔ)言也很有幫助,像JavaScript,Ruby,Groovy,Python等)。但是我還是一直期待著能有javac的替代者出現(xiàn)。我甚至還自創(chuàng)了一門語(yǔ)言(編者注:此處指Groovy)好讓我暫時(shí)滿足一下這種期望。
Java是一種令人驚嘆的復(fù)雜語(yǔ)言(它的語(yǔ)法規(guī)范長(zhǎng)達(dá)600 頁(yè),我懷疑到底有沒(méi)有人能真正理解它),它有自動(dòng)裝箱(Autoboxing),空指針異常(NPE)往往就是這時(shí)拋出的。其中的基本類型 (primitive type),字符串/文字/緩沖器/集合類(collections)以及數(shù)組缺乏多態(tài)性,以至于處理任何數(shù)據(jù)結(jié)構(gòu)都需要冗長(zhǎng)的語(yǔ)法;而且,由于Bean 屬性和對(duì)閉包支持的缺失(甚至在JDK 7里也仍然還不支持),這會(huì)讓你的代碼里充滿了 try/catch/finally 這些語(yǔ)句(除非你使用框架和新的自定義API)。除了這些還有好多數(shù)不清的麻煩問(wèn)題。Java倒是有類型推斷(type inference)功能但卻不用,使得我們要多輸/讀如此大量的代碼。
這個(gè)問(wèn)題在沒(méi)有Java7后變得更加緊迫 (在Snorcle之后它變得更加重要:我不知道javac是不是要被jdkc 取而代之了?)。所以我猜javac可能已經(jīng)走到了盡頭,它看起來(lái)根本就沒(méi)有什么進(jìn)展或簡(jiǎn)化了。
那么,從長(zhǎng)久來(lái)看,誰(shuí)能取代java呢?當(dāng)然,像Ruby,Groovy,Python,還有JavaScript這些動(dòng)態(tài)語(yǔ)言在過(guò)去幾年里很受歡迎——很多人喜歡他們。
我認(rèn)為將來(lái)可能替代javac的就是Scala 。它實(shí)在太讓我印象深刻了。我甚至可以誠(chéng)實(shí)地說(shuō),如果有人在2003年把Martin Odersky,Lex Spoon以及Bill Venners寫的那本《Programming in Scala》拿給我看了的話,那我根本就不會(huì)再去發(fā)明Groovy了。
那么,為什么我會(huì)看好Scala呢?Scala是靜態(tài)類型的,它可以被編譯成與Java同樣快速的字節(jié)碼,所以它的速度與Java不分上下(有時(shí)快一點(diǎn),有時(shí)慢一點(diǎn))。你可以看看 Scala 在與 groovy 或jruby一起進(jìn)行測(cè)試時(shí)表現(xiàn)有多好。注意:速度并不是我們追求的唯一目標(biāo)——有時(shí)候我們可能寧肯讓代碼慢上十倍,也要寫得簡(jiǎn)潔一點(diǎn);但是如果要取代 javac,速度當(dāng)然還是很重要的。