top of page

Modular 的 Mojo 1.0 正式发布,但稳定性才是真正的考验

Modular 于 8 月 11 日发布 Mojo 1.0,为历经三年语言开发后登上 Google News 的新闻标题提供了一个明确的里程碑。该版本承诺实现源代码稳定性,同时延续 Mojo 的核心主张:以类似 Python 的代码,在 CPU、GPU 及其他加速器上获得系统级控制能力。

如今,这一承诺面临的考验比达到 1.0 版本更为艰巨。开发者必须判断,Mojo 在可移植性和生产力方面是否足以证明其价值,值得与 Python、C++、Rust 和 CUDA 一同被采用。

这一时点进一步提高了赌注。Qualcomm 在发布前不久完成了对 Modular 的收购,而 Nvidia 仍在不断降低使用 Python 开发 GPU 内核的门槛。因此,Mojo 1.0 面临的是实力更强的企业后盾,以及能力更成熟的既有竞争者。

这一里程碑固然重要,但一个版本号无法建立起生态系统。Mojo 现在必须证明,稳定的接口、可信的开源计划和跨硬件性能,能够将早期兴趣转化为持续维护的生产软件。

Google News 标题实际意味着什么

Mojo 1.0 改变的是这门语言的稳定性承诺,而不只是其软件包版本号。

Modular 于 8 月 11 日通过其 Mojo 1.0 更新宣布正式发布。该公司将此版本描述为面向长期开发和生产使用的稳定基础。

随附的软件包为 mojo==1.0.0,取代了 5 月和 6 月发布的两个公开测试版。开发者可以单独安装 Mojo,而 MAX 仍可用于模型开发、推理以及与加速器相关的组件。

这一区别很重要,因为 Mojo 和 MAX 的角色彼此关联却并不相同。Mojo 是编程语言,而 MAX 则提供 Modular 更广泛的 AI 框架和运行时基础设施。

1.0 版本确立了一项预期:1.x 系列中的常规版本将优先保障源代码兼容性。Modular 表示,在此期间的大多数变更应当是增加能力,而不是反复破坏现有程序。

这一承诺回应了一个长期存在的采用难题。Mojo 在 1.0 之前发展迅速,频繁的语言或库变更让大型社区项目的维护成本居高不下。

Modular 也直接承认了这一权衡。该公司表示,快速的内部开发改善了语言本身,但也让社区长期维护变得困难。

正式版本还包含一次规模异常大的迁移步骤。其详细的发布变更日志警告称,1.0 包含的破坏性变更多于典型更新。

许多变更附带了已弃用的别名或编译器自动建议。这应能让单项迁移更具机械性,尽管它并不能消除大型代码库所需的工作量。

Mojo 1.0 将 var 标准化为变量声明方式,统一了闭包行为,并整合了指针类型。它还重命名了若干 API 和类型,以减少术语重叠。

列表表达式现在默认创建固定大小的数组,而不是在堆上分配的列表。该语言还新增了 Python 风格的 lambda 表达式,不过 Mojo 仍保留类型化签名和自身的捕获规则。

生命周期检查器获得了实验性支持,可跟踪对集合内部元素的引用。它能够拒绝这样的代码:在某项操作可能重新分配底层容器后,仍保留对元素的引用。

这一功能针对的是一类具体的内存错误。即使周边源代码看似无害,列表在追加元素后,其中元素的引用也可能失效。

Mojo 1.0 还为正确性调整了一些行为。根据变更日志,无效的连续切片将停止执行,而不再静默地发生回绕或截断。

字符串迭代现在默认返回字素簇。字素簇表示人们通常感知为单个显示字符的内容,即使 Unicode 使用了多个码位。

这些变化说明了该里程碑实际带来的内容。Mojo 正在冻结更多设计决策,同时收紧会影响安全性、可预测性和硬件执行的规则。

不过,在发布之初,标准库中只有特意划定的一小部分具有稳定标识。Modular 表示,计划在后续版本中扩展这一受保护的范围。

Google News 的叙事框架可能让 1.0 听起来像一个已经完成的终点。Modular 的文档呈现的现实更为有限:核心基础正在稳定下来,但语言和库方面的大量工作仍未完成。

Modular 为什么现在选择稳定性

Mojo 对可靠项目的需求,比再次进行一轮语言实验更迫切。

Modular 于 2023 年首次公开展示 Mojo,将熟悉的语法与低层性能结合在一起,提出了雄心勃勃的构想。其早期宣传吸引了 Python 开发者、AI 工程师和编程语言爱好者。

兴趣并不会自动转化为持久的采用。评估一门新系统语言的团队,需要可靠的语法、库、构建工具、调试支持和迁移政策。

不断变化的语言目标会增加上述每一项成本。教程会过时,库会无法编译,维护者不得不花时间追赶编译器,而不是服务用户。

Modular 在此前的 1.0 路线图中概述了这一担忧。该公司表示,语义化版本控制和稳定接口标记将有助于软件包在 1.x 系列中保持兼容。

因此,1.0 版本既是一项治理决策,也是一项编译器发布。它向开发者说明,Modular 现在认为什么样的变更是可以接受的。

该公司还需要外部开发力量,才能让 Mojo 的应用范围超越其内部需求。Modular 在 MAX 和 Modular Cloud 内部使用该语言,因此其自身工作负载自然会影响设计优先级。

社区库会检验不同的假设。它们会暴露文件处理、网络、包管理、应用工具和平台支持中的缺口,而这些问题未必会在内部 AI 基础设施中显现。

Modular 表示,自标准库开源以来,近 200 名贡献者已提交超过 1,100 个拉取请求。这些变更影响了超过 20 万行代码。

该公司还称,另有超过 1,000 人提交了问题报告。这些数字来自 Modular,应视为其对社区参与度的衡量。

但它们仍说明了兼容性为何变得紧迫。每增加一位贡献者或一个依赖软件包,原本可以避免的破坏性变更造成的损害就会增加。

1.0 版本并未承诺绝对不变。Modular 表示,破坏性变更仍可能发生,但其计划使用成熟语言常见的实践来进行管理。

这一限定合理,但很重要。开发者应评估具体的稳定 API 标记,而不是假定每个库接口都已成为永久承诺。

该版本还进一步明确了 Mojo 与 MAX 的界限。一些与加速器相关的标准库 API 被移入新的 MAX 软件包,而 layout 软件包如今也随 MAX 一同发布。

这种分离让该语言拥有了更清晰的通用定位。但它也表明,重要的 GPU 工作流仍与 Modular 更大的软件栈绑定。

Mojo 的 Python 互操作性获得了一项针对性的性能改进。对 PythonObject 的操作现在使用 CPython 的抽象协议,而不再先进行 Python 级别的属性查找。

Modular 表示,这项变更让相关互操作路径的速度大约提升了 12 倍。这是该公司报告的微观层面结果,并不能证明完整的混合应用会快 12 倍。

不过,这一更狭义的说法仍然有价值。当应用在 Python 与编译代码之间进行大量小调用时,跨语言边界的开销可能会抵消性能收益。

降低这种开销支持了一条务实的采用路径。团队可以将选定函数迁移到 Mojo,而无需一次性重写整个 Python 应用。

这种渐进式模式比全面取代 Python 的说法更可信。Python 的库、开发者基础以及在 AI 中的地位都过于庞大,年轻语言无法迅速复制。

Mojo 必须先融入这一环境,才可能在其外扩展。稳定接口为团队在持续维护的项目中验证这种适配性提供了更充分的理由。

这一里程碑出现在 Google News 各处会带来曝光,但曝光只是暂时的。可重复的构建和可靠的升级,决定了开发者在发布热度消退后是否会继续留下。

Mojo 与 CUDA 的较量,本质上是可移植性与平台引力之争

Mojo 的核心竞争并非语法对语法,而是可移植的控制能力对 CUDA 已安装基础的竞争。

Mojo 通过统一的编程模型面向 CPU、GPU 和其他加速器。这一雄心回应了真实的基础设施问题:AI 团队正在面对更多硬件架构。

CUDA 仍是大量商业 GPU 开发的中心。其库、调试工具、文档、受过培训的人才队伍以及与 Nvidia 硬件的集成,形成了显著的平台引力。

开发者很少孤立地选择一种内核语言。他们同时也在选择性能分析工具、部署环境、可复用库、支持渠道,以及与现有模型的兼容性。

Mojo 试图减少这种碎片化。其编译器架构建立在 MLIR 之上,即用于跨不同硬件层级表达和优化程序的多层中间表示。

一项已发表的 HPC 评估发现,在测试的内存受限内核上,Mojo 的性能可与 CUDA 和 HIP 相竞争。研究人员也报告了一些重要差距。

该研究指出,Mojo 在 AMD 硬件上的原子操作开销更高。它还发现,在测试的 Nvidia 和 AMD 系统中,计算受限工作负载存在 fast-math 限制。

这些结果并不能最终判定 Mojo 的性能。它们说明,可移植性主张需要在不同设备、编译器和优化设置下进行面向具体工作负载的测试。

一种语言可能针对某种内存访问模式表现出色,却在另一种模式上落后。只有在无需过度进行设备特定重写的情况下,性能仍可接受时,硬件可移植性才有价值。

Mojo 的结构化内核方案试图在抽象与显式控制之间取得平衡。在 1.0 测试阶段引入的 TileTensor,将内存布局表示为张量类型的一部分。

这让编译器能够更早检查步长、索引和相关属性。它可以减少高性能 GPU 内核中涉及的一些手动记账工作。

然而,Nvidia 正在进入相同的易用性领域。其 CUDA Tile 模型允许开发者使用 Python 描述分块内核,同时由 CUDA 处理较低层的硬件细节。

这改变了竞争格局。Mojo 面对的不再只是通过更友好的语言挑战传统 CUDA C++ 工作流。

它还必须与由主导 GPU 厂商支持的 Python 工具竞争。Nvidia 可以将更简单的编写方式,与直接获取其硬件路线图及成熟 CUDA 生态系统的能力结合起来。

Mojo 拥有另一种潜在优势。它被设计为面向 Nvidia GPU 以外的硬件,包括 AMD 加速器和 CPU,而无需为每个目标定义独立语言。

当组织积极部署多个供应商的产品时,这一主张会更有说服力。当某个组织标准化采用 Nvidia,并将 CUDA 集成置于可移植性之上时,这一主张就会减弱。

因此,主要对手是以 CUDA 为中心的 Python,而不只是 Python 本身。Python 提供熟悉的表层体验,而 CUDA 则提供经过优化的库和根深蒂固的运维支持。

Mojo 需要令人信服的案例,证明一套持续维护的代码库能够服务于确实存在差异的系统。单个加速器上的基准测试无法证明这一优势。

它还需要透明地说明还需要多少设备特定的调优工作。可移植的源代码仍可能掩盖针对每种硬件后端分别进行的优化工作。

这不一定意味着失败。高性能内核往往需要根据架构做出选择,因为内存层级和指令集各不相同。

问题在于,Mojo 是否能充分减少这类工作,从而改变工程经济性。减少重复的基础设施工作,可能比赢下每一项孤立的基准测试更重要。

Qualcomm 的所有权让这一角度更加突出。Qualcomm 的业务横跨手机、个人电脑、边缘设备、汽车系统,以及规划中的数据中心产品。

一种面向多样化处理器和加速器的语言,与这一产品组合相契合。Mojo 可以成为连接不同硬件环境的软件层,而这些环境并不共享 Nvidia 的 CUDA 基础。

然而,战略契合并不保证采用。开发者仍会根据工具质量、部署可及性、文档,以及在受支持硬件上的性能作出判断。

Google News 这一里程碑表明,Mojo 已进入稳定发布线。只有当团队开始在这一发布线上维护真实应用时,Mojo 与 CUDA 的竞争才会真正展开。

Qualcomm 为 Mojo 带来覆盖面,也带来新的信任问题

Qualcomm 能扩大 Mojo 的硬件相关性,但其所有权也会考验这门语言的独立性。

Qualcomm 于 6 月宣布达成收购 Modular 的协议,随后完成交易。其官方收购声明将 Modular 定位为更广泛 AI 软件战略的一部分。

收购方表示,Modular 将强化其在边缘和数据中心环境中面向生成式和智能体 AI 的软件基础。该声明未披露财务条款。

这为 Mojo 创造了一条合理的分发路径。Qualcomm 可以将这门语言和 MAX 与硬件团队、企业客户、设备制造商,以及其不断扩展的数据中心业务连接起来。

Modular 也从一家规模大得多的公司获得资源。编译器开发、硬件适配、测试、文档和开发者关系都需要持续投入。

此次收购发生在最终 1.0 版本发布前后。这一时序使得此次发布比一次普通的语言更新更具意义。

Mojo 现在既是面向公众的开发者项目,也是半导体公司内部的一项战略资产。这两种角色可以相互促进,但也可能产生张力。

如果 Mojo 让 Qualcomm 的硬件更易于编程,Qualcomm 将从中受益。如果同样的工作改善了跨供应商的可移植开发,更广泛的社区也会从中受益。

如果 Qualcomm 特有的优先事项开始主导路线图,双方利益就会出现分歧。开发者需要看到 Nvidia、AMD、Apple 和其他目标平台将持续获得严肃支持的证据。

在企业所有权之下,开放治理尤其重要。标准库是开源的,但在 1.0 版本之前,Modular 尚未发布完整的编译器工具链。

在 8 月的公告中,该公司重申承诺将在 2026 年期间开源编译器和工具链。它并未将 1.0 版本发布本身视为履行这一承诺。

这一缺口影响技术信任。开发者可以检查并参与主要的公开组件,但无法独立构建或审计完整实现。

封闭的编译器也使长期风险评估更加复杂。采用一门语言的团队需要考虑,如果产品优先级、许可、打包方式或平台支持发生变化,会出现什么情况。

Qualcomm 的参与可以降低财务不确定性,同时增加治理方面的问题。这两种影响可以同时存在。

该公司接下来的公开声明应澄清许可、贡献规则、发布所有权,以及开放 Mojo 组件与商业 MAX 功能之间的边界。

这一边界在 1.0 版本中已经很重要。将某些加速器 API 从标准库移入 MAX,形成了更清晰的包结构,但也使这些能力与另一款产品绑定。

开发者会希望了解哪些 GPU 编程层仍可通过开放治理的组件使用。他们还会审视,关键工具是否依赖封闭服务或软件包。

这次收购可能帮助 Mojo 覆盖 CUDA 并不天然适用的边缘硬件。Qualcomm 有很强的动机改善异构处理器和专用加速器上的软件体验。

这一机会不止于将 Mojo 定位成另一种用于编写 Nvidia 内核的语言。一个可信的 CPU、GPU 和边缘计算故事,会给开发者接受生态系统尚不成熟的理由。

不过,硬件覆盖面必须转化为可用的开发环境。路线图上写明的支持,与可安装的软件包、可靠的调试器和经过测试的部署文档并不相同。

如果 Qualcomm 将 Mojo 作为多供应商语言来对待,它就能加速这一转变。如果 Mojo 主要成为 Qualcomm 自身 AI 产品的接口,它就可能缩小这一机会。

这种不确定性不应掩盖此次发布,但它应处于采用决策的核心。1.0 版本稳定了源代码预期,而企业所有权重塑了战略预期。

Mojo 1.0 仍未解决的问题

稳定的语言核心并不保证稳定的库、完整的工具链,或适用于每种工作负载的生产就绪性。

Modular 称 Mojo 1.0 已具备生产就绪能力,部分依据是它已在 MAX 和 Modular Cloud 内部使用。这是有意义的内部验证,但它覆盖的是 Modular 的基础设施需求。

外部团队面临不同约束。他们可能需要 Windows 支持、成熟的软件包发现机制、安全流程、可复现构建、长期支持政策或专门的科学计算库。

首批稳定标准库 API 数量较少,是首先需要考察的限制。使用这些 API 的代码比构建在实验性或尚未稳定的接口上的代码,具有更强的兼容性预期。

团队应在将整个库视为冻结之前梳理依赖关系。1.0 标签无法保护文档仍标记为实验性的接口。

编译器源代码的可用性仍是另一个悬而未决的问题。Modular 已承诺在 2026 年期间发布它,但 8 月的发布早于这一步。

在工具链开放之前,独立构建者无法完全验证项目的可复现性,也无法维护替代的编译器发行版。他们必须更大程度地依赖供应商的发布流程。

该生态系统也仍远小于 Python、Rust 或 C++。语言互操作性有所帮助,但每个边界都会带来调试、打包和部署方面的考量。

当现有功能可原样运行时,从 Mojo 调用 Python 库可以加速采用。但这并不会让这些库成为原生 Mojo 软件包,也不会消除对 Python 运行时的依赖。

同样,熟悉的语法能缩短学习时间,却不会消除系统编程概念。开发者仍需理解所有权、生命周期、不安全操作、内存布局和加速器行为。

Mojo 的统一指针设计体现了这种平衡。1.0 版本将不安全性置于单个操作上,而不是为安全和不安全用途维护独立的指针类型。

这可以让 API 更一致。但它也要求工具和文档帮助开发者在评审期间识别不安全边界。

新的内部来源检查很有前景,但 Modular 将该机制标为实验性。它不应被表述为覆盖整门语言的完整内存安全保障。

未来的语言计划包括更强的异步编程模型、模式匹配和联合类型。这些缺失对于 Mojo 更广泛的通用语言雄心至关重要。

Modular 此前承认,后续开发可能需要一个会破坏源代码兼容性的 Mojo 2.0 模式。该公司曾讨论同时支持两代版本,以便按软件包逐步迁移。

这种方式类似于成熟语言支持多个标准。它也确认,1.0 并非 Mojo 系统语言设计的最终形态。

性能主张同样需要克制。Modular 可以指出内部生产使用和经过优化的内核,而独立研究既显示了有竞争力的结果,也显示了硬件特定的弱点。

用户应对完整的应用路径进行基准测试。内核速度可能被数据传输、框架开销、编译时间、Python 调用边界或缺少优化库所稀释。

一项有价值的测试应比较多个设备上的维护工作量,而不只是峰值吞吐量。当 Mojo 能减少重复代码和调优工作时,其核心主张才更有说服力。

生产采用还需要故障数据。团队需要了解编译器如何处理诊断、稳定软件包发生破坏的频率,以及平台回归得到修复的速度。

1.0 版本改进了 VS Code 等编辑器使用的语言服务器。更可靠的编辑器有助于日常开发,但更广泛的工具成熟度将通过长期使用逐渐显现。

Google News 的曝光可能吸引在早期实验阶段试用过 Mojo 的开发者。这些用户应带着现实预期重新审视它。

他们会发现一门更连贯的语言、明确的兼容性方向和更严格的安全检查。他们也会发现一个年轻的生态系统,其中仍有多项重要承诺尚待兑现。

Mojo 1.0 之后值得关注的三个信号

未来几个月将显示,Mojo 1.0 是开启采用周期,还是仅仅完成一个发布周期。

第一个信号是承诺开源的编译器和工具链。Modular 表示这项工作仍计划在 2026 年完成,因此交付将是对其治理承诺最清晰的检验。

许可证和代码库结构将与公告本身同样重要。开发者应考察他们能否构建编译器、审查其组件,并参与具有实质意义的决策。

一次完整且可用的发布,将在 Qualcomm 收购后加强信任。延期或范围受限的源代码发布,则会削弱 Mojo 作为开放、持久基础的主张。

Modular 计划于 8 月 18 日在旧金山的 ModCon 讨论 Mojo、MAX 和开源。具体日期、代码库和许可条款将比再次作出笼统承诺提供更有力的证据。

第二个信号是跨供应商的技术验证。开发者需要得到持续维护的示例,能够在 Nvidia、AMD、Apple、Qualcomm 和 CPU 环境中运行严肃的工作负载。

这些示例应同时报告性能和工程工作量。最相关的证据将展示:在每个目标平台获得必要优化后,仍保留多少共享代码。

这一测试直指 Mojo 与 CUDA 的竞争。当团队主要使用 Nvidia 硬件时,以 CUDA 为中心的 Python 依然难以取代。

当硬件多样性导致重复内核、独立构建系统或不兼容的部署路径时,Mojo 会更具吸引力。它需要公开项目来量化这些节省。

独立研究也应重新审视快速数学和原子操作中已发现的弱点。这些领域的改进将有助于支撑 Modular 的可移植性叙事。

第三个信号是生态系统的持续维护。仅看软件包数量可能产生误导,因为被废弃的实验项目和小型演示并不能构成可靠的基础设施。

更有价值的指标包括活跃发布、跨软件包兼容性、文档质量、问题响应时间,以及能够历经多个 1.x 升级仍持续存在的项目。

开发者应关注规模虽小但稳定的标准库接口,能否在不出现意外源代码破坏的情况下持续扩展。这将检验版本 1.0 所承载的核心承诺。

真实应用会比展示性内核更快暴露缺失环节。网络、存储、数据格式、可观测性、测试和部署工具,都会影响其通用用途。

社区已经产出了超越 AI 内核的库和实验性应用。版本 1.0 为维护者提供了更稳固的基础,以判断哪些项目能够走向成熟。

Qualcomm 的管理方式将影响这三个信号。它可以资助编译器开放性、扩大硬件访问范围,并在不迫使 Mojo 形成单一供应商身份的前提下支持维护者。

它也可能优先发展自身的商业技术栈,而将面向社区的工作置于次要位置。这种平衡将通过代码仓库、发行说明和受支持目标逐渐显现。

对于开发者而言,合理的应对方式既不是立即否定,也不是在整个组织范围内重写。应选择一个对性能敏感的组件,将 Mojo 与当前的生产路径进行比较。

衡量吞吐量、编译时间、部署复杂度、调试工作量和升级稳定性。并在组织所重视的每一个硬件目标上重复测试。

在编译器的开源状态和 1.x 兼容性记录更加明确之前,应保持狭窄的集成边界。Mojo 与 Python 的互操作性正是为支持这种渐进式采用方式而设计的。

Google News 的报道标志着一次合理的转变。Mojo 已从明确处于 1.0 前阶段的语言,进入了要求开发者相信其稳定性的发布线。

如今,证据必须从公告转向得到持续维护的软件。在将 Mojo 1.0 视为不仅仅是一个可信起点之前,应关注编译器发布、跨供应商结果以及生态系统留存情况。

 
 

免费开始

一款本地优先的AI助手,具备个人知识管理功能

为了获得更好的人工智能体验,

remio 目前仅支持Windows 10+ (x64)M-Chip Mac

在你的大脑里添加一个搜索栏

Ask remio

记住一切

​无需整理

bottom of page