diff --git a/post/belajar-rust-ownership/index.html b/post/belajar-rust-ownership/index.html index abc90c6..ee68983 100644 --- a/post/belajar-rust-ownership/index.html +++ b/post/belajar-rust-ownership/index.html @@ -226,7 +226,7 @@

Ownership

let mut crew2 = crew; -

Pada baris pertama, Rust mengalokasikan memori untuk obyek vektor crew kedalam stack, tapi selain itu Rust juga mengalokasikan beberapa memori di heap untuk data aktual (["Monkey D. Luffy", "Roronoa Zoro", "Vinsmoke Sanji"]) lalu Rust menyalin alamat memori di heap tadi kedalam pointer internal yang merupakan bagian dari obyek vektor tadi yang ditempatkan di stack (ini disebut data pointer). Kedua bagian dari vektor (satu di stack dan satu lagi di heap) panjang (length), capacity (kapassitas) dan lain-lain adalah sama nilainya.

+

Pada baris pertama, Rust mengalokasikan memori untuk obyek vektor crew kedalam stack, tapi selain itu Rust juga mengalokasikan beberapa memori di heap untuk data aktual (["Monkey D. Luffy", "Roronoa Zoro", "Vinsmoke Sanji"]) lalu Rust menyalin alamat memori di heap tadi kedalam pointer internal yang merupakan bagian dari obyek vektor tadi yang ditempatkan di stack (ini disebut data pointer). Kedua bagian dari vektor (satu di stack dan satu lagi di heap) panjang (length), capacity (kapasitas) dan lain-lain adalah sama nilainya.

Ketika kita memindahakan crew ke crew2, Sebenarnya Rust menyalin bitwise dari obyek vektor crew ke dalam alokasi stack untuk crew2 tapi salinan ini tidak membuat kopian dari alokasi di heap yang berisi data aktual. Artinya bahwa akan ada dua pointer untuk kedua obyek vector yang mengarah ke heap yang sama.

@@ -235,7 +235,7 @@

Ownership

crew2.truncate(2);
 
-

sedangkan obyek crew masih diakses maka kita akan mendapatkan obyek vektor yang tidak lagi valid karena obyek crew tidak akan tahu bahwa salah satu elemen telah dihapuskan. Sekarang obyek crew pada stack tidak lagi sama dengan di heap, ini adalah kesalah yang riskan, karena menyebabkan kesalahan segmentasi atau lebih buruknya lagi memunginkan pengguna yang tidak sah untuk membaca alamat memori yang sudah tidak lagi memiliki akses. Inilah sebabnya mengapa Rust melarang untuk menggunakan obyek yang sebelumnya sudah dipindahkan/dipergunakan.

+

sedangkan obyek crew masih diakses maka kita akan mendapatkan obyek vektor yang tidak lagi valid karena obyek crew tidak akan tahu bahwa salah satu elemen telah dihapuskan. Sekarang obyek crew pada stack tidak lagi sama dengan di heap, ini adalah kesalahan yang riskan, karena menyebabkan kesalahan segmentasi atau lebih buruknya lagi memunginkan pengguna yang tidak sah untuk membaca alamat memori yang sudah tidak lagi memiliki akses. Inilah sebabnya mengapa Rust melarang untuk menggunakan obyek yang sebelumnya sudah dipindahkan/dipergunakan.

Copy types