- 187 名前:デフォルトの名無しさん mailto:sage [2022/07/05(火) 07:54:16.72 ID:n+I8xvZo.net]
- >>181
GC言語では、ポインタと言ってもコストの高いポインタとなっていて、コストの高いガベージコレクションで回収する。 それに加えて、データ競合を防ぐには更に何らかの競合回避コストも加わってくる。 一方で、C/C++ではリンクされたノードリストからノードを外す時に、そのライブラリがノードを解放してしまうと、そこへのポインタを保持していた場合にダングリング発生。 それを回避するためにはshared_ptrなどのコストの高いポインタを使わざるを得ない。 ちなみにC++のshared_ptrはスレッドセーフだからマルチスレッド時でも大丈夫だが、逆に言えばシングルスレッド時には無駄なコストがかかっている。 Rustでは、そこはRcとArcの2種類が提供されており、シングルスレッド時にはコストの低いRc使用、マルチスレッド時にはRcだとコンパイルエラーとなってくれてArc使用と、最小限のコストで済む。 このようにノード解放の観点だけ見ても、考慮すべきことをRustコンパイラは適切に指摘してくれる。
|

|