clojure語言 vs scala語言
clojure語言 vs scala語言我在這裡是想跟大家分享一些從world singles 系統裡獲得的經驗 …
早在2023年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 開發團隊的功勞,他們創造了這樣一種精彩適用的程式語言,幫人們解決了大問題——謝謝你們!
clojure學習筆記
因為clojure的世界提倡值不可變,以藉此帶來的諸多程式設計好處。這就使得新手在處理變數的時候不知所措!以下是clojure處理變數的方法,還是將變數約束的死死的,盡量不讓它帶來不穩定因素。with local vars var a hello var set var a str var a 你好...
紙片遊戲 clojure寫法
紙片玩法資料結構 資料每一格的資訊 0 1 位置獲勝資訊 本關的勝利位置 呆了幾次 比如 6 1 0 表示6 1呆了0次,3次獲勝 game levelmap 每一格的資訊 遊戲地圖 currentmap 當前關 winpoint 獲勝位置資訊 actionpoint 行動點數 turn 已進行回合...
Clojure學習05 謂詞函式
謂詞函式是乙個判斷式,乙個返回bool值的函式。clojure中 lisp習慣 有個規定 對於判斷功能的函式,函式名後面都有乙個 號。所以只要看到後面帶問號的函式名,就知道這一定是乙個判斷函式。1 instance?檢查值是否是某種型別 user instance?string hello true...