Julia ist eine höhere Programmiersprache, die vor allem für numerisches und wissenschaftliches Rechnen entwickelt wurde und auch als Allzweck-Programmiersprache verwendet werden kann, bei gleichzeitiger Wahrung einer hohen Ausführungsgeschwindigkeit. Die Syntax erinnert stark an Matlab, wie auch an andere technische Programmiersprachen. Die Standardbibliothek ist in Julia selbst geschrieben. Die Programmiersprache, deren Entwicklung 2009 begann, wurde im Februar 2012 als Open Source veröffentlicht.
Die Ausführungsgeschwindigkeit liegt im Bereich von C und Fortran, wodurch sich Julia gegenüber anderen wissenschaftlichen Sprachen wie MATLAB, GNU Octave oder R deutlich absetzt. Charakterisiert wird das Design der Sprache durch ein Typsystem, das parametrisierte Typen erlaubt, eine dynamische Programmierumgebung und Multimethoden als zentrales Paradigma. Julia erlaubt paralleles und verteiltes Ausführen von Programmen und den direkten Aufruf von C- und Fortran-Bibliotheken. Julia enthält standardmäßig einen Garbage Collector und effiziente Implementierungen für Operationen mit Gleitkommazahlen und zur linearen Algebra, zur Generierung von Zufallszahlen und zur Verarbeitung regulärer Ausdrücke.
Die Entwicklung erfolgte am MIT; Stefan Karpinski, Viral Shah und Jeff Bezanson erhielten dafür den J. H. Wilkinson Prize for Numerical Software für 2019.
Mit Hilfe eines Pakets, das alle Julia-Funktionen unterstützt, kann zu ausführbaren Binärdateien kompiliert werden. Ein anderes Paket erzeugt besonders kleine ausführbare Binärdateien für Computer oder sogar Mikrocontroller mit 2 KB RAM. Diesen fehlt dann jedoch die Laufzeitumgebung und damit Funktionen wie der Garbage Collector und das Threading. Mit Binärpaketen muss aber kein Quellcode verteilt werden.
Die Visual-Studio-Code-Erweiterung von Julia bietet eine voll funktionsfähige integrierte Entwicklungsumgebung mit Unterstützung für Debugging, Linting und Profiling.
Geschichte Die Arbeit an Julia wurde 2009 von Jeff Bezanson, Stefan Karpinski, Viral B. Shah und Alan Edelman begonnen. Ziel war eine Höhere Programmiersprache mit hoher Ausführungsgeschwindigkeit als Open-Source-Projekt – so erklären es die Autoren 2012 im ersten Blogeintrag ihrer Website.https://julialang.org/blog/2012/02/why-we-created-julia/ Über den Namen Julia sagte Karpinski in einem Interview mit InfoWorld im April 2012: „Es gibt wirklich keinen guten Grund. Es schien einfach ein hübscher Name zu sein.“
In den Jahren seit dem Start von Julia pre-1.0 im Jahr 2012 ist die Community gewachsen. Das Julia-Paket-Ökosystem umfasst über 11,8 Millionen Codezeilen (einschließlich Dokumentation und Tests). Die JuliaCon University Conference für Julia-Benutzer und -Entwickler findet seit 2014 jährlich statt – 2021 mit über 43.000 Konferenzteilnehmern und über 300 Präsentationen, die kostenlos auf YouTube verfügbar sind.
Für die Entwicklung von Julia erhielten 2019 drei der vier Erstautoren den J. H. Wilkinson Prize for Numerical Software. Im gleichen Jahr wurde Alan Edelman, Professor für Angewandte Mathematik am MIT, der Sidney Fernbach Award zuerkannt, unter anderem für seine Beiträge zu Julia.
Julia 0.7 und Version 1.0 wurden am 8. August 2018 veröffentlicht.
Nach Julia 1.0 war Version 1.6 das größte Release. Julia 1.9.0 wurde am 7. Mai 2023 veröffentlicht. Es bietet viele Verbesserungen, wie z. B. die Möglichkeit, Pakete in nativen Maschinencode vorzukompilieren (ältere Julia-Versionen bieten auch eine Vorkompilierung für Pakete, aber nur teilweise, nie vollständig in nativen Code, sodass diese früheren Versionen eine „First Use“-Strafe hatten und langsamer wurden, während auf die vollständige Kompilierung gewartet wurde). Vorkompilierte Pakete können seit Version 1.9 bei der ersten Verwendung bis zu hundertmal schneller sein (z. B. für CSV.jl und DataFrames.jl), und um die Vorkompilierung von Paketen zu verbessern, wurde ein neues Paket PrecompileTools.jl eingeführt. Julia 1.10.0 wurde am 25. Dezember 2023 (und das Update Julia 1.10.5 am 27. August 2024) mit vielen neuen Funktionen veröffentlicht, z. B. parallele Garbage Collection, verbesserte Paketladezeiten und ein neuer Parser mit besseren Fehlermeldungen und verbesserter Stacktrace-Darstellung. Julia 1.11.0 wurde am 7. Oktober 2024 veröffentlicht (stabiles Release), und damit wurde 1.10.5 die nächste Version mit Langzeitunterstützung (LTS. e. Long Term Support) (d. h. dies sind die einzigen beiden unterstützten Versionen), und 1.6 ist keine LTS-Version mehr.
Das aktuelle stabile Release ist die Version 1.12.0 vom 7. Oktober 2025.
Viel kleinere binäre ausführbare Dateien sind mit juliac möglich, mit Julia 1.12.
JuliaCon
Seit 2014 veranstaltet die Julia Community eine jährliche Julia-Konferenz, die sich auf Entwickler und Benutzer konzentriert. Die erste JuliaCon fand in Chicago statt und gab den Startschuss für die jährliche Veranstaltung der Konferenz. Seit 2014 findet die Konferenz an verschiedenen Orten statt, darunter das MIT und die University of Maryland, Baltimore. Das Veranstaltungspublikum ist während der JuliaCon 2020, die virtuell stattfand, von einigen Dutzend Personen auf über 28.900 einzelne Teilnehmer angewachsen. Die JuliaCon 2021 fand auch virtuell statt mit Keynote-Vorträgen von Professor William Kahan (dem Hauptarchitekten des IEEE 754-Gleitkommastandards, um den es in seiner Keynote geht, den praktisch alle CPUs und Sprachen verwenden, einschließlich Julia), und Jan Vitek, Xiaoye Sherry Li und Soumith Chintala (Mitschöpfer von PyTorch). JuliaCon wuchs auf 43.000 einzelne Teilnehmer und mehr als 300 Präsentationen (immer noch frei zugänglich, plus für ältere Jahre).
Firma Julia JuliaHub, Inc. wurde 2015 als Julia Computing, Inc. von Viral B. Shah, Deepak Vinchhi, Alan Edelman, Jeff Bezanson, Stefan Karpinski und Keno Fischer gegründet.
Eigenschaften Die offizielle Website stellt folgende Eigenschaften als wichtig heraus: Multimethoden können das Verhalten von Funktionen durch Kombination der Argumenttypen bestimmen Typen können mit Hilfe des dynamischen Typsystems zur Laufzeit erzeugt werden Gute Performance, die im Bereich von statisch typisierten Sprachen wie C liegt Integrierte Paketverwaltung Lisp-ähnliche Makros und weitere Bestandteile der Metaprogrammierung Aufruf von Python-Funktionen durch die Verwendung des Pakets PythonCallgroups.google.comgithub.com Direkter Aufruf von C-Funktionen, ohne Wrapper oder spezielle Programmierschnittstellen zu benötigen Mächtige Shell-ähnliche Möglichkeiten, um andere Prozesse zu verwalten Entwickelt für parallele Programmierung und verteiltes Rechnen Koroutinen erlauben leichtgewichtiges grünes Multithreading Benutzerdefinierte Typen sind so schnell wie eingebaute Typen Automatische Generierung von effizientem, spezialisiertem Code für unterschiedliche Argumententypen Elegante und erweiterbare Konvertierung und Typumwandlung für numerische und andere Typen Unicode wird effizient unterstützt, unter anderem UTF-8
Julia wurde stark von Lisp-Dialekten, in erster Linie Scheme und Common Lisp, beeinflusst und hat Gemeinsamkeiten mit Sprachen, die ebenfalls Multimethoden unterstützen. Dazu zählen Dylan, mit einer ALGOL-ähnlichen Syntax statt der Lisp-ähnlichen polnischen Notation, und Fortress, mit umfangreichem parametrischen Typ-System. CLOS erweitert Common Lisp um Multimethoden.
In Julia, Dylan und Fortress ist die Multimethode der Standard und die eingebauten Funktionen sind gänzlich generisch und erweiterbar. In Dylan werden Multimethoden genauso grundlegend behandelt wie in Julia: Sämtliche benutzerdefinierte Funktionen und eingebaute mathematische Operatoren wie die Addition mit + sind generisch. Dylans Typsystem unterstützt jedoch nicht vollständig parametrische Typen, was sich eher in von ML abstammenden Sprachen findet. Standardmäßig unterstützt CLOS keine parametrischen Typen für Multimethoden; dies muss durch das Metaobject Protocol hinzugefügt werden. Fortress erlaubt wie Julia parametrische Typen für Multimethoden, jedoch ist Fortress im Gegensatz zu Julia statisch typisiert, sodass Kompilierung und Ausführung in getrennten Phasen stattfinden. Die Tabelle fasst diese Eigenschaften zusammen:
Sprache Typ-System Multimethoden Parametrische Typen Julia dynamisch Standard ja Common Lisp dynamisch optional partiell (nicht für Multimethoden) Dylan dynamisch Standard partiell (nicht für Multimethoden) Fortress statisch Standard ja
Standardmäßig muss die Julia-Laufzeit vorinstalliert sein, da vom Benutzer bereitgestellter Quellcode ausgeführt wird. Alternativ kann eine eigenständige ausführbare Datei, die keinen Julia-Quellcode benötigt, mittels PackageCompiler.jl erstellt werden.
Benutzerinteraktion Julia enthält standardmäßig ein interaktives Kommandozeilenprogramm REPL (Read–eval–print loop), das zum Experimentieren und schnellen Testen von Code verwendet werden kann.Interacting With Julia Ein Beispielausschnitt aus dem REPL ist:Siehe auch: docs.julialang.org für String Interpolation
julia> p(x) = 2x^2 + 1; f(x, y) = 1 + 2p(x)y julia> println("Hallo Welt!", " Ich bin auf Wolke ", f(1, 1), ", da Julia erkennbare Syntax unterstützt!")
Das REPL gibt dem Benutzer Zugriff auf die System-Shell und stellt einen Hilfemodus zur Verfügung, indem ; oder ?, dem Kommando vorangestellt, nach der Eingabeaufforderung eingegeben werden. REPL speichert die Chronik aus eingegebenen Kommandos und solchen zwischen Sitzungen. Außerdem liefert es Codebeispiele, die direkt in REPL eingegeben oder in einer separaten Datei mit einer .jl-Endung gespeichert und anschließend durch $ julia <filename> in der System-Shell aufgerufen werden können.Learn Julia in Y Minutes
Paketmanager Julia hat einen integrierten Paketmanager und enthält ein Standardregistrierungssystem. Pakete werden meistens als Quellcode verteilt, der auf GitHub gehostet wird, obwohl auch Alternativen genauso gut verwendet werden können. Pakete können unter Verwendung von Artefakten auch als Binärdateien installiert werden. Julias Paketmanager wird zum Abfragen und Kompilieren von Paketen sowie zum Verwalten von Umgebungen verwendet. Es werden föderierte Paketregistrierungen unterstützt, sodass andere Registrierungen als die offiziellen lokal hinzugefügt werden können.
Wenn man ein Paket interaktiv aus der REPL verwendet, wird man automatisch gefragt, ob man das Paket installieren möchte. Alternativ können Pakete (eines oder mehrere) installiert werden, indem man zuerst die Pkg REPL eingibt, indem man aus der Julia REPL drückt und z. B. Folgendes tut:
(@v1.9) pkg> JSON StaticArrays
Verwendung mit anderen Sprachen Viele Pakete sind verfügbar, um andere Sprachen innerhalb von Julia aufzurufen. Beispielsweise ist das Paket JavaCallJavaCall.jl verfügbar, um Java
von Julia aus aufzurufen, Mathematica,Mathematica.jl um Mathematica aufzurufen, das Aufrufen von Rust ist möglich, und node-julia erlaubt JavaScript/node.js die Verwendung für asynchrone (Web-)Server. Für PHP, Perl und andere Sprachen, erlaubt PolyglotPolyglot.jl einen transparenten Fernaufruf und rekursive Auswertung von Funktionen in anderen Sprachen, so als wären sie reguläre Julia-Funktionen. Es ermöglicht anderen Sprachen, Julia-Funktionen so zu verwenden, als wären sie in der anderen Sprache geschrieben.
Mit Polyglot.jl hat Julia ebenfalls native und Wrapper-Pakete für symbolische Mathematik.
Standardmäßig unterstützt Julia UTF-8, jedoch können die optionalen Pakete ICU,ICU.jl ein Wrapper für International Components for Unicode und UnicodeExtrasUnicodeExtras.jl für eine erweiterte Unicodeunterstützung verwendet werden. Außerdem ist für die Erstellung und das Arbeiten mit Browserfenstern das Paket BlinkBlink.jl verfügbar.