# Nyashプログラミング言語のinclude/namespace/usingシステム設計相談 ## 🎯 現在の状況 ### 1. namespace & using設計完了 IDE補完最優先システム設計済み: ```nyash # 名前空間定義 namespace nyashstd { static box string { static upper(str) { return StringBox.upper(str) # 既存実装活用 } static lower(str) { ... } } static box math { static sin(x) { ... } } } # using文での使用 using nyashstd string.upper("hello") # 短い&明確 math.sin(3.14) # 完全修飾名(常時利用可能) nyashstd.string.upper("hello") ``` ### 2. 既存include実装 単純なファイル読み込み+実行システム: ```nyash include "myfile.hako" # ファイル内容をパース・実行 ``` - 重複読み込み防止機能あり - しかし依存関係管理・名前空間分離なし ### 3. 新たな課題:統合問題 includeとnamespace/usingの統合が必要: - ファイル間依存関係システムが必要 - 循環依存の検出・防止 - 読み込み順序の決定アルゴリズム ## 🚨 技術的課題 ### A. 依存関係解決の複雑性 ```nyash # main.hako using nyashstd # ← nyashstd.hakoの読み込みが必要 using mylib # ← mylib.hakoの読み込みが必要 string.upper("hello") # nyashstdから mylib.custom() # mylibから ``` ### B. include vs using の設計統合 - **include**: 即座にファイル実行(現在の実装) - **using**: 名前空間のインポートのみ(新設計) - 両者の統合・共存方法が不明 ### C. ファイル探索・解決 - `using nyashstd` → どのファイルを読み込む? - 標準ライブラリ vs ユーザーライブラリの区別 - パス解決アルゴリズム ## 💡 検討中の解決案:nyash.linkファイル方式 ### 基本アイデア Cargo.toml/package.json類似の依存関係管理ファイル: ```toml # nyash.link (プロジェクトルート) [dependencies] nyashstd = "./stdlib/nyashstd.hako" mylib = "./libs/mylib.hako" [search_paths] stdlib = "./stdlib/" libs = "./libs/" ``` ### 動作イメージ 1. `using nyashstd` 実行時 2. nyash.linkを読み取り 3. `"./stdlib/nyashstd.hako"` を特定 4. ファイル読み込み・名前空間登録 5. `string.upper()` が使用可能に ## 🤔 深く検討してほしい技術的論点 ### 1. nyash.linkファイル方式の妥当性 - **実装複雑度**: 依存関係グラフ構築・解決アルゴリズム - **パフォーマンス**: キャッシュ・遅延読み込みの必要性 - **他言語比較**: Rust Cargo、Node.js、Python等の実装からの学習 ### 2. 既存includeとの共存戦略 **選択肢A**: includeを低レベルAPIとして残す ```nyash include "config.hako" # 即座実行(設定ファイル等) using mylib # 名前空間インポート(ライブラリ) ``` **選択肢B**: includeを廃止、usingに統一 ```nyash using config # 設定も名前空間として扱う using mylib # ライブラリも名前空間 ``` **選択肢C**: includeをusingの内部実装として隠蔽 ### 3. 段階的実装戦略 - **最小実装**: 固定パスでのusing実装 - **中級実装**: nyash.link基本機能 - **完全実装**: 循環依存検出・パッケージ管理 ### 4. IDE補完・Language Server連携 - nyash.linkによる依存関係情報の活用 - 補完候補の動的生成 - エラー検出・警告システム ### 5. 標準ライブラリ管理 - nyashstdの標準配置場所(相対パス?絶対パス?) - ユーザーライブラリとの区別方法 - 将来のパッケージ管理システムへの発展性 ## 🎯 具体的な質問 1. **nyash.linkファイル方式は技術的に健全で実装可能か?** - 依存関係解決アルゴリズムの実装困難度 - 他言語での類似実装の成功例・失敗例 2. **includeとusingの最適な関係性は?** - 両方残すべき?統一すべき? - それぞれの用途・使い分け 3. **最小実装からの段階的発展戦略は?** - Phase 1で何を実装すべき? - 段階的機能追加の優先順位 4. **パフォーマンスへの影響は許容範囲内か?** - ファイル読み込みオーバーヘッド - 名前解決の計算コスト 5. **他に考慮すべき設計上の課題はあるか?** - 見落としている技術的問題 - より良い代替案の存在 ## 🌟 Nyashの設計哲学との整合性 - **Everything is Box**: 名前空間もBoxとして扱うべき? - **明示性重視**: 依存関係の明示的記述(nyash.link)は哲学と合致 - **初心者フレンドリー**: include廃止は学習コストを下げるか? ## 🔥 期待する回答 プログラミング言語設計・実装の専門的視点から: - nyash.link方式の実現可能性・妥当性評価 - 実装戦略の具体的提案 - 潜在的課題の指摘・解決策 - 他言語実装例からの学習ポイント - Nyash哲学との整合性確保方法 --- **深い技術検討をお願いします!🐾**