148 lines
3.6 KiB
Markdown
148 lines
3.6 KiB
Markdown
# 🌟 Nyash - Everything is Box 哲学
|
||
|
||
## 核心原則(絶対に忘れてはならない)
|
||
|
||
### 1. すべてはBox
|
||
```nyash
|
||
// データもBox
|
||
name = new StringBox("Alice")
|
||
age = new IntegerBox(30)
|
||
items = new ArrayBox()
|
||
|
||
// 関数もBox(革命的発見!)
|
||
add = new FunctionBox("add", ["a", "b"], {
|
||
return a + b
|
||
})
|
||
|
||
// クラスもBox
|
||
Person = new ClassBox("Person", {
|
||
fields: ["name", "age"],
|
||
methods: { greet: ... }
|
||
})
|
||
|
||
// 制御構造もBox(whileは使わない!)
|
||
myLoop = new LoopBox({
|
||
condition: i < 10,
|
||
body: { print(i) }
|
||
})
|
||
|
||
// 条件分岐もBox
|
||
check = new IfBox({
|
||
test: score > 80,
|
||
then: { print("Excellent!") },
|
||
else: { print("Keep trying!") }
|
||
})
|
||
|
||
// エラーもBox
|
||
error = new ErrorBox("Something went wrong")
|
||
|
||
// コンパイラ自体もBox
|
||
tokenizer = new TokenizerBox()
|
||
parser = new ParserBox()
|
||
interpreter = new InterpreterBox()
|
||
```
|
||
|
||
### 2. すべての操作はBox間通信
|
||
```nyash
|
||
// 統一されたインターフェース
|
||
(caller >> functionBox).execute(args)
|
||
(executor >> loopBox).run()
|
||
(evaluator >> ifBox).check()
|
||
(factory >> classBox).create()
|
||
|
||
// P2P通信
|
||
(alice >> bob).sendMessage("Hello!")
|
||
(source >> processor >> sink).pipeline()
|
||
|
||
// 非同期もBox通信
|
||
nowait (async >> operation).execute()
|
||
```
|
||
|
||
### 3. 重要な言語設計決定
|
||
|
||
#### ❌ 使わない構文
|
||
- `while` ループ(代わりに `loop` を使う)
|
||
- 従来の関数定義(代わりに `FunctionBox` を使う)
|
||
- 生のデータ型(すべてBoxでラップ)
|
||
|
||
#### ✅ 使う構文
|
||
- `loop(condition) { ... }` - LoopBox
|
||
- `new FunctionBox(...)` - 関数定義
|
||
- `(sender >> receiver).method()` - P2P通信
|
||
- `nowait` - 非同期実行
|
||
|
||
### 4. 革命的スコープ設計(2025年8月7日 大発見!)
|
||
|
||
#### 🌟 すべての変数はBoxのフィールド
|
||
```nyash
|
||
// もう関数スコープという概念は存在しない!
|
||
box GameEngine {
|
||
init {
|
||
player, // すべてフィールドとして宣言
|
||
enemies,
|
||
currentLevel
|
||
}
|
||
|
||
createPlayer(name) {
|
||
me.player = new Player(name) // Boxが管理
|
||
return me.player // 完全に安全!
|
||
}
|
||
}
|
||
```
|
||
|
||
#### ✨ localキーワード - 唯一の例外
|
||
```nyash
|
||
// 一時変数だけは明示的にlocal
|
||
box Algorithm {
|
||
init { result }
|
||
|
||
process() {
|
||
local i, temp // 関数終了で自動解放
|
||
|
||
loop(i = 0; i < 100; i++) {
|
||
temp = calculate(i)
|
||
me.result = me.result + temp
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**哲学的意味**:
|
||
- Boxがすべてを管理する究極の統一性
|
||
- 変数の寿命が明確で予測可能
|
||
- メモリ管理の完全な透明性
|
||
|
||
## 歴史的洞察
|
||
|
||
「もしかして 関数も ボックスじゃないか???」
|
||
|
||
この一言がNyashを革命的な言語に変えた。関数がBoxであることで:
|
||
- 統一されたライフサイクル管理(init/fini)
|
||
- 関数の動的生成と操作
|
||
- メタプログラミングの自然な実現
|
||
- セルフホスティングへの道
|
||
|
||
## セルフホスティングの証明
|
||
|
||
Nyashの究極の証明は、Nyash自身でNyashを実装できること:
|
||
|
||
```nyash
|
||
// NyashでNyashを実装
|
||
compiler = new CompilerBox({
|
||
tokenizer: new TokenizerBox(),
|
||
parser: new ParserBox(),
|
||
interpreter: new InterpreterBox()
|
||
})
|
||
|
||
// セルフホスティング実行
|
||
result = (sourceCode >> compiler).compile()
|
||
```
|
||
|
||
## 忘れてはならない真実
|
||
|
||
1. **Everything** means EVERYTHING - 例外なし
|
||
2. Boxは対等 - 階層ではなくP2P
|
||
3. 統一インターフェース - 学習曲線最小化
|
||
4. 無限の組み合わせ - BoxとBoxは自由に接続
|
||
|
||
> "Where Everything is Box, and Every Box is Everything!" |