Programmiersprache Swift 5.8 bereitet den Weg zur nächste Hauptversion

Ein Compiler-Flag erlaubt in Swift den Einsatz kommender Funktionen, darunter neue Regeln für Regex-Literale, Closures und die Darstellung von Dateinamen.

In Pocket speichern vorlesen Druckansicht

(Bild: Paweł Kuźniar (unter der GFDL))

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

Apples quelloffene Programmiersprache Swift ist in Version 5.8 erschienen. Das Release bahnt den Weg zur nächsten Hauptversion: Ein neues Compiler-Flag erlaubt den Einsatz von Features, die sich noch in Arbeit befinden, darunter eine knappere Darstellung von Dateinamen und der verpflichtende Einsatz von any. Außerdem gibt es Ergänzungen für die Dokumentation mit Swift-DocC.

Die Arbeiten an Swift 6 laufen seit geraumer Zeit parallel zur Weiterentwicklung des 5.x-Zweigs. Die nächste Hauptversion soll einige grundsätzlichen Neuerungen enthalten, darunter erweiterte Funktionen bei der Nebenläufigkeit und ein Ownership-Modell. Ein Releasedatum ist noch nicht bekannt. Die Roadmap sieht mit Version 5.9 mindestens noch ein Release im aktuellen Zweig vor.

Swift 5.8 vereinfacht den Einsatz künftiger Funktionen in eigenen Projekten über das neue Compiler-Flag -enable-upcoming-feature. Derzeit sind vier Swift Evolution Proposals (SE) als Vorschau integriert: Concise Magic File Names (SE-0274), Forward-Scan Matching for Trailing Closures (SE-0286), Introduce Existential Any (SE-0335) und Regex Literals (SE-0354).

In Swift 5.8 schaltet beispielsweise -enable-upcoming-feature ConciseMagicFile die neue Auflösung von Dateinamen frei, nach der #file nicht mehr als den vollen Pfad einer Quelldatei wiedergibt, sondern sie in der Form Modulname/Dateiname auflöst. Der neu eingeführte Ausdruck #filePath gibt wie bisher den vollständigen Pfad aus. Für API-Aufrufe wie fatalError, die #file verwenden, gilt automatisch die neue Konvention. Folgendes Beispiel aus dem Proposal zeigt den Unterschied zwischen dem vollem Pfad und der neuen Ausgabe:

print(#file)
print(#filePath)
fatalError("Something bad happened!")

// erzeugt die Ausgabe
MagicFile/0274-magic-file.swift
/Users/becca/Desktop/0274-magic-file.swift
Fatal error: Something bad happened!: \
  file MagicFile/0274-magic-file.swift, line 3

Swift 5.7 hat die regulären Ausdrücke maßgeblich erweitert und dabei Regex-Literale eingeführt. Das Feature-Flag BareSlashRegexLiterals bietet eine kleine Ergänzung: In Swift 5.x sind Literale in einfachen Schrägstrichen (/ ... /) nicht erlaubt, da sie zu Inkompatibilitäten führen können. Die Literale müssen daher die Form (#/ ... /#) haben. Das Feature-Flag hebt die Beschränkung ebenso auf wie das kommende Swift 6.

Das Schlüsselwort any für existenzielle Datentypen, also beliebige Typen für ein bestimmtes Protokoll, hat bereits Swift 5.6 eingeführt, zunächst optional. Mit Swift 6 wird das explizite Auszeichnen verpflichtend, und das Feature-Flag ExistentialAny nimmt das Verhalten vorweg. Ein existenzieller Typ ohne Auszeichnung erzeugt damit einen Fehler:

protocol P {}
protocol Q {}
struct S: P, Q {}

let p1: P = S() // error
let p2: any P = S() // okay

let pq1: P & Q = S() // error
let pq2: any P & Q = S() // okay

Swift 5.3 hat für Trailing Closures das Forwad-scan Matching (von links nach rechts) der Parameterliste eingeführt, welches das Backward-scan Matching (von rechts nach links) ersetzen soll. Im 5.x-Zweig gilt in zweifelhaften Fällen nach wie vor der Backward-scan, was sich mit dem Feature-Flag ForwardTrailingClosures ebenso ändert wie für Swift 6 geplant.

Die kommenden Features lassen sich im Sourcecode mit #if hasFeature() abfragen, um Code so zu gestalten, dass er sie für aktuelle Toolchains verwendet, sich aber auch mit älteren Werkzeugen übersetzen lässt.

Das Buch "Swift Programming Language" ist seit Februar mit dem Dokumentations-Compiler Swift-DocC umgesetzt. DocC steht für Documenation Markup und ist eine angepasste Variante von Markdown. Es bietet zusätzliche Auszeichnungen, die auf das Dokumentieren von Programmiersprachen ausgelegt sind.

Mit dem aktuellen Release bringt Swift-DocC neue Anpassungsmöglichkeiten für Farben, Schriftarten und Icons mit. Außerdem ist nun die unscharfe Suche (Fuzzy Search) innerhalb einer Projektdokumentation möglich.

Innerhalb von Projektdokumentation erlaubt Swift-DocC nun die unscharfe Suche.

(Bild: Swift.org)

Weitere Neuerungen in Swift 5.8 unter anderem für SwiftSyntax zum Parsen des Sourcecodes, den Paketmanager und das Zusammenspiel mit Windows lassen sich dem Swift-Blog entnehmen.

(rme)