Julia: eine Programmiersprache, um das Klima zu retten?
So performant wie C++, so dynamisch wie Ruby, so praktikabel wie Python, aber auch in der Lage, wie R mit Statistiken und wie Matlab mit Zahlen umzugehen: Julia ist die wahrscheinlich vielversprechendste moderne Programmiersprache, die es aktuell gibt. Woran das liegt, schauen wir uns jetzt an – aber Vorsicht, Du wirst Julias Charme vielleicht genauso erliegen wie wir!
Die Geburt der Königin
Treffenderweise am Valentinstag im Jahr 2012 erblickte Julia das Licht der Welt, und zwar am Massachusetts Institute for Technology (MIT). Ins Leben gerufen wurde sie von den dort forschenden Wissenschaftlern und erklärten Nerds Jeff Bezanson, Stefan Karpinski, Viral B. Shah und Alan Edelman, und das aus dem einfachen und triftigen Grund, die eigene Arbeit noch angenehmer zu machen:
We are greedy: we want more. We want a language that’s open source, with a liberal license. We want the speed of C with the dynamism of Ruby. We want a language that's homoiconic, with true macros like Lisp, but with obvious, familiar mathematical notation like Matlab. We want something as usable for general programming as Python, as easy for statistics as R, as natural for string processing as Perl, as powerful for linear algebra as Matlab, as good at gluing programs together as the shell. Something that is dirt simple to learn, yet keeps the most serious hackers happy. We want it interactive and we want it compiled.
Why we created Julia
Und wie das eben manchmal so läuft: Im Handumdrehen wird aus so einer intern entwickelten, aber mittels Open Source allen zugänglich gemachte Technologie eine schnell immer besser werdende General Purpose Language, die sich zunehmender Beliebtheit erfreut.
Nicht umsonst! Denn Julia macht sowohl die Interaktion zwischen Mensch und Maschine unfassbar geschmeidig als auch die Kollaboration zwischen Menschen so einfach, kompatibel und effizient wie nie zuvor. Julia ist eine Allzwecksprache, die sich wie eine Skriptsprache anfühlt. Aktuell setzt sie sich besonders in der Wissenschaft durch, wo es darum geht, interdisziplinär an emergenten Herausforderungen wie etwa der Klimakrise zu arbeiten und dabei eine große Menge an Daten zu verarbeiten.
Heterogene Communities können gemeinsam und auf unterschiedlichste Weise an ein und derselben Problemstellung feilen. Ihre Composability prädestiniert die Sprache für die Zusammenarbeit zwischen Vertreter:innen verschiedenen Disziplinen wie der Mathematik, der Chemie, der Biologie usw.
Du hast ein intelligentes Kommandozeilenprogramm namens REPL (read-eval-print-loop), das Code direkt interaktiv ausführen kann. Dabei kann Julia auch mit mathematischen Symbolen und sogar Emojis umgehen, wie dieses einfache Beispiel zur Berechnung einer Kreisfläche zeigt:
# Funktion zur Berechnung der Fläche eines Kreises
function berechne_kreisflaeche(radius)
π * radius^2 # π ist das mathematische Pi-Symbol
end
# Hauptprogramm
function main()
radius = 5.0
flaeche = berechne_kreisflaeche(radius)
println("Die Fläche des Kreises mit Radius $radius beträgt $flaeche Quadrat Einheiten. 🚀")
end
# Hauptprogramm aufrufen
main()
Ein integrierter Paketmanager macht die Installation von Packages – Programmbibliotheken mit Git-Repository – zum Piece of Cake. Anders als die meisten anderen Sprachen nutzt Julia einen Just-in-time- oder JIT-Compiler, der den Quellcode über ein LLVM-Framework in Maschinencode übersetzt, bevor er ihn laufen lässt. Das sorgt für die hohe Geschwindigkeit und Top-Performanz.
Julia funktioniert nach dem Multiple-Dispatch-Muster. Das heißt, dass eine Funktion abhängig von den Input-Parametern mehrere Methoden oder Implementationen haben kann. Diese können denselben Namen tragen, aber unterschiedliche Argumente beinhalten, die Julia dabei helfen, beim Aufruf automatisch die passendste Funktion auszuwählen.
Außerdem kann Julia mehrere Funktionen ("Tasks") parallel ausführen. Die Syntax dafür ist einfach und intuitiv. Mit "pmap" wendest Du eine Funktion parallel auf verschiedene Eingabewerte an, zum Beispiel
result = pmap(x -> x^2, [1, 2, 3, 4, 5])
Besonders bei großen Datenmengen profitierst Du von der Datenparallelität, die Dir erlaubt, Operationen auf verschiedenen Teilen von Daten parallel auszuführen. Dank des Shared-Memory-Modells kannst Du einfach auf gemeinsame Daten zugreifen, was die Kommunikation zwischen den Threads genauso verbessert wie den daraus resultierenden Einsatz von Ressourcen. Anhand von Distributed Computing, also verteilten Berechnungen über mehrere Rechner hinweg, setzt Du der Kollaboration die Krone auf.
Julia ist frei unter der Open-Source-Lizenz des MIT erhältlich und ohne Weiteres auf Linux, Windows und Mac nutzbar. Laut Homepage gibt es Stand 2023 ca. 40 Millionen Downloads weltweit, Tendenz steigend. Schauen wir uns nun mal konkret an, für welche Anwendungsfälle Julia so taugt!
Möglichkeiten mit Julia
General Purpose Programming
Mithilfe von Julia kannst Du komplette Anwendungen bauen und Daten aus den verschiedensten Quellen ziehen. Du kannst gemeinsam mit allen Kollaborierenden Bibliotheken und ausführbare Dateien erstellen und nutzen und das Ganze entweder auf einem Webserver oder eingebetteten Geräten bereitstellen. Julia verfügt über eine leistungsstarke Shell-Integration und besitzt zahlreiche Schnittstellen für Fremdfunktionen in Sprachen wie C, C++, Fortran, Python, R, Java, Matlab und vielen mehr. Außerdem kannst Du Julia smooth in andere Programme einbetten.
Statistische Berechnungen
Der Performanz-Fokus von Julia macht die Sprache perfekt für schnelle numerische Berechnungen, die für statistische Analysen von Bedeutung sind. Das Coole ist, dass Du statistische Modelle und Algorithmen intuitiv implementieren und leicht zwischen verschiedenen Datentypen wechseln kannst. Natürlich gibt es umfangreiche Standardbibs, aus denen Du schöpfen kannst, zum Beispiel Statistics.jl oder HypothesisTests.jl. Weil Julia nahtlos mit anderen Sprachen wie Python, R oder Matlab integrierbar ist, hast Du auch auf deren Bibliotheken einfachen Zugriff. Die rege Julia-Fangemeinde entwickelt am laufenden Band neue Pakete und Werkzeuge, die noch besser als die Vorgängerversionen sind. Deshalb mausert sich Julia zu DER Sprache sowohl für die Datenexploration als auch für die Implementierung fortschrittlicher statischer Modelle.
Datenvisualisierung
Bei der anschließenden Visualisierung von Daten muss man normalerweise abwägen – zwischen Funktionsumfang und Einfachheit, Geschwindigkeit und Schönheit, einer statischen oder einer dynamischen Schnittstelle. Dank Julias Visualisierungsschnittstelle Plots.jl lassen sich komplexe Grafiken und anspruchsvolle Animationenwunderbar umsetzen. Plots.jl unterstützt viele Diagrammtypen, zum Beispiel:
# Linienplot
plot([1, 2, 3, 4], [10, 15, 13, 17], label="Datenreihe 1")
# Balkendiagramm
bar(["A", "B", "C"], [5, 10, 8], label="Datenreihe 1")
# Punktdiagramm
scatter([1, 2, 3, 4], [10, 15, 13, 17], label="Datenreihe 1")
Deine Diagramme kannst Du mithilfe verschiedener Parameter anpassen, mehrere Diagramme in einem Bild kombinieren und sie als Bilddateien speichern.
Auch animierte Grafiken sind für Julia kein Problem. Damit kannst Du zum Beispiel die Veränderungen von Daten über den Lauf der Zeit herstellen, was besonders im Zusammenhang mit der Klimaforschung, aber auch jeder anderen Art der Progression wichtig ist. Dafür musst Du einfach nur das Gif-Makro anwenden.
Data Science und Machine Learning
Julia ist auch bei Data Scientists hoch im Kurs. Dank DataFrames.jl kannst Du mit umfangreichen Datensätzen in tabellarischer Form arbeiten, wobei es kaum eine Datenbank gibt, die Dir hier Probleme macht. Du kannst Infos aus den verschiedensten Quellen einlesen, filtern, transformieren und analysieren und statistische Analysen durchführen. Auch für Machine Learning bietet Julias "MLJ"-Pakt eine weitläufige Sammlung von Algorithmen und Spezialwerkzeugen. Mit Query.jl ist obendrein Datenmanipulation möglich.
In unsere Arme, Julia!
Also, wenn Dich das alles null reizt, dann wissen wir auch nicht weiter. Falls es Dir so geht wie uns und Du Lust bekommst, Julia auszuprobieren, schau unbedingt mal auf der Website vorbei. Dort kannst Du Dir nicht nur die Sprache holen, sondern erfährst alles über die Entstehung und die zahlreichen Anwendungsmöglichkeiten und Optimierungen. Und ruckizucki bist Du im Bann, wirst Teil der begeisterten Community und trägst vielleicht bald schon selbst mit Deinen Skills für eine bessere Welt ein.
Denn Julia ist einfach
-
schnell
-
dynamisch
-
reproduzierbar
-
kompatibel
-
allgemein und
-
quelloffen
Und wir sind
-
ein bisschen in love, falls es Dir noch nicht aufgefallen ist. Du auch?
- Julia ist eine relativ neue und sehr vielversprechende Hochleistungs-Programmiersprache, die recht einfach zu erlernen und vielseitig einsetzbar ist.
- Aufgrund ihrer hohen Geschwindigkeit und Flexibilität eignet sie sich besonders für die Verarbeitung großer Datenmengen, statistische Berechnungen und Datenvisualisierungen.
- Auch im Bereich Machine Learning und allgemein der interdisziplinären wissenschaftlichen Zusammenarbeit an den Herausforderungen unserer Zeit wie der globalen Klimakrise ist Julia auf dem Vormarsch.
- Besonderheiten sind neben der einfachen Syntax, der Performance und der hohen Composability u.a. der JIT-Compiler, Multiple Dispatch und die parallele Ausführungen mehrerer Tasks.