作成日: 2025年8月11日
著者: Nyashプロジェクトチーム
ステータス: 設計思想決定版
2025年8月11日、Nyashプログラミング言語の開発において、言語設計史上最大級の発見がありました。それは、暗黙のオーバーライド問題の発見と、それを解決する完全明示デリゲーション構文の誕生です。
この文書は、なぜこの革命が必要だったのか、どのような思想の元に設計されたのかを詳しく解説します。
Nyashの実装を詳しく調査した結果、恐ろしい問題が発見されました:
// instance.rs - add_method関数
pub fn add_method(&mut self, method_name: String, method_ast: ASTNode) {
let mut new_methods = (*self.methods).clone();
new_methods.insert(method_name, method_ast); // ← 暗黙の上書き!
self.methods = Arc::new(new_methods);
}
この実装により、以下のような暗黙のオーバーライドが発生していました:
box Node {
send(msg) { // 最初の定義
print("Version 1")
}
send(msg) { // 暗黙に上書きされる
print("Version 2") // ← こちらだけが残る
}
}
この問題は、Nyashの3つの核心哲学と完全に矛盾していました:
暗黙のオーバーライドは、これらすべてを破壊する言語設計上の致命的欠陥だったのです。
この問題の解決策を求めて、言語設計の専門家であるGeminiとChatGPTに相談を行いました。結果は予想を上回る圧倒的な支持でした。
「全面的に賛成します」
「極めて重要な一歩」
「Nyashのアイデンティティを確立する」
「強く整合する」
「安全性と読みやすさを大幅に向上」
「実装工数3-5日程度」
両専門家から以下の重要な指摘がありました:
この問題を解決するため、以下の4つの統一原則を確立しました:
box Child from Parent // デリゲーション関係の明示
override methodName() // オーバーライドの明示宣言
from Parent.methodName() // 親実装の明示呼び出し
from Parent.init() // コンストラクタも同じ構文
box MeshNode : P2PBox {
init routing = RoutingTable()
constructor(nodeId, world) {
from P2PBox.constructor(nodeId, world) // 統一構文
me.routing = RoutingTable()
}
override send(intent, data, target) { // 明示的置換
me.routing.log(target)
from P2PBox.send(intent, data, target) // 明示的呼び出し
}
}
従来の問題:
Nyashの解決:
override
で置換を明示宣言from Parent.method()
で呼び出し先を完全明示多重デリゲーション時の曖昧性解消:
box SmartNode : P2PBox, Logger {
override send(intent, data, target) {
from Logger.debug("Sending: " + intent) // どのLoggerか明確
from P2PBox.send(intent, data, target) // どのP2PBoxか明確
}
}
// 競合時は更に明示的に
box ConflictNode from ParentA, ParentB {
override ParentA.process(data) { // ParentAのprocessを置換
from ParentA.process(data)
}
override ParentB.process(data) { // ParentBのprocessを置換
from ParentB.process(data)
}
}
覚えるべきルール:
override
from Parent.method()
from Parent.init()
たった3つのルールで、すべてのデリゲーション操作が表現できます。
# MRO(Method Resolution Order)地獄
class C(A, B):
def method(self):
super().method() # どっちのmethod?
Nyash の解決:
box C : A, B {
override method() {
from A.method() // Aのmethodと明示
from B.method() // Bのmethodと明示
}
}
// どの親のmethodを呼んでいるかコードから不明
@Override
public void method() {
super.method(); // 単一継承でも曖昧
}
Nyash の解決:
override method() {
from Parent.method() // どのParentか完全に明確
}
// 暗黙のオーバーライドによる事故
class Child extends Parent {
method() { // うっかり同名メソッド → 意図しない上書き
// ...
}
}
Nyash の解決:
// overrideなしで同名メソッド → コンパイルエラー
// 意図しない上書きは100%防止
この革命は、Nyashの根本思想「Everything is Box」と完全に統合されています:
Nyashが目指すのは、「魔法のない言語」です:
複雑な概念を、シンプルな文法で表現:
override
= 「置き換えます」from Parent.method()
= 「親の方法を使います」ChatGPT先生の提案による実装ロードマップ:
Phase 1(0.5-1日):
override
キーワード追加Phase 2(1-2日):
Phase 3(1日):
from Parent.init()
実装既存コードの安全な移行:
Before(暗黙オーバーライド):
After(明示的オーバーライド):
Before:
// これは何をオーバーライドしている?
send(msg) {
// 親を呼んでる?呼んでない?
processMessage(msg)
}
After:
// P2PBoxのsendを明示的にオーバーライド
override send(msg) {
processMessage(msg)
from P2PBox.send(msg) // P2PBoxの実装も使用
}
この明示的デリゲーション革命により、Nyashは以下を達成しました:
Nyashのこの革命は、今後のプログラミング言語設計に大きな影響を与えるでしょう。「暗黙より明示」という哲学が、ついに技術的に完全実現されたのです。
2025年8月11日は、プログラミング言語史において「明示的デリゲーション革命の日」として記憶されることでしょう。 🎊
この革命により、Nyashは単なるプログラミング言語を超えて、新しいプログラミングパラダイムの先駆者となりました。
Everything is Box. Everything is Explicit. Everything is Beautiful. 🌟