4 poin oleh GN⁺ 2024-09-07 | 1 komentar | Bagikan ke WhatsApp

Rust

  • Rust adalah bahasa yang sangat dicintai, cepat, dan memiliki komunitas yang hebat
  • Rust memperkenalkan konsep ownership untuk menyelesaikan masalah manajemen memori
  • Menyediakan utilitas seperti Rc, Arc, Cow untuk mendukung reference counting dan "clone-on-write"
  • Saat diperlukan pekerjaan tingkat lebih rendah, sistem unsafe dapat digunakan untuk mengakses raw C pointer
  • Rust memiliki berbagai ciri bahasa fungsional seperti tagged enum, match expression, first-class function, dan sistem tipe yang kuat
  • Menggunakan compiler berbasis LLVM sehingga dapat dikompilasi ke native code dan WASM

Swift

  • Swift juga telah digunakan selama beberapa tahun, dan saat mempelajari Rust terlihat kemiripannya dengan Swift
  • Swift juga memiliki ciri bahasa fungsional seperti tagged enum, match expression, dan first-class function
  • Swift pada dasarnya menggunakan value type dan memiliki semantik "copy-on-write"
  • Saat dibutuhkan performa yang lebih cepat, kita dapat memilih sistem ownership untuk "move" nilai
  • Saat diperlukan pekerjaan tingkat lebih rendah, sistem unsafe dapat digunakan untuk mengakses raw C pointer
  • Swift juga menggunakan compiler berbasis LLVM sehingga dapat dikompilasi ke native code dan WASM

Déjà vu?

  • Swift dan Rust memiliki set fitur yang sangat mirip
  • Perbedaan besarnya ada pada sudut pandang
  • Jika melihat model memori dasarnya, perbedaannya menjadi jelas

Rust bersifat top-down, Swift bersifat bottom-up

  • Rust dimulai sebagai bahasa sistem tingkat rendah lalu menyediakan alat untuk naik ke tingkat yang lebih tinggi
  • Swift dimulai sebagai bahasa tingkat tinggi lalu menyediakan alat untuk turun ke tingkat yang lebih rendah
  • Model manajemen memori adalah contoh yang paling jelas
  • Swift pada dasarnya menggunakan value type dan memiliki semantik "copy-on-write"
  • Rust memudahkan penggunaan nilai yang "moved" dan "borrowed", tetapi membutuhkan pekerjaan tambahan untuk menggunakan nilai Cow
  • Swift memudahkan penggunaan nilai "copy-on-write", tetapi sebagai gantinya membutuhkan pekerjaan tambahan saat menggunakan borrowing dan move
  • Rust pada dasarnya lebih cepat, sedangkan Swift pada dasarnya lebih sederhana dan mudah

Swift menyembunyikan ide-ide Rust dalam sintaks mirip C

  • Sintaks Swift menyembunyikan konsep bahasa fungsional dalam sintaks mirip C sehingga pengembang lebih mudah menerimanya
  • Perbandingan antara pernyataan match di Rust dan pernyataan switch di Swift
  • Pernyataan switch di Swift pada dasarnya sama dengan match expression, hanya dengan nama dan sintaks yang berbeda
  • Swift memungkinkan penambahan method langsung ke enum

Tipe opsional

  • Rust tidak memiliki null, tetapi memiliki None
  • Swift memiliki nil, tetapi pada dasarnya itu sama dengan None
  • Swift menggunakan T? alih-alih Option, dan memaksa compiler untuk memastikan nilainya bukan nil
  • Di Swift, tipe opsional dapat digunakan dengan mudah

Penanganan error

  • Rust tidak memiliki try-catch, tetapi menggunakan tipe Result
  • Swift menggunakan do-catch alih-alih try-catch, dan try harus digunakan sebelum pemanggilan fungsi
  • Penanganan error di Swift mirip dengan Rust, tetapi disamarkan dengan sintaks yang lebih familier

Compiler Rust menangkap masalah, compiler Swift menyelesaikan sebagian masalah

  • Compiler Rust menangkap banyak masalah umum pada waktu kompilasi dan menyarankan solusinya
  • Contoh self-referential enum
  • Swift menggunakan kata kunci indirect untuk menandai recursive type, lalu compiler menangani sisanya

Swift kurang "murni"

  • Swift dirancang untuk menggantikan Objective-C, sehingga harus dapat berinteraksi dengan kode yang sudah ada
  • Swift mengambil banyak pilihan praktis, dan merupakan bahasa yang lebih besar daripada Rust
  • Swift dirancang dengan "progressive disclosure" dalam pikiran, sehingga semakin banyak belajar bahasanya, semakin banyak fitur yang terbuka
  • Beberapa fitur bahasa Swift:
    • class / inheritance
    • async-await
    • async-sequences
    • actors
    • getter dan setter
    • lazy properties
    • property wrappers
    • Result Builders (mis: HTML / SwiftUI)

Harga dari kenyamanan

  • Swift adalah bahasa yang lebih mudah untuk mulai digunakan dan meningkatkan produktivitas
  • Sintaksnya lebih familier dan banyak pekerjaan ditangani secara otomatis
  • Swift adalah bahasa tingkat lebih tinggi, dan itu membawa trade-off yang sama
  • Secara default, program Rust jauh lebih cepat daripada program Swift
  • Rust secara default cepat dan memungkinkan Anda membuatnya lebih lambat, sedangkan Swift secara default mudah dan memungkinkan Anda membuatnya lebih cepat
  • Kedua bahasa memiliki kegunaannya masing-masing
    • Rust lebih cocok untuk pemrograman sistem dan embedded
    • Swift lebih cocok untuk menulis UI dan server
  • Seiring waktu, area tumpang tindih antara kedua bahasa ini diperkirakan akan makin besar

Ringkasan GN⁺

  • Artikel ini membandingkan serta menjelaskan persamaan dan perbedaan antara Swift dan Rust
  • Swift meminjam banyak ide dari Rust dan menyajikannya dengan sintaks yang lebih familier
  • Kedua bahasa memiliki kekuatan dan kegunaannya masing-masing, dan diperkirakan akan memiliki lebih banyak area tumpang tindih seiring waktu
  • Membantu memahami perbedaan dalam berbagai aspek seperti model manajemen memori, penanganan error, dan tipe opsional pada Swift dan Rust
  • Bahasa lain dengan fitur serupa antara lain Kotlin dan TypeScript

1 komentar

 
GN⁺ 2024-09-07
Opini Hacker News
  • Alasan orang yang baru pertama kali memakai Rust menyukai Rust adalah karena mereka baru pertama kali mengenal bahasa keluarga ML

    • Rust menyediakan komunitas yang akrab bagi para peretas Unix
  • Rust adalah bahasa pertama yang membawa manajemen memori otomatis non-GC ke arus utama

    • Ada juga alternatif seperti Swift, OCaml, dan Scala
  • Era Smalltalk sudah berakhir, sekarang adalah era ML

    • Bahasa-bahasa pada tahun 2000-an berasal dari Smalltalk
    • Bahasa-bahasa baru berasal dari keluarga ML
    • Jika belajar Scala, Rust atau Swift juga akan lebih mudah dipelajari
  • Saat mengerjakan integrasi Rust ke aplikasi iOS Swift, muncul keinginan untuk lebih banyak memakai Swift

    • Swift bisa dipakai lintas platform, tetapi utamanya menargetkan platform Apple
    • Rust memiliki berbagai sistem paket
    • Paket Swift sering bergantung pada API OS sehingga tidak berjalan di Linux atau WASM
    • Ada kasus IBM menyerah memakai Swift di server
  • Rust memperkenalkan konsep ownership untuk menyelesaikan masalah manajemen memori, tetapi bukan penemunya

    • Bahasa seperti Cyclone memberi pengaruh
  • Rust dan Swift masing-masing punya keunggulan

    • Swift memiliki sintaks yang lebih ringkas, tetapi beberapa area bersifat khusus compiler
    • Di luar ekosistem Apple, Swift hanya menjadi bahasa terpenting kedua atau ketiga
    • Jika masalah ini tidak terselesaikan, Swift kemungkinan akan tetap menjadi bahasa yang terutama khusus Apple
  • Tooling Swift lebih tidak nyaman daripada Rust

    • Xcode tidak didukung pada MacBook Air 2018 yang memakai macOS 12
    • SourceKit-LSP diperlakukan sebagai alat yang tingkat kepentingannya kedua
    • Rust 1.81 dan rust-analyzer bekerja dengan baik
  • Pernah mencoba mempelajari Rust, tetapi kesulitan karena contoh-contohnya terlalu rumit

    • Kode contoh di situs web Rust terlalu kompleks
  • Swift bisa langsung menambahkan metode ke enum

    • Di Rust, hal yang sama juga bisa dilakukan
  • Swift secara default memakai value type dan menggunakan copy-on-write semantics

    • Ini hanya berlaku untuk array, dictionary, dan string
    • Value type Swift langsung disalin
  • Setiap kali membaca tulisan yang memuji Swift, muncul rasa penasaran tentang pengalaman para pengembang yang tidak memakai ekosistem Apple/macOS

    • Belum pernah bertemu pengembang Swift yang tidak memakai macOS
    • Bukan hanya standard library, tetapi juga tooling, LSP, library, tutorial, dan lain-lain itu penting
    • Percaya bahwa Swift adalah bahasa yang bagus, tetapi tampaknya hanya bagus di macOS
  • Ingin tahu apakah saya satu-satunya yang tidak suka sintaks titik di Zig dan Swift

    • .variant vs Type::Variant
    • Dalam kode yang cukup panjang atau kompleks, rasanya tidak nyaman jika nama tipenya tidak ada di dekatnya
    • Terutama begitu jika memakai editor tanpa fitur seperti IDE