早在 2009 年,Jeff Bezanson、Alan Edelman、Stefan Karpinski 和 Viral Shah 四个人聚到一起决心创造一种全新的编程语言。新语言要快速、有表达力,结合 C 语言、Matlab、Java、Ruby、Python、Perl 和 R 各自的优势,并能直接与 R、Matlab、Python 等最受欢迎的机器学习语言,以及其他动态工具展开竞争。听起来这思路很直接、很简单,是吧?这想法的背后有着几名创始人对开发者“痛点”的长期切身体会:工程师们为了在数据分析中获得速度和易用性,不得不首先用一种语言编码,然后用另一种语言重写——这实在很“坑爹”。而这就是很多人口中的“双语言问题”。
这背后的努力,促成了 Julia 的诞生。
创始人之一的 Viral Shah 解释道:
“为什么一个编程语言不能同时具有性能和生产力,这难道是一个物理定律吗?或者,现有的编译器-语言技术还没有发展到那个阶段?我们认为,在同个封装中获得易用性和性能是可能的。于是,我们开始投入到这个项目之中,并把它命名为 Julia。”
Viral Shah
随后,几名 Julia 创始人联合 Keno Fischer 创立了“Julia Computing” ——一家咨询公司,为使用 Juia 语言的企业客户提供帮助。
Julia 是一门开源语言,允许开发者创建性能更为强大的数字算法——相对于采用 Just In Time (JIT) 解释的语言而言。它易于使用,大幅减少了需要写的代码行数;并且能够很容易地部署于云容器(cloud containers )。
2012 年,Julia 的第一个公开版本 Julia 0.1 正式发布。2016 年九月发布了 Julia 0.5,涵盖了 1100 个工具包,比一年前的 0.4 版本增加了 57%。Julia 开发者社区的规模还很小,目前在全世界范围内大约有 15 万用户。但随着计划于今年 6 月在加州大学伯克利分校举办的 JuliaCon 峰会,以及将在峰会上发布的 Julia 1.0;届时,它的用户群有望快速增长。Viral Shah 表示,他们的下一个目标是 150 万用户。另外,现有 Julia 版本的技术支持期限是一年,而 Julia 1.0 将会是五年。
Julia 已经引起了华尔街的注意。投资银行 Berkery Noyes 的 CTO Keith Lubell 评论道:
“真正让我们感到激动的是,你可以编写高层级的科学、数字计算,而不需要重新编译。通常来讲,当你用 R 或 Matlab 写了一些东西,想让它运行得更快。你需要把它重新翻译至 C ,或者其他更快的语言。而使用 Julia 就不需要这样——它的速度是拔尖的。”
Julia 仍是摇篮中的新生儿。因此,若要成为大数据、机器学习工程师们的普遍选择,它需要在多个领域成长起来。其中最重要的是开发者社区,它亟需壮大以提供更多的工具包和库。只有这样, Julia 才能吸引更多用户到它的平台,与基础设施完善的老牌数据分析语言直接竞争。
如果你跟任何使用 Julia 的开发者聊聊,他们会告诉你,选择“上车”、使用这个萌芽期编程语言的首要原因是速度。据 Julia Computing 的宣传,在七项基础算法的测试中,Julia 比 Python 快 20 倍,比 R 快 100 倍,比 Matlab 快 93 倍。
Julia 精简的代码行数,对其性能提升贡献巨大。迄今为止最引人注目的 Julia 应用案例是纽约联邦储备银行( Federal Reserve Bank of New York )
美联储对 Julia 的应用
大约两年前,诺贝尔经济学奖得主、纽约大学经济学教授、咨询公司 QuantEcon 的创始人 Thomas Sargent,以及澳大利亚国立大学的经济学教授 John Stachurski,共同建议纽约联邦储备银行( Federal Reserve Bank of New York )把其用于市场走势预测和政策分析的“动态随机一般均衡模型(DSGE)”转到 Julia 语言平台。
Thomas Sargent
此前,纽联储的 DSGE 模型一直用 Matlab 运行。该项目背后的逻辑是,探索像 DSGE 这样的大型模型能否轻易转移至 Julia,以及其运行速度究竟会不会有大幅提升。纽联储采纳了建议,并利用该机会与 QuantEcon 合作。纽联储宏观经济与货币研究部门副主席 Marco Del Negro 表示:
“对我而言,这是一个绝妙的注意。我们当时正在考虑脱离 Matlab ——既出于成本,也有速度方面的原因。我们希望进一步提升我们的模型,并探索新事物。”
在项目第一阶段后,他们发现,Julia 把模型运行时间缩短至原先 Matlab 代码的十分之一到四分之三。模型中,Metropolis-Hastings 采样(从概率分布获取一系列随机样本的马尔可夫链蒙特·卡罗方法)是最耗费时间的环节。而在该环节,Julia 的运行速度是 Matlab 代码的 10 倍。相对于原先的 Matlab 版本,基于 Julia 的全新 DSGE 模型把代码行数减少了将近一半。
雷锋网获知这些性能提升不能全归功于 Julia。纽联储表示,Matlab 版本的 DSGE 模型开发周期相当长,是一个累积式的过程。另外,它还支持了过多的模型和特征。这些原因导致其有很多不完美之处,运行效率本身就有不足。新项目下,这些专家们用 Julia 把该模型从头设计了一遍,针对此前发现的一系列问题做了改进。因此,新模型可被看做是经历了两重升级:架构优化以及 Julia。当然,两者是结合在一起实现的。不过,一些“经历了较小优化以及重设计”的算法,比如测量算法以及 kalman_filter 函数,新版本仍然比旧的、基于 Matlab 的模型提升了大约五分之一至四分之三的运算速度,见下图。
雷锋网(公众号:雷锋网)获知,目前纽联储已经开启了项目的第二阶段:改进 DSEG 模型的预测能力。由于他们需要不断为模型添加数据和层级,纽联储认为 Julia 能更好应付提升的复杂性——他们估算基于 Julia 的模型运行时间大约只需要一至两天,而 Matlab 可能需要一个月才能等到输出结果。但这仍需第二阶段完成后进行证实。
开发者社区
Julia 最大的短板在于社区。雷锋网获知,Python 已经 25 岁了, R 语言快 25 岁了,Matlab 超过 30 岁了。它们有非常扎实的社区群众基础——不断加入新工具包以及库的支持。有观点认为这些主流语言会不断改进,并在未来的某个时间点,在原本的短板上一举超越这些新兴、但强大的小众语言。Keith Lubell 就表达了类似的观点,但他补充道:投资银行业正受到来自金融科技公司越来越大的竞争压力,迫使他们考虑利用 Julia 这些新兴语言实现创新。
为了对开发者社区提供支持,AOT 的 Duve 说他有信心 Julia Computing 会成为 RStudio 那样的机构。后者为 R 语言开发开源的免费工具及商用级的专业产品。Duve 认为,Julia 采取的开发、发布方式会鼓励更多的企业级用户采用它。尤其 Julia 的用户体验友好,它的架构使得金融和经济学领域的专家们很容易使用,因而已受到金融圈部分人士的欢迎。纽联储就是一个例子。
Duve 说道:“Julia 开发者社区推动、改进该语言的方式,比 R 语言历史上的任何时候都有条理地多。”
另外,BestX 的 Thind 表示,虽然 Julia 能被轻易部署于云端容器,但与云交互存在着风险:
“在云端服务上,用 Julia 在整个簇(cluster)部署多个处理进程,就像 MapReduce 那样,是非常简便、高效的。但如果你需要与 DynamoDB 或 RedShift 这样的特定服务交互,Python 的 API 要比 Julia 的原生库成熟、强大得多。”
想要拿 Julia 试手的开发者,需要仔细考虑他们使用该语言的用途,以及拿什么与之配合。
“所有想要加入 Julia 阵营的公司都需要弄清楚,你想要用它来实现哪些不一样的功能?它能不能为其中至少一半的功能提供原生支持?你可以用 C 语言或者 Python 来完成剩下的那些,并且这会是完全无缝的体验。但是,如果你的大部分应用都需要其他语言来弥补,你应该暂时缓一缓转向 Julia,或者联系 Julia Computing 看看能否得到缺失的功能支持。”
最后,我们来看看 Julia 创始人之一的 Viral Shah 的愿景:
“某一天,开发者社区会传来一个信号—— Julia 已经做好准备,将进入指数级增长轨道。”
via waterstechnology