最近野菜要素としてごぼうのきんぴらを頻繁に食べているんだけど、ふと💩した後流す前に見てみたら丸々残ったごぼうが数本水面に浮いてて笑ってしまった
最近野菜要素としてごぼうのきんぴらを頻繁に食べているんだけど、ふと💩した後流す前に見てみたら丸々残ったごぼうが数本水面に浮いてて笑ってしまった
anyhow::Error で Box<dyn std::error::Error + Send + Sync + 'static> 相当のものの代わりに自前 vtable 使ってるの、 thin pointer を使いたいというだけの理由であれば Box<Box<dyn ..>> みたいにするというクソみてえな手もあると思った (は?)
そのようにしてないのはアロケータが重いと嫌みたいな話かな。それとも意味論的にアホっぽいから?
いや普通に考えて正気で Box<Box<T>> なんて書く人がいるとは思ってないけど、提案したらどういう理由で却下されるのかはちょっと気になる
そういえば論理今日の老人トークなんですが。
float が double より遅いという話、あれかなり outdated だったっぽいですね (調べて初めて気付いた)
x86 系 CPU の float/double - petakoneko’s diary
https://petakoneko.hatenadiary.org/entry/20060622/1150950545
float vs. double
http://herumi.in.coocan.jp/prog/prog90.html
内部的に拡張されるから double でも変わらんみたいな話は x87 命令の話で、最近の CPU は SSE2 とか AVX に float / double それぞれのスカラー用命令が入っているらしく、速度は変わらないらしい
歴史的資料として。
Cプログラミング診断室/キャストが好き/float型対double型
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.4.4.html
1996年の情報です
や、 copyright 表記が1996年になってるけどコメントでは 2007年に弄られてる形跡があるな。まあいいや
vala、Fridaで使われてるのか。vala使われてるの目撃したの初めてかもしれん https://github.com/frida/frida-core/search?l=vala
libskk は vala で実装されてるので世話になってるし、なんならプルリコも vala で書いた
vala 、マジで「順当に進化した better C」という感じ。 C++ で消耗している場合ではない
reference の & 、dereference と raw pointer の *、try の ?、pattern の |、binding の @、range の .. と ..=
メソッドとか基本的なものを抜きにすればこのくらいか?
このアカウントは、notestockで公開設定になっていません。
for pat in expr { block }
は
{
let mut iter = std::iter::IntoIterator(expr);
while let Some(pat) = iter.next() { block }
}
の糖衣構文です (これは慣れると当然に見えてくるので、そこまで深く悩まなくてもよい)
pattern の | は普通に "OR" のつもりだと思うので、そのイメージがあればそのうち当たり前に見えてくる
直観的でないのは ? (try operator) だと思うけど、あれは大昔 try! というマクロがあった時代の話を思い出せば理解しやすいですね
std::try - Rust
https://doc.rust-lang.org/1.44.0/std/macro.try.html
try!(expr)
はだいたい
match expr {
Ok(v) => v,
// ↓ From::from(e) は e.into() とだいたい同じ
Err(e) => return Err(From::from(e)),
}
に展開されるものでした。
その代替・拡張として発生した演算子が ? で、 expr? は Result だけでなく Option とかにも使える。
Option の場合は expr? は
match expr {
Some(v) => v,
None => return None,
}
という感じになる。
クロージャの |args| expr がウーンとなる気持ちはまあわかる (左右の括弧が同じ文字なのがどうにも……)
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
cd "$(dirname "$(readlink -f "$0")")"
とか \` で書きたくないよ……
Vue遊びしてるとモダンフロントエンジニア臭が漂ってくるんだけどfunction(){}と()=>{}の違いとかいきなりじゃがすくりぷとの深淵にたたき落とされる感覚がすてき←
法務省:人権擁護局フロントページ
http://www.moj.go.jp/JINKEN/
いじめについて自分の近辺の動きが鈍い場合、法務省に相談するというライフハックがある。
子供たちが知っておくべき知識のひとつだね
最上階に住んでいるのにドッスンドッスン聞こえてくるので、たぶん下の階とかから壁伝いに響いているのかもしれないと思っている
楽しんでいこう
このアカウントは、notestockで公開設定になっていません。
ボタンを丸くするの、特にユーザビリティの改善みがないので、それはオナニーではという気持ちがある
VS で std::abort() 呼んでるのに何事もなく次のウィンドウプロシージャが呼ばれるし、そのたびに abort() を呼ぶので「ボボボボボボボボボロン」とすごいエラー音の後にデバッグしますかのダイアログが出てきます (マジで何なんだ)
しかも abort() するのが一度だけだと、ダイアログは出るけど abort 貫通して何事もなく次のメッセージを処理しつづけるので、異常終了したはずのゲームを続けて遊ぶことができてしまう……なんだこれは
abort しろと言ったのに abort しないの、さすが C++ コンパイラつってるのに C++ 準拠してない製品を出してた会社だけあるわ (???)
まあ冗談はさておき、 SIGABRT をトラップしてデバッグに使えるのはいいとして、貫通してメッセージループを続行するのは本当にやめてくれ
よくわかんないけど自プロセス殺すんじゃダメなのかな感と、もうひとつイベントがバラバラのスレッドで動いてるとかかも?><(状況が謎><)
プロセスを殺す仕組みがあるなら、 abort() を呼んだとき同じような挙動で死んでくれればいい (OS が殺してくれればいい) と思うわけですが……
ウィンドウプロシージャから呼んでいる同スレッドの関数で abort() しているので、そのまま本来実行継続を意図していない状態で再度ウィンドウプロシージャにエントリーしてくるのは私の意図するところではないわけですよ
(そもそも内部的な不整合を検知したから abort しているわけであって)
よくわかんないけどちゃんと処理抜けて必要な終了処理して終了するように書けばおkだと思う><
自プロセス殺してまでして終了ってかなり異常な状況っぽさ><
そもそもプロセスを外から問答無用に殺せるということは (モダンな OS であれば当然) リソース解放も必要に応じて OS がしてくれということでもある。30年前の OS ちゃうんやぞ
たぶん Win32 API で意図したとおり異常終了させられるみたいな話もありましたが、それはそれで良いとして、であれば abort が何故そうならないのかを疑問視している
あと、GUIでイベントドリブンなコードの場合は、終了させたい時は『「終了してね!><」フラグ』をたてておいてそれ監視するみたいに書く方が普通だとオレンジは思ってた><
(別スレッドも『終了してねフラグ』が立ってたら「あ、もう要らないのか」って判断して処理スキップするように書いたり><)
これは「エラーがあって、それが想定のうちで、かつプログラムが正気で走っている」という状況でしょう。その状態なら綺麗に後始末するのは正しい。
abort はそうではなくて、「プログラムが論理バグの存在を (内部状態の矛盾や仕様違反の検出によって) 自覚した、既に手遅れの状態」で使う自殺スイッチであって、これを使ったあとぶっ壊れ状態で更に正常系を想定したコードが続行されるなんてこと許せるわけがないんですよ
ほんとのほんとのほんとのほんとに、どうっっっしてもどうにもなら無い場面以外では、正常に終了するように書くべきかもというか、
異常終了はあくまで、開発時に想定出来なかった異常により終了する場面で起きるものと考えるのがWindows流だと思う><
だからその「開発時に想定できなかった」マズい (実質未定義動作みたいな) 状態で使うべき abort が、なんで OS によってコールバック関数が呼ばれ続けるのを止めないのか、という話です!
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
であれば、『異常な状況に陥ったっぽいフラグ』を用意してそれをたてるようにして、各所でそれを見て処理を抜けるように書くようにしないと、シングルスレッドなソフトウェアではどうにかなんとかなっても、マルチスレッドなソフトウェア(Windows用に普通に書けばそうなる)ではわりと大変なことになると思う><
そもそもプログラムが正気 (状態の一貫性や満たすべき条件) を失った時点で当人に後始末をさせるのは気休めでしかなくて、根本的には OS が強引に後片付けを引き継ぐべきという考え (OS 越しでなくハードウェアと直に対話している特殊なアプリとかは別として)
で、 OS に後片付けをする能力があるのなら、 abort が野蛮だろうが何だろうが、狂ったプロセスが後片付けをしたつもりだろうが何もせずすべてを投げ出そうが、最終的に OS がやることをやるので、であれば abort はやっぱりプロセスを速やかに容赦なく殺すべきだと思うんですよ
そもそも本当に OS の後片付けをあてにできない状況なら SIGABRT をフックしてクリティカルな後始末だけしたりみたいなことはできるはずで、 abort 後に許される処理なんてそのくらいですよ
atexit とか at_quick_exit で登録された後始末さえ呼ばないものなんですよ abort は
完全にどうしようもない状況であればたしかにそうかも><;
でもWindows用のアプリの場合、例えばメモリを確保できなかったとか、GUI等のリソースがOS側の都合で破棄された等の場合程度であれば、OS側の異常終了の機能に頼るべきではないかも><;
これはそうでしょうけど、だからといって abort がアホであっていいことにはならないので別の話です
たとえば assert に失敗したら abort が呼ばれたりするはずですけど (規格で保証されてるかは知らん)、 assert 失敗した状態でそのままプログラム動かしていいんですか? 下手したらハードウェアを滅茶苦茶にしたりセキュリティホールになる可能性あるわけですが
PCの電源切りたい時に電源プラグ引っこ抜いて「いきなり電源落ちても壊れない頑丈なファイルシステムを使ってるからだいじょうぶ! いつもこうしてる!」
みたいな感じに感じる><; 「そりゃファイルは壊れないかもしれないけどでも・・・・><; 」的な><;
電源を抜いて PC や HDD が壊れないのは仕様の範囲外ですが、 abort で異常終了すべきなのは仕様と保証の話なので全然違うと思います
うん><; でも意図的に異常終了させる必要がある場面てまず無いと思う><;
Panic を恐れるべからず - 何とは言わない天然水飲みたさ
https://blog.cardina1.red/2019/12/19/dont-fear-the-panic/
私は「狂ったプログラムの自称 “後始末” や自称 “復帰” を信用できる理由はないので、不整合があれば即座に殺せ」を信条にしています
もちろん人命に関わる状況とかだと話は変わってくるけど、それも設計レベルで「不整合がプログラム全体に漏れ出さないように作って、不整合があった場所はさっさと殺して再起動しろ (結果として全体が不整合に狂わされることなく動き続けるようにしろ)」となるべきであって、「気付いてしまった不整合を見なかったことにして実行を続ける」は如何なる状況でも正当化されないと考えます
これそれこそUNIX流の『シンプル』なんだと思う><
異常な値が来る位置を想定できるのであれば異常な値が来た時の処理を書くべきかも><
ていうか普通のアプリ程度で「『想定不能な値がやって来て』 かつ 『ある特定の位置で異常であるか判断できて』 かつ 『異常であった場合に適切に処理できない』場面ってある?><;
なんか考えが食い違ってると思うんですが、私は「起こりうるエラーをどうするか」の話ではなくて「起こりえないエラーが起きてしまったらどうするか」の話をしています
このアカウントは、notestockで公開設定になっていません。
大昔のプロセス殺したらそのままメモリリークする OS とかならさておき、現代であれば…… となりますよね
https://mstdn.nere9.help/@orange_in_space/104363686803728116
orange 氏が言ってるのはすべて準正常系の話でしかなくて、私は異常系の話をしているので噛み合っていない
不整合を見なかったことにして動作を続けるように書くんじゃなく、
各場面で不整合であるかチェックして、正しくなければ処理をせずエラーを返し、返された側もエラーが来る事を前提に書く
ってすれば、きれいに処理を抜けていって最終的にプロセスが終了する ってなるかも><
「起こり得る」と認識していることはすべて想定されたエラーなんですよ。そういう話はしていない
たとえば std の vector を長さ128にリサイズした直後に容量を確認したら 64 だったりするとビビるじゃないですか。というか「物理的に可能ではあるが絶対に想定しないしいちいちチェックして if 文で対処もしない」類のエラーなわけです。
私が殺したいプロセス異常というのはそういう種類の話
このアカウントは、notestockで公開設定になっていません。
たとえば int a=non_42(); したあと宇宙線が飛んできて a が謎の値 42 になることだって実際に現実に起きうるエラーですが、基本的に皆そういうの検査しないわけですよ。1行ごとに a の値が non_42() を読んだときの値のままであることを確認しない。
そもそも a が 42 になってたからといって、元の値なんて復元できないじゃないですか。
そういう「まずありえないし、あったとしても救いようがない」状況を (自覚的であれ無自覚であれ) プログラマは必ず捨てているもので、じゃあもしその「ありえない」を見てしまって発狂したとき何をするか、という最後の砦が assert や abort なんですよ
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
結局同じことで、我々は暗黙に或いは明示的に「不変条件」とか「一貫性」というものを想定して、それが満たされているときにしか動かないプログラムを書いている。
不変条件の存在しないとはすなわちあらゆる仕様が信用できないということなので、本質的にナンセンスなんですよ。「ありえない状況」の存在しないプログラムはありえない。
このアカウントは、notestockで公開設定になっていません。
プログラムが自身の発狂を認知できる数少ない機会が assert 類であるわけで、いかに「狂ったプロセスがあらゆるものを破壊しに行くのを素早く止めるか」が大事だから assert を積極的に書けということになる
『あり得ない状況※a』とはあり得ない状況であると認識できない状況であって、『あり得ない状況である※b』と認識可能であれば、『あり得ない状況※b』を前提に処理すべきかも><
言い方を変えると、『あり得ない状況※a』であると認識出来る事に期待すべきではないかも><
全ての不整合を検出できると思うなというのはその通りで、だからといって「物理的に可能なすべての状態を考慮せよ」というのもやはりナンセンスです。
int a = 3;
if(a!=3)
{
a=3;
}
みたいなことを書くべきじゃないんですよ (今は volatile の話はしていないよ)
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
エラーに対処できるならすればいいけど、対処しようのないエラーとか、対処を考えるだけ無駄なエラーとかがあって、そのうちごく一部に「幸運にも assert とか書いとくだけで検出できるエラー」があるんですよ
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
Windows 開発(Windows 上での開発ではなく)は先にやっておくと macOS 以外の環境はだいたいイージーモードになるので最初に行うことが推奨される #適当
原子炉だって想定外の異常時に停止するけど、「動作を停止」するわけでは決してなく「運転停止動作を実行する」ように作られている><
たとえば、人が近付くとアームを引っ込める処理があるとします。
でもアームを引っ込める処理をしたのにセンサはアームがどんどん飛び出していることを報告するかもしれない。
それでもまだ「異常事態には人に危害が及ばないようアームを引っ込めるべきだ!」といえますかね
ここでの異常とは「アームを引っ込める処理をしたのに反対の挙動になっている」というある種の論理バグの可能性が十分にあり、このとき開発者が考えるべきなのは「致命的におかしいアーム制御で、それでもどうにかアームを引っ込めてみせよう」ではなく、「これ以上動かして人やモノにぶつけると被害が大きくなるから、即座にアームを動かすのをやめよう」じゃないですかね。
それが「不変条件が満たされないことに気付いたら即座に殺せ」の意図です
もちろんアームの制御を停止したとき新たに発生するリスク (アームが固まらずに垂れるとか) もあるだろうけど、それはハードウェアとか別レイヤーで対応すべきことで、断じて「狂ったソフトウェアを使いこなしてアームを動かし続けることを試みる」べき理由にはならない
それは例えばアームを停止する動作(何らかのロック機構とか)を(用意した上で)(ダメもとでも)実行すべきかも><
ダメもとでもって結構重要で、原子炉の非常用発電装置には安全装置がついていない><(ダメもとでも動かなければならないので><)
このアカウントは、notestockで公開設定になっていません。
はい、なのでとにかく「狂ったものを動かし続けるな」が意図するところです (「止める」とは「止める制御をする」ではなく「制御をやめろ」「狂った制御を発効させるな」です)
このアカウントは、notestockで公開設定になっていません。
「回避処理自体も何らかの『想定』のもとに動いていることがあって、その『想定』が既に満たされていない状況を考えないといけない」という話です (回避がうまくいくことが信じられるなら回避を試みればいい)
https://mstdn.nere9.help/@orange_in_space/104363873084252780
これは「非常用発電にはメインの原子炉のプログラム稼働状態の破綻が伝播しない」という前提では正しいでしょうね。
というか、そういう設計にすべしという話でもあるんですけど
私が言っているのは「プログラムが一貫性を失ったとき、その破綻は他の部分へ伝播している可能性が高く、特に復帰処理もその破綻した一貫性や前提条件に依存していたり修復自体ができない場合が多い」という話。
一貫性破壊が伝播しない設計ができるならそうした方が異常に強くなるのは、当然それはそう。
このアカウントは、notestockで公開設定になっていません。
そもそも伝播しないなら別プログラムでよくない?という話もあるよ
(同じプログラム内である以上、何らかの形で状態を共有しているという想定は自然だし、その共有状態が壊れていたとき「壊れていない意味のある部分」がどれだけ残るのかという悲観が前提にある)
UNIXのソフトウェアって、異常検知した時に開いてるファイルを閉じずに終了させるように書いたりするの?><;
というかソフトウェアの異常系の話の例えとしてハードウェアを出すのは不適じゃんというのは僕も思いますね
だから「どういう “異常” なのか」次第なので、一口に「異常」と言われてもそんなのケースバイケースです
このアカウントは、notestockで公開設定になっていません。
そういう意味か。
私は制御ソフトウェアの話をしてましたが、まあアームのハードウェア側でやることやれよとかいろいろいえるか
このアカウントは、notestockで公開設定になっていません。
どんな異常であろうがとりあえず開いているファイルだけはとにかくなるべく閉じよう
ってしてるけど少なくともオレンジは><;
根本的なマインドとして「手に負えなくなっているなら、これ以上余計なことをするな」というのが abort レベルの異常終了なので、「うんうんそういうこともあるよね、 exit(2) します」とかの終了とは状況のマズさが違うわけです
ちなみに迂闊にファイルをフラッシュしようとすると I/O が永遠にブロックしてプロセスが終了しなくなるなどの場合が現実にあります (というかそれでつらい思いをした)
ハードウェアの存在を仮定すると一種のブラックボックスとかオラクルを置くことになるので異常の種類に関係なく話がおかしくならない?という趣旨です
それはコンパイラのバグとか OS の sanity についても同様のことがいえて、結局抽象すると「下のレイヤーが『期待したとおり』動いてくれる (或いは『エラーを検知して対処できると信じている』) という前提条件が破られない想定をしている」という話なので本質的な差があるとは思いません
たとえば「標準ライブラリは仕様通りに動く」とかもそういう暗黙の前提条件のひとつで、我々はそれを「信じないことができる」
OS も機械も同じで、我々はあらゆる想定を「信じないことができる」が、それでも内心いくらか信じている。信じていないと意味あるプログラムが書けない (意味論のないプログラムに意味はないので)。
で、その「信じている部分」に裏切られることがある、という話が前提条件が破れるという言葉の意味です
このアカウントは、notestockで公開設定になっていません。
「信じていない部分に裏切られた」なんてのは最初から想定内で、そんなのさっさとエラーに対処しろでおしまいですよ
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
最初の文脈に戻りますが、「アプリ開発者による『これはもう駄目だ!』という表明を信用しない」というのが OS の思想であるというのならそうですねという感じだけど、その帰結が「大丈夫! 駄目だと思うから駄目なんだ! まだいけるぞ!」と死体に鞭打って破綻したプログラムを走らせ続ける凶行であるというのが、ちょっと信じられなかっただけです
このアカウントは、notestockで公開設定になっていません。
wndproc だけが破綻しているという考えはわからない。
「wndproc がアクセスできる情報を共有している部分のいずれかが破綻している」が論理的に正しい想定だと思うんだけど
macOS の Darwin カーネルに対するシステムコールもだけど,あそこらへんの OS そういう primitive なの直接使わず高位の API を使ってくれというスタンスだしまあ
というか、そこで楽観するなら assert しなければいい話なので、 assert 失敗したら悲観的な対処になるのは自然ではある
このアカウントは、notestockで公開設定になっていません。
「狂った本人が過去に『俺がこうなったら殺してくれ』と言っていた」というのと「せんせー、この人もう狂ってます!」というのと、 assert はどちらにも使われる可能性があるという想定ってそんなに不自然でしょうか。
そもそも不整合は未知のバグにより起きたりするわけで、未知であるがゆえに当然「どこが狂ったせいで共有状態が破綻したのか」はわからないわけですよ。
であれば、 assert や abort による破綻がその呼び出し元ローカルであると考える合理性はない
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
「本人かどうかはわからないが、少なくともプログラムのどこかは (対処困難な形で) 壊れている」という報告なんですが、「よし、ならお前以外は大丈夫だな!」とはならないのではという
狂っているのが本人かどうかはわからない場合も多いし、わかっていたとしてすべきことが変わるとも思えない (何故ならその破綻は既に伝播しているかもしれないと考えるべきなので)
ちゃんと止まらないのはおかしいのは100%同意だけど、Windowsのアプリであれば異常検知後にダメもとでもそれだけ実行すべき終了処理がほぼ必ずあるし、それを即実行出来るように書いていないのであればそれ自体が危険だともいえるし、
微妙に矛盾するけど、異常検知の処理と非同期で何らかの処理が行われ続けてて、異常検知の処理と何らかの処理の順番の実行順が不定であるのであれば、それはつまり手遅れであるし、手遅れにならないようにするには、問題が起こる処理の前に異常検知する必要があるかも><
つまり、時間的に既知である異常が検出されたのであれば影響のある処理を実行する前に処理を取り止めるべきであって、不定の順番による検出に期待すべきではないし、
超短く言うと「処理実行する前に異常かどうかちゃんと確かめて異常だったらその処理は実行せず戻せ!><」かも><
https://mstdn.nere9.help/@orange_in_space/104364049252675923
「破綻したデータを食う前に処理を止めろ」には同意するし正しいけど、それは「破綻を発見したとき、既に他の誰かがその破綻を発生させていて、自分より前にそれを誰かが食っていない保証がない」という視点が欠けている
もちろん「プログラムのすべての部分を掌握しているので、いかなる部分も他所で発生した破綻に巻き込まれない確信がある」というのならそれでもいいけど……それは原則として過信だと思いますね (人間そんなに強くない)
abort はプロセス全体の異常停止じゃない?その意味ではWindows の WndProc が再スタートするというのはどう頑張っても擁護できない挙動だけど
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
でもやっぱり WndProc で abort 呼ぶのは一種の UB だろという思いは変わらなくて、abort をやめろという感じになってしまう
他の誰かって誰?><; その他の部分は自分で書いて無いの?><;
その部分は異常を検出するようには書かないの?><;
だから、それを自分が完璧にできているということを信じられないという話をしています
たぶん究極的には「プログラマが十分に賢いことを信じられるか否か」になりそうですが、これについて私は「開発者を含め人間はどんなに注意しても間抜けなミスをするし、その確信を信じきることはできない」という立場です
「プログラムを完璧に正しく書きました! エラー処理も万全です!」と主張する人がいたとして、そんなの信用しませんよ……
私の認識ではウィンドウプロシージャもプロセスの一部という認識だったので当然同時に即死すべきだと思っていたけど、あれは Windows 側に全権があってプロセスが最優先で持っているものではないみたいな考えがありえるという話でおk?
クリーンアップしなくてもOSが何とかしてくれるはずももちろんたぶんWindowsもそうなんでしょ><; 挙動見てる限りではたぶん><
それに期待するなら通常の終了処理でもクリーンアップする処理省いたら?><;
「どうせプロセスが終了すれば開いてるファイルはおそらく安全に閉じるしあらゆるリソースの解放はきっとOSがやってくれるだろう」って><;
実際そんなコード見たら🤔ってなると思うけど><;
「プロセスが終了するとき細々したデータ構造を free してたらそれだけでめっちゃ時間かかるので、 free しないで OS 側にまとめて開放させた」みたいな感動の実話を聞いたことがあります (具体的なことが思い出せないけど、少なくとも「なんじゃこの素人は」と思わなかったのは確か)
相互責任分界点はプラットフォームごとに大きく違うからまずそれを体得するのが大事みたいなはなし
このアカウントは、notestockで公開設定になっていません。
エクスプローラー吹き飛んでも Firefox とかは生きてるけどウィンドウ枠は爆散したという状態になったことがあり、謎
たしか POSIX ってプロセスが死んだときのリソースの解放は OS が責任持ってやってくれるはずだよね
このアカウントは、notestockで公開設定になっていません。
fj 時代からの根深い議論なので素人が,ということはない気がする >> MALLOC http://kmaebashi.com/programmer/c_yota/malloc.html
@4shi ご質問頂きました当該アカウントの画像投稿の削除対応につきましては、サーバー会社を通じましてフランス当局より要請がございましたため、対応を行わせて頂きました。禁止行為の基準はこれまでと変わりませんが、公的機関からの要請がある場合は、弊社としては対応せざるを得ません。公的機関からサーバー会社へ要請があり、それに対応しない場合にはサーバー側のレギュレーションに抵触する可能性があり、運営に支障をきたす可能性もございます。ご理解頂けましたら幸いです。
例えばAWS使ってたとして、自分とこのポリシーがどうなってようがAWSにダメって言われたらそれを回避する策は取れないでしょ
このアカウントは、notestockで公開設定になっていません。
GeoIPを参考にユーザーの地理的傾向を調査する→🙂
GeoIPを参考にサービスを提供していない国からのアクセスをブロックする→👹
このアカウントは、notestockで公開設定になっていません。
RAII のようなパターンで自動化せよ、「このリソースは不要なので忘れず解放しとかないと!」みたいなことを手動でやらないといけない時点で error-prone なので言語やフレームワークや設計の側に改善の余地がある、という話です
Windowsは確保したらちゃんと解放しないとメモリリークするリソースがたくさんあるよ!><;
プロセス終了すりゃそりゃ(たぶん)解放されるけど、ちゃんと不要になったら解放するように書かないとアホみたいにメモリ食う変なソフトウェアが出来るよ><;
それをフレームワークとか言語でやらない、できないということならその状況に問題があるという話です
(もちろん熟慮の上で敢えて手動管理したりする選択肢はあるべきだけど)
人間は誤るものだし、だからこそ「正しいコードを書きやすく、間違ったコードを書きにくく」という原則には価値がある
error-prone なものがあったとして、「だから人間は注意しないと!」というのは間違ってはいないけどズンズン進むべき方向ではない。
「間違いようのない仕組みにしよう」に行くべきなのであって、そして現実にそれはある程度可能なのであって。
「ヤベー事態でもちゃんと解放しないとリソースがリークすることが!」と言われても、そりゃ設計が残念なのではとしか……
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
そういえば日本とか関係なく本国で合法なインターネットコンテンツをサービス展開すらしていない他国から「うちでは違法なのでどうにかしろ」と言われた場合ってどちらが優先されるものなの
実際の飛行機に限った話というか、毎度お馴染みエアバスA320><; の話で言うと、
オートパイロットが壊れたらオートパイロットが無効になるはその通り><
一方でA320系は多重フライバイワイヤな飛行機で、高レベルの操縦システムが壊れたら1段下に落ちるようになってる><
一番下まで落ちると非常用の直接操縦するモードになって、直接舵を操作することになる><
このモードはプロテクションもフィードバックもなくとても操縦が難しいらしく危険で、ほんとのほんとにダメもとになってる><
一番上の通常の操縦システムが壊れても、もちろんAPが壊れた程度でも、いきなり一番下の危険なモードには落っこちない><
多重化して多層にするの大事だし、ぶっ壊れた!→全停止 ってするのが安全な分野は限られてる><
危険な部分だけきれいに止まれるようにも多重化><
いやこれさっきからずっと言ってるんですが、 orange 氏のしてる話は「想定外を潰して想定内に持ってきましょう」という、準正常系で扱う範囲を広げる話をしていて、私は異常系として捨てることに決めた可能性をどう扱うかの話をしているので、結局噛み合ってない
結局「予定外の事態でも検査して対処するのを積み重ねて『想定内』に引っ張り込むのを沢山繰り返すしかない」という話に聞こえるんですよ。
私が考えているのはそういう努力とは全く別の部分で、「復帰すべきでないと定めた異常をどう『扱わない』か」です
復帰の努力はできる、でもその努力が実るとは限らない、あるいはその努力がコストに見合うとは限らない、そういう辺りの線引きが揺れる話はそれこそプログラムの利用分野や要求次第なわけで。
どこに線を引くかと、線のむこうとこちらでどういうスタンスをとるべきかというのは分けて考えられると思っているので
(まあ私が internal inconsistency を完全に abort 側にあるとした線引き自体に異議があるという話かもしれないので、それは話の展開がよろしくなかったとは思う)
私は「abort は即座にプロセスを殺すべきで、それはどのような理由や動機ゆえなのか」という話をしてたんだけど、 orange 氏の話は「abort すべきでないのは何故なのか」という話をしてる感じ
ていうか、C# のお勉強の課題でIDisposableなものをDisporse忘れ(using忘れ)してたら減点対象にするのが普通だと思うけど違うの?><;
あとJavaも含めてfinallyを使うべき場面で使ってないとか><
自信なくなってきた><
「忘れてた」ときに問題が起きるデザイン自体が error-prone であると形容される人間に優しくないデザインそのものなのではという感想しかないです……
たとえば C++ の unique pointer とか file stream では、明示的にリークさせない限り「うっかり解放し忘れる」ようなコードなんてそうそう書けないですよ
(もちろん特性を把握していればそういうコードを作ることはできるけど。たとえば unique_ptr なら循環参照に突っ込むとか。)
それはそうだけど、(たぶん)パフォーマンスを考えてあえてそうなってて、その上で、
たとえば C++ で std::unique_ptr<uint8_t[]> を使うの、 uint8_t * を new / delete する場合に比べてオーバーヘッドほぼないので (C++ ってそういう言語)、そこで問題があるとすればそれはやっぱりテクノロジ側が解決すべき問題であって「人間に注意させる」よりも「他に良いやり方を模索する」の方向に行きたいですね。
もちろん「締切までにプログラムを完成させないといけない」とか「特定の技術を用いることを強いられている」とかいうクソッタレな現実と向き合うとそうもいかないのだろうけど。それはまた別のレイヤーの話
アクセルとブレーキを踏み間違いやすい自動車に問題があるとして、自動車を今すぐ運転しないといけないという悲しい事情は人間に注意深さを要求する理由にはなるけど自動車のマズさを免罪する理由にはならない
原理主義的と言ってしまえばそうかもしれないけど、実装は後から改善できても設計思想はそう簡単には変えられないので、重視するのは当然後者になる
https://homoo.social/@204504bySE/104364240471817593
の通り、いつかはデストラクタが実行されて解放される><
ただしいつ実行されるかはGCのお気持ち次第で、それまでは無駄にリソースを食い続ける><
そして、IDisporsableは、ある時点で明示的にリソースが解放されるべきものに使う仕組みで、つまりそれは明示的にリソースがされるべきもの><(たとえばグラフィック関連のものであればもうこれは描画に使用しないとするタイミング(や一通りの処理が終わったタイミング)で解放されるべきもの><)
「取っ付きやすさは後からどうにかできるが、デザインや哲学は簡単には変えられない (というかそこを弄るなら別物を作り直した方がいい)」という思想なので、何はともあれ一番重視するのは哲学です
それ GC まわりの設計の問題では (GC 詳しくないけど、 GC レスなマトモな言語でそういう問題起きないので)
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
絵に描いたような https://mastodon.cardina1.red/@lo48576/103864713589557047 これで笑ってしまった
cf. https://mastodon.cardina1.red/@lo48576/103864732701101264
Nintendo Switch 1台につきTRON系システムが2台出荷されてるんだよなぁ……
このアカウントは、notestockで公開設定になっていません。
TRON はアメリカの横槍で衰退した!は結構眉唾話なんだけど,現在は組込みでかなりのシェアを取ってて世界的に一番使われているんだぞ!というのもわりと坂村先生の吹かしでは……となるので結構難しい OS(国内に限定すれば,家電や携帯電話への組込みでかなり使われたという功績はもちろん無視できませんが
でもこのまえの坂村教授へのインタビューでシェア 60% って言ってて,その数字と思われる根拠がどこにもないんだけど強いて言うなら組込み系のフォーラムの TRON ブースで取ったアンケートと同じ数字,とかで,いやそれは……という気持ち https://monoist.atmarkit.co.jp/mn/articles/2005/01/news072.html
ASCII.jp:ハッキングに6億年かかるパスワードは意外にも「ThisIsMyPasswrd」 https://ascii.jp/elem/000/004/016/4016454/
セヤナー(アカネチャン)
このアカウントは、notestockで公開設定になっていません。
そもそもいわゆる高度な GC が本質的に非決定性を抱えているものなので、その上に決定性のあるリソース破棄を実装しようというのが「?」という感じ (いや GC を最後の砦にしたい気持ちはわかるけど)
GC が適用される型と適用されない型を分けるとか、 GC されるハンドル型とされないポインタ型を分けるとか、なんか他にやりようあるんじゃないの? と思ってしまう (まあやった結果として駄目な API が完成したのかもしれないけど、それは単に失敗しただけでは)
や、設計も実装も知らんので本当に何も知らん、適当言ってる
でも少なくとも GC が存在することと決定的かつ利用毎の主導指定が不要なリソース自動破棄が両立できないとする理由はすぐには思い付かない
(もちろんそれを許さない GC というのは考えられるけど、その場合はもう言語を変えろという感じですね)
GC が非決定的だからといって、プログラムの記述自体は決定的にできるんだから、リソース破棄だけは原理的に決定的にできないとする理由がないんだよなぁ。
そんな理由があるとすれば言語仕様の問題を最初に疑う
オレンジはそう考えてて、スコープ外れた瞬間にデストラクタが呼ばれる特殊な参照カウンタインタフェース実装して欲しいって前から言ってる><;
ただし、さっき書いたようにそうするとそればっかり使う馬鹿が現れて極端にパフォーマンスが落ちる事態も起きそうだし、たぶんそれを危惧してるのでDelphiにはあったのにC# には受け継がれなかったんだと思う><;
たとえば「ガバ言語のユーザがメモリ管理がユーザに委ねられた言語を使うと、参照で済むところ意味もなく文字列を無限に複製して持ちまわる」みたいな話が昔あったけど、だからといって「文字列を複製しづらくします!」は本当に進むべき道なのかはかなり疑問がある
かなり前にツイッターでGC関連の話題が盛り上がった時に、
GCと、スコープが外れた瞬間に呼ばれるデストラクタの両方がある言語って無いの?><
ってちょっと盛り上がったけどそういうの無いらしい><
(遅延実行デストラクタと即時実行デストラクタの二段構えな環境><)
リアルタイム処理には締切に遅れると処理の価値がなくって全てが終わるもの(ハードリアルタイム、ブレーキ制御とか)と価値が減っていくもの(ソフトリアルタイム、音声や動画を処理するシステムはここに含まれると考えてもよい)がある
第1回 りあるたいむ http://www.ertl.jp/~takayuki/readings/realtime/no01.html
「人生のほとんどはリアルタイム処理なのですが、今日の人生、どの辺が何リアルタイム処理だったのかを考えてみてください」アッアッ
ハードリアルタイムとソフトリアルタイムは知っていたけどファームリアルタイムはさっき omsasanori さんの貼った記事で初めて知った(ファームリアルタイムもソフトリアルタイムの範疇だとおもってました……
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
ハードリアルタイムな処理がチューリング完全でない言語で証明付きで書かれてたりしたら安心感あるなと思うんですが、そんなことはないんでしょうね
(とはいえ形式証明くらい付いてても不思議ではないが、そっちの業界のことはわからん)
このアカウントは、notestockで公開設定になっていません。
皮肉というか、単に自分たちが何に苦しんでいたかわかってない人が煽りを受けているだけでは? という感想
このアカウントは、notestockで公開設定になっていません。
このアカウントは、notestockで公開設定になっていません。
どちらかというと、 fat の反対の thin ではなく thick の反対の thin で攻めよう、という代替のほうがそれっぽさあると思う
(三次元で厚み的な意味での「薄さ」をですね)
thin color でググってもそれっぽい用法が出てこないので、なんか辞書から読み取りきれてないニュアンスというか文脈が付いてそうな雰囲気あるな
このアカウントは、notestockで公開設定になっていません。