1. Mengapa Ownership Penting?
Ownership adalah konsep paling fundamental dan unik di Rust. Sistem ownership dirancang untuk menyelesaikan masalah keamanan memori yang telah menjadi sumber bug dan kerentanan keamanan selama puluhan tahun di bahasa pemrograman sistem.
Di bahasa seperti C dan C++, programmer bertanggung jawab secara manual untuk mengalokasikan dan membebaskan memori. Ini rentan terhadap berbagai jenis bug:
| Jenis Bug Memori | Penjelasan | Dampak |
|---|---|---|
| Use After Free | Mengakses memori yang sudah dibebaskan | Crash, vulnerability |
| Double Free | Mencoba membebaskan memori dua kali | Crash, corruption |
| Memory Leak | Memori tidak pernah dibebaskan | Penggunaan memori terus naik |
| Buffer Overflow | Menulis di luar batas array | Security exploit |
| Data Race | Dua thread mengakses data bersamaan | Undefined behavior |
| Dangling Pointer | Pointer menunjuk ke memori yang tidak valid | Crash, data corruption |
Pendekatan Berbeda di Berbagai Bahasa
| Bahasa | Pendekatan | Kelebihan | Kekurangan |
|---|---|---|---|
| C / C++ | Manual (malloc/free) | Kontrol penuh, cepat | Rentan bug memori |
| Java / Go | Garbage Collector | Aman, mudah | Overhead, pause |
| Python | Reference Counting + GC | Mudah digunakan | Lebih lambat |
| Rust | Ownership (compile-time) | Aman + cepat, zero-cost | Learning curve curam |
Rust memeriksa keamanan memori saat compile time, bukan runtime. Artinya tidak ada overhead saat program berjalan, dan semua bug memori terdeteksi sebelum program dijalankan. Ini yang disebut "zero-cost safety".
2. Stack dan Heap
Untuk memahami ownership, kita perlu memahami bagaimana memori bekerja di Rust. Ada dua area penyimpanan utama: stack dan heap.
Stack — Penyimpanan Cepat dan Terstruktur
flowchart TD
N0["let s = String::from("'Hi'") ptr: len: 2 cap: 2 l..."]
N1["42 42"]
N0 --> N1