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.
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.
Hilfreiche Fehlermeldungen
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 {
~^~~~~
Effizienter gebaut
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.
Schnittstellen zur Sprache
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.
Syntaktischer Zucker
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) { .. }
XCode auf Stand gebracht
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)