Julia (programming language): Difference between revisions

Content deleted Content added
Polish grammar.
Tags: Mobile edit Mobile web edit Advanced mobile edit
No edit summary
Tags: Mobile edit Mobile web edit
 
(7 intermediate revisions by 5 users not shown)
Line 42:
}}</ref>
| latest_release_version = {{wikidata|property|edit|reference|Q28974961 |P548=Q2804309|P348}}
| latest_release_date = {{nowrap|{{start date and age|{{wikidata|qualifier| Q28974961 |P348|P577}}|df=y}}}}<br /> and 1.10.910<ref>{{Cite web |title=GitHub - JuliaLang/julia at v1.10.9 |url=https://github.com/JuliaLang/julia/tree/v1.10.9 |access-date=2025-03-10 |website=GitHub |language=en}}</ref> ([[long-term support|LTS]]) / {{nowrap|{{start date and age|2025|0306|1027|df=y}}}}
| latest preview version = 1.12.0-beta3rc1<ref>{{Cite web |title=Backports for 1.12.0-rc1 by KristofferC · Pull Request #58956 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/pull/58956 |access-date=2025-07-12 |website=GitHub |language=en}}</ref><ref>{{Cite web |title=Backports for 1.12.0-beta4 by KristofferC · Pull Request #58369 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/pull/58369 |access-date=2025-05-10 |website=GitHub |language=en}}</ref><ref>{{Cite web |title=GitHub - JuliaLang/julia at v1.12.0-beta3 |url=https://github.com/JuliaLang/julia/tree/v1.12.0-beta3 |access-date=2025-05-12 |website=GitHub |language=en}}</ref>
| latest_preview_date = {{start date and age|2025|0507|12|df=y}}. Being worked on: 1.12.0-beta4rc2<ref>{{Cite web |title=Backports for Julia 1.12.0-beta4rc2 by KristofferC · Pull Request #5836959006 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/pull/5836959006 |access-date=2025-0507-1018 |website=GitHub |language=en}}</ref> and 1.13.0-DEV with daily updates
| typing = [[Dynamic programming language|Dynamic]],<ref name="Engheim">{{Cite web|last=Engheim|first=Erik|date=2017-11-17|title=Dynamically Typed Languages Are Not What You Think|url=https://erik-engheim.medium.com/dynamically-typed-languages-are-not-what-you-think-ac8d1392b803|access-date=2021-01-27|website=Medium|language=en|archive-date=5 March 2021|archive-url=https://web.archive.org/web/20210305194133/https://erik-engheim.medium.com/dynamically-typed-languages-are-not-what-you-think-ac8d1392b803|url-status=live}}</ref> [[type inference|inferred]], [[optional typing|optional]], [[nominal type system|nominative]], [[parametric polymorphism|parametric]], [[strong and weak typing|strong]]<ref name="Engheim" />
| implementations =
Line 72:
}}
 
'''Julia''' is a [[dynamic programming language|dynamic]] [[general-purpose programming language|general-purpose]] [[programming language]]. As a [[high-level programming language|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|just-in-time]] (JIT) compilation and a parallel [[tracing garbage collection|garbage collection]] implementation. Notably Julia does not support [[Class (computer programming)|classes]] with [[Encapsulation (computer programming)|encapsulated]] methods but instead relies on the types of all of a function's arguments to determine which method will be called.
'''Julia''' is a [[high-level programming language|high-level]], [[general-purpose programming language|general-purpose]]<ref name="general purpose">{{Cite web |last1=Fischer |first1=Keno |last2=Nash |first2=Jameson |title=Growing a Compiler - Getting to Machine Learning from a General Purpose Compiler |url=https://juliahub.com/blog/2019/02/growing-a-compiler/ |archive-url=https://web.archive.org/web/20221128011349/https://juliahub.com/blog/2019/02/growing-a-compiler/ |url-status=dead |archive-date=28 November 2022 |access-date=2022-11-16 |website=juliahub.com }}</ref> [[dynamic programming language|dynamic]] [[programming language]] designed to be fast and productive,<ref name=Fastest /> e.g., for data science, artificial intelligence, machine learning, modeling and simulation, and is most commonly used for [[numerical analysis]] and [[computational science]].<ref>{{Cite web
| date = 15 October 2012
| last = Bryant
| first = Avi
| title = Matlab, R, and Julia: Languages for data analysis
| url = http://radar.oreilly.com/2012/10/matlab-r-julia-languages-for-data-analysis.html
| archive-url = https://web.archive.org/web/20140426110631/https://strata.oreilly.com/2012/10/matlab-r-julia-languages-for-data-analysis.html
| archive-date= 2014-04-26
| publisher = O'Reilly Strata
}}</ref><ref name="infoworld">{{Cite magazine
| last = Krill
| first = Paul
| title = New Julia language seeks to be the C for scientists
| url = https://www.infoworld.com/article/2616709/new-julia-language-seeks-to-be-the-c-for-scientists.html
| magazine = InfoWorld
| date = 18 April 2012
| access-date = 4 July 2021
| archive-date= 13 September 2014
| archive-url = https://web.archive.org/web/20140913234252/http://www.infoworld.com/d/application-development/new-julia-language-seeks-be-the-c-scientists-190818
| url-status = live
}}</ref><ref>{{Cite magazine
| last = Finley
| first = Klint
| title = Out in the Open: Man Creates One Programming Language to Rule Them All
| url = https://www.wired.com/2014/02/julia/
| magazine = Wired
| date = 3 February 2014
| access-date = 8 March 2017
| archive-date= 20 December 2016
| archive-url = https://web.archive.org/web/20161220064258/https://www.wired.com/2014/02/julia/
| url-status = live
}}</ref>
 
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 compilation|just-in-time]] (JIT) compiler<ref name="general purpose" /><ref>{{Cite web |title=Sysimages · PackageCompiler |url=https://julialang.github.io/PackageCompiler.jl/stable/sysimages.html#Creating-a-sysimage-using-PackageCompiler |access-date=2023-04-10 |website=julialang.github.io |archive-date=10 April 2023 |archive-url=https://web.archive.org/web/20230410160253/https://julialang.github.io/PackageCompiler.jl/stable/sysimages.html#Creating-a-sysimage-using-PackageCompiler |url-status=live }}</ref> (with support for [[ahead-of-time compilation]]<ref name="PackageCompiler.jl" /><ref>{{Cite web |title=julia/doc/src/devdocs/aot.md at master · JuliaLang/julia |url=https://github.com/JuliaLang/julia/blob/master/doc/src/devdocs/aot.md |access-date=2023-10-03 |website=GitHub |language=en |archive-date=3 October 2023 |archive-url=https://web.archive.org/web/20231003164500/https://github.com/JuliaLang/julia/blob/master/doc/src/devdocs/aot.md |url-status=live }}</ref><ref>{{Cite web |title=System Image Building · The Julia Language |url=https://docs.julialang.org/en/v1/devdocs/sysimg/ |access-date=2023-10-03 |website=docs.julialang.org}}</ref>) and an [[tracing garbage collection|efficient (multi-threaded) garbage collection]] implementation.<ref>{{Cite newsgroup |url=https://groups.google.com/forum/#!topic/julia-users/6_XvoLBzN60 |title=Suspending Garbage Collection for Performance...good idea or bad idea? |website=Groups.google.com |access-date=2017-05-31 |archive-date=14 February 2012 |archive-url=https://web.archive.org/web/20120214124121/http://groups.google.com/group/web2py/browse_thread/thread/c81061bc00c6181e#!topic/julia-users/6_XvoLBzN60 |url-status=live }}</ref> 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 [[read–eval–print loop|interactions]],<ref name="PackageCompiler.jl" /> 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.<ref name=AppBundler.jl /> <!-- controversial on Talk, page, for now commenting out, may move out of lead: Julia programs can also be (separately) compiled to [[binary executable]]s, 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 (or itself be reused from other); Julia has a special no-boilerplate keyword allowing calling e.g. [[C (programming language)|C]], [[Fortran]] or [[Rust (programming language)|Rust]] libraries, and e.g. PythonCall.jl uses it indirectly for you, and Julia (libraries) can also be called from other languages, e.g. [[Python (programming language)|Python]] and [[R (programming language)|R]], and several Julia packages have been made easily available from those languages, in the form of Python and R [[library (computing)|libraries]] for corresponding Julia packages. Calling in either direction has been implemented for many languages, not just those and [[C++]].
 
Julia is supported by programmer tools like IDEs (see below) and by notebooks like Pluto.jl, [[Project Jupyter|Jupyter]], and since 2025 [[Google Colab]] officially supports Julia natively.
Line 122 ⟶ 89:
 
==History==
Work on Julia began in 2009, when [[Jeff Bezanson (programmer)|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.<ref name="announcement" /> In an interview with ''[[InfoWorld]]'' in April 2012, Karpinski said of the name "Julia": "There's no good reason, really. It just seemed like a pretty name."<ref name="infoworld" /> Bezanson said he chose the name on the recommendation of a friend,<ref>{{Cite web |last1=Torre |first1=Charles |title=Stefan Karpinski and Jeff Bezanson on Julia |url=https://channel9.msdn.com/Blogs/Charles/Stefan-Karpinski-and-Jeff-Bezanson-Julia-Programming-Language |website=Channel 9 |publisher=MSDN |access-date=4 December 2018 |archive-date=4 December 2018 |archive-url=https://web.archive.org/web/20181204102053/https://channel9.msdn.com/Blogs/Charles/Stefan-Karpinski-and-Jeff-Bezanson-Julia-Programming-Language |url-status=live }}</ref> then years later wrote:magazine
| last = BryantKrill
| first = AviPaul
| title = New Julia language seeks to be the C for scientists
| url = https://www.infoworld.com/article/2616709/new-julia-language-seeks-to-be-the-c-for-scientists.html
| magazine = InfoWorld
| date = 1518 OctoberApril 2012
| access-date = 4 July 2021
| archive-date= 13 September 2014-04-26
| archive-url = https://web.archive.org/web/20140913234252/http://www.infoworld.com/d/application-development/new-julia-language-seeks-be-the-c-scientists-190818
| url-status = live
}}</ref> Bezanson said he chose the name on the recommendation of a friend,<ref>{{Cite web |last1=Torre |first1=Charles |title=Stefan Karpinski and Jeff Bezanson on Julia |url=https://channel9.msdn.com/Blogs/Charles/Stefan-Karpinski-and-Jeff-Bezanson-Julia-Programming-Language |website=Channel 9 |publisher=MSDN |access-date=4 December 2018 |archive-date=4 December 2018 |archive-url=https://web.archive.org/web/20181204102053/https://channel9.msdn.com/Blogs/Charles/Stefan-Karpinski-and-Jeff-Bezanson-Julia-Programming-Language |url-status=live }}</ref> then years later wrote:
 
{{blockquote|Maybe julia stands for "[[Jeff Bezanson (programmer)|Jeff]]'s [[MLisp|uncommon lisp]] is automated"?<ref>{{Cite web |last1=Bezanson |first1=Jeff |title=CAS Benchmarks |url=https://discourse.julialang.org/t/cas-benchmarks-symbolics-jl-and-maxima/58359/17 |website=discourse.julialang.org |date=2 April 2021 |access-date=2 April 2021 |archive-date=2 April 2021 |archive-url=https://web.archive.org/web/20210402224346/https://discourse.julialang.org/t/cas-benchmarks-symbolics-jl-and-maxima/58359/17 |url-status=live }}</ref>}}
Line 150 ⟶ 128:
-->
 
Julia 1.11 was released on 7 October 2024 (and 1.11.56 on 149 July April 2025), and with it 1.10.5 became the next [[long-term support]] (LTS) version (i.e. those are the only two supported versions), since replaced by 1.10.810 released on 1027 MarchJune, and 1.6 is no longer an LTS version. Julia 1.11 adds e.g. parallel garbage collection and the new <code>public</code> keyword to signal safe public API (Julia users are advised to use such API, not internals, of Julia or packages, and package authors advised to use the keyword, generally indirectly, e.g. prefixed with the <code>@compat</code> macro, from ''Compat.jl'', to also support older Julia versions, at least the LTS version). Julia 1.11.1 has much improved startup (over 1.11.0 that had a regression), and over 1.10, and this can be important for some benchmarks.
 
<!-- I think this is now outdated: Some users may want to postpone upgrading to 1.11 (e.g. those calling Julia from R), because of known temporary package incompatibility.
Line 249 ⟶ 227:
</syntaxhighlight>
 
Julia uses [[UTF-8]] and [[LaTeX]] codes, allowing it to support common math symbols for many operators, such as ∈ for the <code>in</code> operator, typable with <code>\in</code> then pressing {{keypress|TAB}} (i.e. uses [[LaTeX]] codes, or also possible by simply copy-pasting, e.g. {{not a typo|√ and ∛}} possible for [[square root|sqrt]] and [[cube root|cbrt]] functions). Julia has support for [[Unicode]] 15.1 (Julia&nbsp;1.12.0-DEVrc1<!-- and alpha1 --> supports latest 16.0 release<ref>{{Cite web |title=support Unicode 16 via utf8proc 2.10.0 by stevengj · Pull Request #56925 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/pull/56925 |access-date=2025-01-08 |website=GitHub |language=en}}</ref>) for the languages of the world, even for source code, e.g. variable names (while it's recommended to use English for public code, and e.g. package names).
 
Julia is supported by ''[[Project Jupyter|Jupyter]]'', an online interactive "notebooks" environment,<ref>{{Cite web |url=https://jupyter.org/ |title=Project Jupyter |access-date=19 August 2015 |archive-date=29 June 2017 |archive-url=https://web.archive.org/web/20170629054445/https://jupyter.org/ |url-status=live }}</ref> and ''[https://github.com/fonsp/Pluto.jl Pluto.jl]'', a "reactive notebook" (where notebooks are saved as pure Julia files), a possible replacement for the former kind.<ref>{{Cite web|last=Boudreau|first=Emmett|date=2020-10-16|title=Could Pluto Be A Real Jupyter Replacement?|url=https://towardsdatascience.com/could-pluto-be-a-real-jupyter-replacement-6574bfb40cc6|access-date=2020-12-08|website=Medium|language=en|archive-date=12 April 2023|archive-url=https://web.archive.org/web/20230412112240/https://towardsdatascience.com/could-pluto-be-a-real-jupyter-replacement-6574bfb40cc6|url-status=live}}</ref> In addition Posit's (formerly [[RStudio]] Inc's) Quarto publishing system supports Julia, Python, R and Observable [[JavaScript]] (those languages have official support by the company, and can even be weaved together in the same notebook document, more languages are unofficially supported).<ref>{{Cite web |last=Machlis |first=Sharon |date=2022-07-27 |title=RStudio changes name to Posit, expands focus to include Python and VS Code |url=https://www.infoworld.com/article/3668252/rstudio-changes-name-to-posit-expands-focus-to-include-python-and-vs-code.html |access-date=2023-01-18 |website=InfoWorld |language=en}}</ref><ref>{{Cite web |date=2022-07-20 |title=Heads up! Quarto is here to stay. Immediately combine R & Python in your next document: An extension on a recent post. |url=https://www.ds-econ.com/quarto/ |access-date=2023-01-18 |website=ds-econ |language=en |archive-date=31 January 2023 |archive-url=https://web.archive.org/web/20230131161337/https://www.ds-econ.com/quarto/ |url-status=usurped }}</ref>
Line 269 ⟶ 247:
 
===Current and future platforms===
Julia has tier 1 [[macOS]] support, for 64-bit [[Apple Silicon]] Macs, natively (previously such [[Apple M1]]-based Macs were only supported by ''running in [[Rosetta 2]] emulation''<ref name="Apple Silicon">{{Cite web |date=2022-05-25 |title=Julia v1.7.3 has been released |url=https://discourse.julialang.org/t/julia-v1-7-3-has-been-released/81683 |access-date=2022-05-26 |website=JuliaLang |language=en |archive-date=26 May 2022 |archive-url=https://web.archive.org/web/20220526015606/https://discourse.julialang.org/t/julia-v1-7-3-has-been-released/81683 |url-status=live }}</ref><ref>{{Cite web|title=Darwin/ARM64 tracking issue · Issue #36617 · JuliaLang/julia|url=https://github.com/JuliaLang/julia/issues/36617|access-date=2020-12-08|website=GitHub|language=en|archive-date=11 November 2020|archive-url=https://web.archive.org/web/20201111014801/https://github.com/JuliaLang/julia/issues/36617|url-status=live}}</ref>), and also fully supports Intel-based Macs. [[Windows 10|Windows on ARM]] has no official support yet. JuliaOpenBSD has received "initial support of OpenBSD in julia." but moreand is comingunder toactive make it actually work: https://githubdevelopment.com/JuliaLang/julia/issues/53632 -->
 
Julia has four support tiers.<ref>{{Cite web|url=https://julialang.org/downloads/#support-tiers|title=Julia Downloads|website=julialang.org|access-date=2019-05-17|archive-date=26 January 2021|archive-url=https://web.archive.org/web/20210126095723/https://julialang.org/downloads/#support-tiers|url-status=live}}</ref> All [[IA-32]] processors completely implementing the [[P6 (microarchitecture)|i686]] subarchitecture are supported and all 64-bit [[x86-64]] (aka [[amd64]]), i.e. all less than about a decade old are supported. 64-bit [[Armv8]] (and later; i.e. [[AArch64]]) processors are supported on first tier (for macOS); otherwise second tier on Linux, and ARMv7 (AArch32) on third tier<!-- , and ARMv6 were known to work with some caveats in Julia&nbsp;1.0.x -->.<ref>{{Cite web |title=julia/arm.md |date=2021-10-07 |url=https://github.com/JuliaLang/julia/blob/master/doc/src/devdocs/build/arm.md |publisher=The Julia Language |quote=A list of known issues for ARM is available. |access-date=2022-05-15 |archive-date=15 May 2022 |archive-url=https://web.archive.org/web/20220515202910/https://github.com/JuliaLang/julia/blob/master/doc/src/devdocs/build/arm.md |url-status=live }}</ref> Hundreds of packages are [[general-purpose computing on graphics processing units|GPU-accelerated]]:<ref>{{Cite web |title=JuliaGPU |url=https://juliagpu.org/ |access-date=2022-11-16 |website=juliagpu.org |quote=Almost 300 packages rely directly or indirectly on Julia's GPU capabilities. |archive-date=23 May 2020 |archive-url=https://web.archive.org/web/20200523103259/https://juliagpu.org/ |url-status=live }}</ref> Nvidia GPUs have support with ''[[CUDA]].jl'' (tier 1 on 64-bit Linux and tier 2 on 64-bit Windows, the package implementing [[Parallel Thread Execution|PTX]], for compute capability 3.5 (Kepler) or higher; both require CUDA 11+, older package versions work down to CUDA 9). There are also additionally packages supporting other accelerators, such as Google's [[tensor processing unit|TPU]]s,<ref>{{Cite web|title=Julia on TPUs|date=2019-11-26|url=https://github.com/JuliaTPU/XLA.jl|publisher=JuliaTPU|access-date=2019-11-29|archive-date=30 April 2019|archive-url=https://web.archive.org/web/20190430044159/https://github.com/JuliaTPU/XLA.jl|url-status=live}}</ref> and some Intel (integrated) GPUs, through ''[[oneAPI (compute acceleration)|oneAPI.jl]]'',<ref>{{Cite web|title=Introducing: oneAPI.jl ⋅ JuliaGPU|url=https://juliagpu.org/post/2020-11-05-oneapi_0.1/|access-date=2021-09-06|website=juliagpu.org}}</ref> and AMD's GPUs have support with e.g. [[OpenCL]]; and experimental support for the AMD [[ROCm]] stack.<ref>{{Cite web|url=https://juliagpu.org/rocm/|title=AMD ROCm · JuliaGPU|website=juliagpu.org|access-date=2020-04-20|archive-date=13 June 2020|archive-url=https://web.archive.org/web/20200613154944/https://juliagpu.org/rocm/|url-status=live}}</ref>
Line 326 ⟶ 304:
 
===Economics, finance, and political science===
* The [[Federal Reserve Bank of New York]], have used Julia for macroeconomic modeling in Julia since 2015, including estimates of [[COVID-19]] shocks in 2021<ref>{{Cite web |title=Release v1.3.0 · FRBNY-DSGE/DSGE.jl |url=https://github.com/FRBNY-DSGE/DSGE.jl/releases/tag/v1.3.0 |access-date=2022-01-03 |website=[[GitHub]] |language=en |quote=New subspecs of Model1002 for estimating the DSGE with COVID-19 shocks |archive-date=3 January 2022 |archive-url=https://web.archive.org/web/20220103170726/https://github.com/FRBNY-DSGE/DSGE.jl/releases/tag/v1.3.0 |url-status=live }}</ref>
* Also the [[Bank of Canada]], [[central bank]], for macroeconomic modeling<ref>{{Cite web |date=2023-05-02 |title=Finance and Economics Use Cases |url=https://discourse.julialang.org/t/finance-and-economics-use-cases/9452/104 |access-date=2023-05-04 |website=Julia Programming Language |language=en}}</ref>
* [[BlackRock]], the world's largest asset manager, for [[financial time-series analysis]]<ref name=":0">{{Cite web |last=D'Cunha |first=Suparna Dutt |date=2017-09-20 |title=How A New Programming Language Created By Four Scientists Now Used By The World's Biggest Companies |url=https://www.forbes.com/sites/suparnadutt/2017/09/20/this-startup-created-a-new-programming-language-now-used-by-the-worlds-biggest-companies/ |url-status=live |archive-url=https://web.archive.org/web/20221001082708/https://www.forbes.com/sites/suparnadutt/2017/09/20/this-startup-created-a-new-programming-language-now-used-by-the-worlds-biggest-companies/?sh=2c98522a7de2 |archive-date=2022-10-01 |access-date=2022-10-01 |website=Forbes |language=en}}</ref>