我们为什么要创建 Julia

2012 年 2 月 14 日 | Jeff Bezanson Stefan Karpinski Viral B. Shah Alan Edelman

Jeff Bezanson Stefan Karpinski Viral B. Shah Alan Edelman

简而言之,因为我们贪婪。

我们是强大的 Matlab 用户。我们中有些人是 Lisp 黑客。有些人是 Pythonistas,其他人是 Rubyists,还有些人是 Perl 黑客。我们中有些人使用 Mathematica 的时间比他们长出胡须的时间还长。有些人至今还没有长出胡须。我们生成的 R 图表比任何正常人应该生成的都要多。C 是我们沙漠岛的编程语言。

我们热爱所有这些语言;它们都很棒且强大。对于我们所做的工作——科学计算、机器学习、数据挖掘、大规模线性代数、分布式和并行计算——每种语言都完美地适合工作的某些方面,而对于其他方面则很糟糕。每种语言都是一种权衡。

我们贪婪:我们想要更多。

我们想要一种开源语言,使用自由许可证。我们想要 C 的速度和 Ruby 的动态性。我们想要一种同像语言,具有像 Lisp 这样的真正宏,但具有像 Matlab 那样明显而熟悉的数学符号。我们想要一种像 Python 一样适用于通用编程、像 R 一样易于统计、像 Perl 一样自然地进行字符串处理、像 Matlab 一样强大地进行线性代数、像 shell 一样擅长将程序粘合在一起的语言。一种易于学习,却又能令最资深的程序员满意的语言。我们希望它是交互式的,我们也希望它是编译的。

(我们有提到它应该和 C 一样快吗?)

既然我们正在提出要求,我们想要一种提供 Hadoop 的分布式功能的语言——而不需要成千上万的 Java 和 XML 代码;无需被迫筛选数百台机器上的千兆字节日志文件才能找到我们的错误。我们想要力量,而不是难以理解的复杂性。我们想要编写简单的标量循环,这些循环使用单个 CPU 上的寄存器编译成紧凑的机器代码。我们想要编写 A*B 并在一千台机器上启动一千个计算,共同计算一个巨大的矩阵乘积。

我们永远不想在不想的时候提到类型。但是当我们需要多态函数时,我们想要使用泛型编程只编写一次算法,并将其应用于无限类型的格;我们想要使用多重分派,从数十个方法定义中高效地为函数的所有参数选择最佳方法,从而在截然不同的类型之间提供通用功能。尽管拥有所有这些功能,我们仍然希望这种语言简单干净。

所有这些要求似乎并不过分,是吗?

尽管我们认识到自己贪得无厌,但我们仍然想要拥有所有的一切。大约两年前,我们开始着手创造我们贪婪的语言。它还没有完成,但现在是发布第一个[1] 版本的时候了——我们创造的语言叫做 Julia。它已经满足了我们 90% 的无理要求,现在它需要其他人的无理要求来进一步塑造它。所以,如果你也是一个贪婪的、不讲道理的、苛刻的程序员,我们希望你尝试一下。

引用

[1] 这篇文章最初写的是“发布 1.0 版本”,但事实证明,这有点太贪心了:Julia 1.0 直到相当晚才发布.