Python 真的太慢了。Julia 能解决两种语言的问题吗?
作为一种文体,"颁奖演讲"不过是一种形式和琐事。但至少有一个迷人的例外——那些在图灵奖颁发之际由顶尖计算机科学家进行的演讲。有些演讲像宣言:约翰·巴卡斯的《编程能否从冯·诺依曼风格中解放出来?》(1977) 启发了一种新范式,使得像 Haskell 这样的函数式语言应运而生。还有一些是警告:肯·汤普森在他的《对信任信任的思考》(1984) 中演示了带后门的编译器的危险,这很可能防止了大量的安全漏洞。艾德斯格·戴克斯特拉在他的《谦逊的程序员》(1972) 中,敦促同行们谨慎对待聪明才智,承认“人类思维的固有局限性”。就我们的目的而言,考虑肯尼斯·艾弗森在 1979 年的激动人心的演讲《符号作为思考工具》。在其中,他展示了数学符号不仅仅是方便的速记——二氧化碳的 CO₂,数字 3,888 的 MMMDCCCLXXXVIII——它们还使得新的洞察变得易于发现。正如数学家阿尔弗雷德·诺斯·怀特海德曾经所说:“通过减轻大脑的所有不必要工作,一个好的符号让它得以专注于更高级的问题。”艾弗森因 APL 获得图灵奖,APL 是一种看似神秘的编程语言,起初作为一种用于不同语言之间桥梁的符号系统。在科学计算的早期,程序员不得不先用一种语言(数学符号)思考,然后用另一种语言(如 Fortran)编程。APL 旨在使得笨拙的操作可以像方程一样紧凑地编写——代码行压缩成几个符号,如 + 或 ×。最终,APL 证明其影响力大于实际采用,但无论如何:它展示了两种语言可以融合为一体。2026 年标志着自 APL 引入以来的 60 年,而一种新的双语言问题困扰着科学计算领域。主导的编程语言是 Python,但它的统治更多是像一个步履蹒跚的国王,而不是强势的征服者。换句话说,Python 非常慢——这一缺陷即使是它最热心的支持者也无法否认。因此就产生了双语言问题:研究人员在慢而友好的 Python 中进行原型设计,但在对性能要求严格的部分,重写为更快且不那么友好的语言,如 C++ 或 Rust。旋转一队 AI 编码代理也无法解决此限制,因为无论你如何优化一种慢语言,更快的语言将超越它。这些二元权衡在其他领域也存在。可以说,建筑,比如,有一个双材料问题。木材是一种可以用于原型结构的柔性材料——即使是业余爱好者也可以锯木和钉合成一个功能性建筑。但它不适合建造摩天大楼。这引发了一个显而易见的问题:如果有一种材料既可以像木材一样操作灵活,又像钢铁一样强大,会怎样?如果有一种语言既像 Python 一样人性化,又像 C 一样快速,会怎样?2012 年,四位拥有强大数学背景的计算机科学家聚集在一起,旨在解决现代双语言问题。在一篇名为《我们为什么创建 Julia》的简短文章中,他们表示,他们之所以进行这个项目,是“因为我们贪婪。”他们的文章开头像是对编程语言的一封情书:我们是 MATLAB 的重度用户。有些人是 Lisp 黑客。一些是 Python 爱好者,其他是 Ruby 用户,还有 Perl 黑客……我们产生的 R 图表比任何理智的人都应该有的还要多。C 是我们流亡者的编程语言。但是他们写道,这些语言“在工作某些方面是完美的,而在其他方面却糟糕透顶。”尽管他们贪婪,他们希望“有一种开源,宽松许可证的语言……一种极其简单易学,并且能让最认真的黑客也感到愉悦的语言。”Julia 将是那种能够团结他们所有人的语言。我于 2017 年偶然接触到 Julia——在其语法稳定之前的一年——当时我参加了由脑神经科学家塞巴斯蒂安·西翁主讲的讲座,他使用 Julia 来绘制连接组,即大脑神经通路的完整图谱。我的第一印象是它这个令人愉悦、迷人的名字,颠覆了这个领域常见的笨拙命名法:那些不优雅的(PL/I),丑陋的(Erlang),排版上别扭的(C++),以及字面上病态的(MUMPS——如果你能相信的话,它构成了美国医疗保健系统的骨干)。我也能看到,设计 Julia 时经过了深思熟虑。在研究了其他语言所遭遇的许多陷阱后,创造者们从不同语言中采用了精妙的想法——这证明了在开始创造如此精细的事务如一种新语言之前,仔细的观察是必不可少的。截至 2026 年,Julia 已经吸引了一批严肃的成人社区——这不能说是许多语言社区的情况。语言极客群体通常情绪激动,吵吵闹闹(许多友谊因对语法的不同意见而破裂),但 Julia 社区到目前为止尚未因……
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡