Apple ergänzt Linux-Support für die Multi-Plattform-Library Swift System

Die im Juni erstmals vorgestellte Library soll den Import von C-Interfaces überflüssig machen. Swift System liegt nun außerdem quelloffen vor.

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

Bereits zur Jahresmitte hatte Apple für seine Programmiersprache Swift das neue Modul-System angekündigt. Die für Multi-Plattform-Umgebungen ausgelegte Library Swift System soll das Importieren von häufig schwach typisierten System-Interfaces aus C überflüssig machen und so den Zugriff auf APIs anderer Betriebssysteme erleichtern. Dafür bietet Swift System ab sofort auch Unterstützung für Linux, und die Bibliothek steht als Open Source frei auf GitHub zur Verfügung.

Wie Michael Ilseman vom Swift-Standard-Library-Team bei Apple im betreffenden Blogbeitrag ausdrücklich betont, ist Swift System nicht als plattformübergreifende, sondern als Multi-Plattform-Bibliothek zu verstehen. Denn sie bietet lediglich auf die spezifischen Betriebssystemschnittstellen abgestimmte APIs und Verhaltensweisen, die sich für die jeweilige Plattform importieren lassen.

Das primäre Ziel von Swift System ist es offenbar, Entwicklerinnen und Entwickler beim Programmieren plattformübergreifender Bibliotheken und Anwendungen wie SwiftNIO oder dem Swift Package Manager unter die Arme zu greifen. Dabei entfällt zwar nicht die Notwendigkeit #if os()-Bedingungen zum Implementieren plattformübergreifender Abstraktionen zu nutzen, mit der System-Library soll es aber sicherer werden und sich die plattformspezifischen Teile leichter ausfüllen lassen.

So zeige beispielsweise der unter Unix und Linux übliche Systemaufruf open verschiedene Unzulänglichkeiten, um die in Swift gebotene Ausdrucksstärke und Typsicherheit auszuschöpfen. Unter anderen werden beim C-Import Datei-Beschreibungen, Optionen, Kommandos und andere Werte als schlichte Int32s-Typen übernommen. Dem soll Swift System nun idiomatische Interfaces entgegensetzen und dazu beispielsweise open als statische Funktion mit standardmäßigen Argumenten im FileDescriptor-Namensraum definieren.

extension FileDescriptor {
  /// Opens or creates a file for reading or writing.
  ///
  /// - Parameters:
  ///  - path: The location of the file to open.
  ///  - mode: The read and write access to use.
  ///  - options: The behavior for opening the file.
  ///  - permissions: The file permissions to use for created files.
  ///  - retryOnInterrupt: Whether to retry the open operation
  ///    if it throws `Errno.interrupted`.
  ///    The default is `true`.
  ///    Pass `false` to try only once and throw an error upon interruption.
  /// - Returns: A file descriptor for the open file
  ///
  /// The corresponding C function is `open`.
  public static func open(
    _ path: FilePath,
    _ mode: FileDescriptor.AccessMode,
     options: FileDescriptor.OpenOptions = FileDescriptor.OpenOptions(),
     permissions: FilePermissions? = nil,
     retryOnInterrupt: Bool = true
  ) throws -> FileDescriptor
}

Mit der offiziellen Unterstützung für Linux sei ein weiterer wichtiger Schritt in der Entwicklung der jetzt quelloffenen Library erfolgt, Swift System stecke aber nach wie vor in den Kinderschuhen. Das Team arbeite Ilseman zufolge mit Nachdruck am Support für Windows und wolle die Library zügig in den Swift Package Manager integrieren. Weitere Informationen zu Swift System finden sich im Blogbeitrag sowie auf GitHub, wo auch ein Package der Library bereitliegt.