从 LLVM 到 Mojo:Chris Lattner 谈 AI 时代的编程语言
从 LLVM 到 Mojo:Chris Lattner 谈 AI 时代的编程语言
原视频:That’s good Mojo — Creating a Programming Language for an AI world with Chris Lattner
- 播客:Hanselminutes(主持人 Scott Hanselman)
- 嘉宾:Chris Lattner——LLVM 之父、Swift 最初的架构师,曾在苹果、特斯拉、谷歌担任工程领导职务,现为 Modular 联合创始人
本文由视频的英文原始字幕(YouTube 自动生成)整理而成:已去除时间戳、按说话人分段并翻译为中文,口语内容做了适度润色,个别识别有误的专有名词已修正。
“LLVM 是好东西——我是它的粉丝,但它已经 25 岁了,算不上了不起了。LLVM 是世界上被理解得最透彻的编译器之一,因为有太多人在它上面工作,用途也非常广,但这并不代表它是最好的。从那以后,我一直在做新的编译器——比它好得多的编译器。”
——Chris Lattner
时间戳:
13:15 - Claude 写的 C 编译器与”中位偏见”
访谈全文:
开场
Scott:好,开场很精彩。首先感谢我们的新赞助商 Mailtrap——面向开发者的现代邮件投递服务。它通过 SDK 直接集成进你的代码,事务性邮件和营销邮件统一投递,提供 7×24 小时支持——你联系到的是真人,而不是 AI 聊天机器人。免费档每月有 3500 封邮件额度,今天就可以去 mailtrap.io 试用。
Scott:嘿,朋友们,我是 Scott Hanselman,这里是新一期的《Hanselminutes》。今天和我对谈的是 Chris Lattner。他是 LLVM 的创造者——这套编译器基础设施支撑着现代软件的半壁江山;他也是 Swift 最初的架构师,曾在苹果、特斯拉和谷歌担任工程领导职务,如今他在 Modular AI,专注于下一代 AI 原生编程工具。你好吗,老兄?
Chris:我很好,Scott,很高兴来这儿。嗯,你总算请我来了——也就等了区区一千期吧。
Scott:你对上节目有标准,我能理解。
Chris:其实是我想要”更有成就的嘉宾”,所以一直在等你的维基百科词条再长一点。
Scott:哈哈,行吧。也许今天我们别把你和你的观众得罪得太狠,你以后还愿意再来。能聊的东西确实很多。不过你说得对,这事儿是有点好笑——你七八百期之前就该来了,这 100% 是我的锅,我会把这条反馈提给”团队”——也就是我自己。
Scott:不过我很好奇。我在想历史这回事——我们算是同辈人,都做这行很多年了。LLVM 当初是个研究项目,对吧?你在伊利诺伊大学读研究生的时候,就对这个有股执念。这是一场”长线骗局”吗?你这三十年做的所有事情,都是为了抵达今天这一刻?
Chris:嗯,我不会说那是”骗局”——那是一种热爱。(笑)这是我一生的工作,这么说可能更好听点。
Chris:我算是一种特别的极客:我对计算、编译器、系统、硬件、芯片以及它们如何协同工作非常着迷;但我真正认同的身份是”开发者”。我到现在还写很多代码,你们可以去 GitHub 上围观我。我在乎这门手艺,在乎它意味着什么,在乎开发者的职业成长,在乎带团队,在乎做出点东西——最好还能对世界产生一点影响。我擅长某些事:比如我造编译器,远比写 iPhone 应用或 HTML 页面在行。但这样也挺好,我只是尽力做个有用的人。
AI 时刻:每个时代都在恐慌
Scott:你预见到 AI 时刻的到来了吗?我感觉很多人会说”直到去年十月,AI 才突然能帮我们写代码了”,但我猜你看到这一点,要比去年十月早得多。
Chris:是的,我爱上 AI——或者说被 AI 迷住——大约是在 2016 年,差不多十年前了,这么算我在这行也算个”老人”了。那时苹果的照片应用刚获得识别照片里猫狗的能力,我就想:要怎么写 for 循环,才能判断一张照片里有没有猫?于是我就掉进了兔子洞:什么是神经网络?什么是卷积神经网络?这一切到底是怎么工作的?那也正是我有点倦怠、准备去开拓新方向的时候。从那以后,我一直在追问:AI 是什么?开发平台该是什么样?工具该是什么样?系统该是什么样?我们如何释放硬件的能力?这就是过去十年我的使命——时间过得真快,想想还挺可怕的。
Scott:那你当时觉得,GPT 这类模型能像今天这样写出代码吗?
Chris:嗯,AI 这行有个有意思的地方——如果你身在其中就知道——它永远在变。身处 AI 领域,就意味着你要习惯”不适”:你习惯了周围的一切不停变化,永远不知道下个月会冒出什么新模型、新能力、新演示。ChatGPT 横空出世时是一件大事,我想那是很多人的第一次”觉醒时刻”,他们开始意识到 AI 是真实存在的。但对我来说,ChatGPT 只是按部就班的下一步。(笑)而过去几个月发生的事情是:AI 编程真正登上了舞台,以一种人们没有预料到的方式——但它其实也是一堆指数级积累的汇合。我跟踪 AI 编程已经一年多了,个人日常主力用 Cursor,也在试验一些智能体(agentic)的东西。它能做到的事情令人惊叹,但本质上仍是同一条曲线的延续。我看着它一路累积,而我们所有开发者现在都在纠结的问题是:这意味着什么?我怎样用它才最好?哪些是炒作,哪些是现实?我还有存在的意义吗?这些问题其实不是新问题,归根结底是:我们的目的是什么?如何安排自己的时间?如何更好地使用工具?工具在进化,我们也需要适应。
Scott:说到适应,我想到的是:每个时代都会恐慌。我记得我从汇编转到 C 的时候,一些”老前辈”跟我说:不行不行,你得写汇编,真正的程序员都用汇编。后来我用上了语法高亮,他们又说:那玩意会腐蚀你的大脑,你不能用。再近一点:什么?你居然从 Stack Overflow 直接复制粘贴代码进生产环境?别这么干。最近 Anthropic 发布了 Claude C 编译器,你还就此写了一篇博客——就在我们录制这期节目的前一天。我想我们的看法很接近:如你所说,AI 造一个 C 编译器算不上革命,但它确实告诉我们 AI 现在走到了哪里、正在走向何方。
Chris:是的。先给你的观点”+1”一下:人类确实不喜欢改变。当年我们做 Swift 的时候,有一个我完全没想到的”顿悟时刻”。Swift 发布时,全世界只有大约 250 人知道它——因为苹果的保密文化,连苹果内部的大多数软件工程师都毫不知情。然后一夜之间,它从”根本不在雷达上”变成”苹果要换新语言了”,很多人脑袋”嗡”地一下炸开,那场面挺有意思的。但我没想到的是:既有社区真的抵触它。不是所有人,但尤其是那些精通 Objective-C 的人。他们非常不希望一个新东西登场,因为他们是专家——他们深谙现有工具,别人有问题都来请教他们,他们的职业生涯就是建立在”权威”身份上的。而现在,他们被重置回和所有人一样的起点,变成一个 Swift 新手——这不是他们想要的。反过来说,那些刚接触苹果平台的人、或者才干了半年的人则欢呼:”谢天谢地,现在我终于能做更多事了,简单多了,成长更快了,终于能缩小和老手之间的差距了。”他们并不是反对老手,只是想做成更多事而已。而今天,我看到一模一样的剧本正在上演:很多人持有截然对立的观点——要么说”AI 完全是胡扯”,要么说”天哪,我们都要完蛋了”。但其实有一条中间道路,这两种说法都不对。我们不会因为 AI 而全完蛋,AI 也不是废物。真正的问题是:我们有了这些惊人强大的工具,该怎么用?有些人会否认它,说”这都是胡闹”;另一些人会快速提升技能。那些采纳工具、摸清最佳用法的人——既摸清好的用法,也认清坏的用法,因为这里有大量需要学习的东西——我认为这些人才会快速成长、获得新机会、职业生涯继续上行。这一次的变革如此深刻,它会成为一种新工具——就像 20 年前的版本控制一样。
Scott:深刻——是对所有事情都深刻,还是只对软件工程深刻?你会分层来看吗?
Chris:对软件工程这门手艺而言。我觉得你和我都热爱”构建”这件事。我不认为”做软件”等于”写代码”——写代码只是其中一件事,很多人确实卡在这一步;而我已经到了写代码能进入心流的阶段,语法、在键盘上敲敲打打这些对我来说早已不是挑战——好消息,我算是个”资深开发者”了。但并非人人如此。所以,很多人把”编程”和”写代码”画上等号;可当你跳出来想:我们到底要达成什么?
Scott:我们在构建什么?为什么?”更好”长什么样?架构长什么样?好的设计长什么样?我认为这些问题是纯粹属于人类的,是我们天然要负责的东西。而极端的人会说:”AI 意味着你不需要懂任何东西的原理,AI 会直接帮你写机器码,等 AGI 来了,一切就都……”这种思路完全无视了一个事实:那并没有发生,也可能永远不会发生。我喜欢活在真实世界里。所以我看待当下这个时刻的方式是:我们如何最好地利用这项技术?它确实很深刻,能帮我们加速大量工作。对经验丰富的程序员来说,它让我摆脱了大量机械性的样板工作;对还处于成长早期的人来说,它意味着效率大增、快速弥合差距。
Chris:是的,我是这么想的:如果你抱着”代码即艺术,AI 正在偷走我的艺术”的心态,那确实会以某种方式受伤。我不喜欢 AI 生成的图片,不喜欢 AI 生成的视频,我也不会用 AI 来写诗。但如果诗歌的目的是唤起情感,那我能想象有人在《哲学 101》的课堂上争辩:”我确实唤起了情感啊,用什么方式并不重要。”在我看来,那不是诗歌的意义。
Scott:这取决于你的目标,我不能说所有人的目标都一样。但你写诗的目标是为了拿它挣钱吗?
Chris:如果是,那加速诗歌的生产大概是件好事。
Scott:但那样产出的不就是”诗歌泔水”(poetry slop)吗?
Chris:如果写诗的目标是享受构建、发现和创作诗歌的艺术本身,那就不一样了。这就好比说:嘿,Scott,我是做木工的——用一把手工刨子其实是一件非常有满足感的事;但在量产橱柜的工厂里,你大概不会用它。这不代表一个”好”一个”坏”,关键在于:什么是适合这项工作的工具。
Scott:没错。然后事情就被硬生生掰成了”一和零”——我说的”一和零”是指:要么宜家,要么《新洋基木工坊》,中间什么都没有;要么”代码即诗歌”,要么”AI 泔水”,非此即彼。
Chris:嗯,我觉得我们俩想说的是同一件事:在代码这件事上,我们都是”艺术家”——至少我们自己是这么认为的。而且我们在乎这门手艺。我在乎它其实有两个原因。其一——这也是我认为大家在 AI 讨论中严重忽略的一点:结果并不是唯一重要的东西。在我看来,构建一个软件制品、用代码构建一个东西,并不只是解决今天的问题,而是在对一项技术做投资。软件永远不变的一条真理是:需求一直在变。所以你既需要当下的产出,也需要它能快速演进——适应变化、添加新功能、进入新的经济形态、加上移动端能力……不管你做的是什么。要做到这一点,你需要的不只是”结果导向”——”哦,代码好像通过单元测试了”——你还需要能管理它、与它共事、理解其中权衡、对”在哪里投入、如何实现”有良好判断力的人。而这需要你对事物的工作原理有一种近乎本能的深刻理解。再说回 AI:它非常强大,但它是个工具。它会助长马虎的工作,会助长懒惰,会助长很多非常糟糕的事情。对团队而言,它显然还会助长”浪费队友时间”的行为。
Scott:对——”我写完了这个玩意,你帮我 review 一下吧。”这可不是什么好结果。所以我们需要弄清楚:怎样才算用好这些工具。
Claude 写的 C 编译器与”中位偏见”
Scott:好,那我们把话题放回这个 C 编译器——你最近写的博客就是关于它。你在文章里点了很多我非常赞同的东西,比如”好的软件依赖于判断力”——此刻,人类的判断力似乎是唯一重要的东西;还有”好的品味”,用我们过去的话说叫”代码嗅觉”(code smell)。我就直问了:这是一个好的 C 编译器吗?他们是”一次性生成”(one-shot)了一个 C 编译器,还是事情其实更微妙?毕竟你写了很长一篇文章。
Chris:嗯,它不是 one-shot 出来的。他们两周烧了价值一万美元的 token。所以它显然是一个”智能体集群(agent swarm)+ 迭代”的过程。如果你观察这种”智能体集群朝着一个目标函数构建”的过程,它看起来就像在训练一个神经网络:损失函数就是”有多少测试没过”,然后你在损失曲线上爬山。它好吗?我认为它非常令人印象深刻——就”零人类输入、并证明你可以对齐一个目标函数”这一点而言。但我并不觉得这有多意外,这正是 AI 擅长的事情。你看实际发生的事情:它基本上是把训练集里的 LLVM、GCC 和其他 C 编译器”转译”成了 Rust——它非常高效地运用了 Transformer 的语言翻译能力。但再说一次,它也就擅长这个。我没有看到任何新颖的东西,没有任何一处让我感叹”哇,这主意不错”。没有。
Scott:不过这说得通,对吧?我用 Claude 就有体会——大家都知道,比如 Opus 做出来的网站都是某种特定风格。我给自己的几个网站换了皮,你能看出那种”Claude 味”:他们超爱文字渐变,浅色模式和深色模式都长一个样。我儿子看了我的网站,说”看着很 mid(平庸)”——
Chris:他才 18 岁,那个年纪看什么都是 mid。但”mid”恰好是钟形曲线的中间部分。所以有人说:”天哪,他们偷了 Lattner 的 LLVM,还偷了 GCC 的代码,完全是抄袭。”可事实是——不,那本来就是我们所有人都在用的东西,如果我明天要自己写一个编译器,我也会去看它们。说它”mid”不是贬义,而是说它落在钟形曲线最厚的那个部分,是”意料之中”。如果它真搞出了什么新颖的东西,那才叫意外。
Scott:因为它的训练数据里本来就没有”新颖”,它学的是”标准答案”。
Chris:完全同意。在这个问题上我和你看法一致,而且我还要更进一步:AI 和大语言模型是”分布跟随者”(distribution followers)。它们找到分布的中点,然后迅速地复现。它们可以在受限空间里做点”打引号的创新”,但它们的设计目标本来就是这个。不过,让我再给你一个更犀利的观点:LLVM 是好东西——我是它的粉丝,但它已经 25 岁了,算不上了不起了。沿用一项 25 年前的编译器技术,其实没那么酷。LLVM 是世界上被理解得最透彻的编译器之一,因为有太多人在它上面工作,用途也非常广,但这并不代表它是最好的。从那以后,我一直在做新的编译器——比它好得多的编译器。
Scott:好,这个观点很有意思。而且这里有个值得玩味的地方:AI 有一种”中位偏见”(mid bias)——”是的,我就用过去 25 年的成果”。但它没有发现、也没有去思考 Mojo、没有去思考你在做的工作,这难道不值得玩味吗?为什么它没有走向 MLIR 这些新得多的东西呢?
Chris:这里还有个非常有趣的巧合:LLVM 社区正在积极地把一个叫 getelementptr(GEP)的东西从 LLVM 中移除,而它却完完整整地出现在 Claude C 编译器的设计里。所以你可以往前推演:那些主动拥抱”基于大模型的代码生成”、却放弃了判断力的团队,真的不会被拖后腿吗?因为他们甚至不会站在技术的前沿——我不知道,大概不至于落后 25 年,但他们拿不到最好的技术,也就拿不出最好的产品。
Scott:是的。不过我认为这里有个”调和因素”:并非所有软件都需要成为”业界最强”或”行业领袖”,它只需要”有效”。所以各种东西都有生存空间。而且可以说,他们有一个非常明确的目标,有一整套测试摆在那儿——就像你在博客里说的,这就像一群优秀的本科生组队完成的大作业,能拿个 B 之类的。确实挺不错的。
Chris:其实我觉得他们能拿 A,工作量确实不小。但是的,作为一个人工制品(artifact),它超级有趣。可是当人们直接跳到”末日降临、人类作废”这种结论时,那显然是夸张,我认为没有建设性,而且会分散我们对真正价值的注意力。
Scott:我同意。每次某个总统或者某个亿万富翁说”所有这些岗位 12 个月内都会消失”,这种话对任何人都没好处——而且没有数据支持。
Chris:没错。事实上,现在的程序员比以往任何时候都多,就业市场其实相当火热。很多人很焦虑、有很多疑问,这我理解,但更重要的是往前看。还有那个”等 AGI 来了会怎样怎样”的问题——你可以尽情推测,但 AGI 还没有发生,甚至没人能定义什么是 AGI。(笑)我认为从现在到那个理论上的未来之间,还有大量工作要做。
Scott:是啊。那”下一个 token 预测”及其背后的一切,最终会把我们带向一个真正聪明的、可以与之对话的家伙吗?
Chris:也许吧。但我还是那个观点:AI 在弥合差距。如果你不知道什么是基数排序,不知道某个冷门数据结构,不知道什么是 B 树——没关系,你可以说:”嘿,AI,我有个问题,最好的解法是什么?”它能给出某个精妙的数据结构,也许你闻所未闻——它神奇地把你托举起来,补上了你不懂的东西。这无比强大,能带来好得多的软件。所以它不是胡扯,但也不是魔法。你要找的正是这个”分寸感”。
Scott:说得好。我总喜欢”滥用” Arthur C. Clarke 的那句话:每多一层抽象,就与魔法无异。而现在的技术栈已经深得吓人了。如果你是一个 React 程序员,世界对你来说就是魔法,你甚至可能不知道 V8 这个东西的存在。大家老笑话我玩我的 Altair 和 PDP-11 老爷机,但那是我保持”接地”的方式——就像你做木工而不是去逛宜家一样,那是你保持接地的方式。
Chris:没错。模拟世界也很酷,了解事物的工作原理也很酷。
Scott:而且当你不懂事物原理的时候,看什么都像阴谋论。(笑)
超越 CPU 的世界
Scott:还有一件值得注意的事:他们(Claude C 编译器)的目标是 CPU。但我知道你认为,我们如今未必活在一个以 CPU 为中心的世界里——外面有那么多性能强悍的 GPU,能与它们”对话”的方式却少得可怜,而你要破解这个问题。
Chris:是的。再往外推演一层——先忘掉 AI,回到人类。
Scott:因为我承认我还挺喜欢人类的,不知道你怎么想。总的来说,我认为人类才是这里更重要的部分。
Chris:嗯。而很多程序员一心只扑在 CPU 上。CPU 很酷,非常重要,跑着海量计算。但数十亿美元的资本支出并没有流向 CPU,重大进展也不发生在那里。发生的事情是——你可以用不同方式标注这个节点——摩尔定律终结了。我们不再像当年那样,免费获得单核单线程的 CPU 性能提升。于是我们从单核到双核、四核,现在一部手机有八核——”哇哦”。但现在 GPU 有成百上千个核心,还有为特定负载设计的 ASIC。告诉你吧,Rust 可跑不到 Cerebras 的系统上,没这回事。回到 2016、2017 年,对我来说不只是”AI 很有意思”,而是变成了”怎样才能有效地做这件事”。当年我被 AI”点化”,是因为那些只有 AI 才能做到的事——从识别猫狗开始——然后它变成了一种非常有趣的计算形态。而有一件事一直明晃晃地摆在那里,我整天盯着看,却很少人看到:把 C 代码重写成 Rust 也许很好玩,但这并没有真正推动世界前进。与此同时,我们拥有所有这些疯狂的 GPU 和算力,却没人知道怎么给它们编程。所以我的当前使命就是:把它撬开,让它变得触手可及,让工具真正好用、令人愉悦。顺便说,即便是 CPU 也复杂得离谱:向量 SIMD、CPU 上的张量核,诸如此类。而大多数编程语言甚至连 float4、float8 都”不会拼”。如果你用的是 15 年前的语言——至少我参与过的 Swift,还有 Rust、TypeScript,基本都是 2010 年前后诞生的——那你打算怎么给现代硬件编程?对 GPU 是这样,对 CPU 也是这样。这里没有好答案。所以我认为,我们所有人都将受益于正视并解决这个问题。这就是我当前的使命。
Scott:这就引到了 Mojo、Modular 和你们在做的事情。希望我能把这个问题问好——因为我自己的”个人上下文窗口”还很有限,正在努力看清全局。我先前开玩笑说你的”长线骗局”,那是褒义的。我说的”长线”是指毕生事业:你仿佛能望见隧道尽头。你构建了 LLVM,又有了 MLIR——多层中间表示,它不是 .NET 的中间语言,也不是字节码,而是一种混合型中间表示,可以有多种不同的表示形式,还能面向特定硬件。所以,你当时就知道自己在搭建一级级台阶,然后踩着它们往上走,并清楚自己要够向哪里吗?这可是一长串台阶。
Chris:25 年,过得比你想象的快。
Scott:但回头看能说”一切尽在我计划中”——你懂我意思吗?因为你们在 MLIR 之上构建 Mojo,而 MLIR 又是 LLVM 生态的一部分,一环扣一环——真是深思熟虑的”乌龟叠乌龟,一路叠到底”。
Chris:嗯,我的旅程该怎么形容呢——就是对现状永不满足,我一直在往前推自己。我离开苹果的部分原因就是”无聊”——不再兴奋了。我想要学习、成长、做新的事情。苹果团队很棒,我爱那个团队、爱我的职位、也爱 Swift,这些都很好。但外面还有一整座正在发生和变化的世界,所以我一直在进行这场”把事情搞清楚”的征途。至于 AI,我觉得我终于明白”计算”到底是怎么回事了。
Chris:就是现在,十年磨一剑。我们需要的是”AI 芯片时代的 LLVM”,基本上就是这样。我们需要一种能为所有硅片编程、并能规模化扩展的方式。它需要简单易用、让人熟悉;需要让人们能够真正采用它——这意味着好工具、好体验、易上手,所有开发工具该具备的品质,都要在它自己的语境里成立。而这段旅程、这座桥梁,就是”世界上最好的 CPU 编程方式”——因为那是所有人当下所在的地方。比如很多人都在用 Python 和 C++,这是现实。但恕我直言,这些东西其实也都没多好。所以,如果你能在他们所在的地方接住他们,把他们托举起来,再带他们上 GPU、上 ASIC,给出一条渐进式的路径——我相信我们真的能够撬开这个巨大的计算难题。我的核心假设多年来一直没变:无论往后看哪一个五年,计算只会变得更”怪”——更专用、更异构、更混乱、更碎片化。所以我们程序员这个群体,必须拥有构建它、使用它的能力。你不会想用 52 家厂商的 52 个互不兼容、各说各话的编译器。举个具体的例子:我拿到一台全新的 Windows ARM 笔记本时特别兴奋,想着”我要用它征服世界”。结果:好,我写点 Python,做点计算机视觉——哦,我顺手还得带个 C 编译器上路;哦,这个编译器不支持 ARM;哦,这个 wheel 包又不行……兄弟,我只是想做一件事而已——我就想判断”这是不是热狗”(美剧《硅谷》的梗),这本该只是个 Hello World 级别的东西。然后突然之间……
Scott:……抽象层就”漏”了。因为用的是新处理器、新 NPU、新什么玩意,你就得同时耍弄 Python、C#、Rust,还得满世界找 CUDA 在哪。就像你说的:一切好使,直到它不好使。这就是那些深不见底的层层抽象堆叠的问题:没有一层知道别的层是怎么工作的。演示的时候美轮美奂,一做”出格”的事就土崩瓦解。我给你打个比方——你和我来自同一个年代:大多数人都忘了 GCC 出现之前的世界是什么样子。
Chris:哦,是的。
Scott:对吧(笑)。他们不知道 autoconf 是什么,也不知道它为什么存在。只要回到那个年代,每家造 CPU 的公司都有自己的 C 编译器。
Chris:是的。
Scott:他们那时可没有 AI 帮他们写。于是就有了 DEC 的 C 编译器、Sequent 的、Borland 的、Sun 的、SGI 的、HP-UX 的……各种各样的 C 编译器。C 语言那时候甚至还没有真正标准化。
Chris:当时大家对”C 是什么”只有一个模模糊糊的共识,所以这些编译器互相之间根本不通。真正推动世界前进的是 GCC 的登场:它免费、可移植,以”焦土之势”扫平了那些专有软件的胡闹,统一了世界。正因为有了它,Linux 才成为可能——整个生态爆发出了活力和能力,因为人们终于可以继续过日子,甩掉那堆稀奇古怪的垃圾。而今天的硬件领域,我看到的是一模一样的景象:每家硬件厂商都在出于无奈构建自己的软件栈。他们并不是真的想做这些——这件事又难、又贵、又慢。有些厂商做得比别家好一点,但彼此全都不兼容。尤其是在 AI 和 GPU 领域,每个厂商多少都想抢英伟达的午餐,但 CUDA 跑不到他们的芯片上,他们的东西也跑不到英伟达上。所以我们的”顿悟时刻”是:要撬开这个问题,需要好几个因素同时到位。一是技术层面:能面向 GPU、释放硅片的全部性能、从 CPU 扩展到 GPU,诸如此类。二是激励结构:你需要一个像 Modular 这样的组织——不绑定某一款芯片、不绑定某个超大规模云厂商、不绑定某个大模型、不绑定某家自动驾驶公司。
Scott:我要替观众确认一下:你说的是 Modular,专有名词,你们公司的名字,而不是”一家模块化的公司”。
Chris:对。公司之所以成立,是因为我们需要解决”聚齐一支能构建这些东西的团队”的问题。但随后我们还要解决另一个问题——经济问题:这是一个非常难啃的问题,你需要一个很大的团队、很多年的时间。
Scott:你的言下之意是:你们不在英伟达这类公司的”口袋”里——他们本来能提供所有这些资源,但那样的话,默认选项就会变成英伟达的芯片。
Chris:没错。拿我自己来说,我在谷歌时就试图破解这个问题,在那里做 TPU、扩展他们的软件栈,学到了海量东西。团队很棒,人也很棒,而且这里没有什么”阴谋”——谷歌对开源非常友好,MLIR 正是我们在那里构建并发布、然后捐给 LLVM 的。谷歌在很多很多方面都很了不起。但和任何公司一样,他们有自己的优先级、有自己的内部负载;当然,你最优秀的人总会被吸进”当日救火”里去。而且当时他们每六个月一次的绩效评估周期,让”周期超过六个月的项目”很难立得住——对上难交代;更重要的是,对任何想拿好评、想证明自己对关键负载有影响力的人来说,都很难。所以我发现,在那里要做成这类工作极其困难。我是个相当固执、相当”牛脾气”的人,所以最终还是把 MLIR 做出来了,也为 TPU 做了新的运行时——那个叫 PJRT 的东西,是 JAX 等一切的底座——为他们的软件栈做了一些超越现状的重要贡献。但整个过程非常非常非常艰难。所以,当你想做一件”根本性跃迁”级别的事情——无论是语言、系统,尤其是在 AI 领域——这就是一个相当现实的挑战。
Scott:嗯。你当时完全可以”抄近路”:随便挑一门语言,做个”Rust++”,或者搞个”超级 Swift”。但你没有。
Chris:没错。
Scott:因为它们全都是为 CPU 设计的——2010 年大家构思这些语言时,所有人手里只有 CPU,所有人想的也只有 CPU。
Mojo 的诞生与现状
Chris:讲个有趣的故事。我们创办 Modular 时——到现在四年多了——我和我的联合创始人互相看着对方说:”我们绝对不做编程语言。全世界都知道做语言是个糟糕的主意。”我们有一大堆事要做:统一计算、释放所有算力、让它普惠所有人,这个大使命已经够重了,做语言是公认的坏主意。于是我们花了将近一年做硬核的运行时:底层线程池、异步通信原语;然后扎进”如何生成高性能 kernel”,先面向 CPU——当时的命题是:如何在英特尔自家的芯片上,追平乃至击败 Intel MKL 和英特尔的库?我们必须做到,还必须证明它能大规模泛化。为此,我们从第一性原理出发,基于 MLIR 构建了一大堆非常花哨的编译器技术——从一个空的 git 仓库开始,构建了全新的构造,证明我们能够生成高度参数化、非常强大、非常高杠杆的抽象,用来生成高性能矩阵乘法之类的算法。但紧接着就撞上一个问题:没人想手写编译器 IR——那真的很痛苦,是个非常糟糕的主意。于是我们说:”好,那我们去’购物’吧,看看想要什么语法。”我确实看了 Swift,看了 Rust,也看了 Clang——这些系统我都很熟。但正如前面说的,它们不解决问题。比如说:我们怎么把所有浮点数据类型加进 C 里?AI 领域光 float8 感觉就有七种形态,还有各种新形态的 float4、bfloat16……而且演化速度快到你不可能不停地往编译器里硬编码。所以很明显,我们需要”库级可扩展性”。于是 Mojo 最终的样子是:几乎所有东西都在库里,而不是在编译器里。我们还需要跨得动”可预测性”“编译期性能”这些在大规模下真正影响开发者体验的东西。我们考察过的那些 Python DSL,都实在无法令人满意。所以,尽管一百个不愿意,我们整个团队最后还是看着彼此说:”好吧,做一门语言的工作量确实巨大,但它也不是火箭科学——我以前做过。Swift 算是个好东西,但 Swift 也有很多’坏的部分’,就像 LLVM 一样。我们可以从经验中学习,做真正推动世界前进的事。”虽然这将是一段漫长的旅程,但我们认为,计算的未来、所有这些架构的未来如此重要,值得这笔投资。
Scott:是的。我的直观感受是:今天你想做成一件事,就得在各种语言之间来回跳——先用 Python 做原型,再用 C++ 和 CUDA 重写,然后做一堆绑定,最后维护两套代码库。所以我这个”键盘教练”的事后分析是:你想要 Python 的人体工学,想要 C/C++ 的性能,喜欢 Swift 式的安全性,同时还需要感知十年前根本不存在的东西——比如 AI 硬件。
Chris:所有这些加在一起;而且顺手还要引入一些很酷的新想法,比如线性独立类型(linear independent types),引入好得多的所有权和内存析构行为,诸如此类。让我们推动世界前进。再说一次,大家喜欢盯着 Rust 的所有权不放,但 Rust 已经 15 岁了——它对它所做的事情来说很美妙,但它不是”最好的东西”。
Scott:有意思。好,那我的问题是:这听起来是一个”愿景”,而愿景往往要等很多年——它是不是要再过五年、十年才能出来?我到底什么时候能真正用上它?
Chris:它今天就存在。很多人已经在实际使用它了,而且上了生产环境,这很酷。
Scott:已经上生产了?太棒了。
Chris:哦是的,我们有客户的工作负载在跑这些东西,这不是纸上谈兵。今天你就可以运行 Mojo:pip 安装一下,就能跑在各种 CPU 上,也能跑在树莓派之类的嵌入式设备上。它能跑在英伟达 A100、H100、B100 和一大堆消费级显卡上,能跑在 AMD 的 MI300、MI355 和他们的 RDNA 消费级显卡上,也能跑在苹果 GPU 上。我们还有其他东西稍后会公布——但这不是理论,它真的能工作。
Chris:而且最酷的一点是:把镜头拉回现代世界和 AI——不仅”做得到”这件事成立了,我们还统一了 GPU 的编程模型。
Scott:这太重要了,因为这显然不符合英伟达的利益。
Chris:没错。也不符合其他任何厂商的利益——说实话也不符合苹果的利益。这就是”硬件公司问题”。
Chris:我们还拥有我认为现存最大的开源 kernel 库:所有矩阵乘法跑在所有这些硬件上,超过 50 万行 Mojo 代码,而且现在可以被 AI 索引了。AI 最酷、也最擅长的事情之一,就是把东西 A 翻译成语言 B。事实证明,如果你有跑在 CPU 上的 Python 代码,我们已经有用户对着 Claude 的 skill 说”把它搬到 Mojo 上”,然后拿到了 100 倍、甚至 1000 倍的加速。
Scott:真的假的?而且你们还有 Python 互操作,对吧?可以把 Python 对象直接传给 Mojo 函数?
Chris:是的,而且就是好使。这也是因为 Mojo 是为现代语言、现代 CPU 设计的:它有非常强悍的 SIMD 向量支持,原生多核。所以你可以直接对 AI 工具说:”嘿,你能让这个更快一点吗?”它会说:”哦,好,我帮你向量化一下;哦,我帮你并行化一下。”因为所有这些抽象都在那里,结果就是它把你的代码”升级”了,而你还能看懂它——这非常酷。所以我们正处在一个不同的时代:AI 能做的事情和语言能做的事情之间的这种协同设计(co-design),和五年前相比是完全不同的动力学。
Scott:是的。对普通一线开发者来说,世界就是”CPU,加上我电脑里那些神秘的芯片”。能解锁它们、用它们做点事情——哪怕是笔记本上的 TPU、NPU——将会是巨大的变革,因为它们现在太”黑盒”了。一旦你动念头”我要学 GPU 编程”——祝你好运吧,朋友。
Chris:是的,那一点都不好玩。
Scott:有兴趣的话,可以去 Modular 官网上的 GPU Puzzles,我们会教你怎么给 GPU 编程。有了像样的、互相配合的工具,它其实没那么难。
Mojo 1.0 与寄语
Scott:好了,现在让我来说说 Mojo 的”坏消息”。
Chris:好。Mojo 的坏消息是:它还不稳定,我们还没有到达 1.0。到现在我们已经构建了差不多四年。它已经很酷了,人们看到了惊人的成果,很多人热爱它。但是——我又背负着”想做出真正好的东西”的执念:不只是结果,还有设计,还有可扩展的能力,还有”使能新事物”、并能经受住未来 10 年、20 年、甚至 30 年计算变迁的能力。所以我们对此一直非常谨慎、非常克制,也一直以开放的方式构建。我们现在要说的是:是的,我们会修复问题、会做出改变,会全神贯注地冲向 1.0 和稳定版。而让我无比兴奋的是:它快到了。到四月、五月,我想我们会有 1.0 beta。真的不远了,这很令人兴奋。然后我想我们会宣布 1.0,并开源编译器的其余部分,大概在八月、九月前后。
Scott:这将会是个大年份。
Chris:很快了。团队正在为此拼命努力。我想我们都意识到,这对社区将是一个多么重大的时刻——社区里已经有一群很棒的人在做出很棒的东西,但我们不想让他们被不断的变更折腾得精疲力尽。(笑)所以,”稳定”这个节点对我们整个社区都会是件大事。
Scott:非常酷。Mojo 1.0 即将到来。大家可以去 puzzles.modular.com,那里有一个很棒的八部分教程系列,跟着做就能用 Mojo 上手 GPU 编程,今天就可以开始,为接下来一两个月到来的 1.0 做好准备。这太令人兴奋了。非常感谢你今天抽出时间和我对谈。
Chris:和你聊天太棒了,Scott。我热爱你的工作,你是个传奇。我还要说:所有这些东西都是免费的,所以请务必加入我们的开源社区。我热爱开发者,热爱看到人们创造出的奇妙事物——回到开头说的,在人类体验中我最在乎的,正是”创造”这件事本身:能做出一个东西,并为它骄傲,说出”这是我做的”。而且我想,外面还有很多人在问:”在这个不确定的未来里,我该怎么办?”
Chris:对吧?”我是不是继续建昨天在建的东西就好?”我认为这是一个绝佳的”躬身入局”的机会——这里有令人惊叹的计算形态,有所有这些新工具和新技术。现在是学习 Mojo、或者任何属于你的新技术有史以来最容易的时候。所以我真诚地鼓励大家:走出去,尝试新事物。
编者点评:关于 AI,哪些判断成立,哪些需要修正?
本节为编者点评,不属于以上访谈的原始内容。以下判断依据截至 2026 年 9 月 10 日可查到的公开资料。访谈中的价值偏好——例如是否喜欢 AI 诗歌——没有客观对错;这里主要核对技术事实,以及一项结论是否被现有证据充分支持。
基本正确的观点
-
AI 编程既不是“胡扯”,也没有让软件工程师失去价值。 Claude C Compiler 确实展示了智能体在大型代码库中持续拆解任务、运行测试和迭代修复的能力,但 Anthropic 自己也明确说它还不能替代成熟编译器:生成代码的效率甚至低于未开启优化的 GCC,Rust 代码质量也达不到专家水平。这更像是“工程参与能力”的跃迁,而不是“软件工程已经被解决”。Anthropic 的实验报告
-
目标越清晰、反馈越可验证,当前智能体越容易发挥作用。 “能否编译”“测试是否通过”“性能是否提升”都能形成快速反馈,所以编译器非常适合这种实验。真正值得注意的并非模型独自完成了一切,而是“模型 + 测试工具 + 反馈循环”可以把大量实现工作自动化。Lattner 对这一点的判断是准确的。
-
通过测试不等于拥有好的软件设计。 可维护性、错误处理、抽象边界、安全性和长期演进能力很难由单个测试分数概括。Claude C Compiler 会为测试硬编码系统接口、解析器错误恢复较弱、代码生成器结构欠佳,这些都支持 Lattner 所说的“仍需人类判断力”。2025 年 Stack Overflow 调查中,也有 46% 的开发者不信任 AI 输出的准确性,最常见的问题是答案“几乎正确,但并不完全正确”。Stack Overflow 2025 Developer Survey
-
AI 擅长复用成熟模式,也确实可能让产出趋同。 大模型从海量既有代码中学习,因此在常见任务上优先给出主流架构和惯用写法并不意外。研究也观察到:模型可以在某些创造力测试中取得较高分,但不同采样之间的答案往往比人类答案更相似。这支持“中位偏见”作为风险提醒,而不是严格的模型定律。Scientific Reports 的大规模比较
-
AI 能降低获取知识和实现代码的门槛。 它可以解释陌生数据结构、生成样板代码、辅助迁移和并行探索方案。但收益取决于使用者是否能提出目标、验证结果并在失败时纠偏。对约 40 万次 Claude Code 会话的分析显示,领域知识越强,任务成功率越高;AI 没有消除专业知识的回报。Anthropic 关于专业知识与智能体使用的研究
错误、证据不足或表述过度的观点
-
“两周花了一万美元 token”是事实错误。 Anthropic 公布的数据是接近 2,000 次 Claude Code 会话、20 亿输入 token、1.4 亿输出 token,总成本接近 2 万美元。Anthropic 的实验数据
-
“零人类输入”不准确。 更准确的说法是“很少进行逐步人工干预”。研究者设计了循环与并行协作框架,规定编译器采用 SSA IR,挑选并改进测试套件,编写 CI 和 GCC 对照工具,还为智能体分配代码质量、性能和文档等角色。模型完成了绝大部分实现,但人类搭建了目标、约束和验证环境。
-
“Claude 把训练集里的 LLVM、GCC 转译成 Rust”是未经证明的推断。 成品的 IR、
GetElementPtr、Mem2Reg等设计明显受到传统编译器影响,但“设计相似”不能证明具体代码存在于训练集,更不能证明模型进行了逐段转译。实验运行时没有联网,模型的完整训练数据也未公开。可以说它复用了成熟的编译器知识,不能把“直接翻译 LLVM/GCC”当成已证实事实。 -
“大模型找到分布中点,训练数据里本来就没有新颖性”说得太绝对。 下一 token 预测会让高概率模式占优势,但输出还受采样、提示、工具、搜索和后训练影响。已有盲评实验发现,LLM 生成的研究想法在特定任务中被评为比人类专家的想法更具新颖性,同时可行性稍弱、内部多样性不足。因此,更准确的结论是:大模型容易趋向既有模式,稳定地产生真正有价值的新抽象仍然困难;但不能由训练目标直接推出“它不可能产生新颖结果”。100 多名 NLP 研究者参与的盲评研究
-
“AI 会让新手迅速弥合与老手的差距”只对了一半。 AI 能缩小“把代码写出来”的差距,却未必缩小理解、调试和设计能力的差距。一项针对 52 名开发者的随机实验中,AI 组完成任务只快了约两分钟,差异不显著,随后测验成绩却低 17 个百分点;只让 AI 代写或代为调试的人掌握得最差。把 AI 用来追问概念和验证自己的理解,效果才更好。Anthropic 的编程技能形成实验
-
“AI 会让各阶段开发者效率大增”没有普遍证据。 METR 在 2025 年对资深开源开发者的随机对照实验中测得,使用当时的 AI 工具反而让完成任务的时间增加 19%;其 2026 年后续数据暗示新一代工具可能带来加速,但由于参与者和任务选择偏差,研究者认为还无法可靠估算幅度。效率取决于模型、任务、代码库熟悉度和工作方式,不能从几个成功案例推广到所有开发活动。METR 早期实验、2026 年更新
-
“程序员人数创新高”与“就业市场火热”不能画等号。 GitHub 在 2025 年报告平台开发者账户超过 1.8 亿,确实支持开发者群体仍在扩大;但这不是就业人数统计。Indeed 的美国数据则显示,软件开发职位在 2025—2026 年间反弹近 15%,却仍比 2020 年 2 月低 27.5%,而且 71% 的增量来自高级职位。用“回暖但分化明显”比“相当火热”更准确。GitHub Octoverse 2025、Indeed Hiring Lab
-
“用户把 Python 搬到 Mojo 后获得 100~1000 倍加速”缺少可复现证据。 对纯 Python 热点改用 SIMD、多核或 GPU,出现几个数量级的加速并非不可能,但幅度高度依赖基线、算法、数据规模和硬件;如果原程序已经调用 NumPy、PyTorch 等优化库,通常不会凭语言迁移自动获得这种提升。访谈没有给出可复现代码和测试条件,因此这个数字只能视为用户案例,不能当作 Mojo 或 AI 转译的一般性能保证。Mojo 官方文档也仍将 Python 调用 Mojo 的绑定标为 beta 功能,并列出了多项限制。Mojo 的 Python 互操作文档
-
“没人能定义 AGI”是修辞,不是事实。 业界确实没有统一、可操作且被普遍接受的 AGI 判定标准,但并非没有定义。例如 OpenAI 将其定义为“在大多数具有经济价值的工作上超越人类的高度自主系统”,Google DeepMind 则提出了按能力广度、表现和自主性分级的框架。正确说法应是:AGI 有多种竞争性定义,目前缺乏共识和公认的测量标准。OpenAI Charter、Google DeepMind 的 AGI 分级框架
-
“架构、设计等问题纯粹属于人类”是当前责任分工,不是已经证明的能力边界。 现有智能体已经能参与方案比较、设计审查和重构;Claude C Compiler 实验里甚至专门安排了智能体批评整体 Rust 设计。今天仍应由人类承担目标选择和最终责任,但这与“AI 原理上不能参与架构设计”是两回事。把它表述为工程治理原则是正确的,把它表述为永久能力定律则证据不足。
综合结论
这场访谈最可靠的核心不是某个加速倍数,也不是对 AGI 时间线的判断,而是一个工程原则:AI 降低了实现成本,却没有自动消除验证、设计和责任成本。 当前最有效的用法,是让 AI 承担可验证的实现、迁移和探索工作,让人负责目标、约束、架构与最终验收。反过来,如果团队只追求“测试绿了”而不理解生成的系统,AI 不仅可能放大生产力,也会更快地放大技术债。
Enjoy Reading This Article?
Here are some more articles you might like to read next: