• 觀點:Scala會成為新的EJB 2嗎?

    0
    Scala C/C++ Go list ico 10624 次瀏覽

      近日,Joda Time 庫的開發者與 JSR 310 Java 語言日期時間改進的規范領導 Stephen Colebourne 就 Scala 語言的適用性發表了一篇令人深思的文章。他比較了 Scala 與 EJB 2,并認為 EJB 2 是 Java EE 規范的低谷。

    ...大量的樣板代碼、XML 和復雜性已經滲透到了 Java 產業中。規范已被廣泛采納,但與這種采納相伴的卻是批評。開發者發現雖然 EJB 2 試圖通過抽象的更高層的 API 來降低構建企業應用的復雜性,但事實上,它卻增加了更多的復雜性,并且沒有獲得預期的結果。

      雖然他偏愛 Fantom 語言——但也對其他語言如 Kotlin、Groovy 和 Ceylon 充滿了好感——他認為 Scala 并不適合于未來的發展。

      他感到不爽的一個地方就是 Scala 并未提供合適的模塊化系統。他說 Java 一開始也沒有提供模塊化系統(目前依舊沒有,但至少這是現在人們普遍存在的一個需求),只能通過其他手段如 Maven、Ivy 和 OSGi 等達成。然而,那些忽視模塊化系統的人還是會給需要的人帶來麻煩;在處理大型系統時,模塊化將成為重要的維護工具。

      Stephen 還表示假如 Java 有模塊化系統,那么就可以發布不支持 CORBA 的 JVM 了,CORBA 是個遺留技術,在 Java 領域中,除了 RMI 外現在已經很少使用了(對于服務器間的通訊來說,CORBA 已經逐步被 SOAP 和 REST 所取代)。

      事實上,兩年前就有人提出了關于模塊化的提案,但很快就被束之高閣。對于模塊與版本存在很嚴重的阻力(每個模塊系統都需要依賴他們來運作)。在那時,Scala 尚未進入到企業;兩年過去了,Scala 的境況依然如故。

      Stephen 還指出類型系統過于復雜了,在這一點上,他認同 Steve Yegge 的觀點:

    語言規范,天哪,我簡直無話可說了。我必須得在博客上寫點什么才行。規范中大約 90% 的內容都是關于類型系統。這將是你有生之年所能見到的最大的類型系統,其復雜程度并不是一個數量級,甚至能達到 5 個量級。除了類型就是類型,然后還是類型;太復雜了。

    他們稱其為 complexity complexity,這意味著它并不僅僅是 complexity 的問題;也不是 complexity-complexity 的問題:而是參數化的 complexity-complexity,我要說的是這種東西就是在類型上堆積類型,然后再不斷地堆積類型,太糙了吧。

      Stephen 還重點強調了類型簽名——一開始用于表示方法能夠正確編譯——現在變得越來越沒有意義了,甚至在支持 Unicode 方法前就這樣了。他給出了如下的方法簽名,來自于 Scala 核心庫,他想知道這個方法到底是干啥的:

    def ++ [B >: A, That] (that: TraversableOnce[B])(implicit bf: CanBuildFrom[List[A], B, That]) : That

      事實上,Stephen 認為使用靜態類型會給靜態類型蒙羞:

    我想說的是,這個龐大的類型系統目的在于防止編譯錯誤,并且對代碼進行預檢查。但要是將這種邏輯放到動態類型系統的語言中就不行了。對于我來說,Scala 的類型系統已經背離了語言特性的本質。

    本質上,Scala 的類型系統給靜態類型蒙羞了。

      上面這些并不是什么新觀點。Log4J 與 SLF4J 項目的創建者 Ceki Gülcü就在問 Scala 是否值得信任,因為這門語言已經演化了很多,多次違背了向后兼容性(未來也不見得會解決這個問題):

    然而,Scala 語言有一點讓我頗為不爽。每次新版本發布時,Scala 都破壞了二進制兼容性。盡管之前做過許諾,但2.7版依然破壞了兼容性,2.8版又是這樣,2.9也不例外。我清楚這一點,當 Scala 庫的特性以一種不兼容的方式發生變化時,Scala 語言的設計者也只能置兼容性于不顧了。

      將 Ceki 的觀點展開,在 Java 出現前,要想在不同操作系統和版本間實現可移植性,從源代碼進行編譯是不二之選。直到標準C ABI 出現后,我們才可以在相同操作系統的不同版本間使用相同的二進制文件,最終導致了諸如 Debian、RedHat 和 Ubuntu 等二進制發布包的出現。由于缺少這些 ABI,很多公司都無法在早期的 Linux 內核1.x 和操作系統上安裝其商業產品的二進制版本(他們當然不想共享源代碼了)。

      Ceki 進一步說到“相互競爭的語言間的差距最終將會縮小,Scala 也將不會像現在這么酷了”。在一開始,Scala 有機會激發眾多 Java 程序員的想象力。它誘使那些想要學習函數式編程的程序員們學習它,同時 Scala 又提供了更為簡潔的代碼。但由于一次又一次地將語言穩定性這一要義拋之腦后,同時又沿用幾年前 Java 所用的那些手段(但卻忽視了 Java 在各個版本間的兼容性),這一切都使得 Scala 游走于主流企業項目的邊緣地帶。沒錯,一開始是有些團隊采用 Scala 并獲得成功,但到目前為止,我還沒聽說哪個團隊能夠在一兩年后還能繼續維護好 Scala 代碼基。

      現在,有不少基于 JVM 的語言都值得我們去探索,從 Fantom 到 Xtend, 這些語言正在不斷蠶食 Scala 的地位。甚至連 Java 都要在下一版本中提供模塊化和 lambda 了;雖然被推遲了一年多,但將函數式編程帶到 Java 中肯定要比 Scala 達到穩定快得多。在 Scala 步入正軌前 Java 將會迎頭趕上。Scala,你太晚了。

      查看英文原文:Opinion: Is Scala the new EJB 2?

          來自: InfoQ

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色