0%loading

Surat Cinta untuk Rust

Logo Resmi Rust

Ada pepatah lama di dunia pemrograman yang bilang: "Bahasa yang baik adalah bahasa yang membuatmu nyaman." Selama bertahun-tahun, aku mempercayai itu. Aku nyaman dengan bahasa tingkat tinggi yang pemaaf, yang membiarkanku menulis apa saja tanpa banyak protes, dan baru meledak di tengah malam saat kode sudah berjalan di produksi.

Lalu, aku memutuskan untuk belajar Rust.

Awalnya tidak ada kata romantis. Tidak ada kilauan cinta pada pandangan pertama. Yang ada hanyalah rasa kesal, layar terminal yang dipenuhi teks merah, dan pertanyaan yang terus berulang di kepala: “Kenapa hal sesederhana meminjam data saja harus didebat sepanjang ini?”

Namun, semakin dalam aku menyelami ekosistem ini, semakin aku menyadari sesuatu yang mengubah cara pandangku selamanya: Rust tidak sedang mempersulit hidupku. Rust sedang mengajariku cara berpikir yang benar.

Dan pelan-pelan, aku jatuh cinta.


1. Kompiler yang Menolak Menyerah Padamu

Bagi siapa pun yang pernah berkutat dengan bahasa tingkat rendah seperti C atau C++, pesan error dari kompiler sering kali terasa seperti hukuman mati yang dingin. Kamu mendapatkan segmentation fault (core dumped) tanpa konteks yang jelas, atau pesan error template sepanjang tiga halaman monitor yang lebih mirip mantra kuno daripada instruksi perbaikan.

Rust adalah kebalikannya.

Kompiler Rust (rustc) bukan sekadar program pemeriksa sintaksis; ia terasa seperti seorang mentor senior yang duduk di sebelahmu dengan secangkir teh hangat, menunjuk baris kodenya dengan sabar, dan berkata:

error[E0382]: borrow of moved value: `data`
  --> src/main.rs:18:20
   |
14 |     let data = vec![1, 2, 3];
   |         ---- move occurs because `data` has type `Vec<i32>`
16 |     process(data);
   |             ---- value moved here
18 |     println!("{:?}", data);
   |                      ^^^^ value borrowed here after move
   |
help: consider cloning the value if the performance cost is acceptable
   |
16 |     process(data.clone());
   |                 ++++++++

Perhatikan bagian help:.

Ia tidak hanya memberi tahu apa yang salah, tetapi juga mengapa hal itu berbahaya, dan memberikan saran konkret bagaimana cara memperbaikinya. Ada kehangatan dan rasa hormat yang luar biasa di dalam desain tersebut. Kompiler ini tidak menertawakan ketidaktahuanmu; ia memegang tanganmu dan menolak membiarkanmu merilis kode yang berpotensi cacat.

Di dunia di mana alat kerja sering kali terasa dingin dan mekanis, keramahan rustc terasa sangat manusiawi.


2. Berdamai dengan Sang Borrow Checker

Hambatan terbesar bagi setiap orang yang pertama kali menyentuh Rust adalah Ownership dan Borrowing. Konsep ini seperti tamparan keras bagi siapa saja yang terbiasa mengoper referensi objek ke sana ke mari tanpa aturan yang ketat.

Aturannya terdengar sederhana di atas kertas:

  1. Setiap nilai di Rust memiliki satu pemilik (owner).
  2. Hanya boleh ada satu pemilik dalam satu waktu.
  3. Ketika pemiliknya keluar dari scope, nilai tersebut langsung dibersihkan dari memori.

Tetapi begitu kamu mencoba mengimplementasikan struktur data dasar seperti linked list atau grafik, kamu akan mulai "gelut" dengan Borrow Checker. Kamu ingin meminjam data secara mutable, tapi ternyata ada bagian lain yang sedang membaca data tersebut secara immutable. Kompiler menolak untuk melakukan build.

Dulu aku mengira aturan ini terlalu kaku. Sampai akhirnya datang momen "Aha!".

Momen pencerahan itu tiba saat aku menyadari apa yang sebenarnya dihilangkan oleh aturan tersebut:

  • Tidak ada lagi Null Pointer Exception. Konsep billion-dollar mistake itu lenyap sepenuhnya, digantikan oleh tipe Option<T> yang memaksa kita menangani ketiadaan nilai secara sadar.
  • Tidak ada Use-After-Free. Memori tidak akan pernah diakses setelah dibebaskan.
  • Tidak ada Data Race di tingkat konkurensi. Dua thread mustahil memodifikasi data yang sama secara bersamaan tanpa sinkronisasi yang terbukti aman di waktu kompilasi.

Rasa frustrasi di awal berganti menjadi rasa damai yang luar biasa. Saat sebuah program Rust berhasil dikompilasi, ada keyakinan batin yang sulit dijelaskan: jika kode ini lolos kompilasi, kemungkinan besar ia akan berjalan dengan benar dan kokoh.

Rasa aman itu membuat ketagihan.


3. Zero-Cost Abstraction: Kemewahan Tanpa Beban

Cinta ini tidak hanya karena keselamatannya, tetapi juga karena kecepatannya.

Banyak bahasa pemrograman memaksa kita memilih: apakah kita ingin sintaksis yang elegan dan modern (high-level), atau kita ingin performa mentah yang menyentuh logam mesin (low-level)? Bahasa yang ramah biasanya mengorbankan performa dengan menambahkan Garbage Collector (GC) yang sewaktu-waktu menjeda aplikasi kita. Sebaliknya, bahasa yang cepat sering kali menuntut kode yang verbos dan rentan kesalahan manual.

Rust menolak kompromi tersebut melalui filosofi Zero-Cost Abstractions.

Kamu bisa menulis kode ekspresif dengan iterators, closures, pattern matching, dan traits yang terasa sama elegannya dengan bahasa modern mana pun:

let total: i32 = numbers
    .iter()
    .filter(|&&x| x % 2 == 0)
    .map(|&x| x * x)
    .sum();

Dan kompiler akan mengoptimalkannya sedemikian rupa hingga kode tingkat tinggi tersebut turun menjadi loop assembly yang secepat—bahkan terkadang lebih cepat daripada—kode C tulisan tangan. Tidak ada alokasi memori tambahan yang tersembunyi. Tidak ada overhead pemanggilan fungsi virtual jika tidak diminta. Tidak ada GC yang mengintip di latar belakang.

Ini adalah bentuk rekayasa perangkat lunak dalam wujud paling murni: keindahan matematis di permukaan, tenaga buas tanpa ampun di bawah kap mesin.


Epilog: Mengapa Rust Mengubah Segalanya

Belajar Rust bukan sekadar menambah satu baris bahasa baru di CV. Belajar Rust terasa seperti memasang lensa baru di mataku sebagai seorang engineer.

Setelah memahami ownership, lifetimes, dan aliasing, caraku menulis kode di bahasa lain ikut berubah. Aku mulai lebih memikirkan siapa yang memiliki data ini, kapan sebuah alokasi heap benar-benar dibutuhkan, dan bagaimana siklus hidup sebuah objek berjalan di memori.

Rust adalah bukti nyata bahwa sebuah teknologi tidak harus memilih antara menjadi aman atau menjadi cepat, antara menjadi ketat atau menjadi membantu.

Jika kamu belum pernah mencobanya, bersiaplah untuk berdebat dengan kompilernya di minggu pertama. Tapi percayalah, begitu kamu memahami apa yang sedang ia lindungi, kamu tidak akan pernah memandang pemrograman dengan cara yang sama lagi.

Dan mungkin, kamu juga akan jatuh cinta.

Berlangganan via RSSDapatkan tulisan terbaru langsung di RSS reader kamu.
Buka feed
Logo

© 2026 Raditya Alfarisi

GithubLinkedInInstagramKaggleChess.comHugging Face