一括表示

− 野ざらし言 −

[4524] >? の分岐について

文太 2018/09/25(Tue) 17:42
めざらさん

 >?{ #Y .. * }. *
 これを見たときから気になっていて、諦めの良い僕としては、このような書き
方する必要は、少なくとも僕には、ない、と結論したのですが。
 ほんとうは諦め悪いのか、せっかくかなりしつこく引っかかったので、質問だ
けはさせていただいてしまおうかと、まことに勝手ながら思いました。
 何かコメントを頂ければ幸いです。

 上は、
 >?{ #Y .. * .} *
 これと同じ意味ですよね? なぜ、中カッコの外にピリオドを置くのか? そ
して、しかし、どうも、誰もこれに関して、言葉にして疑問を呈したことがない
みたいなのです。「誰も、ない」の部分は、自分のグレップ力にそれほど自信が
あるわけではありませんが。
 網羅的に調べたわけではありませんが、上村さんは、下の正統的なスタイルでした。
そりゃそうだろうと思いました。

=== Macrotmp by B ===;
* M
50 ^^ "Macrotmp"

	i=1,

:A	i++,
	(i==5)? .
	(i)>? {#d #s} >a>b>c .	;カーソル移動コマンドは無意味。ダミー。

:a &?("A") #m >A
:b &?("B") #m >A
:c &?("C") #m >A

*
答え:
A
A
A
となる。

 こんな性質を「利用」してるというか、面白がっているというか、というとこ
ろなのだろう、と思ってます。古くは、N.Myaaさんが使われ始めたみたいでした。
 カッコの外にだすと、「終わるぞ」と強調しているみたいに、見えなくはないけど……。

 これは、無限ループの罠(ループカウンタが残ってしまう)とは別の事柄です
よね。

 * * のほうについては意味は分かっています。こちらも、わざわざそんなこと
をする必要はないよ、と結論したのですが。

[4525] Re: >? の分岐について

文太 2018/09/25(Tue) 21:33
[4524]へのコメント
 すいません、諦めると、見つかってしまうのですねぇ。

 引用です。
--------------------------------------------------------------------------
Emmett氏, 95/8/27, <nifty:FGALPK/MES/15/1837>

        (a)>?{ . . . }   &b (2)
               0 1 2 3   4  5
 この } が、 (0から数えて)3番目に位置する、独立したひとつの命令だと見
  なされてしまうというところです。 多重分岐を実行する場合、VZは { の次か
  ら単純に、0、1、2と数えて行って、内部レジスタの値に相当する位置にある
  命令を実行する……
 のかと思うと、 それじゃぁ例えば a==5 の場合は &b をスッ飛ばして (2) だけ
  を実行するかと言うと、そうじゃない。a==4 以上の場合は a の値が幾つであろ
  うと、ちゃんと &b から実行します。
--------------------------------------------------------------------------
 (ちょっと引用長すぎると感じてます。ごめんなさい。)

 後半なんかは、上のマクロの挙動(AAA)と完全に一致する。
 しかし、閉じカッコに当たっているのだ、と証明できるマクロのサンプルが
思いつかないのです。3,4,5,6,7 ....で、ビープなってしまいますよね。
 そこに当たってるの? とただ、驚き。

 どうやって3番目が &b でなく、} だと確認できるのでしょう?
 3と4でヒット箇所(!)が違うから、違う挙動を示してくれるマクロって、書け
ますかね? だって、3なら4をしちゃうのだもの。(逆に妄想ですが、これをc.mos
さんは見切っていて、こんな仕様にした、とか。でも、m.gannさんは、そこに危険
を見た、、、。)
 Emmettさんを疑っているわけでは、まったくないのですが。
 あらゆる状況証拠は、Emmettさんの書いていることを支持してはいるのですが。
もっと難しく、ソースからピンポイントにいうと、榊原さんの指摘、ということになる
でしょうけれど。
 結論は最初から分かっています。ふつうに>? {....}と、中に書けばいいじゃん、と。

 でも、m.gannさんはぜったい偏愛してると思う。m.gannさんの、vzfl_g2.defとか
さっき見ちゃった。16階、ish部屋でした。vzfl.defにFキーがいっぱい。なるほど。
しかし、[F01]は使ってない。まずのかなぁ。

[4526] 「ゾンビ現象」

文太 2018/09/25(Tue) 22:31
[4525]へのコメント
 一人相撲でごめんなさい。VzFAQネタに、どうぞ。

m.gann氏, 92/8/5, <nifty:FGALPK/MES/13/318>

 このあたりだ。本当に、}に当たる。そして、それは確率は低いとはいえ、
とんでもない現象を引き起こす可能性がある。
 分かりました。多重分岐で、}に当てることのないよう気をつけます。
 そんなところに当たっているとは、ゆめゆめ思わず、、、。
 やっぱ無限ループと同根なんだ。

>? {.....}
 とちゃんと数さえ間違えなきゃ、いいんですよね。
 ま、怖いから。
>? {....}.で、困らないときには、忘れなければ、こうします。

 いちおう報告。

mg..4=3,
(3)>? {...}
&m("%d",mg..4)

mg..4=3,
(4)>? {...}
&m("%d",mg..4)

 なんてやってみたけど、分からず。もしかしたら、「Vzトークン覚え書」の
「 } 」で、もっと濃ゆい説明とかしちゃってもいいのかも、、、。

追伸:知ったかぶりをするつもりはまったくないのですが。

(3)>? {>a>b>c
 単体だとエラーになり、

 この下に別マクロであっても、} があれば、エラーにならなかったとき、}に
鍵がある、とは思ったんですよねぇ。もちろん、全部は消化できてません。
 ただ、少し本気で納得した、という感じです。{}がお祈りとか、{ だけでいいとか
言われると、え、m.gannさんって、そんな審美的な感じであのコード書いてたの?
とか思ってしまっていたもので。

[4529] 過去ログの大きさ?

文太 2018/09/26(Wed) 15:45
[4526]へのコメント
過去ログの大きさ?

 どれくらいの量の情報だと思いますか。
 答え、ものすごくアバウトに、文庫本80冊程度でした!

 m.gannさんのは、中身がわからずに2回ぐらい目にしたことがあった
ような感触ですが、Emmettさん記事は、たぶん、本当に初めて。
 いっぱい知らないことって、あるんでしょうね。
 簡単にどう計算したか。

>dir /s 			;AP, PK, DCのログディレクトリで
>Izgrep -i "LOG"		;xxx.logのみ。-- ignorecase
>Izgrep -v "ディレクトリ"	;vzlogなんてディレクトリだったもので。
				;ゴミ削除。-- versaの意味かな。

;awkが計算できないというので、byte -> KBへ、3桁カット(矩形ブロックマクロ)
>Jgawk "{total+=$3} END {print total}"
;結果:19145 KB
;文庫本を原稿用紙300枚とし(厚め)、原稿用紙は400字==800 bytes
;インスタントマクロで、掛け算と割り算。19145/240=80

 色々あると思うので、70冊から90冊のあいだのどこか、ぐらい?
 (ish部屋とかも入ってます。)
 ふう、それは読めんわ。
 そして、Vzマクロの貴重な情報というのは、Vzのソースばかりか、
あの膨大なVzマクロ作品のコードにも入ってるんですよね。

 榊原さんが言ってたとおり、* * のコメント機能は、コードが読めなくても
明らかなc.mosさんの意図と分かります。see macro.asm.
 やっぱ使うか。でも、ヘタに背伸びすると、無意味にバグらせそう。

[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とか言うし。

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

[4527] Re: >? の分岐について

めざら 2018/09/26(Wed) 10:12
[4524]へのコメント http://mezala.la.coocan.jp/
> >?{ #Y .. * }. *
>  上は、
> >?{ #Y .. * .} *
>  これと同じ意味ですよね? なぜ、中カッコの外にピリオドを置くのか?

 意味は違いますね.内部レジスタの値が3のときは「* … *」が結果的にコメントとして解釈されて同じですが,4のときは「ループの終了+外のピリオド」と「内側のピリオド」という停止に至る過程が異なります.「実行結果」という意味では同じですが.5のときは結果も異なります.(このコードってどこから?)

 真剣に検証すると色々出てくるのかもしれませんが,エネルギーを必要としますから.ごめんなさい,躁期に入って労働意欲(畑仕事に限る)は出てきたのですが,不眠と便秘がセットで到来して思考意欲が極端に低下中なもので……(^^;

こんな体調の日に遅番は辛い.

[4528] Re^2: >? の分岐について

文太 2018/09/26(Wed) 15:43
[4527]へのコメント
>5のときは結果も異なります.
 ほ、ほんとだ!
 とはいえ、この場合には、(s)>? なので、害はないですね。
5がない。
 しかし、いつも (s)とは限らないので注意します。
 たしかに違う。
 ありがとうございました。実に、1ミリの隙もない、
200%的確な指摘でした。

>(このコードってどこから?)
 konnoさんのところの、#8121 からです。
 大元はm.gannさんで(きっと)、lfをm.gannさんがいじった
のではないでしょうから、としきさんのアレンジだろうと思い
ます。

 お大事に。m(__)m

↑ このページの先頭