2 poin oleh GN⁺ 2026-02-01 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2026-02-01
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

    • Saya pernah membuat aplikasi SwiftUI kecil, tetapi kebocoran memori-nya sangat sulit ditemukan. Bahkan setelah dianalisis dengan Instruments dan vmmap, memorinya tetap bocor puluhan MB per hari
      Model memori semi-otomatis Swift terasa jauh lebih sulit ditangani dibanding Rust atau Go
    • Jika bukan aplikasi iOS/macOS, Anda bisa sepenuhnya melewati Xcode dan cukup memakai CLI swift. Ini berjalan cukup baik juga di Linux dan Windows
    • Swift mendukung LSP, jadi pengembangan juga bisa dilakukan di VSCode, Zed, Sublime Text, dan lain-lain. Jika bukan pengembangan khusus Apple, Xcode bukan keharusan
    • Di Swift lama, hanya karena satu-dua baris literal dictionary, build pernah memakan waktu 30 menit
    • Sebagian besar masalah kecepatan kompilasi bisa dikurangi dengan pemisahan per paket dan penentuan tipe secara eksplisit. SPM bekerja lebih baik dari yang diduga
  • Disebutkan bahwa saat merepresentasikan struktur tree sebagai enum di Rust diperlukan Box, tetapi sebenarnya itu tidak perlu karena Vec sudah menyediakan referensi heap

    • Karena saya cukup paham Rust, kesalahan ini sendiri tidak terlalu mengganggu, tetapi saya jadi khawatir apakah penjelasan tentang Swift juga keliru dengan cara yang mirip
      Enum, struct, union, bahkan tipe primitif di Rust semuanya bisa memiliki metode. Misalnya, pemanggilan seperti 'F'.to_digit(16) itu memungkinkan
      Bahkan raw pointer pun bisa diberi metode. Menurut saya, ini bagian dari desain Rust yang modern
    • Contoh enum Swift dipakai untuk menunjukkan bagusnya syntactic sugar, tetapi pada praktiknya dukungan union type lemah sehingga banyak developer malah menyalahgunakan optional alih-alih enum
    • Mudah untuk bingung membedakan Vec dan Box. Vec adalah handle berukuran tetap saat kompilasi, sedangkan Box diperlukan saat menangani unsized type
    • Saya mengujinya di Rust 1.92 dan ternyata bekerja baik tanpa Box
    • Vec<T> sendiri adalah handle berukuran tetap yang menunjuk ke data di heap, jadi Box tidak diperlukan
  • Swift 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

    • Saya memang pernah membuat backend dengan integrasi langsung ke library C memakai Swift. Semuanya berjalan baik tanpa FFI dan performanya juga bagus
      Kualitas IDE-nya lebih baik daripada bahasa lain, meski saya rasa Rust tetap lebih cocok untuk system programming
    • Saya pernah mencoba proyek pribadi dengan Swift Vapor, tetapi kecepatan kompilasi dan pengujian-nya lebih lambat daripada Go sehingga agak mengecewakan
  • 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

    • Dokumentasi Apple tidak menjelaskan batasan Linux dengan jelas, jadi saya banyak mengalami trial and error
      Saya merangkum pengalaman saat membuat klien WebSocket di blog
      versi 2023 / versi 2025
    • Developer Apple bilang Swift juga bagus di Linux, tetapi dalam kenyataannya ekosistem Rust jauh lebih unggul
    • Saya pernah mencoba memindahkan tool CLI untuk Mac ke Linux, tetapi mengubahnya menjadi kode Go dengan bantuan LLM ternyata lebih cepat dan mudah
      Dukungan Android memang menarik, tetapi saya merasa Kotlin sudah cukup
    • Karena banyak contoh berpusat pada Apple, muncul masalah saat cross-compiling. Misalnya, NSHashTable tidak ada di platform selain Apple
    • Swift memungkinkan pengelolaan versi compiler dengan tool swiftly yang mirip rustup, dan LSP-nya juga bekerja baik
      Secara pribadi saya mengelola library agar mendukung sampai Windows. Belum sempurna, tetapi perlahan membaik
  • switch di Swift pada dasarnya adalah ekspresi match. Hanya sintaksnya yang berbeda, tetapi tetap melakukan pattern matching

    • Dari sudut pandang perancang bahasa, ini tampak seperti strategi untuk mempertahankan sintaks switch lama demi mengurangi kebingungan developer
      Artinya, 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

    • Model ownership Rust yang eksplisit mencegah error runtime yang bisa muncul pada actor atau Task di Swift sejak tahap build
      Ada kurva belajar, tetapi hal ini meningkatkan efisiensi pengembangan
    • Swift juga mendukung model ownership, tetapi tidak seketat Rust
  • 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

    • Tetapi kemungkinan Apple meninggalkan Swift rendah. Rust justru bisa lebih berisiko karena ketergantungannya pada komunitas lebih besar
    • Sebagian besar software Apple ditulis dengan Swift, jadi tidak ada alasan bagi mereka untuk meninggalkannya
    • Go juga terikat ke Google, C# ke Microsoft. Karena Swift juga open source, saya rasa sulit mengkritiknya dengan logika yang berbeda
    • Swift memang dibuat Apple, tetapi dipelihara oleh komunitas open source
      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 diimplementasikan
    dokumentasi Rc, dokumentasi interior mutability

    • Di lingkungan single-thread digunakan Rc, sedangkan di multithread digunakan Arc. Berkat trait Send, Rc tidak akan dipakai di thread yang salah
    • Namun ada kekurangan berupa kode yang menjadi terlalu verbose
  • Saya 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++