导读:2024 年程序员真正关心的是什么?在《Software Unscripted》专栏中,作者 Chris Lattner 分享了在设计编程语言的职业生涯中的感悟。
根据其官方网站的常见问题解答, Modular于 2023 年推出了基于 Python 的新型Mojo编程语言,其旨在部署语言在 GPU 或其它更好的加速器上。
“我们的目标不仅是创建‘更快的 Python’,而是实现一个全新的系统编程层,包括直接访问并加速硬件。”
Mojo 语言设计师Chris Lattner 这样说道。
他们希望专注于“我们如何表达”硬件的全部功能。但他们也希望“满足人们的需求”——保持Python的外观和感觉,因为很多人,尤其是人工智能社区的人们,都在使用 Python。
随着一种新编程语言的发展,这也是一个很独特的机会,不仅可以探索其语言设计决策背后的逻辑,还可以一起探索最终将它们统一起来的底层哲学。
2024 年程序员真正应该关心的是什么?
在Youtube播客“Software Unscripted”的第 100 集中,Lattner 分享了他职业生涯中设计编程语言和编译器,以及围绕它的大量基础设施的见解。
播客主持人Richard Feldman(ROC 编程语言的创建者)首先提出了一个最大的问题:
为什么是你?在这个有如此多个选择的世界里,为什么要创造一种全新的编程语言?
Lattner 很快地给出了答案:“基本上这只是一种解决问题的方法。”
但事实证明,答案的具体细节——不仅仅是“为什么”,还有“是什么”和“怎么样”——为当今整个编程语言生态系统提供全景视角。
不断改进与替换零件
Lattner 同意 Feldman 的说法,也就是说 Mojo 正在利用 Python 的生态系统,同时“改进替换部件”以全面提高性能。
现在,这项工作仍在在进行中。
“我们今年秋天的目标之一就是让使用 Mojo 制作 Python 软件包变得非常简单,”Lattner 这样说道,部分原因是为了让 Python 程序员享受 Mojo 更高性能的优势。
Mojo 将“减少与 C 互操作的所有复杂性”,Lattner 表示,同时提供“与 C 或 C++ 相同,甚至更好的运行性能”。
但Lattner称这是“自然而然的事情”,因为成功的编程语言社区开始扩大规模。“程序员希望提升自己的技能——当他们这样做时,他们会将技能带入人们想要应用该技术的邻近领域。”
当然,还有一个更简单的答案,Lattner后来表示说。“我们之所以创建 Mojo,是因为我们关心更多 AI、GPU 与加速器的东西。”
“Python 社区中有很多东西都在讨论,比如‘让我们让未经修改的 Python 运行得更快,这样你就可以获得 20 倍的速度提升’之类的事情。但 Mojo 会说,‘我们不会跟从 Python 向前发展,而是尝试让 Python 变得更好一点。’我们说,‘让我们从硬件的光速开始逆向发展!’释放硬件的全部功能 — — 这不仅仅是 int 的速度……还包括加速器和SIMD [用于并行处理的单指令/多数据支持] 以及所有的这类东西……
这取决于你的工作量,我们还有一篇文章显示 Mojo 的速度比 Python 快 90,000 倍。
原文文章与标题在此:
“对此,人们通常会反驳说你这个……‘好吧,你永远不会用 Python 编写进行数学和密集算术的代码。’但是,这正是 Mojo 的真正意义所在——让你永远不会用 Python 编写所有代码。你可以用一种与 Python 连贯一致的语言编写代码。所以,你不必切换编程语言!”
SIMD 支持以及第二种语法
为了提供一流的并行处理支持,Mojo 的 SIMD 支持的语法包含不同数字类型的元素。
请各位来看如下图片:
说到这里,Lattner 停顿了一下,他“尖锐”地谈了一下当今的编程语言情况。
“顺便说一句,自 90 年代末以来,所有处理器都拥有 SIMD——那么为什么没有一种语言能够适应现代计算机呢?我不太明白。”
后来他发现自己再次惊叹“这么多代码仍然是单线程的“。Mojo 还找到了另一种方法来提高其相对于 Python 的性能。
“Python 的整数是大整数,”Lattner 说道,“比如你可以创建一个任意大小的整数,它是堆分配的东西,它是引用语义——所有东西都是如此。”Mojo 在其语法中保留了名称(小写)int,但同时在标准库中包括了自己的替代类型——Int (大写 I)。这个Int是一个结构,将大大简化 Mojo 编译器的工作。
因此,虽然 Mojo 仍然支持 Python 的原始语法,但如果您切换到 Mojo 的 int 版本,“开发者将获得更好的性能,您将获得更好的可预测性。它将在 GPU 上运行,等等新特性。这并不是说一个比另一个更好。这将是一种权衡。”
变得复杂——并释放超能力
我们的现代世界还有另一个新功能。正如Lattner 所描述的那样:
“一些芯片专家”认为,完全支持复数数学(包括所谓的“虚数”,它们广泛用于工程和物理公式等技术应用)非常重要。
“因此,一旦有人将某些东西放入硬件中并说,‘哇,这比单独进行乘法和加法快 10 倍’,你不得不说,‘好吧,10 倍的改进——因为他们将其放入芯片中……我们如何揭示这一点,然后让人们可以在不了解它的情况下使用这些东西?”
因此,Mojo 允许人们使用复数定义结构,具有简单的行为和“新的一系列方法——包括乘法”。如果编译器检测到存在具有特殊快速乘法指令的复数加速硬件,那么就一定会发生好事。“砰!所有使用复数的人都可以加速。他们不必担心这一点。”
借助 Mojo,Lattner 保留了 Python 的运算符重载(即为符号的默认行为编写自定义函数的能力),甚至还使用了 Python 的语法来保持兼容性。但最终,许多额外的复杂性都包给了扩展库开发人员。
Lattner 曾表示,他认识很多编译器工程师,但他希望利用库开发人员所在的“人才生态系统”——那些对自己领域有深刻理解的程序员,以及诸如性能增强 GPU 技巧之类的东西。
“我对 Mojo 的追求实际上是要解锁这些人,并赋予他们超能力。”
然后,他还说,“这在我在过去五到十年间看到的这个领域的一种趋势形成了鲜明对比……‘将复杂的技术融入编译器,将其锁定,扔掉钥匙,请相信我们——我们这些编译器专家已经掌握了它’……因为我看到的是,事实并非如此。……编译器很少能给你带来 10 倍以上的改进。
但在应用程序领域工作的人,因为他们了解应用程序——这完全没问题,因为人们可以使用正确的工具来完成工作。”
最终结果将如何?在偶数有十几种不同类型的领域中,“我们可以让人们在库中定义这些东西……这实际上很棒 - 而且它减少了语言因必须处理所有硬件而产生的压力!”
Mojo 的开发者社区
播客将要结束时,Lattner 呼吁感兴趣的程序员们查看Mojo 的官方网站及其“大量技术文档”。
“我们的社区很棒!我们还有一个 Discord 频道——我认为 Discord 至少有 20,000 多人,都在谈论不同的东西,构建新东西。” Lattner 说。
最后,Lattner 鼓励大家道:“Mojo 不仅仅是一种 AI 语言。它还被开发者社区用来构建 Web 服务器、GUI 库和各种有用的东西。因此,我们欢迎大家参与其中。Mojo 还处于早期阶段,因此仍在添加核心功能并构建新库。
“但我们拥有一个庞大的、充满热情的开发者社区,我很乐意让更多的人们参与进来。”