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

枫凌 1173

{{ttag.title}}

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 目前还处于相对早期的阶段,我们仍在不断添加核心功能和构建库。”

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

打赏鼓励作者,期待更多好文!

打赏
暂无人打赏

发表新帖
热门标签
全部标签>
安全效果
每日一问
西北区每日一问
【 社区to talk】
技术盲盒
技术笔记
干货满满
产品连连看
新版本体验
信服课堂视频
标准化排查
技术咨询
每周精选
GIF动图学习
2023技术争霸赛专题
功能体验
技术晨报
自助服务平台操作指引
安装部署配置
故障笔记
排障那些事
技术圆桌
用户认证
资源访问
社区帮助指南
通用技术
畅聊IT
答题自测
专家问答
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
原创分享
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
秒懂零信任
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
2024年技术争霸赛
北京区每日一练
场景专题
高手请过招
升级&主动服务
高频问题集锦
社区新周刊
POC测试案例
全能先锋系列

本版达人