充满野心的Julia成功了吗?

前言:

程序员10年心血,超过700人做出贡献,还有更多人创造了成千上万的开源包,Julia最终是否完成了他们的目标?今天我们就从速度、动态静态系统类型、矩阵运算以及语言灵活简洁性四方面来谈一下Julia的性能。

Julia是快速的

15年《Journal of Economic Dynamics and Control》上发表了一篇文章,这篇文章对当时的几种主要编程语言的运行速度进行对比,包括C++、Fortran、Java、Julia、Python、Matlab、Mathematica、R等,作者在每种语言中使用相同的算法、分别测量不同语言在Mac和windows系统上的运行时间。
最终结果如下Table 1所示,Julia的表现是非常出色的,尽管他的速度没有达到C++的水平,但是mac和windows上的速度也仅仅是C++的2.64和2.7倍。
可见Julia的运行速度确实还不能达到C的速度,但是与Matlab的10.88和8.92倍、Cpython的269.31、155.31倍、R(compiled)的280.90和243.63以及Mathematica的809.22和626.19倍相比,Julia就显示出了它的速度优势。尽管Julia的速度并没有达到C的速度,但是相比许多其他语言,Julia是具有明显的速度优势的。
在这里插入图片描述

而18年正式发行了1.0版,速度更是有所提高,oschina(开源中国)上显示标准测试程序测试下的效率数据如下表所示(表中C++的运行时间是绝对时间,其他都是相对于C++的相对时间),可见Julia的效率也是极好的,尽管大多数运行速度还不如C++,但是相对其他语言,除部分略逊色于Matlab或者JavaScrip外,Julia都完胜其他高级语言,甚至pi summation上,Julia成功以25%的优势击败C++。可见Julia是快速的。
在这里插入图片描述

Julia是动静结合的

静态类型系统,在程序运行之前,就可计算每一个表达式的类型;而动态类型系统,我们只有通过运行那个程序,得到表达式具体的值,才能确定其具体的类型。动态语言编程的代码数量少,看起来更为简洁,更具有灵活性;而静态语言在编译时就能发现类型不匹配的错误,而且如果在程序中明确规定了数据类型,编译器还可以针对这些信息对程序进行一些优化工作,提高程序执行速度。
Julia官方的介绍说明Julia是动态的,但通过允许指出某些变量具有特定类型,Julia获得了静态类型系统的一些优点。这方面Julia就相对灵活,可以根据需要选择动态还是静态,也有人说Julia是动态的静态语言。

Julia的矩阵运算

Matlab通过使用Intel核心数学库(MKL)在矩阵乘法上占有优势,而Julia拥有MKL库的授权,同样可以使用Intel MKL库,当然Julia默认的库并不是MKL,而是BLAS,BLAS本身效果也具有不错的性能,因此Julia矩阵运算的效果还是不错的,当然也有人通过实验对Matlab和Julia进行对比,结果显示速度与数据类型相关,结果如下图显示:
在这里插入图片描述

64位整数Julia明显更快,优势非常明显,32位整数及32位浮点数和64位浮点数Julia略有优势,8位整数和16位整数Matlab较有优势;当然因为64位整数的明显优势存在,Julia的平均速度要比Matlab快一些。

Julia是灵活易用的

我们知道python是当下非常受欢迎的语言之一,python简单易上手,是一种胶水语言,灵活且生态丰富,而Julia也拥有高阶的语法,同时也在不断的提升高效性和易用性,下面我们分别用python、matlab以及Julia实现如下函数:
若传入两个参数,传出两个参数的和,若传入一个参数,传出这个参数加1,三种语言的代码如下:在这里插入图片描述

我们发现python相对Matlab要简洁很多,而Julia甚至还要更简洁一些,可见Julia是简洁易用的,此外Julia还十分灵活,它能使用所有Python和大部分R的库。

Julia是可进步的

既然Julia具有这么多优点,但是它的使用人数为什么还是没有python和Matlab等的人数多呢?
当然Julia问世时间尚短占了很大一部分原因,除了这一原因,我们也不得不承认尽管Julia具有很多突出的优点,但是它还是一个发展中的语言,并不是特别成熟,还有很多可以进步的地方:
用于附加功能的包不够成熟或维护得不够好,作为一个开源的编程语言,Julia十分灵活,更新也较快,但是这就会出现支持服务不到位、缺乏良好的记录文档,作为一个新语言Julia的生态还不够强,尽管它能使用所有的python和大部分R的库,但是生态不强就使得Julia并不适合调库党。
基于JIT( Just-in-time,即时编译器),启动有预热时间,不适合小规模、只运行一次的任务(例如shell脚本),也就是说Julia并不适合简单且运行时间短的任务。
命令行界面工具缺乏,不适合在终端(Terminal)开发,需要借助能够热重启(reload)和IDE开发,各个IDE都有其各自的优点与缺点。
安装package麻烦,费时,还易出错,国内还没有解决镜像的问题,下载和安装都很慢。
使用的人少,相关资料少,缺乏教学资源,一个使用者多的语言,教学资源丰富,此外遇到问题时网上可以找到他人的解决方法,因此可以吸取前人的经验,而Julia的使用者较少,教学资源也不多,网上的经验分享也不多,因此出现问题时也难以找到解决方法,这在很大程度上限制了Julia的发展。

结语:

回到我们最初的问题,充满野心的Julia成功了吗?我们可以说,它已经在成功的路上,或者说他已经取得了很大一部分的成功,但是Julia还在发展中,它还可以更近一步,还可以更好。

想获取更多内容,请关注海数据实验室公众号。

本期分享到这里,我们会每天更新内容,咱们下期再见,期待您的再次光临。有什么建议,比如想了解的知识、内容中的问题、想要的资料、下次分享的内容、学习遇到的问题等,请在下方留言。如果喜欢请关注。在这里插入图片描述在这里插入图片描述

社群推荐:

更多有关数据分析的精彩内容欢迎加入海数据在线数据分析交流群,有什么想法或者疑问都可在里面提出,与同行零距离交流,共同成长进步,请识别下面二维码加火星小海马微信,邀你进群。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值