新しいものを表示

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

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

orange さんがブースト

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

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

orange さんがブースト

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

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

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

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

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

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

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

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

orange さんがブースト

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

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

「...64だった」って検出するコードを書くのであれば、ちゃんと処理抜けるように(マルチスレッドであれば他のスレッドも『即終了しなければならない状況にある』と知れるように)書けばいいかも><

orange さんがブースト

たとえば std の vector を長さ128にリサイズした直後に容量を確認したら 64 だったりするとビビるじゃないですか。というか「物理的に可能ではあるが絶対に想定しないしいちいちチェックして if 文で対処もしない」類のエラーなわけです。
私が殺したいプロセス異常というのはそういう種類の話

逆に言うと、意図的に異常終了させなければならないようなコードであれば、エラー処理が十分では無いと言えるかも><
(UNIX文化圏ではシンプルにするために色々省くんだろうけど)

不整合を見なかったことにして動作を続けるように書くんじゃなく、
各場面で不整合であるかチェックして、正しくなければ処理をせずエラーを返し、返された側もエラーが来る事を前提に書く
ってすれば、きれいに処理を抜けていって最終的にプロセスが終了する ってなるかも><

orange さんがブースト

もちろん人命に関わる状況とかだと話は変わってくるけど、それも設計レベルで「不整合がプログラム全体に漏れ出さないように作って、不整合があった場所はさっさと殺して再起動しろ (結果として全体が不整合に狂わされることなく動き続けるようにしろ)」となるべきであって、「気付いてしまった不整合を見なかったことにして実行を続ける」は如何なる状況でも正当化されないと考えます

スレッドを表示

これそれこそUNIX流の『シンプル』なんだと思う><
異常な値が来る位置を想定できるのであれば異常な値が来た時の処理を書くべきかも><
ていうか普通のアプリ程度で「『想定不能な値がやって来て』 かつ 『ある特定の位置で異常であるか判断できて』 かつ 『異常であった場合に適切に処理できない』場面ってある?><;

orange さんがブースト

Panic を恐れるべからず - 何とは言わない天然水飲みたさ
blog.cardina1.red/2019/12/19/d

私は「狂ったプログラムの自称 “後始末” や自称 “復帰” を信用できる理由はないので、不整合があれば即座に殺せ」を信条にしています

orange さんがブースト

うん><; でも意図的に異常終了させる必要がある場面てまず無いと思う><;

古いものを表示
:realtek:

思考の /dev/null