谢 @立党 邀。
先吐槽一句,这个问题提问有点引战/撕b的潜质啊- -
所以我这里主要搬运一下MIT Applied Maths/Physics Prof. Steven Johnson 的观点(详见: Introduction to Julia: Why are we doing this to you? )。
首先,相比Python或者Matlab,Julia也属于比较high-level的编程语言。然而在 高性能计算领域 (简单理解:做个矩阵乘法都是一件要计算成本的操作的情况下) Python和Matlab的速度和内存利用率是比较差的 , 在没有Julia之前只能使用C++, Cython这些更low-level的编程语言 。也就是说,编程难度相比Matlab和Python会提升。
具体来说,Julia的定位是,
“As high-level and interactive as Matlab or Python+IPython , as general-purpose as Python , as productive for technical work as Matlab or Python + SciPy ”, but as fast as C ."
翻译一下, Julia和Matlab, Python+IPython有差不多的交互能力,和Python一样是很泛用的,在数值计算的写码效率和Matlab, Python+SciPy差不多,却和C差不多快 。
是不是看起来很牛b?觉得在吹牛?请见如下benchmark的运算速度,julia确实要明显好于Matlab, R, Python, 和C近似。这些算例有随机数乘法,取平均,pi的级数求和,文件输入输出,斐波那契和,快速排序等等。
那么这里Julia的优势就体现出来了, 相比相当optimized的C/Fortran的code,Julia里你只需要比较简单的几行就可以达到类似的效果 。当然,很多Julia的special function就是来自C/Fortran的library...不过也有不少是Julia内部自己实现的。当然你也可以说理论上通过各种巧妙的vectorization/parallelization你同样可以在比如Python里面实现优化,但是对很多特殊函数其实这未必很容易,而且可能你要用的话你就得是那个写library的人。以及, Julia和C, Python的兼容性都很好,可以直接CCall或者PyCall调用它们的library...(Fortran也可以调用)
作为做 优化 的人,Julia的 JuMP包提供了类似Matlab里的YALMIP那样的泛用型优化模型建模能力 。同时,你可以 自由调用各种(商用)求解器 ,如Gurobi, Cplex, Mosek, Knitro, Ipopt, NLopt, SCIP等......同时, 在high-level层面也拥有很大的自由度 ,比如Gurobi的column generation, lazy constraint, user cut, heuristic warmstart等都是可以通过JuMP就可以直接实现的(设各种solver参数就更不必说了)。 这方面我觉得没有其它任何一种语言可以与之相比,除了比较接近的就是Matlab+YALMIP。 YALMIP我大概也是14年开始用,现在完全不需要了。
我并不觉得Julia吸收别人的优点是可耻的。相反, 多种编程语言的互相借鉴/融合可能才是一个更好的编程语言所必须要做的事情 。就比如,我自己就很喜欢利用IJulia(类似IPython)在Jupyter notebook的环境里写Julia code...
当然,作为一个更年轻的语言,Julia作为开源语言也还有不少问题:学习成本(其实真不高...不过有些package的教程不够/文档缺失倒是真的),社群还太小,debug功能还没那么完善,等等。但也如之前所说,它也拥有这些老牌编程语言所没有的优势。我个人来说, 自从用了Julia之后,再也没装过Matlab,Python基本也不用了,C++只有在有很特殊需求的时候(Julia相关package还不完善&我不写"面向对象"很多年了hhh)才会使用 。
欢迎来尝试Julia这门语言。
我其它相关的回答&文章: