快捷搜索:  汽车  科技

julia 编程(我究竟要不要学)

julia 编程(我究竟要不要学)3、语法简单的广播(Broadcasting)已经成为核心语言功能,现在它比以往任何时候功能都更强大。在 Julia 1.0 中,将广播扩展到自定义类型并在 GPU 和其他矢量化硬件上实现高效优化计算变得更简单,为将来提高性能提升铺平了道路。2、内置的 String 类型现在可以安全地保存任意数据。你的程序数小时甚至数天的工作不再会因为一些无效 Unicode 杂乱字节而失败。保留所有字符串数据,同时标记哪些字符有效或无效,可以使你的应用程序安全方便地处理不可避免具有缺陷的真实数据。全新的内置软件包管理器性能得以大幅改进,使安装包及其 dependencies 项变得前所未有的简单。它还支持每个项目的包环境,并记录工作应用程序的确切状态,以便与他人和你自己进行共享。最后,新的设计还引入了对私有包和包存储库的无缝支持。你可以使用与开源软件包生态系统相同的工具来安装和管理私有软件包。Julia

8月8日,于伦敦举办的 Julia 语言年会上,Julia 1.0版本正式发布,一起发布的还有 JuliaCon产品。不得不说,近年来,Julia 语言已然成为编程界的新宠。这门由 MIT CSAIL 实验室开发的编程语言结合了 C 语言的速度、Ruby 的灵活、Python 的通用性,以及其他各种语言的优势于一身,并且具有开源、简单易掌握的特点,大有潜力成为取代 Python 的下一个语言。如果Julia真的 如此神奇,你做好学习一门新编程语言的准备了吗?

julia 编程(我究竟要不要学)(1)

Julia发展史:

  • 2012年,在宣布Julia首次发布的博客文章中,Jeff Bezanson,Stefan Karpinski,Viral Shah和Alan Edelman这三个作者便表示,3个人共花了三年时间创建Julia,他们非常“贪婪”。这帮人厌倦了要在Matlab,Lisp,Python,Ruby,Perl,Mathematica,R和C之间的权衡,想要一种有益于科学计算,机器学习,数据挖掘,大规模线性代数、并行计算和分布式计算的单一语言。

julia 编程(我究竟要不要学)(2)

  • 2015年7月,该语言的设计者创立了Julia Computing公司,该公司以“开发Julia,它是易于使用,易于部署且易于扩展的产品。”为目标,在截至撰写本文时,该公司有28名员工,客户从国家实验室到银行,从经济学家到自动驾驶汽车研究人员均包括。除了在GitHub开源存储库上维护Julia之外,Julia Computing还提供商业产品,包括JuliaPro,有免费和付费两个版本之区分。
  • 2018年8月,Julia 1.0版本正式发布, 在1.0的版本中,使用它编写的代码可以在后续的 Julia 1.1、1.2 等版本上使用,是一个完全成熟的版本。Julia 团队表示:“Julia 1.0 版本是我们为如饥似渴的程序员构建一种全新语言数十年来工作成果的巅峰。”

1.0 更新的功能:

Julia 1.0 更新的不仅是稳定性,它还引入了一些强大、创新的语言功能。自 0.6 版以来,新发布的一些功能包括:

全新的内置软件包管理器性能得以大幅改进,使安装包及其 dependencies 项变得前所未有的简单。它还支持每个项目的包环境,并记录工作应用程序的确切状态,以便与他人和你自己进行共享。最后,新的设计还引入了对私有包和包存储库的无缝支持。你可以使用与开源软件包生态系统相同的工具来安装和管理私有软件包。JuliaCon 上展示了新功能设计的详细情况:

https://www.youtube.com/watch?v=GBi__3nF-rM

julia 编程(我究竟要不要学)(3)

1、Julia 有了一个新的规范表示缺失值(https://julialang.org/blog/2018/06/missing)。能够表示和处理缺失的数据是统计和数据科学的基础。与 Julian 的一贯风格相符,这个新的解决方案具有通用性、可组合性和高性能。任何泛型集合类型都可以通过让元素包含 missing 的预定义值来有效地支持缺失值。在以前的 Julia 版本中,这种 “联合类型” 集合的性能会太慢,但编译器的改进现在使得 Julia 可以跟上其他系统中自定义 C 或 C 缺失数据表示的速度,同时也更加通用和灵活。

2、内置的 String 类型现在可以安全地保存任意数据。你的程序数小时甚至数天的工作不再会因为一些无效 Unicode 杂乱字节而失败。保留所有字符串数据,同时标记哪些字符有效或无效,可以使你的应用程序安全方便地处理不可避免具有缺陷的真实数据。

3、语法简单的广播(Broadcasting)已经成为核心语言功能,现在它比以往任何时候功能都更强大。在 Julia 1.0 中,将广播扩展到自定义类型并在 GPU 和其他矢量化硬件上实现高效优化计算变得更简单,为将来提高性能提升铺平了道路。

4、命名元组是一种新的语言特性,它使得通过名称表示和访问数据变得高效快捷。例如,你可以将一行数据表示为 row =(name =“Julia”,version = v“1.0.0”,releases = 8),并将版本列作为 row.version 访问,其性能与不甚快捷的 row [2] 相同。

5、点运算符现在可以重载,让类型使用 obj.property 语法来获取和设置结构字段之外的含义。这对于使用 Python 和 Java 等基于类的语言更顺畅地进行互操作是个福音。属性访问器重载还允许获取一列数据以匹配命名元组语法的语法:你可以编写 table.version 来访问表的 version 列,就像 row.version 访问单行的 version 字段一样。

6、Julia 的优化器在很多方面变得比我们在这里提到的更聪明,但有一些亮点值得一提。优化器现在可以通过函数调用传播常量,可以更好地做到死码消除和静态评估。另外,编译器在避免在长生命周期对象周围分配短期包装器方面也要好得多,这使得程序员可以使用便利的高级抽象而无需降低性能成本。

7、现在使用声明相同的语法调用参数类型构造函数。这消除了语言语法的模糊和令人困惑的地方。

8、迭代协议已经完全重新设计,以便更容易实现多种迭代。现在是一对一定义一个或两个参数方法,而不是定义三个不同泛型函数的方法——start,next,和 done。这通常使得使用具有开始状态的默认值的单个定义可以更方便地定义迭代。更重要的是,一旦发现无法生成值就可以部署迭代器。这些迭代器在 I / O、网络和生产者 / 消费者模式中无处不在;Julia 现在可以用简单直接的方式表达这些迭代器。

9、范围规则简化。无论名称的全局绑定是否已存在,引入本地范围的构造现在都是一致的。这消除了先前存在的 “软 / 硬范围” 区别,并且意味着现在 Julia 可以始终静态地确定变量是本地的还是全局的。

10、语言本身非常精简,许多组件被拆分为 “标准库” 软件包,这些软件包随 Julia 一起提供但不属于 “基础” 语言。如果你需要它们,它可以给你方便(不需要安装),但不会被强加给你。在未来,这也将允许标准库独立于 Julia 本身进行版本控制和升级,从而允许它们以更快的速度发展和改进。

11、我们对 Julia 的所有 API 进行了彻底的审查,以提高一致性和可用性。许多模糊的遗留名称和低效的编程模式已被重命名或重构,以更优雅地匹配 Julia 的功能。这促使使用集合更加一致和连贯,以确保参数排序遵循整个语言的一致标准,并在适当的时候将(现在更快)关键字参数合并到 API 中。

12、围绕 Julia 1.0 新功能的新外部包正在构建中。例如:

正在改进数据处理和操纵生态系统,以利用新的缺失支持

Cassette.jl(https://github.com/jrevels/Cassette.jl)提供了一种强大的机制,可以将代码转换传递注入 Julia 的编译器,从而实现事后分析和现有代码的扩展。除了用于分析和调试等程序员的工具之外,甚至可以实现机器学习任务的自动区分。

异构体系结构支持得到了极大的改进,并且与 Julia 编译器的内部结构进一步分离。英特尔 KNL 只能用 Julia 工作。Nvidia GPU 使用 CUDANative.jl(https://github.com/JuliaGPU/CUDAnative.jl)软件包进行编程,Google TPU 的端口正在开发中。

julia 编程(我究竟要不要学)(4)

Julia的特点:

快速:Julia 为高性能而生。Julia 程序通过 LLVM 为多个平台编译高效的本地代码。

通用:它使用多分派作为范例,使得表达许多面向对象和函数式的编程模式变得容易。标准库提供异步 I/O、进程控制、日志记录、性能分析、包管理器等。

动态:Julia 是动态型语言,与脚本语言类似,并且支持交互式使用。

专业:它擅长数值计算,其语法适用于数学,支持多种数值数据类型,并具有良好并行性。Julia 的多分派天生适合定义数字和类数组的数据类型。

多样:Julia 拥有丰富的描述性数据类型,类型声明使程序条理清晰且稳定。

可组合:Julia 的包可以很好地组合在一起。单位数量的矩阵,或者货币和颜色的数据列表,都可以组合——而且性能很好。

学习 Julia的原因:

从 2012 年到现在,Julia 1.0 在编程界已经打出了自己的一片 “小天地”。截至发稿前,Julia 在 Github 上已经获得了 12293 颗星星,TOIBE8 月份编程语言排行榜上已迅速攀升至第 50 名。

julia 编程(我究竟要不要学)(5)

Julia 之所以这么受欢迎,是因为它解决了工程师们一个 “坑爹” 问题:工程师们为了在数据分析中获得速度和易用性,不得不首先用一种语言编码,然后用另一种语言重写,即很多人口中的“双语言问题”。

与其他语言相比,Julia 易于使用,大幅减少了需要写的代码行数;并且能够很容易地部署于云容器,有更多的工具包和库,并且结合了多种语言的优势。据 Julia Computing 的宣传,在七项基础算法的测试中,Julia 比 Python 快 20 倍,比 R 快 100 倍,比 Matlab 快 93 倍

目前 Julia 的应用范围已经非常广泛了,可以用于天文图像分析、自动驾驶汽车、机器人和 3D 打印机、精准医疗、增强现实、基因组学和风险管理等领域。

两年前,诺贝尔经济学奖得主 Thomas Sargent 和澳大利亚国立大学的经济学教授 John Stachurski,共同建议纽约联邦储备银行把其用于市场走势预测和政策分析的 “动态随机一般均衡模型(DSGE)” 转到 Julia 语言平台。在项目第一阶段后,他们发现,Julia 把模型运行时间缩短至原先 Matlab 代码的十分之一到四分之三。

除了语言本身的优点,Julia 还拥有非常强大的生态系统,主要应用于数据可视化、通用计算、数据科学、机器学习、科学领域、并行计算六大领域。

julia 编程(我究竟要不要学)(6)

Julia 在规模化机器学习领域为深度学习、机器学习和 AI 提供了强大的工具(Flux 和 Knet)。Julia 的数学语法使其成为表达算法的理想方式,支持构建具有自动差异的可训练模型,支持 GPU 加速和处理数 TB 的数据。Julia 丰富的机器学习生态系统还提供监督学习算法(如回归、决策树)、无监督学习算法(如聚类)、贝叶斯网络和马尔可夫链蒙特卡罗包等。

Julia 目前下载量已经达到了 200 万次,Julia 社区开发了超过 1900 多个扩展包。这些扩展包包含各种各样的数学库、数学运算工具和用于通用计算的库。除此之外,Julia 语言还可以轻松使用 Python、R、C/C 和 Java 中的库,这极大地扩展了 Julia 语言的使用范围。

哪些人建议学习:

1、之前使用Python但是因为性能问题,经常需要使用numba/Cython/C API/ctypes/etc.等方式进行优化的人。Julia或许能够帮助你解决两语言问题,并且获得可读性更好,更容易维护的代码。

2、之前使用MATLAB,但是被一些付费功能困扰的用户(MATLAB 2018也是不错的,但是要支持正版哈)

3、之前使用Fortran和R的用户,强烈建议使用Julia(可以结合着用也,FFI是很不错的)

4、之前使用Sage/Octave的用户,不妨尝试一下这个新玩意儿

5、之前使用Mathematica但是想开始做一些数值的用户,Mathematica不是不能做数值,也可以调用C/C 但是Julia不妨是相比其它工具更平滑的选择。

下载与安装:

目前支持 Julia 的平台:

julia 编程(我究竟要不要学)(7)

由于Julia目前官网的服务器只有AWS s3(他们也很穷)。所以国内的一些地区下载速度很慢:

https://julialang.org/downloads/

julia 编程(我究竟要不要学)(8)

大家可以试一试,然后也可以去Julia Computing公司提供的Julia全家桶(你可以把它理解为Julia版本的Anaconda),最左边的JuliaPro是免费的:

https://juliacomputing.com/

之前浙大的LUG搭建了一个镜像,但是维护的同学最近有一些忙,所以目前还没有更新到1.0。但是其实你如果无法从以上途径下载,那么从境内的源里下载Julia 0.6也其实并不影响你先熟悉一些基本语法,境内的源的下载地址在这里:

http://juliacn.com/downloads/

对编程感兴趣,想了解更多的编程知识,关注头条号一起玩转编程

更多编程资讯、干货持续更新中~

猜您喜欢: