充满野心的Julia成功了吗?

2023-11-23 09:20
文章标签 成功 充满 野心 julia

本文主要是介绍充满野心的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还在发展中,它还可以更近一步,还可以更好。

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

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

社群推荐:

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

在这里插入图片描述

这篇关于充满野心的Julia成功了吗?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/416919

相关文章

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

我成功在本地打开了Cesium啦!

1首先下载Node.js,我是跟着这篇下载的,https://zhuanlan.zhihu.com/p/77594251,不过这后面的我没弄对Cesium环境配置也没影响。 另外:我看其他推文说,在终端写node -v和npm-v查node和npm的版本可以检测node和npm是否下载成功。 2然后我在CesiumB站官号看的教学视频,跟着下载Cesium源代码。 Cesium基础入门1-零

重启顺风车的背后,是高德难掩的“野心”

以史鉴今,我们往往可以从今天的事情中,看到古人的智慧,也看到时代的进步。就如西汉后期文学家恒宽曾说的,“明者因时而变,知者随事而制”。 图源来自高德官方 近日,高德就展现了这样的智慧。在网约车市场陷入饱和状态时,高德审时度势,宣布重启顺风车业务,并在全国范围内大规模启动,首批覆盖珠三角、长三角及湖北省武汉市等共计65座城市,完成在出行服务领域的又一重要布局。 重启顺风车,增量市场的“蛋糕

Android三方登录,微信登录成功后闪屏问题

最近项目要加一个微信登录的功能,发现登录成功后进入WXEntryActivity界面,这个界面是微信来处理接受登录,分享等结果的。关闭的时候this.finish();界面闪烁,虽然不影响功能,但看起来狠辣眼,然后我就想是不是主题的原因,我索性将这个界面的主题设置为透明的 <activity android:name=".wxapi.WXEntryActivity"android:label="

解决解压缩时的错误提示 “无法成功完成操作, 因为文件包含病毒或者潜在垃圾文件“

近期, 有一些朋友反馈在解压zip压缩包, 或者在安装软件的过程中出现了下面的错误提示: "无法成功完成操作, 因为文件包含病毒或者潜在垃圾文件" "Operation did not complete successfully because the file contains a virus or potentially unwanted software" 上述错误一般

成功进行云迁移与现代化的7个关键步骤

随着全球逐渐从供应链噩梦和因封锁及控制措施引起的通胀急剧上升中恢复正常,一个显而易见的问题是:运营成本必须降低。 但这不仅仅是成本问题;商业领袖还必须准备好增加股东价值,并为客户和目标市场提供最优价值。尽管实现这一目标的方法有很多,但没有一种方法能在云迁移的所有三个方面达到这种效果。 然而,云迁移和现代化的实施部分往往充满挑战,这些挑战可能迅速逆转甚至阻碍任何已经实现的收益。以下是七个成功的云

maven依赖成功引入添加,但是提示程序包不存在

启动时显示程序包不存在 查看了依赖,是存在在该依赖模块的,也在父依赖添加了子依赖的module模块 解决方案 方案1,不过对我没效果 方案2 重载父模块即可成功运行

后端发送数据成功,前端也接收成功,但是显示不出来

提示: shouye.vue:128 [Vue warn]: Property "LiuyanData" was accessed during render but is not defined on instance. at <PopularPets onVnodeUnmounted=fn<onVnodeUnmounted> ref=Ref< Proxy(Object) {getdata:

【C++】【学习笔记】【未成功实现】关于指针的函数【very difficult】

注:由于参照C++primer 5th edition,这段程序并不能在博主的VS2012中运行,主要是GCC编译器版本过低导致。 /* 本节主要介绍 声明一个函数【easy】 创建容器对象并使其元素为指向函数的指针【略difficult】创建多个函数,用容器保存指向这些函数的指针指针上场,调用指针输出函数计算的结果*/#include <iostream>#include <vecto

【C++】【C++ Premier 习题集 P75页程序纠错没成功!欢迎指教】

平时练习发现这个问题,记录一下。 在C++ primer 书中,直接在常量表达式中使用strlen函数,然而实际上常量表达式只允许一个确定的值。所以在实际应用时无法通过IDE的命令行检查。【据说新标准允许了,可我的VS2012依然不允许,ORZ】大家可以看到,我特意又试了一下将函数调用单独拿出出来赋值给length,这下躲避了函数调用的问题,可IDE仍然检查不通过,为什么呢?因为le