- 705 名前:デフォルトの名無しさん [2018/01/15(月) 14:29:56.48 ID:w3dU/zjB.net]
- ところで全く話変わるんだけど。
最近Rustの勉強をしてるんだけど、まだ慣れないし、C++もあまりやってこなかったので、 俺のバカな頭じゃ理解できないことがいっぱいあるから誰か教えて。 質問1 Rustってimmutable参照は複数持てるけど、mutable参照は1つしか持てない決まりになってるよね。 それってたぶんマルチスレッドのことを考えてそうなってるんだよね?(この時点ですでに勘違いしてる?) けどRustではSyncトレイトとSendトレイトを実装してない限り、スレッド間で変数の受け渡しできないんだよね? これって逆に言えばSyncとSendを実装してない場合はシングルスレッドなんだからmutable参照が複数あっても問題ないんじゃないの? なんでマルチスレッドを全く使わないコードを書いてる時でもmutable参照は1つだけしか使えないの? SyncトレイトとSendトレイトについてなんか勘違いしてる? 質問2 Rustで木構造やグラフ構造を定義する時に循環参照(子が親の参照を持ちたいとか)する時って、たぶんRcとWeakを使うことになるよね? そして木構造を可変にしたいときはさらにRc<RefCell<T>>って形になるよね? このRefCell使うとボローチェッカの制約をコンパイルエラーじゃなくて実行時にパニックするように変わるんだよね? こうするしかないのはRc<RefCell<T>>使わずに木構造を作ろうとして執行錯誤したけど無理だったからそうするしかないんだなと思って納得したんだけど、 RefCell使っちゃうとボローチェッカが効かなくなるからせっかくRustを使ってるメリットが無くなったような気がしてくるんだよね。 それでもRustを使うメリットって何? RefCell使ってるとこ以外はボローチェッカが効くんだからunsafeコードと同じようにラッパーで包んでやれば上位層に悪影響は出ないよねってこと? それともC++とかで同じように木構造を作ると、Rustだと単純にパニックするだけだけど、C++だとデバッグがメチャクチャ困難なバグになったりするの? たとえRefCellを使っていたとしてもRustを使うメリットはし
|

|