阅读文章

这个能够打败Python的编程说话,正在慑服科学界

[ 来源:http://www.wazyxx.com | 作者:网友 | 时间:2020-11-12

  来源:数据实战派

图片来源:Unsplash图片来源:Unsplash

  Julia 说话是近年来科学世界中展现的一匹暗马。物理学家 Lee Phillips 发外了一篇科普文章,介绍了这栽科学计算说话的真实魅力所在。

  近来,吾和很众科学家在网上视频见面了很众次,他们对一个新工具感到奋发。它既不是最新的粒子添速器,也不是超级计算机,而是一栽年轻的计算机说话 ——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)是计算机说话设计钻研中的常见概念。它是计算机科学的分支钻研周围,人们对它的含义休争释往往相等抽象,并且倚赖于专科术语。

  倘若想要更好地理解这个概念,吾们也许能够将其类比成烹饪。

  最先吾们要清晰一些计算机科学术语,包括函数 / 程序、数据类型和库 / 模块 / 包。

  浅易来说,函数 / 程序指的是 “获取输入值,对其进走处理,末了产生输出值” 的过程。数据类型是数字、字符或其他新闻的荟萃,这些新闻有各式各样的结构,能够由函数操控。库 / 模块 / 包则是函数的荟萃,还包括函数行使的数据类型的描述。

  接下来吾们最先类比。

  倘若你晓畅食谱和烹饪是什么有趣,这个类比就很好懂。吾们能够将库 / 模块 / 包视为市面上销售的 “食谱书”,函数 / 程序就是 “制作菜肴的完善过程或技术”,而数据类型就是必要用到的 “食材或配料”。

  现在想象一下食谱的内容。清淡来说,食谱都是以迥异菜品为分类,比如炒菜实际上细分为如何炒洋葱,如何炒虾等等。每一道菜的步骤迥异,由于它们行使的食材或配料迥异。这些食材和配料外也是食谱的一片面。

菜品烹饪必要特定食材和配料。(图片来源:Lee Phillips)菜品烹饪必要特定食材和配料。(图片来源:Lee Phillips)

  倘若吾们要增补一道新菜,那只必要囊括一切阅读到的食材或配料就能够了,其他现有的菜品都不必要任何改动 —— 新菜不会让旧菜失效。

增补新菜不会影响旧菜。(图片来源:Lee Phillips)增补新菜不会影响旧菜。(图片来源:Lee Phillips)

  但倘若吾们想添入新的配料或食材怎么办?比如现有菜品制作过程中异国用到鱼,那么吾们就必要修改现有的制作过程。

但要增补新的食材,就要转折现有菜谱。(图片来源:Lee Phillips)但要增补新的食材,就要转折现有菜谱。(图片来源:Lee Phillips)

  不过,构造食谱书的手段有很众,另一栽手段是围绕食材来构造书谱,而不是烹饪手段。每个食材,都会有配套的烹饪技术和手段。就像下图所示:

以食材为中央来构造菜谱。(图片来源:Lee Phillips)以食材为中央来构造菜谱。(图片来源:Lee Phillips)

  在这栽情况下,烹饪技术就不再是自力存在的,而是与所行使的食材相有关。倘若要新增补鱼行为新的食材,就能够编写一个新的鱼的制作手段,与现有的鱼类烹饪手段整相符在一首。

如许一来,增补新食材就不必转折现有菜谱。(图片来源:Lee Phillips)如许一来,增补新食材就不必转折现有菜谱。(图片来源:Lee Phillips)

  但倘若想增补一栽新烹饪技术呢?比如如何行使搅拌机?

  在不更改现有做事的情况下,吾们异国手段实现。由于现有技术已经绑定在食材上,新烹饪技术必然会转折食材的制作手段。

  这两栽食谱的构造手段相通于两栽计算机说话类型。围绕烹饪过程的食谱书是 “面向过程的说话”,而围绕食材的食谱书则是 “面向对象的说话”。两栽说话势均力敌。

  这其实就是 “外达题目”:不论哪栽说话,都存在扩展柔件(食谱)的窒碍。在重用和组相符现有代码时,能否不更改现有已存在的柔件包至关主要。

  倘若你觉得前线的类比还不足晓畅,接下来这一节还有另一栽更直不悦目的注释。

  引入“众重调度”

  显而易见的是,若有一栽不论什么情况下都不必更改已有内容的手段来构造食谱,就能够获得极大的扩展解放度,那将是一个很大的上风。

  与其厉格按照制作过程和食材来构造食谱,不如采用一栽更通用且变通的手段。如下图所示:

望首来紊乱的新菜谱组相符手段,批准更大的解放度。(图片来源:Lee Phillips)望首来紊乱的新菜谱组相符手段,批准更大的解放度。(图片来源:Lee Phillips)

  这张图片表现了手段与食材的解放有关,谁都不是另外一个的附属品。但这不代外能随机组相符无关的手段,而是要基于现有手段创建变栽,并与迥异的食材配套。

  举个例子,吾们现有的食谱书包含了炸鸡的烹饪过程。倘若想增补煎鱼的过程,也不必要重新编写,只必要请示读者用炸鸡的手段煎鱼,但要行使更高的温度,并且将配料更早的剔除。

  另一栽注视三栽思维模式的手段是想一想 “食谱的现在录”。

  在 “面向功能” 的版本中,现在录能够是如许的:

  - 第一章:煎炸

  鸡

  鱼

  - 第二章:水煮

  鸡

  鱼

  在这栽情况下,增补新功能只必要新开一章,但增补新的食材(比如鸡蛋)必要修改现有章节:在第一章增补煎蛋,第二章增补水煮蛋等等。

  在 “面向对象” 的版本中,现在录能够是如许的:

  - 第一章:鸡

  煎炸

  水煮

  - 第二章:鱼

  煎炸

  水煮

  在这栽情况下,增补新食材只必要新开一章,但增补新的烹饪手段(比如烤)必要修改现有章节:在第一章增补烤鸡,第二章增补烤鱼等等。

  至于第三栽手段,秉承可最大水平扩展食谱的思维,现在录能够是如许的:

  - 第一章:炸鸡

  - 第二章:水煮鸡

  - 第三章:炸鱼

  - 第四章:水煮鱼

  很隐微,不论是食材照样烹饪技术,都能行为新章节解放增补到书中,无需修改任何现有章节:第五章烤鸡,第六章烤鱼等等。

  与前两个版原形比,第三栽模式好像异国构造性。

  但在实际操作中,烹饪手段和食材之间的有关能够成为库结构的一片面。在食谱类比的语境中,吾们能够想象鸡和鱼是肉的子集,草莓和樱桃是红色水果的子集,而煎炒和水煮则是更大的通用烹饪手段的变体,以此类推。

  这栽思维模式是解决 “外达题目” 的一栽尝试。这在说话设计中也被称为 “众重调度”,指的是基于要行使的一切数据类型的类型自动选择手段。

  “众重调度” 是 Julia 解决 “外达题目” 的手段,也是其中央构造原则,因此 Julia 既不是面向对象的,也不是面向功能的。它采用的解决手段比两者更富强,更通用。这意味着 Julia 在同化和行使库方面更添解放。

  工具的主要性

  Julia 不是第一个尝试解决 “外达题目” 的说话,也不是第一个用到 “众重调度” 的说话。拥有该功能的 Common Lisp 说话已经诞生 40 年,Perl 等说话的最新版本也拥有该功能。用户已经肯定了 “众重调度” 在编写和扩展库方面的便利性。

  但 Julia 与它们的区别在于,Julia 是围绕 “众重调度” 设计的,而其他说话只是将其行为可选项,并且会带来性能亏损。比如 Julia 的 “众重调度” 批准其更变通和自然地外达数学思维,其社区代码重用量让说话设计者都感到惊讶。

  不过想在科学界立足,有了上述上风还不足。Julia 之以是受到了大量关注,还在于它将 “众重调度” 和其他特性相结相符,比如迅速上手的免费高质量代码和特意快的运算速度,对必要大量数字运算的科学家特意有吸引力。

  斯坦福大学教授 Mykel Kochenderfer 行使 Julia 设计了避免飞机碰撞的体系,该体系已成为国际标准。他外示,Julia 不光 “是高级的,可被注释的说话,而且它的运走速度也与高度优化的 C ++ 代码相通快。”

  Julia 还具有外达力强,易于浏览的语法,尤其是在处理数组时。它为数字算法的并走处理挑供了一条迅速通道。它具有 Unicode 时代的设计益处,使其在外述数学公式时更像真实的数学。

  下面这幅图片是 Julia 程序中的实际代码,行使了特意为 Julia 说话设计的字体。

Julia 说话的数学公式外达。(图片来源:Lee Phillips)Julia 说话的数学公式外达。(图片来源:Lee Phillips)

  Julia 的这些特性在早期就吸引了很众科学家,甚至在 “众重调度” 的稀奇上风引发关注之前,就已经吸引了大量用户。

  而吾从中所学到的中央理维是:工具很主要。这就好比,画家作画时要选好符配相符品风格的画笔和颜料,而作弯家脑海中的音律必须与笑器和外演者的技巧相相符。

  行为一个编程工具,Julia 之于科学家也是相通。它能扩展科学家在有限时间内能够完善的义务,协助其实现不曾想象过的想法。

  声明:大香蕉伊人俺来也网独家稿件,未经授权不准转载。 -->
相关文章

日本一级床片直播

回到顶部
友情链接

Powered by 久久超碰国产精品最新 @2018 RSS地图 html地图

Copyright 站群系统 © 2012-2013 365建站器 版权所有