Section 1/162 menit

1. Apa Itu Data Race Safety?

1. Apa Itu Data Race Safety?

Data race terjadi ketika dua atau lebih thread mengakses lokasi memori yang sama secara bersamaan, dan setidaknya satu akses adalah write, tanpa sinkronisasi yang memadai. Hasilnya adalah undefined behavior — program bisa crash, memberikan output yang salah, atau berperilaku non-deterministik yang sangat sulit di-debug.

Sebelum Swift 6, menghindari data race adalah tanggung jawab programmer sepenuhnya. Swift 6 mengubah paradigma ini: data race safety diverifikasi oleh compiler, bukan runtime. Jika kode kamu compile tanpa warning di Swift 6 strict mode, tidak ada data race yang mungkin terjadi.

Evolusi Data Race Safety di Swift

Versi Kemampuan
Swift 5.5 async/await, actor, Sendable diperkenalkan — opt-in
Swift 5.7 @preconcurrency, sending draft, warnings mulai muncul
Swift 5.9 Region-based isolation, sending parameter, warning lebih ketat
Swift 5.10 Complete concurrency checking via -strict-concurrency=complete
Swift 6.0 Default: data race safety errors, bukan warnings
Swift 6.1+ Refinement: nonisolated(unsafe), improved inference, better diagnostics

Filosofi Desain

Swift menggunakan pendekatan ownership-based isolation: setiap nilai mutable dimiliki oleh tepat satu isolation domain (actor, main actor, atau task). Perpindahan nilai antar domain hanya diizinkan jika nilai tersebut Sendable (aman untuk disalin atau dipindah lintas domain).