Clojure語言 vs Scala 語言
本文是從 Clojure vs Scala - anecdote 這篇文章翻譯而來。
我在這里是想跟大家分享一些從World Singles 系統里獲得的經驗 …
早在2009年11月,我們就開始使用Scala語言了。我們有一個需要運行很長時間的操作,把大量的數據變更信息從會員信息數據庫中取出,以 XML打包文件的形式發送到自定義搜索引擎里。把一大堆的數據表從數據庫中映射到XML規則文件里是一個相當復雜的操作。在過去,公司嘗試了各種方法,有 的好用,有的不好用。我向公司推薦使用Scala語言,原因是他的高效、并行性、類型安全,以及方便適用(特別是XML在Scala語言里有一種相對應的 基本數據類型)。
我們使用Scala編程作為產品的后臺發布程序已經有差不多兩年了。大多時候,它運行的非常好,但在壓力大的時候,它會出現內存溢出的現象,經過大 量的觀察和測試,我們慢慢的確認,(至少部分原因)是Scala語言本身的實現導致了這個問題。Scala正準備要收編Akka程序庫,我們一直在考慮把 程序遷移到Akka上…
因為今年我們開始使用Clojure語言(大概是去年5月我們就開始嘗試這種語言),我們認為應該集中兵力開發出一個Clojure版本的Scala程序,看看它運行起來表現如何。
這個Clojure版的后臺發布程序的開發耗費了我們大概15個小時,并通過了所有測試。今天我們進行了一次“疲勞測試”,讓它一次處理將近30萬 個會員的信息。如果是Scala程序,當一次處理的數據量達到5萬份時(有時會更少),它就會報內存溢出錯誤。而Clojure程序卻一氣呵成,十分順利 ——于是,我們就決定在下一次產品發布里用它把Scala程序給替換下來了。
另外一個有趣的方面是,Scala版的程序長度總共大約有1000行(大概有3.1萬個字符)。而Clojure版的只有260行(大約1.15萬 個字符)。就連注釋也簡單了(*呃哼*—這并不是我想炫耀的,只是想說這種比較沒有偏向)。我們的比較還沒有把單元測試代碼計算入內,因為Clojure 版寫的很倉促。Clojure的代碼形式非常的接近Scala代碼,很多函數都相同——Clojure是一種更強大的Scala——它對一些輔助函數進行 的重構,使其變的更加模塊化和可維護。
結果是很顯然,我將在產品里采用Clojure版的發布程序,完全的放棄Scala。
這是Rich Hickey(Clojure語言的發明人) 和 Clojure/core 開發團隊的功勞,他們創造了這樣一種精彩適用的編程語言,幫人們解決了大問題——謝謝你們!
Google并發語言Clojure是一種LISP風格的語言,運行在JVM上。Clojure的一大特色就是其并發機制,它支持不可變的數據結構(Clojure是來自于可持久化的數據結構)。Clojure還有一個特色是軟件事務存儲(Software Transactional Memory,STM),其支持用事務代替鎖和互斥器來更新共享內存。STM還是一個有爭議的技術,還需要更好的證明自己,一個簡單的辦法就是訪問一個JVM上的實現。
Scala是一門現代的多范式編程語言,志在以簡練、優雅及類型安全的方式來表達常用編程模式。它平滑地集成了面向對象和函數語言的特性。
- Scala是面向對象的:Scala是一個純面向對象語言,在某種意義上來講所有數值都是對象。對象的類型和行為是由class和trait來描述的。Class的抽象可由子類化和一種靈活的基于mixin的組合機制(它可作為多重繼承的簡單替代方案)來擴展。
- Scala是函數式的: Scala還是一個函數式語言,在某種意義上來講所有函數都是數值。Scala為定義匿名函數提供了一種輕量級的語法,它支持高階(higher- order)函數、允許函數嵌套、支持局部套用(currying)。Scala的case類及其內置支持的模式匹配模型代數類型在許多函數式編程語言中 都被使用。
- Scala是靜態類型的:Scala配備了一套富有表現力的類型系統,該抽象概念以一種安全的和一致的方式被使用。
- Scala是可擴展的:Scala的設計承認了實踐事實,領域特定應用開發通常需要領域特定語言擴展。Scala提供了一個獨特的語言組合機制,這可以更加容易地以類庫的形式增加新的語言結構:
- 任何方式可以被用作中綴(infix)或后綴(postfix)操作符
- 閉包按照所期望的類型(目標類型)自動地被構造
- Scala可與Java和.NET進行互操作:Scala 設計時就考慮了與流行編程環境良好交互,如Java 2運行時環境(JRE)和 .NET框架(CLR)。特別是與主流面向對象語言,如Java和C#盡量無縫交互。Scala有像Java和C#一樣的編譯模型(獨立編譯,動態裝載 類),允許訪問成千上萬的高質量類庫。
本文轉載自: 外刊IT評論 http://www.aqee.net/