VRM入道

VRM侍は出家しますた(w    カリカリ

 
投稿者
メール

 
コメント
URL
コメントは新しいものから表示されます。
コメント本文中とURL欄にURLを記入すると、自動的にリンクされます。
投稿者:ghost
> VarResourceNoが4のままでMtdChangeTextureを呼んでしまうと(中略)無限ループと言うことですか?

このエントリに例示されているメソッドについて言うと、メソッド冒頭にadd VarResourceNo 1があるので、4のまま再帰呼び出しをしてもこのaddで値が5になりますから、すべてのifeqをスルーして処理の終了が保証されます。つまり、無限ループにはなりません。

VarResourceNoはグローバル変数ですから、このメソッド以外のメソッドからでもその値を変更することが出来ます。問題になるのは、他のメソッドがVarResourceNoの値を3にしてしまうことが有り得る場合でしょうか。これがこのメソッドの実行に併走すると、無限ループ化する可能性が出てきます。
外部要因については、明示的に3をsetしている場合はわかりやすいですが(これも意図せずにそう書いてしまった場合や、他のオブジェクトからやっている場合は、発見が困難です)これが何らかの計算の結果であったりすると、直感的な把握が極めて難しくなります。
投稿者:moko
>>わからないままにわかった気になってしまう
確認させてもらって正解でした。(--;)

何度も申し訳ないですが、もう一度確認させてください。

VarResourceNoが4のままでMtdChangeTextureを呼んでしまうと、
呼ばれる度にcall this MtdChangeTextureを実行して、
結果無限ループと言うことですか?
投稿者:ghost
問題となるのは自分自身を呼び出すcall命令です。>moko殿
つまり・・・

call this {このcall命令が含まれるメソッド}

という書き方。
これを一般に「再帰呼び出し」と言い、上手に使えば見た目に綺麗な(必ずしも高機能、と言うワケではない)コーディングが出来ます。が、このエントリに書いたような問題を孕んでいます。
再帰呼び出しを安全におこなうには、

・再帰しなくなる条件が明確に存在する(サンプルコードではifeq VarResourceNo 4にならないことがコレに当たる)
・その条件がかならず満たされることが保証される(同じく、VarResourceNoが外部から値を書き換えない限り、再帰呼び出し時に必ず1になること)

の2つが必要です。これが満たせないコードには予期せぬ無限ループ(その結果としてのメモリ資源の食い尽くし)の可能性があることになります。

まぁ、死にはしないし、逆に言うと無限ループを仮に起こしたとしても、ユーザーの大半はその責任がVRM4自身にあるのかレイアウト作者にあるのかがわからない、ということでもある(それ以前に「無限ループ」であるかどうかも判断できないでしょう)ので、何をやってもいいんじゃないでしょうか(ぉぃ!!)。

冗談はさておき。
ボクが言いたかったのは、危ないことをするな、ではなく、既存の他者の手になるコードを真似ていくときは、少しずつで良いので、その意味を自分なりに考えてみましょう、というお話です。わからないことがあれば何でも聞いてください。
本当の危険性は、VRMに限らず物事へ挑む姿勢として、わからないことをわからないままにわかった気になってしまう癖を、VRMスクリプトで養ってしまうことに潜んでいます。

ちょっと説教臭いな、我ながら。
ま、みんな楽しくVRMスクリプトをハックしましょうと。そういうことです(w
投稿者:Kaoru
 無限ループですか……先日やってしまいました。
でも「このスクリプト。絶対、無限ループに陥るだろうな」と、確信した状態でやってましたから「思ったとおりフリーズしてしまったか」でした。

 ghostさんが危惧しているように、稀な条件が成立した場合無限ループに陥るのは、作者も実際にその現場に立ち会わなければ解らないでしょうし、不幸にも立ち会った人には「VRM4のバグ」としか見えないでしょうね。

 プログラムにはバグはつきものだと割り切るしかないのかもしれません。今後、複雑なスクリプトを用いたレイアウトが増えることにより、このような問題が起こる可能性が増えることが予想されます。

http://wind.ap.teacup.com/asakaze_blog/
投稿者:moko
少なくとも「評判を落とす原因になり得る者」の一人はボクですね・・・。
気をつけなければ。(--;)

脳無な所為か完全に理解できていないので確認させて下さい。
call this メゾット名 で呼び出せば危険性は少ないと言うことですか?
投稿者:天狗亭
>過去形で語られてしまったので
「スクリプト禅問答」を亡き者にし、その後釜を狙うべく(!)書いたわけではなくて、単に「目指せ完全自動運転(12)−前回の解答と連載終了宣言」を見て、手が無意識に動いちまいますた。

因みに、この回の検証は、精神衛生上「パス」させていただきます。^^;

http://blue.ap.teacup.com/tengutei/

実験的代物

CSS無効化 ここで知った方法を使ってます

真・世界征服新着情報

今月のお勤め

2008年
← July →
Sun Mon Tue Wed Thu Fri Sat
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
Copyright (C) GMO Tea Cup Communication, Inc. All Rights Reserved.