我们为什么创造 Julia

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

Jeff Bezanson Stefan Karpinski Viral B. Shah Alan Edelman

本文为重新翻译,参考了2012年的一篇豆瓣文章(链接在最后)。

简单来说,是因为我们很贪婪。

我们中有些人是 MATLAB 的重度用户,有些人是来自 Lisp 的极客,还有些人是 Python 和 Ruby 的魔法师,甚至还有来自 Perl 社区的大魔法师。我们中还有从还没长胡子的时候就开始使用 Mathematica 的。其中有些人现在还没长胡子呢!我们像疯了一样用 R 画了越来越多的图,而 C 是我们的硬核摇滚(也指大杀器)。

我们热爱所有这些语言,它们都非常好且强大。在我们从事的领域(科学计算、机器学习、数据挖掘、大规模线性代数计算、分布式和并行计算)中,每种语言都对某一项工作的特定需求非常完美,但却无法胜任其他需求。因此,使用什么语言都需要我们去权衡。

而我们很贪婪,我们还想拥有更多。

我们想要的是一个自由开源的语言,并且它同时拥有 C 的速度和 Ruby 的动态性;我们想要一个具有同像性(可以将语言的脚本本身当作数据进行处理)的语言,它有着真正的、像 Lisp 一样的宏,但又像 Matlab 一样有着明显且类似于数学表达式的标记;我们想要一个既可以像 Python 一样作为通用编程语言的工具,又可以像 R 一样适用于统计分析,能像 Perl 一样自然地处理字符串,能像 Matlab 一样高效地处理矩阵运算,它还要能像 shell 一样作为胶水将各种程序粘合在一起;我们想要一个简单易学的语言,同时它还能让最苛刻的魔法师们(hackers)感到满意。我们希望它是交互式的,但我们也希望它能被编译。

我们刚才有提到它要和 C 一样快吗?!)

当我们在构思这些需求时,我们发现它还得有 Hadoop 那样强大的分布式能力,但不想有 Hadoop 中那些冗长的 Java 和 XML 模板,更不想被迫在几个 GB 的日志文件和几百台机器里找 bug。我们不想要那些令人费解的层次结构。我们想让简单的标量循环能被编译成仅用寄存器和一块 CPU 的干净的机器码。我们希望简单地写下 A*B 就能在成千上万的机器上用成千上万个运算来计算这个庞大的矩阵乘法。

如果不需要,那就不用声明类型。但当我们需要多态函数(polymorphic functions)时,我们也想要用泛型编程(generic programming)只写一次算法,就能在无限多的类型上使用。我们想要多重派发(multiple dispatch)来为一个函数所有可能的参数选出最佳的执行方法。这些参数可能有着不同的定义、不同的类型,但它们却有着相同的功能。在拥有以上能力的同时,我们还希望这种语言简单、干净。

要求有点多,是不是?

尽管我们意识到了自己有多贪心,我们还是想要拥有这些功能。大概在两年半之前,我们开始创造这种能满足我们贪念的语言。它还没有完工——但已经可以发布一个 1.0 版本了(其实等了 6 年才要发布)——我们创造的这个语言叫做 Julia。它已经实现了我们这次乱七八糟需求的 90%,而现在它需要来自更多人的乱七八糟的需求,来让她走得更远。如果你也是一位贪心不足、不可理喻、需索无度的码场二逼青年,希望你能来试试这个东东。

作者:Jeff Bezanson, Stefan Karpinski, Viral Shah, Alan Edelman
译者:Roger
翻译自:Why we create Julia
参考自:豆瓣:为什么我们要创造Julia

引用