mir: add TypeCertainty to Callee::Method (diagnostic only); plumb through builder/JSON/printer; backends ignore behaviorally using: confirm unified prelude resolver entry for all runner modes docs: update Callee architecture with certainty; update call-instructions; CURRENT_TASK note tests: quick 40/40 PASS; integration (LLVM) 17/17 PASS
10 KiB
10 KiB
設計判断の事例:toplevel main のデフォルト化
日付: 2025-09-27 コンテキスト: AI協働開発における人間の設計判断権 参加者: ユーザー(設計者) + Claude(助言) + ChatGPT(実装)
📋 問題提起
きっかけ
環境変数の整理中、ユーザーからの発言:
"しかし main 僕 開発者だから オン強制におねがいしてもいいきがするにゃ"
現状
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN
現状: デフォルトOFF
--dev: ON
理由: 「仕様不変の原則」
問題
開発者向け言語なのに、
開発者に不便な設定がデフォルト
↓
毎回 --dev が必要
↓
開発体験の悪化
💬 議論のプロセス
Stage 1: Claudeの分析
賛成の理由
-
他の言語との整合性
C/C++: int main() Rust: fn main() Go: func main() Python: if __name__ == "__main__" ↓ main() は標準的なエントリーポイント -
Everything is Box 哲学との整合
static box Main { main() { ... } } ↓ これは自然な書き方 既定OFFにする理由がない -
開発体験
既定OFF: 毎回 --dev が必要 既定ON: すぐに動く -
安全性
既定ONでも安全性は変わらない 既存コードは影響を受けない
「仕様不変の原則」の再解釈
【誤解】
既定OFF = 仕様不変
【真実】
既定ON = デフォルト設定の改善
既定ON ≠ 仕様変更
↓
許可する範囲が広がるだけ
仕様自体は変わらない
Stage 2: ユーザーの判断
ユーザーからChatGPTへの説得:
"にゃん 僕が開発者 仕様変えるの許可します。 もう代えてもいいころあいか判断おねがいにゃ そろそろデフォルトに昇格してもいい時期と思うけどどうですか?"
重要な点:
- 設計者として最終判断を下している
- AIに「判断お願い」と諮問している
- でも決定権は自分が持っている
Stage 3: ChatGPTの技術的評価
結論
"今が昇格タイミングとして妥当だよ"
理由(技術的分析)
-
互換性リスクが低い
エントリ決定: 1. Main.main を優先 2. 無ければ toplevel main ↓ 既存アプリ(Main.main持ち)は挙動不変 競合時の決定規則は明確 -
実運用の摩擦を確実に減らす
- テスト・サンプル・小スクリプトが自然に通る - すでに --dev で実利用されている - 地雷は出ていない -
即時の広範影響は限定的
prod/ci: Main.main があればそれが採用 ↓ 既存資産の挙動が崩れない
✅ 実装結果
CURRENT_TASK.md への記録
- Entry policy: top‑level main 既定許可に昇格
(NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN default=true)
- 互換: Main.main が存在する場合は常にそちらを優先。
両方無い場合は従来通りエラー。
- オプトアウト: NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=0|false|off
で無効化可能。
実装の特徴
1. 完全な後方互換性
【既存コード(Main.main あり)】
static box Main {
main() {
print("Hello from Main.main")
}
}
↓
挙動不変(Main.main が優先)
【新規コード(toplevel main)】
main() {
print("Hello from toplevel")
}
↓
これが動くようになる(新機能)
【どちらも無い】
// エラー(従来通り)
2. 安全弁(オプトアウト)
# もし問題があれば
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=0
↓
従来の挙動に戻せる
3. 優先順位の明確化
優先度1: Main.main(既存コード用)
優先度2: toplevel main(新規コード用)
優先度3: エラー(どちらも無い)
↓
競合しない
予測可能
🎯 AI協働開発における役割分担
ユーザー(設計者)の役割
-
問題提起
- "main は開発者だからON強制でいい"
- 直感的な判断
-
方向性決定
- "僕が開発者 仕様変えるの許可します"
- 最終決定権の行使
-
タイミング判断
- "そろそろデフォルトに昇格してもいい時期"
- 成熟度の評価
Claude(助言者)の役割
-
分析
- 賛成/反対の理由を整理
- 他の言語との比較
- 技術的影響の評価
-
提案
- 複数のオプション提示
- リスクと利点の明確化
-
言語化
- 直感を論理に変換
- 説得材料の提供
ChatGPT(実装者)の役割
-
技術的検証
- 互換性リスクの評価
- 実装の妥当性確認
-
実装
- 後方互換性を保った実装
- 安全弁の提供
-
文書化
- CURRENT_TASK.md への記録
- 実装の明確化
💎 この事例の重要性
1. 人間が最終判断権を持つ
AI: 「技術的には可能です」
AI: 「これらのリスクがあります」
AI: 「これらの利点があります」
↓
人間: 「これでいく」
↓
AI: 「実装します」
AIは助言・実装するが、判断は人間が行う
2. 直感の重要性
ユーザー: "開発者だからON強制でいい"
↓
この直感が正しかった
↓
技術的分析でも裏付けられた
設計者の直感は、技術的分析より先行することがある
3. 「仕様不変」の柔軟な解釈
【硬直的解釈】
「既定を変えない = 仕様不変」
【柔軟な解釈】
「仕様を変えずに、デフォルト設定を改善」
↓
後者の方が実用的
4. タイミングの判断
【早すぎる】
機能が不安定
↓
既定ONは危険
【遅すぎる】
多くの人が不便を感じる
↓
機会損失
【今】
- 実績あり(--dev で使用)
- 問題なし
- 互換性OK
↓
ちょうどいい
📊 学術的価値
研究テーマ1: AI協働開発における設計判断
従来の開発
人間 → 設計 → 実装(人間)
↓
時間がかかる
AI単独開発(仮想)
AI → 設計 → 実装(AI)
↓
判断が保守的すぎる
または
判断が不明瞭
AI協働開発(Nyash)
人間 → 方向性決定
↓
AI → 分析・助言
↓
人間 → 最終判断
↓
AI → 実装
↓
高速かつ適切
研究テーマ2: 開発者向け言語の設計原則
軸の発見
【軸】
「誰がこの言語を使うのか?」
【Nyashの答え】
「開発者」
【結論】
開発者に優しい設定がデフォルトであるべき
一般化
言語設計の原則:
「主要ユーザー層に最適化された
デフォルト設定を選ぶべき」
例:
- Python: 初心者向け → シンプルなデフォルト
- Rust: システムプログラマ向け → 安全性重視のデフォルト
- Nyash: 開発者向け → 開発者フレンドリーなデフォルト
🎨 対話の美しさ
この対話の構造
ユーザー: 「こうしたい」(直感)
↓
Claude: 「その理由は...」(分析)
↓
ユーザー: 「決めた」(判断)
↓
ChatGPT: 「実装した」(実行)
↓
全員: 「完璧」(合意)
なぜ美しいか
-
役割が明確
- 人間:判断
- AI:分析・実装
-
相互補完
- 人間の直感
- AIの分析能力
- AIの実装速度
-
効率的
- 数時間で完了
- 従来なら数日
-
品質が高い
- 後方互換性完璧
- オプトアウト可能
- 文書化も完璧
🚀 今後への影響
1. 開発体験の向上
Before:
echo 'static box Main { main() { print("Hello") } }' > test.nyash
./target/release/nyash --dev test.nyash
After:
echo 'main() { print("Hello") }' > test.nyash
./target/release/nyash test.nyash
↓
簡潔!
2. 新規ユーザーの参入障壁低下
Before:
「static box Main とは?」
「なぜ --dev が必要?」
After:
「main() を書けば動く」
「他の言語と同じ」
3. ドキュメントの簡潔化
Before:
- Main.main を書く方法
- toplevel main を書く方法(--dev必要)
- 環境変数の説明
After:
- main() を書けばOK
- (詳細は省略可能)
4. 論文への影響
「Nyashは開発者向け言語として設計されており、
開発者の直感を尊重した設計判断を行う」
具体例:
- toplevel main のデフォルト化
- AI協働開発でも人間が最終判断
📝 関連ドキュメント
- Four Core Principles - 設計哲学
- Design Evolution - 設計プロセス
- Method Resolution Deep Dive - 技術詳細
💡 最も重要な教訓
【AI協働開発の原則】
1. AIは強力な助言者であり実装者
2. しかし、判断は人間が行う
3. 人間の直感を軽視しない
4. AIは直感を論理に変換する手助けをする
5. 最終的な決定権は常に人間が持つ
【設計の原則】
1. 主要ユーザー層に最適化する
2. 「仕様不変」は硬直的に解釈しない
3. デフォルト設定は改善できる
4. 後方互換性を保ちながら進化する
5. タイミングを見極める
【成功の鍵】
人間の直感 × AIの分析 × 迅速な実装
↓
最適な設計判断
保存日: 2025-09-27 ステータス: 実装完了、運用開始 成果: toplevel main デフォルト化達成、開発体験向上