Section 6/201 menit
6. Complete Concurrency Checking
6. Complete Concurrency Checking
Teori: Dari Warning ke Error — Pergeseran Filosofi
Swift 5.x memperkenalkan concurrency tools tapi tidak meng-enforce keamanannya. Developer bisa mengabaikan warning. Swift 6 mengubah ini fundamental: semua data race check menjadi compile-time error.
Mengapa ini perubahan besar?
Data race adalah salah satu bug paling berbahaya di software:
- Non-deterministic: hanya muncul dalam kondisi tertentu
- Hard to reproduce: timing-dependent
- Hard to debug: bisa muncul jauh dari source bug
- Bisa corrupt memory, data, atau crash di production
Dengan Complete Concurrency Checking, Swift menjadi salah satu dari sedikit bahasa mainstream dengan compile-time data race safety — bergabung dengan Rust sebagai trailblazer di area ini.
Apa yang Di-check
swift
// SEBELUM Swift 6 (warning):
class AppState {
var currentUser: User? // mutable reference type
}
let state = AppState()
Task { state.currentUser = user1 } // warning: concurrent access
Task { state.currentUser = user2 } // warning: concurrent access
// SWIFT 6 (error):
// error: reference to var 'currentUser' in concurrently-executing code
// Tidak bisa dikompilasi — harus fix
Kategori error yang dideteksi:
- Akses ke non-Sendable type lintas isolation boundary
- Mutation dari state yang tidak dilindungi dari concurrent access
- Closure yang capture mutable state tanpa isolation
- Global variable yang mutable tanpa protection
Mengaktifkan Bertahap
swift
// Package.swift — aktifkan complete checking
.target(
name: "MyTarget",
swiftSettings: [
// Level 1: minimal — hampir tidak ada warning
// Level 2: targeted — warning pada kode yang jelas concurrent
// Level 3: complete — semua warning Swift 6
.enableUpcomingFeature("StrictConcurrency"), // targeted di Swift 5
// atau:
.swiftLanguageVersion(.v6) // complete, semua jadi error
]
)
Kapan Menggunakan
Complete Concurrency Checking selalu aktif di Swift 6 — bukan pilihan. Tapi kamu bisa mengontrol kapan bermigrasi:
- Proyek baru: Langsung Swift 6 — mulai benar dari awal
- Proyek existing: Aktifkan warning dulu (Targeted), fix bertahap, baru pindah ke Swift 6