Julia 之所以这么受欢迎,这与它解决了工程师们一个“坑爹”问题有关:工程师们为了在数据分析中获得速度和易用性,不得不首先用一种语言编码,然后用另一种语言重写,即很多人口中的“双语言问题”。
与其他语言相比,Julia 易于使用,大幅减少了需要写的代码行数;并且能够很容易地部署于云容器,有更多的工具包和库,并且结合了多种语言的优势。据 Julia Computing 的宣传,在七项基础算法的测试中,Julia 比 Python 快 20 倍,比 R 快 100 倍,比 Matlab 快 93 倍。
目前 Julia 的应用范围已经非常广泛了,可以用于天文图像分析、自动驾驶汽车、机器人和 3D 打印机、精准医疗、增强现实、基因组学和风险管理等领域。
两年前,诺贝尔经济学奖得主 Thomas Sargent 和澳大利亚国立大学的经济学教授 John Stachurski,共同建议纽约联邦储备银行把其用于市场走势预测和政策分析的“动态随机一般均衡模型(DSGE)”转到 Julia 语言平台。在项目第一阶段后,他们发现,Julia 把模型运行时间缩短至原先 Matlab 代码的十分之一到四分之三。
除了语言本身的优点,Julia 还拥有非常强大的生态系统,主要应用于数据可视化、通用计算、数据科学、机器学习、科学领域、并行计算六大领域。
Julia 在规模化机器学习领域为深度学习、机器学习和 AI 提供了强大的工具(Flux 和 Knet)。Julia 的数学语法使其成为表达算法的理想方式,支持构建具有自动差异的可训练模型,支持 GPU 加速和处理数 TB 的数据。Julia 丰富的机器学习生态系统还提供监督学习算法(如回归、决策树)、无监督学习算法(如聚类)、贝叶斯网络和马尔可夫链蒙特卡罗包等。
Julia 目前下载量已经达到了 200 万次,Julia 社区开发了超过 1900 多个扩展包。这些扩展包包含各种各样的数学库、数学运算工具和用于通用计算的库。除此之外,Julia 语言还可以轻松使用 Python、R、C/C++ 和 Java 中的库,这极大地扩展了 Julia 语言的使用范围。
所以说,Julia 火起来不是没有原因的,而最新发布的 1.0 版本又添加了很多新功能。
按例,先贴上新版本相关链接:
Julia 1.0 试用版链接:
https://julialang.org/downloads/
GitHub 地址:https://github.com/JuliaLang/julia
目前支持 Julia 的平台:
Julia 到底是怎样一门语言?
Julia 首次公开面世时便体现出该社区对语言的一些强烈要求:
我们想要一种拥有自由许可的开源语言。我们想要它拥有 C 的速度与 Ruby 的灵活。它要容易理解,像 Lisp 一样真正地支持宏,但也要有像 Matlab 一样的明显、熟悉的数学符号。它还要像 Python 一样可用于通用编程,像 R 一样易于统计,像 Perl 一样可自然地用于字符串处理,像 Matlab 一样擅长线性代数,像 shell 一样擅长将程序粘合在一起。总之,它既要简单易学,但也要让最严肃的黑客开心。我们既希望它是交互式,也希望它是可编译的。
现在,一个充满活力和蓬勃发展的社区围绕着这种语言成长起来,来自世界各地的人们在追求这一目标的过程中不断地精炼并重塑着 Julia。超过 700 人为 Julia 做出了贡献,还有很多人制作了数以千计的令人惊叹的开源 Julia 软件包。总而言之,我们建立的语言:
如果你要从 Julia 0.6 或更早版本升级代码,我们建议首先使用过渡版 0.7,其中包括弃用警告帮助指导完成升级。如果你的代码没有警告,则可以更改为 1.0 而无需任何功能更改。已注册的软件包正在使用该过渡版本发布 1.0 兼容的更新。
1.0 更新了哪些功能?
当然,Julia 1.0 中最重要的一个新功能是对语言 API 稳定性的承诺:你为 Julia 1.0 编写的代码可以继续在 Julia 1.1、1.2 等版本中运行。该语言是“已完善”的,核心语言开发人员和社区都可以放心使用基于此版本的软件包、工具和新功能。
但 Julia 1.0 更新的不仅是稳定性,它还引入了一些强大、创新的语言功能。自 0.6 版以来,新发布的一些功能包括:
Julia 有了一个新的规范表示缺失值(https://julialang.org/blog/2018/06/missing)。能够表示和处理缺失的数据是统计和数据科学的基础。与 Julian 的一贯风格相符,这个新的解决方案具有通用性、可组合性和高性能。任何泛型集合类型都可以通过让元素包含 missing 的预定义值来有效地支持缺失值。在以前的 Julia 版本中,这种“联合类型”集合的性能会太慢,但编译器的改进现在使得 Julia 可以跟上其他系统中自定义 C 或 C ++ 缺失数据表示的速度,同时也更加通用和灵活。