Paradigm | Multi-paradigm: multiple dispatch (primary paradigm), functional, array, procedural (imperative), structured, reflective, meta, multistaged[1] |
---|---|
Designed by | Jeff Bezanson, Alan Edelman, Stefan Karpinski, Viral B. Shah |
Developer | Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors[2][3] |
First appeared | 2012[4] |
Stable release | |
Preview release | 1.10.8 being worked on[6] and 1.12.0-DEV with daily updates
|
Typing discipline | Dynamic,[9] inferred, optional, nominative, parametric, strong[9] |
Implementation language | Julia, C, C++, LLVM,[10] Scheme (was used the parser; almost exclusively) |
Platform | Tier 1: x86-64, IA-32, Apple silicon (ARM64) Macs; Nvidia GPUs/CUDA (on Linux)[11] Tier 2: FreeBSD, 64-bit Arm on Linux, Apple GPUs; Intel GPUs/OneAPI 6.2+ and Nvidia GPUs (on Windows) Tier 3: 32-bit Arm; 64-bit RISC-V and PowerPC; and AMD GPUs/ROCm 5.3+. |
OS | Linux, macOS, Windows and FreeBSD |
License | MIT |
Filename extensions | .jl |
Website | JuliaLang.org |
Influenced by | |
Julia is a high-level, general-purpose[17] dynamic programming language, still designed to be fast and productive,[18] for e.g. data science, artificial intelligence, machine learning, modeling and simulation, most commonly used for numerical analysis and computational science.[19][20][21]
Distinctive aspects of Julia's design include a type system with parametric polymorphism and the use of multiple dispatch as a core programming paradigm, a default just-in-time (JIT) compiler[17][22] (with support for ahead-of-time compilation[23][24][25]) and an efficient garbage collection.[26] Notably Julia does not support classes with encapsulated methods and instead it relies on structs with generic methods/functions not tied to them.
By default, Julia is run similarly to scripting languages, using its runtime, and allows for interactions,[23] but Julia programs/source code can also optionally be sent to users in one ready-to-install/run file, which can be made quickly, not needing anything preinstalled.[27] Julia programs can also be (separately) compiled to binary executables, even allowing no-source-code distribution, and the executables can get much smaller with Julia 1.12. Such compilation is not needed for speed, though it can decrease constant-factor startup cost, since Julia is also compiled when running interactively, but it can help with hiding source code. Features of the language can be separately compiled, so Julia can be used, for example, with its runtime or without it (which allows for smaller executables and libraries but is limited in capabilities).
Julia programs can reuse libraries from other languages by calling them, e.g. calling C or Rust libraries, and Julia (libraries) can also be called from other languages, e.g. Python and R, and several Julia packages have been made easily available from those languages, in the form of Python and R libraries for corresponding Julia packages. Calling in either direction has been implemented for many languages, not just those and C++.
Julia's Visual Studio Code extension provides a fully-featured integrated development environment with "built-in dynamic autocompletion, inline results, plot pane, integrated REPL, variable view, code navigation, and many other advanced language features"[28] e.g. debugging is possible, linting, and profiling.[29][30][31][32]
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.
{{cite web}}
: Missing or empty |title=
(help)
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
He has co-designed the programming language Scheme, which has greatly influenced the design of Julia
Fastest
was invoked but never defined (see the help page).PackageCompiler.jl
was invoked but never defined (see the help page).AppBundler.jl
was invoked but never defined (see the help page).