作者: · 发布: · 更新:

AI编程语言Mojo 1.0稳定版正式发布:三年打磨,终于能用在生产环境了

“Python的超集,C的速度”

2023 年发布时,Mojo 编程语言被宣传为”Python 的超集,C 的速度”。三年后,它兑现了其中一半的承诺,正式发布了 1.0。

Modular 团队在公告中强调,Mojo 1.0 的核心承诺是稳定性。”我们每天在生产环境中依赖 Mojo 运行商业基础设施 MAX 和 Modular Cloud,”公告写道,”它不再只是我们正在开发的语言,而是我们赖以生存的语言。”

图片

在过去几个版本中,Mojo 做了大量收敛工作:变量统一用 var 声明,闭包被统一,只有一种 Pointer 类型,大量命名被重新整理以保持一致性。1.0 版本还加入了 Python 风格的 lambda 语法(用于内联闭包)、更稳定的 LSP 服务器、以及内存安全方面的引用失效诊断。

社区贡献的数字相当可观:近 200 名贡献者提交了超过 1100 个 PR,改动了 20 万行代码,还有上千人提交了 issue。

语言统一:fn 被废弃,def 成为唯一函数关键字

最引人注目的语法变化是**fn关键字正式被标记为 deprecated**,并将在下一版本变为编译错误。自 v0.26.2 启动的 def/fn 统一工作至此完成:def成为 Mojo 唯一的标准函数声明关键字,且继承了原本fn的非抛异常语义。现有代码中的fn会在编译时收到警告,开发者需要尽早迁移。

与此同时,闭包机制也完成了统一。无状态闭包会自动提升为顶层函数,可作为 FFI 回调传递;新的thin函数效应声明了不携带捕获状态的纯函数指针类型;而abi("C")效应则允许函数使用平台 C ABI,实现与 C 库的安全互操作。捕获列表语法{mut a, b, c^, read}也正式定型,支持按可变引用、不可变引用和移动语义显式捕获变量。

内存安全:UnsafePointer 非空化,集合默认开启边界检查

Mojo 在内存安全方面迈出了重要一步。UnsafePointer现在被设计为非空指针:默认的空构造函数和__bool__()方法已被废弃,且不再遵循DefaultableBoolabletrait。开发者需要用Optional[UnsafePointer[...]]来表达可空性。由于 null 地址被用作 Optional 的 None niche,这种表达仍然是零开销且 FFI 安全的。

标准库集合也默认开启了边界检查。所有 CPU 上的集合(List、Span、InlineArray、String 等)在越界访问时会直接报告用户调用点,而非静默崩溃。负索引也被彻底移除 ——x[-1]现在会触发编译期错误,必须改用x[len(x) - 1]。GPU 上的边界检查默认关闭以保证性能,但可通过-D ASSERT=all显式开启。

GPU 编程:苹果 / AMD / 英伟达全平台覆盖

本次更新在 GPU 支持上的投入尤为突出。Apple Metal 方面,print()首次在 Apple GPU 上可用,动态线程组内存external_memory[]()获得支持,Apple M5 的 MMA 硬件矩阵乘加指令也通过apple_mma_load()等 intrinsic 暴露出来。AMD 阵营新增了对MI250X加速卡的支持。英伟达方面则加入了对**B300(sm_103a)**的识别与调度支持。

此外,GPU 原语访问器(thread_idxblock_idxgrid_dim等)的返回类型从UInt统一迁移为Int,这是 Mojo 向「所有尺寸和偏移量使用 Int」方向迈出的关键一步。CPU 端的DeviceContext(api="cpu")现在也变成了流有序执行上下文,支持enqueue_cpu_function()enqueue_cpu_range(),为未来的 NUMA 感知 CPU 调度铺平了道路。

字符串与反射:Unicode 字形簇与编译期类型细化

String 和 StringSlice 新增了对**UAX #29 字形簇(grapheme cluster)**的分段支持,能正确处理组合修饰符、emoji ZWJ 序列、国旗 emoji、韩语音节等多码点簇。新增的graphemes()count_graphemes()[grapheme=...]切片语法让文本处理更加精确。纯 ASCII 文本的count_graphemes()有大约 10 倍的加速。

类型系统方面,编译器现在能基于where子句、comptime ifcomptime assert进行类型细化。只要编译期能证明某类型满足某 trait,就可以直接调用其 trait 方法,无需再使用trait_downcast。反射 API 也整合为统一的reflect[T]()入口,取代了原先分散的struct_field_*get_type_name等自由函数。

工具链与生态

调试器体验大幅改善:Variant 和 Optional 在 LLDB 中现在直接显示为Int(42)Some(value),而非原始内部结构;标量类型直接显示数值;UnsafePointer 支持所有类型的正确显示。LSP 响应速度通过缓存和延迟解析得到了优化,长会话中的代码补全从 O (N²) 降至摊还 O (1)。Mojo 包文件(.mojopkg)升级到格式 v2,采用 zstd 压缩的 MLIR 字节码,显著减小包体积。

图片

Mojo 选择了与 Python 生态错位竞争。它的主战场是 GPU 编程、高性能计算和 AI 推理——这些 Python 靠 C 扩展才能触及的领域。Modular 的 AI Agent Skills 已经”1.0 ready”,覆盖了从项目创建、GPU 编程到从其他语言迁移的完整工作流。

但 Mojo 的处境并不轻松。Python 的生态壁垒是任何新语言都难以撼动的,而 Rust 在系统编程领域的位置已经稳固。Mojo 真正的机会在于:如果 AI 辅助编程真的让”代码生成”比”代码复用”更重要,那么一门为 AI 时代设计的语言可能比一门为人类手写设计的语言更有优势。

Modular 承诺将在 2026 年内开源 Mojo 编译器,并将于 8 月 18 日在旧金山举行 ModCon 大会。


原文:https://mp.weixin.qq.com/s?__biz=MzY5OTM2NjA4Nw==&mid=2247622306&idx=1&sn=573d88a2ee26d26209b0f2ace4b667ee

颜资源站长
颜资源站长 已发布 825 篇文章

资深互联网从业者,专注AI工具研究与实战应用。长期跟踪ChatGPT、Claude、Stable Diffusion等前沿AI技术,擅长将复杂的技术概念转化为通俗易懂的教程。运营颜资源小站,致力于为中文用户提供高质量的AI教程、开源项目推荐和数字资源整理。