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.

30x bis 300x schneller als Python

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.

Effizienteres Entwickeln

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:

  1. Sie k├Ânnen generische Funktionen schreiben, die f├╝r alle Typen funktionieren.
  2. Sie k├Ânnen Funktionen spezialisieren, falls Sie eine effizientere Implementierung f├╝r Ihre konkreten Typen kennen.
  3. 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.

Leichtere Wartung

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 kurzen Austausch?
Email hello@jolin.io oder Telefon/Whatsapp/Signal
+49 152 2406 7803