![]() | |
Paradigm | Multi-paradigm: multiple dispatch (primary paradigm), object-oriented,[1] functional, array, procedural (imperative), structured, reflective, meta, multistaged[2] |
---|---|
Designed by | Jeff Bezanson, Alan Edelman, Stefan Karpinski, Viral B. Shah |
Developer | Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors[3][4] |
First appeared | 2012[5] |
Stable release | |
Preview release | and 1.11.0-DEV with daily updates |
Typing discipline | Dynamic,[12] inferred, optional, nominative, parametric, strong[12] |
Implementation language | Julia, C, C++, LLVM[13], Scheme (parser) |
Platform | Tier 1: x86-64, IA-32, Apple silicon 64-bit Arm Macs; CUDA 11.0+[14]/Nvidia GPUs (for Linux and Windows) Tier 2: FreeBSD, 64-bit Arm on Linux Tier 3: 32-bit Arm, PowerPC, AMD (ROCm) GPUs and oneAPI/Intel's GPUs. |
OS | Linux, macOS, Windows and FreeBSD |
License | MIT (mainly),[3] a makefile option omits GPL libraries.[15] 1.10.0-beta2 is non-copyleft by default. |
Filename extensions | .jl |
Website | JuliaLang.org |
Influenced by | |
Julia is a high-level, general-purpose[21] dynamic programming language. Its features are well suited for numerical analysis and computational science.[22][23][24][25]
Distinctive aspects of Julia's design include a type system with parametric polymorphism in a dynamic programming language; with multiple dispatch as its core programming paradigm. Julia supports concurrent, (composable) parallel and distributed computing (with or without using MPI[26] or the built-in corresponding[clarification needed][27] to "OpenMP-style" threads[28]), and direct calling of C and Fortran libraries without glue code. Julia uses a just-in-time (JIT) compiler that is referred to as "just-ahead-of-time" (JAOT) in the Julia community, as Julia compiles all code (by default) to machine code before running it.[21][29]
Julia is garbage-collected,[30] uses eager evaluation, and includes efficient libraries for floating-point calculations, linear algebra, random number generation, and regular expression matching. Many libraries are available, including some (e.g., for fast Fourier transforms) that were previously bundled with Julia and are now separate.[31]
Julia can work with other languages, e.g. has special (keyword) support for calling C language libraries; and e.g. for working with Python, R, Rust, C++, SQL with use of extra packages and to work with or even to compile Julia code to JavaScript.
Julia can be compiled to binary executables using a package for it supporting all Julia features. Small binary executables can also be made using a different package but then the Julia runtime is not included in the executable, e.g. down to 9 KB (then without e.g. the garbage collector since it is part of Julia's runtime, i.e. with similar limited capabilities to the C language), for computers or even microcontrollers, such as Arduino with 2 KB of RAM. By default, Julia code depends on the Julia runtime to support all Julia features, e.g. threading, but some (non-idiomatic, to smaller or larger degree) Julia code can be compiled to small executables (with limited Julia capabilities). In both cases no source code needs to be distributed.
Several development tools support coding in Julia, such as integrated development environments (e.g. for Microsoft's Visual Studio Code, an extension is available[32] providing debugging and linting support); with integrated tools, e.g. a profiler (and flame graph support available[33][34] for the built-in one), debugger,[35] and the Rebugger.jl package "supports repeated-execution debugging"[a] and more.[37]
Julia's generated functions are closely related to the multistaged programming (MSP) paradigm popularized by Taha and Sheard, which generalizes the compile time/run time stages of program execution by allowing for multiple stages of delayed code execution.
we have shown the performance to approach and even sometimes exceed that of CUDA C on a selection of applications from the Rodinia benchmark suite
Note that this commit does not remove GPL utilities such as git and busybox that are included in the Julia binary installers on Mac and Windows.--> It allows building from source with no GPL library dependencies.
He has co-designed the programming language Scheme, which has greatly influenced the design of Julia
using FFTW
in current versions (That dependency, is one of many which, was 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. Retrieved 1 March 2018.
Cite error: There are <ref group=lower-alpha>
tags or {{efn}}
templates on this page, but the references will not show without a {{reflist|group=lower-alpha}}
template or {{notelist}}
template (see the help page).