Programmiersprache: Swift 5.4 steuert auf neues Modell für Nebenläufigkeit zu
Apples Programmiersprache hat einige neue Funktionen und Verbesserungen beim Tooling im Gepäck.
Während sich Apples Swift-Team beim vorangegangenen Release der Programmiersprache vor allem um übersichtlicheren Sourcecode und das Verringern von Boilerplate-Code bemüht hat, verspricht die nun veröffentlichte Version Swift 5.4 neue Sprachfunktionen. Dazu kommen Verbesserungen bei Tools wie dem Paketmanager sowie weitere Vorbereitungen zum Übergang auf ein neues Concurrency-Modell.
Compiler-Verbesserungen
Im Zuge des Swift Evolution Proposals SE-0296 arbeitet das Apple-Team an einem neuen Modell für Nebenläufigkeit. Auf dem Weg dorthin gibt der Compiler ab Version 5.4 nun eine Warnung und einen Fix aus, wenn await
unzulässigerweise als Identifier verwendet wird. Solche Identifier werden erst in künftigen Swift-Releases als Keyword await
interpretiert werden. Der Compiler verspricht Entwicklerinnen und Entwicklern darüber hinaus höhere Build Performance.
Um beispielsweise bei inkrementellen Builds die Zahl der zu kompilierenden Dateien bei verschiedenen Änderungen zu reduzieren, kann der Swift-Compiler laut Blogbeitrag nun die Abhängigkeiten zwischen Dateien besser verfolgen. Auch die Abhängigkeiten von Member-Variablen und Funktionen von structs
, enums
, classes
und protocols
verfolgt der Compiler nun einzeln, sodass Rebuilds nach Änderungen dieser Entitäten schlanker und schneller ausfallen.
Mehr Tempo beim Type Checker
Höhere Leistung versprechen auch einige Verbesserungen beim Type Checker und der Code-Vervollständigung, die im neuen Release vor allem mit großen Funktionsblöcken besser umgehen soll und zuverlässiger arbeitet bei Ausdrücken, die mehrdeutig sind oder sogar Fehler enthalten. Der Type Checker soll insbesondere mit "verknüpften" Ausdrücken wie etwa a + b + (2 * c)
schneller arbeiten, bei denen es bisher sogar zu einem Timeout kommen konnte, wie etwa im folgenden Fall, den der Type Checker nun in weniger als 100 ms verarbeiten soll:
struct S { var s: String? }
func test(_ a: [S]) {
_ = a.reduce("") {
($0 + "," + ($1.s ?? "")) + ($1.s ?? "") + ($1.s ?? "")
}
}
Neben neuen Sprachfeatures wie der Unterstützung für mehrere variable Parameter in Funktionen, Subscripts und Initialisierern (Proposal SE-0284) oder auch einer erweiterten impliziten Member-Syntax (Proposal SE-0287) hat sich das Swift-Team auch dem Support für die Windows-Plattform sowie dem Package Manager gewidmet. Während letzterer nun auch unter Windows arbeitet, stehen Entwicklerinnen und Entwicklern für Windows-Applikationen mehr APIs zur Verfügung, da das Modul WinSDK
einen größeren Teil des Windows Developer SDK unterstützt.
Paketmanager nun auch für Windows
Der Swift Package Manager ist ab Version 5.4 in der Lage, Ziele explizit als Executable zu deklarieren, wodurch das Verwenden des @main
-Schlüsselworts im Paketcode möglich wird. Da er außerdem Paketabhängigkeiten nun auf Benutzerbasis speichert, reduziert sich der Netzwerkverkehr und Entwicklerinnen und Entwickler profitieren von mehr Tempo beim Auflösen von Dependencies für die nachfolgende Verwendungen desselben Pakets.
Weitere Details sowie ein Überblick aller Neuerungen, finden sich im Swift-Blog. Binaries der Sprache sind auf der Download-Seite verfügbar, und Links auf den Sourcecode stehen im Blogbeitrag.
(map)