Ruby 3.0.0釋出:Ruby3將比Ruby2快3倍
從2015年開始,我們朝著Ruby 3進行了艱苦的開發,其目標是效能、併發性和型別三方面提升。Matz特別提到效能,“ Ruby3將比Ruby2快3倍”,也就是Ruby 3x3。
藉助Optcarrot基準測試,該基準基於NES的遊戲模擬工作負載來測量單執行緒效能,其效能比Ruby 2.0快3倍!
Ruby 3.0.0涵蓋了這些目標
- 效能
- MJIT
- 併發
- Reactor
- 光纖Fiber排程器
- 型別(靜態分析)
- RBS
- TypeProf
通過上述效能改進,Ruby 3.0引入了以下許多新功能。
從Ruby 3.0開始,JIT可以在有限的工作負載中提高效能。儘管Ruby 3.0大大減小了JIT版本的程式碼的大小,但它仍未準備好優化諸如Rails之類的工作負載,請繼續關注Ruby 3.1以進一步解決此問題。
今天是多核時代。併發非常重要。有了Ractor,再加上Async Fiber,Ruby將成為真正的併發語言。— Matz
Ractor是類似於併發抽象的Actor模型,旨在提供並行執行功能而無需擔心執行緒安全。
您可以製造多個Actor,也可以並行執行它們。Ractor使您可以製作執行緒安全的並行程式,因為ractors無法共享普通物件。Actor之間的交流是通過交流資訊來支援的。
def tarai(x, y, z) = x <= y ? y : tarai(tarai(x-1, y, z), tarai(y-1, z, x), tarai(z-1, x, y)) require 'benchmark' Benchmark.bm do |x| # sequential version x.report('seq'){ 4.times{ tarai(14, 7, 0) } } # parallel version x.report('par'){ 4.times.map do Ractor.new { tarai(14, 7, 0) } end.each(&:take) } end |
Benchmark result: user system total real seq 64.560736 0.001101 64.561837 ( 64.562194) par 66.422010 0.015999 66.438009 ( 16.685797) |
在Ubuntu 20.04,Intel(R)CoreTM i7-6700(4核,8個硬體執行緒)上測量了結果。它表明並行版本比順序版本快3.87倍。
Fiber#scheduler引入用於攔截阻塞操作。這允許輕量級的併發,而無需更改現有程式碼。下面示例程式將同時執行幾個HTTP請求:
require 'async' require 'net/http' require 'uri' Async do ["ruby", "rails", "async"].each do |topic| Async do Net::HTTP.get(URI "https://www.google.com/search?q=#{topic}") end end end |
它使用提供事件迴圈的非同步。此事件迴圈使用Fiber#scheduler掛鉤進行Net::HTTP非阻塞。其他gem可以使用此介面為Ruby提供非阻塞執行,並且這些gem可以與支援相同非阻塞鉤子的Ruby其他實現(例如JRuby,TruffleRuby)相容。
2010年代是靜態型別程式語言的時代。Ruby通過使用抽象解釋的無型別宣告的靜態型別檢查來尋求未來。RBS和TypeProf是未來的第一步。更多步驟。— Matz
相關文章
- Apache Kafka 3.0.0釋出ApacheKafka
- Ruby 3.1.0 釋出
- 好訊息,fish 3.0.0 釋出
- Spring Boot 3.0.0 M3、2.7.0釋出,2.5.x將停止維護Spring Boot
- 時間老去,Ruby不死,Ruby語言基礎入門教程之Ruby3全平臺開發環境搭建EP00開發環境
- Python 和 Ruby 的對比Python
- 嚐鮮剛釋出的 SpringFox 3.0.0,以前造的輪子可以不用了...Spring
- 努比亞Z18即將釋出 全面屏3.0旗艦 屏佔比逼近100%?
- 紅袖添香,絕代妖嬈,Ruby語言基礎入門教程之Ruby3基礎資料型別(data types)EP02資料型別
- 努比亞紅魔5G遊戲手機強勢釋出,144Hz風冷旗艦詮釋“比快更快”遊戲
- KDE Plasma 5.17 即將釋出ASM
- Visual Studio 2022即將釋出!
- 紅袖添香,絕代妖嬈,Ruby語言基礎入門教程之Ruby3基礎語法,第一次親密接觸EP01
- 3.0.0 alpha 重磅釋出!九大新功能、全新 UI 解鎖排程系統新能力UI
- macOS Big Sur 11.1即將釋出Mac
- Android Studio 3.6 釋出啦,快來圍觀Android
- Pandas 0.24釋出,將放棄Python 2Python
- Kotlin 2版本即將釋出Kotlin
- 重磅|Apache ShardingSphere 5.0.0 即將正式釋出Apache
- Docker 1.12.0將要釋出的新功能Docker
- [Ruby]format xml with RubyORMXML
- .NET 8 RC 2 釋出,將在11月14日釋出正式版
- Spring Boot 3.0.0 釋出第一個里程碑版本M1,你的 Java 升到17 了嗎?Spring BootJava
- 除夕快樂,Hyperf 釋出 NSQ 元件和 1.1.17 版本元件
- 重磅!Android Studio 3.6 釋出啦,快來圍觀Android
- JDK 16 即將釋出,新特性速覽!JDK
- Android之父即將公佈自制新手機,將在月底釋出Android
- 高效能快取伺服器 nuster 1.7.9.7 釋出快取伺服器
- 高效能快取伺服器 nuster 1.7.9.9 釋出快取伺服器
- 高效能快取伺服器 nuster 1.7.9.8 釋出快取伺服器
- 快節奏FPS Roguelite遊戲《Roboquest》將於秋季釋出,準備好暴打其它的破銅爛鐵!遊戲
- Sharding-Sphere成長記——寫在分散式資料庫代理端里程碑版本3.0.0釋出之際分散式資料庫
- 官方調研重磅釋出,Pandas或將重構?
- 新計劃:明年7月將釋出FreeBSD 14.0
- 蘋果春季釋出會:或將釋出一項付費遊戲訂閱服務蘋果遊戲
- 高效能 Web 快取伺服器 nuster 1.7.9.6 釋出Web快取伺服器
- 榮耀V30下月釋出,將5G體驗從“快”升級到“場景化”
- Ruby 札記 - 淺嘗 Ruby 特性