fix(joinir): Phase 241-EX - Remove hardcoded 'sum' check from Pattern3
Remove legacy hardcoded 'sum' carrier validation that was blocking array_filter patterns with different accumulator names (e.g., 'out'). Before: Pattern3 required carrier named 'sum' to exist After: Pattern3 uses carrier_info generically (any carrier name works) Test results: - phase49_joinir_array_filter_smoke: PASS ✅ - phase49_joinir_array_filter_fallback: PASS ✅ - phase49_joinir_array_filter_ab_comparison: PASS ✅ - Full suite: 909/909 PASS, 0 FAIL Also: Archive old roadmap documentation (67k lines moved to docs/archive/) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -0,0 +1,199 @@
|
||||
# ANCP即座実装ガイド - 今すぐ始める!
|
||||
|
||||
Date: 2025-09-03
|
||||
|
||||
## 🚀 30分で作る最小プロトタイプ
|
||||
|
||||
### Step 1: P*正規化ルール(5分で決める)
|
||||
```rust
|
||||
// 最小限の正規化ルール
|
||||
pub struct MinimalCanonicalizer {
|
||||
rules: Rules {
|
||||
comments: Remove, // v1では削除
|
||||
whitespace: SingleSpace, // 連続空白→単一空白
|
||||
newlines: Preserve, // 改行は保持
|
||||
semicolons: Required, // セミコロン必須
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Step 2: 最小記号マッピング(10分)
|
||||
```rust
|
||||
// 超シンプルマッピング
|
||||
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分)
|
||||
```rust
|
||||
// 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時間で作る実用版
|
||||
|
||||
### ソースマップ最小実装
|
||||
```rust
|
||||
#[derive(Serialize, Deserialize)]
|
||||
struct SimpleSourceMap {
|
||||
version: u8,
|
||||
mappings: Vec<Mapping>,
|
||||
}
|
||||
|
||||
struct Mapping {
|
||||
f_pos: usize, // Fusion位置
|
||||
p_pos: usize, // Pretty位置
|
||||
len: usize, // 長さ
|
||||
}
|
||||
```
|
||||
|
||||
### CLI最小実装
|
||||
```bash
|
||||
#!/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
|
||||
```nyash
|
||||
# input.hako
|
||||
box Test {
|
||||
init { value }
|
||||
}
|
||||
|
||||
# 期待出力
|
||||
$Test{#{value}}
|
||||
```
|
||||
|
||||
### Test 2: 簡単な関数
|
||||
```nyash
|
||||
# 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
|
||||
```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
|
||||
```rust
|
||||
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);
|
||||
}
|
||||
```
|
||||
|
||||
## 🏃 動作確認コマンド
|
||||
|
||||
```bash
|
||||
# 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分後には動くものができる!さあ始めよう!**
|
||||
Reference in New Issue
Block a user