Improving C# Memory Safety
https://devblogs.microsoft.com/dotnet/improving-csharp-memory-safety/
C# 16、メモリ安全性を強化する新たなunsafeモデルを導入へ
https://codezine.jp/news/detail/24314
C#が新unsafeでメモリ安全に Rust/Swiftへの言及も
1デフォルトの名無しさん
2026/05/24(日) 23:12:01.01ID:Q/0ls4UZ2026/05/25(月) 01:59:44.39ID:nvu762kR
C#の新たな方針がRustの真似
>>1
>> unsafeで定義された関数は、コール元が明示的にunsafeブロックで呼び出す必要があり、適切なドキュメント(/// <safety>ブロック)で安全性の契約や義務が明示される。
>> ポインタ型がシグネチャに含まれるだけでは自動的にunsafeにはせず、実際に危険な操作(例えばデリファレンス)が発生する箇所ごとに明示される形となる。
>>1
>> unsafeで定義された関数は、コール元が明示的にunsafeブロックで呼び出す必要があり、適切なドキュメント(/// <safety>ブロック)で安全性の契約や義務が明示される。
>> ポインタ型がシグネチャに含まれるだけでは自動的にunsafeにはせず、実際に危険な操作(例えばデリファレンス)が発生する箇所ごとに明示される形となる。
3デフォルトの名無しさん
2026/05/27(水) 12:45:45.72ID:WCS5U2KA 阿鼻叫喚
2026/05/27(水) 16:08:15.94ID:PZQy1Xr7
Rustの存在意義無くなっちゃったじゃん
2026/05/27(水) 18:53:08.40ID:SBCRghEW
C#はガベージコレクション方式の遅い言語
C/C++/Rustの速さや使用メモリの少なさをC#は実現できない
C/C++/Rustの速さや使用メモリの少なさをC#は実現できない
6デフォルトの名無しさん
2026/05/27(水) 20:51:34.31ID:dSJ8g9Ow >>4
んなこたーない
んなこたーない
7デフォルトの名無しさん
2026/05/30(土) 04:10:51.03ID:OeNHKzAz 関数やブロックにunsafeするだけでいいんだよ
プロジェクトにunsafe許可とか必要ない
もっと気軽にunsafe使わせろ
そもそもポインタごときでunsafeとかダメグラマかよ
プロジェクトにunsafe許可とか必要ない
もっと気軽にunsafe使わせろ
そもそもポインタごときでunsafeとかダメグラマかよ
8デフォルトの名無しさん
2026/05/30(土) 15:18:51.41ID:5fXXCMxe c#好きだけど、unsafe使いたいから使ってるわけじゃないんだよなあ
9デフォルトの名無しさん
2026/06/26(金) 15:16:52.82ID:R6afI80t2026/06/26(金) 16:42:26.29ID:+1B9IjoT
11デフォルトの名無しさん
2026/06/26(金) 22:19:01.91ID:R6afI80t やはりエアプか
2026/06/26(金) 22:24:27.32ID:maA58Mlv
ガベージコレクションは確実に遅くなる
その遅さと引き換えに他のメリットが上回るときに用いられるレアケースがある
滅多にないため通常はガベージコレクションは候補にせずに無視していい
その遅さと引き換えに他のメリットが上回るときに用いられるレアケースがある
滅多にないため通常はガベージコレクションは候補にせずに無視していい
13デフォルトの名無しさん
2026/06/27(土) 00:01:41.06ID:D69zuVLr 逐次解放が速いなんてありえねえしアリーナ使えるのは条件が限られるガベージコレクションこそが一般的で高速なメモリ管理だよ、メモリが十分にあるならGCがされないことだってあるからね遅延させて必要な時だけメモリを解放する、これよりも良い方法は存在しません
14デフォルトの名無しさん
2026/06/27(土) 00:07:39.52ID:D69zuVLr C#がCなどに比べて遅いのは仮想マシンで実行されるからでメモリの確保を大量にこなす処理はC#の方が速い、マネージメモリをまとめて確保してるからね、手動でやれば速くなるなんてのは幻想よRustもゴミ、以上
2026/06/27(土) 01:48:25.86ID:c7cFpiQD
C#が遅い理由はGCに依存しているため
16デフォルトの名無しさん
2026/06/27(土) 02:00:33.11ID:YqZxmVSt 数字出さずに感想文だけ書くやつは無能
2026/06/27(土) 02:04:32.43ID:ID3kKpvp
2026/06/27(土) 02:15:41.04ID:ZhnlnZJx
メモリが十分にあってGCが発動しなくても、GC言語は各種ベンチマークで、なぜC/C++/Rustに勝てないのか?
その理由は、GC言語はGCできるようにメモリ管理をせざるを得ないためだ。
その理由は、GC言語はGCできるようにメモリ管理をせざるを得ないためだ。
19デフォルトの名無しさん
2026/06/27(土) 08:40:51.74ID:D69zuVLr >>16
あなた無能ってことですやんwww
あなた無能ってことですやんwww
20デフォルトの名無しさん
2026/06/27(土) 14:22:36.42ID:i5PSImc0 それってあなたの感想ですよね
21デフォルトの名無しさん
2026/06/27(土) 18:35:33.80ID:vL0XygNT >>14
手動とはどういう意味でしょう?
例えばそのRustで構造体のオブジェクトを作るとすると
その値を格納する変数はスタック領域に確保されます
そのメモリ割り当て解放コストは他のローカル変数とまとめてスタックポインタを加算減算するだけでコストは最小
これら自動ですので手動ではありません
手動とはどういう意味でしょう?
例えばそのRustで構造体のオブジェクトを作るとすると
その値を格納する変数はスタック領域に確保されます
そのメモリ割り当て解放コストは他のローカル変数とまとめてスタックポインタを加算減算するだけでコストは最小
これら自動ですので手動ではありません
22デフォルトの名無しさん
2026/06/27(土) 18:38:11.62ID:vL0XygNT ではその構造体オブジェクトを作る関数が先ほどの変数>>21へ値を返す時はどうなるでしょうか?
その値が小さければレジスタで返されます
その値が大きければ自動的に先ほどのスタック上の変数のアドレスが関数へ渡されてダイレクトに返す先の変数に値が書き込まれます
このようにオブジェクトの値のやりとりコストも最小
そしてこのオブジェクト作成関数ではオブジェクトのメモリの確保が不要
これらも自動ですので手動はありません
その値が小さければレジスタで返されます
その値が大きければ自動的に先ほどのスタック上の変数のアドレスが関数へ渡されてダイレクトに返す先の変数に値が書き込まれます
このようにオブジェクトの値のやりとりコストも最小
そしてこのオブジェクト作成関数ではオブジェクトのメモリの確保が不要
これらも自動ですので手動はありません
23デフォルトの名無しさん
2026/06/27(土) 18:40:24.54ID:vL0XygNT 最後に変数>>21に格納された構造体オブジェクトの値を用いる他の関数を呼び出す時はどうなるでしょうか?
不変参照(書き換え不可)か可変参照(書き換え可能)を関数へ渡します
先ほどのスタック上の変数のアドレスがレジスタに格納されて関数へ渡されるだけでコスト最小です
以上ここまでメモリの割り当てと解放のコストは最初のオブジェクト格納変数のためのスタックポインタの加算減算しか生じていないです
だから速いのです
不変参照(書き換え不可)か可変参照(書き換え可能)を関数へ渡します
先ほどのスタック上の変数のアドレスがレジスタに格納されて関数へ渡されるだけでコスト最小です
以上ここまでメモリの割り当てと解放のコストは最初のオブジェクト格納変数のためのスタックポインタの加算減算しか生じていないです
だから速いのです
2026/07/01(水) 23:53:23.48ID:xfe/unY1
2026/07/02(木) 00:01:31.02ID:bbwDIcek
>>21-23
複数の点で間違っている
まず、ランタイムが管理するのではなくソースコードで利用されている場所や解放のタイミングを定めることを「手動管理」と呼ぶのであり、Rustは手動管理を行う言語である
また、メモリ割り当てコストはスタックポインタの加算のみではなく、OSによる処理が介在するしこちらの方がはるかに重い、しかもGCの話と何の関連性もない
メモリがどこから参照されていてどの時点で利用されなくなったか、管理する処理を全てランタイムが実行時に行うのがGCである
参照カウンタによる管理(ARC, ORC)のような中間の機能を備えた言語も存在するが、いずれにせよGCは管理コストが重いことは確かである
複数の点で間違っている
まず、ランタイムが管理するのではなくソースコードで利用されている場所や解放のタイミングを定めることを「手動管理」と呼ぶのであり、Rustは手動管理を行う言語である
また、メモリ割り当てコストはスタックポインタの加算のみではなく、OSによる処理が介在するしこちらの方がはるかに重い、しかもGCの話と何の関連性もない
メモリがどこから参照されていてどの時点で利用されなくなったか、管理する処理を全てランタイムが実行時に行うのがGCである
参照カウンタによる管理(ARC, ORC)のような中間の機能を備えた言語も存在するが、いずれにせよGCは管理コストが重いことは確かである
26デフォルトの名無しさん
2026/07/02(木) 16:41:43.90ID:uhOY6xpy >>24
バカ乙
メモリがリンゴだとする
リンゴを収穫する時に1個ちぎって1個ずつ運ぶより何個もちぎって箱に入れてまとめて運んだ方が速いだろ、箱を管理するコストが増えるが運ぶコストが減るから結果的に速くなるわけ
バカ乙
メモリがリンゴだとする
リンゴを収穫する時に1個ちぎって1個ずつ運ぶより何個もちぎって箱に入れてまとめて運んだ方が速いだろ、箱を管理するコストが増えるが運ぶコストが減るから結果的に速くなるわけ
2026/07/02(木) 17:58:33.20ID:CnMkjRrm
>>25
あなたの理解が不足している
それらに書かれていることを別の表現にすると
『Rustはスタック上にオブジェクトなどの値を置いたまま他の関数でも安全に扱える』
メモリの確保と解放はスタックポインタの増減のみなので最も高速で正しい
そしてその関数を抜けると自動的に解放されるから「自動管理」で正しい
一方でベクターなど複数個の大きな領域を必要とする場合はもちろん自動的にヒープ領域にまとめて確保されてまとめて解放される
Rustはそこでも手動解放は必要なくて基本はそのベクターを宣言した関数を抜けると自動的に解放されるから「自動管理」で正しい
関数の返り値として返せば解放されずに上位の関数に移るが返り値として返すことはGC言語でも同じく行なう自然な行為なのでそれが手動管理と呼ばれることはない
あなたの理解が不足している
それらに書かれていることを別の表現にすると
『Rustはスタック上にオブジェクトなどの値を置いたまま他の関数でも安全に扱える』
メモリの確保と解放はスタックポインタの増減のみなので最も高速で正しい
そしてその関数を抜けると自動的に解放されるから「自動管理」で正しい
一方でベクターなど複数個の大きな領域を必要とする場合はもちろん自動的にヒープ領域にまとめて確保されてまとめて解放される
Rustはそこでも手動解放は必要なくて基本はそのベクターを宣言した関数を抜けると自動的に解放されるから「自動管理」で正しい
関数の返り値として返せば解放されずに上位の関数に移るが返り値として返すことはGC言語でも同じく行なう自然な行為なのでそれが手動管理と呼ばれることはない
2026/07/06(月) 14:44:28.59ID:wKirmoVj
>>26
GCはまとめてメモリを消し飛ばす機能ではなくて、一つずつ使用状況を確認して使ってないものを解放する機能なので君の理解が100%間違ってるだけだね
GCはまとめてメモリを消し飛ばす機能ではなくて、一つずつ使用状況を確認して使ってないものを解放する機能なので君の理解が100%間違ってるだけだね
2026/07/06(月) 14:51:17.40ID:wKirmoVj
>>27
それはRAIIが何かわかっていないから起こる勘違いだね
単にC言語では free() と書けばメモリが解放されるのと同じく、Rustでは何もせずにスコープの末端まで来ればメモリが解放されるだけ
スコープの末端に必ず free() が挿入されるだけなので、これを自動管理と言うならこの世に手動管理は存在しない
そうなると、手動管理が存在しないのに、自動管理という言葉を使う君がおかしなことを言っていることになる
これは矛盾だね
私が言っているのはそれとは違って、ソースコードであらかじめメモリを解放する位置を明示し、また参照・借用や所有権、ライフタイムといったメモリ管理について常にプログラマが制御する必要がある方式のことを「手動管理」と言っている
GCにはこのようなことはなく、メモリは全てランタイムが実行時に管理するため、ソースコード上に解放される位置は書かれていないし、プログラマもメモリ管理を意識することはない
それはRAIIが何かわかっていないから起こる勘違いだね
単にC言語では free() と書けばメモリが解放されるのと同じく、Rustでは何もせずにスコープの末端まで来ればメモリが解放されるだけ
スコープの末端に必ず free() が挿入されるだけなので、これを自動管理と言うならこの世に手動管理は存在しない
そうなると、手動管理が存在しないのに、自動管理という言葉を使う君がおかしなことを言っていることになる
これは矛盾だね
私が言っているのはそれとは違って、ソースコードであらかじめメモリを解放する位置を明示し、また参照・借用や所有権、ライフタイムといったメモリ管理について常にプログラマが制御する必要がある方式のことを「手動管理」と言っている
GCにはこのようなことはなく、メモリは全てランタイムが実行時に管理するため、ソースコード上に解放される位置は書かれていないし、プログラマもメモリ管理を意識することはない
2026/07/07(火) 00:19:27.15ID:73yWDig3
下手糞のMTはATより遅い
2026/07/07(火) 06:05:40.12ID:+R9WRXbp
>>29
それはRAIIの理解不足
RAIIはブロックなどのローカルスコープで宣言したものはそのスコープを抜ける時にも存在していれば自動的にそのリソースが解放される自動管理の仕組み
ただしそこへの参照が残っていれば自動解放されるとダングリンク参照になってしまい危険
Rustはコンパイラが参照連鎖も静的にチェックするため必ずそれを防いでくれるため実用的な自動管理になった
一方でそれらの機構のないGC言語ではローカルスコープを抜けても自動的にそのリソースを解放していいのかわからない
そこへの参照が残っているのか実行前に静的にコンパイル時点で判断できないためだ
だから定期的に参照連鎖を実行時に動的にチェックするガベージコレクション(GC)が必要になる
そして実行時に参照連鎖を追えるようにするためのコストの高いメモリ管理をせざるを得ない
それゆえGC言語は実行が遅くなるだけでなくGC発動まで無駄にメモリを占有してしまう
それはRAIIの理解不足
RAIIはブロックなどのローカルスコープで宣言したものはそのスコープを抜ける時にも存在していれば自動的にそのリソースが解放される自動管理の仕組み
ただしそこへの参照が残っていれば自動解放されるとダングリンク参照になってしまい危険
Rustはコンパイラが参照連鎖も静的にチェックするため必ずそれを防いでくれるため実用的な自動管理になった
一方でそれらの機構のないGC言語ではローカルスコープを抜けても自動的にそのリソースを解放していいのかわからない
そこへの参照が残っているのか実行前に静的にコンパイル時点で判断できないためだ
だから定期的に参照連鎖を実行時に動的にチェックするガベージコレクション(GC)が必要になる
そして実行時に参照連鎖を追えるようにするためのコストの高いメモリ管理をせざるを得ない
それゆえGC言語は実行が遅くなるだけでなくGC発動まで無駄にメモリを占有してしまう
2026/07/09(木) 22:33:58.85ID:t5kHx157
>>31
やっぱり自動管理の意味がわかってないじゃん
コンピュータが最終的な処理をやるから自動だと言ってるなら手動管理なんか存在しないからお前の言ってることはおかしいし、そうじゃないなら自動管理だから自動管理なんだ!って言ってるだけでただ自分の決めつけを押し付けたいだけ
GCがリソースの解放を静的に判断できないという点だけは正しいが、だからランタイムが自動解放するという点を理解してないので後半の説明も片手落ち
やっぱり自動管理の意味がわかってないじゃん
コンピュータが最終的な処理をやるから自動だと言ってるなら手動管理なんか存在しないからお前の言ってることはおかしいし、そうじゃないなら自動管理だから自動管理なんだ!って言ってるだけでただ自分の決めつけを押し付けたいだけ
GCがリソースの解放を静的に判断できないという点だけは正しいが、だからランタイムが自動解放するという点を理解してないので後半の説明も片手落ち
2026/07/09(木) 22:36:23.10ID:t5kHx157
2026/07/09(木) 23:16:50.91ID:nhcPk2TR
>>32
関数やブロックを抜けると自動解放されるRAIIは自動管理そのもの
自動解放タイミングも明瞭かつ直ちに行われて分かりやすく省メモリ
GCも自動解放だがタイミングが不明瞭で遅延が大きく分かりにくくメモリ使用量肥大
関数やブロックを抜けると自動解放されるRAIIは自動管理そのもの
自動解放タイミングも明瞭かつ直ちに行われて分かりやすく省メモリ
GCも自動解放だがタイミングが不明瞭で遅延が大きく分かりにくくメモリ使用量肥大
2026/07/09(木) 23:20:02.33ID:t5kHx157
>>34
それを自動管理と言うなら「free()があれば自動解放されるC言語は自動管理そのもの」ということになる
それを自動管理と言うなら「free()があれば自動解放されるC言語は自動管理そのもの」ということになる
36デフォルトの名無しさん
2026/07/09(木) 23:23:34.90ID:4ETC4bN52026/07/09(木) 23:27:18.09ID:t5kHx157
2026/07/09(木) 23:29:47.99ID:t5kHx157
ついでに言えば、所有権システムもプログラマが自らの意思で矛盾なく設計しなければ成立しない
39デフォルトの名無しさん
2026/07/09(木) 23:30:20.84ID:4ETC4bN5 RAIIはプログラマの意思と関係なく自動的に行われる
スコープを抜ける時にプログラマの意思と関係なく自動的にデストラクタが呼ばれる
スコープを抜ける時にプログラマの意思と関係なく自動的にデストラクタが呼ばれる
2026/07/09(木) 23:35:14.07ID:VR6ODDSK
同じ自動管理でも発動時期が読めないGCより即座に実行されるRAIIが優れているね
41デフォルトの名無しさん
2026/07/09(木) 23:45:45.47ID:xJ9qw/+T 自動管理の言葉の定義で争う無能達
2026/07/09(木) 23:47:09.76ID:t5kHx157
2026/07/09(木) 23:47:46.70ID:t5kHx157
>>41
根本的に理解が足りてないんだろうね
根本的に理解が足りてないんだろうね
2026/07/09(木) 23:49:50.97ID:DugaDw0j
RAIIで自動的にメモリが解放されるRustは両者どちらの定義でも自動管理になるよ
45デフォルトの名無しさん
2026/07/09(木) 23:50:57.48ID:xJ9qw/+T >>43
一番の無能が話しかけないでくれるかな?
一番の無能が話しかけないでくれるかな?
46デフォルトの名無しさん
2026/07/09(木) 23:57:55.81ID:4ETC4bN52026/07/09(木) 23:58:32.98ID:t5kHx157
2026/07/09(木) 23:59:13.02ID:t5kHx157
>>46
RAIIとARCの区別がついていないんじゃないか?
RAIIとARCの区別がついていないんじゃないか?
49デフォルトの名無しさん
2026/07/10(金) 00:01:26.98ID:bAT5n0dl50デフォルトの名無しさん
2026/07/10(金) 00:06:57.93ID:YH4Bmk9y めっちゃ話は単純
RAIIやGCのようにプログラマーの意思と無関係に必ず自動的に実行されると自動管理
free()のようにプログラマの意思で行なうと手動管理
RAIIやGCのようにプログラマーの意思と無関係に必ず自動的に実行されると自動管理
free()のようにプログラマの意思で行なうと手動管理
レスを投稿する
ニュース
- 【静岡】高級メロンを盗もうとして ベトナム国籍の男2人がハウスに侵入か ブランド「アローマメロン」すでに周辺で50個以上の被害 [煮卵★]
- timelesz猪俣周杜(25歳)「口論になってパニックに」 女性が鼻から出血し顔にアザ★2 [ヴァイヴァー★]
- 【芸能】明石家さんま すぐ辞めてフリーになる女子アナに不満爆発 「許せないねん」「礼儀的なものが…」 [冬月記者★]
- 【アジア大会】バスケ男子、韓国が3大会ぶり金メダル 日本に逆転勝ち NBA挑戦イ・ヒョンジュンら兵役免除に [阿弥陀ヶ峰★]
- 有吉弘行が「めっちゃ面白い」と絶賛する漫画とは?「野球好きなら、絶対に読んだ方がいい」 [muffin★]
- 「白髪混じりのキョンキョン」小泉今日子(60) シミやシワもそのまま…すっぴんふうの自然体姿に反響「素敵な年の取り方」 [muffin★]
- 🏡
- さなえ「減税しますですよ」反対41%このあたおか勢力て何者でちゅか? [993451824]
- 【高市絶望】千葉県さん、ド派手に逝く...😨 [616817505]
- ウッドデッキに呪われて特定の単語を呪文のように唱えてる地縛霊いるでしょ?
- vtuberのファンって見てるvtuberが開示してるって分かったら見る気なくなったりしないの? [294785177]
- ぼく「これからゆっくり日本は衰退していくんだろうなあ」高市早苗「違うわよ!落ちる時は一瞬よ!歴史上全ての国家がそうだった!」 [784319933]