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