新しいものを表示

なので、出来る限りクリティカルなものから終了処理させないといけないし、それによって停止する可能性が高い同期処理なのであれば、その処理の重要性と新たなリスクを天秤にかけて場合によっては別スレッドで実行すべきかも><(もちろん最終的にタイムアウト出来るように作るべきかも><)
そこまで出来る限りの事をした上ではじめてプロセスごと自殺させる選択肢が出るかも><

orange さんがブースト

ちなみに迂闊にファイルをフラッシュしようとすると I/O が永遠にブロックしてプロセスが終了しなくなるなどの場合が現実にあります (というかそれでつらい思いをした)

スレッドを表示

もちろん><
一か八かな状況に陥ってるんだから少なくともファイルハンドルは解放しないと><

orange さんがブースト

たとえそれがファイルシステムやデバイス側の異常に見えたとしても、ですか?

どんな異常であろうがとりあえず開いているファイルだけはとにかくなるべく閉じよう
ってしてるけど少なくともオレンジは><;

orange さんがブースト

だから「どういう “異常” なのか」次第なので、一口に「異常」と言われてもそんなのケースバイケースです

ファイル開いてる時に異常検知したらとりあえずとにかく『ファイル閉じてから』終了しない?><;
もちろん『ファイル閉じようとして閉じれなかったら諦めて次にすべき終了処理にスキップする』ってなるように><

UNIXのソフトウェアって、異常検知した時に開いてるファイルを閉じずに終了させるように書いたりするの?><;

Windowsのアプリケーションは、そういったダメもとでも実行するほうが良い終了処理がいくつも出てくるので(※1)、ちゃんと異常が起きた時になるべく必要な終了処理をよりクリティカルなものを優先して実行するように書くクセをつけましょう><
(※1 これWindowsに限らないと思うんだけど・・・><)

逆にその場面でUNIX文化圏の人がやらかしそうなのが、『シンプル』にするために多重の安全装置を省いて、アームへの電源を断って、だらーんって勢いや重力で動いちゃってどっかにぶつける事故><

それは例えばアームを停止する動作(何らかのロック機構とか)を(用意した上で)(ダメもとでも)実行すべきかも><
ダメもとでもって結構重要で、原子炉の非常用発電装置には安全装置がついていない><(ダメもとでも動かなければならないので><)

orange さんがブースト

たとえば、人が近付くとアームを引っ込める処理があるとします。
でもアームを引っ込める処理をしたのにセンサはアームがどんどん飛び出していることを報告するかもしれない。
それでもまだ「異常事態には人に危害が及ばないようアームを引っ込めるべきだ!」といえますかね

それって単にきれいに処理を抜けるように書いて無いだけでしょ?><;
きれいに処理を抜けることすら不可能かつ異常を検知できる状態ってある?><;

orange さんがブースト

エラーに対処できるならすればいいけど、対処しようのないエラーとか、対処を考えるだけ無駄なエラーとかがあって、そのうちごく一部に「幸運にも assert とか書いとくだけで検出できるエラー」があるんですよ

原子炉だって想定外の異常時に停止するけど、「動作を停止」するわけでは決してなく「運転停止動作を実行する」ように作られている><

ホーアはこれでUNIX流シンプルを賞賛してAda流の複雑にガチガチに神経質に異常を見つけようとする文化を批判してる><
でも、Adaが使われるような人が死ぬ分野ではホーアが批判してるような「複雑になっても(合理的な確率で)想定される全ての異常に対処する」になってるかも><
最終的に異常停止しか出来なくなる事態は同様にそれぞれ想定されていても、そこに至るまでのエラートラップの規模が全く違うかも><

ホーアのこれだと思う><

"ソフトウェアを設計するには、2通りの方法がある。1つは、とてもシンプルに設計して、明らかに欠陥がないようにすること。もう1つは、とても複雑に設計して明らかな欠陥がないようにすることだ。前者の方がはるかに困難である。"

アントニー・ホーア - Wikipedia ja.wikipedia.org/wiki/%E3%82%A

『あり得ない状況※a』とはあり得ない状況であると認識できない状況であって、『あり得ない状況である※b』と認識可能であれば、『あり得ない状況※b』を前提に処理すべきかも><

言い方を変えると、『あり得ない状況※a』であると認識出来る事に期待すべきではないかも><

orange さんがブースト

結局同じことで、我々は暗黙に或いは明示的に「不変条件」とか「一貫性」というものを想定して、それが満たされているときにしか動かないプログラムを書いている。
不変条件の存在しないとはすなわちあらゆる仕様が信用できないということなので、本質的にナンセンスなんですよ。「ありえない状況」の存在しないプログラムはありえない。

書けばいいかもというかオレンジは実際そんな感じに偏執的に?><; 書いてる><
というかそれが当たり前だと思ってたし、みんなそんなに雑なの?><;

古いものを表示
:realtek:

思考の /dev/null