本篇文章更新時間:2025/12/26
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
Ruby 4.0 到底帶來了什麼?一位 Ruby 工程師的深度讀後心得
編輯前言:Ruby 4.0 的發布無疑是近年最重要的版本更新,官方直接端出實驗性的 Ruby Box、全新一代的 ZJIT,以及大幅加強的 Ractor 並行能力。這篇內容取材自官方公告:Ruby 4.0.0 Released | Ruby,並加入我個人的理解與思考。
核心觀點 (Key Takeaways)
- Ruby Box 讓 Ruby 世界終於能真正做到「隔離定義」、控制 monkey patch 污染,未來甚至可能成為「包管理」的新基石。
- 全新 ZJIT 上線,雖然暫時還不如 YJIT,但具有更強擴展性,官方明講目標是 Ruby 4.1 才會成熟。
- Ractor 並行能力大幅強化,加上新 Ractor::Port,讓跨 Ractor 通訊更實用、更不易踩雷。
深入解析
Ruby 4.0 的更新量非常巨大,但如果要抓住最影響開發者的三件事,我會說是 Ruby Box、ZJIT、以及 Ractor 改進。
官方這句話讓我印象深刻:Ruby Box 可以「isolate/separate monkey patches, class/module definitions, global variables…」。
換句話說,我們第一次有能力在同一個 Ruby process 內「跑互相不干擾的 Ruby 世界」。以下我把主要亮點拆開談。
-
Ruby Box:Ruby 生態中極罕見的隔離機制
Ruby Box 的概念很像把整個 Ruby 載入定義封裝到一個 sandbox。啟用方式也簡單:設定環境變數RUBY_BOX=1。它能隔離: -
monkey patches
-
class/module 定義
-
global/class 變數
-
甚至是 require 的套件
官方列出的一個典型使用情境是「測試」,特別是會修改核心類別的測試。甚至可用於「同時跑多個 web app 作藍綠部署比對」。這是一個相當大膽的願景,也意味著 Ruby 可能會往更強的 application-level isolation 前進。
-
ZJIT:Ruby 下一世代 JIT 的起點
ZJIT 的動機很清楚: -
抬高效能上限(更大 compilation unit、SSA IR)
-
吸引更多外部貢獻者(更接近傳統 JIT 架構)
它需要 Rust 1.85 以上才能編譯,而且目前速度「快過解譯器 interpreter,但尚不如 YJIT」。
對我來說,這訊號等於:Ruby 4.0 的 ZJIT 是奠基、Ruby 4.1 才是實戰階段。
-
Ractor 強化:向正式化邁進
Ruby 4.0 幾乎把 Ractor 重寫般地加強了一輪。 -
新增 Ractor::Port 作為訊息通訊的正式管道
-
移除舊 API
Ractor.yield和Ractor#take -
加上
Ractor#join、Ractor#value等更直覺的等待方式 -
多項效能優化:避免全域 lock、lock-free symbol table、減少 CPU cache contention
更重要的是:官方說明「希望明年移除 experimental 標籤」。這意味著 Ractor 未來很可能成為 Ruby 並行的正式主力工具。
筆者心得與啟發
這篇公告讀完,我感受到 Ruby 團隊正把語言帶向兩個新的里程碑:
-
第一是「可控隔離性」。Ruby 一直被說動態到容易互相污染,Ruby Box 彷彿是為這個宿命開了一扇新的門。若未來真能發展成高階 package 隔離 API,那將是 Ruby 生態系的大革新。
-
第二是「真正的多核並行」。Ractor 終於越來越像能上實戰的工具,而這次針對 lock、GC、通訊的全面強化,意味著 Ruby 準備跨進現代語言的併行層級。
-
第三是「JIT 的第二春」。過去 YJIT 帶給 Ruby 巨大的效能成長,而 ZJIT 看起來更像是為未來十年做準備的架構層改造。
對日常開發者而言,Ruby 4.0 在語法和 core class 的新增多半是小步快跑,但底層的變化卻是翻天覆地。我個人最期待 Ruby Box 的成熟,以及 Ractor 脫離實驗狀態的那一天。若你也關注 Ruby 的未來方向,這次 4.0 絕對值得花時間細讀。
