新しいものを表示

現状のC# でそういう事をしたければ、それをしたいクラスに自前で参照カウンタのようなものを実装して、呼び出す側が明示的に参照カウントを変える関数を呼んでってしないといけない><
それだと参照カウントを変える関数を呼び忘れたり間違えて複数回呼ぶとめちゃくちゃになっちゃうので全然安全じゃない><
なので、パフォーマンスが低下しても参照カウンタがある方がいい限られた場面用のそういう機能が欲しいって前から思ってた><

それだと「複数の関数やらクラスやらスレッドやらから同時に参照されるオブジェクトが、誰からも忘れ去られた時」に実行したい処理が気軽に書けない・・・><
直接的に言うと、GCが遅延実行してくれるデストラクタと、参照カウントがゼロになった時に実行してくれるデストラクタの両方が欲しいんだけど、C# はパフォーマンスを優先して参照カウンタが無いので(だよね?><;)、そういう事ができない・・・><

orange さんがブースト
C#ならこういうのでいいと思った

using (DeferrableClass hoge = new())
{
var fuga = hoge;
}

GCがある方がパフォーマンスがよくなるのはわかるのでGCはあって欲しい><
しかしながら、スコープが抜けた瞬間に遅延なく実行して欲しい処理もたまにあるけど、性能を優先した結果GCありで参照カウンタを無くした言語環境(C# )でそれを書くのめんどくさいので、どうにかめんどく無い書き方出来たらうれしい><
でも、そういうの実装しちゃうと、ごく限定的に使われるべきものなのに不適切に無駄に多用されてパフォーマンス低下に繋がる危惧もわかる><;

架空の言語で書くと

deferrableclass hoge:= new deferrableclass(); //コンストラクタ
deferrableclass fuga:=hoge;
hoge:=null;
fuga:=null; //←ここで参照カウントがゼロになった瞬間に呼ばれるやつ(GCによる遅延を発生させたくない特殊な処理)

みたいなのが欲しい><

よくわかんないけどそれはC# で言うところのusing?><

orange さんがブースト
RAII(Resource Acquisition Is Initialization)の話だよね? PythonのwithとかKotlinの.useとかそれっぽい機能なら結構いろんな言語にありそう

前に書いたこれちょっと弄ったら、C# にdeferのようなものを苦し紛れに(?)追加するinterfaceになりそう?><;

C# 用参照カウンタのようなもの>< · GitHub gist.github.com/orange-in-spac

てことは普通にC# にdeferって命名のままで導入しても他の言語でどういうものか知ってる人は混乱しないってことじゃん?><
なんか問題あるならSwiftに導入された時点で大混乱になってそうだし><

【Swift】defer文 - Qiita qiita.com/funacchi/items/cd480

うらやましい!><;
SwiftにまであるならマジでなんでC# に追加されないの?><;

orange さんがブースト

Swiftのdeferって、ブロックに設置したら抜けるときに実行されるような

でも、「(遅延実行されるデストラクタとは別にスコープを抜けたときに)遅延なく実行して欲しい」機能の名前がdefer(延期、遅延?)なの、命名的に大混乱になる気がするので、C# でそういう目的の場合は命名変えないと混乱?><;

C# にgolangを見習ったdefer文が追加されたら、オレンジのこの不満が解消するって事かも><

orange さんがブースト

なんでないのかというとたぶん両方にするとGCが複雑になるのと、さっき書いた通り、みんな使い分けを理解できず即時実行デストラクタの方に終了処理全部書いちゃうだろうと思われてるからだと思う><;

orange さんがブースト

かなり前にツイッターでGC関連の話題が盛り上がった時に、
GCと、スコープが外れた瞬間に呼ばれるデストラクタの両方がある言語って無いの?><
ってちょっと盛り上がったけどそういうの無いらしい><
(遅延実行デストラクタと即時実行デストラクタの二段構えな環境><)

orange さんがブースト

オレンジはそう考えてて、スコープ外れた瞬間にデストラクタが呼ばれる特殊な参照カウンタインタフェース実装して欲しいって前から言ってる><;
ただし、さっき書いたようにそうするとそればっかり使う馬鹿が現れて極端にパフォーマンスが落ちる事態も起きそうだし、たぶんそれを危惧してるのでDelphiにはあったのにC# には受け継がれなかったんだと思う><;

[B! perl] 令和の時代にPerlに入門する - ハンドルネームの敬称は省略できます b.hatena.ne.jp/entry/s/rokuoku

"deferはスコープが終了する際に実行するコードを記述することができます。(Go とほとんど同じノリで書ける!!すごい!!)"

なにこれ!>< golangのも含めて知らんかったけど、オレンジがずっと
「C# にもDelphiみたいな(try...finallyとは別に)スコープ抜ける時に遅延なく実行されるデストラクタ欲しい><;」って言ってたののモダンバージョン(?)がこれなのでは・・・?><

リニューアルのお知らせとご注意 – カラパイア karapaia.com/renewal-html

なんかカラパイアがリニューアルしてるけど、今どき珍しく(?)リニューアル前よりもちゃんと軽量なの偉い><(?)
今どきだいたいウェブサイトが「シンプルに」リニューアルされると「低スペックのスマホやPCで実際に表示してみたのか?><# 」ってくらいにむしろ重くなる事ばっかり><

古いものを表示
:realtek:

思考の /dev/null