標籤:

如何看待Twitter將重新實現Scala編譯器?

Twitter 在不久前公布了其新的 Scala 編譯器項目:Reasonable Scala Compiler。

該項目由 Scalameta 的作者 Eugene Burmako 主導,並且從零開始從新實現(rsc is not a fork, but a clean-room reimplementation of a Scala compiler).

實際上,目前已經存在Scalac的多個(有區別)面向JVM的實現,包括:

  • Lightbend Scala(官方實現)
  • Dotty(實驗性項目)
  • Typelevel Scala

新的RSC的出現,會對Scala社區帶來哪些影響呢?


曾經我在編譯 scala 項目的時候,都抽空做幾個俯卧撐,後來我有了明顯的胸肌,隨著越來越快的編譯器出現,我相信 scala 程序員的身體素質會下降。


Eugen還沒把ScalaMeta的坑填完就來挖新坑了么...

看下它的設計:

1. 用了並行演算法(這點dotty之後也會加)

2. 只有4個pass

3. 只支持部分語言特性

…………

這設計和人家Dotty沒法比好么,這新坑編老代碼編不過編新Dotty代碼也不過...

個人覺得推還不如做個Scala -&> Kotlin的轉譯器還靠譜點(抄襲JS(誤


都一個月過去了 repo 還只有 markdown,是打算 vaporware 都不做直接做 vapormarkdown 了?


三個月過去了終於給出個版本了。。。

我了個去type inference 都不支持我還是滾回去寫 Java 吧


有了自己的編譯器,就會開始不聽話了。


Scala的不但語法上讓人望而卻步,其實編譯速度也讓人非常頭疼。對於Twitter龐大的scala源代碼庫,我經常不敢clean all, 然後來次完全的build。 但增量編譯偶爾會有些小錯誤,而且自動測試,CI等也往往會完全的編譯你的project, 這等待時間實在太長了。所以這個項目主要針對的是編譯速度(據我個人理解,對編譯好後的運行速度是沒說有什麼提升的)還是有意義的,至少對我們twitter是有意義的。

我也順便說幾句Scala問題,我是08年開始用scala的,這個語言依託於JVM能給你非常好的後端開發體驗,當初的Groovy過於簡單,Scala提供了豐富的語法,不管是OOP還是FP都能很好的支持。但其實JVM是不支持FP的,所以Scala的function編譯成Bytecode一看,發現還是對象。畢竟JVM 的Bytecode是給Java設計的,這讓Scala的編譯器一直很複雜,很慢。但我得說,編譯速度慢並不是一個嚴重問題,特別是你代碼不多的時候。

我覺得Scala被應用於很多公司的後端服務,主要還是Scala有更好的多線程非同步模型,比如說Actor(這個大家玩了幾年,發現一樣很痛),比如說Future, 大家可以看看Scala標準的Future實現和Twitter的Future實現,在這個Non-blocking為王的時代,scala的Future是非常簡單易用的。別跟我說Java也有Future, 第一語法不漂亮,第二這個模型也是8以後才勉強能用,6時候我記得java還沒Future, 7的時候那Future的語法一嵌套就四五層。同時代JRuby雖然是Sun的親兒子,但被做的連Sun自己都不想繼續搞了。Python的JVM實現我沒用過,我也沒見過別人用過。

當然現在有Golang等語言,也有很好的多線程模型,可Jvm這碗乾飯還能吃一段時間,還是很值得信任的。而且Twitter等公司已經用Scala做了這麼大的基業,不太容易重新來過了,而且以目前Twitter用Scala的高並性能和穩定性來看,也沒必要改。我沒有用Go做過超大並發的服務,而且我知道一些矽谷使用Go的創業公司,他們最核心最高並發的服務還是用Scala來寫,他們沒有陳舊代碼庫的問題,他們的架構師據我所知也不是Scala的鐵粉,只不過他們覺得Scala和JVM的多線程模型更值得信任而已。


記得曾經看過一篇文章,裡面Twitter團隊吐槽scala的一些問題,也受限於scala核心團隊的更新速度。看來這是完全要拋棄scala官方團隊了,另立山頭了,估計是著重來解決平時業務中碰到的問題,應該會是一個更高性能的實現。拭目以待。


我覺得還是把 sbt 這個工具的問題先解決了比較重要!!!


來來來,用sbt編譯過spark的都來點個贊,編譯完的麻煩留一條評論吧


另立門戶的話 改叫Twala好啦

(名字念起來還挺可愛的


Github首頁刷屏star預警(


無比期待。。。

老實說Scala團隊更新真心慢。。。

然後twitter出品的項目真心良心!!!

(利益相關,在策劃拿Scala寫一個大項目


scala編譯太慢了,而且各個版本都不兼容


為何這麼大的公司會選擇這門語言,它有什麼優點?

以前的編譯器有什麼問題?非要重寫呢?這可是費時費力的工作。

據我了解,這是建立在JVM生態圈的一門語言,支持函數式編程,對並行支持好。語法比Java簡潔。

現在有好多語言在這個領域,用更簡潔的語法編寫代碼,Groovy, Kolin, 動態語言 Ruby和Python 也有 JVM 的實現,Clojure 這種 Lisp的方言也是一樣。

簡直太亂了。


推薦閱讀:

計算機編程語言必須能夠自舉嗎?
為什麼pat考試可選的語言眾多,但提供的編輯器卻少得可憐,甚至非常老舊?
C++命名空間的問題:這是編譯器Bug嗎?
對於stdio.h 之類的頭文件,在C++中使用時,編譯器是怎樣處理的?
Phi node 是如何實現它的功能的?

TAG:Scala | 編譯器 |