//转载:http://freemind.pluskid.org/technology/julia-a-new-language-for-scientific-computing/
节选:
Julia 是一门相对比较新的着眼于科学计算的语言,语法上看起来有点类似于 Matlab 的脚本语言,但是实际上却是从 Ruby、Python、Lisp 之类的语言里吸收了许多有趣的特性。其主页上的描述是
Julia is a high-level, high-performance dynamic programming language…
根据其主页上的结果是 Julia 在这个例子上速度是 Matlab 的 4 倍。但是 Julia 并不是像 Octave 那样要做一个 Matlab 的开源克隆,所以仔细看的话,会发现 Julia 这个语言本身其实和 Matlab 脚本差别非常大的。
从它的定位来看,其主要竞争对手应该是 Matlab、R 和 Python。Matlab 和 R 有一个通病就是代码一般需要用极端向量化操作写出来才会很高效,这里有很多 trick 在里面,我曾经也写过一篇总结提高 Matlab 代码效率的 tricks 的博客,这样造成的后果是:如果可以进行向量化的运算和逻辑,最后会变得“面目全非”,当然这基本上是所有优化的通病;另一个更严重的问题就是有许多算法本身并不能表达成一些矩阵乘法之类的简单线性代数运算,Julia 主页上的 benchmark 列表里前面几项,性能差别成百上千倍的诸如斐波那契数列计算、快速排序之类的。
说起来 Python 虽然应该比 Matlab 和 R 要好一些,但是在这方面的表现似乎也不尽人意。在会被不断地调用很多很多次的那些计算用的代码片段上,经常会被用 Cython 之类的工具来将那一段用 C 重写,或者是使用 numexpr 或者更神奇的 Numba 之类的包来做定点优化,JIT 方面PyPy 似乎也一直在努力的样子。
不过不管怎么说 Python 在科学计算 high-level 语言方面是占据了非常重要的地位的,其中最重要的原因是它无数的各种各样的库所形成的生态圈。所以即使 Julia 拥有各种让人兴奋的新特性并且在性能上各种完败 Python,要取代 Python 也不是一朝一夕的事,或者甚至是永远也不会发生的事。实际上,Python 的生态圈的强大程度,只要看它自己从 Python 2 过渡到 Python 3 都如此地举步维艰就不难理解了。就好像是即使你有三条龙,也必须得寻找盟友才能统一七国……唔,最近好像《冰与火之歌》看太多了,突然就想起来 King Robert 对 Ned Stark 说的“I have a son, you have a daughter”……在这件事情上两个社区似乎已经达成一致,所以最近看到越来越多的合作趋势,包括 Python 和 Julia 的互相调用日趋完善,IJulia 差不多算是一个标志性的“Marriage”吧,就是将 Julia 作为 IPython Notebook 的后端。