写点什么

Mojo 作者 Chris Lattner 谈编程言语的进化

  • 2024-11-12
    北京
  • 本文字数:2481 字

    阅读完需:约 8 分钟

大小:1.13M时长:06:35
Mojo作者Chris Lattner谈编程言语的进化

Mojo,一种新的基于 Python 的模块化编程语言,于 2023 年问世,专为 GPU 和其他加速器而设计。它的官方 FAQ 中提到,“我们的目标不仅仅是打造一个‘更快的 Python’,而是实现一个全新的系统编程层面,提供对加速硬件的直接访问能力”。

 

或者,正如 Chris Lattner 在接受采访时所说的,他们的目标是专注于“如何表达”硬件的全部能力。同时,他们也希望“在用户熟悉的环境中”保持 Python 的风格和体验,因为许多人,尤其是在 AI 领域,都在广泛使用 Python。

 

一种编程语言的演化其实是一个难得的机会,我们不仅可以深入探索语言设计决策背后的逻辑,还可以探究将这些决策聚合在一起的底层哲学。在 2024 年,程序员真正关心的是什么?在播客“Software Unscripted”的第100集,Lattner 分享了他对设计编程语言、编译器以及相关基础设施的见解。

 

播客主持人 Richard Feldman,Roc 编程语言作者,开场便提出了一个关键的问题:现如今有这么多编程语言,为什么还要开发一种全新的语言?对此,Lattner 不假思索地回答:“这本质上是一种解决问题的方式。”

 

Lattner 给出的答案不仅回答了“为什么”,还回答了“做什么”和“怎么做”——为我们提供了对当前整个编程语言生态系统的全面视角。

 

对 Python 的部分演进

 

Lattner 认同 Feldman 的说法,即 Mojo 正在利用 Python 生态系统,同时通过“部分演进”来改进性能。这项工作正在进行中。Lattner 表示,“我们今年秋天的目标之一是能够轻松地使用 Mojo 创建 Python 包”,将 Mojo 的卓越性能带给 Python 开发者。

 

Mojo 将“去除与 C 语言互操作的复杂性,”Lattner 说道,同时提供“与 C 语言或 C++相同或更好的性能。”

 

Lattner 随后说这是一件“自然而然的事情”,因为一个成功的语言社区其规模自然会扩大。“程序员希望将自己的技能向前推进,就会自然而然地将这些技能带入他们想要应用的相关领域。”

 

当然,Lattner 最后也给出了一个更简单的答案:“我们开发 Mojo,因为我们关心 AI、GPU 以及加速器相关领域的东西。”

 

“Python 社区有很多声音是关于‘让原生 Python 变得更快,可以获得 20 倍的加速’等等,但 Mojo 的理念是‘怎样不从 Python 出发却可以让它变得更好’。我们说的是‘挖掘硬件的极限性能’。我们要释放硬件的全部潜能——这不仅仅是,比如,让 int 类型变得很快……还包括加速器、SIMD(单指令/多数据并行处理)以及所有这类东西……”

 

“这取决于具体的工作负载,但我们有一篇博文展示了 Mojo 的性能可能比 Python 快 65000 倍。”

 

“对此常见的反驳是‘在 Python 中,你不需要编写涉及大量数学运算的代码’,但这正是 Mojo 的精髓所在——它让你能够使用一种与 Python 保持一致且连贯的语言编写同样的代码。因此,你无需切换语言!

 

SIMD 支持和第二语法

 

为了提供一流的并行处理支持,Mojo 的 SIMD 语法包含了所有不同数字类型的元素。

 


Lattner 在这里对现代编程语言做了一番评论:“顺便说一句,自 20 世纪 90 年代末以来,所有处理器都支持 SIMD,但为什么没有编程语言去拥抱现代计算机呢?这对我来说一直是个谜。”(随后他再次对“如此多的代码仍然是单线程的”表达了惊讶。)

 

Mojo 还找到了一种提升性能的方法,使其可以超越 Python。“Python 中的整数是大整数,”Lattner 解释说,“你可以创建任意大小的整数,它们是堆分配的,具有引用语义。”Mojo 在语法中保留了 int 这个名称,同时也在标准库中引入了自己的替代类型——Int(大写的 I)。这个 Int 是一个结构体,极大地简化了 Mojo 编译器的工作。

 

尽管 Mojo 仍然兼容 Python 的原始语法,但如果你选择使用 Mojo 的 Int 类型,“你将获得更好的性能和可预测性。它还能在 GPU 上运行,等等。这不是说一个比另一个更好,而是一种权衡。”

 

变复杂,解锁超能力

 

Lattner 说,“一些芯片厂商”决定全力支持包含“虚数”(虚数在技术应用中被广泛使用,比如工程和物理公式等)的数学。“因此,一旦有人将这些技术集成到硬件中,并惊叹‘这比单独进行乘法和加法快了 10 倍’,我们也不得不说‘10 倍的性能提升’——因为他们将这些技术嵌入到了硅片中……那么我们该如何让这一优势为人们所用,而不必让他们深入了解背后的复杂性呢?”

 

Mojo 支持使用复数来定义结构体,这些结构体具备基本的行为和“一系列方法——包括乘法”。如果编译器检测到存在复数加速硬件,并且该硬件支持特殊的快速乘法指令,那么美妙的事情就会发生。“所有使用复数的程序都将获得加速,而开发者无需操心额外的细节。”

 

Mojo 保留了 Python 的运算符重载功能,即自定义操作符默认行为的能力,并保留与 Python 语法的兼容性。最终,许多额外的复杂性都转移给了库开发者。

 

Lattner 提到,他知道有很多编译器工程师,但他想将“人才生态系统”提升到库开发者所在的上游——那些深刻理解自己领域以及知道如何利用 GPU 性能增强手段的程序员。他说:“我的 Mojo 旅程实际上是关于释放这些人的潜力,并赋予他们超能力。”

 

后来他说,这与过去五到十年该领域的“趋势形成了鲜明对比……‘将复杂性嵌入编译器,将其锁定并扔掉钥匙,然后相信我们——我们这些编译器开发者’……但我看到的是,这实际上并不是真的……编译器很少能带来 10 倍的性能提升。但在应用领域工作的人,因为他们了解自己的应用程序——完全有可能实现,因为他们可以使用合适的工具来实现。”

 

最终的结果是,在光数字就有十几种不同类型的领域,“我们能够让人们在库中定义这些类型,减轻语言需要与所有硬件打交道的负担!”

 

Mojo 社区

 

在节目结束时,Lattner 呼吁有兴趣的程序员可以看看 Mojo 的官网及其“丰富的文档资源。Mojo 社区非常活跃!我们有一个 Discord 频道——据我所知,大约有 20000 人,他们在讨论各种话题,共同构建项目。”

 

他还补充了一句鼓舞人心的话:“Mojo 不仅仅是一种 AI 语言,社区还用它来构建 Web 服务器、GUI 库以及各种其他项目。我们非常希望人们能参与进来。Mojo 目前还处于相对早期的阶段,我们仍在不断添加核心功能和构建库。”

 

“但我们拥有一个庞大的社区,他们都非常热情,我希望人们能够参与进来。”

 

【声明:本文由 InfoQ 翻译,未经许可禁止转载。】

 

原文链接:https://thenewstack.io/mojos-chris-lattner-on-making-programming-languages-evolve/

2024-11-12 17:585878

评论

发布
暂无评论
发现更多内容

架构师赋能

will

架构师

食堂就餐卡系统设计

Aldaron

食堂就餐卡系统设计

atlasman

食堂就餐卡系统设计

谭焜鹏

食堂就餐卡系统设计

周冬辉

【极客大学】【架构师训练营】【第一周】学习总结:如何使用UML图达成设计意念

NieXY

极客大学架构师训练营

【Week01】架构师如何做架构

Aldaron

架构师训练营第一周作业

fenix

食堂就餐卡系统设计

Ph0rse

极客大学架构师训练营

第一周架构训练营(就餐卡系统)

Gavin

第一周学习总结

Gavin

架构师训练营-作业一

Jemmy

【极客大学】【架构师训练营】【第一周】 食堂就餐卡系统设计

NieXY

极客大学 极客大学架构师训练营

就餐卡系统架构文档

Geek_bobo

架构学习之架构图设计(1)

Paula_l

食堂就餐卡系统设计

豌豆爸比

架构师训练营(第1周作业)

李德政

极客大学架构师训练营

脑子不够怎么学架构

紫极

闲谈 极客大学架构师训练营

架构学习

呱呱

极客大学架构师训练营 作业

就餐卡系统设计

dongge

如何编写一份合格的架构设计文档(一)

izerone

第一周作业二:学习总结

iHai

极客大学架构师训练营

食堂就餐卡系统架构设计⽂档

一点点..

架构师第一周学习小结

K先生

架构homework1

蜡笔小晗

架构师训练营week1-学习记录

lijia_toby

极客大学架构师训练营

架构师第一课学习总结

曾祥斌

食堂就餐卡系统设计

架构师课程第一周总结

dongge

架构师训练营 第1周作业

Lingjun

极客大学架构师训练营

食堂就餐卡系统设计

桔子

Mojo作者Chris Lattner谈编程言语的进化_编程语言_David Cassel_InfoQ精选文章