スレタイ以外の言語もok
前スレ
次世代言語21 Go Nim Rust Swift Kotlin TypeScript
https://mevius.5ch.net/test/read.cgi/tech/1587276362/
次世代言語22 Go Nim Rust Swift Kotlin TypeScript
■ このスレッドは過去ログ倉庫に格納されています
2021/08/22(日) 08:59:03.31ID:QorwbXcj
755デフォルトの名無しさん
2021/11/16(火) 19:52:23.46ID:O0etR+7l 言語の分類に関して言うなら性能特性に着目して分類するのが有用
malloc/freeグループといわゆるGCグループに分けられて、スマートポインタは前者になる
>>718
後者の意図
プログラムの実行とは切り離された別のコンテキストで回収処理が行われる場合に
その行為者をガベージコレクタと呼んでいた
コンテキストという言葉は適切じゃないかもしれないが、別スレッドとか別タスクとか、そういう意味で使っている
malloc/freeグループといわゆるGCグループに分けられて、スマートポインタは前者になる
>>718
後者の意図
プログラムの実行とは切り離された別のコンテキストで回収処理が行われる場合に
その行為者をガベージコレクタと呼んでいた
コンテキストという言葉は適切じゃないかもしれないが、別スレッドとか別タスクとか、そういう意味で使っている
756デフォルトの名無しさん
2021/11/16(火) 19:55:08.32ID:GLAM0io0 いつの世も狂信者というのは害がないうちは、公式のご本尊や、偉い人から見逃されるけど
害を及ぼすような事をやり出したら破門されんねん、ほんま迷惑
害を及ぼすような事をやり出したら破門されんねん、ほんま迷惑
757デフォルトの名無しさん
2021/11/16(火) 19:58:48.30ID:O0etR+7l プログラマが解放処理の呼び出しを書く必要があるのが手動メモリ管理
書かなくても(典型的なケースで)自動的に解放処理が呼び出されるのが自動メモリ管理
malloc/freeは手動メモリ管理
GCやスマートポインタは自動メモリ管理
というかスマートポインタという名前自体プログラマが介在しなくてもよしなにやってくれる賢いポインタという意味なので
これを手動メモリ管理と呼んでしまうのは違和感しかない
書かなくても(典型的なケースで)自動的に解放処理が呼び出されるのが自動メモリ管理
malloc/freeは手動メモリ管理
GCやスマートポインタは自動メモリ管理
というかスマートポインタという名前自体プログラマが介在しなくてもよしなにやってくれる賢いポインタという意味なので
これを手動メモリ管理と呼んでしまうのは違和感しかない
758デフォルトの名無しさん
2021/11/16(火) 20:03:07.86ID:O0etR+7l プログラマがshared_ptrとunique_ptrを選択しないといけないから手動メモリ管理との主張だが
仮にshared_ptrしかない言語が存在したとしたらそれは自動メモリ管理になるのか?
仮にshared_ptrしかない言語が存在したとしたらそれは自動メモリ管理になるのか?
759デフォルトの名無しさん
2021/11/16(火) 20:12:14.40ID:SlziVE7V >>754
Rustでは手動メモリ管理を間違えても深刻な事態は起きないよ
並行時と並列時も含めてメモリ競合も問題が起きないように設計されていてコンパイラが静的に検出してくれる
メモリ関連で静的に検出できないのは循環参照くらいだよね
原理的に無理なのだからこれは仕方ない
>>752
> なら、すべてshared_ptrに統一して所有権の管理なんてしなければいい。
それだとプログラマーが管理すべきことが消えて自動メモリ管理すなわちGCになってしまうよ
もちろんshared_ptrはコストが高く遅すぎてそんなことをするプログラマーはいないね
あと一時参照やunique_ptrを駆使すれば済むところを全てshared_ptrにすると循環参照の生じる機会が激増しちゃう
だからshared_ptrの使用は最小限に抑えて他を用いる
最小限のshared_ptr使用でも循環参照の起きうるところがあるならばweak_ptrを用いて循環参照を回避する
これらもプログラマーの手による手動メモリ管理
>>757
このようにスマートポインタは手動メモリ管理です
Rustでは手動メモリ管理を間違えても深刻な事態は起きないよ
並行時と並列時も含めてメモリ競合も問題が起きないように設計されていてコンパイラが静的に検出してくれる
メモリ関連で静的に検出できないのは循環参照くらいだよね
原理的に無理なのだからこれは仕方ない
>>752
> なら、すべてshared_ptrに統一して所有権の管理なんてしなければいい。
それだとプログラマーが管理すべきことが消えて自動メモリ管理すなわちGCになってしまうよ
もちろんshared_ptrはコストが高く遅すぎてそんなことをするプログラマーはいないね
あと一時参照やunique_ptrを駆使すれば済むところを全てshared_ptrにすると循環参照の生じる機会が激増しちゃう
だからshared_ptrの使用は最小限に抑えて他を用いる
最小限のshared_ptr使用でも循環参照の起きうるところがあるならばweak_ptrを用いて循環参照を回避する
これらもプログラマーの手による手動メモリ管理
>>757
このようにスマートポインタは手動メモリ管理です
760デフォルトの名無しさん
2021/11/16(火) 20:20:02.11ID:/J0mEe48 >>755の説明が一番しっくりくるな
これならRustもGC言語じゃないって言えるしこの辺で手を打ちませんか?
これならRustもGC言語じゃないって言えるしこの辺で手を打ちませんか?
761デフォルトの名無しさん
2021/11/16(火) 20:38:12.95ID:UQ2IYGru 見たくない真実はガン無視する手動自動マンw
”サイクルコレクターが無い点が「フルスペックのGC」では無いといえるかもしれん”をガン無視して
世紀の難解手動自動相対性理論に取り組む、いまだに答えは出ないが何やら信念があるらしい。知りたくもないw
”サイクルコレクターが無い点が「フルスペックのGC」では無いといえるかもしれん”をガン無視して
世紀の難解手動自動相対性理論に取り組む、いまだに答えは出ないが何やら信念があるらしい。知りたくもないw
762デフォルトの名無しさん
2021/11/16(火) 20:42:55.59ID:g0Tjvy/G そもそもキッチリ区別できるようなGCの定義なんて元々ないでしょ
数学みたいな厳密性などはもちろんなく、ただの処理系や実装上の戦略のようなもんみたいだし、
どっちつかずな処理系もありそう
数学みたいな厳密性などはもちろんなく、ただの処理系や実装上の戦略のようなもんみたいだし、
どっちつかずな処理系もありそう
763デフォルトの名無しさん
2021/11/16(火) 20:46:35.71ID:qWBIGGWe 「全部shared_ptrにしたらGCになる」ってすごいな
使い方によってなったりならなかったりするのか
その調子だとJavaにJNI経由でC由来のポインタ持ち込んだら手動管理になってGCじゃなくなりそう
使い方によってなったりならなかったりするのか
その調子だとJavaにJNI経由でC由来のポインタ持ち込んだら手動管理になってGCじゃなくなりそう
764デフォルトの名無しさん
2021/11/16(火) 20:47:19.95ID:LUYvY2UY765デフォルトの名無しさん
2021/11/16(火) 20:55:04.64ID:7RJdn/T9 >>762
ええ意見。手動自動マンのいうとおりならSwiftはRustでいうRc,Arcなんてものは無く、弱参照はあるものの
自動でARCが動くんだけど、彼の高等理論ならどっちに分類されるんだろ…?w
まあ彼・彼女?個人的な見方は否定しないけど、どうあっても他人を全否定したいみたいだけどGCの話より
どういう人なのか少し気になるw
ええ意見。手動自動マンのいうとおりならSwiftはRustでいうRc,Arcなんてものは無く、弱参照はあるものの
自動でARCが動くんだけど、彼の高等理論ならどっちに分類されるんだろ…?w
まあ彼・彼女?個人的な見方は否定しないけど、どうあっても他人を全否定したいみたいだけどGCの話より
どういう人なのか少し気になるw
766デフォルトの名無しさん
2021/11/16(火) 21:08:21.89ID:cHZw5Yem >>763 >>764
ホントに理解できていないのか理解できていないフリをしての冷やかしなのか分からなくて悩む
仕方ないので補足説明する
【以前の手動メモリ管理】
malloc等に対して直接freeをどこでどのタイミングで行うかで手動メモリ管理していた
【スマートポインタ時代の手動メモリ管理】
各種スマートポインタの使用・譲渡・コピー等および各種参照形態を
どのように使い分けてどのように組み合わせて用いるかという形で手動メモリ管理をしている
だからその使い分け組み合わせパーツの一つにすぎないshared_ptrというポインタに対してそれはGCだ!との主張は意味がないことが明らかで
もし理解出来ていない人がいるならばここで躓いている
ホントに理解できていないのか理解できていないフリをしての冷やかしなのか分からなくて悩む
仕方ないので補足説明する
【以前の手動メモリ管理】
malloc等に対して直接freeをどこでどのタイミングで行うかで手動メモリ管理していた
【スマートポインタ時代の手動メモリ管理】
各種スマートポインタの使用・譲渡・コピー等および各種参照形態を
どのように使い分けてどのように組み合わせて用いるかという形で手動メモリ管理をしている
だからその使い分け組み合わせパーツの一つにすぎないshared_ptrというポインタに対してそれはGCだ!との主張は意味がないことが明らかで
もし理解出来ていない人がいるならばここで躓いている
767デフォルトの名無しさん
2021/11/16(火) 21:34:08.28ID:LUYvY2UY >>766
ちゃんと定義して、それぞれの違いを明確化するまで「手動メモリ管理」「自動メモリ管理」は使用禁止な。
エスパーじゃないんだから、>>766の心の中にある想像上の「手動メモリ管理」なんて理解できるわけ無いだろ。
この分じゃ>>766も「手動メモリ管理」「自動メモリ管理」の差分すら明確化できていないだろ。
> だからその使い分け組み合わせパーツの一つにすぎないshared_ptrというポインタに
> 対してそれはGCだ!との主張は意味がないことが明らかで
おいおい、>>759で「shared_ptrで統一すればGCになる」と発言しているだろうが。
何で「GCだ!との主張は意味がないことが明らかで」なんだよ。
>>759は意味のない主張をするようなデタラメなやつだと言いたいのか?
ちゃんと定義して、それぞれの違いを明確化するまで「手動メモリ管理」「自動メモリ管理」は使用禁止な。
エスパーじゃないんだから、>>766の心の中にある想像上の「手動メモリ管理」なんて理解できるわけ無いだろ。
この分じゃ>>766も「手動メモリ管理」「自動メモリ管理」の差分すら明確化できていないだろ。
> だからその使い分け組み合わせパーツの一つにすぎないshared_ptrというポインタに
> 対してそれはGCだ!との主張は意味がないことが明らかで
おいおい、>>759で「shared_ptrで統一すればGCになる」と発言しているだろうが。
何で「GCだ!との主張は意味がないことが明らかで」なんだよ。
>>759は意味のない主張をするようなデタラメなやつだと言いたいのか?
768デフォルトの名無しさん
2021/11/16(火) 22:10:19.07ID:vHF3kJ9c 言葉の定義がどうのというバカが現れると必ずこうなるよな
769デフォルトの名無しさん
2021/11/16(火) 22:30:38.03ID:SlziVE7V >>767
wikipediaに明確な定義がありますね
『ガベージコレクション (Garbage Collection)』
https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)
> In computer science, garbage collection (GC) is a form of automatic memory management.
ガベージコレクション(GC)とは、自動メモリ管理です。
『手動メモリ管理 (Manual Memory Management)』
https://en.wikipedia.org/wiki/Manual_memory_management
> In computer science, manual memory management refers to the usage of manual instructions by the programmer to identify and deallocate unused objects, or garbage.
手動メモリ管理とは、使われていないガベージを解放するためにプログラマが手動で命令を書くことです。
> Manual memory management has one correctness advantage, which is that it allows automatic resource management via the Resource Acquisition Is Initialization (RAII) paradigm.
手動メモリ管理にはその正しさの利点があり、RAIIを介した自動リソース管理を可能にします。
> This can also be used with deterministic reference counting. In C++, this ability is put to further use to automate memory deallocation within an otherwise-manual framework,
これは参照カウントとともに使用することもでき、C++ではshared_ptrにより手動のフレームワーク内でメモリ解放を自動化しています。
> use of the shared_ptr template in the language's standard library to perform memory management is a common paradigm.
つまり上記のwikipediaにおける定義をまとめると
・自動メモリ管理 ←GCはここ
・手動メモリ管理 ←shared_ptrはここ
wikipediaに明確な定義がありますね
『ガベージコレクション (Garbage Collection)』
https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)
> In computer science, garbage collection (GC) is a form of automatic memory management.
ガベージコレクション(GC)とは、自動メモリ管理です。
『手動メモリ管理 (Manual Memory Management)』
https://en.wikipedia.org/wiki/Manual_memory_management
> In computer science, manual memory management refers to the usage of manual instructions by the programmer to identify and deallocate unused objects, or garbage.
手動メモリ管理とは、使われていないガベージを解放するためにプログラマが手動で命令を書くことです。
> Manual memory management has one correctness advantage, which is that it allows automatic resource management via the Resource Acquisition Is Initialization (RAII) paradigm.
手動メモリ管理にはその正しさの利点があり、RAIIを介した自動リソース管理を可能にします。
> This can also be used with deterministic reference counting. In C++, this ability is put to further use to automate memory deallocation within an otherwise-manual framework,
これは参照カウントとともに使用することもでき、C++ではshared_ptrにより手動のフレームワーク内でメモリ解放を自動化しています。
> use of the shared_ptr template in the language's standard library to perform memory management is a common paradigm.
つまり上記のwikipediaにおける定義をまとめると
・自動メモリ管理 ←GCはここ
・手動メモリ管理 ←shared_ptrはここ
770デフォルトの名無しさん
2021/11/16(火) 23:08:56.24ID:hZl5lwq3 >>769
いやそれshared_ptr自体は自動メモリ管理であり、手動管理と組み合わせて使用できるって言ってるじゃん
いやそれshared_ptr自体は自動メモリ管理であり、手動管理と組み合わせて使用できるって言ってるじゃん
771デフォルトの名無しさん
2021/11/16(火) 23:11:50.79ID:SlziVE7V772デフォルトの名無しさん
2021/11/16(火) 23:49:36.51ID:8BenLMiv ウンコが都合の悪いことが書かれると、デカいの張り付けて手動自動理論に持っていくwww
愛してるはずのRustにすら害を及ぼす腐った狂信者ウンコ。残ったのは自尊心のみ。「ここ」は便所の落書き
愛してるはずのRustにすら害を及ぼす腐った狂信者ウンコ。残ったのは自尊心のみ。「ここ」は便所の落書き
773デフォルトの名無しさん
2021/11/16(火) 23:59:32.22ID:cHZw5Yem774デフォルトの名無しさん
2021/11/17(水) 00:04:50.96ID:SsdWlmrh >>709
これが一番納得
これが一番納得
775デフォルトの名無しさん
2021/11/17(水) 00:07:56.38ID:bZI3gHq3 じゃあSwiftは自動で管理してるからARCだけどGCなんだな?どんどんRustが嫌いになっていく…
776デフォルトの名無しさん
2021/11/17(水) 00:43:47.98ID:YCf/hpfl 言語機能にどういうラベルを貼り付けるかの議論でよくもまあここまで盛り上がれるな
別に言語がGC含むとされようがされなかろうが
実態は変わらないだろうに
別に言語がGC含むとされようがされなかろうが
実態は変わらないだろうに
777デフォルトの名無しさん
2021/11/17(水) 00:59:15.40ID:eNp19Ga9778デフォルトの名無しさん
2021/11/17(水) 01:32:43.67ID:fpCU2YNN まず決着を付ける目的はなんなの?
今更で申し訳無いが
今更で申し訳無いが
779デフォルトの名無しさん
2021/11/17(水) 02:15:20.38ID:iywzxd5E780デフォルトの名無しさん
2021/11/17(水) 02:19:34.31ID:+JwFzM8R 当たり前の話なのに
びっくりしてるとしたら
そっちのが恥ずかしい
びっくりしてるとしたら
そっちのが恥ずかしい
781デフォルトの名無しさん
2021/11/17(水) 03:01:08.49ID:eNp19Ga9782デフォルトの名無しさん
2021/11/17(水) 04:04:22.02ID:7Zsf8uTz ようやくこのスレも役目を果たし終えたな
783デフォルトの名無しさん
2021/11/17(水) 08:38:44.32ID:m4/STksY >>769
なんで
手動メモリ管理 ←shared_ptrはここ
という結論になると判断しているのか全然わからん。
手動メモリ管理とは、使われていないガベージを解放するためにプログラマが【手動で命令を書くこと】です。
C++ではshared_ptrにより手動のフレームワーク内で【メモリ解放を自動化して】います。
で、shared_ptrは【メモリ解放を自動化して】なので【手動で命令を書くこと】を満足していないから、手動メモリ管理ではないという結論にしかならんが。
なんで
手動メモリ管理 ←shared_ptrはここ
という結論になると判断しているのか全然わからん。
手動メモリ管理とは、使われていないガベージを解放するためにプログラマが【手動で命令を書くこと】です。
C++ではshared_ptrにより手動のフレームワーク内で【メモリ解放を自動化して】います。
で、shared_ptrは【メモリ解放を自動化して】なので【手動で命令を書くこと】を満足していないから、手動メモリ管理ではないという結論にしかならんが。
784デフォルトの名無しさん
2021/11/17(水) 08:49:09.28ID:zCczxc5o785デフォルトの名無しさん
2021/11/17(水) 09:00:58.02ID:MZt3q0rg786デフォルトの名無しさん
2021/11/17(水) 09:09:38.98ID:C+w8kxrc >>783の解釈で正しいよ
そもそも出典の記載もなく俺が書いたかもしれないwikipediaの記事にどれだけ意味があるのかは知らんが
そもそも出典の記載もなく俺が書いたかもしれないwikipediaの記事にどれだけ意味があるのかは知らんが
787デフォルトの名無しさん
2021/11/17(水) 09:27:03.70ID:MZt3q0rg788デフォルトの名無しさん
2021/11/17(水) 09:28:38.23ID:fpCU2YNN でもC++/CLIってGC言語だけどshared_ptr使えるじゃん
789デフォルトの名無しさん
2021/11/17(水) 09:32:57.00ID:C+g/MvKJ weak_ptrの存在もあれだよな
必要だったらコレ使ってなんとかしろよ?という
循環参照も自動で解放できるんならコレいらないしな
必要だったらコレ使ってなんとかしろよ?という
循環参照も自動で解放できるんならコレいらないしな
790デフォルトの名無しさん
2021/11/17(水) 09:35:09.37ID:fpCU2YNN 定義定義ってうるさいよ
何を目的としてその定義があるのかという視点から考えないからこういうコーナーケースで無用な論争に発展する
何を目的としてその定義があるのかという視点から考えないからこういうコーナーケースで無用な論争に発展する
791デフォルトの名無しさん
2021/11/17(水) 10:04:21.19ID:/Jn+6Ag0 自演の荒らしだと思う
792デフォルトの名無しさん
2021/11/17(水) 10:05:52.29ID:TggxfUz+ 〇〇かGCか否かという議論に決着がつくと
プログラム書く上で何か役に立つんですかねえ
あるいは学術的な発展でもするんですかねえ
プログラム書く上で何か役に立つんですかねえ
あるいは学術的な発展でもするんですかねえ
793デフォルトの名無しさん
2021/11/17(水) 10:22:36.39ID:C+g/MvKJ じゃあ次はお前らの大好きなNimの話でもする?
Efficient, expressive, elegant
どこがエレガントなのかどうぞ
Efficient, expressive, elegant
どこがエレガントなのかどうぞ
794デフォルトの名無しさん
2021/11/17(水) 10:29:14.01ID:sX0XtunN795デフォルトの名無しさん
2021/11/17(水) 10:43:46.53ID:wlAtkNPK auto変数はすべてGC(キリっ)
796デフォルトの名無しさん
2021/11/17(水) 10:45:44.25ID:wlAtkNPK allocaはGC(キリっ)
797デフォルトの名無しさん
2021/11/17(水) 10:51:30.59ID:ZQ/D1zVP Garbage Collectionを持つ言語
Garbage Collectorがある言語
Garbage Collectが行える言語
Garbage Collectorがある言語
Garbage Collectが行える言語
798デフォルトの名無しさん
2021/11/17(水) 11:35:29.78ID:Vki78NxX799デフォルトの名無しさん
2021/11/17(水) 11:45:13.07ID:vmbAdT3A スレの半分はこいつでできています
http://hissi.org/read.php/tech/20211116/U2x6aVZFN1Y.html
http://hissi.org/read.php/tech/20211116/U2x6aVZFN1Y.html
800デフォルトの名無しさん
2021/11/17(水) 11:50:46.89ID:MZt3q0rg >>798
そこにもあるように
あくまでも手動メモリ管理の範囲内でのメモリ解放の自動化
とはっきり書かれている
しかも手動メモリ管理のアドバンテージの説明として書かれているわけだから
shared_ptrは手動メモリ管理であってしかもそのアドバンテージ
そこにもあるように
あくまでも手動メモリ管理の範囲内でのメモリ解放の自動化
とはっきり書かれている
しかも手動メモリ管理のアドバンテージの説明として書かれているわけだから
shared_ptrは手動メモリ管理であってしかもそのアドバンテージ
801デフォルトの名無しさん
2021/11/17(水) 11:57:20.20ID:YG2/9hEL 不毛とハゲの違いってなんだよ?
英文持ってきて貼り付けて一仕事終えるじゃなく、自分の言葉で説明しろよ!
アドバンテージ!
英文持ってきて貼り付けて一仕事終えるじゃなく、自分の言葉で説明しろよ!
アドバンテージ!
802デフォルトの名無しさん
2021/11/17(水) 12:04:02.33ID:C+g/MvKJ RAIIで解放タイミングを把握できるのはメリットだね
GC標準装備言語だとそうはいかないもん
C#だとusingとIDisposableを使ってまで同じようなことをしたがるけど
using (StreamReader r = new("foo.txt")) {/*処理*/}
GC標準装備言語だとそうはいかないもん
C#だとusingとIDisposableを使ってまで同じようなことをしたがるけど
using (StreamReader r = new("foo.txt")) {/*処理*/}
803デフォルトの名無しさん
2021/11/17(水) 12:13:29.09ID:iywzxd5E >>781
>手動メモリ管理のよってRAIIを介したshared_ptr等の自動リソース管理を可能にしていると
おいおい・・・
無駄かもしれんが一応書いておく
まず大前提として1行目に
「In computer science, manual memory management refers to the usage of manual instructions by the programmer to identify and deallocate unused objects, or garbage. (手動メモリ管理というのは使われなくなったオブジェクト(ガベージ)を識別してメモリを解放するのにプログラマーが手動命令を使用することを指す)」と書いてある
つまりはここで言う手動メモリ管理はどのオブジェクトを解放すべきかを判断するコードやメモリを解放するコード(freeやdelete)をプログラマーが直接書くことを意味してる
でもってRAIIの説明箇所にある「This can also be used with deterministic reference counting.(RAIIは決定的参照カウント方式と一緒に使うこともできます)」は”手動メモリ管理だけでなく参照カウント方式とも一緒に使える”と言ってるわけ
「In C++, this ability is put to further use to automate memory deallocation within an otherwise-manual framework」(C++ではこの機能を、その他の点では手動のフレームワークにおいて、メモリの解放を自動化するのに活用している)
otherwise-manual frameworkと書いてることからわかるようににC++が活用してる内容は”自動”の範疇に含まれると記事の書いた人間は考えてる
>手動メモリ管理のよってRAIIを介したshared_ptr等の自動リソース管理を可能にしていると
おいおい・・・
無駄かもしれんが一応書いておく
まず大前提として1行目に
「In computer science, manual memory management refers to the usage of manual instructions by the programmer to identify and deallocate unused objects, or garbage. (手動メモリ管理というのは使われなくなったオブジェクト(ガベージ)を識別してメモリを解放するのにプログラマーが手動命令を使用することを指す)」と書いてある
つまりはここで言う手動メモリ管理はどのオブジェクトを解放すべきかを判断するコードやメモリを解放するコード(freeやdelete)をプログラマーが直接書くことを意味してる
でもってRAIIの説明箇所にある「This can also be used with deterministic reference counting.(RAIIは決定的参照カウント方式と一緒に使うこともできます)」は”手動メモリ管理だけでなく参照カウント方式とも一緒に使える”と言ってるわけ
「In C++, this ability is put to further use to automate memory deallocation within an otherwise-manual framework」(C++ではこの機能を、その他の点では手動のフレームワークにおいて、メモリの解放を自動化するのに活用している)
otherwise-manual frameworkと書いてることからわかるようににC++が活用してる内容は”自動”の範疇に含まれると記事の書いた人間は考えてる
804デフォルトの名無しさん
2021/11/17(水) 12:14:43.77ID:iywzxd5E805デフォルトの名無しさん
2021/11/17(水) 12:18:06.70ID:iP5L/cQW 外部DLLに渡すヒープデータなんて普通にコントロールするのが当たり前、GC”非標準装備”言語だってそう
じゃなければDLLを起点にクラッシュする。おまえほんとはなにもしらねーんじゃねえの(笑)w
C#だって当然そういう事を考えるだろう、アホ信者言語と同じことをしたいんじゃない
じゃなければDLLを起点にクラッシュする。おまえほんとはなにもしらねーんじゃねえの(笑)w
C#だって当然そういう事を考えるだろう、アホ信者言語と同じことをしたいんじゃない
806デフォルトの名無しさん
2021/11/17(水) 12:18:07.56ID:eNp19Ga9 >>802
だな
C++やRustなどは即座に解放のためデストラクタでファイルcloseやlock解放を自動化できてプログラマーは気にしなくて済むもんな
GC言語はこれをするのに各言語で苦労しているのと対照的
だな
C++やRustなどは即座に解放のためデストラクタでファイルcloseやlock解放を自動化できてプログラマーは気にしなくて済むもんな
GC言語はこれをするのに各言語で苦労しているのと対照的
807デフォルトの名無しさん
2021/11/17(水) 12:22:44.44ID:eNp19Ga9808デフォルトの名無しさん
2021/11/17(水) 12:26:39.90ID:mpgcjn44 一生懸命にC++を味方に引き込もうとする姿が哀れに思える。C++は全部プログラマが気にして細心の注意を
払い神のごとくコントロールする言語なのに、一緒にされたらC++プログラマーは嫌
払い神のごとくコントロールする言語なのに、一緒にされたらC++プログラマーは嫌
809デフォルトの名無しさん
2021/11/17(水) 12:39:06.76ID:C+g/MvKJ RAIIでやりくりするほうがある種スッキリしてるし
それを欲する層は居なくはならないよ
それを欲する層は居なくはならないよ
810デフォルトの名無しさん
2021/11/17(水) 12:50:33.28ID:Vki78NxX811デフォルトの名無しさん
2021/11/17(水) 12:53:41.30ID:iywzxd5E >>807
>その「メモリ管理」自体は手動の範囲内だとはっきり書かれている
どこに?
どこにshared_ptrの利用は手動メモリ管理の範囲内ですってはっきり書かれてるの?
shared_ptrに言及してるのはそのページでは↓ここしかないけど?
「This can also be used with deterministic reference counting. In C++, this ability is put to further use to automate memory deallocation within an otherwise-manual framework, use of the shared_ptr template in the language's standard library to perform memory management is a common paradigm. shared_ptr is not suitable for all object usage patterns, however. 」
>その「メモリ管理」自体は手動の範囲内だとはっきり書かれている
どこに?
どこにshared_ptrの利用は手動メモリ管理の範囲内ですってはっきり書かれてるの?
shared_ptrに言及してるのはそのページでは↓ここしかないけど?
「This can also be used with deterministic reference counting. In C++, this ability is put to further use to automate memory deallocation within an otherwise-manual framework, use of the shared_ptr template in the language's standard library to perform memory management is a common paradigm. shared_ptr is not suitable for all object usage patterns, however. 」
812デフォルトの名無しさん
2021/11/17(水) 13:09:29.01ID:R0jdljey813デフォルトの名無しさん
2021/11/17(水) 13:20:45.45ID:bNLdqk4Y そもそもWikipediaをソースに議論するのが間違っとる
814デフォルトの名無しさん
2021/11/17(水) 13:58:13.62ID:nFfaA0w6 実用上はGCのタイミングとやり方をプログラマが制御できるかどうかだね
815デフォルトの名無しさん
2021/11/17(水) 14:00:09.94ID:kLyb71mm 「RustはGCじゃない!」
「え?ARCでしょ?別にどうでも良いじゃん?」
「shared_ptrがうんたら、なんちゃらで、RustのArcの”A”は自動じゃない!Wikiによると(長すぎるので省略)」
「C++やRustはスッキリ!C#のIDisposableはRustの真似!」
「???」
「C++を仲間に引き入れたいだけだろw」
「だからWikiによると(長すぎるので省略)shared_ptrは手動なんだ!うぇぇん!バーカw」
「え?ARCでしょ?別にどうでも良いじゃん?」
「shared_ptrがうんたら、なんちゃらで、RustのArcの”A”は自動じゃない!Wikiによると(長すぎるので省略)」
「C++やRustはスッキリ!C#のIDisposableはRustの真似!」
「???」
「C++を仲間に引き入れたいだけだろw」
「だからWikiによると(長すぎるので省略)shared_ptrは手動なんだ!うぇぇん!バーカw」
816デフォルトの名無しさん
2021/11/17(水) 14:15:10.37ID:wlAtkNPK 第三者目線で観ると一人で自演してるようにしか観えない
817デフォルトの名無しさん
2021/11/17(水) 14:49:34.87ID:/Jn+6Ag0 だろ?
818デフォルトの名無しさん
2021/11/17(水) 14:55:08.33ID:htHLdEY/ >>812
例えばどういうケースで不自然になるの?
例えばどういうケースで不自然になるの?
819デフォルトの名無しさん
2021/11/17(水) 15:14:14.44ID:0sKaSg3R >>802は別にGC起因の問題じゃなくて単なるシンタックスの問題だろ
メモリの解放とその他のリソースの解放を、GC言語ではレイヤの異なる別の問題として扱っているだけだ
C++やRustではそのusingに相当する言語機構を用いてメモリ解放の面倒も見なければならないわけで、本質的には負担が増えている
最近のバージョンのC#では using var r = みたいな記法もできるようになって記述負荷の問題は解決したが、そういう問題じゃないんだろ?
メモリの解放とその他のリソースの解放を、GC言語ではレイヤの異なる別の問題として扱っているだけだ
C++やRustではそのusingに相当する言語機構を用いてメモリ解放の面倒も見なければならないわけで、本質的には負担が増えている
最近のバージョンのC#では using var r = みたいな記法もできるようになって記述負荷の問題は解決したが、そういう問題じゃないんだろ?
820デフォルトの名無しさん
2021/11/17(水) 16:14:57.91ID:wlAtkNPK copy constructor と
move constructor だな
move constructor だな
821デフォルトの名無しさん
2021/11/17(水) 18:32:09.16ID:iuNg9UQr そもそshared_ptr自体使わない。
new/deleteも使わない。
RAII、所有権と唱えると設計がすっきりする。
new/deleteも使わない。
RAII、所有権と唱えると設計がすっきりする。
822デフォルトの名無しさん
2021/11/17(水) 18:46:34.87ID:leUGQUzv >>821
単独所有者限定はRustですら諦めたデザインなのに。
単独所有者限定はRustですら諦めたデザインなのに。
823デフォルトの名無しさん
2021/11/17(水) 18:56:42.09ID:iuNg9UQr >>822
HTML5仕様のパーサー、木コンテナ、ダブル配列ベースのTRIE木コンテナ、それら木へのイテレータ/アダプター、CSS Syntax Module Lv3仕様のパーサーなど書いた結論。
new/deleteすら要らない。
偉い人が言ってることは全部ほんとだった。
HTML5仕様のパーサー、木コンテナ、ダブル配列ベースのTRIE木コンテナ、それら木へのイテレータ/アダプター、CSS Syntax Module Lv3仕様のパーサーなど書いた結論。
new/deleteすら要らない。
偉い人が言ってることは全部ほんとだった。
824デフォルトの名無しさん
2021/11/17(水) 19:10:07.77ID:jveHssXi www
825デフォルトの名無しさん
2021/11/17(水) 19:32:37.01ID:MZt3q0rg >>811
ずばりそこに書かれてる
This can also be used with deterministic reference counting.
In C++, this ability is put to further use to automate memory deallocation within an otherwise-manual framework, use of the shared_ptr ...
C++においては、RAIIを決定論的参照カウント方式と共に使うことで、メモリ解放を自動化するのに利用している。その他の点では手動のフレームワークの範囲内で。
ようするに自動化はあくまでも『メモリ解放』だけであって
その他の点で(otherwise)は『手動のフレームワーク』すなわちこのwikipedia項目『手動メモリ管理』の範囲内(within)だと明記されている
shared_ptrが自動でメモリ解放するのは当たり前だけどもあくまでも手動メモリ管理の範囲内ということ
ずばりそこに書かれてる
This can also be used with deterministic reference counting.
In C++, this ability is put to further use to automate memory deallocation within an otherwise-manual framework, use of the shared_ptr ...
C++においては、RAIIを決定論的参照カウント方式と共に使うことで、メモリ解放を自動化するのに利用している。その他の点では手動のフレームワークの範囲内で。
ようするに自動化はあくまでも『メモリ解放』だけであって
その他の点で(otherwise)は『手動のフレームワーク』すなわちこのwikipedia項目『手動メモリ管理』の範囲内(within)だと明記されている
shared_ptrが自動でメモリ解放するのは当たり前だけどもあくまでも手動メモリ管理の範囲内ということ
826デフォルトの名無しさん
2021/11/17(水) 20:02:17.52ID:iuNg9UQr vector、listなどSTLのコンテナは基本的なストレージとして設計されてるそうで、実際、その他のコンテナはこの上に実装できる。
tree、ダブル配列ベースのTRIE木などをこれらの上に実装して不都合は無かった。
速度的にもmap、unordered_mapなどと比較するレベルで、普通に使える。
tree、ダブル配列ベースのTRIE木などをこれらの上に実装して不都合は無かった。
速度的にもmap、unordered_mapなどと比較するレベルで、普通に使える。
827デフォルトの名無しさん
2021/11/17(水) 20:07:40.05ID:iuNg9UQr イテレータを使い分けることで、終了タグが現れる行きがかり順の走査と単純な木としての走査を行える二面性を持つHTML木も作ってみた。
単純な木として走査するならDOMのように見え、HTML文書として走査するなら(タグのバランスが取れていない)壊れたHTMLも扱える。
単純な木として走査するならDOMのように見え、HTML文書として走査するなら(タグのバランスが取れていない)壊れたHTMLも扱える。
828デフォルトの名無しさん
2021/11/17(水) 20:10:27.74ID:7Zsf8uTz うん
829デフォルトの名無しさん
2021/11/17(水) 20:11:35.74ID:iuNg9UQr そういう作業をした結果、HTML5とは、インターネットエクスプローラーを倒すためにデザインされており、プログラミング的な合理性は全くないと理解した。
また、HTMLを簡単に扱えないようにするため、いろいろ詭弁を使いながら仕込みを行っている。
HTML5のおかげで、賢いベンチャーが現れてグーグルを倒すようなことを防げる。
また、HTMLを簡単に扱えないようにするため、いろいろ詭弁を使いながら仕込みを行っている。
HTML5のおかげで、賢いベンチャーが現れてグーグルを倒すようなことを防げる。
830デフォルトの名無しさん
2021/11/17(水) 20:21:18.87ID:iuNg9UQr R!A!I!I!
これですべて解決。
RAII強し。
これですべて解決。
RAII強し。
831デフォルトの名無しさん
2021/11/17(水) 20:21:26.12ID:fpCU2YNN832デフォルトの名無しさん
2021/11/17(水) 20:26:26.17ID:MZt3q0rg833デフォルトの名無しさん
2021/11/17(水) 20:30:25.82ID:LATxpwY3 セガサターン言語!
834デフォルトの名無しさん
2021/11/17(水) 20:34:46.44ID:C+g/MvKJ RAIIで無駄なくやりくりするのがC++の思想なんだろうね
スマートポインタもRAIIがもたらすリソース解除実行の一例で
ヒープメモリをデストラクタでdeleteしてるだけだから
スマートポインタもRAIIがもたらすリソース解除実行の一例で
ヒープメモリをデストラクタでdeleteしてるだけだから
835デフォルトの名無しさん
2021/11/17(水) 21:40:20.88ID:MiIYKiV6836デフォルトの名無しさん
2021/11/17(水) 22:09:03.50ID:eNp19Ga9 >>835
またゴールポストを移動させたの?
その「自動的に判断」「自動に判断」などは今までこのスレに一度も出て来ておらず誰も主張してきていない初登場の言葉
そしてその意味の定義がなされていないから解釈次第になる
またゴールポストを移動させたの?
その「自動的に判断」「自動に判断」などは今までこのスレに一度も出て来ておらず誰も主張してきていない初登場の言葉
そしてその意味の定義がなされていないから解釈次第になる
837デフォルトの名無しさん
2021/11/17(水) 22:12:01.05ID:SsdWlmrh Rust 2021 Edition
838デフォルトの名無しさん
2021/11/17(水) 22:12:58.72ID:45MpLEpa だぜぇwww
839デフォルトの名無しさん
2021/11/17(水) 22:14:09.96ID:7Zsf8uTz ちゃんと必要十分条件を考えてください
840デフォルトの名無しさん
2021/11/17(水) 22:57:46.68ID:bNLdqk4Y こいつらがプログラム作るの勘弁してほしいんだが
841デフォルトの名無しさん
2021/11/17(水) 23:08:50.98ID:iuNg9UQr 法律で禁止するべきと?
842デフォルトの名無しさん
2021/11/17(水) 23:14:03.88ID:QI1gBPox まだWikipediaとか不毛なことやってたのか
もうちょっとまともな文献を挙げてみると
リチャード・ジョーンズ「ガベージコレクション」
では参照カウント方式GCの具体例としてBoostのshared_ptrを取り上げて、トレーシングGCとの比較が行われている
著者はメモリ管理についての国際会議(ISMM)の創設者なので、少なくとも学会レベルではshared_ptrはGCの一形態として認識されていると考えていい
もちろん学会が世の中の全てではないから「俺の常識ではGCではない」と主張するのは自由だけど
もうちょっとまともな文献を挙げてみると
リチャード・ジョーンズ「ガベージコレクション」
では参照カウント方式GCの具体例としてBoostのshared_ptrを取り上げて、トレーシングGCとの比較が行われている
著者はメモリ管理についての国際会議(ISMM)の創設者なので、少なくとも学会レベルではshared_ptrはGCの一形態として認識されていると考えていい
もちろん学会が世の中の全てではないから「俺の常識ではGCではない」と主張するのは自由だけど
843デフォルトの名無しさん
2021/11/17(水) 23:16:21.20ID:Wt07eo3Q 激おこなの?
844デフォルトの名無しさん
2021/11/17(水) 23:42:21.78ID:iywzxd5E845デフォルトの名無しさん
2021/11/17(水) 23:49:51.44ID:C+g/MvKJ GCはGCまかせのタイミングでいつかきっとメモリを解放できる
RAIIはRAIIオブジェクト破棄のタイミングで※1リソース※2を解放できる
※1 shared_ptrの場合は参照カウンタを見て
※2 shared_ptrの場合はメモリを
RAIIはRAIIオブジェクト破棄のタイミングで※1リソース※2を解放できる
※1 shared_ptrの場合は参照カウンタを見て
※2 shared_ptrの場合はメモリを
846デフォルトの名無しさん
2021/11/17(水) 23:55:15.10ID:SsdWlmrh shared_ptrがGCかそうでないかはどうでもいいからさ、
GCの動作有無をアプリ開発層のプログラマから制御できる次世代言語はどれよ?
GCの動作有無をアプリ開発層のプログラマから制御できる次世代言語はどれよ?
847デフォルトの名無しさん
2021/11/17(水) 23:56:56.28ID:/Jn+6Ag0 真実は>>660
それ以上でもそれ以下でもない
それ以上でもそれ以下でもない
848デフォルトの名無しさん
2021/11/18(木) 00:02:29.34ID:1J6GnuLp 【結論】紅しょうがは無料だけど良心の範囲内!
849デフォルトの名無しさん
2021/11/18(木) 00:30:08.00ID:xv2SjNGH >>846
D
D
850デフォルトの名無しさん
2021/11/18(木) 07:15:04.87ID:5A0vzciY 99%のプログラマーはこんなアスペルガーの領域のことまで考えてプログラミングやってないと思う
851デフォルトの名無しさん
2021/11/18(木) 08:11:30.53ID:Q5lW897P852デフォルトの名無しさん
2021/11/18(木) 08:57:24.74ID:5v/hszDl キミはおそらく誰からも相手されとらんだけではw
853デフォルトの名無しさん
2021/11/18(木) 09:07:54.56ID:Ip1KYC/r お前らが大好きなWikipediaの文言だぞ
https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)
Reference counting
Main article: Reference counting
Reference counting garbage collection is where each object has a count of the number of references to it. Garbage is identified by having a reference count of zero. An object's reference count is incremented when a reference to it is created, and decremented when a reference is destroyed. When the count reaches zero, the object's memory is reclaimed.
As with manual memory management, and unlike tracing garbage collection, reference counting guarantees that objects are destroyed as soon as their last reference is destroyed, and usually only accesses memory which is either in CPU caches, in objects to be freed, or directly pointed to by those, and thus tends to not have significant negative side effects on CPU cache and virtual memory operation.
There are a number of disadvantages to reference counting; this can generally be solved or mitigated by more sophisticated algorithms
https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3
スマートポインタ
なお、C言語で参照カウント方式のガベージコレクションを利用する場合、通常煩雑なコーディングを必要とするが、C++では以下のようなRAIIを活用したスマートポインタを利用することで緩和できる。
・Boost C++ライブラリのboost::shared_ptrおよびboost::shared_array。
・参照カウントの増減処理をカスタマイズできるboost::intrusive_ptrもある。
・C++11以降のstd::shared_ptr
・Active Template LibraryのATL::CComPtr - COMオブジェクトのスマートポインタ。
・Windows Runtime LibraryのMicrosoft::WRL::ComPtr - Windowsランタイムオブジェクトのスマートポインタ。COMオブジェクトにも使用可能。
https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)
Reference counting
Main article: Reference counting
Reference counting garbage collection is where each object has a count of the number of references to it. Garbage is identified by having a reference count of zero. An object's reference count is incremented when a reference to it is created, and decremented when a reference is destroyed. When the count reaches zero, the object's memory is reclaimed.
As with manual memory management, and unlike tracing garbage collection, reference counting guarantees that objects are destroyed as soon as their last reference is destroyed, and usually only accesses memory which is either in CPU caches, in objects to be freed, or directly pointed to by those, and thus tends to not have significant negative side effects on CPU cache and virtual memory operation.
There are a number of disadvantages to reference counting; this can generally be solved or mitigated by more sophisticated algorithms
https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3
スマートポインタ
なお、C言語で参照カウント方式のガベージコレクションを利用する場合、通常煩雑なコーディングを必要とするが、C++では以下のようなRAIIを活用したスマートポインタを利用することで緩和できる。
・Boost C++ライブラリのboost::shared_ptrおよびboost::shared_array。
・参照カウントの増減処理をカスタマイズできるboost::intrusive_ptrもある。
・C++11以降のstd::shared_ptr
・Active Template LibraryのATL::CComPtr - COMオブジェクトのスマートポインタ。
・Windows Runtime LibraryのMicrosoft::WRL::ComPtr - Windowsランタイムオブジェクトのスマートポインタ。COMオブジェクトにも使用可能。
854デフォルトの名無しさん
2021/11/18(木) 11:21:14.46ID:/He/baLS■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」 [ぐれ★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★5 [七波羅探題★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★6 [七波羅探題★]
- 【速報】 米トランプ政権声明 「中国が台湾を奪おうとする、いかなる試みも阻止する」 中国「レッドラインだ」 ★2 [お断り★]
- 元プロ野球選手・堂上隼人(43)を20代女性2人へのわいせつ未遂容疑で8回目の逮捕…これまでの被害者は10代・20代の女性11人に [Anonymous★]
- 「残業キャンセル界隈」若者が増加?「職務放棄」との批判も…“定時退社の権利”どこまで通用するか [七波羅探題★]
- 【高市悲報】自衛隊「実は事前に現場海域で中国軍から空母での発着訓練をすると通告がありました」え…?😨😨 [931948549]
- 【高市悲報】中国軍「公海で空母の発着訓練するって事前通告したのになんで自衛隊機は急接近してきたんだ…?」中国軍困惑 [931948549]
- 【速報】中国人の凶悪犯罪が急増!害国人の変遷、韓国→ベトナム→中国へ🏡
- 【高市悲報】英テレグラフ紙「おい、日本会議に所属する偽サッチャーが債券市場を破壊してるぞ」🥺 [359965264]
- 【悲報】ジャップ、国際海峡の津軽海峡を中国海警局の船が通過しただけで何故かブチギレる🥹 [616817505]
- 高市首相「コメ増産を進める」 [834922174]
