告別性能問題:Ruby 3.0正式發布
經歷了長久的等待,我們終於在聖誕期間迎來了Ruby 3.0,正如開發者Matz在上次演講中所說的那樣。對於Web開發者來說,本次更新不僅提升了運行速度,還克服了早前的一些缺點。首先,異步線程將由Fibers進行控制,因為當前的服務器會在釋放其它線程時阻塞I/O操作,比如API調用/數據庫操作等。
(圖via Sloboda Studio)
其次是啟用基於Fibers over Threads的線程操作,是因為這麼做能夠減少上下文的切換開銷。
然後是Ruby Actor / Ractor:它與JavaScript中在後台運行的網絡操作相似,但Ractor還支持並行執行。由於法共享普通對象,Ractor的線程並行安全性也更優,且支持基於消息傳遞的通訊方案。
內存性能方面,通過使用垃圾壓縮器(GP),大多數對象將被傳輸到堆(heap)並自動壓縮。
得益於RBS,Ruby 3.0還支持類型檢查。作為一款類型簽名語言,RBS可用於描述類的類型和定義、方法、實體變量、繼承/混合關係、以及Ruby模塊。
其旨在查看Ruby 程序中的常見模式,且允許聯合、方法重載、以及泛型之列的高級類,讓進程處理以.rbs 格式編寫的簽名文件成為了可能。
(傳送門:Ruby-lang.org)
此外還有即時編譯器方面的改進,因為JIT的編譯速度提升了50~500%(取決於具體的工作量)、支持編碼塊參數、權利轉讓(Right Assignmenet),以及包括RubyGems 3.2.0.rc .1、Bundler 2.2.0.rc.1、IRB 1.2.6、Reline 0.1.5在內的某些標準庫更新。
最後是向後兼容性,Ruby 3.0讓在不同版本間進行切換不再是個問題,且日誌中的警告信息有助於快速修復bug 。