本文为作者Julia官网翻译,水平有限,还望指教。
https://julialang.org/
Julia语言的介绍
Julia是高性能的动态高级科学计算语言,提供了精致的编译器(
sophisticated compiler),分布式并行计算(
distributed parallel execution),数值精度(
numerical accuracy),和一个可扩展的科学函数库。Julia的基础库是用Julia自身编写的,成熟的合并了(
integrates mature),最佳版本的C和Fortran的线性代数,随机数字生成,单线程,字符处理的库。另外,Julia开发者社区也提供了一系列的可扩展包,使用的是Julia内置的快速空间(
rapid pace)的包管理工具。IJulia结合了Jupyter和Julia社区,提供了一个强大的基于浏览器的图形笔记界面。
Julia程序是被组织成多样的数据类型(multiple dispatch),定义函数方法和过载的时候,不同的内容类型组合,可以被用户定义。
特点介绍(A Summary of Features)
1.多样的数据类型(multiple dispatch),提供在一个函数中交叉组合不同数据类型的能力。
2.动态类型系统,文件类型,最优化,分派(dispatch)。
3.高性能,接近静态编译语言,C。
4.内置包管理器。
5.类似LISP的宏指令(macros),和其他的元编程组件。
6.调用Python函数,用PyCall包。
7.可以直接调用C函数,不用封装器或者特殊的API。
8.强大的类shell进程管理能力。
9.平行分布式计算设计。
10.协同协议为轻量级“绿色"线程。
11.快速的用户自定义类型,内置,紧凑。
12.自动高效的生成特殊代码,对用不同的内容(argument )类型。
13.优雅可扩展的数据和其他类型的转化和建立。
14.高效支持Unicode,包括但不仅限于UTF-8。
15.MIT许可证,免费开源自由。
高性能JIT编译器(High-Performance JIT Compiler)
Julia是基于LLVM的实时编译器,性能对比如下图所示。
|
Fortran |
Julia |
Python |
R |
Matlab |
Octave |
Mathe-matica |
JavaScript |
Go |
LuaJIT |
Java |
|
gcc 5.1.1 |
0.4.0 |
3.4.3 |
3.2.2 |
R2015b |
4.0.0 |
10.2.0 |
V8 3.28.71.19 |
go1.5 |
gsl-shell 2.3.1 |
1.8.0_45 |
fib |
0.70 |
2.11 |
77.76 |
533.52 |
26.89 |
9324.35 |
118.53 |
3.36 |
1.86 |
1.71 |
1.21 |
parse_int |
5.05 |
1.45 |
17.02 |
45.73 |
802.52 |
9581.44 |
15.02 |
6.06 |
1.20 |
5.77 |
3.35 |
quicksort |
1.31 |
1.15 |
32.89 |
264.54 |
4.92 |
1866.01 |
43.23 |
2.70 |
1.29 |
2.03 |
2.60 |
mandel |
0.81 |
0.79 |
15.32 |
53.16 |
7.58 |
451.81 |
5.13 |
0.66 |
1.11 |
0.67 |
1.35 |
pi_sum |
1.00 |
1.00 |
21.99 |
9.56 |
1.00 |
299.31 |
1.69 |
1.01 |
1.00 |
1.00 |
1.00 |
rand_mat_stat |
1.45 |
1.66 |
17.93 |
14.56 |
14.52 |
30.93 |
5.95 |
2.30 |
2.96 |
3.27 |
3.92 |
rand_mat_mul |
3.48 |
1.02 |
1.14 |
1.57 |
1.12 |
1.12 |
1.30 |
15.07 |
1.42 |
1.16 |
2.36 |
function mandel(z)
c = z
maxiter = 80
for n = 1:maxiter
if abs(z) > 2
return n-1
end
z = z^2 + c
end
return maxiter
end
function randmatstat(t)
n = 5
v = zeros(t)
w = zeros(t)
for i = 1:t
a = randn(n,n)
b = randn(n,n)
c = randn(n,n)
d = randn(n,n)
P = [a b c d]
Q = [a b; c d]
v[i] = trace((P.'*P)^4)
w[i] = trace((Q.'*Q)^4)
end
std(v)/mean(v), std(w)/mean(w)
end
以上的代码十分的清晰,任何一个有过科学计算语言编程经验的人都会看懂。在不放弃性能的情况下比C++更加的简单。根据设计,Julia允许用户从低级的循环,到高级的编程风格,在牺牲部分性能的情况下,是的复杂的算法可以快速的处理。这个可持续的设计级现象是Julia接近编码的特点,也是这个语言的最重要的设计风格。
为平行和云计算而设计(Designed for Parallelism and Cloud Computing)
Julia在用户不强制任何特殊的平行类型,反而,一共了一系列的关键创建分布式空间(key building blocks for distributed computation),使得足够灵活去支持不同的数据类型,允许用户添加更多。下面的代码显示了如何在平行状态下投硬币的计算。
nheads = @parallel (+) for i=1:100000000 rand(Bool)end
IJulia和Gadfly分别是类似于Jupyter的网页编译环境和多样的数值计算图像显示包。
参考文献
1.
https://julialang.org/