查看原文
其他

Python过时了?和 C 一样快的科学计算语言Julia了解一下! | 公开课&线下活动预告

集智小编 集智俱乐部 2019-04-07

Julia 语言的 logo


导语

Julia 是一个为科学和数值计算而生的编程语言,它同时有像 Python 一样的简洁语句、和 C 媲美的超快速度、跟 Lisp 一样的元编程能力。本周六20:00-21:00,集智AI学园特别邀请 Julia 中文社区核心成员罗秀哲,带来一场入门 Julia 语言的线上公开课,一起快速上手 Julia 语言。文末附直播交流群和第三届 Julia 中文社区线下活动报名链接。


 Julia —一种科学计算语言新尝试


科学计算对性能一直有着最高的需求, 但现在这个领域的专家开始大量使用比较慢的动态语言来完成日常工作。 我们相信有很多使用动态语言的理由, 所以我们不会舍弃这样的特性。幸运的是,现代语言设计和编译器技术使得为原型设计提供单一的高效开发环境, 并且配置高性能的应用成为可能。


Julia 语言在这其中扮演了这样一个角色:作为灵活的动态语言,适合科学和数值计算,性能可与传统静态类型语言媲美。而今年这门崭新的语言马上就要迎来自己的1.0(第一个正式版)。


关于快如闪电的 Julia 语言


Julia是一个为数值计算设计的高性能的高级动态语言。Julia提供了一个复杂精巧的编译器,分布式的并行计算环境,精确地数值计算以及一个可扩展的数学函数库。Julia的基础库大部分由纯Julia语言编写,但是也集成了在特定领域(如线性代数,随机数生成,信号处理和字符串处理)很多成熟的库。此外,Julia开发者社区也不断地通过Julia自带的包管理器在贡献大量的包(package)。此外,由Jupyter和Julia社区共同努力的成果IJulia,使得你可以在笔记本(notebook)界面里使用Julia。



Julia程序使用一种基于多重派发的编程范式,通过对不同类型的组合(类型可以是用户自定义的)定义和重载函数来进行组织。对于在不同系统上使用Julia的好处的深度讨论可以在下面的部分或者是介绍和在线指南中找到。


Julia语言的特性


  • 多重派发:提供了为多重类型的组合定义函数的能力

  • 动态类型系统:为文档,优化和分发而定义的类型系统

  • 内建的包管理器

  • Lisp一样的宏和其它元编程工具

  • 调用Python:Julia可以通过PyCall直接调用Python的函数

  • 调用C:Julia可以简单地(无需额外对特殊API的封装)调用C代码

  • 像shell一样强大的管理其它进程的能力

  • 为并行和分布式计算而设计

  • 协程:轻量级“绿色”线程

  • 用户定义的类型和内建类型一样快和兼容

  • 自动为不同类型生成的高性能特别优化的代码

  • 简洁可扩展的类型转换和提升

  • 高效支持Unicode包括但不限于UTF-8字符

  • MIT协议:免费的开源协议


高性能的JIT编译器


Julia基于LLVM的即时编译(JIT)编译器和语言本身的设计使得它可以达到和C语言接近或者一致的性能。为了感受到Julia和其它语言相比之下在数值/科学计算方面的性能,我们为很多语言写了一些小的微基准(micro-benchmark)测试(C, Fortran, Julia, Python, Matlab/Octave, R, JavaScript, Java, Lua, Mathematica):



图片: 相对于C语言的基准测试(越小越好,C的性能 = 1.0)。

  • 这个notebook使用Gadfly和IJulia绘制:http://nbviewer.jupyter.org/url/julialang.org/benchmarks/benchmarks.ipynb

  • 更详细的信息请查看基准测试页面:https://github.com/JuliaCN/juliacn.github.io/blob/source/benchmarks



    为并行计算和云计算设计


    Julia并不会强加给用户任何一种特别的并行范式,而是提供一系列的分布式计算的关键组件,使得其足够灵活去支持多种并行方案,并且允许用户增加更多。下面简单地例子展示了如何并行地抛硬币并且计数。


    1

    2

    3

    nheads = @parallel (+) for i = 1:100000000

       rand(Bool)

    end


    这里的计算会被自动分布到所有可以使用的计算节点(作为进程),然后返回值会被求和(+),然后返回到发起进程的节点。

    这里是一个基于web的交互式IJulia notebook的截图,这里使用了Gadfly。你也可以通过JuliaBox来通过一个按照需求预分配的Docker沙盒容器在你的浏览器中使用IJulia notebook。

    

    Julia Box为云上的数据处理代码编辑,分享,执行,debug,合作开发,分析,数据浏览和可视化提供了一种可能性。最终,JuliaBox希望使得人们可以避免登陆和管理机器和数据,从而直接关心需要解决的实际问题。


    Gadfly 可以在不同的渲染后端(SVG,PDF,PNG等等)上绘图。交互式的图片可以通过Interact.jl来实现。一些简单的Gadfly实例在下面展示:

    

    开源免费并且对库友好


    Julia的核心代码都是MIT许可协议。很多Julia模块所使用的库也都是开源协议GPL, LGPL, and BSD(因此包含语言,用户界面和库的环境是在GPL协议下的)。语言本身可以被编译成共享库,所以用户可以将Julia和自己的C/Fortran或者其它第三方库一起发行。你也可以通过Julia交互式界面来调用外部库,从而获得即刻的反馈。查看LICENSE以了解Julia的协议细则。


     公开直播:1小时快速入门 Julia 语言


    在这次直播里,罗秀哲作为Julia 中文社区核心成员之一,将结合自己的背景,带大家简单的探索Julia的一些特点,然后介绍Julia语言的语法,帮助大家快速入门Julia语言。本次直播的内容有:


    1.简单介绍Julia语言

    2.Julia语言的安装配置指南

    3.Julia语言的基本语法

    4.一切都是对象,在Julia语言中使用面向对象

    5.一切都是表达式,用Julia的宏进行元编程

    6.如何在Julia里调用Python:PyCall.jl

    7.如何编写高性能的Julia代码,一些建议


    讲师介绍:

    罗秀哲,Julia 中文社区主要成员,中国科学院物理所研究助理,集智-凯风研读营学者。


    直播时间:

    7月28日(本周六)19:30-21:00


    直播地址:

    http://campus.swarma.org/gcou=388?s=ee04b0da&r=catalog&ri=34


    直播交流群:


    扫描二维码入群


     Julia 中文社区年会

    报名通知:


    Julia User Meet Up是Julia社区的传统活动。旨在为Julian互相分享技术,交流使用心得,认识更多的Julian提供平台。 我们2015年在中国科学技术大学办了第一场国内的meetup,之后在深圳Haplox公司的赞助下办了第二场,随着Julia 1.0的临近 我们今年将在中国科学院软件研究所办第三次用户小聚活动。


    活动内容的更新可以通过访问中文社区的主页获得:http://juliacn.com


    如果您无法在官网(julialang.org)上下载到编译器,可以通过我们境内的服务器下载:Julia中文社区(http://47.95.118.149/)


    到目前为止,我们将有以下Julian分享自己的心得和技术:


    • Viral Shah,Julia语言项目发起人之一,Julia Computing公司CEO (远程)

    • 覃含章,现麻省理工学院(MIT)计算科学与工程博士在读,清华大学工业工程与数学双学士,研究方向为优化理论,在线学习,数据驱动的运营管理等。(远程)

    • 张常有,中国科学院软件研究所教授

    • 刘金国,中国科学院物理研究所博士后,Julia上的量子算法包Yao.jl的作者之一

    • 罗秀哲,Julia中文社区主要成员,物理所研究助理,Julia上的量子算法包Yao.jl的作者之一

    • 千里冰封,Julia Jetbrain平台IDE插件主要作者

    • 斯大卫,RandomNumbers.jl作者,GSoC 2016学员,目前Julia package境内Mirror(在建)主要维护者

    • Bigtan,山西证卷公司固定收益部,投资经理


    如果你也想向大家分享自己的开发心得,也可以在报名表格中填写具体要分享的内容。


    参与方式


    报名

    请复制这个链接填写报名表格:

    http://swarmaai.mikecrm.com/7C1Dfqo


    或者扫描二维码:

    

    活动地点:

    中国科学院软件研究所,5号科研楼 裙楼 334会议室


    活动直播:

    本次活动将会在集智俱乐部 B 站主页直播:

    https://live.bilibili.com/8091531


    活动时间:

    2018年7月29日(周天),早上9:00 ~ 12:00,下午2:00~5:00.


    报告主要内容:


    • 9:00~9:10,开场

    • 9:10 ~ 9:50,机器学习和编程语言(Viral Shah,英文)

    • 10:00~10:40, 用Julia进行优化建模及求解(覃含章,中文)

    • 10:40~11:00,讨论和休息

    • 11:00~11:30,在Jetbrain平台上为Julia打造的IDE插件(千里冰封,中文)

    • 11:40~12:10,Julia之债券做市交易(谭磊,中文,不直播)

    • 2:30~3:00,Julia程序的设计,利用多重派发实现的面向对象程序设计和元编程(罗秀哲,中文)

    • 3:10~3:40,Julia性能挑战之路(刘金国,中文)

    • 3:40~4:00,讨论和休息

    • 4:00~4:30,Julia编程实践(斯大卫,中文)

    • 4:40 ~ 5:10,Julia的聚类算法性能优化(张常有,中文)



    主办:

        Julia中文社区(www.juliacn.com)


    承办:

        集智俱乐部

        中国科学院软件研究所


    编辑:孟婕



    集智QQ群|292641157
    商务合作及投稿转载|swarma@swarma.org

    ◆ ◆ ◆

    搜索公众号:集智俱乐部


    加入“没有围墙的研究所”


    让苹果砸得更猛烈些吧!


    文章已于修改

      您可能也对以下帖子感兴趣

      文章有问题?点此查看未经处理的缓存