Programmiersprache: Swift ist gekommen, um zu bleiben

Apples neue Sprache Swift vereint erfolgreiche Konzepte unterschiedlicher Programmiersprachen und soll Objective-C ablösen. Mittlerweile wird die Sprache als Open-Source-Projekt weiterentwickelt und kann außer auf Apple-Plattformen auch unter Linux verwendet werden. Es lohnt sich sowohl für Ein- als auch für Umsteiger, genauer hinzusehen. Denn Swift ist gekommen, um zu bleiben.
Was ist Swift?
Apple sieht in Swift einen Nachfolger für die Programmiersprache Objective-C, die bisher überwiegend für Apples Betriebssysteme iOS und OS X verwendet wurde. Apples Chefentwickler Chris Lattner(öffnet im neuen Fenster) hat bereits vor der Veröffentlichung 2014 mehrere Jahre an Swift gearbeitet. Lattner war zuvor mit dem LLVM- Compiler erfolgreich, den er zusammen mit Vikram Adve als Studienprojekt entwickelt hatte. Die Weiterentwicklung baute Apple aus und stellte Lattner als Projektleiter ein. Mittlerweile ist der LLVM der Standardcompiler in Xcode.
Das Besondere an Swift ist die Kombination erfolgreicher Ideen(öffnet im neuen Fenster) und Konzepte aus anderen Sprachen wie Objective-C, Rust, Haskell, Ruby, Python, C#, CLU und D. Die Syntax ist deutlich übersichtlicher als beim Vorgänger Objective-C. Im Vergleich mit Objective-C sind die automatische Erkennung von Datentypen und die Playgrounds ein Alleinstellungsmerkmal von Swift.
Die Zustimmung in der Community ist deutlich zu erkennen: Seit der Veröffentlichung übernimmt Swift immer mehr Marktanteile – besonders von Objective-C. Laut dem vor kurzem aktualisierten TIOBE-Index(öffnet im neuen Fenster) , der die Beliebtheit von Programmiersprachen anhand verschiedener Kriterien ermittelt, ist Objective-C von Platz 4 auf 14 gefallen, Swift von Platz 27 auf 16 gestiegen (Stand Februar 2016).
Swift ist quelloffen
Swifts Öffnung als Open Source steigert ihr Potenzial, sich langfristig durchzusetzen. Die Sprache ist mittlerweile ein vollwertiges Open-Source-Projekt(öffnet im neuen Fenster) und steht unter der Apache-Lizenz. Damit sind anfängliche Bedenken aus der Welt, Apple könnte wie andere große Konzerne nur mit dem Attribut "Open Source" werben wollen, tatsächlich aber nur halbherzig den Code zur Verfügung stellen, wenn das Produkt schon einige Wochen auf dem Markt ist.
Bei Swift ist das anders: Die Zukunft wird transparent diskutiert und protokolliert. Die weitere Entwicklung findet öffentlich statt. Auch wenn am Ende natürlich Chris Lattner und somit auch Apple das letzte Wort haben, besteht für jeden eine echte Chance, sich in die Gestaltung einzubringen, Vorschläge zur Diskussion zu stellen und Veränderungen anzuregen.
Das eröffnet viele Möglichkeiten: Zum Beispiel ist Linux im Embedded-Bereich stark vertreten. Die Portierung auf den Bastelrechner Raspberry Pi ist bereits gelungen. In dem Bereich kann Swift eine echte Alternative zu C werden. Durch die Öffnung gibt es außerdem die Aussicht auf eine Umsetzung für Windows. Sollten die drei großen Desktop-Plattformen abgedeckt werden, ist Swift auch für den Unterricht interessant. Jeder Student wäre frei in der Wahl seiner Desktop-Umgebung. Das ist derzeit ein Argument für Java.
Auch kurzfristig ist Swift bereits eine Alternative zu Objective-C, unter anderem, weil Projekte Swift und Objective-C gemeinsam verwenden können(öffnet im neuen Fenster) .
Aber was genau macht Swift so besonders, gerade im Vergleich zu Objective-C?
Objective-C und Swift im Vergleich
Aus Sicht der Entwickler gibt es beim Wechsel von Objective-C zu Swift viele offensichtliche Änderungen. Quer durch die Sprache zieht sich das Ziel, einfachen und selbsterklärenden Code zu schreiben. Der erste Ansatz dafür ist bereits die schlankere Syntax.
Diese ist auffällig gut lesbar. Es wird bewusst auf redundante Informationen verzichtet. Und auf den ersten Blick wird klar: Die eckigen Klammern werden in Swift viel seltener verwendet. Exemplarisch für die Vereinfachungen steht die Variablendeklaration. Hier der direkte Vergleich: Objective-C und Swift im Vergleich
//Objective-C: MeinAuto *einAuto = [[MeinAuto alloc] init];
// Swift: var einAuto = MeinAuto()
Auch das Semikolon am Ende der Zeile fällt weg. Zudem wurden Strings vereinfacht ("ein String" statt @"ein String") und weitere Optimierungen umgesetzt.
Statische Datentypen mit automatischer Erkennung
Darüber hinaus verzichtet Swift überall auf Angaben, wo es der Lesbarkeit dient. Die Type Inference(öffnet im neuen Fenster) unterstützt dieses Ziel maßgeblich: Der Interpreter erkennt bei der Initialisierung von Variablen den Datentyp. Variablen müssen dann nicht zusätzlich deklariert werden. Trotzdem wird der Datentyp festgelegt. Eine Integer-Variable kann nicht zu einem String werden wie zum Beispiel unter PHP oder Javascript.
Keine explizite Arbeit mit Zeigern (Pointer)
Die noch aus der Sprache C bekannten Zeiger (Pointer) sind auch unter Objective-C ständig präsent (erkennbar beispielsweise am Sternchen, siehe Codebeispiel oben). Swift unterstützt das Konzept noch, es gibt natürlich auch weiterhin Referenzen. Aber die Dereferenzierung muss zum Beispiel nicht mehr explizit erfolgen. Dieser Aspekt macht es Einsteigern viel leichter, was gerade auch aus wirtschaftlicher Sicht ein Faktor sein kann. Werden Quereinsteiger eingestellt, ist der Zugang zu Swift um einiges leichter als zu Objective-C.
Definition und Implementierung vereint
In Objective-C werden pro Klasse jeweils zwei separate Dateien benötigt. Der "Header" (Dateien mit der Endung .h) enthält die öffentlichen Definitionen. Die Logik wird in der Implementierungsdatei (Endung .m) hinterlegt. Es gibt also mehr Dateien. Noch gravierender ist aber die Aufgabe, den Header und die Implementierung auf dem gleichen Stand zu halten. Eine Änderung muss so an zwei Stellen hinterlegt werden. Unter Swift ist das Konzept leichter zu pflegen. Es gibt es nur eine Klassendefinition in der Swift-Datei (.swift).
Playgrounds als praktisches Werkzeug
Um Objective-C oder andere Sprachen zu lernen, muss ein klassisches Projekt als Testumgebung dienen. Der Entwickler verändert Quellcode, übersetzt ihn und führt das fertige Programm aus. Das Ergebnis wird getestet, und der Prozess startet erneut. Was keine Hürde darstellt, machen die Xcode Playgrounds trotzdem noch einfacher. Im Playground wird im Editor Quellcode hinterlegt, der kurz nach der Eingabe übersetzt und automatisch ausgeführt wird. Das ermöglicht unmittelbares Feedback – ohne zusätzliche Schritte. Berechtigter Kritikpunkt ist derzeit die Stabilität. Ein Playground muss hin und wieder nach einem Problem neu gestartet werden.
Performance im Vergleich
Neben Aspekten rund um die Software-Entwicklung ist die Performance auf mobilen Endgeräten ein Faktor für den Erfolg von Programmiersprachen. Es gibt mittlerweile viele Vergleiche der Performance von Objective-C und Swift. Apple hat bei der Vorstellung von Swift(öffnet im neuen Fenster) bei der WWDC 2014 (Keynote ab 1:45:20) die Geschwindigkeit bei der Sortierung von komplexen Objekten verglichen. Ein vergleichbarer Algorithmus war in Objective-C geschrieben 2,8-mal schneller als die Python-Umsetzung. Swift war sogar 3,9-mal schneller. Unabhängig davon, ob der Vergleich mit Python hinkt, ist der Unterschied zwischen Swift und Objective-C entscheidend.
Es gibt weitere Stellen im Internet, wo die Performance verglichen wird. Exemplarisch dafür ist ein unabhängiger Vergleich der Verarbeitung von Arrays und Dictionaries(öffnet im neuen Fenster) . Auch hier bestätigt sich die bessere Performance von Swift. Der Unterschied zwischen Swift und Objective-C fällt bei nahezu allen Benchmarks aber weniger dramatisch aus.
Optionals machen den Code stabiler
Optionals in Swift signalisieren: Entweder hat diese Variable einen Wert und der entspricht Datentyp x – oder sie hat gar keinen Wert. Dies wird über die Optional-Syntax deklariert. Entwickler werden dadurch gezwungen, beide Szenarien zu berücksichtigen. Während auch unter Objective-C Variablen auf "nil" geprüft wurden, gab es keine Möglichkeit, das zu erzwingen. Zusätzlich unterstützt Swift Optionals bei jedem Datentyp. Unter Objective-C funktioniert das nur bei Referenzen.
Konstanten und Variablen
Objective-C ermöglicht keine Unterscheidung zwischen Variablen und Konstanten. Die Anforderung wurde über nicht veränderbare Datentypen (immutable) realisiert. Deshalb gibt es zum Beispiel die Klassen NSArray (nicht veränderbar) und NSMutableArray (veränderbar). In Swift ist das grundlegend anders. Selbst primitive Datentypen können als Konstante (nicht veränderbar) oder als Variable (veränderbar) deklariert werden.
Dies sind viele Gründe, die für einen Umstieg auf Swift sprechen. Unter anderem deshalb ist die Sprache in der Community bereits so beliebt. Doch wie sieht es mit der Adaption bei Apple aus?
Apple nutzt Swift angeblich noch gar nicht?
Der iOS-Entwicker Ryan Olson schrieb kürzlich(öffnet im neuen Fenster) in einem Artikel über die interne Adaption von Swift bei Apple, die Taschenrechner-App sei die einzige App unter iOS, in der bisher Swift verwendet werde. Das klingt nicht nach echter Begeisterung.
Craig Federighi, Senior Vice President für Software-Entwicklung bei Apple, stellt das etwas anders dar. Verschiedene Teams nutzten bereits Swift, erklärt er in der Daring Firewall Episode 139(öffnet im neuen Fenster) . So habe das Team rund um die Dock.App bereits große Teile in Swift übersetzt. Andere Entwicklerteams schrieben immerhin schon Tests mit Swift und nutzten ihre eigenen Schnittstellen mit der neuen Sprache.
Die Zukunft liege bei Swift, betont Federighi. Dass die Sprache bei Apple noch nicht so umfassend eingesetzt wird, wie man angesichts des allgemeinen Zuspruchs denken könnte, hat offenbar mehrere Gründe.
Probleme bei der Umsetzung
Ein Problem ist wohl die noch fehlende Unterstützung von 32-Bit-Apps. Einige Bibliotheken aus dem Cocoa- und Cocoatouch Framework werden zwischen den Systemen geteilt, weshalb Swift dort z. B. bisher nicht eingesetzt werden kann. Außerdem sind grundsätzliche Voraussetzungen und mehr Stabilität erst mit Swift 2.0 gekommen. So ist für umfangreiche Projekte die inkrementelle Kompilierung essentiell: Vor Swift 2 wurden immer alle Dateien neu übersetzt, auch ohne Änderung. Jetzt wird nur noch veränderter Code neu kompiliert.
Es gibt Stolpersteine, aber bei Apple keinen Mangel an Enthusiasmus – wie Federighi betont. Sobald die Sprache noch stabiler wird, könnte es mit der Verbreitung plötzlich sehr schnell gehen.
Ist Swift denn noch nicht stabil?
Es geht bei der Frage, ob Swift stabil ist, nicht um Abstürze von erzeugten Apps. Es geht um anstehende und notwendige Änderungen. Die Sprache wurde entwickelt, veröffentlicht und schließlich wurde das Feedback der Community berücksichtigt, floss in die Sprache ein. Es sollen einfach keine Kompromisse gemacht werden. Außerdem kann nun dank des neuen Open-Source-Models jeder über Change-Requests eigene Wünsche zur Diskussion stellen. Das sorgt aber ebenfalls für Weiterentwicklung und somit Anpassungen.
Mit Swift 3.0 steht im Herbst ein größeres Update an. Da Swift ein Open-Source-Projekt ist, sind Entwicklung und Planung nun transparent. Es gibt eine Roadmap und eine Übersicht zu den geplanten Änderungen(öffnet im neuen Fenster) . Einschneidende Eingriffe werden auf einer Mailingliste diskutiert. Bisher geplant ist zum Beispiel, einige Syntaxelemente zu streichen. Das sind zum Beispiel die "C-Style for- Schleife" (for ...; ...; ...) und die Operatoren "++" bzw. "-".
Der vielleicht wichtigste Schritt für die Adaption ist die geplante Stabilität der ABI(öffnet im neuen Fenster) . Vereinfacht ausgedrückt bleibt mit Swift 3.0 erzeugter Binärcode von Apps und Bibliotheken mit zukünftigen Versionen kompatibel, selbst wenn das beim Quellcode nicht mehr gilt. Bisher muss dafür der Code zwingend neu kompiliert werden.
Es gab bisher eine ganze Reihe Anpassungen, und mit Swift 3 werden weitere folgen. Die Sprache profitiert mittel- und langfristig. Ist das aber vielleicht aktuell noch ein Hindernis?
Stören diese Änderungen nicht bei der Entwicklung?
Gerade zu Beginn kamen einige Veränderungen doch eher überraschend. Das lag vor allem an der Entwicklung hinter verschlossenen Türen. Während die Auswirkungen auf Entwickler gering waren, waren durch die Änderungen Fachbücher und Videotrainings schnell überholt. Die Änderungen waren nicht gravierend, aber ausreichend, um Einsteiger aus dem Konzept zu bringen. Mittlerweile ist das besser planbar, da Swift offen entwickelt wird.
Alle Änderungen werden im Vorfeld offen kommuniziert, Überraschung beim Release neuer Xcode-Versionen gibt es also nicht. Außerdem sollen Neuerungen mit Auswirkung auf bestehenden Code bereits vorher über eine Warnung angekündigt werden. Betroffene Stellen werden als "deprecated" markiert. Das bedeutet frei übersetzt "veraltet" und steht sinngemäß für "wird so in Zukunft nicht mehr funktionieren" . So kann der Code auf neue Versionen vorbereitet werden.
Lohnt es sich trotz der noch geplanten Anpassungen schon jetzt, Swift zu lernen oder sollte doch vorerst noch Objective-C vorgezogen werden?
Swift oder Objective-C lernen?
Für Einsteiger stellt sich die Frage, welche Sprache sinnvoller ist. Swift wird sich wohl langfristig durchsetzen und hat die besser lesbare Syntax. Auf der anderen Seite ist nach wie vor Objective-C gerade in Bezug auf die Cocoa- und Cocoatouch-Frameworks in den nächsten paar Jahren noch präsent.
Spätestens, wenn im Internet recherchiert wird, ist Grundwissen rund um Objective-C hilfreich. Sämtliche Objective-C-Beispiele können auch in Swift umgesetzt werden, vorausgesetzt, der Entwickler kann den Code verstehen. Wenn zumindest grundlegende Programmierkenntnisse vorhanden sind, ist Swift dennoch die bessere Wahl für den Einstieg, auch durch die Playgrounds. Leider gibt es bisher noch kaum passendes Schulungsmaterial.
Erste Ansätze bietet auf Deutsch die vom Autor angebotene kostenlose Videoserie Programmieren lernen mit Swift(öffnet im neuen Fenster) bei der Swift Akademie(öffnet im neuen Fenster) . Lesenswerte englischsprachige Ressourcen sind unter anderem raywenderlich.com(öffnet im neuen Fenster) , appcoda.com(öffnet im neuen Fenster) sowie swiftandpainless.com(öffnet im neuen Fenster) . Natürlich darf das offizielle Blog swift.org hier nicht unerwähnt bleiben. Einen ganz anderen Weg geht die Swifty App. Sie kann direkt auf iPhone und iPad beim Lernen eine Unterstützung sein.
Wo finde ich Informationen?
Auch in der deutschsprachigen Swift-Community gibt es mehrere Anlaufstellen für Informationen. Hier ist unbedingt das Swift-Blog(öffnet im neuen Fenster) um bekannte Personen wie die Entwickler Stefan Popp, Ralf Peters und Frank Jüstel zu nennen. Hinzu kommen der deutschsprachige Youtube-Channel SwiftDE von iOS- Entwickler Benjamin Herzog sowie die Swift Akademie(öffnet im neuen Fenster) .
Die deutsche Swift-Community hat auch einen eigenen Slack-Channel(öffnet im neuen Fenster) , der ebenfalls von Benjamin Herzog gegründet wurde. Unter anderem die genannten Personen sowie viele weitere finden sich hier täglich ein, um über Swift, iOS und die Apple-Entwicklung zu diskutieren. Entwickler mit jedem Kenntnisstand sind herzlich willkommen. Um teilzunehmen, wird hier(öffnet im neuen Fenster) ein Zugang angefordert und anschließend die kostenlose Slack-App heruntergeladen(öffnet im neuen Fenster) .
Swift ist mehr als nur ein Experiment. Apple erschafft eine mittel- und langfristige Ablösung der in die Jahre gekommenen Sprache Objective-C. Auch wenn noch ein paar Änderungen an der Syntax geplant sind, lohnt sich der Umstieg angesichts der Vorteile bereits jetzt. Unter anderem die neuen Playgrounds machen sie auch zu einer idealen Sprache für Einsteiger. Nicht zuletzt ermöglicht die Freigabe als echtes Open-Source-Projekt in Zukunft sogar den Einsatz außerhalb der Apple-Welt. Im Embedded-Bereich ist Swift eine mögliche Alternative zu C, und im Web könnte mit der gleichen Sprache das passende Backend zur App entwickelt werden. Die weitere Entwicklung wird also spannend werden und weitere Szenarien eröffnen.
Der Autor(öffnet im neuen Fenster) ist freiberuflicher Entwickler. Seit Jahren betreibt er die Webseite codingtutor.de und bietet Webinare und Online-Kurse an, unter anderem ein kostenloses Trainingsprogramm zum Programmieren mit Swift(öffnet im neuen Fenster) .



