😽

「Everything is Box」- 新しいプログラミング哲学を体現するNyash言語の魅力 - Rust製の新世代言語Nyash

に公開

2025年、プログラミング言語に革命を起こすNyashとは?
タイトル大げさですが claude code君に書いてもらったのでご容赦を!
注意:あくまでも趣味言語です

🎯 はじめに - なぜ「もう一つ」の言語が必要なのか?

2025年現在、プログラミング言語は数百種類存在します。「なぜまた新しい言語を?」と思われるかもしれません。

Nyash(ニャッシュ)は、そんな疑問に明確な答えを持つ言語です:

// 🎁 この「箱に詰める」感覚、体験してみませんか?
box User {
    init { name, email }
    
    pack(userName, userEmail) {  // ← 「pack」で直感的!
        me.name = userName
        me.email = userEmail
    }
    
    greet() {
        print("Hello, " + me.name + "!")
    }
}

local user = new User("Alice", "alice@example.com")
user.greet()  // "Hello, Alice!"

Everything is Box - すべてが「箱」という、シンプルで直感的な哲学。これがNyashの核心です。

💡 Everything is Box哲学の魅力

🧠 認知負荷の劇的削減

従来の言語では「プリミティブ型」「オブジェクト」「関数」など、概念が分散していました:

// JavaScript: 複雑な概念の混在
let number = 42;           // プリミティブ
let string = "hello";      // プリミティブ  
let object = { x: 1 };     // オブジェクト
let array = [1, 2, 3];     // 配列オブジェクト
let func = () => {};       // 関数

NyashではすべてがBox

// Nyash: 一貫した「Box」概念
local number = new IntegerBox(42)      // NumberもBox
local text = new StringBox("hello")    // StringもBox
local data = new MapBox()              // ObjectもBox
local items = new ArrayBox()           // ArrayもBox
local console = new ConsoleBox()       // 機能もBox

🔧 統一されたメソッド呼び出し

すべてがBoxなので、操作方法も統一されます:

// どのBoxでも同じパターン
number.add(10)           // 数値演算
text.length()            // 文字列操作  
data.set("key", "value") // マップ操作
items.push(number)       // 配列操作
console.log(text)        // コンソール出力

「オブジェクト」「関数」「プリミティブ」を意識する必要がありません。すべてBox、すべて同じ

🌟 Nyashの革新的機能

🔄 明示的デリゲーション - 継承の次世代形

従来の継承の問題点を解決する、明示的デリゲーション:

// 🔄 明示的で分かりやすいデリゲーション
box AdminUser from User {
    init { permissions }
    
    pack(adminName, adminEmail, perms) {
        from User.pack(adminName, adminEmail)  // 親の処理を明示的に呼び出し
        me.permissions = perms
    }
    
    override greet() {
        from User.greet()                      // 親のgreetを実行
        print("(Administrator)")                // 追加機能
    }
}
  • from構文: どこから何を呼び出しているか明確
  • override: オーバーライドを明示的に宣言
  • 隠れた魔法なし: すべての動作が可視化

📝 変数宣言厳密化 - メモリ安全性の保証

static box Calculator {
    init { result, memory }  // 📝 すべての変数を明示宣言
    
    calculate() {
        me.result = 42      // ✅ 事前宣言済み
        
        local temp          // ✅ local変数も明示宣言
        temp = me.result * 2
        
        // undeclared = 100  // ❌ コンパイルエラー!
    }
}

メモリ安全性と非同期安全性を、コンパイル時に完全保証。

🚀 実用性 - 実際のアプリケーション例

🎲 サイコロRPGゲーム

box DiceRPG {
    init { player, monster, random }
    
    pack() {
        me.player = new MapBox()
        me.monster = new MapBox()
        me.random = new RandomBox()
        
        me.player.set("hp", 100)
        me.player.set("attack", 20)
        me.monster.set("hp", 80)
        me.monster.set("attack", 15)
    }
    
    battle() {
        loop(me.player.get("hp") > 0 and me.monster.get("hp") > 0) {
            // プレイヤーの攻撃
            local damage = me.random.range(10, me.player.get("attack"))
            local monster_hp = me.monster.get("hp") - damage
            me.monster.set("hp", monster_hp)
            
            print("Player deals " + damage + " damage!")
            
            // 勝利判定
            if me.monster.get("hp") <= 0 {
                print("Victory!")
                return
            }
            
            // モンスターの攻撃
            damage = me.random.range(5, me.monster.get("attack"))
            local player_hp = me.player.get("hp") - damage
            me.player.set("hp", player_hp)
            
            print("Monster deals " + damage + " damage!")
        }
        
        print("Defeat...")
    }
}

// ゲーム実行
local game = new DiceRPG()
game.battle()

📊 統計計算アプリ

box Statistics {
    init { data, math }
    
    pack() {
        me.data = new ArrayBox()
        me.math = new MathBox()
    }
    
    addData(value) {
        me.data.push(value)
    }
    
    calculateMean() {
        local sum = 0
        local count = me.data.length()
        
        local i = 0
        loop(i < count) {
            sum = sum + me.data.get(i)
            i = i + 1
        }
        
        return me.math.divide(sum, count)
    }
}

local stats = new Statistics()
stats.addData(10)
stats.addData(20)
stats.addData(30)
print("Average: " + stats.calculateMean())  // 20.0

🔧 技術的な魅力 - Rust実装による堅牢性

💪 メモリ安全性

NyashはRustで実装されており、以下を保証:

  • メモリリーク防止: Arc<Mutex>パターンによる自動メモリ管理
  • データ競合回避: スレッドセーフなBox実装
  • 型安全性: コンパイル時の型チェック

🌐 3つの実行バックエンド

# 開発・デバッグ用(詳細ログ)
nyash program.nyash

# 高速実行用(MIR最適化)
nyash --backend vm program.nyash

# Web配布用(WASM生成)
nyash --compile-wasm program.nyash

一つの言語で、開発から本番まで最適な実行方式を選択可能。

🎮 実際に触ってみよう

インストール

# Rust環境前提
git clone https://github.com/moe-charm/nyash
cd nyash
cargo build --release -j32

# Hello World実行
./target/release/nyash examples/hello.nyash

ブラウザでも実行可能

# WASM生成
./target/release/nyash --compile-wasm hello.nyash -o hello.wat

# ブラウザで実行(WebAssembly)
# wasm_demo/index.htmlで確認可能

🚀 今後の展望

Phase 8: Native実行最適化

  • WASM最適化: ブラウザネイティブ並みの実行速度
  • Box操作: オブジェクト指向プログラミング完全対応
  • 非同期処理: nowait/await構文実装

実用アプリケーション開発

  • NyaMesh: P2P通信ライブラリ(Nyashの最終目標)
  • WebGUI: ブラウザアプリケーション開発
  • ゲーム開発: 高性能ゲームエンジン統合

💭 まとめ - Nyashが描く未来

Nyashは単なる「もう一つの言語」ではありません:

  1. 🧠 認知負荷削減: Everything is Box哲学による学習容易性
  2. 🛡️ 安全性保証: Rust実装による完全なメモリ安全性
  3. ⚡ 高性能: 280倍高速化を実現する最適化技術
  4. 🌐 実用性: 開発からWeb配布まで一貫した開発体験
  5. 🔄 明示性: 隠れた動作のない透明なプログラミング

プログラミング言語設計における新たな可能性を提示する言語です。


関連リンク:


この記事が気に入ったら、フォロー・いいね・コメントで応援お願いします!

Discussion