Julia (编程语言)

Julia是一种高级通用[13]动态编程语言,它最初是为了满足高性能数值分析计算科学的需要而设计的,不需要编译器,速度快[14][15][16][17],也可用于客户端和服务器的Web用途[18][19]、低级系统编程或用作规约语言[20]

Julia
Julia prog language.svg
编程范型 多范式多重派发过程式函数式元编程多阶段编程英语Multi-stage_programming
设计者 Jeff BezansonAlan EdelmanStefan KarpinskiViral B. Shah
实现者 Jeff BezansonStefan KarpinskiViral B. Shah 等[1][2]
发行时间 2012年,​8年前​(2012[3]
稳定版本
1.4.0[4]
( 2020年3月21日,​7天前​(2020-03-21
预览版本
1.4.0-rc2[5]
( 2020年2月24日,​33天前​(2020-02-24
实现语言 JuliaCC++SchemeLLVM[6]
系统平台 x86-64IA-32ARM v8(64位)CUDAARM (32位)PowerPC网页浏览器 (JavaScriptWebAssembly)[7]
操作系统 macOSWindowsLinuxFreeBSD[8]Android[9]
许可证 MIT许可证
文件扩展名 .jl
网站 JuliaLang.org
启发语言

Julia设计的独特之处包括,参数多态的类型系统,完全动态语言中的类型,以及它多分派的核心编程范型。它允许并发并行分布式计算,并直接调用CFortran库而不使用粘合代码

Julia拥有垃圾回收机制[21],使用及早求值,包含了用于浮点计算、线性代数随机数生成正则表达式匹配的高效库。有许多库可以使用,其中一些(如用于快速傅里叶变换的库)已经预先捆绑在Julia里[22]

历史编辑

一群拥有各种语言丰富编程经验的Matlab高级用户,对现有的科学计算编程工具感到不满——这些软件对自己专长的领域表现得非常棒,但在其它领域却非常糟糕。他们想要的是一个开源的软件,它要像C语言一般快速而又拥有如同Ruby动态性;要具有Lisp般真正的同像性而又有Matlab般熟悉的数学记号;要像Python般通用、像R般在统计分析上得心应手、像Perl般自然地处理字符串、像Matlab般具有强大的线性代数运算能力、像shell胶水语言的能力,易于学习而又不让真正的黑客感到无聊;还有,它应该是交互式的,同时又是编译型的。[23]

该项目大约于2009年中开始。

功能编辑

主要用于数值计算。

特点编辑

  • 核心语言非常小。标准库用的是Julia语言本身写的
  • 调用许多其它成熟的高性能基础代码。如线性代数随机数生成快速傅里叶变换、字符串处理。
  • 丰富的用于创建或描述对象的类型语法
  • 高性能,接近于静态编译型语言。包括用户自定义类型等
  • 为并行计算和分布式计算而设计
  • 轻量级协程
  • 优雅的可扩展的类型转换/提升
  • 支持Unicode,包括但不限于UTF-8
  • 可直接调用C函数(不需要包装或是借助特殊的API
  • 有类似shell的进程管理能力
  • 有类似Lisp以及其它元编程工具
  • 可与jupyter notebook 一起使用


示例编辑

生成Mandelbrot集合编辑

function mandel(z)
    c = z
    max = 80
    for n = 1:max
        if abs(z) > 2
            return n-1
        end
        z = z^2 + c
    end
    return max
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

参见编辑

参考资料编辑

  1. ^ LICENSE.md. GitHub. 
  2. ^ Contributors to JuliaLang/julia. GitHub. 
  3. ^ 3.0 3.1 3.2 3.3 3.4 3.5 3.6 Why We Created Julia. Julia website. February 2012 [2013-02-07]. 
  4. ^ v1.4.0. Github.com. 2020-03-21 [2020-03-24]. 
  5. ^ v1.4.0-rc2. Github.com. 2020-02-24 [2020-03-24]. 
  6. ^ Julia. Julia. NumFocus project. [9 December 2016]. Julia's Base library, largely written in Julia itself, also integrates mature, best-of-breed open source C and Fortran libraries for ... 
  7. ^ Fischer, Keno. Running julia on wasm. 2019-07-22 [2019-07-25]. 
  8. ^ Download Julia - Currently supported platforms. Julia. [2020-03-24]. 
  9. ^ The Julia Language: A fresh approach to technical computing. Termux/Android. Github. [2020-03-24]. 
  10. ^ 10.0 10.1 10.2 10.3 Home · The Julia Language. docs.julialang.org. [2018-08-15] (英语). 
  11. ^ Programming Language Network. GitHub. [6 December 2016]. 
  12. ^ JuliaCon 2016. JuliaCon. [6 December 2016]. He has co-designed the programming language Scheme, which has greatly influenced the design of Julia 
  13. ^ The Julia Language (official website). General Purpose [..] Julia lets you write UIs, statically compile your code, or even deploy it on a webserver. 
  14. ^ Bryant, Avi. Matlab, R, and Julia: Languages for data analysis. O'Reilly Strata. 15 October 2012 [2018-09-22]. (原始内容存档于2013-05-24). 
  15. ^ Singh, Vicky. Julia Programming Language – A True Python Alternative. Technotification. 23 August 2015. 
  16. ^ Krill, Paul. New Julia language seeks to be the C for scientists. InfoWorld. 18 April 2012. 
  17. ^ Finley, Klint. Out in the Open: Man Creates One Programming Language to Rule Them All. Wired. 3 February 2014. 
  18. ^ Escher : With Escher you can build beautiful Web Uls entirely in Julia. Shasi.github.io. [2017-05-31]. (原始内容存档于2016-03-04). 
  19. ^ Getting Started with Node Julia · Node Julia. Node-julia.readme.io. [2017-05-31]. 
  20. ^ Moss, Robert. Using Julia as a Specification Language for the Next-Generation Airborne Collision Avoidance System. 26 June 2015 [29 June 2015]. (原始内容存档于1 July 2015). Airborne collision avoidance system 
  21. ^ Suspending Garbage Collection for Performance...good idea or bad idea?. Groups.google.com. [2017-05-31]. 
  22. ^ (now available with using FFTW in current versions; that dependency is one of many moved out of the standard library to a package because it is GPL licensed, and thus is not included in Julia 1.0 by default.) Remove the FFTW bindings from Base by ararslan · Pull Request #21956 · JuliaLang/julia. GitHub. [2018-03-01] (英语). 
  23. ^ Why We Created Julia 互联网档案馆存档,存档日期2012-04-23.

外部链接编辑