nyash

🚀 Nyash Language Reference 2025

最終更新: 2025年8月11日 - デリゲーション革命完了!from統一構文+init構文決定!

📖 概要

Nyashは「Everything is Box」哲学に基づく革新的プログラミング言語です。 Rust製インタープリターによる高性能実行と、直感的な構文により、学習しやすく実用的な言語として完成しました。


🔤 1. 予約語・キーワード完全リスト

コア言語

| 予約語 | 用途 | 例 | |——-|——|—| | box | クラス定義 | box MyClass { } | | static | 静的Box・関数定義 | static box Main { } | | interface | インターフェース定義 | interface Comparable { } | | from | デリゲーション指定 | box Child from Parent { } | | new | オブジェクト生成 | new ConsoleBox() | | me/this | 自己参照 | me.field = value |

変数・スコープ

| 予約語 | 用途 | 例 | |——-|——|—| | local | ローカル変数宣言 | local x, y = 10 | | outbox | 所有権移転変数 | outbox result = compute() | | global | グローバル変数 | global CONFIG = "dev" | | init | フィールド初期化ブロック | init { name, age } |

制御構文

| 予約語 | 用途 | 例 | |——-|——|—| | if | 条件分岐 | if condition { } | | else | else節 | else { } | | loop | ループ(唯一の形式) | loop(condition) { } | | break | ループ脱出 | break | | return | 関数リターン | return value |

論理・演算

| 予約語 | 用途 | 例 | |——-|——|—| | not | 論理否定 | not condition | | and | 論理積 | a and b | | or | 論理和 | a or b | | true/false | 真偽値 | flag = true |

非同期・並行

| 予約語 | 用途 | 例 | |——-|——|—| | nowait | 非同期実行 | nowait future = task() | | await | 待機・結果取得 | result = await future |

例外処理

| 予約語 | 用途 | 例 | |——-|——|—| | try | 例外捕獲開始 | try { } | | catch | 例外処理 | catch (e) { } | | finally | 最終処理 | finally { } | | throw | 例外発生 | throw error |

その他

| 予約語 | 用途 | 例 | |——-|——|—| | function | 関数定義 | function add(a,b) { } | | print | 出力 | print("Hello") | | include | ファイル取り込み | include "math.nyash" |


📝 2. 文法・構文仕様

2.1 Box定義文法

基本Box

box ClassName {
    init { field1, field2, field3 }  # カンマ必須!CPU暴走防止
    
    # コンストラクタ
    init(param1, param2) {  # init構文に統一
        me.field1 = param1
        me.field2 = param2
        me.field3 = defaultValue()
    }
    
    # メソッド
    methodName(arg1, arg2) {
        return me.field1 + arg1
    }
    
    # デストラクタ
    fini() {
        print("Cleanup: " + me.field1)
    }
}

デリゲーションBox

box Child from Parent interface Comparable {
    init { childField }
    
    init(parentParam, childParam) {  # init構文に統一
        from Parent.init(parentParam)  # 親コンストラクタ明示呼び出し
        me.childField = childParam
    }
    
    # メソッドオーバーライド
    override process(data) {  # override必須
        local result = from Parent.process(data)  # 親メソッド呼び出し
        return result + " (Child processed)"
    }
    
    # インターフェース実装
    compareTo(other) {
        return me.value - other.value
    }
}

Static Box(推奨エントリーポイント)

static box Main {
    init { console, result }
    
    main() {
        me.console = new ConsoleBox()
        me.console.log("🎉 Everything is Box!")
        return "Success"
    }
}

ジェネリックBox

box Container<T> {
    init { value }
    
    Container(item) {
        me.value = item
    }
    
    getValue() {
        return me.value
    }
}

2.2 変数宣言

基本パターン

# 単一宣言
local x
local name = "初期値"

# 複数宣言
local a, b, c
local x = 10, y = 20, z  # 混合初期化

# 所有権移転(static関数内)
static function Factory.create() {
    outbox product  # 呼び出し側に所有権移転
    product = new Item()
    return product
}

変数宣言厳密化システム(2025-08-09実装)

# ✅ 正しい - 明示宣言必須
local temp
temp = 42

# ❌ エラー - 未宣言変数への代入
x = 42  # RuntimeError: 未宣言変数 + 修正提案表示

2.3 制御構文

条件分岐

if condition {
    # 処理
} else if condition2 {
    # 処理2  
} else {
    # else処理
}

ループ(統一構文)

# ✅ 唯一の正しい形式
loop(condition) {
    # ループ本体
    if exitCondition {
        break
    }
}

# ❌ 削除済み - 使用不可
while condition { }  # パーサーエラー
loop() { }          # パーサーエラー

2.4 演算子・式

🚀 新実装: 関数オーバーロードシステム

# Rust風トレイトベース演算子(2025-08-10実装完了)
sum = 10 + 20           # IntegerBox + IntegerBox = IntegerBox
concat = "Hi" + " !"    # StringBox + StringBox = StringBox  
repeat = "Ha" * 3       # StringBox * IntegerBox = "HaHaHa"
mixed = 42 + " answer"  # 混合型 → 自動文字列結合フォールバック

演算子優先順位

result = a + b * c / d - e    # 算術演算子は標準的優先順位
logic = not a and b or c      # not > and > or
compare = (x > y) and (z <= w)  # 比較は括弧推奨

論理演算子

# キーワード版(推奨)
canAccess = level >= 5 and hasKey
isValid = not (isEmpty or hasError)

# シンボル版(互換)
result = condition && other || fallback  # 利用可能だが非推奨

🏗️ 3. Box構文詳細ガイド

3.1 Everything is Box 原則

# すべての値がBox
number = 42               # IntegerBox
text = "hello"           # StringBox
flag = true              # BoolBox
array = new ArrayBox()   # ArrayBox
console = new ConsoleBox() # ConsoleBox

# 統一的なメソッド呼び出し
print(number.to_string_box().value)  # "42"
print(array.length())               # 配列長
console.log("Everything is Box!")   # コンソール出力

3.2 コンストラクタパターン

パラメータ付きコンストラクタ

box Person {
    init { name, age, email }
    
    init(personName, personAge) {  # init構文に統一
        me.name = personName
        me.age = personAge  
        me.email = me.name + "@example.com"  # 計算フィールド
    }
    
    # ファクトリーメソッド
    static createGuest() {
        outbox guest
        guest = new Person("Guest", 0)
        return guest
    }
}

# 使用例
person = new Person("Alice", 25)
guest = Person.createGuest()

3.3 継承とインターフェース

デリゲーションチェーン

# 基底Box
box Animal {
    init { name, species }
    
    init(animalName, animalSpecies) {
        me.name = animalName
        me.species = animalSpecies
    }
    
    speak() {
        return me.name + " makes a sound"
    }
}

# デリゲーション
box Dog from Animal {
    init { breed }  # 追加フィールド
    
    init(dogName, dogBreed) {
        from Animal.init(dogName, "Canine")  # 親コンストラクタ呼び出し
        me.breed = dogBreed
    }
    
    override speak() {  # 明示的オーバーライド
        return me.name + " barks: Woof!"
    }
}

# インターフェース実装
box Cat from Animal interface Playful {
    # Playfulインターフェースの実装必須
}

3.4 Static Boxパターン

名前空間・ユーティリティ

static box MathUtils {
    init { PI, E }
    
    static {
        me.PI = 3.14159265
        me.E = 2.71828182
    }
    
    add(a, b) {
        return a + b
    }
    
    circleArea(radius) {
        return me.PI * radius * radius
    }
}

# 使用法
area = MathUtils.circleArea(5)
sum = MathUtils.add(10, 20)
pi = MathUtils.PI

アプリケーションエントリーポイント

# 🎯 推奨: Static Box Main パターン
static box Main {
    init { console, result }
    
    main() {
        me.console = new ConsoleBox()
        me.console.log("🚀 Starting application...")
        
        # アプリケーションロジック
        me.result = processData()
        
        return "Application completed successfully"
    }
}

🚀 4. 最新機能・革新技術

**4.1 Arc Revolution(2025-08-10)**

# 全16種類のBox型が統一Arc<Mutex>パターンで実装
# 完全なスレッドセーフティと高性能を両立

array = new ArrayBox()
array.push(10)           # スレッドセーフな追加
array.push(20)
item = array.get(0)      # スレッドセーフな取得

json = new JSONBox()
json.set("name", "Alice")    # 並行安全な操作
data = json.stringify()      # JSON文字列化

4.2 Rust風トレイトベース演算子(2025-08-10)

# AI大相談会で決定された最適設計
# 静的・動的ハイブリッドディスパッチによる高性能実現

# 整数演算
result = 100 - 25        # IntegerBox間演算 → IntegerBox
product = 6 * 7          # 高速静的ディスパッチ

# 文字列操作  
greeting = "Hello" + " World"    # 文字列結合
repeated = "Echo" * 3            # "EchoEchoEcho"

# 混合型フォールバック
message = "Answer: " + 42        # "Answer: 42"

# Boolean演算
boolSum = true + false           # 1 (IntegerBox)

4.3 変数宣言厳密化(2025-08-09)

# メモリ安全性・非同期安全性保証システム

static box Calculator {
    init { memory }  # 必須フィールド宣言
    
    calculate() {
        local temp       # 必須ローカル変数宣言
        temp = me.memory * 2
        return temp
    }
}

5. 実装済みBox型ライブラリ

5.1 基本型

5.2 コレクション

5.3 システム・I/O

5.4 数学・時間

5.5 データ処理

5.6 ネットワーク・Web

5.7 GUI・マルチメディア


🎯 6. パフォーマンス・デザイン原則

6.1 メモリ安全性

6.2 実行効率

6.3 開発効率


📚 7. 学習パス・ベストプラクティス

7.1 初心者向け学習順序

  1. 基本概念: Everything is Box哲学理解
  2. 基本構文: 変数宣言・制御構文・演算子
  3. Box定義: 基本的なクラス作成
  4. Static Box Main: アプリケーションエントリーポイント
  5. 継承・インターフェース: オブジェクト指向機能

7.2 推奨コーディングスタイル

# ✅ 推奨スタイル
static box Main {
    init { console, result }    # フィールド明示
    
    main() {
        me.console = new ConsoleBox()
        
        local data              # 変数事前宣言
        data = processInput()
        
        me.result = data        # 明確な代入
        return "Success"
    }
}

7.3 よくある間違いと対策

# ❌ よくある間違い
init { field1 field2 }      # カンマなし → CPU暴走
x = 42                      # 変数未宣言 → ランタイムエラー
while condition { }         # 非対応構文 → パーサーエラー

# ✅ 正しい書き方
init { field1, field2 }     # カンマ必須
local x = 42               # 事前宣言
loop(condition) { }        # 統一ループ構文

🎉 Nyash 2025は、AI協働設計による最先端言語システムとして、シンプルさと強力さを完全に両立しました。

*最終更新: 2025年8月10日 - Arc Revolution + AI大相談会成功記念*