Apples Pro­gram­mier­spra­chen-Update kommt noch 2024 Die Zukunft mit Swift 6 – Neuerungen und Ausblick

Von Thomas Joos 6 min Lesedauer

Anbieter zum Thema

Swift 6 setzt die Evolution der Programmiersprache fort: mit verbesserten Sicherheitsfunktionen, erweiterten Standardbibliotheken und Optimierungen im Compiler und erweitertem Ne­ben­läu­fig­keits­mo­dell.

Nebenläufigkeit, mehr Performance, bessere Fehlerbehandlung: Das für September geplante Upgrade auf Swift 6 verspricht einige Optimierungen.
Nebenläufigkeit, mehr Performance, bessere Fehlerbehandlung: Das für September geplante Upgrade auf Swift 6 verspricht einige Optimierungen.
(Bild: StockSnap / Pixabay)

Swift 6 zielt auf höhere Effizienz, bessere Cross-Plattform-Unterstützung und robustere Fehlerbehandlung ab. Durch die Implementierung strengerer Datenisolationsprinzipien und die Erweiterung des in Version 5.5 eingeführten Concurrency-Modells, das Nebenläufigkeit erlaubt, unterstreicht Swift 6 das Engagement für performante und sichere Anwendungsarchitekturen. Das neue Modell soll das Schreiben von sicherem und effizientem parallelen Code vereinfachen.

Mit der Einführung neuer Sprachfeatures und der Optimierung des Compilers will Swift 6 neue Standards in der Softwareentwicklung setzen und eine effizientere und fehlertolerantere Codebasis fördern. Bereits in den aktuellen Swift 5.x-Versionen bis hin zu Swift 5.10 hat Apple neue Funktionen integriert, die in Swift 6 ihre Relevanz behalten und weiter ausgebaut werden. Daher sind Neuerungen ab Swift 5.5 durchaus auch für Swift 6 relevant, was auch für die aktuelle Version 5.10 gilt.

Asynchrone Aufgaben mit Swift 6 effizienter lösen

Die Swift-5.x-Releases bilden den Übergang zu Swift 6. Obwohl diese Versionen auf den ersten Blick als kleine Schritte erscheinen, beweisen Entwicklungen wie die Einführung von async/await in Swift 5.5 das Gegenteil. Es erfolgt bereits jetzt ein schrittweiser Aufbau hin zur nächsten großen Version von Swift.

In Swift 6 werden die Fortschritte hinsichtlich der Nebenläufigkeit besonders wichtig. Ähnliche Fortschritte sind bei der Einführung von Existential- und Opacetypen in Swift 5.8 und der Unterstützung neuer Makros in Swift 5.9 zu erwarten. Alle diese Neuerungen fließen in Swift 6 ein und werden weiter ausgebaut. Bereits jetzt können sich Entwickler und Entwicklerinnen aber damit auseinandersetzen.

Durch die Optimierung der Syntax von async/await vereinfacht Swift die Handhabung asynchroner Aufgaben und beseitigt die Komplexität, die traditionell mit Callbacks und Futures verbunden ist. Zum Beispiel ermöglicht die async-Funktion, asynchrone Operationen in einer sequenziellen und leichter verständlichen Weise zu schreiben, während await verwendet wird, um auf das Ergebnis einer solchen Operation zu warten, ohne den ausführenden Thread zu blockieren. Das funktioniert bereits jetzt mit Swift 5.10, bereitet aber weitere Neuerungen in Swift 6 vor.

Durch die Rückportierung von async/await auf ältere Betriebssystemversionen werden Hindernisse für die Übernahme der neuesten Concurrency-Features beseitigt. Es ist unrealistisch, das gesamte Projekt auf einmal zu migrieren, daher wird ein schrittweises Vorgehen empfohlen. Dabei ist wichtig, zu verstehen, dass es nicht nur darum geht, Closures durch async/await zu ersetzen. Das Concurrency Framework ermöglicht es dem Compiler, den Code auf Thread-Sicherheit zu überprüfen. Sogenannte Concurrency Strength Warnings zeigen an, welche Typen sendbar sein müssen, um Laufzeitfehler oder andere Probleme zu vermeiden.

In Swift 5.9 wurde außerdem die Möglichkeit eingeführt, generische Funktionen zu definieren, die eine unbegrenzte Anzahl von Argumenten unterschiedlicher Typen annehmen können, dank der Einführung von Parameterwert- und Typ-Parameter-Paketen. Ein besonders bemerkenswerter Vorteil dieser Entwicklung ist die Aufhebung der Beschränkung auf zehn Ansichten innerhalb der SwiftUI.

In der Folgeversion Swift 6 wird diese Funktionalität um die Möglichkeit erweitert, über Wertepakete mittels for-in-Schleifen zu iterieren. Diese Entwicklung stellt einen bedeutenden Fortschritt in Swift dar und hat das Potenzial, die Art und Weise, wie SwiftUI-APIs verwendet werden, grundlegend zu verändern.

Migration von Swift 5 zu Swift 6 mit Compiler-Flags

Um von erwarteten Änderungen und Neuerungen zu profitieren ist es also nicht notwendig, auf die Veröffentlichung von Swift 6 zu warten. Die schrittweise Einführung neuer Features bis hin zu Swift 5.10 ermöglicht eine flexible Anpassung. Insbesondere die bereits erwähnten Releases von async/await, Existentials und Makros bieten Anknüpfungspunkte.

Obwohl eine Migration nicht zwingend erforderlich ist, wird empfohlen, diese neuen Sprachfeatures bereits jetzt zu nutzen, um Projekte auf Swift 6 vorzubereiten. Für die inkrementelle Einführung der Verbesserungen von Swift 6 in Projekte, die noch Swift 5.x verwenden, stehen hierfür spezielle Compiler-Flags zur Verfügung. Diese ermöglichen es, die neuen Funktionen vorab zu nutzen und so die Migration zu Swift 6 zu erleichtern. Generell ist es sinnvoll, Features über die Swift Package Manager-Manifeste zu aktivieren, was eine schrittweise Übernahme neuer Sprachfunktionen ohne Risiko für den bestehenden Code ermöglicht.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Ein weiterer Schwerpunkt von Swift 6 ist die Verbesserung des Sprachmodus, um eine verbesserte Performance und Zugang zu früheren Verbesserungen zu gewährleisten. Durch die Einführung dieser Änderungen vor der Veröffentlichung von Swift 6 können wertvolle Erfahrungen gesammelt und gegebenenfalls Anpassungen für Swift 6 vorgenommen werden.

Makros werden in Swift 6 noch leistungsfähiger

In Swift 6 ist es möglich, benutzerdefinierte Makros ähnlich wie eingebaute Makros als Standardargumente in Funktionen zu verwenden. Während benutzerdefinierte Makros als Standardargumente direkt an der Stelle expandiert werden, an der sie aufgerufen werden, werden sie als Unterausdrücke innerhalb von Standardargumenten genau an der Stelle expandiert, an der sie verwendet werden. Ein Beispiel könnte wie folgt aussehen:

@freestanding(expression)
macro MyTimestamp<T: ExpressibleByIntegerLiteral>() -> T = ...
public func logMessage(_ message: String, at timestamp: Int = #MyTimestamp) {
   print("\(timestamp): \(message)")
}
public func customLog(_ message: String, at timestamp: Int = (#MyTimestamp)) {
   print("Custom Log - \(timestamp): \(message)")
}
public func detailedLog(
   message: String = logMessage("Debugging Start", #MyTimestamp)
) { message }
  • 1. Es wird ein neues benutzerdefiniertes Makro „MyTimestamp“ definiert, das eine Ganzzahl zur Kompilierzeit generiert, ähnlich wie ein Timestamp.
  • 2. Dabei ist „logMessage“ eine Funktion, die eine Nachricht zusammen mit einem Timestamp ausgibt, wobei der Timestamp standardmäßig vom MyTimestamp-Makro generiert wird.
  • 3. customLog zeigt eine ähnliche Funktionalität, demonstriert aber, dass Makros auch innerhalb der Klammern von Standardargumenten expandiert werden können.
  • 4. detailedLog verwendet die logMessage-Funktion als Standardargumentwert, was normalerweise untypisch ist und hier eher als kreatives Beispiel dient, um die Vielseitigkeit und potenzielle Komplexität der Nutzung von Makros in Swift zu illustrieren.

Performance-Verbesserungen in Swift 6: Unter der Haube

In Swift 6 werden erhebliche Leistungsverbesserungen vorgenommen. Diese Verbesserungen umfassen Optimierungen der Kompilierzeiten und der Laufzeiteffizienz. Ein konkretes Beispiel ist die Verbesserung der Generika (Generics), die in früheren Sprachversionen zu längeren Kompilierzeiten führen konnten.

Die Implementierung eines verbesserten Memory-Ownership-Modells in Swift 6 ermöglicht den Entwicklern eine detaillierte Kontrolle über die Speicherverwaltung, was zur Steigerung der Anwendungsleistung und zur Reduzierung des Speicherverbrauchs beiträgt. Entwickler können sich dadurch mehr auf die Erstellung neuer Funktionen konzentrieren, anstatt sich mit den Tiefen der Speicherverwaltung auseinanderzusetzen.

Der Swift 6 Compiler bietet Optimierungen, welche die Effizienz des Kompilierungsprozesses erhöhen. Diese Optimierungen ermöglichen es, den Code schneller zu kompilieren und Fehler und Warnungen zuverlässiger zu identifizieren. Beispielsweise führt eine verbesserte Diagnose zu einer präziseren Fehlerbehandlung.

Swift 5.10 legte mit der Implementierung einer umfassenden Datenisolierung den Grundstein für Swift 6. Für das kommende Major Release plant der Compiler die Einführung eines optionalen Swift 6 Sprachmodus, der standardmäßig strenge Datenisolierungsregeln anwendet. Diese Entwicklung soll den Übergang zur Eliminierung von Datenkonflikten innerhalb der mit Swift entwickelten Software erleichtern.

Die Standardbibliothek in Swift 6 wurde außerdem um zahlreiche Funktionen und Typen erweitert, die die Entwicklung vereinfachen. Dazu gehören neue Datenstrukturen und verbesserte Unterstützung für bestehende Typen. Ein Beispiel ist die Erweiterung der String-API, die zusätzliche Methoden für die Manipulation von Strings bietet.

Fehlerbehandlung in Swift 6: Neue Konzepte

Swift 6 führt verbesserte Konzepte zur Fehlerbehandlung ein, die es Entwicklern ermöglichen, Fehler effektiver zu behandeln. Ein Beispiel hierfür ist die Einführung neuer Fehlerbehandlungsmuster für asynchronen Code, die eine klarere Syntax bieten. Darüber hinaus wird die Unterstützung für die Entwicklung plattformübergreifender Anwendungen verbessert.

Mehrere Sicherheitsverbesserungen werden in Swift 6 implementiert, um die Entwicklung sichererer Anwendungen zu fördern. Dazu gehören die Einführung strengerer Typüberprüfungen und verbesserte Sicherheitsfunktionen für die Arbeit mit Speicher. Darüber hinaus setzt Swift 6 neue Maßstäbe bei der Interoperabilität mit anderen Programmiersprachen. Ein Beispiel hierfür ist die verbesserte Unterstützung für die Verwendung von Swift zusammen mit C-basierten Sprachen, was die Integration in bestehende Projekte erleichtert.

Die Einführung von Swift 6 ist daher eine hervorragende Gelegenheit für Entwicklerinnen und Entwickler, um beispielsweise ihre Objective-C-basierten Anwendungen auf Swift zu portieren. Der Umstieg auf Swift öffnet die Tür zur Nutzung der neuesten Frameworks wie SwiftUI, SwiftData, RegexBuilder und Algorithms, was die App-Entwicklung beschleunigt und vereinfacht.

Angesichts der schrumpfenden Objective-C-Entwicklergemeinde und Apples zunehmender Bevorzugung von Swift in seinen internen Binaries scheint es ratsam, einen Umstieg auf Swift in Erwägung zu ziehen. Der Wechsel zu Swift erleichtert den Zugang zu modernen Frameworks wie SwiftUI und ermöglicht die Entwicklung von Anwendungen für alle Apple-Plattformen. Gerade vor dem Erscheinen von Swift 6 im Herbst 2024 und der aktuellen Version Swift 5.10 ist ein solcher Wechsel sinnvoll.

(ID:49990331)