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).