/* Page prose (ja) */
"WrappingUp" = "# まとめ\n\nこの章は 1 つの約束の 2 つの半分です。`@MainActor` のようなグローバル actor はコードを単一のシリアル化されたドメインに固定し、`Sendable` はどの値がドメイン間をクロスできるかをマークします。組み合わさって、Swift 6 のコンパイラは、実行する前に data race をコンパイルエラーに変えます。下記の要点は、その保護を静かにオフにしてしまう 2 つの正反対の近道に抗うことにかかっています。\n\n* **`@MainActor`** はコードがメインスレッドで実行されることを保証し、コンパイラがチェックします。`DispatchQueue.main.async` のモダンな置き換えです。別のドメインからそれ（あるいは actor に分離されたコード）を呼び出すには **`await`** が必要です。意図的に main actor に到達するには、**`MainActor.run { }`** で 1 つのクロージャをホップするか、**`Task { @MainActor in }`** でタスク全体をそこで実行します。いったん main actor 上にいれば、それらの `await` のホップは消えます。\n* 本当に共有された UI 状態に触れるものだけを分離しましょう。すべてを `@MainActor` で覆うと、バックグラウンドに適した処理をメインスレッドに引きずり込み、[なぜ並行処理か](Why%20Concurrency.playgroundchapter/Overview)の章のフリーズを再導入してしまいます。\n* **`@globalActor`** は、サブシステム全体のための、自分自身の単一シリアル化ドメインのマーカーを定義させてくれます。控えめに使いましょう。\n* **`Sendable`** は、並行処理の境界を越えるのに安全な型をマークします。値型とイミュータブルな final クラスが当てはまります。**どんな `var` を持つクラスも当てはまりません**。使い方がどれほど注意深くてもです。actor にするか、イミュータブルにするか、分離するかして修正しましょう。`@unchecked Sendable` に頼るのは、本当に自分自身のロックを管理する型のためだけにし、エラーを黙らせるためには決して使わないでください。\n* **`@Sendable`** クロージャ（`Task` が取るものなど）は、Sendable な値しかキャプチャできず、キャプチャした `var` をミューテートできません。\n* Swift 6 はこれらすべてを使って、data race を**コンパイル時のエラー**に変えます。それらのエラーは、コンパイラが並行処理を安全だと証明しているものとして扱いましょう。\n\n---\n\n## 次は\n\n**[クラシック vs モダン](Classic%20vs%20Modern.playgroundchapter/Overview)**: 同じ問題を両方の方法で解決するので、全体の弧を一度に見て、いつ移行するかを判断できます。\n\n[前へ](@previous)  |  11 / 11 ページ";
