朱莉娅(Julia)更新:领养不断攀升; 是Python挑战者吗?

2021-01-18 20:03:01

根据Julialang.org的数据,Julia是一种源于MIT的开放源代码,高级编程语言,被迅速采用,没有丝毫放缓的迹象。 2020年,下载数量跃升了87%,超过了2400万(2020年相对于2019年),可用软件包的数量上升了73%,达到约4800个。去年(2019年与2018年)的下载数量跃升了77%。在最新的TIOBE索引中,朱莉娅从第47名跃升至第23名,而TIOBE首席执行官保罗·詹森(Paul Jansen)说,朱莉娅是明年进入前20名(使用语言)的最佳人选。

朱莉娅的一位著名用户,阿贡国家实验室副主任里克·史蒂文斯(Rick Stevens)告诉HPCwire:“我看到了87%的增长,并且看到朱莉娅的成长真是太好了。我认为,随着朱莉娅的成熟,朱莉娅在科学和技术计算领域具有巨大的潜力来取代C / C ++ / Python(当然还有Fortran)。低级性能非常好。 CPU / GPU供应商将其用作一流的目标语言,这一点很重要。”

大约在2012年,麻省理工学院的艾伦·埃德曼(Alan Edelman)等四位计算机科学家发起了这项研究,茱莉亚(Julia)用户的数量在过去三年中增长了一倍以上。 Julia旨在为科学计算提供一种功能强大但易于使用的编程语言。 Julia是一种动态语言,所谓静态编程语言提供的高性能与高级动态编程语言提供的性能较低之间的张力一直没有消除,后者强调抽象性,开发速度和可移植性。

赢得2019年IEEE Sidney Fernbach奖的爱德曼(Edelman)在某种程度上是因为他在Julia方面的工作,他在SC19 Fernbach的演讲中辩称,在编程之战中,具有足够性能的便利性正在取胜。他说,此外,异构计算的兴起及其给程序员带来的复杂性增加了从静态编程向动态语言的倾斜。以下是他在SC2019演讲中的简短片段:

“当您编写各种算法时,您不一定要考虑是使用GPU还是使用分布式计算机。您不一定要考虑如何实现特定的数据结构。您想要做的是谈论要计算的内容,而不是要如何计算的,对吗?这是一个大问题,要让人们谈论您要计算的内容,而不是您要如何计算它。因为如果您安装了软件,如何计算它,并且如果您的软件中充满了麻烦,我向您保证,没有人会更改它。没有人会对此进行创新。当编写它的人不再在项目中时,再也不会有人触摸它。

“ [Julia之所以表现出色的某些原因是因为我们设计得特别好。我们有一个叫做多重调度的东西,我们在静态和动态之间有一个非常仔细的平衡。它与LLVM连接。它与Python配合良好。我们也有很多人采用MPI中的遗留代码,然后将它们插入Julia中–您并没有获得所有好处,但是您所拥有的(这可能是最重要的好处)是其他人现在可以运行您的代码一旦进入朱莉娅因此对其他人来说要容易得多。当您将旧代码插入高级语言时,您实际上可以为其赋予新的生命。”

在演讲中,爱德曼举了一个例子,一群研究人员决定在Fortran中删除其原有的气候代码,并在Julia中从头开始编写。他们讨论了在使用高级编程语言时可能遇到的性能折衷问题。该小组愿意接受3倍的语言速度灵活性。相反,Edelman说,该交换机产生了3倍的加速。 (请参阅HPCwire关于Edelman演讲的报道,Julia Programming在HPC和其他地方的戏剧性崛起)

Julia组织并没有羞于解决动态语言与静态语言的性能缺陷。以下是Julia的介绍性文档的摘录,内容涉及性能和与其他动态语言的区别:

“传统上,科学计算需要最高的性能,但领域专家已在很大程度上转移到了使用较慢的动态语言进行日常工作。我们相信有很多充分的理由更喜欢在这些应用程序中使用动态语言,并且我们不希望它们的使用有所减少。幸运的是,现代语言设计和编译器技术可以最大程度地消除性能折衷,并提供一个足以为原型设计提供足够生产力并为部署性能密集型应用程序提供足够高效的单一环境。 Julia编程语言扮演着这个角色:这是一种灵活的动态语言,适用于科学和数值计算,其性能可与传统的静态类型的语言相媲美。

“由于Julia的编译器不同于Python或R等语言使用的解释器,因此您可能会发现Julia的性能起初并不直观。如果发现运行缓慢,我们强烈建议您在尝试任何其他操作之前通读性能提示部分。一旦您了解了Julia的工作原理,就可以轻松编写出几乎与C一样快的代码。

“ Julia具有可选的类型,多种调度和良好的性能,这是通过使用LLVM实现的类型推断和即时(JIT)编译实现的。它是多范式,结合了命令式,功能性和面向对象编程的功能。 Julia以与R,MATLAB和Python之类的语言相同的方式为高级数值计算提供了简便和表达性,但还支持常规编程。为了实现这一目标,Julia建立在数学编程语言的基础之上,但也从流行的动态语言(包括Lisp,Perl,Python,Lua和Ruby)中借鉴了很多东西。

核心语言的内容很少。 Julia Base和标准库都是用Julia本身编写的,包括诸如整数算术之类的原始运算

丰富的用于构造和描述对象的类型语言,也可以选择用来进行类型声明

通过多次分派跨多种参数类型组合定义函数行为的能力

去年六月进行的Julia用户调查提供了Julia用户社区及其许多功能偏好和实践的快照。它是根据2565次访谈得出的。当前,大多数用户(60%)在学术界工作,但越来越多的推动力推动Julia在行业中的发展。在行业中,最大的用户细分是软件/ IT专业人员(12%)和工程技术(11%)。

有趣的是,尽管这个数字正在增长,但目前只有约一半的Julia现在使用硬件加速器。朱莉娅也没有在云中广泛使用。当前,Julia程序主要在本地群集上运行。

Julia的性能,易用性和开源特性是流行技术功能的首选。不足为奇的是,缺少许可费是最重要的非技术功能。引述的主要技术挑战包括编译时间慢和软件包相对不成熟。带有Julia插件的Juno和VS Code是2020年最受好评的编辑器。

在7月下旬举行的JuliaCon(虚拟会议)上,一个特别活跃的BOF解决了与Julia社区共享行业代码的问题。在一般情况下,行业的更多参与似乎似乎已在Julia的议程上,代表着朝着建立其知名度迈出的又一步。在Julia网站上发布了JuliaCon的摘要。

监视茱莉亚的前进牵引力将很有趣。明年进入TIOBE指数前20名将是一个有力的指标。