原标题:这个可能打败Python的编程语言,正在征服科学界
Julia 语言是近年来科学世界中出现的一匹黑马。物理学家 Lee Phillips 发表了一篇科普文章,介绍了这种科学计算语言的真正魅力所在。
本文转载自公众号“数据实战派”
撰文 Lee Phillips,物理学家
翻译 REN
最近,我和许多科学家在网上视频见面了很多次,他们对一个新工具感到兴奋。它既不是最新的粒子加速器,也不是超级计算机,而是一种 年轻的计算机语言 ——Julia。
不同的计算机语言擅长的工作也不一样,有的运行速度很快,有的则更容易开发和部署,有的拥有庞大的生态系统和库,有的则适用于解决特定问题。
对于需要模拟气候变化或核聚变的科学家来说,目前的主流语言是 Fortran。它的编译器可以充分利用大型超级计算机的强大性能。而对于数据科学家来说,Python 才是最受青睐的语言,因为它拥有丰富的生态系统,强大的交互性和快速的开发周期。
六年前,我撰文描写了 Fortran 在科学计算领域的地位,并与其他几种语言进行了比较。在文章结尾处我曾预测:十年后,一种名为 Julia 的新语言很可能取而代之,成为科学家在解决大规模数字计算问题时更愿意使用的语言。
我的预言不是很准确,因为 Julia 只用了大约一半的时间,就接近了这一目标。
通过近年与许多科学家的交流,我确信,Julia 在业界掀起了新的热情。不过,当年分析它的潜力时,我还不明白为什么这种语言会如此受欢迎。
当时,我的评估是基于 Julia 独特的便捷语法与出色性能。尽管 Julia 1.0 正式版尚未发布,但整个社区已经非常兴奋。
Julia 似乎已经解决了 “ 两语言问题” (two-language problem),这是 Python 等解释性语言用户经常面临的难题。用 Python 编写一个程序,虽然可以享受它的便捷语法和交互性,但 当计算规模扩大到一定程度,程序的运算速度就会放慢很多。这是 Python 语言本身的局限性。
对于大型的仿真模拟运算来说,由于数据量过于庞大,程序的运行速度至关重要,因此研究人员不得不用 C 之类的语言再重写一个一样的程序,以提升实际应用时的运行速度。可是速度上来之后,他们在后续研究中又要同时维护和更新两种语言的代码。“两语言问题” 由此而生。
Julia 自诞生起就以解决 “两语言问题” 作为使命,以此吸引科学家和其他人来学习该语言,不过这并不是它唯一令人兴奋的地方。
以今年的 JuliaCon 大会为例,普通的计算机会议大多围绕编程、编译器、算法和优化等计算机科学主题展开。虽然 JuliaCon 上也有这些,但更多的是围绕科学研究课题,比如流体力学、语言处理、大脑成像等等。这些演讲题目给人一种走进了科学研究大会的错觉。
这种百花齐放的情况得益于 Julia 编程社区的开放态度,每个人的代码都可以在 GitHub 上找到。如果有人希望使用现成的算法,从帮助文档到代码注释,都可以拿到最新版本。
这与绝大多数年龄较大的科学家所熟悉的氛围完全不同:在过去,科研代码几乎不会离开实验室。
Julia 社区正是以大规模的协作和代码共享为基石。
解决 “表达问题”
“表达问题” (Expression Problem)是计算机语言设计研究中的常见概念。它是计算机科学的分支研究领域,人们对它的含义和解释往往十分抽象,并且依赖于专业术语。
如果想要更好地理解这个概念,我们或许可以将其类比成烹饪。
首先我们要明确一些计算机科学术语,包括函数 / 程序、数据类型和库 / 模块 / 包。
简单来说,函数 / 程序指的是 “获取输入值,对其进行处理,最后产生输出值” 的过程。数据类型是数字、字符或其他信息的集合,这些信息有各式各样的结构,可以由函数操控。库 / 模块 / 包则是函数的集合,还包括函数使用的数据类型的描述。
接下来我们开始类比。
如果你知道食谱和烹饪是什么意思,这个类比就很好懂。我们可以将库 / 模块 / 包视为市面上出售的 “食谱书”,函数 / 程序就是 “制作菜肴的完整过程或技术”,而数据类型就是需要用到的 “食材或配料”。
现在想象一下食谱的内容。一般来说,食谱都是以不同菜品为分类,比如炒菜实际上细分为如何炒洋葱,如何炒虾等等。每一道菜的步骤不同,因为它们使用的食材或配料不同。这些食材和配料表也是食谱的一部分。