# ADR-0016: エラー制御構文を `handle` に統一する

- Date: 2026-02-19
- Status: accepted

## Context

エラー制御に関する記法が履歴的に混在していた（`try/catch`, `raise`, `await` 系の記述や旧仕様ドキュメント）。
実装は `handle` と旧 `raise` が共存しており、`await` はコンパイラ経路で未サポートとなっている。
この差分が仕様読解とテスト期待値を不安定にしていた。

## Decision

言語のエラー制御は以下に統一する。

- 送出: `throw(<error>)`
- 捕捉・回復: `handle { ... } { Error(_) => ... }`

旧 `raise` / `try-catch` / `await` をエラー制御構文として扱わない。
既存の旧記述は移行メモとしてのみ残し、仕様・テスト・診断メッセージは `handle` + `throw` 基準で整理する。

補足:

- `yield` など `{Async}` 関連の仕様議論は継続するが、エラー境界構文とは分離して扱う。

## Consequences

- 良い影響:
  - エラー境界の書き方が 1 つになり、学習コストとレビューコストが下がる
  - コンパイラ挙動（実装）とドキュメント（仕様）の乖離が減る
  - 回帰テストの期待値を `handle` 基準で固定できる
- トレードオフ:
  - `try/catch` / `raise` 記法で書かれた過去サンプルやメモの移行が必要
  - Async 文脈との関係は別 ADR / 別トラックで継続整理が必要
