Julia (programming language)

Julia
ParadigmMulti-paradigm: multiple dispatch (primary paradigm), functional, array, procedural (imperative), structured, reflective, meta, multistaged[1]
Designed byJeff Bezanson, Alan Edelman, Stefan Karpinski, Viral B. Shah
DeveloperJeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors[2][3]
First appeared2012; 12 years ago (2012)[4]
Stable release
1.11.1[5] Edit this on Wikidata / 16 October 2024 and 1.10.7[7][6] (the only LTS)
Preview release
1.10.7 (LTS)[6] / 12 November 2024; 9 days ago (2024-11-12) and 1.11.2[8] being worked on and 1.12.0-DEV with daily updates
Typing disciplineDynamic,[9] inferred, optional, nominative, parametric, strong[9]
Implementation languageJulia, C, C++, LLVM,[10] Scheme (was used the parser; almost exclusively)
PlatformTier 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+.
OSLinux, macOS, Windows and FreeBSD
LicenseMIT
Filename extensions.jl
WebsiteJuliaLang.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 such as all of these.

Julia's Visual Studio Code extension provides a fully-featured integrated development environment with support for debugging, linting, and profiling.[28][29][30][31]

  1. ^ "Smoothing data with Julia's @generated functions". 5 November 2015. Archived from the original on 4 March 2016. Retrieved 9 December 2015. 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.
  2. ^ "LICENSE.md". GitHub. September 2017. Archived from the original on 23 January 2021. Retrieved 20 October 2014.
  3. ^ "Contributors to JuliaLang/julia". GitHub. Archived from the original on 23 January 2021. Retrieved 20 October 2014.
  4. ^ a b c d Jeff Bezanson; Stefan Karpinski; Viral Shah; Alan Edelman (February 2012). "Why We Created Julia". Julia website. Archived from the original on 2 May 2020. Retrieved 7 February 2013.
  5. ^ "Release 1.11.1". 16 October 2024. Retrieved 22 October 2024.
  6. ^ a b "Julia v1.10.7 testing period". Julia Programming Language. 12 November 2024. Retrieved 20 November 2024.
  7. ^ "release-1.10: set VERSION to 1.10.7 by KristofferC · Pull Request #56615 · JuliaLang/julia". GitHub. Retrieved 20 November 2024.
  8. ^ "Backports for 1.11.2 by KristofferC · Pull Request #56228 · JuliaLang/julia". GitHub. Retrieved 18 October 2024.
  9. ^ a b Engheim, Erik (17 November 2017). "Dynamically Typed Languages Are Not What You Think". Medium. Archived from the original on 5 March 2021. Retrieved 27 January 2021.
  10. ^ "Building Julia (Detailed)". GitHub. September 2017. Archived from the original on 16 May 2022. Retrieved 16 May 2022.
  11. ^ "NVIDIA CUDA ⋅ JuliaGPU". juliagpu.org. Archived from the original on 29 January 2022. Retrieved 17 January 2022. 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
  12. ^ Stokel-Walker, Chris. "Julia: The Goldilocks language". Increment. Stripe. Archived from the original on 9 November 2020. Retrieved 23 August 2020.
  13. ^ "JuliaCon 2016". JuliaCon. Archived from the original on 4 March 2017. Retrieved 6 December 2016. He has co-designed the programming language Scheme, which has greatly influenced the design of Julia
  14. ^ a b c d "Home · The Julia Language". docs.julialang.org. Archived from the original on 11 January 2021. Retrieved 15 August 2018.
  15. ^ "Programming Language Network". GitHub. Archived from the original on 20 December 2020. Retrieved 6 December 2016.
  16. ^ "What Should We Call the Language of Mathematica?—Stephen Wolfram Writings". writings.stephenwolfram.com. 12 February 2013. Archived from the original on 4 September 2024. Retrieved 24 June 2021.
  17. ^ a b Fischer, Keno; Nash, Jameson. "Growing a Compiler - Getting to Machine Learning from a General Purpose Compiler". juliahub.com. Retrieved 16 November 2022.
  18. ^ Cite error: The named reference Fastest was invoked but never defined (see the help page).
  19. ^ Bryant, Avi (15 October 2012). "Matlab, R, and Julia: Languages for data analysis". O'Reilly Strata. Archived from the original on 26 April 2014.
  20. ^ Krill, Paul (18 April 2012). "New Julia language seeks to be the C for scientists". InfoWorld. Archived from the original on 13 September 2014. Retrieved 4 July 2021.
  21. ^ Finley, Klint (3 February 2014). "Out in the Open: Man Creates One Programming Language to Rule Them All". Wired. Archived from the original on 20 December 2016. Retrieved 8 March 2017.
  22. ^ "Sysimages · PackageCompiler". julialang.github.io. Archived from the original on 10 April 2023. Retrieved 10 April 2023.
  23. ^ a b Cite error: The named reference PackageCompiler.jl was invoked but never defined (see the help page).
  24. ^ "julia/doc/src/devdocs/aot.md at master · JuliaLang/julia". GitHub. Archived from the original on 3 October 2023. Retrieved 3 October 2023.
  25. ^ "System Image Building · The Julia Language". docs.julialang.org. Retrieved 3 October 2023.
  26. ^ "Suspending Garbage Collection for Performance...good idea or bad idea?". Groups.google.com. Archived from the original on 14 February 2012. Retrieved 31 May 2017.
  27. ^ Cite error: The named reference AppBundler.jl was invoked but never defined (see the help page).
  28. ^ Holy, Tim (13 September 2019). "GitHub - timholy/ProfileView.jl: Visualization of Julia profiling data". GitHub. Archived from the original on 31 January 2020. Retrieved 22 September 2019.
  29. ^ Gregg, Brendan (20 September 2019). "GitHub - brendangregg/FlameGraph: Stack trace visualizer". GitHub. Archived from the original on 26 September 2019. Retrieved 22 September 2019.
  30. ^ "A Julia interpreter and debugger". julialang.org. Retrieved 10 April 2019.
  31. ^ "Home · Rebugger.jl". timholy.github.io. Archived from the original on 31 March 2019. Retrieved 10 April 2019.