Julia语言:让高性能科学计算人人可用要:一群科学家对现有计算工具感到不满:他们想要一套开源系统,有C的快速,Ruby的动态,Python的通用,R般在统计分析上得心应手,Perl的处理字符串处理,Matlab的线性代数运算能力……易学又不让真正的黑客感到无聊。

Julia是个灵活动态的语言,最初针对数值计算而发明,项目起初是MIT的研究课题,现已发展成富有活力的软件系统,也是目前最受关注的编程语言之一。日前,Julia的四位发明者Jeff Bezanson、Stefan Karpinski、Viral B. Shah、Alan Edelman接受了《程序员》杂志的专访。

让高性能科学计算为人人所用

《程序员》:你们因何设计Julia?想要解决的问题或达成的目标是什么?

Alan:对我来说,首要的问题是让高性能科学计算能为世界上的每一个人所用。我时时想着这一目标尚未完全实现,但Julia的出现使问题的解决成为可能。

我对并行计算的兴趣始于1988–1989年间在Thinking Machines工作时,Thinking Machines的产品是新潮的Connection Machine。2003年12月,Viral跟Parry Husbands等人一起凭借我们的Star-P并行MATLAB软件在MIT创业大赛中获胜。受此鼓舞,我创立了Interactive Supercomputing公司,从2004到2009年,公司做得风生水起。

在ISC,Parry、Viral和我认识到,通过一种慢速的动态专有语言来实现快速的并行化是荒唐的。Jeff也是ISC的员工,在这个问题上也有自己的独到见解。我真心希望看到这个问题的解决方案。

我永远不会忘记,那是2009年3月,我们要在办公楼的停车场上拍最后的团队合影,拍照花了很长时间,晚些时候Jeff和我就在停车场里走了走,在那里我们商定了Jeff来MIT做这个方案。

Jeff:科学计算语言中你所看到的特性通常都很复杂。多数系统中这些特性都是“内置魔术”——通过编译器和解释器内部的客户逻辑来实现,难于修改或扩展。我想看到一种更加全面的、可扩展的方法来实现这类功能。

Viral:我一直对科学计算感兴趣,这也是我的博士研究方向。我和Alan Edelman,以及我的导师John Gilbert一道,致力于构造一套并行的MATLAB。当时我同一些数学家、物理学家、化学家和生态学家一起负责几个科学应用,将他们的程序并行化以提高性能。在此过程中,有一件事变得清晰起来,那就是问题不在于并行化,而在于现有的语言根本没有足够的表达力。这些语言的设计使之难于实现高性能。很多这样的语言都由一些非计算机科学家设计,他们脑子里想的多是生产率而不是编译器设计。Julia团队的独特之处在于,我们四个人组合了多种学科——语言设计、数学和工程。结果我们便拥有了一种不仅为科学家和工程师喜欢,也为计算机科学家喜欢的语言;在我看来这是罕有的事情,对此我们都倍感幸运。

Stefan:读研时我真正想做的是程序语言设计,结果却进了网络研究实验室。到离开UCSB之前,我在用线性代数、机器学习和数据统计做网络流量的分析与建模。这需要一种弗兰肯斯坦式的编程语言组合:用于网络跟踪处理的C,准备数据的SQL,线程代数和机器学习的MATLAB,统计分析和视觉化的R,然后Ruby管理这一切。我的时间更多花在了查找问题,而不是做有用的工作上。

Viral和我在同一部门,常年一起玩“终级飞盘”。有一天我扔着盘片发泄着心中不快:这类工作的工具真是一团糟糕。Viral对我说:“我认识一个人,你可以跟他聊聊。”第二天他就通过Email把我介绍给了Jeff。我们便开始讨论用于数据分析的理想编程系统应该是怎样的。后来我们决定着手做点什么——以三个月为限,届时我们将决定是否继续。我完成了第一次git提交,搭好了服务器,并为Jeff和Viral开放了权限。Jeff提交了一个语法分析器,以及随后一个简单的解释器,Viral开始用新的语言写些代码。起初错误不断,速度也奇慢——但我们已可以用它做些事情,玩一玩语言的语法和语义。三个月来了又去了,我们完全没有停下的想法。

就在那无人察觉的三个月期限前后,Alan开始为MIT的Jeff提供资金支持。那时我们已把项目命名为Julia了。如今我们在MIT有一个完整的研究小组专注于基于Julia的高效率、高性能并行计算。

《程序员》:Julia这个名字有典故吗?

Alan:许多人问过这个问题。事实证明这个名字很棒,部分是因为每个人都有自己的解读理论。

Jeff: 给语言起名字着实不易。很高兴我们能有一个好听又好记的名字。

Stefan:坊间传言那是我的中名。对这一说法,我不能确认也不能否认。

《程序员》:能否介绍一下你们的背景?之前有语言设计方面的经验吗?

Jeff:语言本来是我主要的业余爱好。业余时间我便做一些语言设计和解释器方面的工作。我从互联网上了解到了Interactive Supercomputing公司,我意识到如果能去那儿工作,就可能获得少有的专业的程序语言方面的工作机会,于是便投了简历。我在那里大多数时间都在做一种针对.NET平台的编译器。

Viral:我从读博时就认识Alan,那时我们在加州大学Santa Barbara分校,与MIT的团队合作研发Star-P。毕业后我到Interactive Supercomputing公司工作,在那里认识了Jeff。不久后微软买走了这家初创公司,我们便琢磨接下来该做什么。

Stefan:我依然清晰地记得假期里造访瑞典亲人的家,在海滩上阅读《Programming Language Pragmatics》(中译本《程序设计语言——实践之路》),并因此被表弟温言揶揄的情形。不过我后来没有去做编译器,而是无意中走入了之后称为“数据科学”的领域。那时我正好有一堆数据,想搞清楚数据背后的含义。然而,作为一名数据科学家,我始终关注着语言设计方面。对我来说,编程语言绝不只是可以替换的工具。我相信更好的语言能让我们成为更好的程序员,使我们能解决更困难的问题。

《程序员》:谈到Julia时,很多文章开篇就会提起它的性能。科学计算语言的性能是一种不可替代的优势吗?

Stefan:对很多人来说,Julia的性能是一个大卖点。但不是说性能打倒一切,否则我们都去手工编写SIMD和GPU代码了。

Jeff:性能分两类:尝试一种方案时首次获得的性能和大量努力后获得的性能。我相信前者更为重要,且只要专注于前者,就算不能取得最佳的绝对性能,方案也能有效。

Viral:我来分享我做过的另一个开源项目——Circuitscape中的一个故事吧。我和同事Brad McRae开始时可以在10分钟内解决一个100结点的问题。如今,Circuitscape用户每天都能在几分钟内解决拥有数百万结点的问题。我们组合使用了更好的语言、更好的库以及更好的算法,达成了这一结果。现在的Circuitscape是用Python写的,我们正在试验通过用Julia重写来实达到更高规模的可能性。性能不是唯一考量,但对于一种科学计算语言,它肯定是最重要的方面之一。

《程序员》:除了高性能,Julia还有哪些与众不同的特性?

Jeff:Julia基于多分派(multiple dispatch)。这是一种强大的面向对象编程机制,以前其他语言也用过,但出于某些原因从未真正流行起来。我们设计的多分派旨在定义具有多种形式和行为的数学函数,事实证明它也能用于其他情形。它在“你能表达什么”和“编译器能用它做什么”之间达到了很好的平衡。

Viral:对我来说,Julia最好的方面不是某种语言特性,而是我们终于有了一个平台,在这里来自计算机科学、物理科学、社会科学以及数学领域的专家正在走到一起,创造从未有过的神奇。而这些原来不相往来的社区之间的合作在科学计算方面释放了新的可能性。

《程序员》:目前Julia最适合哪些场景的应用?

Jeff:Julia是真正的通用语言。总体上,我认为要改善一种语言就要使之更通用,而不是更适于某一种任务。但目前Julia最佳的应用案例是探索性计算(exploratory computing):试验不同的算法或尝试理解数据。模拟也是一个大用例:简洁地描述一套系统,同时获得尽量高的性能。目前,人们也在使用Julia开发GUI应用和小型的Web应用,但我们并没真正针对这种应用而设计。

Viral:Julia足以胜任的领域之一是教育。下一代学生可以直接跨过现有的技术。IJulia图形化的Notebook集成(运行Julia的IPython Notebook)使之对于教学极具魅力。研究者、算法开发者和库作者也在采用Julia,因为Julia使工作更高效。

Julia语言:让高性能科学计算人人可用的更多相关文章

  1. 为科学计算而生的Julia——基于Manjaro Linux的安装与入门

    技术背景 Julia是一门为科学计算而生的编程语言,其着重强调了开源.生态与性能.从开源角度来说,相比于Matlab就要友好很多,用户可以免费使用,而且MIT协议应该是最宽松的开源协议之一(截图来自于 ...

  2. Julia语言介绍

    官网:https://julialang.org/ 中文社区:https://cn.julialang.org/ Julia 是一个面向科学计算的高性能动态高级程序设计语言. 首先定位是通用编程语言, ...

  3. 科学计算工具Numpy

    参考学习资料: Python.NumPy和SciPy介绍:http://cs231n.github.io/python-numpy-tutorial NumPy和SciPy快速入门:https://d ...

  4. 科学计算工具Numpy简介

    Numpy(Numerical Python) Numpy:提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于多维数组(矩阵)处理的库.用来存储和处理大型矩阵,比Python自身的嵌 ...

  5. python科学计算模块NumPy

    NumPy是Numerical Python的简称,是高性能科学计算和数据分析的基础包.其实NumPy 本身并并没有提供太多的高级的数据分析功能, 但是理解NumPy数组以及面向数组的计算将有利于你更 ...

  6. 科学计算基础包——Numpy

    一.NumPy简介 NumPy是高性能科学计算和数据分析的基础包.它是pandas等其他各种工具的基础. 1.NumPy的主要功能 (1)ndarray:一个多维数组结构,高效且节省空间. (2)无需 ...

  7. python学习笔记(2):科学计算及数据可视化入门

    一.NumPy 1.NumPy:Numberical Python 2.高性能科学计算和数据分析的基础包 3.ndarray,多维数组(矩阵),具有矢量运算的能力,快速.节省空间 (1)ndarray ...

  8. julia,集Python、C++、R为一体!Julia 1.0重磅发布, MIT发布史上最强科学计算编程语言?创始人独家解答11个问题

    这个编程语言的新版本之所以受到整个人工智能界的关注,最主要的原因正是其将 C 语言的速度.Ruby 的灵活.Python 的通用性前所未有地结合在一起,支持并行处理,易于学习和使用,尤其适合科学和工程 ...

  9. Julia:高性能 GPU 计算的编程语言

    Julia:高性能 GPU 计算的编程语言 0条评论 2017-10-31 18:02    it168网站 原创 作者: 编译|田晓旭 编辑: 田晓旭 [IT168 评论]Julia是一种用于数学计 ...

随机推荐

  1. 讨论oracle在rowid和rownum

    [ 概要 ] 刚刚接触oracle的同学可能经常会被rowid和rownum这两个词弄混, 弄清楚这两个家伙对于我们写sql会有非常大的帮助, 以下偶就抛砖引玉, 简单地谈谈他们之间的差别吧. [ 比 ...

  2. Sql Server脚本使用TFS版本控制

    原文:Sql Server脚本使用TFS版本控制 1.安装TFS插件 Microsoft Visual Studio Team Foundation Server 2010 MSSCCI Provid ...

  3. hdu 1426 Sudoku Killer ( Dancing Link 精确覆盖 )

    利用 Dancing Link 来解数独 详细的能够看    lrj 的训练指南 和 < Dancing Links 在搜索中的应用 >这篇论文 Dancing Link 来求解数独 , ...

  4. java线 生产者和消费者

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlhbmdydWkxOTg4/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  5. C++ Primer 学习笔记_54_类和数据抽象 --拷贝构造函数、赋值运算符

    拷贝控制 --复制构造函数.赋值操作符 引言: 当定义一个新类型时,须要显式或隐式地指定复制.赋值和撤销该类型的对象时会发生什么– 复制构造函数.赋值操作符和析构函数的作用!      复制构造函数: ...

  6. IronPython和C#交互

    IronPython和C#交互 IronPython是一个.NET平台上的Python实现,包括了完整的编译器.执行引擎与运行时支持,能够与.NET已有的库无缝整合到一起. IronPython已经很 ...

  7. java_OutOfMorryError 内存溢出(replaceAll)

    最近在使用string类中的replaceAll函数时碰到这个错误,由于string长度比较长,文本文档9M多,可以增加jvm的内存大小解决. 下面是一篇对OutOfMorryError错误的一些处理 ...

  8. C语言第11课

    主要内容:函数指针 一.函数指针定义 int  maxValue(int  a,int  b) { return   a > b ? a : b; } 函数名和数组名一样是地址,存在在代码区 i ...

  9. C#中WebBrowser的使用

    原文:C#中WebBrowser的使用 其实网络上这类文章很多,我大致从头说说我自己的经验. 1.加入引用 在控件栏按右键,选择“添加/移除项”,选COM组件,选中“Microsoft Web Bro ...

  10. 剑指XX(游戏10) - 走正步工厂一个安静的农场游戏的代码

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2lsYW5ncXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...