Scala Native 0.3.8 nutzt Immix als Standard-Garbage-Collector

Aus Performancegründen hat sich das Entwicklerteam von Scala Native entschlossen, den ehemaligen Garbage Collector Boehm durch Immix abzulösen.

In Pocket speichern vorlesen Druckansicht
JVM-Sprache: Scala Native bringt AOT-Compiler auf LLVM-Basis
Lesezeit: 2 Min.
Von
  • Matthias Parbel

Als optimierter Ahead-of-time-Compiler (AOT) auf Basis der Compiler-Infrastruktur LLVM liegt Scala Native nun in der Version 0.3.8 vor. Das Entwicklerteam der Programmiersprache hat sich beim neuesten Release vornehmlich auf Leistungsverbesserungen im Library-Code konzentriert – dabei aber stets die Binärkompatibilität zu den vorangegangenen Releases seit Scala Native 0.3 sichergestellt.

Unter den Fehlerbereinigungen und Optimierungen in Scala Native 0.3.8 ist insbesondere der neue standardmäßige Garbage Collector Immix hervorzuheben. Bis zur erstmaligen Einführung von Immix in Version 0.3 kam für die Garbage Collection primär Boehm zum Einsatz. Im Rahmen von Tests erhobene Benchmarkergebnisse zeigen deutliche Performancevorteile von Immix gegenüber Boehm. Daher hat sich das Entwicklerteam entschlossen, Immix als Standard-Garbage-Collector festzulegen. Anwendern steht Boehm aber bei Bedarf weiterhin zur Verfügung.

Unter den weiteren Neuerungen finden sich unter anderen Leistungsverbesserungen im Bereich von File-I/O-Operationen auf der Ebene der NIO-Library. Die in Scala Native 0.3.7 eingeführte Build-Tool-API haben die Entwickler dahingehend erweitert, dass nun auch – zumindest vorläufige – Unterstützung für das Durchführen von Unit-Tests vorhanden ist, wenn die Scala-Native-Toolchain mit Build-Tools anderer Anbieter integriert werden soll.

Eine grundlegende Optimierung, die allerdings noch nicht in Scala Native 0.3.8 eingeflossen ist, betrifft die Compiler-Infrastruktur LLVM. Die Toolchain für den AOT-Compiler liefert zwar hochwertigen nativen Code, die Scala-Entwickler machen aber auch Schwachpunkte aus. Aufgrund fehlender Unterstützung für objektorientierte Funktionen wie Klassen, Allokationen oder Instanzenchecks bleibe LLVM bisweilen auf zu niedrigem Niveau für Scala. Um den anspruchsvolleren Funktionen der Programmiersprache gerecht zu werden, arbeitet das Entwicklerteam daher an einem eigenen Optimierer namens Interflow, der auf Scalas' Native Intermediate Representation (NIR) aufsetzen soll. Erste Messergebnisse deuten durch den Einsatz von Interflow Leistungssteigerungen um den Faktor 3 an.

Einen vollständigen Überblick aller Neuerungen und Fehlerbereinigungen in Scala Native 0.3.8 halten das Changelog sowie die Release Notes auf GitHub parat. (map)