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.
(Bild: Paweł Kuźniar (unter der GFDL))
- Rainald Menge-Sonnentag
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.
Blick nach vorn
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).
Besser lesbare Dateinamen und reguläre Ausdrücke
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.
Mit any und durch Closures
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.
Dokumentation mit Swift-DocC
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.
(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)