语言简介
科学计算对性能一直有着最高的需求,但目前各领域的专家却大量使用较慢的动态语言来开展他们的日常工作。 偏爱动态语言有很多很好的理由,因此我们不会舍弃动态的特性。 幸运的是,现代编程语言设计与编译器技术可以大大消除性能折衷(trade-off),并提供有足够生产力的单一环境进行原型设计,而且能高效地部署性能密集型应用程序。 Julia 语言在这其中扮演了这样一个角色:它是一门灵活的动态语言,适合用于科学计算和数值计算,并且性能可与传统的静态类型语言媲美。[1]
Julia 是一门支持过程式、函数式和面向对象的多范式语言,其类型系统是动态、主格[nominal]、参数[parametric]的,它以数学编程语言为基础,同时也参考了不少流行的动态语言。
它最常用的运行模式是 JIT,同时也支持解释与编译。
优势
Julia 的目标是创建一个前所未有的集易用、强大、高效于一体的语言。
- 免费开源
- 用户自定义类型的速度与兼容性和内建类型一样好
- 无需特意编写向量化的代码
- 为并行计算和分布式计算设计
- 轻量级的“绿色”线程:协程
- 优雅的类型系统
- 可扩展的类型转换和类型提升
- 对 Unicode 的有效支持,包括但不限于 UTF-8
- 直接调用 C 函数,无需封装或调用特别的 API
- 像 Shell 一样强大的管理其他进程的能力
- 像 Lisp 一样的宏和其他元编程工具
缺陷
- (在 JIT 模式下)预热较慢,这是所有基于 JIT 的语言的共有特点;Julia 的历次版本在这方面持续改进
- 生态环境不太友好,包的数量与质量仍待提高(Julia 仍然是一门新兴语言)
- 有多种编译方式,但各有缺陷
- 讨论:Julia及其生态的现状与发展问题
与传统动态语言区别
- 核心语言很小:标准库是用 Julia 自身写的,包括整数运算这样的基础运算
- 丰富的基础类型:既可用于定义和描述对象,也可用于做可选的类型标注
- 通过多重派发,可以根据类型的不同,来调用同名函数的不同实现
- 为不同的参数类型,自动生成高效、专用的代码
- 接近 C 语言的性能
前景 & 当下
- 应用包括但不限于数值优化、生物信息、机器学习、数据科学、计算物理
- 2021 年的调查结果
- julia-matlab-python-r 比较
- 加入 Petaflop Club
- 可以在 Julia 计算网站 上阅读更多更具体的例子。[5]
- 1https://docs.juliacn.com/latest/
- 2https://julialang.org/blog/2012/02/why-we-created-julia-zh_CN/
- nominal类型兼容性基于显式声明的类型名称而非结构
- parametric支持泛型
- 5https://github.com/JuliaCN/JuliaDataScience/blob/467a3375180a991d9b721ee4cce168e2583c4acb/contents/why_julia.md?plain=1#L368-L380