Apa itu Rust? — Rust

Pernah dengar berita "aplikasi crash karena null pointer" atau "memori bocor di server"? Itu bug klasik dari C/C++ yang udah berdekade ada — sampe Microsoft…

Rust adalah bahasa pemrograman yang di-compile dan menjaga keamanan memori tanpa garbage collector: sebelum program boleh jalan, compiler-nya memeriksa seluruh kode, termasuk cara kode memakai memori. Bayangin Kedai Martabak Bang Rusdi. Sebelum kedai buka, Bang Rusdi membaca semua catatan kerja malam itu baris demi baris. Kalau ada yang gak masuk akal, misalnya nota pesanan sudah diserahkan ke dapur tapi kasir masih mau memakainya, kedai gak dibuka sampai catatannya dibetulkan. Karena semuanya beres sebelum buka, selama jam ramai gak perlu ada petugas yang keliling membereskan meja. Catatan kerja itu kode Rust-mu, pemeriksaan sebelum buka itu compiler, dan petugas keliling yang gak dibutuhkan itu garbage collector.

🧪 Tebakan cepat: di program kedai, baris ketiga ditulis println("Martabak manis: {}", 32000);, tanpa tanda seru. Waktu cargo run dijalankan, apakah baris kedua (Kedai Martabak Bang Rusdi) tetap tercetak? Tebak dulu, jawabannya ada di bagian "Compiler memeriksa dulu".

Program Rust pertamamu

Sepanjang track Rust ini kita membangun satu program yang terus tumbuh: kasir Kedai Martabak Bang Rusdi. Menunya martabak manis Rp32.000, martabak telur Rp38.000, dan es teh Rp5.000. Semua harga disimpan sebagai angka bulat rupiah. Di dapur ada stok 250 butir telur, dan satu martabak telur memakai 3 butir.

Program Rust dibuat dengan Cargo, alat bawaan Rust untuk membuat, meng-compile, dan menjalankan project:

$ cargo new kedai
    Creating binary (application) `kedai` package

Cargo membuat folder kedai berisi Cargo.toml (nama dan versi project) dan src/main.rs (kodenya). Isi src/main.rs dengan ini:

fn main() {
    println!("Kedai Martabak Bang Rusdi");
    println!("Martabak manis: {}", 32000);
    println!("2 porsi: {}", 32000 * 2);
}

Lalu jalankan dari dalam folder kedai:

$ cargo run
   Compiling kedai v0.1.0 (/home/kamu/kedai)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.47s
     Running `target/debug/kedai`
Kedai Martabak Bang Rusdi
Martabak manis: 32000
2 porsi: 64000

Di komputermu sendiri, pasang Rust lewat rustup dari rustup.rs, lalu cek dengan rustc --version. Hasilnya mirip rustc 1.99.0 (b940084d7 2026-09-28). rustc adalah compiler-nya, Cargo yang memanggilnya. Di latihan BelajarWeb.dev, tombol Jalankan memakai simulator Rust di browser, jadi kamu belum perlu meng-install apa pun.

Compiled: dicek dulu, jadi satu file program

Ada dua waktu yang perlu kamu bedakan. Compile time adalah saat compiler memeriksa dan menerjemahkan kodemu. Runtime adalah saat program hasilnya benar-benar jalan.

File hasil compile itu binary: kode mesin yang langsung dijalankan prosesor. Komputer tujuannya gak perlu meng-install Rust. Kalau kamu cargo run lagi tanpa mengubah kode, Cargo gak compile ulang: barisnya jadi Finished ... in 0.00s dan programnya langsung jalan.

Compiler memeriksa dulu

Ini kode tebakan tadi, baris 3 tanpa !:

$ cargo run
   Compiling kedai v0.1.0 (/home/kamu/kedai)
error[E0423]: cannot find function `println` in this scope
 --> src/main.rs:3:5
  |
3 |     println("Martabak manis: {}", 32000);
  |     ^^^^^^^ not found in this scope
  |
  = note: a macro named `println` exists in another namespace
help: use `!` to invoke the macro
  |
3 |     println!("Martabak manis: {}", 32000);
  |            +

For more information about this error, try `rustc --explain E0423`.
error: could not compile `kedai` (bin "kedai") due to 1 previous error

Aman soal memori, tanpa garbage collector

Program menyimpan data (teks pesanan, angka harga) di memori. Data yang sudah gak dipakai harus dibuang, supaya memorinya bisa dipakai lagi. Ada tiga cara bahasa pemrograman mengurusnya:

Contohnya, nota pesanan yang sudah diserahkan ke dapur lalu masih dipakai kasir:

fn main() {
    let pesanan = String::from("Martabak manis");
    let dapur = pesanan;
    println!("Dimasak: {}", dapur);
    println!("Pesanan: {}", pesanan);
}
error[E0382]: borrow of moved value: `pesanan`
 --> src/main.rs:5:29
  |
2 |     let pesanan = String::from("Martabak manis");
  |         ------- move occurs because `pesanan` has type `String`, which does not implement the `Copy` trait
3 |     let dapur = pesanan;
  |                 ------- value moved here
4 |     println!("Dimasak: {}", dapur);
5 |     println!("Pesanan: {}", pesanan);
  |                             ^^^^^^^ value borrowed here after move

let membuat variabel (kotak bernama berisi nilai), dan String::from(...) membuat teks yang bisa dipindah. Baris 3 memindahkan teks itu ke dapur, jadi pesanan sudah kosong. Borrow checker menolaknya saat compile, bukan saat program jalan, jadi Dimasak: Martabak manis pun gak sempat tercetak. Saran help:-nya: pesanan.clone(), membuat salinan. Aturan lengkapnya ada di pelajaran ownership dan borrowing nanti.

🎯 Rust dipakai buat apa

Rust dirilis versi 1.0 tahun 2015 dan kini dikelola Rust Foundation. Untuk script sekali pakai atau halaman web biasa, JavaScript atau Python biasanya lebih cepat ditulis.

⚠️ Jebakan yang sering ketemu

TL;DR: Rust adalah bahasa compiled yang aman soal memori tanpa garbage collector. cargo new kedai membuat project, kodenya di src/main.rs, dan cargo run meng-compile lalu menjalankannya. Program mulai dari fn main(), println! (pakai !, karena macro) mencetak satu baris, dan {} diisi nilai setelah koma. Compiler memeriksa semuanya di compile time: kalau ada error, gak ada satu baris pun yang jalan. Borrow checker juga bekerja saat compile, memastikan data gak dipakai setelah dipindah, jadi bug memori ketahuan sebelum program jalan dan gak perlu garbage collector saat runtime.

Yang akan kamu pelajari