Warum Julia ?

Die Open-Source-Programmiersprache Julia wurde 2012 ins Leben gerufen und die erste stabile Version erschien 2018 (zum Vergleich: Python wurde 1991 gestartet und Python 2 im Jahr 2000 veröffentlicht).

Julia wurde entwickelt, um das Zwei-Sprachen-Problem der der Programmierung zu lösen. Auch heute noch ist das Problem weit verbreitet.

Das Zwei-Sprachen-Problem

Bevor Julia aufkam, konnte man die Programmiersprachen in solche unterteilen, die rasend schnell sind, aber einen erheblichen Zeitaufwand beim Programmieren erfordern (C, Fortran, C++, Rust), und solche, mit denen man schnell Prototypen bauen kann, welche jedoch nur langsam laufen (R, Python, Matlab).

Manchmal gibt es eine klare Priorität für schnelle Laufzeit oder schnelle Entwicklung, aber gerade in der Data Science braucht man beides:

  • Sie brauchen Geschwindigkeit, weil Sie mit potentiell großen Datenmengen arbeiten.
  • Und Sie brauchen eine einfach zu verwendende Sprache, weil Data Science Algorithmen normalerweise von Mathematikern, Statistikern, Kognitionswissenschaftlern, Physikern, … und nur selten von vollwertigen Programmierern beherrscht werden.

Julia wurde von Grund auf entwickelt, um dieses Problem zu lösen.

40x weniger Energieverbrauch als Python

Pereira et. al.(2021) haben Programmiersprachen nach Energieeffizienz getestet. original ranking

In der Originalarbeit war Julia nicht gelistet, doch in der Zusatzbewertung für funktionale Sprachen. extra material

Die Ergebnisse sind sehr beeindruckend.

  • Julia ist die zweitbeste funktionale Sprache in Energieeffizienz (an erster Stelle steht Rust)
  • Unter allen getesteten Sprachen benötigt Julia etwas weniger Energie als Java und etwa 40x weniger Energie als Python.

Eine große Leistung, insbesondere da Julia ebenso dynamisch typisiert ist wie Python/R.


Hochleistungssprache

Julia ist schnell. So schnell, dass Sie, wenn Sie etwas Langsames finden, es als Fehler melden können. Die Sprache verpflichtet sich konsquent zu hoher Performanz.

micro-benchmarks

Die obigen offiziellen Micro-Benchmarks zeigen sehr gut, dass die Geschwindigkeit von Julia mit der von C und Rust vergleichbar ist. Besonders interessant ist der rosa Punkt beim Vergleich mit Python. Er zeigt den matrix_statistics-Benchmark an und obwohl die Python-Implementierung optimierte C-Hilfsprogramme wie Numpy und OpenBLAS verwendet, ist sie um eine Größenordnung langsamer als die Julia-Version. Für weitere Details folgen Sie bitte dem Zitatlink.

Hier ist eine beispielhafte User Story eines Teams, das bereits über Monate Python optimiert hat, nur um zu sehen, dass Julia noch so viel schneller ist:

In ein paar Tagen Arbeit konnte ich mit Julia zum ersten Mal einen Prototyp erstellen, der 14 Mal schneller war als der stark optimierte Python-Code. Dafür gibt es viele Gründe, aber einige der Hauptgründe waren Julias leichtgewichtiges Threading-Modell und die Tatsache, dass die Profilerstellung in Julia wesentlich einfacher ist, da es sich um “Julia von unten nach oben” handelt. Ein paar Wochen später ist der Code in Produktion und hat sich um das ~2fache beschleunigt, insgesamt also um das ~30fache. Soweit ich das beurteilen kann, lassen sich die Verbesserungen, die ich vorgenommen habe, in Python derzeit nicht wiederholen. Die Tatsache, dass wir mehr als 200 Expertenstunden auf die Python-Version verwendet haben, im Vergleich zu 10 Stunden eines Anfängers auf Julia, sagt auch viel über die Erfahrung der Entwickler aus.

Quelle: Julia Forum, englisches Original, übersetzt mit DeepL

Ein weiterer Vergleich zwischen Julia und Python zeigt noch wesentlich höhere Beschleunigungen.

Entwickler:in freundlich

Eine Julia-Lösung ist Julia “von Grund auf”. Es gibt keine Barriere, bei der Entwickler zu einer anderen Sprache wechseln und die beiden Sprachen überbrücken müssen.

Dadurch wird die Entwicklung massiv vereinfacht. Lösungen werden schneller erstellt, Probleme werden leichter untersucht, Leistungsengpässe werden zuverlässiger gefunden und Wissen wird besser geteilt. Auch neue Teammitglieder sind viel schneller an Bord.

Der Vorteil von Julia ist, dass gute Leistung nicht auf eine kleine Teilmenge von “eingebauten” Typen und Operationen beschränkt ist, und man kann hochgradig typgenerischen Code schreiben, der mit beliebigen benutzerdefinierten Typen arbeitet und dabei schnell und speichereffizient bleibt. Typen in Sprachen wie Python liefern dem Compiler einfach nicht genug Informationen.

Quelle: Julia Dokumentation, englisches Original, übersetzt mit DeepL

Aus Sicht eines Entwicklers gibt es drei Hauptaspekte von Julia:

  • Sie können generische Funktionen schreiben, die für alle Typen funktionieren.
  • Sie können Funktionen spezialisieren, falls Sie eine effizientere Implementierung für Ihre konkreten Typen kennen.
  • Wenn Sie Funktionalität zwischen verschiedenen Typen wiederverwenden wollen, geht das nur über generische Funktionen.

Dies ist ein beeindruckend einfaches Design, das durch Julias ausgereifte Just-in-Time-Kompilierung (JIT) zu Performanz aufblüht. Für den Entwickler bedeutet dies, dass er sich nicht um die Leistung kümmern muss, bis er sie wirklich braucht, und dann kann er einen winzigen Teil seines Systems spezialisieren, während der Rest wiederverwendbar ist.

Gute Wartbarkeit

Alles ist kombinierbar

  • Sie möchten Ihren Zahlen physische Einheiten hinzufügen? Importieren Sie einfach das Paket Unitful.jl und fügen Sie sie hinzu.
  • Sie wollen Fehlerspannen für Ihre Ergebnisse? Importieren Sie einfach Measurements.jl und fügen Sie sie hinzu.
  • Es gibt noch viele weitere wiederverwendbare Komponenten im Julia-Ökosystem, die in anderen Sprachen so nicht möglich wären.

Alle von Ihnen erstellten Funktionen werden weiterhin funktionieren, nichts muss neu geschrieben werden.

Es wird auch Ihr eigenes Projekt vereinfachen, und Einfachheit ist der wichtigste Aspekt bei der Softwareentwicklung. Künftige Anpassungen können leicht hinzugefügt werden, ohne dass Sie befürchten müssen, dass Sie eine umfangreiche Neuprogrammierung vornehmen müssen. Die Wartung wird vereinfacht, und Ihr Projekt wird nahtlos Wechsel innerhalb Ihres Entwicklerteams überleben.


Wie macht Julia das?

Eine solche Kompositionsfähigkeit ist beispiellos und ein einzigartiges Merkmal des Programmierparadigmas von Julia. Julia ist weder eine objektorientierte, noch eine funktionale Sprache. Stattdessen verfügt sie über einen flexiblen Funktionsüberlade-Mechanismus, auch Multimethode genannt.

Ein einfacher Weg, diese Unterscheidung zu verstehen, ist, an ein Kochbuch zu denken. Die verschiedenen Programmierparadigmen geben unterschiedliche Anleitungen, wie die Rezepte zu strukturieren sind.

Objektorientierung
  1. 🥦 Brokkoli

    1. Kochen
    2. Dünsten
  2. 🥕 Karotten

    1. Frittieren
    2. Kochen

einfaches Hinzufügen einer neuen Zutat durch Erstellen eines neuen Kapitels                 

sehr schwierig, eine neue Funktion hinzuzufügen — alle Kapitel müssten neu geschrieben werden

Funktional
  1. Kochen

    1. 🥦 Brokkoli
    2. 🥕 Karotten
  2. Frittieren

    1. 🥕 Karotten
    2. 🧅 Zwiebeln

sehr schwierig, eine neue Zutat hinzuzufügen — alle Kapitel müssten neu geschrieben werden

einfaches Hinzufügen einer neuen Kochmethode durch Erstellen eines neuen Kapitels

Multimethode
  1. Brokkoli 🥦 Dünsten
  2. Karotten 🥕 Kochen
  3. Karotten 🥕 Frittieren
  4. Zwiebeln 🧅 Frittieren

einfaches Hinzufügen einer neuen Zutat durch Erstellen eines neuen Kapitels                 

einfaches Hinzufügen einer neuen Garmethode durch Erstellen eines neuen Kapitels                                 

Der Einsatz von Multimethoden gibt nicht vor, wie Sie den eigenen Code anordnen. Dies ermöglicht volle Flexibilität, ohne dass bereits vorhandener Code umgeschrieben werden muss.

Auch wenn es so aussieht, als ob wir die Organisation komplett verloren hätten, gewinnen wir sie in der Programmierung dank der Type-Hierarchien zurück. Brokkoli und Karotten wären Gemüsesorten, Linsen und Bohnen sind Hülsenfrüchte, Kochen und Dünsten könnten Heißwasserzubereitungen sein.

Mehr Details zur Kochbuch-Analogie finden Sie in diesem Blogbeitrag.

Gebaut für Data Science

Julia wurde konzipiert für die Datenwissenschaft und die angewandte Mathematik im Allgemeinen und findet bereits heute in diesem Feld eine weite Verbreitung.

Fundament
Mathematik leicht in Code übertragen
beliebige Datenformate lesen
hervorragende Werkzeuge zur graphischen Darstellung von Daten
Industrie
produktionsreife Datenpipelines aufbauen
Verbindung zu beliebigen Datenbanken
Einsatz von Big Data sowie Echtzeit
Wissenschaft
maschinelles Lernen zu jedem Teil hinzufügen
Differentialgleichungslöser
& Optimierungsbibliotheken
Verwendung vortrainierte Modelle für Text, Bilder, Ton, DNA, …
Mehr
GPU-Beschleunigung
Wahrscheinlichkeiten und Fehlerschätzungen verwenden
Unterstützung für Ihr spezielles Gebiet erhalten

Ob Sie im Finanzsektor, in der Energiebranche, der Chemie, der Biologie, der Medizin, dem Ingenieurwesen, der Quanteninformatik, der Astronomie oder vielen anderen Bereichen tätig sind: Es gibt bereits andere, die die nächsten Best-Practice-Algorithmen für Ihre Branche entwickelt haben.

Offen für einen Austausch?
Email hello@jolin.io oder Telefon/Whatsapp/Signal
+49 152 2406 7803