Files
hakorune/docs/development/roadmap/phases/phase-12.7/ai-feedback/quick-implementation-guide.md

3.7 KiB
Raw Blame History

ANCP即座実装ガイド - 今すぐ始める!

Date: 2025-09-03

🚀 30分で作る最小プロトタイプ

Step 1: P*正規化ルール5分で決める

// 最小限の正規化ルール
pub struct MinimalCanonicalizer {
    rules: Rules {
        comments: Remove,        // v1では削除
        whitespace: SingleSpace, // 連続空白→単一空白
        newlines: Preserve,      // 改行は保持
        semicolons: Required,    // セミコロン必須
    }
}

Step 2: 最小記号マッピング10分

// 超シンプルマッピング
const KEYWORD_MAP: &[(&str, &str)] = &[
    ("box", "$"),
    ("new", "@"),
    ("me", "."),
    ("init", "#"),
    ("return", "^"),
    ("local", "l"),
    ("public", "+"),
    ("if", "?"),
    ("else", ":"),
];

const BUILTIN_MAP: &[(&str, &str)] = &[
    ("StringBox", "S"),
    ("IntegerBox", "I"),
    ("MapBox", "M"),
    ("ArrayBox", "A"),
];

Step 3: 最小エンコーダー15分

// Boxだけ動けばOK
fn encode_minimal(code: &str) -> String {
    let mut result = code.to_string();
    
    // 1. キーワード置換
    for (from, to) in KEYWORD_MAP {
        result = result.replace(from, to);
    }
    
    // 2. 型名短縮
    for (from, to) in BUILTIN_MAP {
        result = result.replace(from, to);
    }
    
    // 3. 空白圧縮
    result = compress_whitespace(result);
    
    result
}

📝 1時間で作る実用版

ソースマップ最小実装

#[derive(Serialize, Deserialize)]
struct SimpleSourceMap {
    version: u8,
    mappings: Vec<Mapping>,
}

struct Mapping {
    f_pos: usize,  // Fusion位置
    p_pos: usize,  // Pretty位置  
    len: usize,    // 長さ
}

CLI最小実装

#!/bin/bash
# ancp.sh - 超簡易版

case $1 in
    encode)
        cargo run --bin ancp-encoder < $2
        ;;
    decode)
        cargo run --bin ancp-decoder < $2
        ;;
    *)
        echo "Usage: ancp encode|decode file"
        ;;
esac

🧪 今すぐ試せるテストケース

Test 1: 最小Box

# input.hako
box Test {
    init { value }
}

# 期待出力
$Test{#{value}}

Test 2: 簡単な関数

# input.hako
box Calculator {
    add(a, b) {
        return a + b
    }
}

# 期待出力
$Calculator{add(a,b){^a+b}}

🎯 今日中に達成可能な目標

午前2時間

  1. P*ルール仕様書1ページ
  2. 記号マッピング表完成
  3. Rustプロジェクト作成

午後3時間

  1. 最小エンコーダー実装
  2. 10個のテストケース作成
  3. 圧縮率測定スクリプト

夕方1時間

  1. README.md作成
  2. 初期ベンチマーク実行
  3. 明日の計画立案

💡 すぐ使えるコードスニペット

Rust Cargo.toml

[package]
name = "ancp"
version = "0.1.0"

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

[[bin]]
name = "ancp-cli"
path = "src/main.rs"

最初のmain.rs

use std::io::{self, Read};

fn main() {
    let mut input = String::new();
    io::stdin().read_to_string(&mut input).unwrap();
    
    // 超簡易圧縮
    let compressed = input
        .replace("box", "$")
        .replace("init", "#")
        .replace("me.", ".")
        .replace("  ", " ");
        
    println!("{}", compressed);
}

🏃 動作確認コマンド

# 1. プロジェクト作成
cargo new ancp-prototype
cd ancp-prototype

# 2. 最小実装
echo 'box Test { init { x } }' | cargo run

# 3. 圧縮率確認
echo 'box Test { init { x } }' | wc -c  # 元
echo '$Test{#{x}}' | wc -c              # 後

# 4. 成功!🎉

15分後には動くものができるさあ始めよう