国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

Ruby 4.0正式發(fā)布!推出全新編譯器+原生隔離環(huán)境

0
分享至

克雷西 發(fā)自 凹非寺
量子位 | 公眾號(hào) QbitAI

30周年之際,Ruby語(yǔ)言帶著全新的4.0版本,給開發(fā)者送上了年終大禮。

增隔離命名空間新的JIT編譯器,還有重設(shè)計(jì)的Ractor API,這款開源語(yǔ)言迎來(lái)一系列更新。



Ruby是一種開源的面向?qū)ο竽_本語(yǔ)言,在20世紀(jì)90年代由日本人松本行弘開發(fā),遵守GPL協(xié)議和Ruby License。

其主要特性就是簡(jiǎn)單快捷,變量沒(méi)有類型、任何東西都有值,不需要注釋就可以讀懂。

對(duì)于這次更新,網(wǎng)友們給予了高度評(píng)價(jià),表示要是沒(méi)有Ruby更新,連圣誕節(jié)都不完整了。



那么,30歲的Ruby,這次都迎來(lái)了哪些更新呢?

全新編譯器ZJIT

Ruby 4.0中,Rails at Scale團(tuán)隊(duì)正式推出了名為ZJIT的全新即時(shí)編譯器(Just-In-Time Compiler)。

這是一種一種傳統(tǒng)的方法級(jí)編譯器,核心架構(gòu)采用了靜態(tài)單賦值(SSA,Static Single Assignment)形式的中間表示,旨在突破現(xiàn)有YJIT編譯器的性能上限。

傳統(tǒng)的Ruby解釋器是逐行執(zhí)行代碼,效率較低,而JIT編譯器則是將熱點(diǎn)代碼轉(zhuǎn)換成機(jī)器碼。

其中,YJIT的設(shè)計(jì)理念聚焦于局部,它將編譯視域限制在微小的基本塊(Basic Block)中。

這種策略雖然能快速生成機(jī)器碼并降低內(nèi)存占用,但由于缺乏對(duì)代碼整體結(jié)構(gòu)的認(rèn)知,難以進(jìn)行跨越整個(gè)方法的全局優(yōu)化。

相對(duì)而言,ZJIT引入了SSA中間表示技術(shù)。在這種架構(gòu)下,編譯器會(huì)分析完整的方法體并構(gòu)建全局?jǐn)?shù)據(jù)流圖,確保每個(gè)變量在邏輯上僅被賦值一次。

這種全局分析能力賦予了ZJIT執(zhí)行常量折疊(在編譯期直接計(jì)算固定結(jié)果)和死代碼消除(移除無(wú)效計(jì)算步驟)等深度優(yōu)化的潛力,這些都是YJIT受限于架構(gòu)而難以高效實(shí)現(xiàn)的。

在處理Ruby的動(dòng)態(tài)類型特性時(shí),兩者也采用了截然不同的路徑。

YJIT傾向于通過(guò)版本化機(jī)制保留多條代碼路徑以適應(yīng)不同的變量類型。

ZJIT則采用了側(cè)向退出(Side-exits)機(jī)制。

它會(huì)基于當(dāng)前類型穩(wěn)定的假設(shè)生成單一且激進(jìn)優(yōu)化的機(jī)器碼,一旦運(yùn)行時(shí)檢測(cè)到變量類型不再符合預(yù)期(例如整數(shù)變?yōu)樽址绦驎?huì)立即觸發(fā)側(cè)向退出,終止當(dāng)前優(yōu)化代碼的執(zhí)行并安全回退到解釋器。



這種機(jī)制允許編譯器在假設(shè)成立的前提下剝離大量冗余檢查。

盡管ZJIT目前的綜合性能尚未完全超越成熟的YJIT,但其基于SSA的嚴(yán)謹(jǐn)架構(gòu)可以突破局部?jī)?yōu)化帶來(lái)的瓶頸,為Ruby在未來(lái)實(shí)現(xiàn)更復(fù)雜的代碼分析和更高的峰值性能奠定了基礎(chǔ)。



隔離命名空間Ruby::Box

Ruby::Box是一個(gè)專門用于隔離代碼執(zhí)行環(huán)境的容器類,目的是解決長(zhǎng)期困擾Ruby開發(fā)者的“全局污染”問(wèn)題,并為構(gòu)建更安全、模塊化的應(yīng)用提供原生支持。

這涉及到Ruby的一個(gè)核心特性——開放類(Open Class)。

在傳統(tǒng)的Ruby環(huán)境中,任何代碼都可以隨時(shí)修改系統(tǒng)內(nèi)置的類(例如給String類添加新方法),這種行為被稱為“猴子補(bǔ)丁”(Monkey Patching)。

雖然這種特性賦予了語(yǔ)言極大的靈活性,但在大型項(xiàng)目中,如果不同的第三方庫(kù)同時(shí)修改了同一個(gè)類,就會(huì)引發(fā)嚴(yán)重的命名沖突。

Ruby::Box通過(guò)徹底的命名空間隔離(Namespace Isolation)解決了這一難題。



當(dāng)代碼在某個(gè)Box中運(yùn)行時(shí),它對(duì)內(nèi)置類的修改、定義的全局變量或頂層常量,都被嚴(yán)格限制在當(dāng)前Box的內(nèi)部作用域中,完全不會(huì)“泄漏”到外部環(huán)境或其他Box中。

從架構(gòu)設(shè)計(jì)的角度來(lái)看,Ruby::Box被定義為Module的子類,這意味著它本質(zhì)上也是一種模塊。

在Ruby4.0的運(yùn)行模型中,所有的用戶主程序默認(rèn)運(yùn)行在名為“main”的Box中。而當(dāng)開發(fā)者通過(guò)Ruby::Box.new創(chuàng)建新的隔離環(huán)境時(shí),系統(tǒng)會(huì)基于包含最原始、純凈Ruby環(huán)境的“root”Box進(jìn)行復(fù)制。

為了確保高性能,這一過(guò)程采用了寫時(shí)復(fù)制(Copy-on-Write)技術(shù),這使得創(chuàng)建新Box的內(nèi)存開銷極低,同時(shí)保證了各個(gè)環(huán)境之間的獨(dú)立性。

此外,Ruby::Box還提供了文件級(jí)的作用域控制能力。通常情況下,一個(gè).rb文件的加載和執(zhí)行可以被限定在一個(gè)單一的Box中,這意味著該文件內(nèi)的所有方法定義和常量解析都在該Box的上下文中完成。

這對(duì)于開發(fā)插件系統(tǒng)、多租戶應(yīng)用或者需要運(yùn)行不可信代碼(沙箱環(huán)境)的場(chǎng)景具有革命性意義。它允許開發(fā)者在保留Ruby動(dòng)態(tài)特性的前提下,構(gòu)建出更加健壯、安全且易于維護(hù)的系統(tǒng)架構(gòu)。

重設(shè)計(jì)的Ractor API

在Ruby4.0的更新中,為了解決Ruby3.x時(shí)代Ractor通信中存在的“多路通信混亂”和“消息竊取”等諸多痛點(diǎn),Ractor API也迎來(lái)了一次重大的重構(gòu)。

其核心在于引入了Ractor::Port機(jī)制,讓并行編程變得更加直觀和安全。

在早期版本中,Ractor主要依賴“推”(Push)和“拉”(Pull)兩種模式。當(dāng)多個(gè)Ractor向同一個(gè)目標(biāo)發(fā)送消息時(shí),接收方往往難以分辨消息的來(lái)源,就像所有信件都被塞進(jìn)了一個(gè)沒(méi)有標(biāo)簽的公共郵箱。

而在新版設(shè)計(jì)中,Ractor::Port充當(dāng)了專用信道的角色,任何人都可以向這個(gè)端口發(fā)送消息,但只有端口的創(chuàng)建者才有權(quán)從里面取出消息。這種“多對(duì)一”的單向通道設(shè)計(jì),完美契合了Actor模型的語(yǔ)義。



具體的改進(jìn)主要體現(xiàn)在三個(gè)方面:

首先是消息的定向投遞與安全性。通過(guò)Ractor::Port,消息不再是廣播式的混亂投遞,而是精準(zhǔn)地發(fā)送到指定的端口。這徹底杜絕了“消息竊取”現(xiàn)象,即A模塊發(fā)送的消息意外被B模塊的接收函數(shù)截獲。

其次是摒棄了復(fù)雜的同步原語(yǔ)。新版本廢棄了Ractor.yield和Ractor#take等容易引發(fā)死鎖和競(jìng)爭(zhēng)條件的舊方法,轉(zhuǎn)而使用更清晰的Ractor#send配合端口機(jī)制。

同時(shí),為了處理Ractor的生命周期,引入了與線程類似的Ractor#join(等待結(jié)束)和Ractor#value(獲取返回值)方法。

特別是Ractor#value,它設(shè)計(jì)為只能被一個(gè)Ractor調(diào)用一次,這種限制允許系統(tǒng)在不復(fù)制對(duì)象的情況下安全地傳遞返回值,極大地提升了效率。

最后是高效的多路復(fù)用。新的Ractor.select方法經(jīng)過(guò)重寫,現(xiàn)在支持同時(shí)監(jiān)聽多個(gè)Ractor::Port。

當(dāng)任何一個(gè)端口收到消息時(shí),select會(huì)立即返回該端口和對(duì)應(yīng)的消息。這比傳統(tǒng)的輪詢機(jī)制要高效得多,并且解決了過(guò)去在復(fù)雜并發(fā)場(chǎng)景下難以協(xié)調(diào)多個(gè)數(shù)據(jù)源的問(wèn)題。

總的來(lái)說(shuō),Ractor::Port的引入通過(guò)更輕量級(jí)的實(shí)現(xiàn)和更嚴(yán)謹(jǐn)?shù)耐ㄐ牌跫s,為Ruby開發(fā)者提供了一套既符合直覺(jué)又具備高性能的并發(fā)工具箱。

其他更新

除了上面三個(gè)比較大的方面,這次Ruby 4.0還有一系列其他更新:

  • 語(yǔ)法更符合直覺(jué):邏輯運(yùn)算符現(xiàn)在可以寫在換行后的行首,不再?gòu)?qiáng)制要求放在上一行行末;
  • 核心庫(kù)“轉(zhuǎn)正”:Set和Pathname從標(biāo)準(zhǔn)庫(kù)升級(jí)為核心庫(kù),開發(fā)者無(wú)需再手動(dòng)編寫require語(yǔ)句;
  • 調(diào)試體驗(yàn)升級(jí):當(dāng)發(fā)生參數(shù)傳遞錯(cuò)誤時(shí),ErrorHighlight功能現(xiàn)在不僅會(huì)高亮顯示“調(diào)用出錯(cuò)”的代碼行,還會(huì)同時(shí)顯示“方法定義”的代碼行,方便開發(fā)者快速對(duì)照排查;
  • 緊跟Unicode標(biāo)準(zhǔn):完整支持Unicode17.0標(biāo)準(zhǔn),能原生識(shí)別和處理最新的Emoji17.0表情符號(hào);
  • 更嚴(yán)格的空值檢查:為了防止空值意外轉(zhuǎn)換成空數(shù)組從而掩蓋代碼邏輯中的Bug,nil對(duì)象不再響應(yīng)to_a方法;
  • 性能底層優(yōu)化:Class.new(創(chuàng)建新類)的速度在所有場(chǎng)景下都得到了顯著提升;垃圾回收機(jī)制(GC)現(xiàn)在能獨(dú)立管理不同大小的內(nèi)存池,有效降低了內(nèi)存占用;
  • 更靈活的數(shù)組查詢:Array類新增了rfind方法,可以高效地從數(shù)組末尾開始向前查找符合條件的元素;
  • 自定義對(duì)象展示:Kernel#inspect方法新增了定制功能,開發(fā)者可以通過(guò)定義instance_variables_to_inspect來(lái)決定在打印對(duì)象調(diào)試信息時(shí)顯示哪些變量,避免輸出過(guò)多無(wú)關(guān)信息。

那么,你覺(jué)得更新后的Ruby,有沒(méi)有更好用呢?


[1]https://www.ruby-lang.org/en/news/2025/12/25/ruby-4-0-0-released/
[2]https://docs.ruby-lang.org/en/master/Ruby/Box.html
[3]https://railsatscale.com/2025-12-24-launch-zjit/
[4]https://dev.to/ko1/ractorport-revamping-the-ractor-api-98

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
“煤改氣”導(dǎo)致華北部分農(nóng)村取暖難!央媒發(fā)聲,保民生底線不能破

“煤改氣”導(dǎo)致華北部分農(nóng)村取暖難!央媒發(fā)聲,保民生底線不能破

李健政觀察
2026-01-05 09:38:20
“馬倒成功”可以在任何地方,唯獨(dú)不能在太原?

“馬倒成功”可以在任何地方,唯獨(dú)不能在太原?

姬鵬
2026-01-05 19:31:48
7年燒掉35億,營(yíng)收僅4500萬(wàn),“中國(guó)版SpaceX”帶病闖關(guān)?

7年燒掉35億,營(yíng)收僅4500萬(wàn),“中國(guó)版SpaceX”帶病闖關(guān)?

功夫財(cái)經(jīng)
2026-01-06 08:28:25
2813枚核彈24小時(shí)待命,張召忠曾經(jīng)發(fā)出警告:一旦開戰(zhàn),無(wú)處可逃

2813枚核彈24小時(shí)待命,張召忠曾經(jīng)發(fā)出警告:一旦開戰(zhàn),無(wú)處可逃

史智文道
2026-01-06 11:42:39
李在明抵達(dá)北京,不到24小時(shí),對(duì)華稱呼變了,朝鮮突然做出大動(dòng)作

李在明抵達(dá)北京,不到24小時(shí),對(duì)華稱呼變了,朝鮮突然做出大動(dòng)作

娛樂(lè)小可愛(ài)蛙
2026-01-06 11:03:53
同胞遇害拋尸柬埔寨,六名中國(guó)男子落網(wǎng),還聽媒體鼓動(dòng)去旅游嗎?

同胞遇害拋尸柬埔寨,六名中國(guó)男子落網(wǎng),還聽媒體鼓動(dòng)去旅游嗎?

你食不食油餅
2026-01-02 20:47:35
海清47歲素顏包餃子,廚房大得像影棚,兒子17歲,老公身份曝光

海清47歲素顏包餃子,廚房大得像影棚,兒子17歲,老公身份曝光

小椰的奶奶
2026-01-05 16:25:26
2天狂攬2800萬(wàn)美元,《怪奇物語(yǔ)》奇襲北美院線,嚇了卡神一大跳

2天狂攬2800萬(wàn)美元,《怪奇物語(yǔ)》奇襲北美院線,嚇了卡神一大跳

電影票房預(yù)告片
2026-01-05 23:47:45
TVB典禮上:陳自瑤真空漏半球,人妻味好濃,秒了不結(jié)婚的佘詩(shī)曼

TVB典禮上:陳自瑤真空漏半球,人妻味好濃,秒了不結(jié)婚的佘詩(shī)曼

嫹筆牂牂
2026-01-06 07:13:33
馬杜羅還有救,聯(lián)合國(guó)召開大會(huì),6國(guó)出面救人,朝鮮下令發(fā)射導(dǎo)彈

馬杜羅還有救,聯(lián)合國(guó)召開大會(huì),6國(guó)出面救人,朝鮮下令發(fā)射導(dǎo)彈

博覽歷史
2026-01-05 18:29:17
馬杜羅有四個(gè)兒子,親兒子被起訴,是下一個(gè)目標(biāo),其他三子或幸免

馬杜羅有四個(gè)兒子,親兒子被起訴,是下一個(gè)目標(biāo),其他三子或幸免

悅心知足
2026-01-04 10:04:50
羅晉攜任素汐去祈福后,唐嫣連發(fā)三文表態(tài),婚變傳聞終于真相大白

羅晉攜任素汐去祈福后,唐嫣連發(fā)三文表態(tài),婚變傳聞終于真相大白

瓜汁橘長(zhǎng)Dr
2025-12-29 11:29:56
火箭勝太陽(yáng)后!1喜訊2不利,阿杜26分+絕殺舊主,烏度卡遇新挑戰(zhàn)

火箭勝太陽(yáng)后!1喜訊2不利,阿杜26分+絕殺舊主,烏度卡遇新挑戰(zhàn)

蘭亭墨未干
2026-01-06 11:59:50
香港只認(rèn)這23所內(nèi)地大學(xué)!17所985集體出局,分?jǐn)?shù)高也沒(méi)用

香港只認(rèn)這23所內(nèi)地大學(xué)!17所985集體出局,分?jǐn)?shù)高也沒(méi)用

Delete丨CC
2026-01-02 21:12:43
馬斯克收心了?官宣了39歲印度裔伴侶:相貌普通為他生了4個(gè)孩子

馬斯克收心了?官宣了39歲印度裔伴侶:相貌普通為他生了4個(gè)孩子

豐譚筆錄
2025-12-12 11:16:23
羅馬諾:索爾斯克亞愿意回歸曼聯(lián),而且也不在乎合同期限

羅馬諾:索爾斯克亞愿意回歸曼聯(lián),而且也不在乎合同期限

懂球帝
2026-01-06 05:25:11
(最新)童錦程的孩子?jì)寢專汉⒆右呀?jīng)是超一線身價(jià),自己母憑子貴不接受之前價(jià)格和解了

(最新)童錦程的孩子?jì)寢專汉⒆右呀?jīng)是超一線身價(jià),自己母憑子貴不接受之前價(jià)格和解了

杭城村叔
2026-01-05 09:58:45
因顏值走紅的15歲素人女孩“七七”簽約經(jīng)紀(jì)公司

因顏值走紅的15歲素人女孩“七七”簽約經(jīng)紀(jì)公司

大象新聞
2026-01-05 11:49:04
因年終獎(jiǎng)為零,我平靜辭職后去環(huán)游世界,三天后老板在群里@我

因年終獎(jiǎng)為零,我平靜辭職后去環(huán)游世界,三天后老板在群里@我

徐俠客有話說(shuō)
2025-12-08 10:29:05
火箭射日神劇情:杜蘭特戰(zhàn)舊主三分準(zhǔn)絕殺登海報(bào) 布克丟絕平三分

火箭射日神劇情:杜蘭特戰(zhàn)舊主三分準(zhǔn)絕殺登海報(bào) 布克丟絕平三分

醉臥浮生
2026-01-06 11:39:52
2026-01-06 12:48:49
量子位 incentive-icons
量子位
追蹤人工智能動(dòng)態(tài)
11974文章數(shù) 176356關(guān)注度
往期回顧 全部

科技要聞

速看!黃仁勛萬(wàn)字實(shí)錄:甩出"物理AI"王牌

頭條要聞

鄧紫棋的科幻小說(shuō)"入圍"銀河獎(jiǎng)引熱議 其副業(yè)不只寫作

頭條要聞

鄧紫棋的科幻小說(shuō)"入圍"銀河獎(jiǎng)引熱議 其副業(yè)不只寫作

體育要聞

從NBA最菜首發(fā)控衛(wèi),到NBA最強(qiáng)喬治

娛樂(lè)要聞

朱媛媛遺作《小城大事》定檔1月10日

財(cái)經(jīng)要聞

丁一凡:中美進(jìn)入相對(duì)穩(wěn)定的競(jìng)爭(zhēng)共存期

汽車要聞

讓智駕能看懂真實(shí)世界 英偉達(dá)發(fā)布開源Alpamayo平臺(tái)

態(tài)度原創(chuàng)

本地
家居
游戲
公開課
軍事航空

本地新聞

云游內(nèi)蒙|初見(jiàn)呼和浩特,古今交融的北疆都會(huì)

家居要聞

引光之宅 地下室也有生機(jī)

M站年度PC游戲TOP20出爐!《哈迪斯2》94分封神

公開課

李玫瑾:為什么性格比能力更重要?

軍事要聞

美稱對(duì)“占領(lǐng)”委內(nèi)瑞拉保留選擇權(quán)

無(wú)障礙瀏覽 進(jìn)入關(guān)懷版