- Rust und Swift teilen sich beide ein starkes Typsystem und Eigenschaften funktionaler Sprachen und können dank LLVM-basierten Compilern zu nativem Code und WASM kompiliert werden
- Rust begann als Systemsprache auf niedriger Ebene und bietet Funktionen auf höherer Ebene, während Swift als Sprache auf höherer Ebene begann und Zugriff auf niedrigere Ebenen erlaubt
- Swift nutzt standardmäßig Werttypen und Copy-on-Write und setzt ähnliche Konzepte wie das Ownership-Modell von Rust mit einfacherer Syntax um
- Bei optionalen Typen, Fehlerbehandlung und rekursiven Enums verpackt Swift Konzepte aus Rust in eine C-ähnlich vertraute Syntax und bietet Entwicklern dadurch mehr Komfort
- Swift entwickelt sich zu einer plattformübergreifenden Sprache weiter und kann auch unter Windows, Linux und in Embedded-Umgebungen eingesetzt werden, wodurch es sich als Alternative zu Rust etabliert
Gemeinsamkeiten und Unterschiede zwischen Rust und Swift
- Beide Sprachen enthalten Eigenschaften funktionaler Sprachen (tagged Enums,
match/switch-Ausdrücke, Generics, First-Class Functions)
- Rust bietet mit
Rc, Arc, Cow Referenzzählung und Kontrolle über Kopien
- Swift verwendet standardmäßig Werttypen und Copy-on-Write und unterstützt bei Bedarf Ownership-Transfer (move) und unsafe Pointer-Zugriff
- Beide Sprachen verwenden LLVM-basierte Compiler und können zu nativem Code und WASM kompiliert werden
Speichermodell: Rust top-down, Swift bottom-up
- Rust begann als Systemsprache auf niedriger Ebene und bietet Funktionen auf höherer Ebene
- Swift begann als Sprache auf höherer Ebene und erlaubt bei Bedarf Zugriff auf niedriger Ebene
- Das Standard-Speichermodell von Swift sind Copy-on-Write-Werttypen, ähnlich zu Rusts
Cow<>
- Rust ist standardmäßig schnell, verlangt aber, dass
Cow<> explizit behandelt wird
- Swift ist standardmäßig einfach, kann aber statt Kopieren auch Verschieben wählen
Swifts syntaktischer Ansatz: Rust-Konzepte im C-Stil verborgen
- Swifts
switch-Anweisung erfüllt praktisch dieselbe Funktion wie der match-Ausdruck in Rust
- Sie unterstützt Pattern Matching und hat kein
fallthrough
- Swifts
enum kann direkt Methoden enthalten, wodurch es objektorientierter genutzt werden kann als in Rust
- Optionale Typen (
T?) entsprechen konzeptionell Rusts Option<T>, und nil entspricht None
- In Swift kann per
if let val sicher entpackt werden
- Die Fehlerbehandlung ähnelt Rusts
Result-Typ, und Swifts do-catch und try sind dieselbe Struktur in vertrauter Syntax verpackt
Unterschiede im Compiler-Verhalten
- Der Rust-Compiler legt den Schwerpunkt auf Problemerkennung und Warnungen und erzwingt zum Beispiel bei der Definition eines rekursiven Enums die Verwendung von
Box<>
- Swift verarbeitet rekursive Enums allein mit dem Schlüsselwort
indirect, wobei der Compiler die interne Pointer-Verwaltung automatisch übernimmt
- Swift automatisiert im Vergleich zu Rust mehr Verarbeitungsschritte, sodass Entwickler seltener selbst mit Speicherstrukturen umgehen müssen
Swifts Praxistauglichkeit und Erweiterbarkeit der Sprache
- Swift wurde als Ersatz für Objective-C entworfen und ist deshalb eine größere und praktischere Sprache
- Klassen/Vererbung, async-await, actors, lazy Properties, property wrappers, Result Builders und viele weitere Funktionen sind eingebaut
- Das Design der „progressive disclosure“ sorgt dafür, dass mit fortschreitendem Lernen nach und nach mehr Funktionen sichtbar werden
Balance zwischen Komfort und Leistung
- Swift ist eine Sprache mit leichtem Einstieg und hoher Produktivität, Rust eine von Haus aus schnelle Sprache
- Bei Rust gilt: „Schnelligkeit ist Standard“, bei Swift: „Komfort ist Standard“
- Rust eignet sich für Systeme, Embedded, Compiler und Browser-Engines
- Swift eignet sich für UI, Server und einige Komponenten von Betriebssystemen, und die Einsatzgebiete beider Sprachen überschneiden sich zunehmend
Swifts plattformübergreifende Expansion
- Swift ist nicht länger eine reine Apple-Sprache
- Windows: The Browser Company nutzt es für gemeinsamen Code im Arc-Browser
- Linux: Apple unterstützt Swift on Server und sponsert Konferenzen
- Embedded Swift: Einsatz auf kleinen Geräten wie dem Panic Playdate
- Der offizielle Swift-Blog stellt Projekte für Windows, Embedded, Linux (Gnome) und Playdate vor
- Mit einer VSCode-Erweiterung, Open-Sourcing des LSP und mehr verbessert Swift die Entwicklererfahrung auch außerhalb von Xcode
Grenzen von Swift und seine aktuelle Position
- Die Kompilierzeit ist wie bei Rust langsam
- Durch feature creep ist die Sprache größer geworden, und einige Syntaxelemente wirken ungewohnt
- Das Paket-Ökosystem ist weniger ausgereift als bei Rust
- Dennoch ist Swift bereits eine plattformübergreifende Sprache mit ABI-Stabilität, Automatic Reference Counting (ARC), wählbaren Ownership-Funktionen und Linux-kompatiblen Paketen
- Swift etabliert sich als bequemere Alternative zu Rust und ist keine Zukunftsoption, auf die man noch warten muss, sondern eine Wahl für die Gegenwart
Noch keine Kommentare.