- Add returns_result.md documenting Result正規化 (returns_result = true) - Add when-pattern-matching.md with future pattern matching syntax design - Update E2E tests to use get_value() for HTTP responses - Update plugin system README with B案 (Result-based) support - Remove singleton from HttpServerBox and SocketServerBox for stability This prepares for gradual migration to Result-based error handling, starting with Net plugin methods, as agreed with ChatGPT5's design. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2.4 KiB
2.4 KiB
when構文 - パターンマッチング(将来実装予定)
概要
Nyashに「when構文」を導入し、より直感的で安全なエラー処理とパターンマッチングを実現する。
背景
- ChatGPT5提案の
returns_result = trueによる段階的Result正規化 - 現在の
if res.is_ok()パターンは冗長 - Nyashの「Everything is Box」哲学に合致した統一的な構文が必要
提案構文
基本形 - ResultBoxのパターンマッチング
when res {
ok(resp) -> {
body = resp.readBody()
print(body)
}
error(err) -> {
print("Error: " + err.message())
}
}
汎用形 - あらゆるBoxでのパターンマッチング
when value {
StringBox(s) -> print("文字列: " + s)
IntegerBox(n) -> print("数値: " + n.toString())
ArrayBox(arr) -> print("配列の長さ: " + arr.length())
NullBox -> print("nullです")
_ -> print("その他のBox") // デフォルトケース
}
ネスト可能
when httpResult {
ok(response) -> {
when response.getStatus() {
200 -> print("成功!")
404 -> print("見つからない")
_ -> print("その他のステータス")
}
}
error(e) -> print("エラー: " + e)
}
実装前提条件
- MIRダイエット完了(現在33個→目標20-26個)
- 新しいパターンマッチング命令の追加余地が必要
- VM最適化完了(Phase 8.6)
- 効率的なジャンプテーブル実装が必要
returns_result = trueの段階導入- Net系Boxから開始
実装計画
- Phase 9後半: MIR命令追加(Match, MatchBranch等)
- Phase 10: VM/JITでの最適化実装
- Phase 11: 言語仕様への正式組み込み
利点
- 直感的: switch-case的な馴染みやすい構文
- 型安全: 各パターンで正しい型のメソッドが呼べる
- 網羅的: すべてのケースをカバー可能
- 拡張性: 将来の新Box型にも対応可能
- Nyash哲学: Everything is Boxに完全に合致
他の検討案
- chain構文:
res.onSuccess({}).onError({}) - try-else構文:
try resp = res {} else err {} - ?演算子:
resp = res.unwrap?()
これらも将来的に検討可能だが、when構文が最もNyashらしい。
提案日: 2025-08-20 提案者: Claude & ChatGPT5 協調開発チーム