Julia (programming language): Difference between revisions

Content deleted Content added
No edit summary
1.11.2 is done, but not yet announced; PR #56652 for 1.11.3 was renamed, apparently merged into 1.11.2. 1.6 is no longer LTS. PR for 1.6.8 was dropped: https://github.com/JuliaLang/julia/issues?q=label%3Arelease%20is%3Aclosed%20%201.6.8 Simplify history, on e.g. quite old 1.7.
Line 42:
| url-status = live
}}</ref>
Julia| 1.10.1latest_release_version and= 1.1011.02<!-- had{{wikidata|property|edit|reference|Q28974961 a|P548=Q2804309|P348}} number of regressions, some with workarounds such as for plotting,--><ref>{{Cite web |date=2024-02-22 |title=Accessset deniedVERSION forto plotting1.11.2 artifactsby KristofferC · Pull Request #56651 · JuliaLang/julia |url=https://discoursegithub.julialang.orgcom/tJuliaLang/access-denied-for-plotting-artifactsjulia/110570pull/656651 |access-date=2024-0212-2201 |website=Julia Programming LanguageGitHub |language=en}}</ref><ref>{{Cite web |title=JuliaGitHub 1.10- regressionsJuliaLang/julia |at website=[[GitHub]]v1.11.2 |url=https://github.com/JuliaLang/julia/issues?q=is%3Aissue+is%3Aopen+label%3A%22regression+1tree/v1.10%2211.2 |access-date=2024-12-01 |website=GitHub |language=en}}</ref><ref>{{Cite web |title=downloadBackports ca cert error on Linux onfor Julia 1.1011.12 by KristofferC · IssuePull Request #5333956652 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/issuespull/5333956652 |access-date=2024-0212-2201 |website=GitHub |language=en}}</ref><ref>{{Cite web |title=slowBackports subtypingfor of1.11.2 complexby UnionKristofferC · IssuePull Request #5337156228 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/issuespull/5337156228 |access-date=2024-0210-2218 |website=GitHub |language=en}}</ref> and 1.10.5 was since released on 27 August 2024.
| latest_release_version = {{wikidata|property|edit|reference|Q28974961 |P548=Q2804309|P348}}
| latest_release_date = {{start date and age|2024|12|01|df=y}}<!-- {nowrap|{{wikidata|qualifier| Q28974961 | P548=Q2804309 |P348|P577}}}} --> and<br /> 1.10.7 ([[long-term support|LTS]])<ref>{{Cite web |title=GitHub - JuliaLang/julia at v1.10.7 |url=https://github.com/JuliaLang/julia/tree/v1.10.7 |access-date=2024-12-01 |website=GitHub |language=en}}</ref><ref>{{Cite web |title=release-1.10: set VERSION to 1.10.7 (by KristofferC · Pull Request #56615) · JuliaLang/julia@4976d05 |url=https://github.com/JuliaLang/julia/commitpull/4976d05258ec9aeed40c6c6f73a7f8bbd977d9c656615 |access-date=2024-1112-2601 |website=GitHub |language=en}}</ref><!-- <ref>{{Cite web |title=Releasesset VERSION to 1.10.7 (#56615) · JuliaLang/julia@4976d05 |url=https://github.com/JuliaLang/julia/releasescommit/4976d05258ec9aeed40c6c6f73a7f8bbd977d9c6 |access-date=2024-1011-2826 |website=GitHub |language=en}}</ref> --> (the/ only{{start [[long-termdate supportand age|LTS]])2024|11|26|df=y}}
| latest preview version = <!-- 1.11.2 ->
| latest preview version = 1.11.2<ref>{{Cite web |title=Backports for 1.11.2 by KristofferC · Pull Request #56228 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/pull/56228 |access-date=2024-10-18 |website=GitHub |language=en}}</ref>
| latest_preview_date = <!- {{start date and age|2024|11|2226|df=y}} and--> <!-- 1.11.3 is alsoEDIT: NOT done, PR was renamed to 1.11.2: <ref>{{Cite web |title=Backports for Julia 1.11.3 by KristofferC · Pull Request #56652 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/pull/56652 |access-date=2024-11-24 |website=GitHub |language=en}}</ref> and --> 1.10.8 being worked on<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-01 |website=GitHub |language=en}}</ref> and 1.12.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 66:
"These roughly follows the c11/c++11 memory model [..] The only exception is the GC safepoint and GC state transitions [..] We use the compiler intrinsics to implement a similar API to the c11/c++11" https://github.com/JuliaLang/julia/blob/44f3d7c921cbe50105a54258db2febb65a4b9d44/src/julia_threads.h
--> [[C++]], [[LLVM]],<ref>{{Cite web |title=Building Julia (Detailed) |website=[[GitHub]] |date=September 2017 |url=https://github.com/JuliaLang/julia/blob/master/doc/src/devdocs/build/build.md#required-build-tools-and-external-libraries |access-date=2022-05-16 |archive-date=16 May 2022 |archive-url=https://web.archive.org/web/20220516170342/https://github.com/JuliaLang/julia/blob/master/doc/src/devdocs/build/build.md#required-build-tools-and-external-libraries |url-status=live }}</ref> [[Scheme (programming language)|Scheme]] (<!-- is still used for lowering code (and bootstrapping? only that 1-2 functions, likely Scheme uyse will be elimintaed, i.e. for both; plus -->was used the parser; almost exclusively)
| platform = Tier&nbsp;1: [[x86-64]], [[IA-32]], [[Apple silicon]] <small>([[AArch64|ARM64]])</small> Macs; Nvidia GPUs/[[CUDA]] (on Linux)<ref>{{Cite web|title=NVIDIA CUDA ⋅ JuliaGPU|url=https://juliagpu.org/cuda/|access-date=2022-01-17|website=juliagpu.org|quote=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|archive-date=29 January 2022|archive-url=https://web.archive.org/web/20220129013944/https://juliagpu.org/cuda/|url-status=live}}</ref><br /> Tier&nbsp;2: [[FreeBSD]], [[Armv8|64-bit Arm]] on Linux, Apple GPUs; Intel GPUs/[[OneAPI (compute acceleration)|OneAPI]] 6.2+ and Nvidia GPUs (on Windows)<br /> Tier&nbsp;3: 32-bit [[ARM architecture family|Arm]]; 64-bit [[RISC-V]] and [[Power Architecture|<!--- meaning [[POWER8]], and that about to be dropped, but shown as -->PowerPC]]; and AMD GPUs/[[ROCm]] 5.3+.
| operating system = [[Linux]], [[macOS]], [[Microsoft Windows|Windows]] and <!-- no longer just community support for --> [[FreeBSD]]
| license = [[MIT License|MIT]] <!--(mainly),<ref name="license" /><!- for core language while, by default, "the environment, which consists of the language, user interfaces, and libraries, is under the GPL"; includes [[GNU General Public License|GPL v2]] components by default;<ref>{{Cite web |title=julia/julia.spdx.json |website=[[GitHub]] |date=September 2017 |url=https://github.com/JuliaLang/julia/blob/7b395153e80672f8cdb18f51dd653a85e28b2070/julia.spdx.json |access-date=2022-05-16}}</ref><ref>{{Cite newsgroup|url=https://groups.google.com/forum/#!topic/julia-users/v4OjEK7azBs |title=Non-GPL Julia? |website=Groups.google.com |access-date=2017-05-31}}</ref><!--as some few libraries used by the standard library (that can be excluded) are [[copyleft]]-> a [[makefile]] option omits GPL libraries.<ref>{{Cite web |url=https://github.com/JuliaLang/julia/pull/10870 |title=Introduce USE_GPL_LIBS Makefile flag to build Julia without GPL libraries |website=[[GitHub]] |quote=Note that this commit does not remove GPL utilities such as git and busybox that are included in the Julia binary installers on Mac and Windows.--><!--dropped as of 0.5 then only libgit2--><!-- It allows building from source with no GPL library dependencies.}}</ref>-->
Line 131:
 
The release changed the behavior in the [[read–eval–print loop|REPL]] (soft scope) to the one used in [[Project Jupyter|Jupyter]], but fully compatible with non-REPL code. Most of the [[thread (computing)|thread API]] was marked as stable, and with this release "arbitrary immutable objects—regardless of whether they have fields that reference mutable objects or not—can now be stack allocated",<ref>{{Cite web|author1=Jeff Bezanson |author2=Stefan Karpinski |author3=Viral Shah |author4=Alan Edelman |display-authors=etal |title=The Julia Language|url=https://julialang.org/blog/2020/08/julia-1.5-highlights/|access-date=2020-08-14|quote=There are some size-based limits to which structs can be stack allocated, but they are unlikely to be exceeded in practice.|website=julialang.org|language=en}}</ref> reducing heap allocations, e.g. <code>views</code> are no longer allocating. <!- "± and ∓ are now unary operators as well, like + or -" -> Julia&nbsp;1.5 targeted so-called "time-to-first-plot" (TTFP, also called TTFX, for first X, the more general problem) performance, in general, the speed of compilation itself (as opposed to performance of the generated code), and added tools for developers to improve package loading.<ref>{{Cite web|author1=Jeff Bezanson |author2=Stefan Karpinski |author3=Viral Shah |author4=Alan Edelman |display-authors=etal |title=The Julia Language|url=https://julialang.org/blog/2020/08/invalidations/|access-date=2020-09-16|website=julialang.org|language=en}}</ref>
-->Julia 1.6 was the largest release since 1.0, and it was the [[long-term support]] (LTS) version for the longest time, faster on many fronts, e.g. introduced parallel precompilation and faster loading of packages, in some cases "50x speedup in load times for large trees of binary artifacts".<ref>{{Cite web|author1=Jeff Bezanson|author2=Stefan Karpinski|author3=Viral Shah|author4=Alan Edelman|display-authors=etal|title=Julia 1.6 Highlights|url=https://julialang.org/blog/2021/03/julia-1.6-highlights/|access-date=2021-03-26|website=julialang.org|language=en|archive-date=26 March 2021|archive-url=https://web.archive.org/web/20210326155220/https://julialang.org/blog/2021/03/julia-1.6-highlights/|url-status=live}}</ref> As of versionSince 1.7 Julia development is back to [[release early, release often|time-based releases]].<ref>{{Cite web|title=Upgrade to OpenBLAS 0.3.13 · Pull Request #39216 · JuliaLang/julia|url=https://github.com/JuliaLang/julia/pull/39216#issuecomment-816285199|access-date=2021-04-26|website=GitHub|language=en|quote=Given that 1.7 is not too far away (timed releases going forward)|archive-date=23 March 2022|archive-url=https://web.archive.org/web/20220323054712/https://github.com/JuliaLang/julia/pull/39216#issuecomment-816285199|url-status=live}}</ref> Julia&nbsp;1.7.0 was released in November 2021 with many changes, e.g. a new faster [[random number generation|random-number generator]]. and Julia&nbsp;1.7.3 wasfixed released on 25 May 2022, fixing some issues, includinge.g. at least one security update,issue.<ref>{{Cite web |title=[Zlib_jll] Update to v1.2.12+3 by giordano · Pull Request #44810 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/pull/44810 |access-date=2022-05-25 |website=GitHub |language=en |archive-date=25 May 2022 |archive-url=https://web.archive.org/web/20220525225959/https://github.com/JuliaLang/julia/pull/44810 |url-status=live }}</ref> and 1.7.x is no longer supported. Julia&nbsp;1.8 was released in 2022 (and versions up to 1.8.5 as a followup in January 2023,<ref>{{Cite web |title=Backports for Julia 1.8.5 by KristofferC · Pull Request #48011 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/pull/48011 |access-date=2023-01-08 |website=GitHub |language=en |archive-date=4 January 2023 |archive-url=https://web.archive.org/web/20230104192611/https://github.com/JuliaLang/julia/pull/48011 |url-status=live }}</ref> <!-- both fixing bugs ([[backporting]]) and "invalidations", thus compiling faster),--> with 1.8.x improvements for distributing Julia programs without source code, <!-- --strip-metadata and --strip-ir --> and compiler speedup, in some cases by 25%,<ref>{{Cite web |title=compiler: speed up bootstrapping time by 25% by aviatesk · Pull Request #41794 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/pull/41794 |access-date=2022-03-03 |website=GitHub |language=en |quote=the bootstrapping took about 80 seconds previously, but on this PR the time is reduced to about 60 seconds. |archive-date=3 March 2022 |archive-url=https://web.archive.org/web/20220303155817/https://github.com/JuliaLang/julia/pull/41794 |url-status=live }}</ref> <!-- "Bootstrapping time has been improved by about 25%" --> and more controllable [[inline expansion|inlining]] (i.e. now also allowing applying <code>@inline</code> at the call site, not just on the function itself). Julia 1.9.0 was released on 7 May 2023. It has many improvements, <!-- such as solving the TTFX/TTFP problem; --> such as the ability to precompile packages to native machine code (older Julia versions also have precompilation for packages, but only partial, never fully to native code, so those earlier versions had a "first use" penalty, slowing down while waiting to fully compile). Precompiled packages, since version 1.9, can be up to hundreds of times faster on first use (e.g. for ''CSV.jl'' and ''DataFrames.jl''), and to improve precompilation of packages a new package ''PrecompileTools.jl'' has been introduced. Julia 1.10.0 was released on 25 December 2023 (and Julia 1.10.5 update on 27 August 2024) with many new features, e.g. parallel garbage collection, and improved package load times and a new parser, i.e. it rewritten in Julia, with better error messages and improved stacktrace rendering.<ref>{{Cite web |title=Julia v1julia/HISTORY.10md Releaseat Notesmaster · The Julia LanguageJuliaLang/julia |url=https://docsgithub.julialang.orgcom/enJuliaLang/v1julia/NEWSblob/master/HISTORY.md#Juliajulia-v1.10v110-Releaserelease-Notes |website=docs.julialang.orgnotes |access-date=30 March 2024 |archive-url=https://web.archive.org/web/20240330001330/https://docs.julialang.org/en/v1/NEWS/#Julia12-v1.10-Release-Notes01 |archive-datewebsite=30 March 2024GitHub |datelanguage=25 December 2023 |url-status=liveen}}</ref><!--
New parser written in Julia
Package load time improvements
Improvements in stacktrace rendering
Line 142 ⟶ 141:
Avoiding races during parallel precompilation
Parallel precompile on using
-->
<!--
Julia 1.10.1 and 1.10.0 had a number of regressions, some with workarounds such as for plotting,<ref>{{Cite web |date=2024-02-22 |title=Access denied for plotting artifacts |url=https://discourse.julialang.org/t/access-denied-for-plotting-artifacts/110570/6 |access-date=2024-02-22 |website=Julia Programming Language |language=en}}</ref><ref>{{Cite web |title=Julia 1.10 regressions | website=[[GitHub]] |url=https://github.com/JuliaLang/julia/issues?q=is%3Aissue+is%3Aopen+label%3A%22regression+1.10%22}}</ref><ref>{{Cite web |title=download ca cert error on Linux on Julia 1.10.1 · Issue #53339 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/issues/53339 |access-date=2024-02-22 |website=GitHub |language=en}}</ref><ref>{{Cite web |title=slow subtyping of complex Union · Issue #53371 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/issues/53371 |access-date=2024-02-22 |website=GitHub |language=en}}</ref> and 1.10.5 was since released on 27 August 2024.
-->
 
Julia 1.11.0 was released on 7 October 2024 (and 1.11.1 on 16 October), 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.67 released on 2826 OctoberNovember, and 1.6 is no longer an LTS version. <!-- 1.6 is "officially unmaintained", so most likely the PR for 1.6.8 will be abandoned: https://github.com/JuliaLang/julia/labels/release --> Julia 1.11 adds e.g. 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 might beis coming, though I don't see a milestone forsuppose it, Ifixes suppose this is also athe regression from 1.11. -->
 
Some users may want to postoponepostpone upgrading to 1.11 (e.g. those calling Julia from R), because of known temporary package incompatibility.
 
Much smaller binary executables are possible with <code>juliac</code> which is only available in the upcoming Julia 1.12 (the current "nightly" version).
Line 197 ⟶ 193:
Multiple dispatch (also termed [[multimethod]]s in Lisp) is a [[generalization]] of [[single dispatch]]{{snd}} the [[polymorphism (computer science)|polymorphic mechanism]] used in common [[object-oriented programming]] (OOP) languages, such as [[Python (programming language)|Python]], [[C++]], [[Java (programming language)|Java]], [[JavaScript]], and [[Smalltalk]]{{snd}} that uses [[inheritance (object-oriented programming)|inheritance]]. In Julia, all concrete types are [[subtyping|subtypes]] of abstract types, directly or indirectly subtypes of the <code>Any</code> type, which is the top of the type hierarchy. Concrete types can not themselves be subtyped the way they can in other languages; composition is used instead (see also [[inheritance (object-oriented programming)#Inheritance vs subtyping|inheritance vs subtyping]]).
 
By default, the Julia runtime must be pre-installed as user-provided source code is run. Alternatively, Julia (GUI) apps can be quickly bundled up into a single file with ''AppBundler.jl''<ref name=AppBundler.jl>{{Cite web |title=AppBundler.jl |date=2023-12-13 |url=https://github.com/PeaceFounder/AppBundler.jl |access-date=2023-12-18 |publisher=PeaceFounder |archive-date=18 December 2023 |archive-url=https://web.archive.org/web/20231218172216/https://github.com/PeaceFounder/AppBundler.jl |url-status=live }}</ref> for "building Julia GUI applications in modern desktop application installer formats. It uses Snap for Linux, [[.msix|MSIX]] for Windows, and DMG for MacOS as targets. It bundles full Julia within the app".<ref>{{Cite web |date=2023-11-30 |title=[ANN] AppBundler.jl - Bundle Your Julia GUI Application |url=https://discourse.julialang.org/t/ann-appbundler-jl-bundle-your-julia-gui-application/106971 |access-date=2023-12-18 |website=Julia Programming Language |language=en |archive-date=4 September 2024 |archive-url=https://web.archive.org/web/20240904035046/https://discourse.julialang.org/t/ann-appbundler-jl-bundle-your-julia-gui-application/106971 |url-status=live }}</ref> ''PackageCompiler.jl'' can build standalone [[executable]]s that need no Julia source code to run.<ref name="PackageCompiler.jl">{{Cite web|title=GitHub - JuliaLang/PackageCompiler.jl: Compile your Julia Package.|date=2019-02-14|url=https://github.com/JuliaLang/PackageCompiler.jl|publisher=The Julia Language|access-date=2019-02-15|archive-date=23 March 2019|archive-url=https://web.archive.org/web/20190323182857/https://github.com/JuliaLang/PackageCompiler.jl|url-status=live}}</ref>
 
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.
Line 220 ⟶ 216:
|}
 
An example of the extensibility of Julia, the ''Unitful.jl'' package adds support for physical [[unit of measurement|units of measurement]] to the language.
 
===Interoperability===
Line 226 ⟶ 222:
 
===Separately-compiled executables option===
Julia can be compiled to binary [[executable]]s with ''PackageCompiler.jl''.<ref name="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]] (nor garbage collection, since excludes the runtime that provides it).<ref>{{Cite web |last=Short |first=Tom |title=StaticCompiler |date=2023-10-30 |url=https://github.com/tshort/StaticCompiler.jl |access-date=2023-10-30 |archive-date=31 October 2023 |archive-url=https://web.archive.org/web/20231031010517/https://github.com/tshort/StaticCompiler.jl |url-status=live }}</ref>
 
==Interaction==
Line 245 ⟶ 241:
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 the latest major release Unicode 15.0 (Julia&nbsp;1.11-DEV supports latest 15.1 point release<ref>{{Cite web |title=Unicode 15.1 support by stevengj · Pull Request #253 · JuliaStrings/utf8proc |url=https://github.com/JuliaStrings/utf8proc/pull/253 |access-date=2024-01-22 |website=GitHub |language=en |archive-date=22 January 2024 |archive-url=https://web.archive.org/web/20240122212737/https://github.com/JuliaStrings/utf8proc/pull/253 |url-status=live }}</ref>)<ref>{{Cite web |title=support Unicode 15 via utf8proc 2.8 by stevengj · Pull Request #47392 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/pull/47392 |access-date=2022-11-03 |website=GitHub |language=en |archive-date=3 November 2022 |archive-url=https://web.archive.org/web/20221103134225/https://github.com/JuliaLang/julia/pull/47392 |url-status=live }}</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=live }}</ref>
 
The REPL can be extended with additional modes, and has been with packages, e.g. with an [[SQL]] mode,<ref>{{Cite web |first=Chris |last=Foster |title=SQLREPL.jl |website=[[GitHub]] |date=2022-04-04 |url=https://github.com/c42f/SQLREPL.jl |access-date=2022-09-27 |archive-date=27 September 2022 |archive-url=https://web.archive.org/web/20220927085821/https://github.com/c42f/SQLREPL.jl |url-status=live }}</ref> for database access, and ''RCall.jl'' adds an {{nowrap|R mode}}, to work with the [[R (programming language)|R language]].<ref>{{Cite web |title=Getting Started · RCall.jl |url=https://juliainterop.github.io/RCall.jl/latest/gettingstarted.html#Several-Ways-to-use-RCall-1 |access-date=2022-09-27 |website=juliainterop.github.io |archive-date=4 September 2024 |archive-url=https://web.archive.org/web/20240904035201/https://juliainterop.github.io/RCall.jl/latest/gettingstarted.html#Several-Ways-to-use-RCall-1 |url-status=live }}</ref>
 
===Use with other languages===
Julia is in practice [[interoperability|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 (which do not provide C-exported functions directly), e.g. Python (with ''PythonCall.jl''), R<!-- Works with 1.11.x (and 1.10.5 presumably too, but not for all) for at least some users, unclear why not for all, user on discource confimed worked on macOS, and I on Linux. -->,<ref>{{Cite web |date=2024-10-21 |title=Julia crashes on installation of the RCall module |url=https://discourse.julialang.org/t/julia-crashes-on-installation-of-the-rcall-module/121560/6 |access-date=2024-10-22 |website=Julia Programming Language |language=en |quote=For me RCall loads without issue on Julia 1.11 on MacOS}}</ref> MATLAB, C# (and other .NET languages with ''DotNET.jl'', from them with ''JdotNET''), JavaScript, Java (and other JVM languages, such as [[Scala (programming language)|Scala]] with ''JavaCall.jl''). And packages for other languages allow to call to Julia, e.g. from Python, R (to Julia 1.10.x currently possible<!--JuliaCall/r-juliacall likely used an internal/"non-public", non-API, though exported, since removed, i.e. the package was broken by Julia 1.11; the fix is trivial, though the maintainer absent, and I've suggested a workaround, *other* package to call from R to Julia should work for Julia 1.11 still. ---><ref>{{Cite web |title=juliacall fails in julia 1.11 with `undefined symbol: jl_stdout_obj` · Issue #234 · Non-Contradiction/JuliaCall |url=https://github.com/Non-Contradiction/JuliaCall/issues/234 |access-date=2024-10-22 |website=GitHub |language=en}}</ref>), [[Rust (programming language)|Rust]], Ruby, or C#. Such as with juliacall (part of ''PythonCall.jl''<!-- , pyjulia is a different option -->) 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 [[field-programmable gate array|FPGA]]s.<ref name="HLS/FPGA" />
 
Julia has packages supporting markup languages such as [[HTML]] (and also for [[HTTP]]), [[XML]], [[JSON]] and [[BSON]], and for [[database]]s (such as PostgreSQL,<ref>{{Cite web |title=Home · LibPQ.jl |url=https://invenia.github.io/LibPQ.jl/stable/ |access-date=2022-11-08 |website=invenia.github.io |archive-date=8 November 2022 |archive-url=https://web.archive.org/web/20221108125236/https://invenia.github.io/LibPQ.jl/stable/ |url-status=dead }}</ref> Mongo,<ref name="FunSQL" /> Oracle, including for [[TimesTen]],<ref>{{Cite web |last=Hood |first=Doug |date=21 October 2022 |title=Using Julia with Oracle Databases |url=https://blogs.oracle.com/timesten/post/using-julia-with-oracle-database |access-date=8 November 2022 |archive-date=8 November 2022 |archive-url=https://web.archive.org/web/20221108125241/https://blogs.oracle.com/timesten/post/using-julia-with-oracle-database |url-status=live }}</ref> MySQL, SQLite, Microsoft SQL Server,<ref name="FunSQL">{{Cite web |title=Home · FunSQL.jl |url=https://docs.juliahub.com/FunSQL/HGzDG/0.9.2/ |access-date=2022-11-08 |website=docs.juliahub.com |archive-date=8 November 2022 |archive-url=https://web.archive.org/web/20221108125240/https://docs.juliahub.com/FunSQL/HGzDG/0.9.2/ |url-status=live }}</ref> Amazon Redshift, Vertica, ODBC) and web use in general.<ref>{{Cite web |title=Genie Builder - Visual Studio Marketplace |url=https://marketplace.visualstudio.com/items?itemName=GenieBuilder.geniebuilder |access-date=2022-11-08 |website=marketplace.visualstudio.com |language=en-us |archive-date=8 November 2022 |archive-url=https://web.archive.org/web/20221108123305/https://marketplace.visualstudio.com/items?itemName=GenieBuilder.geniebuilder |url-status=live }}</ref><ref>{{Cite web |date=2022-02-01 |title=How to Build Your First Web App in Julia with Genie.jl |url=https://www.freecodecamp.org/news/how-to-build-web-apps-in-julia/ |access-date=2022-11-08 |website=freeCodeCamp.org |language=en |archive-date=8 November 2022 |archive-url=https://web.archive.org/web/20221108123305/https://www.freecodecamp.org/news/how-to-build-web-apps-in-julia/ |url-status=live }}</ref>
Line 258 ⟶ 254:
 
==Implementation==
Julia's core is implemented in Julia and [[C (programming language)|C]],<!-- C99, except for 0.4 needing C11 because of static asserts --> together with [[C++]] for the [[LLVM]] dependency. The code parsing, code-lowering, and bootstrapping were implemented in FemtoLisp, a [[Scheme (programming language)|Scheme]] dialect, up to version 1.10.<ref name="JeffBezanson 2019">{{Cite web | first=Jeff | last=Bezanson | title=JeffBezanson/femtolisp | website=GitHub | date=6 June 2019 | url=https://github.com/JeffBezanson/femtolisp | access-date=16 June 2019 | archive-date=22 December 2022 | archive-url=https://web.archive.org/web/20221222170835/https://github.com/JeffBezanson/femtolisp | url-status=live }}</ref> Since that version the new pure-Julia stdlib package ''JuliaSyntax.jl,'' is used for the parsing (while the old one can still be chosen)<ref>{{Cite web |title=JuliaSyntax |date=2022-08-28 |url=https://github.com/JuliaLang/JuliaSyntax.jl |publisher=The Julia Programming Language |access-date=2022-08-28 |archive-date=28 August 2022 |archive-url=https://web.archive.org/web/20220828185806/https://github.com/JuliaLang/JuliaSyntax.jl |url-status=live }}</ref> which improves speed and "greatly improves parser error messages in various cases".<ref>{{Cite web |title=Enable JuliaSyntax.jl as an alternative Julia parser by c42f · Pull Request #46372 · JuliaLang/julia |url=https://github.com/JuliaLang/julia/pull/46372 |access-date=2022-08-28 |website=GitHub |language=en |archive-date=28 August 2022 |archive-url=https://web.archive.org/web/20220828185805/https://github.com/JuliaLang/julia/pull/46372 |url-status=live }}</ref> The LLVM compiler infrastructure project is used as the [[Compiler#Back end|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 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. Julia has "initial support of OpenBSD in julia." but more is coming to make it actually work: https://github.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. [[Armv8]] ([[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>
 
On some platforms, Julia may need to be compiled from source code (e.g., the original [[Raspberry Pi]]), with specific build options, which has been done and unofficial pre-built binaries (and build instructions) are available.<ref>{{Cite web|title=Build Julia for RaspberryPi Zero|url=https://gist.github.com/terasakisatoshi/3f8a55391b1fc22a5db4a43da8d92c98|access-date=2020-08-14|website=Gist|language=en|archive-date=1 December 2020|archive-url=https://web.archive.org/web/20201201075252/https://gist.github.com/terasakisatoshi/3f8a55391b1fc22a5db4a43da8d92c98|url-status=live}}</ref><ref>{{Cite web|title=JuliaBerry: Julia on the Raspberry Pi|url=https://juliaberry.github.io/|access-date=2020-08-14|website=juliaberry.github.io|archive-date=8 July 2020|archive-url=https://web.archive.org/web/20200708065730/https://juliaberry.github.io/|url-status=live}}</ref> Julia has been built <!--on the following ARMv8 devices:
Line 271 ⟶ 267:
* [https://softiron.com/products/overdrive-3000/ Overdrive 3000];
* [https://www.cavium.com/ThunderX_ARM_Processors.html Cavium ThunderX]-->
for several ARM platforms, from small Raspberry Pis to the world's fastest (at one point, until recently) supercomputer [[Fugaku (supercomputer)|Fugaku]]'s ARM-based [[Fujitsu A64FX|A64FX]].<ref>{{Cite web |last=Giordano |first=Mosè |title=Julia on Fugaku (2022-07-23) |website=[[GitHub]] |date=2022-09-29 |url=https://github.com/giordano/julia-on-fugaku |access-date=2022-11-08 |archive-date=8 November 2022 |archive-url=https://web.archive.org/web/20221108120723/https://github.com/giordano/julia-on-fugaku |url-status=live }}</ref> [[Power Architecture|PowerPC]] (64-bit) has tier&nbsp;3 support, meaning it "may or may not build", and its tier will lower to 4 for 1.12, i.e. then no longer works.
<!--
Support for ARM, [[AArch64]], and [[Power Architecture|POWER8AArch64]] (little-endian) has beenwas added recently as of 0.5.1 is available too.<ref>{{Cite web|url=https://github.com/JuliaLang/julia/blob/v0.5.2/README.md |title=julia/README.md at v0.5.2 · JuliaLang/julia · GitHub |website=Github.com |date=2017-05-03 |access-date=2017-05-31}}</ref>
 
and in 0.5.x: