記事閲覧

− 野ざらし言 −

4530 ゾンビのその後

文太 2018/09/30(Sun) 17:52 [4526]へのコメント
 メモ書きの独り言です。m(__)m

======= ゾンビ.DEF by m.xxxx =============================;伏字に意味ある?
PK13 #00310 92/08/04 22:53
1 ^K^ で登録したあと、まず、 ^^ で92番のマクロを実行します。何度実行
 しても「92番を実行しました」というメッセージが出ることを確認しておい
 て下さい。
2 次に、^\ で93番のマクロを実行し、何かのキーを押して終了させます。
 何度繰り返しても、同じであることを確認しておいて下さい。
3 93番のマクロを終了させた状態で、ふたたび ^^ で92番のマクロを実行
 します。
  すると、どうでしょう。 ^^ で92番のマクロを実行したつもりでも実際に
 実行されるのは93番ではありませんか!!

*m
92 ^^   ""
        a-,
:A      (a)>?{ #26 #27 } (a++<16)? >A
        &m("92番を実行しました") &b(3)

93 ^\   ""
        i-, (-1){
                &m("93番の実行中%4d%-32s何かのキーを押すと終了",i++,"")
                &b(3) &w(15) &k (r)? >B
        }
:B      &m("93番を終了しました")
*
======= ゾンビ.DEF =======================================

 メモです。何となくやってみようと思っただけです。それほど深く追いかけては
いません。
 上は再現しないと思う。

>「(-1){」の「{」が生きたままマクロが終了しているということではないのかな?
 というのが、くらとさんの回答。


--- 長すぎる引用、ごめんなさい、ありがとうございます >m.gannさん
 無限ループはもちろん、有限ループの場合も途中でループを脱出した場合は、
「ゾンビ」の要因が残されてしまいます。
 ほとんどの場合は、それが顕在化せずに済むわけですが、低い確率で引き金が
引かれることがあります。「{」よりも「}」の方を先に実行してしまった場合が
そうです。
 ループカウンタが初期化されていない状態で「}」に出会うと、仕様通りルー
プ開始ポインタへジャンプします。「}」はまさにジャンプコマンドなんですね。
 蛇足ながら、ループ開始ポインタへ飛ぶ場合、そのマクロがたとえ上書きされ
消滅していてもそのアドレスへ飛び、あるいは飛び先でのマクロ・ラベルジャン
プが不定となるなど、予想できない動作となる可能性があります。
 引き金となるのは、多重分岐文でしかも(式)の値が限定的でなく、「}」へ
ジャンプする可能性がある場合です。
---
 (対策は記事の続きをどうぞ)
 常識的には
 ・無限ループは {} で脱出。
 ・多重分岐は数をきちんと数えよ
 でしょうけれど。

 で、「再現しませんよね」で僕が思うのは、高橋さんが、「ループカウンタの
初期化」をするように「バグフィックス」(?)してくれたのではないかしら? 
空想です。

 じつは、
; from ygear.def top
	(s)>?{ >A . >A >A . } .
 sに5はない。しかし「ゾンビ現象」で、} に実行ポインタが飛んでくる
可能性はなくはない(たぶん)。その場合にも、} のあとの「.」で止まる。
深慮というより習慣なんだろう、とか。
 そんな安全策かなと想像していて。

 高橋さんの何かで、ゾンビが完全に殲滅されたのだとは、僕は思っていません。
何しろゼロ戦Vzですから。

 そして、
(r)>? {.. (a=2,b=3) (a=3,b=4) (a=4,b=5) ...}
 みたいには書けるのね、と発見。誰もやってないみたいなんですが(僕のvzdef
ディレクトリ内)、大丈夫ですよね?
 この手のことは、ygrepの正規表現&特殊文字では、うまく指定できないの。
 すぐGarbled commandとか言うし。

 台風です。そろそろ都内で電車がいっぱい止まります。宮崎はどうなったでしょうか?

関連記事一覧ツリー (▼ を押すとツリー全体を一括表示します)

- 4524.>? の分岐について - 文太 18/09/25-17:42

返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

おなまえ :
Eメール :
タイトル :
メッセージ: 通常モード(推奨)  整形モード(非推奨)  preモード(空白再現)
※ プログラムコード等を含まない場合は,できるだけ通常モードをご利用ください。

参照先 :
暗証キー: (英数字で8文字以内) プレビューなし


- 以下のフォームから自分の投稿記事を修正・削除することができます -

処理 記事No. 暗証キー