分享

JULIA 1.0 介绍及安装

 非线性co7vtwr8 2019-03-02

在 8 月 9 日的于伦敦举行的 JuliaCon 2018 会议上,Julia1.0 版本正式发布。Julia 1.0 中最重要的一个新功能是对语言 API 稳定性的承诺:你为 Julia 1.0 编写的代码可以继续在 Julia 1.1、1.2 等版本中运行。该语言是 “已完善” 的,核心语言开发人员和社区都可以放心使用基于此版本的软件包、工具和新功能。

JULIA介绍

Julia 可以看作是一门集(python,R,C,Ruby)众家之所长的编程语言,在首次公开时开发团队就已明确其需求.

Julia Computing的联合创始人Stefan Karpinski说:“相比其他语言,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.我们鼓励你查看这些链接后的具体源码来感受在不同语言里进行数值计算是多么地难易程度。

据 Julia Computing 的宣传,在七项基础算法的测试中,Julia 比 Python 快 20 倍,比 R 快 100 倍,比 Matlab 快 93 倍。

不过在网上我看了一个关于julia差评的一篇文章,里面举了一个简单的例子,就是我们的Hello World!文章中说执行输出hello world比python要慢很多。经过我的试验,的确效率会慢很多。

➜  julia  time julia test.jl
hello,world!
julia test.jl  0.25s user 0.42s system 38% cpu 1.720 total
➜  julia  time python test.py
hello,world!
python test.py  0.03s user 0.07s system 53% cpu 0.195 total
➜  julia

不过这其实不应该作为衡量julia的一个标准,毕竟julia的领域不在于一个简单的hello world!

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

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

julia 1.0新特性

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

  • 全新的内置包管理器 带来了巨大的性能改进,使安装包及其依赖项变得前所未有的简单。它还支持每个项目的包环境,并记录工作应用程序的确切状态,以便与他人共享 - 以及您未来的自我。最后,重新设计还引入了对私有包和包存储库的无缝支持。您可以使用与开源软件包生态系统相同的工具来安装和管理私有软件包。JuliaCon的演示文稿提供了新设计和行为的良好概述。

  • 朱莉娅有一个新的规范表示缺失值。能够表示和处理缺失的数据是统计和数据科学的基础。采用典型的Julian方式,新解决方案具有通用性,可组合性和高性能。任何泛型集合类型都可以通过允许元素包含预定义值来有效地支持缺失值missing。在以前的Julia版本中,这种“联合类型”集合的性能会太慢,但编译器的改进现在允许Julia匹配其他系统中自定义C或C 缺失数据表示的速度,同时也更加通用和灵活。

  • 内置String类型现在可以安全地保存任意数据。由于单个无效Unicode的杂散字节,您的程序不会因工作数小时或数天而失败。保留所有字符串数据,同时指示哪些字符有效或无效,使您的应用程序可以安全方便地处理具有所有不可避免的不完美之处的真实数据。

  • 广播已经是一种具有方便语法的核心语言功能 - 它现在比以往更强大。在Julia 1.0中,将广播扩展到自定义类型并在GPU和其他矢量化硬件上实现高效优化计算很简单,为将来更高的性能提升铺平了道路。

  • 命名元组是一种新的语言特性,它使得通过名称有效和方便地表示和访问数据。例如,您可以将一行数据表示为row = (name='Julia', version=v'1.0.0', releases=8)并访问该version列 row.version,其性能与不太方便的相同row[2]。

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

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

  • 现在始终使用与声明它们相同的语法调用参数类型构造函数。这消除了语言语法的模糊但令人困惑的角落。

  • 迭代协议已经完全重新设计,以便更容易实现多种迭代。而不是定义三种不同一般的职能-的方法start,next,done酮现在定义的单组分和双参数的方法 iterate函数。这通常允许使用具有开始状态的默认值的单个定义来方便地定义迭代。更重要的是,它使得实现迭代器成为可能,迭代器只知道一旦它们尝试并且无法生成值,它们是否已完成。这些迭代器在I / O,网络和生产者/消费者模式中无处不在; Julia现在可以用简单直接的方式表达这些迭代器。

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

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

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

  • 围绕Julia 1.0的新功能正在构建许多新的外部包。例如:

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

    • Cassette.jl提供了一种强大的机制,可以将代码转换传递注入Julia的编译器,从而实现事后分析和现有代码的扩展。除了用于分析和调试等程序员的工具之外,这甚至可以实现机器学习任务的自动区分。
      *异构体系结构支持得到了极大的改进,并且与Julia编译器的内部结构进一步分离。英特尔KNL只在Julia工作。Nvidia GPU使用CUDANative.jl 软件包进行编程,Google TPU的端口正在开发中。

安装

下载

julia的安装window、mac和linux三种,前两种需要下载安装包,第三中可以直接通过编译获得。
打开网址https:///downloads/,下载我们需要的64位安装包

安装

mac的安装比较简单,解压后将julia程序拖到我们的应用程序里面即可,然后接下来的就是设置环境变量。编辑.bash_profile

export PATH=${PATH}:/Applications/Julia-1.0.app/Contents/Resources/julia/bin

编辑完成之后执行source .bash_profile,之后就可以使用了。

验证安装

windows和linux的环境安装其实类似,安装后配置环境变量即可,这里就略过。

赞赏

如果你觉得到深广大数据Club对你有帮助,欢迎赞赏,有你的支持,我们一定会越来越好!

参考链接:https:///blog/2018/08/one-point-zero

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多