Neues in Scala 2.9

Process & Co.

Eine weitere kleine, aber nützliche Neuerung ist aus dem Build-Werkzeug sbt [3] in die Standardbibliothek von Scala eingeflossen: das Process-Framework. Es liegt im Package scala.sys.process und vereinfacht das Starten und Verwalten von anderen Programmen.

Das Object Process hat eine Vielzahl an apply-Methoden, die als Startpunkt beim Erzeugen von Prozessen dienen und Instanzen von ProcessBuilder zurückliefern. Auf diesen kann man dann sehr einfach den Prozess starten und mit ihm interagieren.

Die folgende Zeile gibt z. B. die Version der installierten JRE aus (sofern sie im PATH liegt): val retVal: Int = Process („java -version“) ! . Das Ausrufezeichen am Ende der Zeile ist der Operator, der einen Prozess startet, dann blockiert, bis er abgeschlossen ist, und schließlich seinen Return-Code zurückliefert.

Wenn man sich für die Ausgaben nach stdout interessiert, kann man stattdessen ein doppeltes Ausrufezeichen schreiben (Achtung! Der gestartete Prozess ist spezifisch für Windows): val output: String = (Process („cmd /c echo Hallo“) !!).

Die Variable output enthält anschließend den String ‚Hallo‘, den das Programm ausgegeben hat. Diese Variante, ein Programm zu starten, wirft eine Exception, wenn der Return-Code eine andere Zahl als Null ist.

Das Process-Framework enthält zusätzlich die Möglichkeit, das Working Directory und Umgebungsvariablen des neu gestarteten Prozesses zu kontrollieren. Außerdem kann man den Output als zeilenweisen Stream erhalten, mehrere Prozesse durch Pipes verbinden oder flexible Hooks für die Verarbeitung von stdout und stderr registrieren – und das alles mit einem sehr viel handlicheren API als die entsprechende Standard-Java-Bibliothek.

Falls man ein Java-Programm schreibt, das andere Prozesse startet, ist die Process-Bibliothek für sich genommen ein guter Grund, zumindest diesen Teil des Systems in Scala zu schreiben. Prozessbehandlung ist zwar ein kleineres Thema als parallele Collections oder dynamische Methodenaufrufe, aber die Umsetzung ist so gut gelungen, dass sie hier nicht unerwähnt bleiben sollte.

Fazit

Mit Scala 2.9 erreicht die Integration in Eclipse einen Reifegrad, der auch Neulingen einen sanften Einstieg ermöglicht. Die parallelen Collections bieten ein leicht benutzbares API, um selektiv auch viele verfügbare Cores zu nutzen, was zunehmend an Bedeutung gewinnt.

Der Trait Dynamic ermöglicht nahtlose Aufrufe in dynamische JVM-basierte Sprachen wie JRuby. Außerdem bietet er viele der Möglichkeiten in Scala, die bisher dynamischen Sprachen vorbehalten waren. Und mit dem Process-Framework hat Scala jetzt eine kleine aber sehr elegante und leistungsfähige Bibliothek zum Starten von und Interagieren mit anderen Prozessen.

Insgesamt ist das Release 2.9 eher Bugfixes und Verbesserungen im Tooling gewidmet als groben Aufräum- und Umbauarbeiten. Trotzdem gibt es eine Reihe von schönen neuen Bibliotheken.

Arno Haase ist selbstständiger Softwarearchitekt aus Braunschweig. Neben seiner Beratungstätigkeit krempelt er gerne die Ärmel hoch und schreibt selbst Software, sowohl in Kundenprojekten als auch Open Source. Er ist eines der Gründungsmitglieder von se-radio.net, dem Software Engineering Podcast. Außerdem spricht er regelmäßig auf einschlägigen Konferenzen und ist Autor diverser Artikel und Patterns sowie Koautor von Büchern über JPA und modellgetriebene Softwareentwicklung.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.