Section 2/91 menit

2. Teori: Value Semantics vs Ownership

2. Teori: Value Semantics vs Ownership

Tiga Model Memori di Berbagai Bahasa

Model 1: Garbage Collection (Java, Go, C#)

swift
Objek hidup di heap, GC menentukan kapan di-free.
Pro: sederhana bagi developer.
Cons: tidak ada kontrol lifecycle, pause, overhead memori.

Model 2: Reference Counting (Swift, Objective-C, Python)

swift
Setiap objek punya counter. Counter = 0 → deallocated.
Pro: deterministik (deinit dipanggil langsung saat count = 0).
Cons: retain cycles, overhead counter, tidak mencegah logical errors.

Model 3: Ownership / Borrow Checker (Rust)

swift
Compiler melacak siapa "pemilik" setiap nilai.
Nilai hanya punya SATU pemilik pada satu waktu.
Ketika pemilik keluar scope → nilai di-destroy.
Pro: zero overhead, compile-time safety, tidak ada double-free.
Cons: learning curve tinggi, borrow checker kadang terlalu ketat.

Swift dengan ~Copyable mengadopsi model ownership yang pragmatis — tidak sekompleks Rust's borrow checker, tapi memberikan jaminan ownership yang cukup untuk sebagian besar resource management use cases.

Apa itu "Copyable"?

Di Swift 6, semua tipe secara default conform ke protokol Copyable (secara implisit). Ini berarti mereka bisa di-copy secara bebas.

~Copyable (dibaca: "tilde Copyable" atau "noncopyable") adalah suppression syntax — kamu menghapus conformance default ini:

swift
Copyable (default):  nilai bisa di-copy kapan saja, bebas
~Copyable:           nilai tidak bisa di-copy; compiler melacak ownership-nya

Ketika sebuah tipe ~Copyable:

  1. Assignment menjadi move bukan copy
  2. Melewatkan ke fungsi bisa consume (pindah ownership) atau borrow (baca saja)
  3. deinit dipanggil tepat sekali — saat pemilik terakhir keluar scope
  4. Compiler mencegah penggunaan setelah ownership dipindah