Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Julia (Programmiersprache)

Julia ist eine höhere Programmiersprache, die vor allem für numerisches und wissenschaftliches Rechnen entwickelt wurde und auch als …

Inhalt6 Abschnitte
  1. 1. Grundidee und zentrale Eigenschaften
  2. 2. Arbeiten mit Julia und Paketen
  3. 3. Implementierung, Ausführung und Plattformen
  4. 4. Einbindung in andere Sprachen und Datenanalyse
  5. 5. Entwicklung, Gemeinschaft und Firma
  6. 6. Alternativen für wissenschaftliches Rechnen

Grundidee und zentrale Eigenschaften

Julia ist eine höhere, quelloffene Programmiersprache für numerisches und wissenschaftliches Rechnen. Sie kann auch als Allzwecksprache eingesetzt werden und verbindet eine technische, an Matlab erinnernde Syntax mit hoher Ausführungsgeschwindigkeit. Julia wurde ab 2009 entwickelt und im Februar 2012 als Open Source veröffentlicht. Als Designer werden Jeff Bezanson, Stefan Karpinski, Viral B. Shah und Alan Edelman genannt.

Die Sprache ist dynamisch typisiert, verwendet aber Typinferenz. Ihr zentrales Paradigma sind Multimethoden: Das Verhalten einer Funktion kann durch die Kombination der Typen ihrer Argumente bestimmt werden. Julia unterstützt außerdem prozedurale, funktionale, objektorientierte Programmierung und Metaprogrammierung. Parametrisierte Typen erlauben es, Typen mit Typparametern allgemein und wiederverwendbar zu formulieren.

Ein wichtiges Ziel ist eine Geschwindigkeit im Bereich von C und Fortran. Julia unterstützt parallele und verteilte Programme, Koroutinen für leichtgewichtiges grünes Multithreading sowie automatische Generierung spezialisierten Codes für unterschiedliche Argumenttypen. Benutzerdefinierte Typen können so schnell wie eingebaute Typen sein. Die Sprache enthält standardmäßig einen Garbage Collector, effiziente Gleitkomma- und Lineare-Algebra-Operationen, Zufallszahlengenerierung und reguläre Ausdrücke.

Weitere Merkmale sind integrierte Paketverwaltung, Lisp-ähnliche Makros, Unicode-Unterstützung einschließlich UTF-8, Shell-ähnliche Prozesssteuerung und direkte Aufrufe von C-Funktionen ohne Wrapper oder besondere Programmierschnittstellen. Die Standardbibliothek ist größtenteils in Julia geschrieben. Julia steht unter der MIT-Lizenz und läuft unter Linux, macOS, Windows und FreeBSD.

Arbeiten mit Julia und Paketen

Zum interaktiven Ausprobieren enthält Julia standardmäßig ein REPL (Read–eval–print loop). Dort werden Eingaben gelesen, ausgewertet und das Ergebnis ausgegeben. Ein Beispiel ist:

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 bietet mit ; Zugriff auf die System-Shell und mit ? einen Hilfemodus. Es speichert die Befehlshistorie auch zwischen Sitzungen. Julia-Code kann direkt im REPL oder in Dateien mit der Endung .jl geschrieben und anschließend beispielsweise mit $ julia <filename> ausgeführt werden. Die Julia-Erweiterung für Visual Studio Code stellt eine integrierte Entwicklungsumgebung mit Debugging, Linting und Profiling bereit.

Julia besitzt einen integrierten Paketmanager mit einem Standardregistrierungssystem. Pakete werden meist als Quellcode, häufig über GitHub, verteilt; mithilfe von Artefakten können sie auch als Binärdateien installiert werden. Der Paketmanager fragt Pakete ab, kompiliert sie und verwaltet Umgebungen. Föderierte Paketregistrierungen ermöglichen zusätzliche lokale Registrierungen. Wird ein Paket im REPL verwendet, kann Julia automatisch nachfragen, ob es installiert werden soll. In der Pkg-REPL lassen sich beispielsweise JSON und StaticArrays mit (@v1.9) pkg> JSON StaticArrays installieren.

Standardmäßig muss die Julia-Laufzeitumgebung vorhanden sein, weil bereitgestellter Quellcode ausgeführt wird. Mit PackageCompiler.jl kann eine eigenständige ausführbare Datei erzeugt werden, die keinen Julia-Quellcode benötigt. Ein weiteres Paket unterstützt die Kompilierung aller Julia-Funktionen in ausführbare Binärdateien. Mit juliac sind seit Julia 1.12 besonders kleine Binärdateien möglich, sogar für Computer oder Mikrocontroller mit 2 KB RAM. Solche Dateien enthalten jedoch keine Laufzeitumgebung und damit beispielsweise keinen Garbage Collector und kein Threading.

Implementierung, Ausführung und Plattformen

Der Kern von Julia ist in C und C++ implementiert, der Parser in Scheme, genauer femtolisp. Das LLVM-Compilerframework erzeugt optimierten 64-Bit- oder 32-Bit-Maschinencode Just-in-time (JIT), also während der Programmausführung. Sobald eine Funktion erstmals ausgeführt wird, entsteht nativer Maschinencode. Anders als bei Java oder Dalvik erzeugt Julia keinen Bytecode, der in einer virtuellen Maschine läuft.

Julia verwendet einen Mark-and-Sweep-Garbage-Collector zur Speicherbereinigung. Für hochperformante Zahlenverarbeitung wird diese Wahl im Artikel als unproblematisch beschrieben. Bei Echtzeitberechnungen wie Audioverarbeitung könnte eine inkrementelle Implementierung des Garbage Collectors eine deutlich bessere Ausführungsgeschwindigkeit ermöglichen. Optimierter C-Code ist laut Artikel meist höchstens doppelt so schnell wie Julia-Code; Julia-Code kann dadurch eine Größenordnung schneller sein als Python- oder R-Code.

Die kompilierte Assemblersprache einer gerade eingegebenen Funktion lässt sich anzeigen, auch bei eingebauten Funktionen wie dem Additionsoperator +. In Julia sind solche Operatoren ebenfalls Funktionen; ihre besondere Schreibweise ist syntaktischer Zucker. Für code_native(+, (Float64, Float64)) enthält das Beispiel unter anderem die Maschinenbefehle addsd XMM0, XMM1, gefolgt von pop RBP und ret.

Gut unterstützt werden neuere x86- und ältere i386-Prozessorarchitekturen sowie unter Linux 64-Bit-ARMv8 und 64-Bit-Nvidia-PTX. Für Raspberry Pi 1 und Pi 2 ist die Unterstützung als Alpha bezeichnet; auf ARMv7 startete Julia auf einem Samsung Chromebook laut Artikel ohne Probleme. Ein Compiler nach JavaScript, der die Ausführung im Browser ermöglicht, befand sich in Entwicklung.

Einbindung in andere Sprachen und Datenanalyse

Julia kann mit zahlreichen anderen Programmiersprachen und Systemen verbunden werden. Die Julia-C-API kann die gesamte Julia-Laufzeit einschließlich Bibliotheken in C-Programme einbetten, ohne Daten kopieren zu müssen. Auch Sprachen, die C aufrufen können, werden unterstützt, sofern die CPU von allen beteiligten Umgebungen unterstützt wird. Es gibt außerdem eine Bibliothek für direkten C++-Aufruf ohne den Umweg über C, wodurch Name-Mangling vermieden wird. Python kann Julia-Funktionen aufrufen und umgekehrt; auch rekursive Aufrufe in beide Richtungen sind möglich. JavaCall, Mathematica, Rust und node-julia erweitern die Nutzung auf Java, Mathematica, Rust beziehungsweise JavaScript und Node.js. Polyglot ermöglicht unter anderem für PHP und Perl transparente Fernaufrufe und rekursive Auswertung von Funktionen anderer Sprachen.

Für grafische Benutzeroberflächen existieren Wrapper für GTK, Qt, Tk und JGUI. Blink dient zum Erstellen und Verwenden von Browserfenstern. Für Datenbanken gibt es zahlreiche SQL- und NoSQL-Schnittstellen sowie ODBC für datenbankübergreifenden Zugriff. Julia verwendet standardmäßig frühe Auswertung (Eager Evaluation); das Paket Lazy stellt Grundlagen für verzögerte Auswertung und Lazily-evaluated-Listen bereit. Die optionale Unterstützung durch ICU und UnicodeExtras erweitert die standardmäßige UTF-8-Verarbeitung.

Julia wurde mit dem Ziel entwickelt, für Statistik ähnlich einfach nutzbar zu sein wie R. RCall und Rif erlauben den Aufruf von R aus Julia, während RJulia Julia aus R aufruft. Gadfly dient zur Erstellung statistischer Grafiken, Distributions zur Arbeit mit Verteilungen. Rmath stellt einfache statistische Funktionen aus der R-Bibliothek bereit. Die von Julia verwendete gepatchte Version von Rmath nutzt dSFMT (double precision SIMD-oriented Fast Mersenne-Twister) als Zufallszahlengenerator für schnellere normalverteilte Zufallszahlen.

Entwicklung, Gemeinschaft und Firma

Die Arbeit an Julia begann 2009 durch Jeff Bezanson, Stefan Karpinski, Viral B. Shah und Alan Edelman. Die Entwicklung erfolgte am MIT. Stefan Karpinski, Viral Shah und Jeff Bezanson erhielten dafür 2019 den J. H. Wilkinson Prize for Numerical Software; Alan Edelman erhielt im selben Jahr unter anderem für seine Beiträge zu Julia den Sidney Fernbach Award. Im November 2015 wurden 600.000 US-Dollar von der Gordon-und-Betty-Moore-Stiftung für die Entwicklung bis zur Version 1.0 gespendet.

Julia 0.7 und Julia 1.0 wurden am 8. August 2018 veröffentlicht. Version 1.6 war nach Julia 1.0 das größte Release. Julia 1.9.0 erschien am 7. Mai 2023 und konnte Pakete vollständig in nativen Maschinencode vorkompilieren. Dadurch konnten Pakete wie CSV.jl und DataFrames.jl bei der ersten Verwendung bis zu hundertmal schneller sein. PrecompileTools.jl unterstützt diese Vorkompilierung. Julia 1.10.0 erschien am 25. Dezember 2023, das Update 1.10.5 am 27. August 2024; genannt werden unter anderem parallele Garbage Collection, kürzere Paketladezeiten sowie ein neuer Parser mit besseren Fehlermeldungen und besserer Stacktrace-Darstellung. Julia 1.11.0 wurde am 7. Oktober 2024 veröffentlicht.

Die Versionsangaben im Artikel sind teilweise widersprüchlich: In den Basisdaten werden Julia 1.12.6 vom 10. April 2026 und 1.10.11 als LTS-Version genannt. Im Fließtext wird dagegen Julia 1.12.0 vom 7. Oktober 2025 als aktuelles stabiles Release bezeichnet und 1.10.5 als nächste LTS-Version nach Julia 1.11.0. Die Julia-Con-Community wuchs von einigen Dutzend Teilnehmern auf über 28.900 einzelne Teilnehmer bei der virtuellen JuliaCon 2020 und 43.000 Teilnehmer bei der JuliaCon 2021 mit mehr als 300 Präsentationen. JuliaCon findet seit 2014 jährlich statt. 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.

Alternativen für wissenschaftliches Rechnen

Eine wichtige und älteste Alternative ist Matlab, das seit 1984 kommerziell von MathWorks entwickelt und vertrieben wird. Für numerische Aufgaben mit linearer Algebra kommen auch Scilab/Xcos, GNU Octave und FreeMat infrage. Julias Routinen für lineare Algebra beruhen auf den quelloffenen Fortran-Bibliotheken LAPACK und BLAS; NumPy verwendet ebenfalls LAPACK und BLAS.

Für wissenschaftliches Rechnen und Datenanalyse können Python-Bibliotheken wie NumPy und Matplotlib eingesetzt werden. Weitere Alternativen sind die JVM-basierte Sprache Scala mit der Bibliothek ND4S sowie ILNumerics auf Grundlage des .NET-Frameworks. Maple und Mathematica sind größere Computeralgebrasysteme, die vor allem auf symbolische Berechnungen ausgerichtet sind, aber ebenfalls numerische Algorithmen enthalten.

Weiterlesen

Funktionale Programmierung Funktionale Programmierung ist ein Programmierparadigma, in dem Funktionen nicht nur definiert und angewendet werden können, sondern auch wie Daten … Objektorientierte Programmierung Die objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee besteht darin … Metaprogrammierung Metaprogrammierung ist in der Informatik die Erstellung von Computerprogrammen ("Metaprogramme"), die Computerprogramme erzeugen. Das Ziel dabei ist es, … C (Programmiersprache) C ist eine imperative und prozedurale Programmiersprache, die der Informatiker Dennis Ritchie in den frühen 1970er Jahren an den Bell Laboratories entwickelte. Python (Programmiersprache) Python ([ˈpʰaɪθn̩], [ ˈpʰaɪθɑn], auf Deutsch auch [ ˈpʰyːtɔn]) ist eine universell nutzbare, üblicherweise interpretierte, höhere Programmiersprache. R (Programmiersprache) R ist eine freie Programmiersprache für statistische Berechnungen und Grafiken. Sie wurde 1992 von Statistikern für Anwender mit statistischen Aufgaben neu … Microsoft Windows Microsoft Windows (englische Aussprache [ˈmaɪ.kɹoʊ.sɒft ˈwɪn.doʊz]) bzw. Windows ist eine Reihe proprietärer grafischer Betriebssystemfamilien von Microsoft … Höhere Programmiersprache Eine höhere Programmiersprache ist eine Programmiersprache zur Abfassung eines Computerprogramms, die in Abstraktion und Komplexität von der Ebene der … Syntax Die Syntax behandelt Sätze nicht nur als eine Aneinanderreihung von Wörtern, sondern arbeitet eine zugrundeliegende Satzstruktur heraus, die neben der … Typisierung (Informatik) B. Variablen, Funktionen oder Objekte (im Sinne der objektorientierten Programmierung) korrekt verwendet werden. Ein Ziel der Typisierung ist die Vermeidung von … Gleitkommazahl Gleitkommazahlen bestehen aus einer festen Anzahl von Ziffern, die gemäß dem Stellenwertsystem den Wert der Zahl angeben, sowie der Angabe, um wie viele Stellen … Lineare Algebra Die lineare Algebra (auch Vektoralgebra) ist ein Teilgebiet der Mathematik, das sich mit Vektorräumen beschäftigt. Ähnlich wie in anderen Teilgebieten der …