Julia (programming language)


Julia is a dynamic general-purpose programming language. As a high-level language, distinctive aspects of Julia's design include a type system with parametric polymorphism, the use of multiple dispatch as a core programming paradigm, just-in-time compilation and a parallel garbage collection implementation. Notably, Julia does not support classes with encapsulated methods but instead relies on the types of all of a function's arguments to determine which method will be called.
By default, Julia is run similarly to scripting languages, using its runtime, and allows for interactions, but Julia programs can also be compiled to small binary standalone executables, with e.g. the JuliaC.jl compiler.
Julia programs can reuse libraries from other languages, and vice versa. Julia has interoperability with C,, Fortran, Rust, Python, and R. Additionally, some Julia packages have bindings to be used from Python and R as libraries.
Julia is supported by programmer tools like IDEs and by notebooks like Pluto.jl, Jupyter, and since 2025, Google Colab officially supports Julia natively.
Julia is sometimes used in embedded systems.

History

Work on Julia began in 2009, when Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and Alan Edelman set out to create a free language that was both high-level and fast. On 14 February 2012, the team launched a website with a blog post explaining the language's mission. In an interview with InfoWorld in April 2012, Karpinski said about the name of the language, Julia: "There's no good reason, really. It just seemed like a pretty name." Bezanson said he chose the name on the recommendation of a friend, then years later wrote:
Julia's syntax is stable, since version 1.0 in 2018, and Julia has a backward compatibility guarantee for 1.x and also a stability promise for the documented API, while in the years before in the early development prior to 0.7 the syntax was changed in new versions. All of the ecosystem uses the new and improved syntax, and in most cases relies on new APIs that have been added regularly, and in some cases minor additional syntax added in a forward compatible way e.g. in Julia 1.7.
In the 10 years since the 2012 launch of pre-1.0 Julia, the community has grown. The Julia package ecosystem has over 11.8 million lines of code. The JuliaCon academic conference for Julia users and developers has been held annually since 2014 with JuliaCon2020 welcoming over 28,900 unique viewers, and then JuliaCon2021 breaking all previous records, and 43,000 unique viewers during the conference.
Three of the Julia co-creators are the recipients of the 2019 James H. Wilkinson Prize for Numerical Software "for the creation of Julia, an innovative environment for the creation of high-performance tools that enable the analysis and solution of computational science problems." Also, Alan Edelman, professor of applied mathematics at MIT, has been selected to receive the 2019 IEEE Computer Society Sidney Fernbach Award "for outstanding breakthroughs in high-performance computing, linear algebra, and computational science and for contributions to the Julia programming language."
Version 0.3 was released in August 2014. Both Julia 0.7 and version 1.0 were released on 8 August 2018. Julia 1.4 added syntax for generic array indexing to handle e.g. 0-based arrays. The memory model was also changed. Julia 1.5 released in August 2020 added record and replay debugging support, for Mozilla's rr tool. The release changed the behavior in the REPL to the one used in Jupyter, but keeps full compatible with non-REPL code. Julia 1.6 was the largest release since 1.0, and it was the long-term support version for the longest time. Since Julia 1.7 development is back to time-based releases, and it was released in November 2021 with e.g. a new default random-number generator and Julia 1.7.3 fixed at least one security issue. Julia 1.8 added options for hiding source code when compiling Julia source code to executables. Julia 1.9 has added the ability to precompile packages to native machine code, done automatically; to improve precompilation of packages a new package PrecompileTools.jl was introduced, for use by package developers. Julia 1.10 was released on 25 December 2023 with new features such as parallel garbage collection. Julia 1.11 was released on 7 October 2024, and with it 1.10.5 became the next long-term support version, since replaced by 1.10.10 released on 27 June, and 1.6 is no longer an LTS version. Julia 1.11 adds e.g. the new public keyword to signal safe public API.
Julia 1.12 was released on 7 October 2025, and with it a JuliaC.jl package including the juliac compiler that works with it, for making rather small binary executables. Julia 1.10 LTS is by now the only other still-supported branch.

JuliaCon

Since 2014, the Julia Community has hosted an annual Julia Conference focused on developers and users. The first JuliaCon took place in Chicago and kickstarted the annual occurrence of the conference. Since 2014, the conference has taken place across a number of locations including MIT and the University of Maryland, Baltimore. The event audience has grown from a few dozen people to over 28,900 unique attendees during JuliaCon 2020, which took place virtually. JuliaCon 2021 also took place virtually with keynote addresses from professors William Kahan, the primary architect of the IEEE 754 floating-point standard, Jan Vitek, Xiaoye Sherry Li, and Soumith Chintala, a co-creator of PyTorch. JuliaCon grew to 43,000 unique attendees and more than 300 presentations. JuliaCon 2022 will also be virtual held between July 27 and July 29, 2022, for the first time in several languages, not just in English.

Sponsors

The Julia language became a NumFOCUS fiscally sponsored project in 2014 in an effort to ensure the project's long-term sustainability. Jeremy Kepner at MIT Lincoln Laboratory was the founding sponsor of the Julia project in its early days. In addition, funds from the Gordon and Betty Moore Foundation, the Alfred P. Sloan Foundation, Intel, and agencies such as NSF, DARPA, NIH, NASA, and FAA have been essential to the development of Julia. Mozilla, the maker of Firefox web browser, with its research grants for H1 2019, sponsored "a member of the official Julia team" for the project "Bringing Julia to the Browser", meaning to Firefox and other web browsers. The Julia language is also supported by individual donors on GitHub.

The Julia company

JuliaHub, Inc. was founded in 2015 as Julia Computing, Inc. by Viral B. Shah, Deepak Vinchhi, Alan Edelman, Jeff Bezanson, Stefan Karpinski and Keno Fischer.
In June 2017, Julia Computing raised US$4.6million in seed funding from General Catalyst and Founder Collective, the same month was "granted $910,000 by the Alfred P. Sloan Foundation to support open-source Julia development, including $160,000 to promote diversity in the Julia community", and in December 2019 the company got $1.1million funding from the US government to "develop a neural component machine learning tool to reduce the total energy consumption of heating, ventilation, and air conditioning systems in buildings". In July 2021, Julia Computing announced they raised a $24 million Series A round led by Dorilton Ventures, which also owns team Williams Racing, that partnered with Julia Computing. Williams' Commercial Director said: "Investing in companies building best-in-class cloud technology is a strategic focus for Dorilton and Julia's versatile platform, with revolutionary capabilities in simulation and modelling, is hugely relevant to our business. We look forward to embedding Julia Computing in the world's most technologically advanced sport". In June 2023, JuliaHub received a $13 million strategic new investment led by AE Industrial Partners HorizonX. AEI HorizonX is a venture capital investment platform formed in partnership with The Boeing Company, which uses Julia. Tim Holy's work on Julia 1.9 was funded by the Chan Zuckerberg Initiative.

Language features

Julia is a general-purpose programming language, while also originally designed for numerical/technical computing. It is also useful for low-level systems programming, as a specification language, high-level synthesis tool, and for web programming at both server and client side.
The main features of the language are:
Multiple dispatch is a generalization of single dispatch – the polymorphic mechanism used in common object-oriented programming languages, such as Python, C++, Java, JavaScript, and Smalltalk – that use inheritance.
In Julia, all concrete types are subtypes of abstract types, directly or indirectly subtypes of the Any type, which is the top of the type hierarchy. Concrete types cannot themselves be subtyped the way they can in other languages; composition is used instead.
By default, the Julia runtime must be pre-installed as user-provided source code is run. Alternatively, Julia apps can be quickly bundled up into a single file with AppBundler.jl for "building Julia GUI applications in modern desktop application installer formats. It uses Snap for Linux, MSIX for Windows, and DMG for MacOS as targets. It bundles full Julia within the app". PackageCompiler.jl can build standalone executables that need no Julia source code to run.
In Julia, everything is an object, much like object-oriented languages; however, unlike most object-oriented languages, all functions use multiple dispatch to select methods, rather than single dispatch.
Most programming paradigms can be implemented using Julia's homoiconic macros and packages. Julia's syntactic macros, like Lisp macros, are more powerful than text-substitution macros used in the preprocessor of some other languages such as C, because they work at the level of abstract syntax trees. Julia's macro system is hygienic, but also supports deliberate capture when desired using the esc construct.
Julia draws inspiration from various dialects of Lisp, including Scheme and Common Lisp, and it shares many features with Dylan, also a multiple-dispatch-oriented dynamic language, and with Fortress, another numerical programming language. While Common Lisp Object System adds multiple dispatch to Common Lisp, not all functions are generic functions.
In Julia, Dylan, and Fortress, extensibility is the default, and the system's built-in functions are all generic and extensible. In Dylan, multiple dispatch is as fundamental as it is in Julia: all user-defined functions and even basic built-in operations like + are generic. Dylan's type system, however, does not fully support parametric types, which are more typical of the ML lineage of languages. By default, CLOS does not allow for dispatch on Common Lisp's parametric types; such extended dispatch semantics can only be added as an extension through the CLOS Metaobject Protocol. By convergent design, Fortress also features multiple dispatch on parametric types; unlike Julia, however, Fortress is statically rather than dynamically typed, with separate compiling and executing phases. The language features are summarized in the following table:
LanguageType systemGeneric functionsParametric types
JuliaDynamicDefault
Common LispDynamicOpt-in
DylanDynamicDefault
FortressStaticDefault

An example of the extensibility of Julia, the Unitful.jl package adds support for physical units of measurement to the language.

Interoperability

Julia has built-in support for calling C or Fortran language libraries using the @ccall macro. Additional libraries allow users to call to or from other languages such as Python, C++, Rust, R, Java and to use with SQL.

Separately-compiled executables option

Julia can be compiled to binary executables with PackageCompiler.jl.. Smaller executables can also be written using a static subset of the language provided by StaticCompiler.jl that does not support runtime dispatch.

Interaction

The Julia official distribution includes an interactive read–eval–print loop, with a searchable history, tab completion, and dedicated help and shell modes, which can be used to experiment and test code quickly. The following fragment represents a sample session example where strings are concatenated automatically by println:

julia> p = 2x^2 + 1; f = 1 + 2py;
julia> println
Hello world! I'm on cloud 9 as Julia supports recognizable syntax!

Since Unicode is supported, including for variables and functions you can for example define the Riemann xi function as follows:

using SpecialFunctions: gamma as Γ, zeta as ζ
ξ = 1/2 * s * * π^ * Γ * ζ

Due to its lack of readability and support from some editors, the use of these symbols are controversial, as users may believe their use is mandatory. This perception forces developers to use the corresponding Unicode/Greek letters, especially in essential packages. One example of this is gamma function, defined by the package with the ASCII symbol. The example code shows both the symbol and its alias can be used; keyword arguments can be defined with ASCII or be defined with Greek or Unicode symbols. It's recommended to define aliases for all ASCII symbol in registered packages if possible.
The REPL gives user access to the system shell and to help mode, by pressing ; or ? after the prompt, respectively. It also keeps the history of commands, including between sessions. Code can be tested inside Julia's interactive session or saved into a file and run from the command line by typing:

$ julia

Julia uses UTF-8 and LaTeX codes, allowing it to support common math symbols for many operators, such as ∈ for the in operator, typable with \in then pressing . Julia 12.x has supports Unicode 16 for the languages of the world, even for source code, e.g. variable names.
Julia is supported by Jupyter, an online interactive "notebooks" environment, and , a "reactive notebook", a possible replacement for the former kind. In addition Posit's Quarto publishing system supports Julia, Python, R and Observable JavaScript.
The REPL can be extended with additional modes, and has been with packages, e.g. with an SQL mode, for database access, and RCall.jl adds an, to work with the R language.
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" e.g. debugging is possible, linting, and profiling.

Use with other languages

Julia is in practice interoperable with other languages, in fact the majority of the top 20 languages in popular use. Julia can be used to call shared library functions individually, such as those written in C or Fortran, and packages are available to allow calling other languages, e.g. Python, R, MATLAB, C#, JavaScript, Java. And packages for other languages allow to call to Julia, e.g. from Python, R, Rust, Ruby, or C#. Such as with juliacall to call from Python and a different JuliaCall package for calling, Julia up to 1.10.x, from R. Julia has also been used for hardware, i.e. to compile to VHDL, as a high-level synthesis tool, for example FPGAs.
Julia has packages supporting markup languages such as HTML, XML, JSON and BSON, and for databases and web use in general.

Package system

Julia has a built-in package manager and includes a default registry system. Packages are most often distributed as source code hosted on GitHub, though alternatives can also be used just as well. Packages can also be installed as binaries, using artifacts. Julia's package manager is used to query and compile packages, as well as managing environments. Federated package registries are supported, allowing registries other than the official to be added locally.

Implementation

Julia's core is implemented in Julia and C, together with C++ for the LLVM dependency. The code parsing, code-lowering, and bootstrapping were implemented in FemtoLisp, a Scheme dialect, up to version 1.10. Since that version the new pure-Julia stdlib JuliaSyntax.jl is used for the parsing which improves speed and "greatly improves parser error messages in various cases". The LLVM compiler infrastructure project is used as the back end for generating optimized machine code for all commonly used platforms. With some exceptions, the standard library is implemented in Julia.

Current and future platforms

Julia has four support tiers.
Julia has tier 1 macOS support, for 64-bit Apple Silicon Macs, natively, and also fully supports Intel-based Macs. 64-bit ARM is supported with tier 2 support on other platforms, Windows 11 and Linux. "WSL 2 " has tier 2 support on Windows 10+, and should also work when used with other Linux distributions. OpenBSD has received "initial support" and is under active development.
All IA-32 processors completely implementing the i686 sub-architecture are supported and all 64-bit x86-64, i.e. all less than about a decade old are supported. 64-bit Armv8 processors are supported on first tier ; otherwise second tier on Linux, and ARMv7 is not listed on tier 4, "built at some point in the past, but is known not to build currently". Hundreds of packages are GPU-accelerated: Nvidia GPUs have support with CUDA.jl. There are also additionally packages supporting other accelerators, such as Google's TPUs, and some Intel GPUs, through oneAPI.jl, and AMD's GPUs have support with e.g. OpenCL; and experimental support for the AMD ROCm stack.
for several ARM platforms, from small Raspberry Pis to the world's fastest supercomputer Fugaku's ARM-based A64FX. PowerPC LE has tier 3 support, meaning it "may or may not build", and its tier will lower to 4 for 1.12, i.e. then no longer builds/works.
Julia has official support for 64-bit ARMv8 meaning e.g. newer 64-bit Raspberry Pi computers work with Julia. For many Pis, especially older 32-bit ones, it helps to cross-compile the user's Julia code for them. The older 32-bit ARMv7 Pis worked in older Julia versions. The original Raspberry Pi 1 has no official support.
Pico versions of the Pi are known to no work. Julia is now supported in Raspbian while support is better for newer Pis, e.g., those with Armv7 or newer; the Julia support is promoted by the Raspberry Pi Foundation.
On some platforms, Julia may need to be compiled from source code, with specific build options, which has been done and unofficial pre-built binaries are available.
Julia has also been built for 64-bit RISC-V, i.e. has some supporting code in core Julia.
While Julia requires an operating system by default, and has no official support to run without, or on embedded system platforms such as Arduino, Julia code has still been run on it, with some limitations, i.e. on a baremetal 16 MHz 8-bit AVR-microcontroller Arduino with 2 KB RAM.

Adoption

Julia has been adopted at many universities including MIT, Stanford, UC Berkeley, Ferdowsi University of Mashhad and the University of Cape Town. Large private firms across many sectors have adopted the language including Amazon, IBM, JP Morgan AI Research, and ASML. Julia has also been used by government agencies including NASA and the FAA, as well as every US national energy laboratory.

Scientific computing and engineering

Pharmaceuticals and drug development

Julia is widely used for drug development in the pharmaceutical industry, having been adopted by Moderna, Pfizer, AstraZeneca, Procter & Gamble, and United Therapeutics.

Economics, finance, and political science