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. Waktucargo rundijalankan, 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
fn main() { ... }adalah titik mulai.fnartinya fungsi, dan Rust selalu menjalankan isimaindari atas ke bawah.println!menulis satu baris ke terminal. Tanda seru!menandai macro: perintah yang ditulis ulang jadi kode lengkap oleh compiler. Untuk sekarang cukup ingat:printlnselalu pakai!.{}di dalam teks adalah tempat kosong. Nilai setelah koma mengisinya, jadi"Martabak manis: {}", 32000tercetakMartabak manis: 32000.32000 * 2dihitung dulu, baru hasilnya,64000, yang dicetak.- Teks ditulis di antara kutip ganda
"...". Tiap perintah diakhiri titik koma;, dan isi blok diberi 4 spasi di depannya. - Tiga baris teratas dari
cargo runitu laporan Cargo: compile, selesai, lalu menjalankantarget/debug/kedai. Tiga baris sesudahnya baru output programmu.
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.
cargo run: compile, lalu langsung jalankan. Paling sering dipakai waktu belajar.cargo build: compile saja. Hasilnya filetarget/debug/kedai, yang bisa dijalankan dengan./target/debug/kedaisebanyak apa pun tanpa compile lagi.cargo build --release: compile dengan optimasi penuh ketarget/release/kedai. Lebih lama compile-nya, lebih cepat jalannya. Ini yang dipasang di server.
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
error[E0423]adalah kode error.rustc --explain E0423menjelaskannya panjang lebar.src/main.rs:3:5artinya filesrc/main.rs, baris 3, kolom 5. Tanda^^^^^^^menunjuk bagian yang salah.help:memberi saran perbaikan, lengkap dengan kodenya. Tanda+menunjukkan karakter yang perlu ditambah: di sini!.- Gak ada satu baris pun yang tercetak, termasuk
Kedai Martabak Bang Rusdidi baris 2 yang benar. Compile gagal, jadi gak ada program yang dijalankan. Itu jawaban tebakannya.
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:
- Garbage collector: petugas yang ikut jalan bersama programmu dan sesekali membuang data yang sudah gak dipakai. JavaScript, Python, Go, dan Java memakainya. Aman, tapi ada kerja tambahan selama program jalan.
- Manual, seperti C dan C++: programmer sendiri yang membuang data. Cepat, tapi salah sedikit bisa fatal, misalnya memakai data yang sudah dibuang. Microsoft pernah melaporkan sekitar 70% celah keamanan yang mereka tangani tiap tahun berasal dari bug memori seperti ini.
- Rust: tiap data punya satu pemilik, dan aturan siapa boleh memakai apa diperiksa saat compile oleh bagian compiler yang namanya borrow checker. Waktu pemiliknya selesai, compiler sendiri yang menyisipkan pembuangan datanya. Hasilnya aman seperti bahasa dengan garbage collector, dan cepat seperti C/C++.
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
- Infrastruktur dan sistem: kernel Linux menerima kode Rust sejak versi 6.1, Cloudflare menulis proxy Pingora dengan Rust, dan Discord pindah dari Go ke Rust untuk satu layanannya karena jeda dari garbage collector.
- Tooling web: SWC (pengganti Babel), Turbopack, Rspack, dan Biome ditulis dengan Rust, makanya cepat.
- Di browser dan desktop: Rust bisa di-compile ke WebAssembly, dan Tauri membuat aplikasi desktop yang lebih ringan dari Electron.
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
- Lupa
!diprintln. Error-nyacannot find function `println` in this scope.println,format, danvecyang kamu temui nanti semuanya macro, jadi pakai!. - Lupa titik koma.
println!("...")tanpa;di akhir menghasilkanexpected `;`, found `println`, menunjuk ke baris sesudahnya. - Teks dengan kutip tunggal.
'Kedai Martabak'bukan teks di Rust. Kutip tunggal cuma untuk satu karakter. Teks selalu"...". - Lupa
{}.println!("Martabak manis:", 32000)ditolak denganargument never used, karena gak ada tempat untuk angkanya.
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.