主页(http://www.kuwanit.com):史上最强科学计算编程语言?
EmTech China | 史上最强科学计算编程语言?
2019-01-16 11:03 来源:DeepTech深科技 公司 /设计 /开发
原标题:EmTech China | 史上最强科学计算编程语言?
Julia 编程语言创建者之一 Viral Shah 博士,确认参加 EmTech China 2019 全球新兴科技峰会。
图 | Julia 语言的团队部分成员即获奖人(来源:MIT News)
图丨在过去的三个月中,Julia 在 RedMonk 的排名中上升了三位,排名第 36 位(来源:RedMonk)
Julia 的崛起,与目前编程语言发展遭遇的瓶颈息息相关:随着人工智能尤其是机器学习的兴起,现实世界对计算的速度及性能要求也越来越高,不同的编程语言由于自身的局限性难以兼顾,例如说,在 Julia 诞生之前,很多人不得不把同样的程序进行多次处理:首先使用 Python 或 R 这样的语言来开发一种算法,并通过这些语言制作图表,然后再用 C++或 Java 改写程序,以获得更好的计算机处理性能。
突破这种瓶颈无疑有两个方向,一是基于现有编程语言进行优化,二是“将革命进行到底”——专门开发一门新语言。后者自然成本更高。
Julia 的开发人员显然选择了后者,而且他们的野心不小:Julia 被专门设计为用于快速运行基础数学,这正是大多数数据科学的基础,如矩阵表达式和线性代数。
它的诞生可追溯到 2009 年。当时,正是基于对现有编程语言的“不满”,麻省理工学院启动了一个新型编程语言开发计划,到了 2012 年的时候,这个计划有了初步的成果,也就是如今的 Julia。
图 | 麻省理工学院 Julia 实验室(来源:Julia 实验室官网)
“我们想开发一种开源的编程语言,我们希望这门语言有 C 语言一样的速度、R 语言一样的灵活性,有同像性(homoiconicity), 有像 Lisp 语言那样拥有真正的宏特性,但是也像 Matlab 一样有易于理解、被人所熟悉的数学标记。我们希望它像 Python 一样易用,像 R 语言一样适用于统计,像 Perl 一样适用于字符串处理,处理线性代数像 Matlab 一样强大,像 DOS 命令一样擅长粘合程序。这似乎看起来简单易学,但是想要让黑客乐意去迎合它却不是简单之事。我们希望它具有互动性且能够被编译”,在《Why we created Julia》这篇文章中,Julia 团队如此解释他们开发这个语言的初衷。
图丨Viral Shah(来源:DT 君)
Viral Shah 也曾经表示:“如果你是一名数学家、科学家或者工程师,你可以选择一种速度快的语言,比如 C++或 Java,又或是任意一种容易学习的语言,比如 Matlab,R,或 Python,所以我们创造了 Julia 这种又快又便捷的语言。”如今,他已经成为 Julia Computing 公司的 CEO,该公司致力于帮助其他公司使用 Julia 语言。
图丨Alan Edelman(来源:麻省理工学院官网)
一、在团队看来,Julia 语言的核心创新点是什么?
开发一种基于多分派(Multiple dispatch)的语言。在最初的一段时间里,我们并不 100% 清楚怎么做。多方法和外部调度看起来很酷,但我们不清楚它们有多么有用和强大。
重视多分派特性改变了我们编程语言的编程方式。这是一件很奇怪的事情,因为当人们问“多重调度有什么了不起?”时,很难具体回答有什么特别的地方,但是一旦你习惯了这种特性,就很难回头了。
除了高性能,Julia 还有一些与众不同的特性。例如,Julia 能够访问异常广泛的编程堆栈。你可以以良好的性能操作比特和字节(并查看汇编代码),同时也可以处理高阶函数、设计宏定义、进行面向对象编程,所有这一切都可以很好地融合在一起。剥离这些层也很容易。为完成不同任务,人们经常需要转换语言。Julia 程序员对不同的任务或许使用的技术和样式不同,但完全可以使用相同的语言(即 Julia)。
二、在 Julia 的开发过程中,哪一部分投入的精力最多?有什么遵循的标准吗?
设计并搞清楚内部的工作原理总是最花时间的。
开发好的编程语言的关键是设计一组简单、强大的原语,能够很好地执行,然后根据这些原语定义所需的大部分功能。在语言开发的早期,添加许多“内置”结构似乎是个好主意,但在编写优化编译器时,这些结构可能会带来很多麻烦。用一种语言本身编写该语言的标准库既有利于性能(从长远来看),也可以提供宝贵的使用语言的经验,这些经验又可以反馈到语言的设计中。当一个函数运行得太慢时,我们会去看检查一下是否可以改进编译器让函数运行得更快。反复如此,我们不仅可以改善这个函数,还可以解决一系列类似的问题。
三、Julia 具体是如何实现同时具备 Python 的简单、C 语言的执行速度、R 语言一样的数据分析库支持?
正如上一个问题,简单性来自于有少量精心选择的原语。自动垃圾收集(一种计算机内存管理手段)对语言的可用性也有很大的贡献,这一点在编程语言领域已经是很久以来的共识了。
为提高速度,我们研究了所有使大多数动态语言变慢的因素,并仔细考虑了哪些因素可以消除。例如,动态语言通常允许数组元素和对象字段保存任何类型的值。然而,研究表明,即使在这些语言中,具有常量类型的同构数组和字段也非常普遍。因此,设计 Julia 利用了这一点,更容易添加类型限制,并在任何可能的情况下默认使用类型统一的集合。
四、Julia 目前宣称和 C 语言一样快。但是否在所有情况下都是这么快?还是只在数据处理的时候和 C 一样快?和目前主流语言如 Python、C 等的兼容性如何?
发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。