Files
hakorune/docs/private/roadmap/language-evolution/v1-original.md

510 lines
13 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🚀 Nyash/Hakorune 言語進化ロードマップ
**作成日**: 2025-10-02
**対象**: Phase 16-30言語機能・標準ライブラリの進化
**関連**: [アーキテクチャ戦略](./architecture-strategy.md) - Rust vs セルフホスト実装戦略
---
## 📖 概要
Phase 15までの実装により、Nyash/Hakoruneは強力な基礎を確立しました。
このドキュメントは、糖衣構文・マクロ以外の体系的な言語機能進化を定義します。
**実装方針**: [アーキテクチャ戦略](./architecture-strategy.md)に従い、Phase 19以降の新機能は**セルフホストのみ**で実装します。
---
## 📊 現在の強みPhase 15-16時点
### ✅ **言語機能の充実度**
1. **プロパティシステム** (stored/computed/once/birth_once) - **業界最先端レベル**
2. **🚀 マクロシステム (Phase 16実装中)** - @derive/@test等、Box-Based Macro革命
3. **postfix catch/cleanup** - 非常にモダンSwift/Kotlin風
4. **Result伝播 (? 演算子)** - Rust風エラー処理
5. **match式** - パターンマッチング
6. **Lambda式** - 高階関数サポート
7. **using/namespace** - モジュールシステム基礎
8. **flow** - stateless namespace静的関数グループ化
9. **非同期** (nowait/await/FutureBox) - 並行処理基礎
10. **演算子オーバーロード** - トレイトベース
11. **変数宣言厳密化** - メモリ・非同期安全性保証
### ✅ **Box型ライブラリ充実度**
30種類以上のBoxString/Integer/Array/Map/JSON/Regex/HTTP/GUI等
### ✅ **コンパクトな実装**
- セルフホスティングコンパイラ: **3,771行**
- Rust実装: 48,344行
- **圧縮率: 約7.8%13分の1**
---
## 🎯 進化計画9の柱
**注**: マクロシステム旧🔟はPhase 16で既に実装中のため、残り9項目を進化計画とします。
### **1⃣ 型システムの段階的強化**
**現状**: 型アテーションはP0では無視、実行時型エラー
**Phase**: 20-25
**優先度**: 🟡 中
**改善案**:
```nyash
// Phase A: 静的型チェックopt-in
@strict_types
box Calculator {
value: IntegerBox // 型検査ON
add(a: IntegerBox, b: IntegerBox): IntegerBox {
return a + b // 型不一致はコンパイルエラー
}
}
// Phase B: ジェネリクス/型パラメータ
box Container<T> {
items: ArrayBox<T>
add(item: T) {
me.items.push(item)
}
get(index: IntegerBox): T? { // Optional型
return me.items.get(index)
}
}
// Phase C: Union型・Intersection型
type Result = OkBox | ErrorBox
type Loggable = ConsoleBox & FileBox
```
**実装ステップ**:
1. Phase 20: 基本型チェックopt-in
2. Phase 22: ジェネリクス基礎
3. Phase 24: Union/Intersection型
---
### **2⃣ エラーハンドリングの体系化**
**現状**: ResultBox, postfix catch/cleanup基礎は良い
**Phase**: 26-28
**優先度**: 🟢 低(現状で十分実用的)
**改善案**:
```nyash
// カスタムエラー型階層
box NetworkError from ErrorBox {
code: IntegerBox
message: StringBox
}
box TimeoutError from NetworkError { }
box ConnectionError from NetworkError { }
// エラー変換チェーン
fetchData()
.mapError(fn(e) { new AppError(e) })
catch(NetworkError e) {
retry()
}
catch(TimeoutError e) {
useCache()
}
cleanup {
closeConnection()
}
// panic/recover明確化
panic("critical error") // プログラム停止
recover(fn(e) { log(e); return defaultValue() }) // panic回復
```
---
### **3⃣ テストフレームワーク統合** 🔴
**現状**: テスト機能なし(**最大の欠落!**
**Phase**: 16-17
**優先度**: 🔴 最高(開発体験向上の鍵!)
**改善案**:
```nyash
// ビルトインテスト構文
@test
describe("Calculator") {
@test
it("should add numbers") {
local calc = new Calculator()
expect(calc.add(2, 3)).toBe(5)
assert(calc.value == 0)
}
@test
it("should handle errors") {
expectThrow(fn() { calc.divide(1, 0) })
}
}
// モック・スタブ
@mock
box MockHttpClient from HttpClient {
override get(url) {
return new MockResponse(200, "OK")
}
}
// プロパティベーステスト
@property_test(iterations: 1000)
it("commutative addition") forall(a: IntegerBox, b: IntegerBox) {
expect(a + b).toBe(b + a)
}
```
**実装ステップ**:
1. Phase 16.1: 基本テストフレームワークdescribe/it/expect
2. Phase 16.2: アサーション拡張toBe/toEqual/toThrow等
3. Phase 16.3: モック・スタブ機能
4. Phase 17: プロパティベーステスト
**重要性**:
- セルフホスティング進行中の**今こそ**導入すべき
- Rust実装で先行実装 → セルフホストで再実装が理想
- TDD開発体験が言語採用の鍵
---
### **4⃣ 並行処理の完成度向上**
**現状**: nowait/await/FutureBox基礎のみ
**Phase**: 21-25
**優先度**: 🟡 中
**改善案**:
```nyash
// チャネル/メッセージパッシング
local ch = new ChannelBox<IntegerBox>()
nowait producer = loop() {
ch.send(randomInt())
}
local value = ch.receive() // await不要
// 構造化並行性Structured Concurrency
async {
nowait task1 = longTask1()
nowait task2 = longTask2()
// すべて完了するまで待機(スコープ終了で自動)
// task1/task2のどちらかがエラー → 両方キャンセル
}
// Select式複数Future待機
match select {
ch1.receive() => { handle1() }
ch2.receive() => { handle2() }
timeout(1000) => { handleTimeout() }
}
// キャンセルトークン標準化
local token = new CancelTokenBox()
nowait task = longTask(token)
token.cancel() // タスク中断
```
**実装ステップ**:
1. Phase 21: ChannelBox実装
2. Phase 22: 構造化並行性async block
3. Phase 23: Select式
4. Phase 24: キャンセルトークン標準化
---
### **5⃣ メモリ管理の可視性向上**
**現状**: Arc<Mutex>暗黙共有、outbox/weak未活用
**Phase**: 28-30
**優先度**: 🟢 低(現状で安全)
**改善案**:
```nyash
// 所有権移転の明示
outbox result = expensiveComputation() // moveセマンティクス
useResult(result) // resultは無効化
// 弱参照の標準化
box Parent {
weak child: ChildBox // 循環参照防止
}
// ライフタイムヒントoptional
box Borrower<'a> {
reference: &'a StringBox // 借用明示
}
// クローン明示化
local copy = original.clone() // 深いコピー
local ref = original.share() // Arc参照増加
```
---
### **6⃣ 標準ライブラリの体系化**
**現状**: 豊富だが命名・構造が不統一
**Phase**: 16-20
**優先度**: 🟡 中
**改善案**:
```nyash
// Rust std風階層構造
using std.collections // ArrayBox, MapBox, SetBox, QueueBox
using std.io // FileBox, StreamBox, BufferBox
using std.net // HttpClientBox, TcpBox, UdpBox
using std.sync // MutexBox, ChannelBox, AtomicBox
using std.time // TimeBox, DurationBox, TimerBox
using std.json // JSONBoxparse/stringify/schema
using std.regex // RegexBox
using std.math // MathBox
using std.console // ConsoleBox
// 命名規則統一
// ❌ Before: array.length(), string.len(), map.size()
// ✅ After: collection.len() (統一)
// Prelude自動インポート
// StringBox, IntegerBox, ArrayBox等は自動利用可能
```
**実装ステップ**:
1. Phase 16: 命名規則統一計画策定
2. Phase 17: std.collections体系化
3. Phase 18: std.io/net/sync体系化
4. Phase 19-20: その他標準ライブラリ体系化
---
### **7⃣ デバッグ・診断機能強化**
**現状**: DebugBox、基本的なprint
**Phase**: 18-20
**優先度**: 🟡 中(開発体験向上)
**改善案**:
```nyash
// repr()関数実装(構造的表示)
print(str(obj)) // "MyBox instance"
print(repr(obj)) // "MyBox { field1: 42, field2: "test" }"
// スタックトレース改善
try {
deepFunction()
} catch(e) {
print(e.stackTrace()) // 完全なコールスタック
}
// プロファイラ統合
@profile
calculate() {
// 実行時間・メモリ使用量を自動計測
}
// アサーション強化
assert(value > 0, "value must be positive")
debug_assert(internalState.isValid()) // devのみ
static_assert(SIZE == 64, "size must be 64") // コンパイル時
```
**実装ステップ**:
1. Phase 18: repr()関数実装
2. Phase 19: スタックトレース改善
3. Phase 20: プロファイラ統合・アサーション強化
---
### **8⃣ ドキュメント生成機能**
**現状**: ドキュメント生成機能なし
**Phase**: 30+
**優先度**: 🟢 低
**改善案**:
```nyash
/// Calculator Box provides basic arithmetic operations.
///
/// # Examples
/// ```nyash
/// local calc = new Calculator()
/// calc.add(2, 3) // => 5
/// ```
box Calculator {
/// The current calculation result
result: IntegerBox
/// Adds two numbers
/// # Arguments
/// - `a`: First number
/// - `b`: Second number
/// # Returns
/// Sum of a and b
add(a: IntegerBox, b: IntegerBox): IntegerBox {
return a + b
}
}
// コマンド
$ hakorune doc --generate # HTML/Markdown生成
```
---
### **9⃣ パッケージマネージャ完成**
**現状**: using system基礎実装
**Phase**: 18-20
**優先度**: 🟡 中
**改善案**:
```toml
# hako.tomlCargo風
[package]
name = "my-app"
version = "0.1.0"
authors = ["Me"]
[dependencies]
http-client = "1.2.0"
json-parser = "2.0.1"
[dev-dependencies]
test-framework = "0.5.0"
```
```bash
# コマンド
$ hako new my-project
$ hako build
$ hako test
$ hako run
$ hako publish
```
**実装ステップ**:
1. Phase 18: hako.toml依存関係解決
2. Phase 19: パッケージレジストリ設計
3. Phase 20: hako CLIコマンド実装
---
### **🔟 マクロシステム拡張**
**現状**: ✅ **Phase 16で実装中** - Box-Based Macro革命
**実装済み**:
- @derive(Equals, ToString, Clone, Debug)
- @test マクロ + テストランナー
- AST Pattern Matching基盤
- Quote/Unquote システム
- HIRパッチ式マクロエンジン
📖 **詳細**: [Phase 16 Macro Revolution](./phases/phase-16-macro-revolution/README.md)
**今後の拡張**:
```nyash
// さらなる@deriveトレイト追加
@derive(Hash, Ord, Default, Serialize)
box MyBox { }
// カスタムマクロ定義
macro benchmark(iterations) {
// パフォーマンス計測マクロ
}
// comptime計算拡張
const CONFIG = comptime {
readFile("config.toml").parse()
}
```
**Phase**: 16実装中→ 17-20拡張
**優先度**: 🟡 中(コア実装済み、拡張は要望次第)
---
## 📅 実装タイムライン
### **Phase 16-17: 基礎固め**(最優先)
1. 🚀 **マクロシステム完成** - @derive/@test完全動作Phase 16実装中
2. 🟡 **標準ライブラリ体系化開始** - 命名規則統一
### **Phase 18-20: 開発体験向上**
3. 🟡 **デバッグ機能強化** - repr/スタックトレース
4. 🟡 **パッケージマネージャ完成** - 依存関係管理
5. 🟡 **標準ライブラリ体系化完成**
### **Phase 21-25: 高度機能**
6. 🟡 **並行処理完成** - チャネル/構造化並行性
7. 🟡 **型システム強化** - 静的型チェック opt-in/ジェネリクス
### **Phase 26-30: 洗練**
8. 🟢 **エラー体系化**
9. 🟢 **メモリ管理可視性**
10. 🟢 **ドキュメント生成**
---
## 💡 重要な設計原則
### **1. YAGNI原則遵守**
- マクロシステムは実際の要望が出てから
- 型システム強化はopt-in段階的導入
- メモリ管理可視性は現状で十分安全
### **2. Everything is Box哲学の維持**
- すべての新機能はBox化して提供
- 一貫性を最優先
### **3. セルフホスティング優先**
- Rust実装で先行実装 → セルフホストで再実装
- セルフホストでの実装容易性を考慮した設計
### **4. 後方互換性**
- 既存コードを壊さない
- 新機能はopt-inまたは新構文で提供
---
## 🎊 まとめ
### **Phase 16: マクロシステム実装中**
@derive/@test等のBox-Based Macro革命が進行中
セルフホスティング進行中の今、言語機能が加速度的に進化している。
### **現在の設計の優秀さ**
- **プロパティシステム**once/birth_onceは**業界最先端レベル**
- **マクロシステム**Phase 16実装中はBox-Based設計で革新的
- **postfix catch/cleanup**は非常に直感的
- **Everything is Box哲学**が一貫している
- **コンパクトな実装**Rust実装の13分の1
### **長期ビジョン**
Phase 16-30を通じて、実用的で表現力豊かな言語へと進化。
マクロシステム・プロパティシステム・型システムの三位一体で、
次世代言語の標準を打ち立てる。
---
**作成者**: Claude Sonnet 4.5
**ベース**: ドキュメント深層分析LANGUAGE_REFERENCE_2025.md, quick-reference.md, using.md
**修正**: 2025-10-02 - Phase 16マクロシステム実装中の事実を反映