Programmiersprache OCaml 5 hat eine Runtime für Multicore-Programme

Die neue Hauptversion führt mit Shared Memory Parallelism und Effect Handlers Konzepte für parallele und nebenläufige Programmierung ein.

In Pocket speichern vorlesen Druckansicht 5 Kommentare lesen

(Bild: Shutterstock)

Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Die Programmiersprache OCaml ist in Version 5.0 erschienen. Das Release zielt auf Multicore mit Konzepten für die parallele Ausführung von Code und Concurrency. Dazu musste das Team die Runtime von Grund auf neu schreiben.

Insgesamt befindet sich der Multicore-Support seit acht Jahren in Entwicklung, und Version 4.10 hatte bereits einige vorbereitende Maßnahmen an Bord. Wegen der Multicore-Umstellung ist OCaml 5.0.0 jedoch laut der Ankündigung eine experimentellere Version als bisherige OCaml-Releases. Der native Compiler bedient ausschließlich x86-64- und arm64-Architekturen. Hinsichtlich der Betriebssysteme deckt das Release Linux, macOS, BSD und Mingw-w64 auf Windows ab.

Die beiden wesentlichen Neuerungen sind Shared Memory Parallelism (SMP) und Effect Handlers. Letzteres Konzept dient der nebenläufigen und ersteres der parallelen Programmierung. OCaml 5 unterscheidet zwischen Concurrency als überlappende Ausführung nebenläufiger Tasks und Parallelism als gleichzeitige Ausführung paralleler Tasks.

OCaml setzt für parallele Programmierung auf Domains. Das Modul Domain erlaubt das Erstellen und Verwalten der Domänen. Eine mit spawn erzeugte Domäne läuft parallel zu der aufrufenden. Dabei nimmt jede einen eigenen Betriebssystem-Thread ein. Schlankere Ansätze zum Verwalten paralleler Prozesse lagert OCaml in Libraries wie Domainslib aus. Die einzelnen Domänen können auf einen gemeinsamen Speicher zugreifen.

Der Zugriff auf unveränderliche Werte (Immutables) ist dabei frei möglich und ohne Risiken. OCaml bietet einige Mechanismen, die Data Races für veränderliche Werte im gemeinsamen Speicher verhindern sollen. Mutexes und Semaphoren ermöglichen die blockierende Synchronisation, und Atomics die nicht blockierende.

Für die nebenläufige Programmierung führt OCaml 5.0.0 Effect-Handler ein, die derzeit noch als experimentell gekennzeichnet sind. Die Handler ermöglichen das Anlegen benutzerdefinierter Effekte. Die Dokumentation bezeichnet sie als Generalisierung von Exception-Handlers. Das Konzept trennt die effektvollen Operationen von der eigentlichen Implementierung.

Das Konzept ermöglicht schlanke, benutzerdefinierte Threads, die im Gegensatz zu Domains nicht 1:1 den Betriebssystems-Threads entsprechen. Details und Beispiele zu den Effects finden sich in der OCaml-Dokumentation.

OCaml 5.0.0 ist laut der offiziellen Ankündigung weitgehend rückwärtskompatibel, sodass jedes OCaml-4-Programm mit dem aktuellen Release laufen sollte. Die Ausnahmen, die die Regel bestätigen, sind einige Änderungen an der internen Runtime-API. Außerdem entfernt das Release seit längerem als überholt (deprecated) gekennzeichnete Funktionen und Module.

Allzwecksprache mit Wurzeln in der Meta Language

OCaml erschien erstmals 1996. Die Programmiersprache hat ihre Wurzeln in Caml, das wiederum auf der Meta Language (ML) aufbaut. Letzteres bezieht sich nicht etwa auf die Metaprogrammierung, sondern bezeichnet eine Familie funktionaler Programmiersprachen mit zusätzlichen imperativen Konstrukten, zu der auch Standard ML und Microsofts F# gehören. OCaml erweitert Caml um einen objektorientierten Layer.

Die Open-Source-Sprache wurde am Institut national de recherche en informatique et en automatique (INRIA) entwickelt. Federführend für die Entwicklung ist Xavier Leroy. Aufgrund der akademischen Wurzeln ist sie in diesem Umfeld besonders stark, sie zielt aber auch auf den Einsatz in Business-Anwendungen. Namhafte Unternehmen, die OCaml nutzen, sind Facebook, Docker und Microsoft. Die offizielle Website bezeichnet OCaml als Allzwecksprache (General-Purpose Language).

Der OCaml-Compiler kann sowohl Bytecode als auch Maschinencode erzeugen. Letztere gilt für funktionale Sprachen als effizient, da der Compiler einige Optimierungen anwendet.

Weitere Neuerungen lassen sich der Ankündigung von OCaml 5.0.0 entnehmen. Das OCaml-Team wird für eine Übergangszeit zudem den OCaml-4.14-Zweig weiter pflegen und Bugfixes aus Version 5 dorthin zurückportieren; OCaml 4.14.1 ist derzeit als Release Candidate verfügbar. Im Laufe des nächsten Jahres sollen zudem Varianten für die Betriebssysteme und Architekturen erscheinen, die OCaml 4.14 abdeckt, aber Version 5 noch nicht.

(rme)