Programmiersprache: Julia 1.7 baut die Multithreading-Fähigkeiten aus

Die funktionsorientierte Sprache hat zahlreiche Änderungen im Gepäck: Neu sind der Zufallszahlengenerator, der Package Manager und das Manifest-Format.

Lesezeit: 3 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 67 Beiträge
Von
  • Matthias Parbel

Das Entwicklerteam hinter der Programmiersprache Julia hat Version 1.7 vorgelegt. Das neueste Release der funktionsorientierten Sprache setzt den Ausbau der Multithreading-Fähigkeiten von Julia konsequent fort, bietet aber darüber hinaus noch eine Reihe weiterer Neuigkeiten. Laut Blogbeitrag zur Ankündigung von Julia 1.7 kommen unter anderem ein neuer Zufallszahlengenerator (Random Number Generator), ein überarbeiteter Package Manager sowie ein neues Manifest-Format zum Einsatz.

Verbessertes Multithreading zählt zu den wichtigsten Zielen, an denen das Julia-Entwicklerteam bereits seit einigen Versionen verstärkt arbeitet. Mit dem Stabilisieren der Multithreading APIs in Julia 1.5 wurde ein wichtiger Meilenstein erreicht. Seither hat das Team sich darum gekümmert, zahlreiche Race Conditions in der Runtime anzugehen und Synchronisationsfehler zu beheben. Entwicklerinnen und Entwickler erhalten zudem mehr Möglichkeiten, Arbeitslasten in ihren Programmen auf mehrere Threads zu verteilen.

Dabei sollen vor allem auch, wie auf der letzten JuliaCon angekündigt, Atomics helfen. Über @atomic-Makros und die damit verbundenen generischen Funktionen stehen laut Blogbeitrag effizientere Bausteine für die Arbeit mit Threads parat. Zu den ersten Packages, die bereits angepasst wurden, zählen JuliaConcurrent/ConcurrentCollections.jl, JuliaActors/Actors.jl sowie tkf/ThreadsX.jl. Die neuen Optionen fasst das nachfolgende Video zusammen.

Jameson Nash gibt einen Einblick in die neuen Atomic-Felder in Julia.

Thread-freundlicher soll auch der neue Zufallszahlengenerator aus der Xoshiro256-RNG-Familie arbeiten. Anders als der bisher standardmäßig genutzte Mersenne-Twister-Algorithmus eröffnet der neue RNG die Möglichkeit, in jeden Task einen Zustand einzufügen und ihn beim Erstellen neuer Tasks zu teilen. Dadurch hängen die Zufallszahlen nur von der Struktur des Task-Spawnings eines Programms ab, nicht aber vom Zeitplan der parallelen Ausführung. Der neue RNG verspricht nach Einschätzung des Julia-Teams daher nicht nur mehr Tempo, sondern hilft auch, den Zufallszahlenfluss in Multithreading-Programmen reproduzierbarer zu machen.

Neu in Version 1.7 ist das Manifest-Format, in dem der Package Manager (Pkg) sämtliche Dependencies in einer TOML-Datei festhält, sobald ein neues Paket angelegt wird. Ein übergreifender Einsatz der Manifeste in verschiedenen Julia-Versionen war bisher allerdings nicht angeraten, zumal der Package Manager auch keine Warnung bei potenziellen Abhängigkeitsproblemen lieferte. Mit dem neuen Format lassen sich nun alle Abhängigkeiten unter einem gemeinsamen [deps]-Schlüssel zusammenfassen. Dadurch wird der globale Namespace frei, sodass ein julia_version-Eintrag sowie künftig auch weitere nützliche Daten hinzugefügt werden können. Das neue Manifest-Format soll rückwirkend ab Julia 1.6.2 verwendbar sein.

Lesen Sie auch

Mehr Details zu den zahlreichen Neuerungen in Julia 1.7 fasst der Blogbeitrag zur Freigabe des neuen Releasee zusammen. Die neue Version der Programmiersprache verspricht unter anderem Verbesserungen bei der Typinferenz sowie höhere Performance bei der Arbeit mit Registries in verteilten Dateisystemen und unter Windows. Julia 1.7 ist darüber hinaus die erste Sprachversion, die nativ auf Apples M1-Systemen läuft. Eine komplette Übersicht aller Änderungen findet sich im GitHub-Repository. Die Rolle des Long-term-Support-Release bleibt weiterhin der 1.6.x-Serie vorbehalten – konkret ist Julia 1.6.4 das nächste aktuelle LTS-Release.

(map)