2011年4月23日 星期六

2-5. 轉移到Scala,有風險嗎?

學習一個新語言,除了該語言的功能與易學性需要考慮以外,對於該語言各種應用的解決方案,以及如何延續自己既有的程式資產,也都應該列入考量的範圍。

我們發現有很多新的語言標榜很多功能,但對於解決方案的支援卻很缺乏,這時使用者是否要轉而接受該語言,就有待考驗。

同樣的情況,也出現在 Scala 上,Scala 就算再強,也不可能解決所有的問題,我們真的可以放心轉移到 Scala 嗎?Web 怎麼辦?Database 怎麼辦?

這些問題在 Scala 世界中,可能不會那個嚴重。原因是因為 Scala 可以繼承 Java 廣大的解決方案。

前面提過 Scala 與 Java 彼此可以混用,只要是 Java 的 library、package 或 framework,Scala 都可以使用,無形中,Scala 已有成堆的解決方案。可以使用 Java 的資產,也是 Scala 設計時重要的考量因素之一。

在同一團隊中,使用 Scala 與 Java 寫作出來的程式碼,因為可以互相混用,因此也少了移轉障礙,這對進入 Scala 世界少了很多的障礙。盡量繼續使用你原有 Java 的資產,不會因為進入Scala 世界而要完全放棄過去的投資,只是你以後要有使用兩種語言寫程式的心理打算,合適 Scala 的時候使用 Scala,合適 Java 的時候使用 Java。

但這是否代表在 Scala 世界中,不提供一些常見的解決方案?
當然不是這樣,在 Scala 世界中也有許多很棒的設計,以下簡單說明:

一.Web 解決方案

Web是現在最主流的開發方式,不管 Windows、Java、PHP、Ruby 都有一大堆人投入其中。Ruby 這個語言本來默默無聞,但藉著 Ruby on Rail 名震天下,有許多所謂 Web 2.0 的網站是用 ROR 所寫作的。ROR 的成功也讓 Java 意識到自己的老舊與繁瑣,而有許多改進聲音出現(如:closure、continuation 都是那時要求改進的項目)。

Java 世界中,Web 的解決方案更是多元,有 Servlet、JSP、JSF、各式的 framework(Wicket、Struct、Tapestry、Spring)、各種 template(Velocity、FreeMaker)、Groovy 的 GSP、Grails等。看到這,你應該累了,Java 應該是有史以來產生最多 framework 的語言。

在 Scala 中,有一個非常有名的 Web 解決方案,名叫 Lift,設計者 David 在瞭解 ROR 以及 Wicket 後,所設計出來給 Scala 世界的一個很好的 Web 解決方案,非常有名。
很有趣的是,David 現在想要將這個解決方案,推銷到 Ruby 世界中,希望 Ruby 的使用者可以透過 JRuby 來使用 Lift,可見得設計者對這個產品的信心。

Lift 這個東西很有用,若你希望使用 Scala 撰寫 Web AP,你應該不可忽視它。這麼重要的軟體,未來我們有機會將討論它。

二.平行處理

Scala 對於平行處理著墨甚多,可見得平行處理本身的困難度有多大。

在平行處理的問題上,除 Scala 本身提供的 Actor Model 外,在 Scala 世界中還有一個重量級的解決方案,叫 Akka。

Akka 提供的功能超出 Scala 甚多,包含更精細的 Actor、STM(Software Transaction Memory,把你在 memory 的資料看成和 database 一樣,也有 transaction 的功能) 等,都是解決平行處理問題的關鍵技術。

深受 multi-thread 困擾的朋友,Akka 會是你解決問題的好幫手,這麼重要的東西,未來我們也會討論。對了,Akka 也支援使用 Java 使用(不需透過 Scala),趕快去看看吧。

沒有留言:

張貼留言