Programmiersprache: Swift 5.2 setzt auf Komfort und Zuverlässigkeit

Apples Programmiersprache erweitert die Diagnosefunktionen für den Compiler und die Zuverlässigkeit beim Debuggen. Darüber hinaus winkt syntaktischer Zucker.

In Pocket speichern vorlesen Druckansicht 3 Kommentare lesen
Programmiersprache: Swift 5.2 setzt auf Komfort und Zuverlässigkeit

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

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

Die Programmiersprache Swift ist in Version 5.2 erschienen. Die Neuerungen betreffen vor allem die Toolchain mit Verbesserungen zur Diagnose und Autovervollständigungen im Compiler und erhöhter Zuverlässigkeit beim Debugging. Auch die Anbindung über SwiftSyntax und das Language Server Protocol bringt Ergänzungen mit. Die Programmiersprache erhält darüber hinaus ein paar Komfortfunktionen. Passend zum Release hat Apple die Entwicklungsumgebung Xcode aktualisiert.

Der Compiler spuckt in vielen Fällen hilfreichere Fehlermeldungen als bisher aus und nutzt dafür Breadcrumbs, eine nach dem Märchen von Hänsel und Gretel benannten Methode zum Nachvollziehen von Verläufen. Bisher konnte der Compiler lediglich bei fehlerhaften Ausdrücken den Teil identifizieren, der für den Fehler verantwortlich ist, dabei aber nicht auf die ursprüngliche Ursache schließen, wenn sie an anderer Stelle zu finden war. So reagierte er auf das fehlende Element der enum in folgendem Beispiel aus dem Swift-Blog:

enum E { case one, two }

func check(e: E) {
if e != .three {
print("okay")
}
}

mit einer eher irreführenden Fehlermeldung:

error: binary operator '!=' cannot be applied \\
to operands of type 'E' and '_'
if e != .three {
~ ^ ~~~~~~

In Swift 5.2 erkennt und benennt der Compiler das eigentliche Problem und vereinfacht die Korrektur deutlich durch folgende Meldung:

error: type 'E' has no member 'three'
if e != .three {
~^~~~~

Außerdem hat das Swift-Team den Compiler für eine bessere Autovervollständigung im Code angepasst und die Build-Algorithmen optimiert. Letztere erlauben wahlweise einen vollständigen (Whole Module) oder inkrementellen (Incremental) Build. Üblicherweise ist ersterer für das Deployment sinnvoll, da er bessere Optimierungen erlaubt, während letzterer beim Entwickeln performanter arbeitet.

Die Vorteile der inkrementellen Verarbeitung können bei komplex verschachtelten Projekten jedoch eher ins Gegenteil umschlagen, wenn der Compiler bestimmte Aufgaben mehrfach erledigen muss. Das aktuelle Swift-Release optimiert unter anderem mit Caching den inkrementellen Build-Prozess.

Swift 5.2 bringt eine optimierte Hierarchie für die SwiftSyntax-API, mit der Werkzeuge Sourcecode parsen, untersuchen, erstellen und transformieren können. Besonders Änderungen über SyntaxRewriter sollen damit deutlich performanter sein.

Hinsichtlich der Anbindung an dem ursprünglich von Microsoft, Red Hat und Codenvy entwickelte Language Server Protocol (LSP) bringt das aktuelle Release einige Ergänzungen: Fixits bieten über Code Actions definierte Änderungsvorschläge zu Fehlern und Warnungen. Zudem ermöglicht Swift 5.2 das Local Refactoring.

Die Programmiersprache bringt erwartungsgemäß keine größeren Änderungen mit, aber einige Komfortfunktionen. So lassen sich nun Key Path Expressions mit der Syntax \Root.value als Ersatz für Funktionen in der Form (Root) -> Value verwenden, was zu einer kürzeren, übersichtlicheren Schreibweise führt wie in folgendem Beispiel aus dem zugehörigen Proposal auf GitHub für den Zugriff auf die Elemente von folgendem struct:

struct User {
let email: String
let isAdmin: Bool
}

Der Zugriff war bisher über Ad-hoc-Closures beispielsweise für map und filter folgendermaßen möglich:

users.map { $0.email }
users.filter { $0.isAdmin }

Dieselbe Funktionsweise ist in Swift 5.2 mit der Key-Path-Expression-Syntax möglich:

users.map(\.email)
users.filter(\.isAdmin)

Zu den Weiteren Neuerungen an der Sprache gehören sogenannten Statically Callable Values, die über eine callAsFunction-Methode den Wert definieren und die Dynamically Callable Values ergänzen. Außerdem können Subscripts zum Zugriff auf Collections, Listen oder Sequenzen nun Default-Parameter definieren:

subscript(x: Int, y: Int = 0) { .. }

Apple hat zudem die Entwicklungsumgebung XCode auf Version 11.4 aktualisiert, die unter anderem die aktualisierte SDKs für die frisch erschienen Betriebssystemversionen iOS 13.4, iPadOS 13.4, tvOS 13.4, watchOS 6.2 und macOS Catalina 10.15.4 mitbringt. Außerdem ist sie auf den Verkauf von Apps als Universal Purchase vorbereitet.

Darüber hinaus bringt die IDE einige Ergänzungen beim Debugger, der nun unter anderem das Kopieren und Einfügen von Breakpoints im Breakpoint-Navigator erlaubt. Für den Clang-Compiler ist neuerdings standardmäßig -Watimport-in-framework-header aktiviert, um bei den ausdrücklich unerwünschten @import-Anweisungen in Framework-Headers eine Warnung auszugeben.

Weitere Details zu Swift 5.2 lassen sich dem Swift-Blog entnehmen. Die Ankündigung zu XCode 11.4 findet sich auf der Developer-Site bei Apple. (rme)