Twitter在GitHub上啟動了一個全新的Scala編譯器開源項目,編譯器的名字叫作Reasonable Scala Compiler(簡稱rsc),旨在提升編譯速度。
Twitter目前幾乎擁有世界上最多的Scala代碼,從整體來看,在公司層面提升Scala代碼的編譯速度對于他們來說是很有意義的。
項目的目標如下。
大幅度提升Scala代碼的編譯速度研究Scala各種特性的編譯時間開銷找出可以使用rsc進行編譯的Scala特性子集分享經驗給其他Scala編譯器項目的目標不包括以下幾點。
完全向后兼容(可以考慮Lightbend Scala)新語言特性(可以考慮Dotty或Typelevel Scala)類型系統(tǒng)的改進(可以考慮Dotty或Typelevel Scala)運行時性能(視情況而定)據悉,新編譯器有望把一般Scala代碼的編譯速度提升5到10倍。首先,新編譯器類型檢測器受Kentucky Mule項目的啟發(fā),Kentucky Mule是由Grzegorz Kossakowski開發(fā)的一個旨在探索如何改進Scala編譯器速度的項目,主攻類型檢測器。其次,新編譯器的編譯管道只需要遍歷4遍語法樹,相比其他編譯器有了大幅改進,比如Lightbend Scala和Typelevel Scala需要20多次,Dotty需要15次以上。再則,新編譯器只支持Scala的一個子集,這樣就可以專注于提升子集的編譯速度。這個子集被叫作“Reasonable Scala”,而這也就是為什么他們把編譯器叫作“Reasonable Scala Compiler”。新編譯器將從Scala的一些小特性著手,在保持性能達標的同時,逐步支持更多的特性。
社區(qū)對此也展開了熱議。
提升編譯速度對于開發(fā)者來說總是有好處的,盡管它不一定是最大的關注點。不過新編譯器只支持Scala的一個子集,而且不保證完全兼容性,所以有人擔心Scala生態(tài)系統(tǒng)會因此變得支離破碎,比如有些包只能與特定的編譯器協(xié)同工作。
也有人解釋說,新編譯器不會造成Scala生態(tài)系統(tǒng)的支離破碎,因為官方已經聲明,所有的Reasonable Scala都將與標準Scala兼容。
至于提升編譯速度究竟會給開發(fā)者帶來什么實質性的好處,項目負責人Eugene Burmako解釋說,如果把編譯時間從10到20分鐘降到1到2分鐘,不僅可以提升效率,還為在每次提交代碼時運行代碼分析工具帶來了可能性。而對于增量編譯來說,如果把時間從3到5秒降到0.3到0.5秒,那么就有可能隨時隨刻運行代碼分析工具,可以立即得到編譯反饋。
對項目持懷疑態(tài)度的人主要還是擔心新編譯器只支持部分Scala特性以及存在兼容性問題,因此可能不會被太多人所采用。對此,Eugene Burmako回應說:
我們不想通過采用率來衡量新編譯器成功與否。
我們將會把我們的經驗分享給Lightbend Scala和Dotty的開發(fā)者,來幫助他們一起改進他們的編譯器。如果能做到這樣,我們就很開心了。
Grzegorz Kossakowski的Kentucky Mule項目也只支持Scala的一個子集,甚至沒有人把它應用在生產項目上。盡管如此,它仍然算是一個很成功的項目,因為在這個項目之前,我們甚至都不知道原來Scala的類型檢測器可以是并行的。