- Rust dan Swift sama-sama memiliki sistem tipe yang kuat dan karakteristik bahasa fungsional, serta dapat dikompilasi ke kode native dan WASM melalui kompiler berbasis LLVM
- Rust berawal sebagai bahasa sistem tingkat rendah lalu menyediakan fitur tingkat tinggi, sedangkan Swift berawal sebagai bahasa tingkat tinggi lalu mengizinkan akses tingkat rendah
- Swift menggunakan value type dan Copy-on-Write sebagai dasar, dan mengimplementasikan konsep yang mirip dengan model ownership Rust dengan sintaks yang lebih sederhana
- Pada optional type, penanganan error, recursive enum, Swift membungkus konsep Rust dengan sintaks familier bergaya C, sehingga memberi kenyamanan lebih tinggi bagi developer
- Swift sedang berkembang menjadi bahasa lintas platform dan dapat digunakan di Windows, Linux, serta lingkungan embedded, sehingga muncul sebagai alternatif untuk Rust
Kesamaan dan perbedaan Rust dan Swift
- Kedua bahasa sama-sama mencakup karakteristik bahasa fungsional (tagged enum, ekspresi match/switch, generics, first-class function)
- Rust menyediakan reference counting dan kontrol penyalinan melalui
Rc, Arc, Cow
- Swift pada dasarnya menggunakan value type dan Copy-on-Write, serta bila perlu mendukung ownership move dan akses pointer unsafe
- Kedua bahasa sama-sama memakai kompiler berbasis LLVM sehingga bisa dikompilasi ke kode native dan WASM
Model memori: Rust top-down, Swift bottom-up
- Rust berawal sebagai bahasa sistem tingkat rendah lalu menyediakan fitur tingkat tinggi
- Swift berawal sebagai bahasa tingkat tinggi lalu mengizinkan akses tingkat rendah saat diperlukan
- Model memori dasar Swift adalah Copy-on-Write value type, mirip dengan
Cow<> di Rust
- Rust pada dasarnya cepat, tetapi saat digunakan perlu menangani
Cow<> secara eksplisit
- Swift pada dasarnya sederhana, dan dapat memilih move alih-alih copy
Pendekatan sintaks Swift: menyembunyikan konsep Rust dengan gaya C
- Pernyataan
switch di Swift pada dasarnya menjalankan fungsi yang sama dengan ekspresi match milik Rust
- Mendukung pattern matching, dan tidak memiliki
fallthrough
enum di Swift dapat langsung memuat method, sehingga bisa digunakan lebih berorientasi objek dibanding Rust
- Optional type (
T?) adalah konsep yang sama dengan Option<T> di Rust, dan nil setara dengan None
- Di Swift, unwrapping yang aman bisa dilakukan dengan sintaks
if let val
- Penanganan error mirip dengan tipe
Result di Rust, dan do-catch serta try di Swift adalah struktur yang sama yang dibungkus dengan sintaks familier
Perbedaan perilaku kompiler
- Kompiler Rust berfokus pada deteksi masalah dan peringatan; misalnya, saat mendefinisikan recursive enum, Rust memaksa penggunaan
Box<>
- Swift menangani recursive enum hanya dengan keyword
indirect, dan kompiler mengotomatiskan pengelolaan pointer internal
- Swift memiliki lebih banyak proses otomatis dibanding Rust, sehingga developer lebih jarang perlu menangani struktur memori secara langsung
Kepraktisan dan ekstensibilitas bahasa Swift
- Swift dirancang untuk menggantikan Objective-C, sehingga menjadi bahasa yang lebih besar dan praktis
- Beragam fitur sudah terintegrasi, seperti class/inheritance, async-await, actors, lazy property, property wrappers, Result Builders
- Dengan desain “progressive disclosure”, makin jauh proses belajar, makin banyak fitur yang terlihat
Keseimbangan antara kenyamanan dan performa
- Swift adalah bahasa yang mudah untuk mulai dan produktif, sedangkan Rust adalah bahasa yang pada dasarnya cepat
- Rust: “cepat sebagai default”, Swift: “kenyamanan sebagai default”
- Rust cocok untuk sistem, embedded, compiler, browser engine
- Swift cocok untuk UI, server, sebagian komponen sistem operasi, dan area penggunaan kedua bahasa makin saling tumpang tindih
Ekspansi lintas platform Swift
- Swift bukan lagi bahasa khusus Apple
- Windows: The Browser Company memakainya untuk berbagi kode browser Arc
- Linux: Apple mendukung Swift on Server dan mensponsori konferensi
- Embedded Swift: digunakan pada perangkat kecil seperti Panic Playdate
- Blog resmi Swift memperkenalkan proyek Windows, Embedded, Linux(Gnome), Playdate
- Swift juga sedang meningkatkan pengalaman pengembangan di luar Xcode melalui ekstensi VSCode, open-source LSP, dan lainnya
Keterbatasan Swift dan posisinya saat ini
- Waktu kompilasi lambat, sama seperti Rust
- Bahasa ini membesar karena feature creep, dan sebagian sintaks masih terasa asing
- Ekosistem paket masih kurang matang dibanding Rust
- Namun Swift sudah memiliki stabilitas ABI, Automatic Reference Counting (ARC), fitur pemilihan ownership, dan paket kompatibel Linux sebagai bahasa lintas platform
- Swift kini menempatkan diri sebagai alternatif yang lebih praktis dibanding Rust, hadir bukan sebagai masa depan yang masih ditunggu, tetapi sebagai pilihan saat ini
1 komentar
Opini Hacker News
Sebagian besar setuju, tetapi justru di detail-detailnya terlihat inti masalahnya
Xcode adalah IDE yang kasar yang sering macet pada proyek besar saat me-refresh paket atau menangani banyak target. Bahkan jika ingin memperbaikinya, patch biner pun tidak memungkinkan
Sistem build-nya juga jauh lebih mudah ditangani di Cargo dibanding SPM. Sistem makro masih bergantung pada code generation eksternal
Linter dan formatter memang ada, tetapi kualitasnya rendah. Swift punya banyak performance cliff, dan inferensi tipenya dua arah sehingga melambat pada ekspresi yang kompleks. Ini terutama bermasalah pada use case utama seperti SwiftUI
Import terikat di tingkat modul, jadi mengubah satu file saja mengharuskan seluruh modul dikompilasi ulang. Pemisahan class dan struct juga terasa canggung karena kompatibilitas ObjC
Pada akhirnya Swift mungkin bisa menjadi bahasa yang lebih mudah daripada Rust, tetapi dalam praktiknya terasa tidak demikian karena ketidakmatangan toolchain
Model memori semi-otomatis Swift terasa jauh lebih sulit ditangani dibanding Rust atau Go
swift. Ini berjalan cukup baik juga di Linux dan WindowsDisebutkan bahwa saat merepresentasikan struktur tree sebagai enum di Rust diperlukan
Box, tetapi sebenarnya itu tidak perlu karenaVecsudah menyediakan referensi heapEnum, struct, union, bahkan tipe primitif di Rust semuanya bisa memiliki metode. Misalnya, pemanggilan seperti
'F'.to_digit(16)itu memungkinkanBahkan raw pointer pun bisa diberi metode. Menurut saya, ini bagian dari desain Rust yang modern
VecdanBox.Vecadalah handle berukuran tetap saat kompilasi, sedangkanBoxdiperlukan saat menangani unsized typeBoxVec<T>sendiri adalah handle berukuran tetap yang menunjuk ke data di heap, jadiBoxtidak diperlukanSwift adalah bahasa yang keren, tetapi di sisi server-side kurang meyakinkan
Ekosistemnya kecil, dan dibanding Go atau Rust tidak ada banyak yang bisa didapat. Dukungan VSCode juga kurang, dan saya tidak ingin memakai Xcode
Pengembangan server sudah ditempati oleh Python, TypeScript, Go, dan Rust. Ekosistem Apple yang tertutup juga menjadi beban
Kualitas IDE-nya lebih baik daripada bahasa lain, meski saya rasa Rust tetap lebih cocok untuk system programming
Swift sekarang disebut sebagai bahasa lintas platform, tetapi di Linux ekosistemnya masih tetap berpusat pada Apple
Dokumentasi, tutorial, dan library semuanya ditulis dengan asumsi macOS. Saya jadi penasaran apakah benar ada orang yang memakai Swift tanpa perangkat Apple
Saya merangkum pengalaman saat membuat klien WebSocket di blog
versi 2023 / versi 2025
Dukungan Android memang menarik, tetapi saya merasa Kotlin sudah cukup
Secara pribadi saya mengelola library agar mendukung sampai Windows. Belum sempurna, tetapi perlahan membaik
switchdi Swift pada dasarnya adalah ekspresi match. Hanya sintaksnya yang berbeda, tetapi tetap melakukan pattern matchingswitchlama demi mengurangi kebingungan developerArtinya, makna baru diperkenalkan lewat sintaks yang sudah familiar agar transisinya berlangsung bertahap
Pendekatan seperti ini mengarah ke diskusi menarik tentang seberapa jauh bahasa perlu mengejar desain yang kuat pendapatnya
Inti Rust adalah zero-cost abstraction. Swift tidak mengikuti prinsip ini
Banyak fitur Rust dirancang untuk mematuhi aturan tersebut, dan model ownership adalah contoh utamanya
Ada kurva belajar, tetapi hal ini meningkatkan efisiensi pengembangan
Disebutkan bahwa browser Arc memakai Swift untuk Windows, tetapi setelah pengembangan dihentikan tampaknya pekerjaan terkait itu juga dibatalkan
Alasan saya lebih memilih Rust adalah karena tidak ada ketergantungan pada perusahaan besar. Saya merasa Apple bisa saja meninggalkan Swift
Hal itu juga tercantum di dokumen wiki
Dengan memanfaatkan fitur reference counting di Rust, kenyamanan yang dicari bisa didapat tanpa harus pindah ke Swift
Dengan
Rc, referensi bersama yang immutable bisa digunakan, dan dengan interior mutability, perubahan berbasis pemeriksaan runtime juga dapat diimplementasikandokumentasi Rc, dokumentasi interior mutability
Rctidak akan dipakai di thread yang salahSaya pernah membuat alat analisis dan compiler untuk Linux dengan Swift dan Rust
Swift memudahkan pengelolaan memori berkat ARC, sementara Rust menuntut lebih banyak pemikiran, tetapi kualitas tooling-nya jauh lebih baik
Dukungan Clippy dan LSP sangat bagus, dan Swift juga punya banyak fitur bawaan
Namun karena komunitas Rust lebih besar, lebih mudah mencari orang, dan saya juga melihat Swift punya potensi sebagai bahasa pengganti C++