国产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版本,給開(kāi)發(fā)者送上了年終大禮。

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



Ruby是一種開(kāi)源的面向?qū)ο竽_本語(yǔ)言,在20世紀(jì)90年代由日本人松本行弘開(kāi)發(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開(kāi)發(fā)者的“全局污染”問(wèn)題,并為構(gòu)建更安全、模塊化的應(yīng)用提供原生支持。

這涉及到Ruby的一個(gè)核心特性——開(kāi)放類(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)開(kāi)發(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)存開(kāi)銷極低,同時(shí)保證了各個(gè)環(huán)境之間的獨(dú)立性。

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

這對(duì)于開(kāi)發(fā)插件系統(tǒng)、多租戶應(yīng)用或者需要運(yùn)行不可信代碼(沙箱環(huán)境)的場(chǎng)景具有革命性意義。它允許開(kāi)發(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)聽(tīng)多個(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開(kāi)發(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ù),開(kāi)發(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í)顯示“方法定義”的代碼行,方便開(kāi)發(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ù)組末尾開(kāi)始向前查找符合條件的元素;
  • 自定義對(duì)象展示:Kernel#inspect方法新增了定制功能,開(kāi)發(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)推薦
我發(fā)現(xiàn),80%的中產(chǎn)還沒(méi)意識(shí)到降息的嚴(yán)重性。

我發(fā)現(xiàn),80%的中產(chǎn)還沒(méi)意識(shí)到降息的嚴(yán)重性。

流蘇晚晴
2025-12-27 17:34:29
比液冷還猛?英偉達(dá)Rubin引爆HVLP4銅箔   國(guó)產(chǎn)9龍頭迎接海外訂單

比液冷還猛?英偉達(dá)Rubin引爆HVLP4銅箔 國(guó)產(chǎn)9龍頭迎接海外訂單

元芳說(shuō)投資
2025-12-28 06:00:11
因長(zhǎng)得太漂亮,7次拒絕導(dǎo)演要求遭打壓,如今43歲才等到掌聲

因長(zhǎng)得太漂亮,7次拒絕導(dǎo)演要求遭打壓,如今43歲才等到掌聲

黎兜兜
2025-12-25 21:57:32
最高4億元,中央財(cái)政補(bǔ)助!浙江4地入選全國(guó)試點(diǎn)

最高4億元,中央財(cái)政補(bǔ)助!浙江4地入選全國(guó)試點(diǎn)

浙江發(fā)布
2025-12-28 10:45:26
東莞20年:親眼目睹工廠女工的性生活,她們的孤獨(dú)壓抑和肆意歡歌

東莞20年:親眼目睹工廠女工的性生活,她們的孤獨(dú)壓抑和肆意歡歌

農(nóng)村情感故事
2025-04-06 20:07:35
揭穿南京博物院背后的徐小姐“畫皮”,這就是打蛇能打的“七寸”

揭穿南京博物院背后的徐小姐“畫皮”,這就是打蛇能打的“七寸”

人格志
2025-12-27 23:44:32
央視導(dǎo)演哈文在美國(guó)過(guò)圣誕!吃全聚德烤鴨,調(diào)侃自己過(guò)成了中國(guó)年

央視導(dǎo)演哈文在美國(guó)過(guò)圣誕!吃全聚德烤鴨,調(diào)侃自己過(guò)成了中國(guó)年

娛圈小愚
2025-12-28 11:26:51
36年前陳寶國(guó)主演的盜墓恐怖片!尺度大到少兒不宜

36年前陳寶國(guó)主演的盜墓恐怖片!尺度大到少兒不宜

釋凡電影
2025-08-14 09:33:19
卡梅隆承認(rèn):影院沒(méi)人了!《阿凡達(dá)3》33億成本難回本,198分鐘片長(zhǎng)勸退觀眾?

卡梅隆承認(rèn):影院沒(méi)人了!《阿凡達(dá)3》33億成本難回本,198分鐘片長(zhǎng)勸退觀眾?

陳意小可愛(ài)
2025-12-28 10:50:23
山西省司法廳原一級(jí)巡視員周濤接受審查調(diào)查

山西省司法廳原一級(jí)巡視員周濤接受審查調(diào)查

界面新聞
2025-12-28 11:31:42
廣東宏遠(yuǎn)今日早報(bào)!徐杰帶傷上場(chǎng),胡明軒確定復(fù)出,麥考爾報(bào)銷

廣東宏遠(yuǎn)今日早報(bào)!徐杰帶傷上場(chǎng),胡明軒確定復(fù)出,麥考爾報(bào)銷

多特體育說(shuō)
2025-12-28 07:40:03
中新網(wǎng)報(bào)道:中國(guó)赴柬埔寨游客增長(zhǎng)43.5%,你會(huì)去俄、柬旅游嗎?

中新網(wǎng)報(bào)道:中國(guó)赴柬埔寨游客增長(zhǎng)43.5%,你會(huì)去俄、柬旅游嗎?

名人茍或
2025-12-27 06:04:21
內(nèi)訌了?洛夫頓發(fā)文:都不相信我,我要回母校,網(wǎng)友: 趕緊滾吧!

內(nèi)訌了?洛夫頓發(fā)文:都不相信我,我要回母校,網(wǎng)友: 趕緊滾吧!

南海浪花
2025-12-28 12:32:59
遇到橫的,美國(guó)就軟了!“貝拉1號(hào)”油輪宣布:美軍就是紙老虎

遇到橫的,美國(guó)就軟了!“貝拉1號(hào)”油輪宣布:美軍就是紙老虎

我心縱橫天地間
2025-12-27 12:56:14
突發(fā)!中國(guó)銀行某省分行行長(zhǎng)被查

突發(fā)!中國(guó)銀行某省分行行長(zhǎng)被查

摩登財(cái)經(jīng)
2025-12-28 11:10:38
萊利預(yù)言成真,火箭擺出終極陣容!杜蘭特笑納大勝申京成唯一輸家

萊利預(yù)言成真,火箭擺出終極陣容!杜蘭特笑納大勝申京成唯一輸家

鍋?zhàn)踊@球
2025-12-28 13:10:00
中央特科最美傳奇女特工被判槍決,毛主席拍案大怒:她是全黨的恩人

中央特科最美傳奇女特工被判槍決,毛主席拍案大怒:她是全黨的恩人

睡前講故事
2025-12-21 16:15:28
有色小金屬十大龍頭,誰(shuí)值得長(zhǎng)期關(guān)注?

有色小金屬十大龍頭,誰(shuí)值得長(zhǎng)期關(guān)注?

小陸搞笑日常
2025-12-28 08:11:45
蘋果折疊屏iPhone尺寸縮水?比預(yù)期更小,造型神似護(hù)照本

蘋果折疊屏iPhone尺寸縮水?比預(yù)期更小,造型神似護(hù)照本

環(huán)球網(wǎng)資訊
2025-12-28 09:38:17
終于明白了!為啥農(nóng)民寧愿斷繳醫(yī)保,也不愿再掏這400塊錢?

終于明白了!為啥農(nóng)民寧愿斷繳醫(yī)保,也不愿再掏這400塊錢?

復(fù)轉(zhuǎn)這些年
2025-12-25 23:30:29
2025-12-28 16:04:49
量子位 incentive-icons
量子位
追蹤人工智能動(dòng)態(tài)
11931文章數(shù) 176345關(guān)注度
往期回顧 全部

科技要聞

AR眼鏡第一案,究竟在爭(zhēng)什么?

頭條要聞

泰柬宣布停火當(dāng)晚 中國(guó)官宣做東力邀兩國(guó)相聚云南

頭條要聞

泰柬宣布;甬(dāng)晚 中國(guó)官宣做東力邀兩國(guó)相聚云南

體育要聞

83分鐘絕殺!曼城2-1年度收官:英超6連勝狂飆

娛樂(lè)要聞

姚晨打卡絕版機(jī)位 高崎機(jī)場(chǎng)背后的遺憾

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

英偉達(dá)的收購(gòu)史

汽車要聞

理想的2026:L9不容有失,i9再戰(zhàn)純電?

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

藝術(shù)
健康
游戲
房產(chǎn)
公開(kāi)課

藝術(shù)要聞

360天津總部,以“0與1”打造科技地標(biāo)!

這些新療法,讓化療不再那么痛苦

近50年老古董復(fù)活!神級(jí)復(fù)古解謎游戲登陸Steam

房產(chǎn)要聞

降維打擊!三亞CBD驚現(xiàn)“豪宅新王”,高端局要變天了!

公開(kāi)課

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

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