Files
hakorune/docs/development/roadmap/native-plan/llvm/Revolutionary-Windows-Strategy.md

5.1 KiB
Raw Permalink Blame History

🚀 Nyash革命的Windows実行戦略LLVM IR中立性の完全活用

作成日: 2025年8月20日
AI会議参加者: Gemini先生、Codex先生、Claude

🎯 核心的アイデア1回のIR生成で全プラットフォーム対応

LLVM IRはプラットフォーム中立。だから1回のIR生成から同時に複数OS用の実行ファイルを生成できる

// 革命的ワンパス・マルチターゲット生成
nyashc --targets linux,windows,macos program.hako

// 出力(同時生成!)
dist/x86_64-unknown-linux-musl/nyash      # Linux版
dist/x86_64-pc-windows-gnu/nyash.exe      # Windows版  
dist/x86_64-apple-darwin/nyash            # macOS版

🏗️ 実装アーキテクチャ

Phase 1: 即効性重視3週間で実現

// 1. IR生成1回だけ
let ir_module = compile_to_ir(&ast);
let bitcode = ir_module.write_bitcode_to_memory();

// 2. マルチターゲット並列生成
parallel_for_each(["linux", "windows-gnu"], |target| {
    let module = context.create_module_from_ir(bitcode.clone());
    configure_for_target(&module, target);
    generate_executable(&module, target);
});

技術スタック:

  • Linux: musl静的リンク配布容易
  • Windows: mingw-gnu + lldクロスリンク簡単
  • 共通: PAL (Platform Abstraction Layer)

Phase 2: 本格実装3ヶ月

全プラットフォーム同時対応:

ターゲット構成:
  linux:
    - x86_64-unknown-linux-musl
    - aarch64-unknown-linux-musl
  windows:
    - x86_64-pc-windows-gnu (mingw)
    - x86_64-pc-windows-msvc (xwin)
  macos:
    - x86_64-apple-darwin
    - aarch64-apple-darwin (M1/M2)

Phase 3: 究極形態6ヶ月

APE (Actually Portable Executable) - 単一バイナリで全OS対応

# たった1つのファイルが全OSで動く
./nyash.com  # Linux でも Windows でも macOS でも動作!

⚠️ APEの現実的な制限

  • バイナリサイズ: 通常の3倍3OS分のコード含む
  • ライブラリ: 各OS用に3種類必要
  • 適用範囲: 小規模CLIツール向け(大規模アプリは不向き)

💡 技術的革新ポイント

1. Bitcodeキャッシュ戦略

pub struct MultiTargetCompiler {
    bitcode_cache: HashMap<ModuleId, MemoryBuffer>,
    target_machines: HashMap<Triple, TargetMachine>,
}

impl MultiTargetCompiler {
    pub fn compile_all(&self, module_id: ModuleId) -> Result<Vec<ExecutablePath>> {
        let bitcode = self.bitcode_cache.get(&module_id).unwrap();
        
        self.target_machines
            .par_iter()  // 並列処理!
            .map(|(triple, tm)| {
                let module = load_from_bitcode(bitcode);
                tm.emit_to_file(&module, FileType::Object)
            })
            .collect()
    }
}

2. PAL (Platform Abstraction Layer)

// コンパイラは常にこれらを呼ぶ
extern "C" {
    fn nyash_rt_print(s: *const u8, len: usize);
    fn nyash_rt_file_open(path: *const u8, mode: u32) -> i32;
    fn nyash_rt_time_now() -> u64;
}

// 各OS用のランタイムで実装
#[cfg(target_os = "windows")]
pub fn nyash_rt_print(s: *const u8, len: usize) {
    // UTF-8 → UTF-16変換してWriteConsoleW
}

#[cfg(target_os = "linux")]
pub fn nyash_rt_print(s: *const u8, len: usize) {
    // そのままwrite(1, s, len)
}

3. リンク戦略の統一

[target.'cfg(windows)'.dependencies]
lld = { version = "0.1", features = ["coff"] }
mingw-w64-libs = { path = "vendor/mingw" }

[target.'cfg(unix)'.dependencies]
lld = { version = "0.1", features = ["elf"] }
musl-libc = { path = "vendor/musl" }

🎉 革命的成果

開発者体験

# 1コマンドで全プラットフォーム対応
nyashc build --all-platforms

# 出力
✅ Linux版生成完了 (2.1MB)
✅ Windows版生成完了 (916KB)  
✅ macOS版生成完了 (1.8MB)
✅ WASM版生成完了 (512KB)

ユーザー体験

  • 配布: 各OS用のネイティブバイナリ
  • 性能: LLVM最適化でVM比10倍以上高速
  • 将来: APEで単一ファイル配布

📊 実装ロードマップ

フェーズ 期間 成果物
Week 1-3 LLVM PoC Linux単体動作
Month 1 Windows統合 Linux + Windows同時生成
Month 2 全OS対応 Linux/Windows/macOS
Month 3 最適化 PAL完成、性能調整
Month 6 APE統合 単一バイナリ実現

🚀 次のアクション

  1. 即実装: Bitcodeキャッシュ機構
  2. PAL設計: 最小限のランタイムAPI定義
  3. Windows-gnu: mingwでクロスリンク環境構築
  4. 並列化: rayon使用でマルチターゲット生成

💭 結論

LLVM IRの中立性を活用すれば、**「Write Once, Compile to All」**が実現できる!

これこそがNyashの革命的Windows戦略です。1回のコンパイルで全プラットフォーム対応、最終的には単一バイナリで境界を超える。

Everything is Box、そしてEvery Platform is Target🎯