無限ループ脱出ツール「Jolt」 74
ストーリー by reo
カフェイン二倍 部門より
カフェイン二倍 部門より
ある Anonymous Coward 曰く、
マサチューセッツ工科大学が無限ループに陥ったソフトウェアを「ループから脱出させる」ツールを開発したそうだ (MIT news の記事、本家 /. 記事より) 。
「Jolt」と名付けられたこのツールはLLVM (Low Level Virtual Machine ) を使った静的計測とランタイム監視を組み合わせ、ループ反復時のメモリ状態を比較することで無限ループに陥ったかどうかを判断するという。Jolt はプログラムコンパイル時にプログラムのループ開始箇所と終了箇所をマーキングし、ループ処理が行き詰まってしまった場合には処理をスキップし、次の処理へとプログラムを進めるとのこと。
ただし、Jolt で全てのループ処理をチェックするとプログラムの実行時間が 7 〜 8 % 遅くなるという難点もある。また商業ソフトウェアの開発者に Jolt の使用を求めることは難しいため、研究者らはコンパイルされたアプリケーションに直接使える同様のツール開発を目指しているとのこと。Jolt のバイナリバージョンとも言えるこのツールは「Bolt」と呼ばれているとのことだ。
そうすると (スコア:2, おもしろおかしい)
ビューティフルドリーマーや片恋の月やまどか☆マギカがすぐ終わっちゃうようになるんですね。
らじゃったのだ
Re:そうすると (スコア:2)
8月にそのネタは何かを思い出すからやめろぉおお。
Re:そうすると (スコア:1)
キョン君でんわ~。
Re: (スコア:0)
15532回位繰り返すんですか?
Re: (スコア:0)
ほむらは意図して過去に戻っているから、無限ループとは違う気がしますけどね。
Re:そうすると (スコア:1)
止めると言う判断に到らなければ無限ループとかわらんのでありますよ
#最後だって無限ループから抜けたんじゃなくて、オーバフローしただけなんじゃ……
Q:助けて!この無限ループのバグがとれないんです! (スコア:2)
while(vs_WIN != vs_witch(homuhomu.party ,warupurugisu))
{
world.reset(homuhomu.magic.timejamp(ThatDay);
・・・
}
1話の頭からワルプルギスと戦ってたからこれでいいんですよね?
Re:Q:助けて!この無限ループのバグがとれないんです! (スコア:1, おもしろおかしい)
リセットする前にいろいろ訓練を積んで強くなる過程をいれないと。
homuhomu.power=+1;
みたいな。
それを係数にしてワルプルとの勝利判定を行って、それで勝利すればループを抜けられる。
Re:Q:助けて!この無限ループのバグがとれないんです! (スコア:2, すばらしい洞察)
> それを係数にしてワルプルとの勝利判定を行って、それで勝利すればループを抜けられる。
つまりは無限ループにはならないことを意図したんでしょうけど、
> リセットする前にいろいろ訓練を積んで強くなる過程をいれないと。
> homuhomu.power=+1;
powerはずっと1のままなので、無限ループになってしまう、と。
無限ループバグが発生する見本みたいなコードですね。
間違ってるよね。 (スコア:2)
従来通り無限ループにならないようにすべきで、やってもロックしたアプリを殺して連携アプリはそれにソフトランディングできる程度までにしとくべき。
とはいいつつも、20年以上前だがFM TOWNS用の暴走復帰アプリとして未使用のintベクタを全てフックすることで、暴走を捕まえてコマンドプロンプトに強制復帰するフリーウエアを作っていたけどね。^^;
(戻ってきても不安定なことが多かった。)
んで、これってアイドルしてるのも抜いてしまうん?
俺のマシンは無限ループを9秒で抜くぜ!!
Re:間違ってるよね。 (スコア:1)
計算系のソフトだと問題になる袋小路多そかなぁ...?
M-FalconSky (暑いか寒い)
デッドロックの解決につかえるかな? (スコア:2)
デッドロックの解決につかえるかな?
と思ったものの、ロックを無視してループを出ちまうんじゃダメだな。
AMラジオ (スコア:1, 興味深い)
Re:AMラジオ (スコア:2, 興味深い)
FM-7では、本体に内蔵されていたスピーカーに載るノイズで判断できました。
自分で作ったソフトではなくて、雑誌のDumpListを打ち込んだものですけど、
不思議と同じ特徴を持つノイズが奏でられるんですよね。
初めて扱うソフトなので、それが無限ループなのか、処理に時間が掛かっているのか判断がつきづらかったので、
この音には結構助けられました。
Re: (スコア:0)
多分、音が高すぎて聞こえないのでは?
Re: (スコア:0)
速すぎる&スライスされるため、余程長いループで無い限りはCPU使用率がなんとなくわかる程度じゃないでしょうか。
ループにしたってイマドキじゃあ大半の処理時間が単調なループでも可笑しくないしな・・・
ループ脱出後 (スコア:1, おもしろおかしい)
Re:ループ脱出後 (スコア:1)
原論文見ると、ループの外に追い出してやれば上手く復帰するソフトもあるみたい。
まあ、ダメモト系ソフトなんだから、たまに成功してくれれば儲けものでしょ。
完全に復帰しなくても、編集中のデータを保存するまででも持ってくれるだけでも助かることは多そう。
Re: (スコア:0)
まあ、ちょっと世界を改変してメガネっこになっちまうだけだ。
臭いものには蓋 (スコア:1)
要するにバグの放置でしょう
#ガベージコレクタのような手動では面倒なことを自動にするのならともかく
Re:臭いものには蓋 (スコア:2, 参考になる)
フリーランニングカウンタの一種で、定期的に書き替えないとカウンタが最大値まで達した時にNMIまたはリセットを発生させます。これを利用してプログラムが暴走したときに自動で初期化させます。自動車のECUなど高い信頼性が求められる製品にはたいてい載っています。
チューニング技法 (スコア:1)
ループ処理とツールに認識されないように後ろ向きgoto文を使う…っと. で, 出来た物は古典的スパゲッティコード.
えてして, こういう姑息なチューニングをするのが無限ループを仕込むんだよね.
Re:チューニング技法 (スコア:2, 参考になる)
そんな面倒な気遣いは不要。
原論文 [mit.edu]を斜め読みしただけだけど、ループ中で少しでも状態が変わっていれば無限ループとして検出されることはないので、第二種過誤の心配はまずない。少なくとも私には、無限ループに陥った場合以外でループ先頭に戻る毎に同じ状態になる例が思いつかない。
Re: (スコア:0)
つまり
for(;;) i++;
としただけで(iはオーバーフローしないものとして)無限ループ検出できなくなるってこと?
Re:チューニング技法 (スコア:1)
今のところは対象外に見えます。
ですが、まだ実験して論文書いてという段階なので、今後対応する可能性はあるでしょう。
Re:チューニング技法 (スコア:1)
Re: (スコア:0)
全くド素人の発想なんですが、何らかの入力があるまでとか、デバイスの状態に変化があるまで、無限ループで待ち続けるって事は無いのでしょうか。
Re:チューニング技法 (スコア:3, 参考になる)
ノンブロッキングのIOでポーリングしてる場合なんかはそうなるかもしれない。
ただそんな厳密な、汎用的な用途を期待されるものでもないようで、論文の序にあるのは「ワードで文書書いてたら無限ループで止まってしまった。そこでデバッガでプログラムを止めて、プログラムカウンタをループの外に出して実行再開したところ、問題なく動き文書のセーブなどができた」という逸話で、しかし誰でもデバッガが使えるわけじゃないし、どっちにせよ面倒な作業なので、これを自動でやるツールを作りましたみたいに言っている。
Re:チューニング技法 (スコア:1)
まちがい。第一種ね。
ご指摘感謝。
ドラゴンクエスト (スコア:1)
ローラ「その あなたの たびに ローラも おともしとうございます。
このローラも つれてって くださいますわね?」
→いいえ
ローラ「そんな ひどい……。」
ローラ「その あなたの たびに ローラも おともしとうございます。
このローラも つれてって くださいますわね?」
→いいえ
ローラ「そんな ひどい……。」
…
このループから解放されるというのか!
# 解放後の動作は結局「はい」のほうになるんだろうが。プログラムのバイナリコード上は。
Re:ドラゴンクエスト (スコア:1)
一度も話しかけなければ、そのままエンディングまで進めますよ。
-------- tear straight across --------
Re:ドラゴンクエスト (スコア:1)
驚きました。
Re: (スコア:0)
*「おはよう ございます。
ゆうべは おたのしみでしたね。
# 大丈夫だ。既成事実は出来ている。連れて行ってやんなさい。
# しかし、すぐ隣に姫の家(城)があるというのに、宿屋に連れ込んでしまうから「勇者」(意味が違う)なのか。
# あるいは無限ループ的強制で姫が誘った(?)のか…。
Norton CrashGuard (スコア:1)
無限ループからの脱出ではないですけど、昔こんなソフト [impress.co.jp]がありましたなあ。
極稀に復活することがありましたけど、基本的にヤブでした。
青画面をフックして検出できるとしても、どうやって戻り先を決定していたんだろう。
チューリング涙目 (スコア:0)
Re:チューリング涙目 (スコア:2, おもしろおかしい)
「キー入力があるまでループで待つ」ルーチンを作る
→このツールのせいで待たずに次の処理に行ってしまう
→このツールにより回避されたらキー入力の時点まで戻る、というパッチを当てる
→「~まで戻る」というループをこのツールに発見され……
Re: (スコア:0)
有限長テープのチューリングマシンが無限ループしてるかどうかは(テープの全パターンを網羅さえすれば)簡単に判別できる。
Re:チューリング涙目 (スコア:4, おもしろおかしい)
プログラム「ごめんなさい。私ごときが無限ループに陥ってしまってごめんなさい……」
ごくごく狭い私の経験 (スコア:0)
その後はほとんど出ないので問題にならない…
と思ってたけど、そういば最近あったわ。見過ごされてた条件で
運良く助かってた例が。なかなか起きない条件なのは間違いない
けど。
Re:ごくごく狭い私の経験 (スコア:1, 参考になる)
同感だなあ。
たとえ個人のフリーウェアであっても、リリースされた段階のソフトウェアで
無限ループが原因でフリーズしてる状況に遭遇する事は滅多にない気がする。
極めて明らかなバグで、発生条件を適切に報告すれば直ぐに対応されそうな種のものだし。
緊急回避としては有り難いツールかもしれませんが、日常的に使うものではなさそうですね。
せっかく13億回のループを作ったのに (スコア:0)
せっかく13億回のループを作ったのに、10億回で無限ループだと判定されて勝手に切られちゃうんだよ
みたいな被害が出ないかなあ。
Re:せっかく13億回のループを作ったのに (スコア:1)
>みたいな被害が出ないかなあ。
むしろ使いかたとして、「ここでは無限ループを判定してくれるな」という場所にディレクションを与える気がします。
予想してない枝葉末節のコード部のうっかりを検出してくれるだけでも、便利そうなツールではありますよね。
それか、単純に「このパラメータが更新されている限り無限ループと判定しない」とか。
しかし実際問題、解の収束に時間のかかる反復計算は、人間ですら収束判定に迷うので(百万分の一を割ったら収束とか)、
解が収束せず発散して無限ループに陥っているかを判定するのに使うのは、複雑なアルゴリズムの場合無理なんじゃないかなあ、と。
#わざわざニュースとして取り上げられているということは、
#その辺りにある程度の指針をもったツールを作れたということかもしれませんが。もしそうなら詳しいかた、解説希望します。
Re: (スコア:0)
ですよね。
プログラミングを始めて二日目に円周率を計算しようとして、
Hello World みたいに即座に結果が出ないからバグだと思って
何度も書き直すとか、よくあります。
人間にわからないことが機械にわかるか!(矛盾
PS3使いなよ (スコア:0)
無限ループも3秒で抜けるぜ。
Re: (スコア:0)
抜けるのがわかってる時点で、無限ループではないのでは?
Re:PS3使いなよ (スコア:3, 参考になる)
説明するのも無粋ですが、「新型のCrayはすごく速くて、無限ループも6秒で抜けてしまう。」って感じの古典的ジョーク [google.co.jp]があるんです。
こういうループ(バグ)には無効? (スコア:0)
Re: (スコア:0)
Re:こういうループ(バグ)には無効? (スコア:2)
オーバーフローするところまでを1回のループとして拾ってくれそうな気も
なんか (スコア:0)