5月8日,AI基礎(chǔ)設(shè)施公司Modular正式發(fā)布了Mojo編程語言的首個(gè)Beta版本1.0.0b1。
這條消息在開發(fā)者社區(qū)引發(fā)了不小的波瀾——畢竟,“寫起來像Python,跑起來像C++”的承諾,已經(jīng)讓人等了很久。
Modular成立于2022年,由前Google Brain主管Chris Lattner與Google Brain前副總裁Tim Davis聯(lián)合創(chuàng)立。Lattner是LLVM編譯器基礎(chǔ)設(shè)施、Clang C++編譯器以及Swift編程語言的創(chuàng)造者,被譽(yù)為“編譯器之神”。
Modular的核心使命是解決AI基礎(chǔ)設(shè)施的碎片化問題。當(dāng)前AI開發(fā)面臨嚴(yán)峻挑戰(zhàn):模型需要在不同硬件(NVIDIA、AMD、Intel、Apple Silicon)上運(yùn)行,開發(fā)者被迫維護(hù)多套代碼;Python生態(tài)雖然易用但性能受限,C++高性能代碼又難以編寫和維護(hù)。Modular試圖通過統(tǒng)一的技術(shù)棧彌合這一鴻溝。
![]()
根據(jù)Modular官方博客披露,Mojo 1.0正式版預(yù)計(jì)將在2026年秋季發(fā)布,屆時(shí)將開放編譯器源碼并提供語言穩(wěn)定性保證。當(dāng)前Beta版本包含多項(xiàng)重要功能更新:安全閉包(Safe closures)引入新的捕獲語法、trait的條件一致性(Conditional conformance to traits)、以及對(duì)可變參數(shù)(variadics)的重大改進(jìn)。
值得關(guān)注的是,Modular推出了TileTensor作為LayoutTensor的繼任者,進(jìn)一步簡化高性能GPU內(nèi)核的開發(fā)。TileTensor將內(nèi)存布局作為張量本身的編譯時(shí)屬性,使得GPU內(nèi)核所需的swizzles、strides和indexing操作可以由類型系統(tǒng)檢查,而非依賴人工維護(hù)。這一改進(jìn)顯著降低了編寫高性能計(jì)算代碼的門檻。
與此同時(shí),Mojo獲得了專屬網(wǎng)站mojolang.org,所有Mojo相關(guān)文檔已遷移至此,docs.modular.com則專注于MAX平臺(tái)的模型構(gòu)建與部署文檔。
Mojo編程語言
為什么是Mojo?AI時(shí)代的性能焦慮
Mojo誕生于2022年底,定位非常明確:解決Python在AI和高性能計(jì)算場景下的性能瓶頸。Python憑借其簡潔的語法和龐大的生態(tài),成為了AI開發(fā)的事實(shí)標(biāo)準(zhǔn)語言,但它的解釋執(zhí)行特性也決定了其在計(jì)算密集型任務(wù)中的天花板。
Mojo的解法很直接——兼容Python語法,但引入編譯時(shí)類型檢查、內(nèi)存安全和底層硬件訪問能力。開發(fā)者可以用熟悉的Python風(fēng)格寫代碼,在需要性能的地方添加類型注解,編譯器就能將其優(yōu)化到接近C++的執(zhí)行效率。
![]()
1.0.0b1帶來了什么?
這次發(fā)布的穩(wěn)定版標(biāo)志著Mojo從實(shí)驗(yàn)性語言邁向可用產(chǎn)品的關(guān)鍵一步。核心特性包括:
AI原生設(shè)計(jì):作為一門編譯型靜態(tài)語言,Mojo從底層就為現(xiàn)代AI系統(tǒng)的多樣化硬件(CPU、GPU、ASIC)優(yōu)化,特別適合Agentic編程。
GPU編程平民化:無需綁定特定廠商的庫,也無需單獨(dú)編譯內(nèi)核代碼,開發(fā)者可以用同一門語言寫CPU和GPU代碼。官方示例中,一個(gè)GPU向量加法內(nèi)核的代碼量與傳統(tǒng)CUDA方案相比大幅減少。
Python無縫互操作:Mojo原生支持與Python的互調(diào)用。你可以逐步將Python項(xiàng)目中的性能瓶頸遷移到Mojo,而無需重寫整個(gè)代碼庫。Mojo代碼可以自然導(dǎo)入Python生態(tài),也能被打包分發(fā)到Python項(xiàng)目中。
編譯時(shí)元編程:受Zig啟發(fā)的comptime機(jī)制讓開發(fā)者能在編譯期執(zhí)行代碼、進(jìn)行條件編譯和反射,實(shí)現(xiàn)零成本抽象。
相比此前偏向概念介紹的發(fā)布,Mojo v1.0.0b1帶來了大量觸及語言核心與系統(tǒng)編程層面的實(shí)質(zhì)性變更——從關(guān)鍵字統(tǒng)一到指針非空設(shè)計(jì),再到全平臺(tái)GPU硬件支持的擴(kuò)展,標(biāo)志著Mojo正在從「實(shí)驗(yàn)性語言」向「生產(chǎn)可用」快速演進(jìn)。
語言統(tǒng)一:fn被廢棄,def成為唯一函數(shù)關(guān)鍵字
最引人注目的語法變化是 fn關(guān)鍵字正式被標(biāo)記為deprecated,并將在下一版本變?yōu)榫幾g錯(cuò)誤。自v0.26.2啟動(dòng)的def/fn統(tǒng)一工作至此完成:def成為Mojo唯一的標(biāo)準(zhǔn)函數(shù)聲明關(guān)鍵字,且繼承了原本fn的非拋異常語義。現(xiàn)有代碼中的fn會(huì)在編譯時(shí)收到警告,開發(fā)者需要盡早遷移。
與此同時(shí),閉包機(jī)制也完成了統(tǒng)一。無狀態(tài)閉包會(huì)自動(dòng)提升為頂層函數(shù),可作為 FFI 回調(diào)傳遞;新的thin函數(shù)效應(yīng)聲明了不攜帶捕獲狀態(tài)的純函數(shù)指針類型;而abi("C")效應(yīng)則允許函數(shù)使用平臺(tái)C ABI,實(shí)現(xiàn)與C庫的安全互操作。捕獲列表語法{mut a, b, c^, read}也正式定型,支持按可變引用、不可變引用和移動(dòng)語義顯式捕獲變量。
內(nèi)存安全:UnsafePointer非空化,集合默認(rèn)開啟邊界檢查
Mojo在內(nèi)存安全方面邁出了重要一步。UnsafePointer 現(xiàn)在被設(shè)計(jì)為非空指針:默認(rèn)的空構(gòu)造函數(shù)和__bool__()方法已被廢棄,且不再遵循Defaultable和Boolabletrait。開發(fā)者需要用Optional[UnsafePointer[...]]來表達(dá)可空性。由于null地址被用作Optional的None niche,這種表達(dá)仍然是零開銷且FFI安全的。
標(biāo)準(zhǔn)庫集合也默認(rèn)開啟了邊界檢查。所有CPU上的集合(List、Span、InlineArray、String等)在越界訪問時(shí)會(huì)直接報(bào)告用戶調(diào)用點(diǎn),而非靜默崩潰。負(fù)索引也被徹底移除——x[-1]現(xiàn)在會(huì)觸發(fā)編譯期錯(cuò)誤,必須改用x[len(x) - 1]。GPU 上的邊界檢查默認(rèn)關(guān)閉以保證性能,但可通過-D ASSERT=all顯式開啟。
GPU編程:蘋果/AMD/英偉達(dá)全平臺(tái)覆蓋
本次更新在GPU支持上的投入尤為突出。Apple Metal方面,print()首次在Apple GPU上可用,動(dòng)態(tài)線程組內(nèi)存external_memory[]()獲得支持,Apple M5的MMA硬件矩陣乘加指令也通過apple_mma_load()等intrinsic暴露出來。AMD陣營新增了對(duì)MI250X加速卡的支持。英偉達(dá)方面則加入了對(duì)B300(sm_103a) 的識(shí)別與調(diào)度支持。
此外,GPU原語訪問器(thread_idx、block_idx、grid_dim等)的返回類型從UInt統(tǒng)一遷移為Int,這是Mojo向「所有尺寸和偏移量使用Int」方向邁出的關(guān)鍵一步。CPU端的DeviceContext(api="cpu")現(xiàn)在也變成了流有序執(zhí)行上下文,支持enqueue_cpu_function()和enqueue_cpu_range(),為未來的NUMA感知CPU調(diào)度鋪平了道路。
字符串與反射:Unicode字形簇與編譯期類型細(xì)化
String和StringSlice新增了對(duì)UAX 字形簇(grapheme cluster) 的分段支持,能正確處理組合修飾符、emoji ZWJ序列、國旗emoji、韓語音節(jié)等多碼點(diǎn)簇。新增的graphemes()、count_graphemes()和[grapheme=...]切片語法讓文本處理更加精確。純ASCII 文本的count_graphemes()有大約10倍的加速。
類型系統(tǒng)方面,編譯器現(xiàn)在能基于where子句、comptime if和comptime assert進(jìn)行類型細(xì)化。只要編譯期能證明某類型滿足某trait,就可以直接調(diào)用其trait方法,無需再使用trait_downcast。反射API也整合為統(tǒng)一的reflect[T]()入口,取代了原先分散的struct_field_*和get_type_name等自由函數(shù)。
工具鏈與生態(tài)
調(diào)試器體驗(yàn)大幅改善:Variant和Optional在LLDB中現(xiàn)在直接顯示為Int(42) 或Some(value),而非原始內(nèi)部結(jié)構(gòu);標(biāo)量類型直接顯示數(shù)值;UnsafePointer支持所有類型的正確顯示。LSP響應(yīng)速度通過緩存和延遲解析得到了優(yōu)化,長會(huì)話中的代碼補(bǔ)全從O(N2)降至攤還O(1)。Mojo包文件(.mojopkg)升級(jí)到格式v2,采用zstd壓縮的MLIR字節(jié)碼,顯著減小包體積。
開源路線圖:標(biāo)準(zhǔn)庫已開源,編譯器在路上
Modular在官網(wǎng)上明確表示,Mojo標(biāo)準(zhǔn)庫已完全開源在GitHub,歡迎社區(qū)貢獻(xiàn)。而編譯器本體計(jì)劃在2026年內(nèi)開源。官方解釋稱,語言目前還很年輕,“一小群擁有共同愿景的工程師比社區(qū)驅(qū)動(dòng)的方式推進(jìn)得更快”。
Mojo的發(fā)展分為四個(gè)階段:
- Phase 0(已完成):核心解析器、內(nèi)存類型、函數(shù)、結(jié)構(gòu)體等語言基礎(chǔ)。
- Phase 1(進(jìn)行中):高性能CPU+GPU編程,無縫擴(kuò)展Python。
- Phase 2:系統(tǒng)級(jí)應(yīng)用編程,引入保證的內(nèi)存安全模型。
- Phase 3:動(dòng)態(tài)面向?qū)ο缶幊蹋С诸悺⒗^承和untyped變量,最大化Python兼容性。
目前1.0.0b1的發(fā)布意味著Phase 1已初見成效。對(duì)于既想保持Python開發(fā)效率、又不愿在性能上妥協(xié)的AI開發(fā)者來說,Mojo終于從一個(gè)漂亮的Demo變成了一個(gè)可以真正嘗試的選項(xiàng)。
參考來源
- Mojo官網(wǎng): https://mojolang.org/
- GitHub: https://github.com/modular/modular
Mojo v1.0.0b1 發(fā)布說明:https://mojolang.org/releases/v1.0.0b1/
- Mojo Roadmap: https://mojolang.org/docs/roadmap/
特別聲明:以上內(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.