エフェクト
`with IO`, `with Panic`, `with Async` などで副作用を明示します(カスタムエフェクトも)。
エフェクト
Sounio は関数シグネチャの with ... で 副作用 を追跡します。
純粋 vs エフェクト
fn double(x: i32) -> i32 {
x * 2
}
fn greet() with IO {
println("Hello")
}
組み込みエフェクト(よく使うもの)
IO: コンソール + filesystem + 外部 I/OPanic: trap/abort しうる操作(例: 0 除算、範囲外アクセス)Async: async/await と並行処理プリミティブAlloc: ヒープ確保Mut: 可変状態(該当する場合)GPU: GPU カーネル / デバイス操作(機能フラグに依存)
エフェクトエラー
エフェクトを要求する関数を純粋関数から呼ぶと、次のいずれかを行うまでコンパイラはエラーを出します:
- 呼び出し側のシグネチャに必要なエフェクトを追加する
- エフェクトを境界に閉じ込めるようにリファクタする(推奨)
仕様 vs 実装
仕様の目標は「エフェクトはどこでも明示的」です。ただし、組み込み操作の一部は、ユーザー定義のエフェクト関数よりも現在は寛容に扱われる場合があります(コンパイラモード/機能フラグに依存)。