21CTO导读:Julia是数据科学家的一个“零妥协”的编程语言,它将动态语言的易用性与编译语言的速度相结合的开发语言,目前它的1.0版本刚刚正式发布。
Julia语言的Logo
Julia是一款免费的开源,高级,高性能,动态编程语言,适用于数值计算。它兼具动态语言的开发便利性和编译的静态类型语言的性能,部分归功于基于LLVM的JIT编译器生成本机机器代码,部分是通过多个专业化实现类型稳定性的设计,这使得代码编译更高效。
Julia 语言的官网:https://julialang.org/
Julia 语言项目地址:https://github.com/JuliaLang
在2012年宣布Julia首次发布的博客文章中,Jeff Bezanson,Stefan Karpinski,Viral Shah和Alan Edelman这三个作者表示,3个人花了三年时间创建Julia,他们非常“贪婪”。这帮人厌倦了要在Matlab,Lisp,Python,Ruby,Perl,Mathematica,R和C之间的权衡,想要一种有益于科学计算,机器学习,数据挖掘,大规模线性代数、并行计算和分布式计算的单一语言。
Julia除了对研究科学家和软件工程师具有吸引力之外,Julia还对数据科学家以及金融分析师和量子计算也具有吸引力。
2015年7月,该语言的设计者创立了Julia Computing公司,以“开发Julia,它是易于使用,易于部署且易于扩展的产品。”为目标。截至撰写本文时,该公司有28名员工,客户从国家实验室到银行,从经济学家到自动驾驶汽车研究人员均包括。除了在GitHub开源存储库上维护Julia之外,Julia Computing还提供商业产品,包括JuliaPro,有免费和付费两个版本之区分。
从技术上来看,这种语言会长期发展下去。如今是一个里程碑的时刻。本周于伦敦举办的 Julia 语言年会上,Julia 1.0 正式发布,一起发布的还有 JuliaCon产品。
什么是Julia?
Julia旨在以单一语言创建前所未有的易用性,功能和效率组合。对于它效率问题,请看以下图片:
上图显示了Julia和其他10种语言相对于C语言的表现,越低越好。该图执行的基准是非常低级的任务,是使用Jupyter中的Gadfly绘图和数据可视化系统创建的。 Julia右边的语言按几何平均值排序,LuaJIT最快,GNU Octave的速度最慢。
对于几种数据操作,Julia代码比C语言更快,其它的操作会比C慢几倍。相比之下,比如R语言,某些操作比C慢近1000倍。
Julia 1.0
如今Julia 在开发语言排行榜中已经开创了自己的一席之地。在GitHub上Julia 已经获得了 12293 颗星。
此外,在TOIBE 8 月份编程语言排行榜(https://www.tiobe.com/tiobe-index/)上已攀升至第 50 名:
这一切,缘于Julia 开发者对该语言提出了很多“贪婪”的需求:
我们想要一种十分自由的开源语言,同时兼具 C 语言的速度和 Ruby 语言的灵活度。我们想要一种同像性语言,具有像 Lisp 一样真正的宏,也有像 Maltlab 一样浅显易懂的数学符号。它是像 Python 一样有用的通用编程语言,像 R 语言一样便于统计的语言,像 Perl 一样自然的字符串处理语言,像 Matlab 一样强大的线性代数语言,也是像 shell 一样的「胶水语言」。它简单易学,却能让严苛的黑客们为之倾心。我们希望它兼具交互性和可编译性。
为了这样一个目标,世界各地的人们不断地重塑并改进着 Julia。超过 700 人对 Julia 做出了实质性贡献,更有不计其数的人制造了数千个惊人的 Julia 开源软件包。社区构建了一种这样的语言:
高速:Julia 为高性能而生。Julia 程序通过 LLVM 为多个平台编译高效的本地代码。
通用:它使用多分派作为范例,使得表达许多面向对象和函数式的编程模式变得容易。标准库提供异步 I/O、进程控制、日志记录、性能分析、包管理器等。
动态:Julia 是动态型语言,与脚本语言类似,并且支持交互式使用。
专业:它擅长数值计算,其语法适用于数学,支持多种数值数据类型,并具有良好并行性。Julia 的多分派天生适合定义数字和类数组的数据类型。
多样:Julia 拥有丰富的描述性数据类型,类型声明使程序条理清晰且稳定。
可组合:Julia 的包可以很好地组合在一起。单位数量的矩阵,或者货币和颜色的数据列表,都可以组合——而且性能很好。
现在, Julia语言 1.0 版本已经可以下载。1.0 不仅涉及稳定性,还引入了多种新的强大、创新性语言功能。Julia 1.0 的新功能专门构建了许多新的外部软件包,如数据处理和操作生态系统的改进和异构架构支持的改进等。
对于1.0 这样一个版本号,意味着语言做了大量的改进,如果你想查看完整的列表,可以访问其官网:https://docs.julialang.org/en/release-0.7/NEWS/
Julia 的JIT编译器
与纯解释器相比,JIT(即时)编译器在代码运行之前必须解析源代码然后生成本地机器代码,这与Java的VM很像,这样也就意味着Julia程序在每个函数和宏第一次会话运行时会有一些启动时间。可以在下面的屏幕截图中,看到第二次生成一百万个随机浮点数时,所花费的时间比第一次执行时少一个数量级。 @time宏和rand()函数都需要在代码中首次编译,因为Julia库是用Julia编写的。
来看如下命令行代码:
julia>@timerand(10^6);
0.62081seconds(14.44k allocations:8.415MiB)
julia>@timerand(10^6);
0.004881seconds(7allocations:7.630MiB)
Julia粉丝声称它比Python更易于使用,包括R甚至Matlab。 这些数据比较值得开发者仔细研究。Julia语言被设计的优雅,功能强大,并且面向科学计算,而且库提供了广泛的高级编程功能。
Julia的代码实例
以下是一段Julia语言示例,是类似Mandelbrot的基准代码:
可以看到,Julia中内置了复数运算,测试和计时的宏也是如此。Julia没有那些C语言系的尾随分号,以及Lisp语言困扰程序员的嵌套括号。请注意,mandelperf()在第61行和第62行中被调用两次。第一次调用测试结果的正确性并执行JIT编译;第二次则直接出结果。
JuliaPro和Juno IDE
你可以从Julia语言官网(https://julialang.org/)下载适用于Windows,MacOS,通用的Linux或FreeBSD的免费开源Julia命令行。 然后从GitHub克隆Julia源代码存储库。
除了编译器之外,JuliaPro还提供了基于Atom的Juno IDE(如下所示)和160多个软件包,包括可视化和绘图相关功能。
除了免费的JuliaPro之外,还可以添加企业支持订阅,量化财务功能,数据库支持和时间序列分析等。 JuliaRun是集群或可扩展的云服务器。
Juno是一个基于Atom文本编辑器的免费Julia IDE
Jupyter NotePad和IJulia
除了使用Juno作为Julia IDE之外,还可以使用带有Julia扩展的Visual Studio Code(如下所示)和带有IJulia内核的Jupyter NotePad(如下面的第二和第三个屏幕截图所示)。
使用Visual Studio Code 之 Julia 扩展
启动Julia内核从Jupyter notebook
科学家与研究人员的价值
科学家或研究人员在Julia上会发现更多感兴趣的包,我们可以从上面右栏中的类别名称中看到。 此外Julia的许多语言特征都面向科学计算,工程和分析。 比如,在下面的截图中,矩阵和线性代数都是在复杂的层次上构建到语言中的。
Julia为多维数组和线性代数运算提供了复杂的支持
开始学习Julia
开发者可以免费使用Julia和众多开源软件包,也可以在需要时购买企业支持和高级功能。
首先,使用全局变量会让Julia变慢。这是因为全局范围内的变量没有固定类型,除非声明类型,这反过来意味着使用全局变量的函数和表达式必须处理任意种类型。在函数范围内声明变量会更有效,因此可以确定它们的类型,并且可以生成使用它们的简单代码。
其次,我们需要了解,在Julia命令行中在顶层声明的变量就是全局变量。如果你不能避免这样做,可以通过声明const常量来使性能更好或更安全一些。这并不意味着变量的值不能改变,只是变量的类型不能更改。
我们可以阅读Julia手册和Julia学习资源的网站,如http://julia-cn.readthedocs.io/zh_CN/latest/。除了阅读这个手册,还可能观看Jane Herriman的入门视频教程。
如果你更喜欢在自己的机器而不是JuliaBox上进行操作,可以从GitHub克隆JuliaBoxTutorials repo并从Jupyter运行Local_installations安装所需的所有软件包,这样就可以愉快地在本地调试Julia了。
编译:洛逸
来源:21CTO社区
赞赏作者,加个鸡腿吧~
领取专属 10元无门槛券
私享最新 技术干货