談談為什麼上scala?
1. 感覺太複雜,沒有信心能handle
2. 開發速度不敢保證3. node用了一段時間,感覺很好用,開發效率很高4. 學了一下Clojure,發覺比scala簡單很多,上scala不如上clojure這樣我們的storm上了clojure,web server 和 backend上了node。我們的service可以handle 5M RPM,server response time 5 ms.
有了一年多的coffee/JS和clojure的經驗,再回過頭來看scala已經覺得比較容易了。另外Spark很明顯是未來的趨勢也是使用scala的一大直接推動力。我們的數據量越來越多,演算法越來越複雜,node這個情況已經不太適合做後台了,因此我這段時間主要研究尋找另外一種支持高並發的語言。選Scala有一下幾個原因1. 當然是spark了, spark streaming 可以替代storm,因此scala一個語言就可以搞定了2. go的語言設計實在是不符合我們的胃口,雖然並發做的很吸引人3. haskell的並發看樣子相當牛逼,但是純FP還是太不方便了4. Scala有actor,STM,future等等,做並發的手段相當豐富5. Clojure有STM,Scala也有,Clojure copy了Go的CSP模式,但是是個半成品,感覺
用處還是不太大Scala的主要問題就是太複雜了,所以下一步就需要搞清楚,什麼用,什麼不用,如何規範了。補充一下:不選擇Java的原因也很直接,Java不適合我們team的culture。我們的路徑是Ruby-&>Coffee-&>Clojure-&>Scala。我們是favor functional的。當然Java8也加入了更多的支持,這個還需要觀察一下。這是一位大牛說的,我自己覺得挺贊同的,拋磚引玉,希望大牛都來說說,理性討論,共同進步,謝謝
Scala有actor,STM,future等等,做並發的手段相當豐富
請加入 core.async,這才是 Clojure 對 Scala / Akka 的回答。如果找例子,看看 Home | http-kit, high performance HTTP Client/Server for Clojure
Scala 的好處是,有編譯器保證部分錯誤能儘早被查出來,而不是像 Clojure 一樣必須一遍一遍折磨 repl 。
因為在spark上跑程序,不用scala的話感覺就像在參加殘奧會。
題主你的感覺沒錯,scala是現在太陽系裡複雜程度超過C++的唯一的語言。不過他跟C++不同的是,學會C++你充其量只是對代數有了點理解,而不懂的類型系統的理論你scala是絕對學不會的。而且從可操作性來看,scala跟C++一樣是全能的,只要你完全學會了他們,什麼東西都能封裝出來。所以為啥不學scala呢?
上Scala的原因,是基於對開發生態環境和工具的便利程度這兩個因素的考慮。
現公司本來就是Java系,生態環境足夠好,所以基礎平台已定。
至於工具因素,因為對Java語言的表達能力不滿意,尤其是標準庫對集合操作的支持讓人捉急,所以需要考慮JVM上的其他語言。
Scala是OOP和FP的混合,有利於團隊過渡;表達能力強(比如類型推斷、FP等),對開發效率的提高很有幫助;內置很贊的集合操作庫;所以這是我的選擇。
此外還有akka這種東西,媽媽再也不用擔心我系統的底層設施了。因為Scala是全能型的語言,這意味著你能想到的大部分東西我都能在Scala里給你捏一個出來。。。
java8的函數式本質上還是語法糖,favor functional的不會有啥興趣的。輪子哥說得對,scala太複雜了,這是我們放棄scala的原因,但對於能夠cover這些複雜度的團隊來說,的確無所謂。
轉一發廣告
https://vimeo.com/147697498能用Java庫,比Java簡潔,開發速度快。比python運行速度快。比lisp對object支持更好。對一些比較繁瑣的功能如string parsing和xml提供很簡單的解決方法。
除非問題絕對需要,不要為了用高級功能而用高級功能。寫程序不是寫作文,不需要炫技。implicit適合給別人寫庫,自己維護起來麻煩。太複雜的object design我覺得意義也不大。就把它當一個好用的Java+Lisp完全可以。如果你覺得clojure簡單易上手,那也很好,就用唄。
我現在熟悉Scala 了,覺得用起來簡單,也並不複雜,偶爾也需要查查prog in Scala(官方書),但並不太多需要。
而clojure,我也嘗試過,卻未能入門,單一個use,import的諸多用法我就暈菜了,根本記不住。在我心中比scala複雜多了。
所以,只要你覺得好,並能架馭,能提高工作效率,提高質量,那就可以了。我們項目選擇scala的原因很簡單,因為它是JVM上用來打倒裹腳布語言的利器[機智]
為啥上scala?大半年前還沒接觸過
1. 組裡都是java環境,一堆現成的公司內lib
2. java過於sb3. 需要並發,無論是future還是actor4. twitter用他5. lib豐富,隨手搜了幾個,包括做mock的,做json的,db的,都不錯的樣子6. 要靜態語言7. 新項目,scope不大,self contained,沒有別人depend,核心比較簡單,一個人就能基本搞定,風險小8. 組裡別的人同意幫忙code review,沒有反對意見9. 好玩10. 太tm好玩了11. java太tm sb了
看完之後, 感覺LZ應該是做分析類型的軟體?
我之前的公司上scala的原因很簡單, 因為用Spark, 然後有一些其他的小功能是用Clojure寫的, 現在想統一, core是java, 所以scala是比較自然的選擇. 我到還沒有碰到要換語言才能解決系統的境界...願聽LZ細說Ruby-&>Coffee-&>Clojure-&>Scala的原因spark
學習過大部分主流語言 c c++ java python 團隊在用scala,最近自學ruby。
Scala的優點:1 並發支持優秀,future 模型,閉包,function,這是我最喜歡Scala的一個原因,讓非同步編程變的很自然。2 語法力求平衡 可讀性和簡潔性,lisp類型的語言是可以寫的很短,但是可讀性很差,很難勾起新手的學習慾望。scala的大部分代碼都是自然可讀的,使用成本並不高。同時Scala的語法都力求最簡,代碼量遠小於java。
3 融合function 和 oo ,這點和許多語言如ruby一樣,讓Scala能以最自然的方式解決問題。我討厭java的原因是 java 不支持function,所以衍生了許多模式,以很彆扭的方式解決問題。支持function的語言能以更細粒度單元重用代碼。
4 類型推導 靜態編譯,這點是Scala不同於大部分腳步語言的原因。解釋型語言不適合大型工程,因為沒法在編寫代碼時發現問題,這樣帶來的一個最直接的壞處是bug不容易發現,因為一切都要延遲到運行時才發生。暫時想到這麼多吧,以後再補-19樓的SBS系統是用Scala寫的,團隊內有不少scala的牛人,我們是實幹型的技術團隊,歡迎小夥伴加入~~~
scala 提供更強的抽象能力(邏輯組織),頂層業務邏輯寫起來速度快的不要不要
因為漂亮....
這個是mitbbs上的peking2說的吧,江湖人稱「二哥」
前公司(兩個MS之一)的一個大型項目(超過100萬行級別的code base)上Scala的原因是需要對語言進行擴展和額外的控制而又不想修改語言本身(也沒法修改語言本身)。主流點的語言里貌似只有python(暴露了compiler API,可以操縱ast)和Scala(有compiler plugin和macro)能做到這點。後來的痛點就是scalac太慢,也有不少bug。再就是scala reflection到現在還沒做到線程安全。總之遇到不少typesafe的scala team都沒預料到的問題.推薦閱讀:
※把「hotkey」翻譯為「熱鍵」是否不妥?
※500GB三星筆記本硬碟標本
※家用一體機電腦該如何選擇?
※我的電腦中了「暗雲」木馬怎麼辦?求助!!
※作為一個專業的It人士或者黑客,如何檢查確認自己的個人電腦沒中木馬/病毒?