Roger Wenas

Teknologi Bahasa Pemrograman

29 Apr 2026 0 kali dibaca

Mulai Rust: Aturan yang Aneh, Alasan yang Jelas

Ownership di Rust bukan soal performa. Itu cara compiler memaksa kita menyatakan siapa yang memegang nilai apa, kapan, dan sampai kapan.

2 menit membaca

Rust 1.0 rilis Mei 2015. Pakai serius kira-kira mulai 2018, saat ekosistem cargo + crates.io sudah cukup ramai. Versi stable sekarang sudah di 1.85+, rilis enam minggu sekali.

Setup awal:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
cargo new hello
cd hello
cargo run

rustup mengelola toolchain (stable, beta, nightly). cargo adalah build tool, package manager, dan task runner sekaligus.

Yang baru bagi yang datang dari C++, Go, atau Python: ownership.

fn main() {
    let s = String::from("halo");
    let t = s;
    println!("{}", s); // error: value borrowed after move
}

Saat let t = s; dijalankan, kepemilikan string pindah dari s ke t. Akses s setelah baris itu adalah error compile-time — bukan runtime, bukan warning, bukan undefined behavior. Compiler menolak file ini.

Aturan dasarnya tiga:

  1. Setiap nilai punya satu pemilik.
  2. Hanya satu pemilik pada satu waktu.
  3. Saat pemilik keluar scope, nilai di-drop.

Kalau ingin dua tempat baca tanpa pindah kepemilikan, gunakan borrow (referensi):

fn print_len(s: &String) {
    println!("{}", s.len());
}

fn main() {
    let s = String::from("halo");
    print_len(&s);
    println!("{}", s); // OK, s tetap pemilik
}

Borrow ada dua jenis:

  • &T — borrow immutable, boleh banyak bersamaan.
  • &mut T — borrow mutable, hanya satu pada satu waktu.

Tidak boleh &T dan &mut T ada bersamaan ke nilai yang sama. Compiler menolak. Ini yang membuat data race tidak mungkin terjadi di kode Rust yang valid — bukan karena lock, melainkan karena tipe.

Aneh? Iya, untuk siapa pun yang biasa di bahasa GC. Pertama kali, program sederhana terasa rumit. Compiler menolak hal yang di Python diam-diam jalan.

Tapi itu bukan compiler yang cerewet. Itu compiler yang memaksa kita menyatakan satu hal yang biasanya tersembunyi: siapa yang memegang nilai ini, dan apa yang berhak orang lain lakukan terhadapnya.

Setelah dua minggu, aturan itu jadi otomatis. Bug memori (use-after-free, double-free, data race) hampir mustahil terjadi. Itu yang dibayar oleh "aneh" di awal.

Result<T, E> dan Option<T> adalah dua tipe yang akan Anda temui di setiap kode. Tidak ada null di Rust. None adalah kasus eksplisit dari Option. Setiap fungsi yang bisa gagal mengembalikan Result.

Kompromi: lebih banyak ? operator dan match expression. Hadiah: tidak pernah NullPointerException.

Ekosistem sudah matang. Untuk web/CLI: axum, reqwest, serde, tokio. Untuk embedded: embedded-hal standar de-facto. Untuk WebAssembly: support first-class.

Rust bukan bahasa yang menyenangkan dipelajari dengan cepat. Tapi bahasa yang menyenangkan dipakai setelah Anda terbiasa.

Tulisan terkait

Mungkin terkait

Berdasarkan kemiripan isi tulisan.