第1章 初识Julia
Julia语言[1]是一种为高性能数值计算设计的高层次动态编程语言,在分布式并行化、精确数值计算等方面提供了独具特色的支持,并包含大量可扩展的数学函数库。尤其是在线性代数、随机数生成、信号处理、字符串处理等方面,Julia集成了众多成熟、优秀的基于C和Fortran开发的开源库,有着很高的性能与效率。另外,Julia的开发者社区已经非常强大,贡献了大量的第三方库,我们可通过内置的包管理器方便地安装使用。
Julia语言更多的特点还有:
·多态分发(Multiple Dispatch)机制,通过不同类型的参数组合,可以定义同名函数不同的行为。
·动态类型系统:用户自定义的类型可像内置类型一样快速、轻便。
·简洁又可扩展的数值类型转换与提升机制。
·高效能的多语言编码环境,支持包括UTF-8在内的各种Unicode编码[2]。
·原生设计的并行与分布式计算机制。
·轻量级的“绿色”线程—协程机制。
·优秀的性能,可以与静态编译的C语言媲美。
·Lisp语言式的宏及元编程(Meta-programming)范式的支持。
·内置的第三方功能包管理器。
·可与Python、R、Matlab及Java等语言进行混合编程。
·类似于Shell的外部程序调用。
·不需要额外的封装层或特别的API,即可直接调用C语言的库函数。
可以说Julia在很多方面都独具特色。比如在并行化计算方面,Julia并没有专门设计特殊的语法结构,而是提供了足够灵活的机制,并可自动进行分布式的部署,能够实现云端操作,使得并行化编程极为便捷。
值得称道的是,Julia语言基于MIT许可证[3]是开源、免费的。而且其生态中的各种库与软件也主要采用GPL、LGPL或BSD等许可。核心代码及各种第三方大部分均托管在GitHub这个有名的开源代码管理平台中,用户可以获得源代码,了解语言的各种实现细节,不但能对语言进行更深入的学习,也能够在设计思路方面受益。
使用Julia开发有着非常好的体验。不但语法自然简洁,而且结构清晰,效率也非常高。更为可贵的是,其性能也不差。优秀的语言设计结合强大的即时(Just-In-Time,JIT)编译系统LLVM[4],使得Julia的运行性能在很多时候能够媲美C语言。在一份官方提供的Benchmark中,相比于C、Fortran、Python、Matlab/Octave、R、JavaScript、Java、Lua与Mathematica等其他语言,Julia在性能方面有着非常卓越的表现。[5]
Julia语言v0.1版发布于2013年2月14日,自2017年12月14日发布v0.6.2版本后,代码更新很快,2018年8月8日发布了v0.7版后,当年8月9日便发布了v1.0的正式版本。经过数次的版本迭代,Julia语言已经日趋成熟,并已经科学计算领域崭露头角。完全可以相信,在不久的将来,在众多的编程语言中,尤其是在科学计算领域方面,Julia必能占有一席之地。
[1] Julia语言官网为https://julialang.org,其中包括Julia基本介绍、源代码链接、英文说明文档、博客、社区、生态及教程等各种资源。
[2] Unicode是计算机领域的一个业界标准,统一为各种自然语言字符设定了唯一的编码,以满足跨语言、跨平台文本转换处理的需求。UTF-8、UTF-16、UTF-32都是编码方案之一。
[3] MIT许可证(The MIT License)是开源软件授权中被广泛使用的一种,比GPL、LGPL、BSD等更为宽松:被授权人有权使用、复制、修改、合并、出版、传播、再授权及贩售软件或其副本,也可适当修改授权条款,但需在发布版本中包含该版权许可声明。
[4] 底层虚拟机(Low Level Virtual Machine,LLVM),是编译器的基础建设之一,利用虚拟技术实现编译期、链接期、运行期及“空闲期”的优化,是一系列技术工具链的集合,通常作为某类语言的编译器的后台。LLVM项目由伊利诺伊大学的维克拉姆·艾夫(Vikram Adve)和克里斯·拉特纳(Chris Lattner)于2000年发起。早期以C/C++为主要对象,后来开始支持Objective-C,并扩展到其他更多的编程语言。
[5] 有兴趣的读者可以从GitHub中的官网地址下载代码运行看看,网址为https://github.com/JuliaLang/Microbench marks.git。