Ownership
How Rust manages its memory

@ciazhar
Muhammad Hafidz
- Backend Developer @ mailtarget.co
- medium.com/@ciazhar
- github.com/ciazhar

Sponsored By
Cerita Malam w/ Skuknu

Content
Apa itu Stack dan Heap dan apa perbedaanya ?
1
Stack vs Heap
Berbagai macam tipe memory management dari beragai bahasa pemrograman
2
Memory
Management
Bagaimana cara Rust menggunakan ownership untuk memutakhirkan memory management
3
Ownership

Stack
- Structured
- LIFO
- Fixed Data Size
- Primitive, Pointer, Homogen Tuple

Mekanisme Stack

Heap
- Unstructured
- Flexible Data Size
- String, Vector, Non-Homogen Tuple

Mekanisme Heap

Pointer
Variabel yang menyimpan alamat memori objek

Stack Heap dan Pointer di Rust
Memory Management
1
Manual Allocation & Deallocation
2
Garbage Collector
3
Ownership
Manual Allocation & Dealocation

Alokasi & Dealokasi Memory di C
- Full Control
- Better Performance
- Efficient Memory Management
- Predictable
Pros
Cons
- Expert Only
- Memory Leak
- Memory Management Failure
- Complex
Garbage Collector
Garbage collector adalah sistem manajemen memori yang secara otomatis mengidentifikasi dan menghapus objek yang tidak lagi digunakan dalam program. Tujuannya adalah untuk mencegah memory leaks dan memastikan bahwa resources memory yang tidak digunakan dapat digunakan kembali oleh program.
Definisi Garbage Collector

Garbage Collector di Java
- Easy
- Lower Memory Leak
- Increase Productivity
- Secure
- Automatic Optimization
Pros
Cons
- Overhead Performance
- Low Control
- Increase Memory
- Complex Tuning
Ownership
- Dalam dunia programming, variable scope mendefinisikan area dimana variable bisa digunakan
- Variable bisa digunakan di dalam scope tempat definisi variable, dan juga di inner scope
- Namun variable tidak bisa digunakan di outer scope
Variable Scope

Variable Scope di Rust
- Saat variable keluar dari scope nya, yang artinya tidak bisa diakses lagi, secara otomatis Rust akan memanggil drop function
- Drop function adalah function untuk menghapus data, sehingga akan dibersihkan dari Heap
- Dan jika Rust function() sudah selesai dieksekusi, maka function() tersebut akan dihapus pula dari Stack Frame
Drop Function
- Setiap value di Rust harus punya owner (variable pemilik value)
- Dalam satu waktu, hanya boleh ada satu owner
- Ketika owner keluar scope, value akan dihapus
Ownership Rules

Ownership di Rust

Stack & Heap Lifecycle
- Memory Safety
- No Overhead Performance
- Concurrent Safety
- Efficient
- Predictable Resource Management
Pros
Competitors
- Learning Curve
- Compile Time
Ownership Lanjutan...
Ownership di Stack : Data Copy


Ownership di Heap : Transfer Ownership


Ownership di Heap : Clone


Ownership di Function :
Stack & Heap




Ownership di Function :
Returning Value

Ownership di Function :
Returning Ownership
- Jika kita tidak ingin mengambil Ownership dari parameter, maka ketika membuat function kita harus membuat return value tuple, sangat ribet
- Untungnya Rust menyediakan fitur untuk menggunakan value, tanpa harus melakukan transfer ownership, namanya adalah Reference
Issue dengan Returning Ownership
Lanjut ???
Reference
Reference adalah pointer (penunjuk) yang bisa kita ikuti ke lokasi data aslinya di Heap. Datanya sendiri dimiliki oleh variable lain, bukan si reference.


Borrowing
Borrowing / meminjam adalah aksi dalam membuat reference. Tidak diperbolehkan untuk mengubah value dari variable yang di borrow.

Mutable Reference
Mutable reference adalah reference dengan tanda &mut, dimana artinya kita bisa memodifikasi value dari reference tersebut dengan catatan variable harus mutable juga.

- Dangling pointer adalah kondisi dimana ada reference (pointer) yang menunjuk ke value yang tidak ada di memory
- Di Rust, hal ini tidak diperbolehkan, contoh ketika kita mengembalikan reference dalam function, maka secara otomatis value akan dihapus karena sudah keluar dari scope function
- Pada kasus seperti ini, Rust akan menganggap hal ini error, karena berpotensi terjadi dangling pointer
- Biasanya programmer Golang sering sekali membuat function yang mengembalikan pointer
Dangling Pointer


Solusi Dangling Pointer
Thank You!
Questions?
Rust Ownership
By Muhammad Hafidz
Rust Ownership
- 87