新しいものを表示
orange さんがブースト

それ GC まわりの設計の問題では (GC 詳しくないけど、 GC レスなマトモな言語でそういう問題起きないので)

orange さんがブースト

「取っ付きやすさは後からどうにかできるが、デザインや哲学は簡単には変えられない (というかそこを弄るなら別物を作り直した方がいい)」という思想なので、何はともあれ一番重視するのは哲学です

逆に言うと、いつ解放してもほとんど問題がないであろうリソースにはIDisporsableは使わない>< 明示的に解放しなければ問題があるので問題がある場面で使われている><

C# がスコープによる参照カウントの仕組みを用意しなかったのは、そうするとたぶん不適切な場面でも参照カウンタによるデストラクタ呼び出しを多用されまくられて、GCの遅延実行がほとんど機能しなくなって(しかもC# の方式では参照カウンタは処理が余計に必要だろうし)パフォーマンスが極端に落ちることを危惧したんだと思う><

homoo.social/@204504bySE/10436
の通り、いつかはデストラクタが実行されて解放される><
ただしいつ実行されるかはGCのお気持ち次第で、それまでは無駄にリソースを食い続ける><
そして、IDisporsableは、ある時点で明示的にリソースが解放されるべきものに使う仕組みで、つまりそれは明示的にリソースがされるべきもの><(たとえばグラフィック関連のものであればもうこれは描画に使用しないとするタイミング(や一通りの処理が終わったタイミング)で解放されるべきもの><)

orange さんがブースト

@orange_in_space IDisposableを実装するクラスは、デストラクタ内でもDisposeを呼ぶことが求められている(コンパイルエラーは出ないが) つまり自分でusingしなくてもそのオブジェクトがGCされるときにアンマネージドリソースも開放される。

それはそうだけど、(たぶん)パフォーマンスを考えてあえてそうなってて、その上で、

orange さんがブースト

「忘れてた」ときに問題が起きるデザイン自体が error-prone であると形容される人間に優しくないデザインそのものなのではという感想しかないです……

ていうか、C# のお勉強の課題でIDisposableなものをDisporse忘れ(using忘れ)してたら減点対象にするのが普通だと思うけど違うの?><;
あとJavaも含めてfinallyを使うべき場面で使ってないとか><
自信なくなってきた><

多重化して多層にするの大事だし、ぶっ壊れた!→全停止 ってするのが安全な分野は限られてる><
危険な部分だけきれいに止まれるようにも多重化><

実際の飛行機に限った話というか、毎度お馴染みエアバスA320><; の話で言うと、
オートパイロットが壊れたらオートパイロットが無効になるはその通り><
一方でA320系は多重フライバイワイヤな飛行機で、高レベルの操縦システムが壊れたら1段下に落ちるようになってる><
一番下まで落ちると非常用の直接操縦するモードになって、直接舵を操作することになる><
このモードはプロテクションもフィードバックもなくとても操縦が難しいらしく危険で、ほんとのほんとにダメもとになってる><
一番上の通常の操縦システムが壊れても、もちろんAPが壊れた程度でも、いきなり一番下の危険なモードには落っこちない><

orange さんがブースト

AP壊れたら普通「壊れた!あとは任せた!」ってAbortしてくれないと逆に危ない

フランスかぶれなので申し訳ない気分に><;

C++にはちゃんとスコープで管理される参照カウンタあるっぽさ・・・><
(これをC# にもつけて欲しい・・・><(乱用されると性能落ちるからつけないんだろうけど><;))

shared_ptr - cpprefjp C++日本語リファレンス cpprefjp.github.io/reference/m

Delphiは参照カウンタ使って、解放処理を自動実行させるの出来た><
(C# がある意味退化した部分><((参照カウンタ式では無い)GC導入と、GCによるメリットを失うコードを書かせないようにあえてそうされちゃったっぽさ>< ))

C# のusingが文脈上の"明示的"では無いのであればC# 使えばおk><

どっちにしてもWindowsでは多くの場面でリソースの明示的な開放処理が必要だし、多くのGUI環境もたぶん同様かも><
GUIが身近じゃない人から見たら奇妙なのかもしれないけど、GUIのプログラミングなら当たり前の事だと思うんだけど><(ものすごく高レベルなスクリプト環境とかでは隠蔽されてるかもだけど)

リソース開放処理書きたくない人向けに、C# に参照カウンタがついたらいいのにって思ってた><
モドキは前に書いた><
gist.github.com/orange-in-spac

リソース開放めんどいなら、GCがある言語使おうね!><;
でも、C# on .NETは、GCで開放してくれない明示的な開放が必要なリソース大量にあるし、全部GC任せに出来る環境はオレンジは少なくとも知らないよ><;

画面書き換える度に使用メモリがどんどん増えてくアホみたいなアプリになっちゃうよ><;

古いものを表示
:realtek:

思考の /dev/null