Files
hakorune/docs/archive/phases/phase-12.7/ancp-specs/chatgpt5-sugar-syntax-spec.md

294 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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.

# ChatGPT5糖衣構文仕様書
**Phase 12.7-B実装仕様2025-09-04作成・更新**
## 📋 概要
ChatGPT5アドバイザーから提案された糖衣構文を統合し、予約語を増やさずに表現力を劇的に向上させる。
## 🎯 設計原則
1. **予約語を増やさない** - 演算子・記号で実現
2. **可逆変換** - 糖衣構文⇔通常構文の完全な相互変換
3. **曖昧性ゼロ** - パース時の明確な優先順位
4. **MIR13への直接変換** - Phase 15セルフホスティングを意識
5. **使いたい人が使いたい構文を選択** - 強制ではなく選択
6. **超圧縮対応** - AIコンテキスト最大化のための極限記法
## 🔧 実装仕様
### 1. パイプライン演算子(|>
**構文**
```ebnf
PipeExpr = Expr ( "|>" CallExpr )*
```
**変換規則**
```nyash
# 糖衣構文
x |> f |> g(y) |> h
# デシュガー後
h(g(f(x), y))
```
**MIR変換**
- 一時変数を使った直線的な命令列に変換
- 最適化で一時変数を削減
### 2. セーフアクセス(?.)とデフォルト値(??
**構文**
```ebnf
SafeAccess = Primary ( ("?." | ".") Identifier )*
NullCoalesce = SafeAccess ( "??" SafeAccess )*
```
**変換規則**
```nyash
# 糖衣構文
user?.profile?.name ?? "Guest"
# デシュガー後
local t0, t1, t2
if user != null {
t0 = user.profile
if t0 != null {
t1 = t0.name
t2 = t1
} else {
t2 = "Guest"
}
} else {
t2 = "Guest"
}
```
### 3. デストラクチャリング
**構文**
```ebnf
DestructLet = "let" ( ObjectPattern | ArrayPattern ) "=" Expr
ObjectPattern = "{" Identifier ("," Identifier)* "}"
ArrayPattern = "[" Identifier ("," Identifier)* ("," "..." Identifier)? "]"
```
**変換規則**
```nyash
# オブジェクトパターン
let {x, y} = point
# →
local x = point.x
local y = point.y
# 配列パターン
let [a, b, ...rest] = array
# →
local a = array.get(0)
local b = array.get(1)
local rest = array.slice(2)
```
### 4. 増分代入演算子
**構文**
```ebnf
CompoundAssign = LValue ("+=" | "-=" | "*=" | "/=" | "%=") Expr
```
**変換規則**
```nyash
# 糖衣構文
count += 1
arr[i] *= 2
# デシュガー後
count = count + 1
arr.set(i, arr.get(i) * 2)
```
### 5. 範囲演算子(..
**構文**
```ebnf
Range = Expr ".." Expr
```
**変換規則**
```nyash
# 糖衣構文
for i in 0..n {
print(i)
}
# デシュガー後
local _range = new RangeBox(0, n)
for i in _range {
print(i)
}
```
### 6. 高階関数演算子
**構文3つの選択肢**
```ebnf
# 演算子形式(超圧縮向け)
MapOp = Expr "/:" LambdaExpr
FilterOp = Expr "\:" LambdaExpr
ReduceOp = Expr "//" LambdaExpr
# メソッド形式(バランス型)
MapMethod = Expr ".map" "(" LambdaExpr ")"
FilterMethod = Expr ".filter" "(" LambdaExpr ")"
ReduceMethod = Expr ".reduce" "(" LambdaExpr ["," InitValue] ")"
```
**変換規則(すべて等価)**
```nyash
# 1. 明示的形式(学習・デバッグ向け)
evens = users.filter(function(u) { return u.age >= 18 })
.map(function(u) { return u.name })
# 2. 糖衣構文メソッド形式(通常開発向け)
evens = users.filter{$_.age >= 18}.map{$_.name}
# 3. 糖衣構文演算子形式(圧縮重視)
evens = users \: {$_.age>=18} /: {$_.name}
# 4. ANCP極限形式AI協働向け
e=u\:_.a>=18/:_.n
```
**暗黙変数**
- `$_` - 単一引数の暗黙変数
- `$1`, `$2` - 複数引数の位置指定
- 省略時の`_.`プロパティアクセスANCP
### 7. ラベル付き引数
**構文**
```ebnf
LabeledArg = Identifier ":" Expr
Call = Identifier "(" (LabeledArg | Expr) ("," (LabeledArg | Expr))* ")"
```
**変換規則**
```nyash
# 糖衣構文
Http.request(
url: "/api",
method: "POST",
body: data
)
# デシュガー後
local _args = new MapBox()
_args.set("url", "/api")
_args.set("method", "POST")
_args.set("body", data)
Http.request(_args)
```
## 📊 優先順位表
| 優先度 | 演算子 | 結合性 |
|--------|--------|--------|
| 1 | `?.` | 左結合 |
| 2 | `??` | 左結合 |
| 3 | `\>` | 左結合 |
| 4 | `/:` `\:` `//` | 左結合 |
| 5 | `+=` `-=` etc | 右結合 |
| 6 | `..` | なし |
## 🔄 実装段階
### Stage 1: トークナイザー拡張
- 新しいトークンタイプの追加
- 演算子の最長一致ルール
### Stage 2: パーサー拡張
- 演算子優先順位の実装
- デシュガー変換の実装
### Stage 3: MIR変換
- 効率的なMIR命令列への変換
- 最適化パスの追加
### Stage 4: テスト・ドキュメント
- 包括的なテストケース
- エラーメッセージの改善
- チュートリアル作成
## 🎨 使い分けガイドライン
### 用途別推奨記法
```nyash
# 同じ処理の4段階表現
# 1. 学習用(超明示的)- 60文字
local result = []
for item in data {
if item.isValid() {
result.push(transform(normalize(item)))
}
}
# 2. 通常開発(メソッド糖衣)- 45文字
result = data.filter{$_.isValid()}
.map{$_ |> normalize |> transform}
# 3. 圧縮開発(演算子糖衣)- 35文字
result = data \: {$_.isValid()}
/: {$_ |> normalize |> transform}
# 4. AI協働ANCP極限- 20文字
r=d\:_.isValid()/:_|>n|>t
```
**最大67%のコード削減を実現!**
### 可逆変換の保証
```bash
# どの形式からでも相互変換可能
nyash format --from=explicit --to=sugar code.hako
nyash format --from=sugar --to=ancp code.hako
nyash format --from=ancp --to=explicit code.hako
```
## 🚀 Phase 15との相乗効果
セルフホスティングコンパイラでの活用:
```nyash
box MirBuilder {
// 1. 明示的(デバッグ時)
buildExpr(ast) {
local desugared = me.desugar(ast)
local lowered = me.lower(desugared)
local checked = me.typeCheck(lowered)
return me.optimize(checked)
}
// 2. パイプライン糖衣(通常開発)
buildExpr(ast) {
return ast
|> me.desugar
|> me.lower
|> me.typeCheck
|> me.optimize
}
// 3. ANCP極限AIとの共同作業
buildExpr(a){r a|>m.desugar|>m.lower|>m.typeCheck|>m.optimize}
}
```
## 💡 重要な設計哲学
**「糖衣構文は使いたい人が使いたいものを選ぶ」**
- 強制ではなく選択
- プロジェクトごとに設定可能
- チームメンバーごとに表示形式を変更可能
- **重要なのは可逆変換できること**
これにより、Nyashは初心者からAI協働まで、あらゆるレベルの開発者に最適な記法を提供します。