Ownership

Ownership

Rust punya fitur utama yang dikenal dengan "ownership". Fitur ownership merupakan sistem untuk mengatur alokasi memori di Rust, sehingga penggunaan memori menjadi maksimal. Rust tidak memiliki garbage collector. karena Rust kompilator akan mengecek kode kita di runtime saat proses kompilasi kode berlangsung.

Untuk memahami konsep ownership kita perlu paham dulu bagian dari memori yang dikenal dengan heap dan stack.

Heap & Stack

Stack dan heap memiliki struktur yang berbeda, stack menyimpan data yang diketahui, biasanya ukurannya harus pasti dan tidak berubah-ubah, sehingga akses data di stack lebih cepat, berbeda dengan heap yang butuh alokasi tempat yang cukup besar di memori karena kepastian datanya bisa berubah-ubah.

Ownership Rules

  • Nilai di Rust memiliki variable owner sendiri atau pemilik data tunggal.
  • Hanya ada satu owner.
  • Owner hanya akan valid di dalam ruang lingkupnya, jika berada diluar maka tidak akan valid lagi.

References & Borrowing

Setelah membahas tentang ownership di Rust, selanjutnya ada bahasan tentang “References & Borrowing” hal ini sangat berkaitan dengan materi ownership atau bisa dibilang bagian dari ownership.

Kenapa Rust menggunakan istilah references & borrowing, karena konsep ini menjelaskan tentang perbedaan antara pemilik dan peminjam. Syaratnya data hanya punya satu pemilik tunggal, jika datanya beralih ke tangan yang lain, peminjam hanya berhak untuk meminjam sementara, dan tidak memiliki akses full terhadap apa yang dipinjam, sehingga hanya akan ada satu pemilik data yang tersimpan di memori, hal ini mencegah race condition dalam perubahan data.

References itu standarnya immutable, syntax nya seperti ini &T. Di Rust bisa merubah sifat references dari immutable ke mutable, istilah ini dikenal dengan mutable references, syntax nya seperti ini &mut T cukup menambahkan mut.

fn main() {
let x = 1;
let b = &x; // references
let mut a = 2;
let c = &mut a; // mutable references
println!("{} {}", b, c); // 1 2
}