- Fixed deadlock in FileBox plugin copyFrom implementation (single lock) - Added TLV Handle (tag=8) parsing in calls.rs for returned BoxRefs - Improved plugin loader with config path consistency and detailed logging - Fixed loader routing for proper Handle type_id/fini_method_id resolution - Added detailed logging for TLV encoding/decoding in plugin_loader_v2 Test docs/examples/plugin_boxref_return.nyash now works correctly: - cloneSelf() returns FileBox Handle properly - copyFrom(Box) accepts plugin Box arguments - Both FileBox instances close and fini correctly 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2.7 KiB
2.7 KiB
Nyash Playground Guide(ブラウザデモ活用ガイド)
最終更新: 2025-08-13
リンク
ねらい
- 言語の要点(init/fini/weak/スコープ解放)を“動く例”で体感
- レビュワーやチームへの共有・再現を容易化(ゼロインストール)
使い方(最短)
- 上記リンクを開く
- 下のサンプルコードをコピー&ペースト
- Run/実行ボタンで結果確認(ログ・出力・エラー挙動)
シナリオ1: 循環参照 vs weak(自動nil化)
# Parent↔Child の双方向参照。
# 子→親は weak 参照にして、リークとダングリングを防ぐ。
box Parent {
init { child }
pack() {
me.child = new Child()
me.child.setParent(me)
}
getName() { return "P" }
fini() { print("Parent.fini") }
}
box Child {
init { weak parent }
setParent(p) { me.parent = p }
show() {
if (me.parent != null) { print("parent=" + me.parent.getName()) }
else { print("parent is gone") }
}
fini() { print("Child.fini") }
}
p = new Parent()
p.child.show() # => parent=P
# 親を明示的に破棄(fini 呼出しが発火する環境であればここで解放)
p.fini()
# 親が破棄済みなので、weak 参照は自動的に nil 化される
p.child.show() # => parent is gone(想定)
ポイント:
init { weak parent }で弱参照を宣言- 参照先が破棄されるとアクセス時に自動で
null扱い
シナリオ2: 再代入時の fini 発火(予備解放)
box Holder { init { obj } }
box Thing { fini() { print("Thing.fini") } }
h = new Holder()
h.obj = new Thing()
h.obj = new Thing() # 旧 obj に対して fini() が呼ばれる(ログで確認)
ポイント:
- フィールド再代入の節目で
fini()が自動呼出し - 二重解放は内部で抑止(安全側)
シナリオ3: スコープ抜けでローカル解放
function make() {
local t
t = new Thing()
# 関数を抜けるとスコープ追跡により t が解放される
}
box Thing { fini() { print("Thing.fini (scope)") } }
make() # => Thing.fini (scope)
ポイント:
localで宣言された変数はスコープ終了時に一括解放- 暗黙ではなく構文規約で明示(未宣言代入はエラー)
Tips(レビュー/論文向け)
- 論文やREADMEから本ガイドへリンクし、コピー&ペーストで再現
- 期待ログ(例:
Thing.fini)を明記して、挙動の確認を容易に - 比較のため「weakなし版」と「weakあり版」を並記