Rustとか言うダブスタ言語 (173レス)
上下前次1-新
71:  警備員[Lv.14] 2024/10/19(土)23:29 AAS
 >>67 
 移譲とメモリコピーで振る舞い変える 
72(1):  警備員[Lv.14] 2024/10/19(土)23:30 AAS
 >>68 
 だから.cloneを明記しないと移譲になるでいいじゃん 
73(1): 2024/10/19(土)23:46 AAS
 >>72 
 コピーとcloneは明確に異なると定められている 
 コピーはプログラマーが実装することはなくビットパターンごとサイズ分のメモリがコピーされる 
 cloneはプログラマーが自由に実装することができて例えばヒープ領域を持つデータならその部分も含めてコピーすることもできるしコピーせずに共有することもできてcloneは型毎に自由度がある 
 このようにコピーとcloneは明確に異なっている 
74: 2024/10/19(土)23:49 AAS
 コピーと同じ動作になるのはムーブ 
 どちらもプログラマーは実装することができない 
 ただしムーブはムーブ元の値が無効になるという点のみコピーと異なる 
75(1): 2024/10/20(日)02:08 AAS
 ムーブとコピーで同じイコールを書くのが気に入らないって事かな? 
  
 所有権の移譲とか言うから分かりにくいんだと思う。「メモリ管理責任」が無いからコピー、有れば「メモリ管理責任」ごとムーブするだけ。 
  
 で、プリミティブ型はそもそも移動する意味がないしコピーの方が速い。 
  
 優先順位の考え方が逆で、イコールはコピー出来る型ならコピー、出来ない型ならムーブする。ムーブも出来ない型ならコンパイルエラー。で、エラーが出る場合は明示的にcloneを書いたりする。でcloneも出来ない型なら更に他の方法で対策する。 
 そうやって型で制約をはめる事で誰が書いても同じ挙動になるようにしている。 
76:  警備員[Lv.14] 2024/10/20(日)03:27 AAS
 >>73 
 じゃあなおさら変数.mcopyが必要だね 
77(2):  警備員[Lv.14] 2024/10/20(日)03:30 AAS
 >>75 
 そうやって色々試して型探ってくよりはるかにプリミティヴ系も=のみの場合はメモリ解放して使えなくなるくらいのほうが楽だろ 
 コピーは上で言ってるように.mcopyを明示的に示せばいいだけ 
78: 2024/10/20(日)04:25 AAS
 >>77 
 なんか物事の捉え方がインタプリタと勘違いしてない? 
  
 コンパイラなんだからコンパイル時に全部処理されるのよ? 
79: 2024/10/20(日)04:29 AAS
 プログラム的な意味論とそれが最適化されて出力された後のコードの挙動まで解説しないと駄目なのかな? 
80(1): 2024/10/20(日)06:39 AAS
 >>77 
 ムーブとコピーはプリミティブな相補的な動作なので 
 .move()や.copy()といったメソッド呼び出しは不可能 
 トレイトCopy実装型は常にコピーされ 
 Copy非実装型は常にムーブされる 
 Rustは非常にシンプルでわかりやすくなっている 
81:  警備員[Lv.15] 2024/10/20(日)09:19 AAS
 >>80 
 だからそれを同じ 
 let b = a; 
 let d = c; 
 で表現させちゃダメだろ 
 ↑見てどっちがプリミティヴかわかるか? 
82(2):  警備員[Lv.15] 2024/10/20(日)09:20 AAS
 低レベル言語やってるやつって保守のこと全く考えないのかな? 
83: 2024/10/20(日)09:30 AAS
 C#でいうと 
 var a = new Foo(); 
 var b = a; 
  
 で a と b が同じオブジェクトを指す状態になるけど、これを許容しないのがRust 
 この場合は b だけが Foo に責任を持つべきで、そのためにaは所有権を無くす (「解放する」ではなく「所有権を移す」だけ) 
 これはメモリ使用量というよりも管理の問題で、「a の操作がbに影響を与える」ことによる複雑性を取り除くために厳しくしてる 
  
 var a = 1; 
 var b = a; 
  
 C#でもそうだけど、これはスタックメモリに積まれるもので、単に値コピーされる 
 これは関数を抜ければ解放される (GCのような機構を必要としない) し、C#でもaの書き換えがbに作用しないはず 
 Rustでもこれでaを使えなくする理由はないので単にコピーされる 
  
 Rustでもオブジェクトを共有する仕組みはあるけど、その場合は共有のための型 (Rc<T> のような型) を使うことになる 
 これは特にマルチスレッドの場合に有用で、スレッドを跨いで共有されるオブジェクトは「ロックをかけないと内部の値にアクセスできない」型で包まないとコンパイルエラーになる仕組みがある 
 これは個人的にすごく便利だと思う部分で、Rustだと安心してコードを書ける感じがする 
84(1): 2024/10/20(日)09:41 AAS
 C#でも 
 var b = a; 
 でbがaと同じオブジェクトを参照するかコピーされるかは型に依存するでしょ 
85: 2024/10/20(日)09:46 AAS
 【結婚難】金稼ぎ共働き妨害するな【孤独死】 
  
 ☆犠牲になるのは犯罪幇助SEの結婚相手☆ 
  
 実態派遣で非婚や離婚や中絶や少子化や親不孝を促進 
  
 ・キモい 
 ・モラルない 
 ・ファッションセンスない 
 ・コミュニケーション苦手 
 ・時間外労働違反で共働き妨害 
 ・泥棒客先に開発報酬を奪わせる 
 ・泥棒客先に知的財産を奪わせる 
 ・裁判官が技術判断不正をする 
  
 SEは多重派遣の料金詐欺は非婚 
 https://codelearn.jp/articles/about-engineer-marriage 
86: 2024/10/20(日)09:55 AAS
 >>82 
 保守性は言語でなく開発者や組織のレベルの問題 
 あえて言語の特徴を書くなら、OOP言語だとクラスのフィールドに参照型の値がある場合に、それが他のクラスと共有されるものであるかを知る方法がないけど、Rustはそれが明確という利点がある 
  
 struct Foo { a: T } のTがStringならこれはFooの中に閉じ込められてるし、Rc<String> なら他と共有される (ただしスレッドは跨がない) し、Rc<Mutex<String>> なら複数スレッドから共有されるかつ書き換わる可能性があることを意味する 
  
 そのために面倒な部分があるのは確かで、C#やJavaは逆にそれらを簡略化してるともいえる 
87(1): 2024/10/20(日)10:41 AAS
 >>82 
 Rustの保守性がこれまでの言語と比べて格段に保守性が高く優れているのは様々な仕組みで実現されている 
 例えばRustのデータ参照競合の防止機構やデータ競合の防止機構は保守においてそれらによるバグ混入を確実にコンパイルエラーとして検出する 
88: 2024/10/20(日)11:20 AAS
 初学者がコードを見た時のとっつきにくさはあると思う 
 けどこれは simple vs easy みたいもので、Rustは難しいけど仕組みを理解すればシンプルではある 
89:  警備員[Lv.16] 2024/10/20(日)12:59 AAS
 >>87 
 だからわざわざそれをコンパイルエラーで確認するのかって話になるだろ 
 >>84 
 でもaは使えなくならないよね 
90(1): 2024/10/20(日)13:05 AAS
 >>1 
 値型と参照型って何のこと? 
 Rustは全ての型に対して値と参照の両方があるよ 
 もしプログラマーがそれらを取り違えばコンパイルエラーとなるから問題は起きないよ 
 まずは正しい現状認識をしてから批判しようね 
上下前次1-新書関写板覧索設栞歴
あと 83 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.632s*