公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
公式ドキュメント
https://www.rust-lang.org/learn
Web上の実行環境
https://play.rust-lang.org
※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/
※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust
※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/
※次スレは原則>>980が立てること
前スレ
Rust part24
https://mevius.5ch.net/test/read.cgi/tech/1716759686/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
Rust part25
■ このスレッドは過去ログ倉庫に格納されています
2024/07/31(水) 00:46:26.17ID:DBMWY2QT
735デフォルトの名無しさん
2024/09/06(金) 07:46:48.97ID:BoX7C6E+736デフォルトの名無しさん
2024/09/06(金) 08:16:00.50ID:EpQXEMSG737デフォルトの名無しさん
2024/09/06(金) 08:41:14.19ID:EpQXEMSG738デフォルトの名無しさん
2024/09/06(金) 09:22:28.52ID:mKGFkZT8 >>737
GPLのプログラムソース中のアルゴリズムを別の言語で書いてGPL違反になった判例ある?
GPLのプログラムソース中のアルゴリズムを別の言語で書いてGPL違反になった判例ある?
739デフォルトの名無しさん
2024/09/06(金) 09:23:43.25ID:zzPaKLb6 >>736
Rustは清書用(キリっ
Rustは清書用(キリっ
740デフォルトの名無しさん
2024/09/06(金) 09:25:11.78ID:zzPaKLb6741デフォルトの名無しさん
2024/09/06(金) 10:11:20.75ID:KHdVu5nS >>740
インターフェースに著作権は無いよ
インターフェースに著作権は無いよ
742デフォルトの名無しさん
2024/09/06(金) 10:16:26.58ID:n4+9uRqg マネージャとコーダーとか多重請負SIer文化で
linuxカーネル開発を語るなよ…
linuxカーネル開発を語るなよ…
743デフォルトの名無しさん
2024/09/06(金) 11:01:47.89ID:7lTmc6Nm じゃあメンテナーとコミッターで
744デフォルトの名無しさん
2024/09/06(金) 11:05:42.46ID:P1Lpy4RD linuxで余計なことをやろうとしたのはコーダーではなく
継承とか仮想関数とか設計を語る人達だよね
継承とか仮想関数とかを使わない方針が固まるまでC++コードを書かなかった情強がRustを書き始めた
継承とか仮想関数とか設計を語る人達だよね
継承とか仮想関数とかを使わない方針が固まるまでC++コードを書かなかった情強がRustを書き始めた
745デフォルトの名無しさん
2024/09/06(金) 12:04:11.30ID:zzPaKLb6 C++でOS造ろうとした●●ぽんとかいう人は情弱か
746デフォルトの名無しさん
2024/09/06(金) 12:19:00.64ID:onD85wsi linuxカーネルのソース読んだことないのか
c言語とは言え実質的に継承、仮想関数で実装されているところ数多あるから
このあたりはもしオブジェクト指向言語であれば非常にすっきり書けたはずだ
c++の問題はそれ以外の落とし穴が多すぎる
c言語とは言え実質的に継承、仮想関数で実装されているところ数多あるから
このあたりはもしオブジェクト指向言語であれば非常にすっきり書けたはずだ
c++の問題はそれ以外の落とし穴が多すぎる
747デフォルトの名無しさん
2024/09/06(金) 12:20:47.23ID:EpQXEMSG >>738
GPLに限定した話は知らんけど、ソースコード->機械語のコンパイルは翻訳として扱われるんだから同じじゃね?
GPLに限定した話は知らんけど、ソースコード->機械語のコンパイルは翻訳として扱われるんだから同じじゃね?
748デフォルトの名無しさん
2024/09/06(金) 12:30:31.40ID:P1Lpy4RD カーネルが清書だ
何言語だろうがカーネルを書いた者は清書おじさんだ
何言語だろうがカーネルを書いた者は清書おじさんだ
749デフォルトの名無しさん
2024/09/06(金) 13:03:06.23ID:zzPaKLb6 ここでRust持ち上げてC++叩いてる人は
C++のこと全然判ってないね
C++のこと全然判ってないね
750デフォルトの名無しさん
2024/09/06(金) 14:21:47.18ID:P1Lpy4RD751デフォルトの名無しさん
2024/09/06(金) 16:17:28.15ID:mKGFkZT8 >>747
判例出してよ
判例出してよ
752デフォルトの名無しさん
2024/09/06(金) 16:37:13.89ID:/YnY9On7 >>749
分かります。
分かります。
753デフォルトの名無しさん
2024/09/06(金) 16:38:41.24ID:/YnY9On7754デフォルトの名無しさん
2024/09/06(金) 18:30:21.35ID:z6D1HraO C++のこと、全然わかんないや
わかってる人に会ったこともない
わかってる人に会ったこともない
755デフォルトの名無しさん
2024/09/06(金) 19:25:43.95ID:YdMd7Cxd C++のメタプログラミングがすべてを理解しようとしたら頭おかしくなる
756デフォルトの名無しさん
2024/09/06(金) 20:38:27.30ID:EpQXEMSG757デフォルトの名無しさん
2024/09/07(土) 07:53:51.62ID:FsPkWUQG758デフォルトの名無しさん
2024/09/07(土) 08:03:00.66ID:vlbXq7x5 そろそろGPLスレでやった方がいい
759デフォルトの名無しさん
2024/09/07(土) 08:24:32.13ID:bjSDu3Ht このスレにRustでGPLロンダリングしている輩が一定数居そうだからおk
760デフォルトの名無しさん
2024/09/07(土) 09:16:43.75ID:vmkw4WWt unsafeを使えばCを呼べるのに一体なぜCをRustに書き直すんだ
761デフォルトの名無しさん
2024/09/07(土) 10:03:49.93ID:Gu5ULvaE チューニングするなら結局境界検査とかオフにすることになるしなぁ
762デフォルトの名無しさん
2024/09/07(土) 10:22:43.32ID:sqLgjcFz 低レイヤ、ベアメタルってのも何故か一連のRust関連スレで見かける印象
763デフォルトの名無しさん
2024/09/07(土) 10:37:53.70ID:aLQz+qVq >>757
レスバトラーなら絶対言うだろうなと思ったら案の定で笑っちゃった
レスバトラーなら絶対言うだろうなと思ったら案の定で笑っちゃった
764デフォルトの名無しさん
2024/09/07(土) 11:14:10.87ID:s8y/n5qE765デフォルトの名無しさん
2024/09/07(土) 11:33:41.32ID:wkpoJM1A ランダムアクセスは思ったより少ないけど必要なところでは性能的に割とシビアなことも多いぞ。
766デフォルトの名無しさん
2024/09/07(土) 11:44:43.13ID:UFsx2JaR >>757
その反論するならまず
「著作物のGPL配布には『著作権上コンパイルは翻訳として扱われる』ことを否定する要因がある」
ことを明らかにしなきゃ話にならんわな。
そもそも>747で「GPLに限定した話は知らんけど」と言っているのにその反論は無能すぎるかと。
その反論するならまず
「著作物のGPL配布には『著作権上コンパイルは翻訳として扱われる』ことを否定する要因がある」
ことを明らかにしなきゃ話にならんわな。
そもそも>747で「GPLに限定した話は知らんけど」と言っているのにその反論は無能すぎるかと。
767デフォルトの名無しさん
2024/09/07(土) 11:58:50.25ID:LaGZ4PBX >>760
unsafeだからですよ
unsafeだからですよ
768デフォルトの名無しさん
2024/09/07(土) 12:14:44.55ID:i403o9eP769デフォルトの名無しさん
2024/09/07(土) 13:21:00.20ID:vmkw4WWt C++とCがまるで嫁と姑のように同居する設計はLinuxに採用されなかった
Rustなら同居にはならない
本来の目的はそんな感じだろう
Rustなら同居にはならない
本来の目的はそんな感じだろう
770デフォルトの名無しさん
2024/09/07(土) 13:41:30.42ID:EaB+sfRT LinusがC++を嫌ってるのはCとの関係性でなくC++独自の部分だと思うぞ
「レベルの低い開発者がクラスとかオブジェクトを使ってどうしようもない壊れたコードを容易に作れる」といった感じだったと思う
これはC++ 11すら登場してない時代の批判だから、今も同じように思うかどうかは分からないけど
あと「C++の例外機構はカーネル開発に向かない」というのもあって、これは今も同じだと思う
「レベルの低い開発者がクラスとかオブジェクトを使ってどうしようもない壊れたコードを容易に作れる」といった感じだったと思う
これはC++ 11すら登場してない時代の批判だから、今も同じように思うかどうかは分からないけど
あと「C++の例外機構はカーネル開発に向かない」というのもあって、これは今も同じだと思う
771デフォルトの名無しさん
2024/09/07(土) 13:45:37.17ID:D6q2gEim RustやGoなどの例外ではなくエラー値を返していくやり方いいね
772デフォルトの名無しさん
2024/09/07(土) 14:09:35.09ID:YJSeDDN1 返されたエラー値をスルーする事例が多発したから例外が作られたと思う
Rustはmust_useがあるけどGoはよく分からん(特に戻り値がエラーだけの関数)
Rustはmust_useがあるけどGoはよく分からん(特に戻り値がエラーだけの関数)
773デフォルトの名無しさん
2024/09/07(土) 14:10:48.96ID:aLQz+qVq ハイプ期に流行った言説をいつまでも言い続けていくこの感じ
774デフォルトの名無しさん
2024/09/07(土) 14:34:40.97ID:vmkw4WWt 東京オリンピック、大阪万博、不動産バブル
775デフォルトの名無しさん
2024/09/07(土) 15:19:49.13ID:FsPkWUQG >>763>>766
スレ違うだし判例無いならもういいよ
スレ違うだし判例無いならもういいよ
776デフォルトの名無しさん
2024/09/07(土) 16:51:05.14ID:vlbXq7x5 ゲームサーバーもRustで書く時代か
> 業務内容
> 経験・志向に応じて、以下のような分野でお仕事をしていただきます。
> ・ゲームサーバー構築およびバックエンド開発(Rust、C++、etc)
> ・運用補助のためのフロントエンドおよびバックエンド開発(Rust、React、TypeScript、etc)
> 今までゲームサーバーの開発ではC++がメインでしたが、近年少しずつRustに移行しつつあります。
> 実績としてARMORED COREⅥのゲームサーバーはRustで作られ、稼働しています。
> Rust、C++のいずれかの経験者を歓迎していますが、他の言語経験者でRust、C++に興味ある方も歓迎しております。
> 業務内容
> 経験・志向に応じて、以下のような分野でお仕事をしていただきます。
> ・ゲームサーバー構築およびバックエンド開発(Rust、C++、etc)
> ・運用補助のためのフロントエンドおよびバックエンド開発(Rust、React、TypeScript、etc)
> 今までゲームサーバーの開発ではC++がメインでしたが、近年少しずつRustに移行しつつあります。
> 実績としてARMORED COREⅥのゲームサーバーはRustで作られ、稼働しています。
> Rust、C++のいずれかの経験者を歓迎していますが、他の言語経験者でRust、C++に興味ある方も歓迎しております。
777デフォルトの名無しさん
2024/09/07(土) 17:01:27.84ID:kS2tnPiY ゲームサーバーは低レイヤRustプロジェクトじゃないから
Linux等からのGPLロンダリングは関係なさそうだね
低レイヤ、ベアメタル、Rustがポイントなのかな?
Linux等からのGPLロンダリングは関係なさそうだね
低レイヤ、ベアメタル、Rustがポイントなのかな?
778デフォルトの名無しさん
2024/09/07(土) 18:01:33.85ID:Xs/MSaVq >>775
判例という難しそうな言葉を使いたいお年頃なのね
判例という難しそうな言葉を使いたいお年頃なのね
779デフォルトの名無しさん
2024/09/07(土) 18:16:42.45ID:FsPkWUQG >>778
お前のお気持ち表明に何の意味も無いのよ
お前のお気持ち表明に何の意味も無いのよ
780デフォルトの名無しさん
2024/09/07(土) 18:41:33.85ID:vmkw4WWt 表明されたエラーを無視されない確実な方法はプロセス全体を終了すること
終了を回避する方法があれば無視される可能性がある
終了を回避する方法があれば無視される可能性がある
781デフォルトの名無しさん
2024/09/07(土) 18:57:47.65ID:UFsx2JaR782デフォルトの名無しさん
2024/09/07(土) 21:31:00.16ID:PLAeIm6B 逆コンパイルとGPLプログラム見たことがある人がプログラム書く行為が同じってマジ?
783デフォルトの名無しさん
2024/09/07(土) 22:24:15.60ID:aLQz+qVq 違うと思うならその辺の適当なGPLソフトウェアをパクり移植して著作権記載全部消してAll rights reservedって書いて公開して自分でFSFに通報すれば
784デフォルトの名無しさん
2024/09/07(土) 22:53:24.95ID:vmkw4WWt なぜ実験すればいいと思った
自分は科学的だと思ってるのかな
科学って暴走するんだな
自分は科学的だと思ってるのかな
科学って暴走するんだな
785デフォルトの名無しさん
2024/09/07(土) 23:03:30.32ID:gaaFAzxX786デフォルトの名無しさん
2024/09/07(土) 23:14:34.54ID:oYZzSe8a 当たり前だが「見た == パクった」とはならない
ただ万が一の訴訟リスクも避けたいなら
GPLのソースを見て仕様を起こす組織/人間と
GPLのソースを見ず起こされた仕様をもとに
コードを書く組織/人間を完全に分けておけばよい
これで完全にパクリを否定できる
ただ万が一の訴訟リスクも避けたいなら
GPLのソースを見て仕様を起こす組織/人間と
GPLのソースを見ず起こされた仕様をもとに
コードを書く組織/人間を完全に分けておけばよい
これで完全にパクリを否定できる
787デフォルトの名無しさん
2024/09/08(日) 00:01:36.02ID:uWZDJFuJ そもそも、特許取れてないものをパクることは、歴史的には許されてきた。
また、著作権法も契約も、作家や著作権者が作品を売って暮らしていけることを目的と
していたものであり、GPLのように社会全体を構造的に変化させることを目的としたものでは
なく、法令の目的外使用と言える。
また、著作権法も契約も、作家や著作権者が作品を売って暮らしていけることを目的と
していたものであり、GPLのように社会全体を構造的に変化させることを目的としたものでは
なく、法令の目的外使用と言える。
788デフォルトの名無しさん
2024/09/08(日) 02:29:49.31ID:/oFDgQbn パソコンのキーボードでフリック入力できるものはありますか?
789デフォルトの名無しさん
2024/09/08(日) 07:57:18.94ID:4KkAMey9 相場が乱高下することは許される
ということは昨日は無罪だったものが今日は有罪になっても
相場が間違っていることにならない
ということは昨日は無罪だったものが今日は有罪になっても
相場が間違っていることにならない
790デフォルトの名無しさん
2024/09/08(日) 21:59:24.16ID:YTIPNyDo shared_ptrはRustではArcだと思うけどこれ本当?
447 デフォルトの名無しさん 2024/09/07(土) 20:17
むしろshared_ptr<T>でスレッド間共有オブジェクトを保持するのは
生ポに対するshared_ptr<T>のメリットが無い……
可能な限りスレッド間共有なんてことはやめてconstオブジェクトのコピーにするのが正義……
447 デフォルトの名無しさん 2024/09/07(土) 20:17
むしろshared_ptr<T>でスレッド間共有オブジェクトを保持するのは
生ポに対するshared_ptr<T>のメリットが無い……
可能な限りスレッド間共有なんてことはやめてconstオブジェクトのコピーにするのが正義……
791デフォルトの名無しさん
2024/09/08(日) 22:20:14.30ID:vegiTRtO C++スレでやれって感じだけど、自分ははその説明は適切でないと思う
shared_ptrを使う理由はちゃんとある
寿命を適切に管理してるなら片方がunique_ptr等で所有して他方に生ポインタ渡すのも駄目ではない
可能ならデータ共有よりもスレッドごとに所有させる方が安全というのは分かるけど、共有が必要な場面って普通にあるはず
shared_ptrを使う理由はちゃんとある
寿命を適切に管理してるなら片方がunique_ptr等で所有して他方に生ポインタ渡すのも駄目ではない
可能ならデータ共有よりもスレッドごとに所有させる方が安全というのは分かるけど、共有が必要な場面って普通にあるはず
792デフォルトの名無しさん
2024/09/08(日) 23:25:28.71ID:KupGOfGa >>791
スレッドの寿命に依存するからunique_ptr使用でポインタ渡しはリスキーだね
Rustならthread::scopeで安全に参照を渡せる
もちろんArcを使うのもよくて
追加コストはclone時と終える時の加減算
スレッド内での参照にコストはかからないからArcを避ける必要はない
スレッドの寿命に依存するからunique_ptr使用でポインタ渡しはリスキーだね
Rustならthread::scopeで安全に参照を渡せる
もちろんArcを使うのもよくて
追加コストはclone時と終える時の加減算
スレッド内での参照にコストはかからないからArcを避ける必要はない
793デフォルトの名無しさん
2024/09/08(日) 23:59:54.41ID:vegiTRtO 自分も推奨とまでは思ってなくて、「寿命の問題がないことが明らかであれば許容する」くらいの感じで書いた
クラスのコンストラクタでスレッド立ち上げて、デストラクタの中でjoinするような作り (よくあると思う) ならスレッドの寿命 < 参照先のデータの寿命 は明らかだし
shared_ptrの方が意図は分かりやすいとは思うけど、必須までとは思わない
クラスのコンストラクタでスレッド立ち上げて、デストラクタの中でjoinするような作り (よくあると思う) ならスレッドの寿命 < 参照先のデータの寿命 は明らかだし
shared_ptrの方が意図は分かりやすいとは思うけど、必須までとは思わない
794デフォルトの名無しさん
2024/09/09(月) 00:11:01.40ID:tO4U/3Ox std::thread::scope()は必然的にそういう挙動になるな
終了時のjoinが保証されるからスレッドの寿命 < 参照先のデータの寿命になる
実際の例は
https://doc.rust-lang.org/stable/std/thread/fn.scope.html
のExample参照
終了時のjoinが保証されるからスレッドの寿命 < 参照先のデータの寿命になる
実際の例は
https://doc.rust-lang.org/stable/std/thread/fn.scope.html
のExample参照
795デフォルトの名無しさん
2024/09/09(月) 05:07:18.49ID:cTuZnVfu796デフォルトの名無しさん
2024/09/09(月) 07:01:55.53ID:p2Jj+0Ux >>795
その考え方が既に詰んでいる
もし寿命を適切に管理できるならunique_ptrもRustも不要
しかし人間が100%適切に管理することは不可能だからC++でunique_ptr等が導入された
そしてさらにRust言語が導入された
その考え方が既に詰んでいる
もし寿命を適切に管理できるならunique_ptrもRustも不要
しかし人間が100%適切に管理することは不可能だからC++でunique_ptr等が導入された
そしてさらにRust言語が導入された
797デフォルトの名無しさん
2024/09/09(月) 08:08:18.92ID:eGfGA388 寿命を適切に管理できる時はあるんだけど、そうであるかそうでないかの境界くらいなコードをうっかり受け入れてしまうとその後ずっと負債になるんだよな
798デフォルトの名無しさん
2024/09/09(月) 08:13:24.94ID:X0IwgyVa でもここでRustを持ち上げている一定数は
RustでGPLロンダリングしていると吹聴しているレベル
低レイヤ、ベアメタル、Rustってのがポイントみたい
RustでGPLロンダリングしていると吹聴しているレベル
低レイヤ、ベアメタル、Rustってのがポイントみたい
799デフォルトの名無しさん
2024/09/09(月) 08:59:39.68ID:XH4OT6yj どうあっても完璧にはならないという前提で、ちょいちょいリファクタリングするくらいの運用ができればいいんだけどな。
ワヤになることがあっても戻せば少なくとも動きはするし。
ワヤになることがあっても戻せば少なくとも動きはするし。
800デフォルトの名無しさん
2024/09/09(月) 11:37:01.61ID:CQiqzRbc またC++知らん人が出て来たでおじゃる
801デフォルトの名無しさん
2024/09/09(月) 13:49:10.25ID:eftneq+I C++のスマートポインタは分かってる分かってないもあるがTの型や使われ方によって考えること多すぎて元々キツイやろ
Rustは継承無くしたり所有権複雑にしたことでスマートポインタの様々な機能が可能な限り単一責任に分散されててスッキリしてる
考えた奴の努力凄えと思う
Rustは継承無くしたり所有権複雑にしたことでスマートポインタの様々な機能が可能な限り単一責任に分散されててスッキリしてる
考えた奴の努力凄えと思う
802デフォルトの名無しさん
2024/09/09(月) 13:56:14.25ID:ZyHHM8VJ あっちのスレワッチョイ付いてるからわざわざこっちに持ってきたの?
803デフォルトの名無しさん
2024/09/09(月) 20:31:43.26ID:6U3TxPzT Rust プログラミング 1 (全 5 回)
watch?v=6AiU6ncdUdk
出演
低レイヤーガール 1: 自作 OS を Rust で書いている
低レイヤーガール 2: 自作 browser を Rust で書いている
watch?v=6AiU6ncdUdk
出演
低レイヤーガール 1: 自作 OS を Rust で書いている
低レイヤーガール 2: 自作 browser を Rust で書いている
804デフォルトの名無しさん
2024/09/09(月) 21:35:49.10ID:+SItvs3R805デフォルトの名無しさん
2024/09/09(月) 23:09:27.92ID:4O0n94uD806デフォルトの名無しさん
2024/09/09(月) 23:57:57.19ID:q4jDNuIo Rc/Arcは確保したヒープの解放責任者数だけをカウントしている
解放責任者数がゼロになると解放する
参照している人の数はカウントしていない
参照がいくつ増えようがRc/Arcの内部のカウンターは変化しない
まずこの区別ができているかどうかが基礎かな
解放責任者数がゼロになると解放する
参照している人の数はカウントしていない
参照がいくつ増えようがRc/Arcの内部のカウンターは変化しない
まずこの区別ができているかどうかが基礎かな
807デフォルトの名無しさん
2024/09/10(火) 00:00:07.29ID:30cMByxj そしてスタック上のTであろうがヒープに確保したBox<T>やRc<T>であろうが
そのT部分への参照は同じ&T型となりその値は(スライスなどを除いて)アドレス値のみで構成される
そこでスタック領域かヒープ領域かの区別はない
そしてそこには参照のカウント値は当然なくてライフタイム値も存在しない
参照の有無やライフタイムの妥当性はコンパイル時のみ把握されて問題があればコンパイル時にエラーとなる
そのT部分への参照は同じ&T型となりその値は(スライスなどを除いて)アドレス値のみで構成される
そこでスタック領域かヒープ領域かの区別はない
そしてそこには参照のカウント値は当然なくてライフタイム値も存在しない
参照の有無やライフタイムの妥当性はコンパイル時のみ把握されて問題があればコンパイル時にエラーとなる
808デフォルトの名無しさん
2024/09/10(火) 11:45:49.01ID:oGuW1rX8809デフォルトの名無しさん
2024/09/10(火) 13:35:20.41ID:KGjTz1X0 >そこでスタック領域かヒープ領域かの区別はない
これもコンパイル時のみの話では
これもコンパイル時のみの話では
810デフォルトの名無しさん
2024/09/10(火) 18:55:33.96ID:q3P6j0bc 参照があるかないかライフタイムを満たしているかといった情報はコンパイルの時しか持たないけど
参照のアドレス値は実行時にも当然ある
ただしそれがヒープを指すかスタックを指すかは把握できないから区別しない
そして区別しなくてもよい方法をRustは導入した
参照のアドレス値は実行時にも当然ある
ただしそれがヒープを指すかスタックを指すかは把握できないから区別しない
そして区別しなくてもよい方法をRustは導入した
811デフォルトの名無しさん
2024/09/10(火) 18:58:00.79ID:q3P6j0bc なぜどちらを指しているか把握できないのか?
それは次のようなコードも書けるため
fn bigger<'a: 'c, 'b: 'c, 'c, T: PartialOrd + ?Sized>(x: &'a T, y: &'b T) -> &'c T {
if x > y { x } else { y }
}
二つの引数にヒープを指す参照とスタックを指す参照を渡した場合
関数から返ってくる参照がどちらなのかは各実行毎のデータが揃うまでわからない
そして実は参照が指す領域がどちらなのかを把握する必要がないのが結論
ライフタイムさえ満たしていれば区別する必要がなくなった
それは次のようなコードも書けるため
fn bigger<'a: 'c, 'b: 'c, 'c, T: PartialOrd + ?Sized>(x: &'a T, y: &'b T) -> &'c T {
if x > y { x } else { y }
}
二つの引数にヒープを指す参照とスタックを指す参照を渡した場合
関数から返ってくる参照がどちらなのかは各実行毎のデータが揃うまでわからない
そして実は参照が指す領域がどちらなのかを把握する必要がないのが結論
ライフタイムさえ満たしていれば区別する必要がなくなった
812デフォルトの名無しさん
2024/09/10(火) 20:21:44.39ID:5FTvOJ5k なるほど
813デフォルトの名無しさん
2024/09/10(火) 21:08:40.00ID:3nGnNoH6 >>805の疑問とは何の関係もないよね
騙されてるやつが訳1名いるみたいでご愁傷様だけど
騙されてるやつが訳1名いるみたいでご愁傷様だけど
814デフォルトの名無しさん
2024/09/10(火) 21:31:43.71ID:7V29flyi Rcは参照の数を管理するものではない
Rcはヒープ領域を確実に解放するためにその所有者の数を管理する
当然Rcはヒープ領域だけを扱う
スタック領域はRAIIで確実に解放される
Rcはヒープ領域を確実に解放するためにその所有者の数を管理する
当然Rcはヒープ領域だけを扱う
スタック領域はRAIIで確実に解放される
815デフォルトの名無しさん
2024/09/10(火) 22:01:22.00ID:yy/y1+XI 誰かがArc/Rcはborrowの数を管理してると言ってる?
文脈によって意味が変わる「参照」とか「reference」という言葉を勘違いしてるだけじゃない?
Arc/Rcはreference counting pointerなんだから当然参照の数は管理してる
同じアロケーションを参照してるowning pointerの数を管理してる
文脈によって意味が変わる「参照」とか「reference」という言葉を勘違いしてるだけじゃない?
Arc/Rcはreference counting pointerなんだから当然参照の数は管理してる
同じアロケーションを参照してるowning pointerの数を管理してる
816デフォルトの名無しさん
2024/09/10(火) 22:08:07.24ID:O/aiMcKg Rcのソースコード解説あったわ。
qiita.com/qnighy/items/5b2fbf27e3ee36e57b8d
誰かソースコード読んだ?
qiita.com/qnighy/items/5b2fbf27e3ee36e57b8d
誰かソースコード読んだ?
817デフォルトの名無しさん
2024/09/10(火) 22:23:36.52ID:/Q+PZbLD >>815
そんな言葉遊びをして混乱させるのはよくない
Rustで参照といったらTに対する&T
一方でRcはヒープ解放責任の所有者を複数可にする
参照が複数あることと所有者が複数あることは全く別なのでこの違いをはっきりさせて理解するのが正しい
そんな言葉遊びをして混乱させるのはよくない
Rustで参照といったらTに対する&T
一方でRcはヒープ解放責任の所有者を複数可にする
参照が複数あることと所有者が複数あることは全く別なのでこの違いをはっきりさせて理解するのが正しい
818デフォルトの名無しさん
2024/09/10(火) 23:01:44.78ID:yy/y1+XI >>817
The BookやRcの公式ドキュメントにも書いてること
例えばThe Bookには「The Rc<T> type keeps track of the number of references to a value」と書いてある
つまり「Rustで参照といったらTに対する&T」とは限らない
文脈次第
>参照が複数あることと所有者が複数あることは全く別なのでこの違いをはっきりさせて理解するのが正しい
その区別ができてないレスとかあった?
The BookやRcの公式ドキュメントにも書いてること
例えばThe Bookには「The Rc<T> type keeps track of the number of references to a value」と書いてある
つまり「Rustで参照といったらTに対する&T」とは限らない
文脈次第
>参照が複数あることと所有者が複数あることは全く別なのでこの違いをはっきりさせて理解するのが正しい
その区別ができてないレスとかあった?
819デフォルトの名無しさん
2024/09/10(火) 23:09:22.99ID:30cMByxj Rc/Arcはヒープの解放責任者が複数になるときに対応するものだが
>>805が「ArcやRcってスタックのデータを指せるっけ?」と言い出したのでちょっと怪しい
>>805が「ArcやRcってスタックのデータを指せるっけ?」と言い出したのでちょっと怪しい
820デフォルトの名無しさん
2024/09/10(火) 23:12:42.09ID:+l9ylb2n それで言うなら>>804のほうが明らかに言葉足りてないがなあ
まあよく分からんなら反応すんなってこった
まあよく分からんなら反応すんなってこった
821デフォルトの名無しさん
2024/09/10(火) 23:22:45.87ID:+H56cclg RcはC++にないけどArcがC++のshared_ptrだよ
だから複数所有者については新規性がなくて
Rustが強いのはスタック上かヒープ上かに関係なく両者への参照を混ぜても安全に扱えるようになったことだよ
これでスタック上の活用の幅が広がりさらに速くなった
だから複数所有者については新規性がなくて
Rustが強いのはスタック上かヒープ上かに関係なく両者への参照を混ぜても安全に扱えるようになったことだよ
これでスタック上の活用の幅が広がりさらに速くなった
823デフォルトの名無しさん
2024/09/10(火) 23:38:50.48ID:mzgoZglT 複オジの読解力不足&的外れはいつものことだろ
騙されるやつにも問題あるんだからもうほっとけよ
騙されるやつにも問題あるんだからもうほっとけよ
824デフォルトの名無しさん
2024/09/10(火) 23:41:27.35ID:blt3RnjU C++ではヒープの解放責任が安全性の対象だった
Rustはそれに加えて複数の安全性を導入している
ヒープかスタック上かに関わらずそれらへの参照の有効安全性がその一つ
Rustはそれに加えて複数の安全性を導入している
ヒープかスタック上かに関わらずそれらへの参照の有効安全性がその一つ
825デフォルトの名無しさん
2024/09/10(火) 23:48:29.99ID:mryuhu82 真正アスペかな
826デフォルトの名無しさん
2024/09/10(火) 23:49:26.48ID:+l9ylb2n 造語してる暇があったらちゃんとイチからC++学ぼうや、じゃないと他人に伝わる言葉で比較することもできんやろ
いや、別にできなくてもいいのか、なんとなくそれっぽい感じのこと書けるならそれで
いや、別にできなくてもいいのか、なんとなくそれっぽい感じのこと書けるならそれで
827デフォルトの名無しさん
2024/09/10(火) 23:56:12.12ID:x0lHLaQU C/C++がダメなところでもっと重要な点はsingle writer xor multi readersのデータ競合安全性がないところだろ
例えばこれ
std::vector<int> v{0, 1, 2, 3, 4, 5, 6, 7};
int *p5 = &v[5];
assert(v[5] == 5); // OK
*p5 = 123;
assert(v[5] == 123); // OK
v.push_back(8);
*p5 = 456; // p5がまだ使えるので使おうとすると
assert(v[5] == 456); // NG このアサートは通らない
例えばこれ
std::vector<int> v{0, 1, 2, 3, 4, 5, 6, 7};
int *p5 = &v[5];
assert(v[5] == 5); // OK
*p5 = 123;
assert(v[5] == 123); // OK
v.push_back(8);
*p5 = 456; // p5がまだ使えるので使おうとすると
assert(v[5] == 456); // NG このアサートは通らない
828デフォルトの名無しさん
2024/09/11(水) 00:27:46.41ID:6onadJun 1つのTの値に対するRc<T>はcloneすることで複数存在できるけど
特定のRc<T>を介したその値の参照(&T)はそのRc<T>の生存期間しか使えない
この&Tもいくらでもコピーできるけど同じRc<T>の生存期間に縛られる
T(ヒープ)
↑
Rc<T>(主にスタック上だけどヒープも可)
↑
&T(同上)
みたいに二段階で参照してて
TはRc<T>が全部消えるまで残り続けるけど
&Tは仲介してる特定のRc<T>が存在する間しか使えない
C++のshared_ptrに近いけど使われ方(コピーor複製の戦略)は微妙に変わるかもしれない
特定のRc<T>を介したその値の参照(&T)はそのRc<T>の生存期間しか使えない
この&Tもいくらでもコピーできるけど同じRc<T>の生存期間に縛られる
T(ヒープ)
↑
Rc<T>(主にスタック上だけどヒープも可)
↑
&T(同上)
みたいに二段階で参照してて
TはRc<T>が全部消えるまで残り続けるけど
&Tは仲介してる特定のRc<T>が存在する間しか使えない
C++のshared_ptrに近いけど使われ方(コピーor複製の戦略)は微妙に変わるかもしれない
829デフォルトの名無しさん
2024/09/11(水) 00:51:54.05ID:kXFdScH1 >>828
正確にはRc<T>のDerefにより生じる&TがTを直接指すので参照を使うコストや利便性は普通の&Tと同じコストゼロ
そのDerefの時にRc<T>を借用しているため&Tはそれより長生きできず安全性が保たれる
C++で例えるとshared_ptr.get()で直接ポインタを取り出したのと同じなのでカウンタ増減もなくコストはかからない
C++でこれはリスクの高い要注意の行為だがRustでは上述のように安全性とコストゼロを両立させている
正確にはRc<T>のDerefにより生じる&TがTを直接指すので参照を使うコストや利便性は普通の&Tと同じコストゼロ
そのDerefの時にRc<T>を借用しているため&Tはそれより長生きできず安全性が保たれる
C++で例えるとshared_ptr.get()で直接ポインタを取り出したのと同じなのでカウンタ増減もなくコストはかからない
C++でこれはリスクの高い要注意の行為だがRustでは上述のように安全性とコストゼロを両立させている
830デフォルトの名無しさん
2024/09/11(水) 01:53:23.49ID:GmVwOhhB 声かけで特殊”複”詐欺を未然に防止
5ch有志らに感謝状
5ch有志らに感謝状
831デフォルトの名無しさん
2024/09/11(水) 07:05:44.53ID:KRDYrSYu >>827
vectorにpush_backして再配置でアドレス変わったんだから当たり前でしょ。それが嫌ならstd::listでも使えば
vectorにpush_backして再配置でアドレス変わったんだから当たり前でしょ。それが嫌ならstd::listでも使えば
832デフォルトの名無しさん
2024/09/11(水) 07:19:25.98ID:J41SJMWS833デフォルトの名無しさん
2024/09/11(水) 08:14:31.51ID:UEfsyQtn834デフォルトの名無しさん
2024/09/11(水) 08:40:17.21ID:CkAz+p2f しかもasan出て久しいのに、この人ら>>827,832 時間止まってる?
835デフォルトの名無しさん
2024/09/11(水) 08:58:17.83ID:LHxkhbUK >>827は簡単な例だからデータ競合を起こしてp5がダングリングポインタとなってることに気づくけど
もっと複雑な状況だと気づかずに実行してしまいデバッグでハマるパターンでもある
それをコンパイル時点で指摘してくれるRustは開発効率いいね
もっと複雑な状況だと気づかずに実行してしまいデバッグでハマるパターンでもある
それをコンパイル時点で指摘してくれるRustは開発効率いいね
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 東京株式市場 インバウンド関連株が下落 中国政府の渡航自粛要請で [バイト歴50年★]
- 泣ける画像
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- 戦争は無くならないし殺人は起きるし女はレイプされるし子供は餓死するし
- 女性検診なんでオナニーしてグチョグチョで行ってやる
- 日経時間外、5万円割れ 垂直落下始まる [402859164]
- ( ´・ω・` )朝ですぞー
