Julia (programming language): Difference between revisions

Content deleted Content added
1.11.4 and 1.10.9 have been tagged. But do not have a release (though on e.g. release-1.1 branch, so I'm unclear which is better to link to). Assume will be announced shortly, and put on the downloads page; can be used as source code.
mNo edit summary
Line 41:
| url-status = live
}}</ref>
| latest_release_version = 1.11.4<ref>{{Cite web |title=GitHub - JuliaLang/julia at v1.11.4 |url=https://github.com/JuliaLang/julia/tree/v1.11.4 |access-date=2025-03-10 |website=GitHub |language=en}}</ref> <!-- {{wikidata|property|edit|reference|Q28974961 |P548=Q2804309|P348}} -->
| latest_release_date = {{start date and age|2025|03|10|df=y}} <!-- {{nowrap|{{wikidata|qualifier| Q28974961 | P548=Q2804309 |P348|P577}}}} --> and<br /> 1.10.9<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]]) / (same -day release) <!-- both {{start date and age|2025|03|10|df=y}} -->
| latest preview version = <!-- 1.11.4<ref>{{Cite web |date=2025-02-28 |title=Julia v1.11.4 testing period |url=https://discourse.julialang.org/t/julia-v1-11-4-testing-period/126419 |access-date=2025-02-28 |website=Julia Programming Language |language=en}}</ref> <!-- unclearnot this isyet out, but at least any day now(?): 1.12.0-alpha1<ref>{{Cite web |title=Backports for upcoming 1.12.0(-beta1) (#57258) · JuliaLang/julia@08d3c70 |url=https://github.com/JuliaLang/julia/commit/08d3c708b338b3c12e129918868e3003cb4acebd |access-date=2025-02-13 |website=GitHub |language=en}}</ref> -->
| latest_preview_date = <!-- {{start date and age|2025|02|28|df=y}} <!-- for alpha1 {{start date and age|2025|01|13|df=y}} and --> andBeing worked on: 1.12.0-beta1 being worked on<ref>{{Cite web |title=Issues · JuliaLang/julia |url=https://github.com/JuliaLang/julia/labels/release |archive-url=http://web.archive.org/web/20230223154752/https://github.com/JuliaLang/julia/labels/release |archive-date=2023-02-23 |access-date=2025-0203-04 |website=GitHub |language=en}}</ref><ref>{{Cite web |title=Backports for Julia 1.10.8 by KristofferC · Pull Request #56653 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/pull/56653 |access-date=2024-12-0111 |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 105:
}}</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 /> 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).
Line 142:
-->
 
Julia 1.11 was released on 7 October 2024 (and 1.11.34 on 2110 JanuaryMarch 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.8 released on 2210 January 2025March, and 1.6 is no longer an LTS version. Julia 1.11 adds e.g. parallel garbage collection and a 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.<!-- 1.11.1 has a regression from 1.11.0: https://github.com/JuliaLang/julia/issues/56204 so 1.11.2 is coming, I suppose it fixes the regression from 1.11. -->
 
<!-- 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.