自然杂志:为什么越来越多的科学家都开始使用Rust


尽管Rust学习曲线陡峭,但编程语言仍可提供速度和安全性。

 

2015年,生物信息学家JohannesKöster被他称为“全职Python专家”。他已经用编程语言编写了一种流行的工具-工作流管理器Snakemake。现在,他正在考虑一个项目,该项目需要Python根本无法提供的一定水平的计算性能。因此,他开始寻求新的东西。

现在在德国杜伊斯堡-埃森大学就读的科斯特正在寻找一种语言,该语言可以提供Python的“表达能力”,但可以提供C和C ++之类的语言。换句话说,“一种高性能的语言,仍然可以说是符合人体工程学的”。他发现的是Rust。

Rust最初由Graydon Hoare于2006年创建,当时是一个副项目,当时在浏览器开发人员Mozilla工作,总部位于加利福尼亚州山景城,Rust将C ++等语言的性能与更友好的语法,对代码安全的关注以及精心设计的集合相结合简化开发的工具。Mozilla的Firefox浏览器的某些部分是用Rust编写的,据报道,Microsoft的开发人员正在使用它来重新编码Windows操作系统的某些部分。年度Stack Overflow开发人员调查(今年对近65,000名程序员进行了调查)将Rust连续5年评为“最受欢迎的”编程语言。代码共享网站GitHub表示,Rust是2019年平台上增长第二快的语言,比去年增长了235%。

科学家们也正在转向Rust。例如,Köster使用它创建了一个名为Varlociraptor的应用程序,该应用程序将数百万个序列读数与数十亿个遗传碱基进行比较,以鉴定基因组变异。他说:“这是巨大的数据。” “因此,需要尽快。” 但是这种能力是有代价的:Rust学习曲线陡峭。

“确实需要一些前期时间,” Rust核心团队成员,宾夕法尼亚州匹兹堡咨询公司Integer 32的创始人Carol Nichols说。“但是,这使我能够做一些原本无法做的事情。我认为那段时间同样值得。”

注意:无导轨

用于分析科学数据的工作流倾向于使用Python,R和Matlab等语言。这些代码一一解释代码行,然后执行它们,这是一种编程样式,非常适合于浏览数据,但不能快速进行。

斯德哥尔摩的Rust程序员(以社区成员的名字称为“ Rustacean”)Ashley Hauck说,C和C ++很快,但是它们没有“导轨”。例如,没有任何控件可以阻止C或C ++程序员不适当地访问已经释放回操作系统的内存,或者阻止程序两次释放同一块内存。在最佳情况下,这将导致程序崩溃。但是它也可能返回无意义的数据或暴露安全漏洞。据微软研究人员称,该公司每年修复的错误中有70%与内存安全有关。

内存规则

Rust的模型使用规则将每个内存分配给一个所有者,并强制谁可以访问它。违反这些规则的代码永远不会崩溃—它不会编译。“他们有一个基于生命周期概念的内存管理系统,它使编译器可以在编译时跟踪分配内存,释放内存,拥有内存的人,可以访问内存的时间,”计算专家Rob Patro解释说。马里兰大学公园分校的生物学家。“存在一大类正确性错误,而这些错误只是由于语言的设计方式而消失了。”

相同的保证有助于确保并行化的代码(为在多个处理器上运行而编写的软件)可以安全地运行,例如,消除了多个计算线程将同时访问同一数据的可能性。

结果是一种易于维护和调试但很难学习的语言。Nichols说:“没有其他主流语言真正具有这些概念,它们对于理解很多必须使用Rust编写代码的方式来说确实是核心。” 在都柏林三一学院研究地理数据可视化的StephanHügel估计,他花了两三个月的时间来移植Python算法,以将地理空间坐标从一个参考系转换为另一个参考系,从而实现了四倍的执行速度。位于加利福尼亚州拉霍亚的化学信息软件公司Metamolecular的创始人Richard Apodaca说,他花了大约六个月的时间才精通该语言。

专注于可用性

作为补偿,Rust的开发人员优化了用户体验,该团队的负责人,总部位于加利福尼亚州伯克利的Manish Goregaokar说。例如,编译器会产生特别有用的错误消息,甚至会突出显示有问题的代码并建议如何修复它。“如果您的语言要引入一个新颖的概念,最好与其一起工作愉快,” Goregaokar解释说。

Rust社区还提供了广泛的文档和在线帮助,包括一个流行的在线参考书,称为Book“ Cookbook”。解决常见问题的方法。用户称赞Rust工具链-程序员用来将代码转换为应用程序的应用程序

“围绕Rust的工具和基础设施确实很棒,” Patro说。与程序员用来构建C代码的许多编译器和辅助实用程序不同,Rustaceans可以使用一个名为Cargo的工具来编译Rust代码,运行测试,自动生成文档,将包上传到存储库等等。它还会自动下载并安装第三方程序包。名为Clippy的第三方Cargo插件会标记常见错误和“非惯用的” Rust代码,Patro称其为“绝对惊人”的功能。

Top