公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
Web上の実行環境
https://play.rust-lang.org
日本語の情報
https://rust-jp.rs/
※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/
※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/
※C++との比較は専用スレへ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/
前スレ
Rust part11
https://mevius.5ch.net/test/read.cgi/tech/1623857052/
探検
Rust part12
レス数が900を超えています。1000を超えると表示できなくなるよ。
2021/08/24(火) 22:55:27.78ID:972JwtmU
841デフォルトの名無しさん
2021/10/24(日) 23:55:17.08ID:J36a/Om9842デフォルトの名無しさん
2021/10/25(月) 00:09:38.02ID:dMwiicPm >>841
shellのリダイレクトに似てると思ったからだろ
shellのリダイレクトに似てると思ったからだろ
843デフォルトの名無しさん
2021/10/25(月) 00:21:35.96ID:dRHq7DJG >>841
当時の C++ には可変長引数を現代的な型システムの枠組みで扱う方法がなかった。
(C++11 からは variadic template がある。 これも今となっては現代的と言えるかどうか……。)
新しいオブジェクトを追加したときにオーバーロードが可能である必要など
の諸々の事情が積み重なって演算子オーバーロードの仕組みを使うのが妥当という結論になり、
オーバーロード可能な演算子の中で比較的それらしく見えるのが << だったという経緯。
記法だけなら printf で不満は出なかっただろうけど、
printf (というか C の可変長引数の仕組み) は型システム的な保護が全然できないぶっ壊れなので
それを是とすることも出来なかった。 (廃止もしなかったけど。)
良くはないが他にどうにも出来なかったんだよ。
当時の C++ には可変長引数を現代的な型システムの枠組みで扱う方法がなかった。
(C++11 からは variadic template がある。 これも今となっては現代的と言えるかどうか……。)
新しいオブジェクトを追加したときにオーバーロードが可能である必要など
の諸々の事情が積み重なって演算子オーバーロードの仕組みを使うのが妥当という結論になり、
オーバーロード可能な演算子の中で比較的それらしく見えるのが << だったという経緯。
記法だけなら printf で不満は出なかっただろうけど、
printf (というか C の可変長引数の仕組み) は型システム的な保護が全然できないぶっ壊れなので
それを是とすることも出来なかった。 (廃止もしなかったけど。)
良くはないが他にどうにも出来なかったんだよ。
844デフォルトの名無しさん
2021/10/25(月) 00:30:55.79ID:dRHq7DJG 歴史が長くなるとしょうもない事情の積み重ねでグダグダになるのもよくあること。
Rust もいずれはそうなる。 そしてそのときは新しい何かで置き換えられるんだよ。
でも Rust の場合は Edition という区切りで新しい Rust 自身で置き換えつつ
過去の Rust とも共存することを最初から意図したデザインにしているので
比較的長く維持されるんじゃないかな。
Rust もいずれはそうなる。 そしてそのときは新しい何かで置き換えられるんだよ。
でも Rust の場合は Edition という区切りで新しい Rust 自身で置き換えつつ
過去の Rust とも共存することを最初から意図したデザインにしているので
比較的長く維持されるんじゃないかな。
845デフォルトの名無しさん
2021/10/25(月) 10:06:46.78ID:vPVmdF1Z 実際、型安全であるiostreamよりprintfのがよっぽどマシって議論はある。
しょーもない技術要素よりも視認性のがよっぽど大事だったりするわけで。
しょーもない技術要素よりも視認性のがよっぽど大事だったりするわけで。
846デフォルトの名無しさん
2021/10/25(月) 11:11:20.41ID:DCgj0YIV >>840
iced日本語入力できなくない?
iced日本語入力できなくない?
847デフォルトの名無しさん
2021/10/25(月) 11:14:28.05ID:vmRZrQEp >>827
>「コンパイルが通れば大体動く」という感触はHaskellに近い
C/C++でも「コンパイルが通れば大体動く」けど
Haskellはコンパイル時にアルゴリズムミスまでチェックしてくれるのか?
>「コンパイルが通れば大体動く」という感触はHaskellに近い
C/C++でも「コンパイルが通れば大体動く」けど
Haskellはコンパイル時にアルゴリズムミスまでチェックしてくれるのか?
848デフォルトの名無しさん
2021/10/25(月) 11:32:11.39ID:dMwiicPm 単にHaskellはC/C++よりも型安全性の度合いが強いってこと言いたいんだろ
849デフォルトの名無しさん
2021/10/25(月) 11:51:09.02ID:fl6GjyRy >>846
Font読み込めば出来るっぽいよ
Font読み込めば出来るっぽいよ
850デフォルトの名無しさん
2021/10/25(月) 12:13:25.40ID:Zg5tRANc >>847
アスペルガーか?
アスペルガーか?
851デフォルトの名無しさん
2021/10/25(月) 15:20:38.75ID:YZjFvrvy Rustでゲームエンジン作ったら億万長者になれるのかな
852デフォルトの名無しさん
2021/10/25(月) 17:18:01.27ID:uPCS+ug6 UnityやUnreal Engine並のを作れるならできるんじゃね
さもなきゃプロプライエタリなエンジンなんてきょうび流行らん
さもなきゃプロプライエタリなエンジンなんてきょうび流行らん
853デフォルトの名無しさん
2021/10/25(月) 17:29:16.50ID:SuqdiOg2 Rustの方が圧倒的に高速なら儲かるんじゃね?
知らんけど
知らんけど
854デフォルトの名無しさん
2021/10/25(月) 17:42:54.30ID:dQPM/Zr0 C++に勝てると思ってるの?
855デフォルトの名無しさん
2021/10/25(月) 18:33:26.15ID:WHGdQ2cY フラッピーバードでも億稼げるんだからいけるいける
856デフォルトの名無しさん
2021/10/25(月) 18:38:23.54ID:SAo0WBxS もうインディー2Dゲームぐらいはリリースされてるのかと思ったけど
まだなのか
まだなのか
857デフォルトの名無しさん
2021/10/25(月) 19:12:07.52ID:rY5vWaGm >>851
億万の金とリソースをかけなきゃ使い物になるエンジンなんて作れないんじゃないの?
まあ、そこまでいかなくともユーザーのいる既存のツールで開発止まっているもの(MMDとか)のクローン作ればワンチャンあるかもね。
億万の金とリソースをかけなきゃ使い物になるエンジンなんて作れないんじゃないの?
まあ、そこまでいかなくともユーザーのいる既存のツールで開発止まっているもの(MMDとか)のクローン作ればワンチャンあるかもね。
858デフォルトの名無しさん
2021/10/25(月) 20:03:31.88ID:cubP7NbG ゲームエンジンでボトルネックとなるような重い処理ってなんなの
描画関連が重いならGPU側処理がメインでCPUで動くプログラムは何で書いても良いのでは
描画関連が重いならGPU側処理がメインでCPUで動くプログラムは何で書いても良いのでは
859デフォルトの名無しさん
2021/10/25(月) 20:21:36.23ID:tU+lYK+H 行列計算とメモリー帯域、PS5とPCを比べれば一目瞭然。PC4-25600でさえメモリー帯域が25GB/sで
デュアルチャネルで50GB/s、PS5は帯域幅218GB/s、
つまり描画が重いのではなく、CPUやGPUで行列計算した結果をメモリーへ格納したり再び取り出したりが重い。
描画だけなら4K再生できるVRAMの速度だけで終わる話
デュアルチャネルで50GB/s、PS5は帯域幅218GB/s、
つまり描画が重いのではなく、CPUやGPUで行列計算した結果をメモリーへ格納したり再び取り出したりが重い。
描画だけなら4K再生できるVRAMの速度だけで終わる話
860デフォルトの名無しさん
2021/10/25(月) 20:24:03.79ID:RLuxZR0I >>851
儲かるかは知らんがbevy engineの作者はお賽銭で40万/月貰っているぞ
儲かるかは知らんがbevy engineの作者はお賽銭で40万/月貰っているぞ
861デフォルトの名無しさん
2021/10/25(月) 22:52:02.92ID:JVD00Zwu ゲーム1本も出てないってそれなんかデカイ問題あるんじゃないの。
使ってみたら、あれこれ全然意味ないわ的な。
使ってみたら、あれこれ全然意味ないわ的な。
862デフォルトの名無しさん
2021/10/25(月) 23:04:10.31ID:WHGdQ2cY そらまあUnityとかみたいなガチゲームエンジンとかと比べたら意味ないんじゃね
863デフォルトの名無しさん
2021/10/26(火) 00:13:42.72ID:T+NfAItu ゲームとか組み込みと並んで過去の資産が積み上がっているところだろう
現状グラフィックAPIなどのバックエンドは全部C/C++だぞ
一朝一夕の話ではないが、取り組み続ける必要がある
とりあえずコールオブデューティのTreyarchは触っているぽい
現状グラフィックAPIなどのバックエンドは全部C/C++だぞ
一朝一夕の話ではないが、取り組み続ける必要がある
とりあえずコールオブデューティのTreyarchは触っているぽい
864デフォルトの名無しさん
2021/10/26(火) 00:19:35.84ID:T+NfAItu インディ→ue4かunity
大手→ゲームの開発スパン3-4年+ゲームエンジン開発期間
今から積極的取り組んでも公表できる成果ができるは8-10年じゃない
そういえば任天堂もrust人材を募集してたよ
大手→ゲームの開発スパン3-4年+ゲームエンジン開発期間
今から積極的取り組んでも公表できる成果ができるは8-10年じゃない
そういえば任天堂もrust人材を募集してたよ
865デフォルトの名無しさん
2021/10/26(火) 09:14:11.61ID:1uavI5d4 カスタムアロケータ回りがしょぼいからガチのゲームエンジン用としては現状まだきついのでは
866デフォルトの名無しさん
2021/10/26(火) 09:43:34.49ID:AMOvMfiW たしかにコンシューマゲーム会社なんかがRust採用を進めていく、ってのはなんかありそうだね
プロダクトのプロトタイプ作成とかめっちゃあると思うんだけど、そういうのとかで、どんどん試してみて欲しい
彼らがRustコミュニティに貢献してくれるのか、っていうとなんか怪しい気はするけど
プロダクトのプロトタイプ作成とかめっちゃあると思うんだけど、そういうのとかで、どんどん試してみて欲しい
彼らがRustコミュニティに貢献してくれるのか、っていうとなんか怪しい気はするけど
867デフォルトの名無しさん
2021/10/26(火) 11:03:35.61ID:ftLfN9xo 最近はマイコンもセキュリティ機能が重要視されているけど
処理系は相変わらずC/C++でRustを推進みたいな流れにはなっていない矛盾
処理系は相変わらずC/C++でRustを推進みたいな流れにはなっていない矛盾
868デフォルトの名無しさん
2021/10/26(火) 11:18:59.50ID:BJDScnmh そもそも組み込みで使えるrustコンパイラがないからな
869デフォルトの名無しさん
2021/10/26(火) 12:47:26.53ID:hwHjfkE+ 限定的ながらCortex-M用のバックエンドがあるじゃん
870デフォルトの名無しさん
2021/10/26(火) 13:14:38.26ID:I5hwU/3x 俺のH8はどうなるんや
871デフォルトの名無しさん
2021/10/26(火) 14:24:23.79ID:ZxZWHA9I LLVMバックエンドがあるならなんとかできるのでは
ないなら知らん
ないなら知らん
872デフォルトの名無しさん
2021/10/26(火) 15:31:08.95ID:bUwN0t0N >>870
RL78に乗り換えてどうぞ。LLVMバックエンドもあるよ
RL78に乗り換えてどうぞ。LLVMバックエンドもあるよ
873デフォルトの名無しさん
2021/10/26(火) 15:43:31.64ID:BNqSw8pO 僕はRX-78-2からRX-78NT-1に乗り換えたよ
みんなもそうしなよ
みんなもそうしなよ
874デフォルトの名無しさん
2021/10/26(火) 15:50:06.56ID:BJDScnmh 嘘だと言ってよバーニィ
875デフォルトの名無しさん
2021/10/26(火) 15:54:33.07ID:BJDScnmh 真面目な話Green Hillsが対応したら組み込みでも大分状況変わると思うんだが
なんか内部では研究してるみたいだし
なんか内部では研究してるみたいだし
876デフォルトの名無しさん
2021/10/26(火) 16:50:59.50ID:BwJyZYHo ルネサスは近年arm32bitとしてraファミリ出してる。h8とかsuperhな人は今すぐ乗り換えろ
877デフォルトの名無しさん
2021/10/26(火) 17:52:31.12ID:9Njhbr90878デフォルトの名無しさん
2021/10/26(火) 20:33:41.25ID:T+NfAItu >>865
基本カスタムアロケータは自作では?
基本カスタムアロケータは自作では?
879デフォルトの名無しさん
2021/10/26(火) 21:43:49.66ID:BJDScnmh アロケータ自作は大げさじゃないか
heaplessクレートでどうにかなるんじゃないかな
オレは使ったことないけど
heaplessクレートでどうにかなるんじゃないかな
オレは使ったことないけど
880デフォルトの名無しさん
2021/10/26(火) 21:51:14.59ID:PDIGoDZx Unityでいけるくらいならデフォルトのアロケータで十分では?
jemallocとかに切り替えてもいいけど、どちらにしても自作するほどかね
jemallocとかに切り替えてもいいけど、どちらにしても自作するほどかね
881デフォルトの名無しさん
2021/10/26(火) 21:59:07.68ID:zVG+0sad うんこ
882デフォルトの名無しさん
2021/10/26(火) 22:58:46.15ID:Fg4TonRG Unity使うなら内部のGCはBoehm GCなんだからGC_MALLOC使ったほうが良いのでは?
オレはRc<T>使いながらBoehmが使えるのか知らんけど
オレはRc<T>使いながらBoehmが使えるのか知らんけど
883デフォルトの名無しさん
2021/10/27(水) 00:00:42.78ID:6YxZEOiV 別にゲームにカスタムアロケータが必須なんてことはないと思うが
UnityみたいにGCありの言語で書く場合にGCのスパイクが許容できないから
独自のメモリプールとかを書かざるを得ないのでは
それともC++でもアロケータ自作してるのか?
UnityみたいにGCありの言語で書く場合にGCのスパイクが許容できないから
独自のメモリプールとかを書かざるを得ないのでは
それともC++でもアロケータ自作してるのか?
884デフォルトの名無しさん
2021/10/27(水) 00:23:45.53ID:c5Twcn5s UnityってBoehm GCなんだ?
それで十分動くんならRustにもGCあってもよかったんじゃない?
それで十分動くんならRustにもGCあってもよかったんじゃない?
885デフォルトの名無しさん
2021/10/27(水) 00:29:03.79ID:QIbcJ+ZF ならGo使えば良くない?
886デフォルトの名無しさん
2021/10/27(水) 00:46:21.16ID:l1Jw+QgM goはboehmじゃなく2017年ごろまでtcmallocで今は派生(随分、中身が違う)してるはず
887デフォルトの名無しさん
2021/10/27(水) 07:18:35.73ID:4kTRaQF8 Boehmてストップザ・ワールドは起こらんの?
888デフォルトの名無しさん
2021/10/27(水) 08:48:37.83ID:NxiqMK2Z Boehmってカタカナ的には何て読むの?
889デフォルトの名無しさん
2021/10/27(水) 09:08:54.86ID:CWN4UblG ボエヒムじゃないの?
890デフォルトの名無しさん
2021/10/27(水) 10:46:43.20ID:OgmKOgHT ベームかボームだろ、ボエヒムとかワロタw
891デフォルトの名無しさん
2021/10/27(水) 11:14:08.33ID:7BguKBbd ドラクエの呪文みたいだな
892デフォルトの名無しさん
2021/10/27(水) 11:35:17.90ID:Ru0zcXw7 ドイツ語のoeは日本語ではエって転写される
893デフォルトの名無しさん
2021/10/27(水) 12:01:22.63ID:dNMmh9m9 Phoenix
894デフォルトの名無しさん
2021/10/27(水) 12:11:52.89ID:AHUxp5wd 412 名前: 以下、名無しにかわりましてVIPがお送りします 投稿日: 2013/01/19(土) 21:03:25.42 ID:a2pD/tlo0
FランのFはフェニックスのFや!
例えこんなところで落ちぶれても不死鳥のごとく上流階級に返り咲くんや!!
414 名前: 以下、名無しにかわりましてVIPがお送りします 投稿日: 2013/01/19(土) 21:04:02.87 ID:dT9mn0sK0
>>412
フェニックスは「phoenix」
FランのFはフェニックスのFや!
例えこんなところで落ちぶれても不死鳥のごとく上流階級に返り咲くんや!!
414 名前: 以下、名無しにかわりましてVIPがお送りします 投稿日: 2013/01/19(土) 21:04:02.87 ID:dT9mn0sK0
>>412
フェニックスは「phoenix」
895デフォルトの名無しさん
2021/10/27(水) 14:01:22.92ID:t2iD5tO8 cafe la boheme
896デフォルトの名無しさん
2021/10/28(木) 12:12:05.45ID:hM84Yf/1 >>887
スレチだが、Boehmなので本来はSTWだけなのでUnityにGCラグが発生していたことは有名ですが、2018/12頃に
インクリメンタルGCが出来て改善された。
https://blog.unity.com/technology/feature-preview-incremental-garbage-collection
またUnityでゲームなどを作るときに良くやるのがGCを動かさないこと(=オブジェクトを破棄しない)で
オブジェクトプールを使用して1度作ったオブジェクトをプールして置き破棄させない方法など、Unityにある
文字列比較などを使用しないなど細かい事をやる。本末転倒といえばその通り
スレチだが、Boehmなので本来はSTWだけなのでUnityにGCラグが発生していたことは有名ですが、2018/12頃に
インクリメンタルGCが出来て改善された。
https://blog.unity.com/technology/feature-preview-incremental-garbage-collection
またUnityでゲームなどを作るときに良くやるのがGCを動かさないこと(=オブジェクトを破棄しない)で
オブジェクトプールを使用して1度作ったオブジェクトをプールして置き破棄させない方法など、Unityにある
文字列比較などを使用しないなど細かい事をやる。本末転倒といえばその通り
897デフォルトの名無しさん
2021/10/29(金) 02:30:41.55ID:dwfT6x3M 典型的なバッドノウハウだな
とはいえ日本でUnityが一番つかわれているであろう現場のモバイルゲーム開発は
昔はケータイJavaのゲーム開発やってた場合が多いのでその辺のGCバッドノウハウに慣れちゃってるという
Boehmはボエーンて読んでるわ
とはいえ日本でUnityが一番つかわれているであろう現場のモバイルゲーム開発は
昔はケータイJavaのゲーム開発やってた場合が多いのでその辺のGCバッドノウハウに慣れちゃってるという
Boehmはボエーンて読んでるわ
898デフォルトの名無しさん
2021/10/29(金) 02:58:27.64ID:j8WlttkF oe はドイツ語の o の代替綴りとしてあてられることが多い。
つまり boehm の本来の綴りは bohm ってことね。
o はオの口の音でエという感じなので音としては中途半端で、カタカナに当てはめにくい。
ドイツ語の発音通りをあえてカタカナにするならボェーンに聞こえるんだけど、
bohm という人名は通例ではベームと表記してるね。
つまり boehm の本来の綴りは bohm ってことね。
o はオの口の音でエという感じなので音としては中途半端で、カタカナに当てはめにくい。
ドイツ語の発音通りをあえてカタカナにするならボェーンに聞こえるんだけど、
bohm という人名は通例ではベームと表記してるね。
899デフォルトの名無しさん
2021/10/29(金) 02:58:48.47ID:j8WlttkF あれ? 2ch に投稿したらウムラウトが消えてる……。
900デフォルトの名無しさん
2021/10/29(金) 03:36:42.46ID:Ws4Kkx5X appleをアップルと記載するような文化やからね。カタカナにしてしまったら本来の発音との差異なんて気にしたらキリがない
901デフォルトの名無しさん
2021/10/29(金) 04:15:21.99ID:feAEAXNj 名女優のオードリー・ヘップバーンと
ローマ字表記のヘボン式で有名なヘボン氏が実は同じ綴り同じ発音の同じ姓みたいなもんか
ローマ字表記のヘボン式で有名なヘボン氏が実は同じ綴り同じ発音の同じ姓みたいなもんか
902デフォルトの名無しさん
2021/10/29(金) 05:16:40.74ID:eAaOJvH1 ドイチュ語と描いてない >>898 は失格
903デフォルトの名無しさん
2021/10/29(金) 21:33:27.38ID://DLIqvB まじかあ、これが可能だったのかあ
let v = vec![1, 2, 3];
println!("{}", v[if true { 1 } else { 2 }]);
let v = vec![1, 2, 3];
println!("{}", v[if true { 1 } else { 2 }]);
904デフォルトの名無しさん
2021/10/29(金) 23:53:13.86ID:3N24c0Lq905デフォルトの名無しさん
2021/10/30(土) 00:22:25.21ID:9U1YWI6I 音韻と音声は異なる。 ある言語で同じ音だと認められる音が音韻で、
たとえば日本語だとシンブンシという言葉に表れる二個のンは実際には違う音
なのに同じ音として処理している。
(だからヘボン式ローマ字では書き分けるルールになっている。)
音韻として同じでも音声として幅はあり、そして音韻は言語に依存するもんだから、
外国語の音を転写してくるとどう頑張ったって辻褄の合わない部分は出てくる。
たとえば日本語だとシンブンシという言葉に表れる二個のンは実際には違う音
なのに同じ音として処理している。
(だからヘボン式ローマ字では書き分けるルールになっている。)
音韻として同じでも音声として幅はあり、そして音韻は言語に依存するもんだから、
外国語の音を転写してくるとどう頑張ったって辻褄の合わない部分は出てくる。
906デフォルトの名無しさん
2021/10/30(土) 01:29:07.34ID:fDTZDMBU >>901
唐鳳は上手いよな
唐鳳は上手いよな
907デフォルトの名無しさん
2021/10/30(土) 02:41:12.91ID:z8LGC696 いつの間にか[T; N]にIntoIteratorがimplされてるな
しかも興味深いことにVec等と異なり消費されないようだ
借用ルール的にはどういう扱い?
しかも興味深いことにVec等と異なり消費されないようだ
借用ルール的にはどういう扱い?
908デフォルトの名無しさん
2021/10/30(土) 08:30:57.45ID:zPV0av3I イテレータが理解できないやつ定期的に湧くな
909デフォルトの名無しさん
2021/10/30(土) 09:56:39.69ID:gRDEN/XN 常駐
910デフォルトの名無しさん
2021/10/30(土) 11:34:48.67ID:cxTfS1zf >>902
ドイちェン
ドイちェン
911デフォルトの名無しさん
2021/10/30(土) 20:52:05.52ID:/cDwb9ic >>907
Rust 1.53.0で配列にIntoIteratorが実装された
あと識別子に日本語も使えるようになった
配列は要素がCopyを実装しているかどうかで所有権の扱いが変わる
#[derive(Debug,Clone,Copy)]
struct 構造体 {
値: isize,
}
fn main() {
let 配列 = [構造体{値:1}, 構造体{値:2}, 構造体{値:3}];
for 変数 in 配列 {
println!("{:?}", 変数);
}
println!("{:?}", 配列[0]);
}
例えばこれはコンパイルが通って動くけど
構造体のderiveのCopyを外すと
配列の所有権はfor in内部のinto_iter()で移動してしまいコンパイルが通らなくなる
Rust 1.53.0で配列にIntoIteratorが実装された
あと識別子に日本語も使えるようになった
配列は要素がCopyを実装しているかどうかで所有権の扱いが変わる
#[derive(Debug,Clone,Copy)]
struct 構造体 {
値: isize,
}
fn main() {
let 配列 = [構造体{値:1}, 構造体{値:2}, 構造体{値:3}];
for 変数 in 配列 {
println!("{:?}", 変数);
}
println!("{:?}", 配列[0]);
}
例えばこれはコンパイルが通って動くけど
構造体のderiveのCopyを外すと
配列の所有権はfor in内部のinto_iter()で移動してしまいコンパイルが通らなくなる
912デフォルトの名無しさん
2021/10/30(土) 21:00:13.45ID:zJlZfWf6 >>911
ぶっちゃけ日本語の識別子わかりやすいって思ってしまった
ぶっちゃけ日本語の識別子わかりやすいって思ってしまった
913デフォルトの名無しさん
2021/10/30(土) 22:32:29.50ID:EbhCJ5wH 日本語識別子わかりやすいんだけど入力に手間がかかるのがつらい
914デフォルトの名無しさん
2021/10/30(土) 23:29:17.10ID:s2ubgEFJ let v0 = vec![1, 2, 3];
let mut v1 = v0;
v1.push(120);
let mut v0 = vec![1, 2, 3];
let v1 = &mut v0;
v1.push(120);
所有権関連で試してみてるんだけど、この二つの違いってなんなん?
いまいちよくわからん
上のはmutでないvecをlet mutの変数に入れるとpushできてまうし
下のはlet mutでない変数なのに&mutでいれるとpushできてまう
let mut v1 = v0;
v1.push(120);
let mut v0 = vec![1, 2, 3];
let v1 = &mut v0;
v1.push(120);
所有権関連で試してみてるんだけど、この二つの違いってなんなん?
いまいちよくわからん
上のはmutでないvecをlet mutの変数に入れるとpushできてまうし
下のはlet mutでない変数なのに&mutでいれるとpushできてまう
915デフォルトの名無しさん
2021/10/30(土) 23:56:55.99ID:cJtJXOgj916デフォルトの名無しさん
2021/10/31(日) 00:40:09.42ID:ndmOeSWD >>914
それぞれpushした後にv0とv1がどうなってるか確認してみるとわかる
それぞれpushした後にv0とv1がどうなってるか確認してみるとわかる
917デフォルトの名無しさん
2021/10/31(日) 01:41:05.72ID:e5ZzvOAs うんこ荒らすな!
918デフォルトの名無しさん
2021/10/31(日) 02:16:55.91ID:HeT/GYnp すまんがVSCode + Rust-Analyzerで勉強中なんだけどさ
数ヶ月前は変数の型が表示されていたのに、今じゃ全然表示されなくなっちゃったんだけど・・・・どうすればいいんだぜ?
数ヶ月前は変数の型が表示されていたのに、今じゃ全然表示されなくなっちゃったんだけど・・・・どうすればいいんだぜ?
919デフォルトの名無しさん
2021/10/31(日) 03:00:17.77ID:9uKpC+QX int * constみたいなもん
参照先のアドレスは変更不可だけどそのアドレスが指してるvectorは&mutだから変更可能
参照先のアドレスは変更不可だけどそのアドレスが指してるvectorは&mutだから変更可能
920デフォルトの名無しさん
2021/10/31(日) 03:02:55.52ID:nF8ypkXG >>914
他の言語での余計な知識を捨て去ってゼロから考えるとわかりやすかったよ
今回の件で関係するルールは単純でこれだけかな?
【所有権】
・所有権を持てるのは一人だけ
・使う(=代入や関数引数も含まれる)と所有権は移動する
・ただしCopyトレイト実装型は使う時にCopyされるので所有権は移動しない
【所有権を持つ可変と非可変】
・その変数の中身を書き換える予定があるなら変数を可変(mut)に宣言しておく
・他の変数に代入しなおせば可変か非可変か変更可能(つまりその変数を使う時の制限ヒント)
【参照(=貸出=借用)】
・所有権が移動されたくなければ参照で貸し出す
・可変参照(&mut)の貸し出しは1人のみに参照独占で元も可変変数であること
・非可変参照(&)の貸し出しは同時に何人でも可能
・まとめるとsingle writer or multi readers
所有権を明確にするのはメモリ自動解放のため
可変を明確にするのは並行(concurrent)/並列(parallel)での競合回避のため
他の言語での余計な知識を捨て去ってゼロから考えるとわかりやすかったよ
今回の件で関係するルールは単純でこれだけかな?
【所有権】
・所有権を持てるのは一人だけ
・使う(=代入や関数引数も含まれる)と所有権は移動する
・ただしCopyトレイト実装型は使う時にCopyされるので所有権は移動しない
【所有権を持つ可変と非可変】
・その変数の中身を書き換える予定があるなら変数を可変(mut)に宣言しておく
・他の変数に代入しなおせば可変か非可変か変更可能(つまりその変数を使う時の制限ヒント)
【参照(=貸出=借用)】
・所有権が移動されたくなければ参照で貸し出す
・可変参照(&mut)の貸し出しは1人のみに参照独占で元も可変変数であること
・非可変参照(&)の貸し出しは同時に何人でも可能
・まとめるとsingle writer or multi readers
所有権を明確にするのはメモリ自動解放のため
可変を明確にするのは並行(concurrent)/並列(parallel)での競合回避のため
921デフォルトの名無しさん
2021/10/31(日) 07:46:34.10ID:dD8mFzoB922デフォルトの名無しさん
2021/10/31(日) 09:44:05.10ID:726CqcoT 所有権を伸ばして発音すると昇龍拳みたいに聞こえる
出掛かりが無敵なところも似てる
出掛かりが無敵なところも似てる
923デフォルトの名無しさん
2021/10/31(日) 09:51:39.37ID:5rE8GYET ヒカヘンサンショウ
924デフォルトの名無しさん
2021/10/31(日) 13:37:02.02ID:r7nTmIjE 丁寧で優しい920を弄りたくないけど、これを読める人は914のような質問はしないね
925デフォルトの名無しさん
2021/10/31(日) 13:58:11.88ID:yTUS2Zye 以下の関数をジェネリックにする方法ありますか?
fn is_one_two_three<A: AsRef<[isize]>>(a: A) {
assert_eq!(&[1, 2, 3], a.as_ref());
}
fn main() {
let a = [1, 2, 3];
is_one_two_three(a);
let a = vec![1, 2, 3];
is_one_two_three(a);
}
配列もVecも受け取る関数でこれはコンパイルも通り動いているのですが
isizeと型が決め打ちのところをジェネリックにTとしたいです
どうするとよいでしょうか?
fn is_one_two_three<A: AsRef<[isize]>>(a: A) {
assert_eq!(&[1, 2, 3], a.as_ref());
}
fn main() {
let a = [1, 2, 3];
is_one_two_three(a);
let a = vec![1, 2, 3];
is_one_two_three(a);
}
配列もVecも受け取る関数でこれはコンパイルも通り動いているのですが
isizeと型が決め打ちのところをジェネリックにTとしたいです
どうするとよいでしょうか?
926デフォルトの名無しさん
2021/10/31(日) 14:34:45.61ID:ZiqPaZpd >>925
数値型を一般化する trait を使うのが普通かな。
自分で定義しても良いが num_traits::FromPrimitive を使うならこんな感じ
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=1fbd536dd6c9ea76beb20a666b085190
数値型を一般化する trait を使うのが普通かな。
自分で定義しても良いが num_traits::FromPrimitive を使うならこんな感じ
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=1fbd536dd6c9ea76beb20a666b085190
927デフォルトの名無しさん
2021/10/31(日) 16:04:00.70ID:2p54m3kz >>914
気持ちの上では他の言語と対応付けるのではなく Rust のルールで理解すべきという点で >>920 に
同意ではあるんだが、そうは言っても知っていると引っ張られるのも仕方のない話で、
入門初期では多少はしょうがないとも思う。
あえて C++ で同等のものに置き換えるとするとこんな感じかな。
#include <vector>
int main(void) {
{
const std::vector<int> v0 = {1, 2, 3};
std::vector<int> v1 = v0;
v1.push_back(120);
}
{
std::vector<int> v0 = {1, 2, 3};
std::vector<int>* const v1 = &v0;
v1->push_back(120);
}
}
この場合は所有権の概念はあまり関係なくて
メソッド呼出しの演算子が参照を自動で調整してしまうのも混乱の原因になってる気がする。
mut が何にかかっているのか見えにくい。
気持ちの上では他の言語と対応付けるのではなく Rust のルールで理解すべきという点で >>920 に
同意ではあるんだが、そうは言っても知っていると引っ張られるのも仕方のない話で、
入門初期では多少はしょうがないとも思う。
あえて C++ で同等のものに置き換えるとするとこんな感じかな。
#include <vector>
int main(void) {
{
const std::vector<int> v0 = {1, 2, 3};
std::vector<int> v1 = v0;
v1.push_back(120);
}
{
std::vector<int> v0 = {1, 2, 3};
std::vector<int>* const v1 = &v0;
v1->push_back(120);
}
}
この場合は所有権の概念はあまり関係なくて
メソッド呼出しの演算子が参照を自動で調整してしまうのも混乱の原因になってる気がする。
mut が何にかかっているのか見えにくい。
928デフォルトの名無しさん
2021/10/31(日) 16:25:11.82ID:KIvWC7vb929デフォルトの名無しさん
2021/10/31(日) 16:52:46.17ID:2p54m3kz930デフォルトの名無しさん
2021/10/31(日) 17:14:21.91ID:WrAvX4Kw C++で考えるのは弊害しかないじゃん
何がしょうがないだよ
何がしょうがないだよ
931デフォルトの名無しさん
2021/10/31(日) 17:47:23.34ID:dE1SXutD 弊害しかないは言いすぎ
この場合mutをどこに付けると何が可変になるかの話だから
C++でconstをどこに付けると何が不変になるのかを例に出すのは自然なたとえだと思いますよ
この場合mutをどこに付けると何が可変になるかの話だから
C++でconstをどこに付けると何が不変になるのかを例に出すのは自然なたとえだと思いますよ
932デフォルトの名無しさん
2021/10/31(日) 21:58:15.04ID:4rIS02S1 let mut vec0 = vec![vec![0, 2, 3]; 3];
for mut i in vec0.iter_mut() {
i.push(9);
}
for mut i in &mut vec0 {
i.push(9);
}
この二つのループの意味は同じ?
こういう二つの書き方があるのでちょっとわかりにくい気がする
for mut i in vec0.iter_mut() {
i.push(9);
}
for mut i in &mut vec0 {
i.push(9);
}
この二つのループの意味は同じ?
こういう二つの書き方があるのでちょっとわかりにくい気がする
933デフォルトの名無しさん
2021/10/31(日) 22:14:30.87ID:4rIS02S1 へー、これが通るんだ
ちょっと笑った
let vec0 = vec![0, 2, 3];
let mut vec0 = vec0;
vec0.push(99);
ちょっと笑った
let vec0 = vec![0, 2, 3];
let mut vec0 = vec0;
vec0.push(99);
934デフォルトの名無しさん
2021/10/31(日) 22:21:16.21ID:xmsO/hLH >>933
シャドーイングだから当たり前でしょ
シャドーイングだから当たり前でしょ
935デフォルトの名無しさん
2021/10/31(日) 22:22:32.67ID:fTPwCWVK シャドーイングOKな言語でもlintが禁止してきてイラっとする
936デフォルトの名無しさん
2021/10/31(日) 22:31:01.48ID:4rIS02S1937デフォルトの名無しさん
2021/10/31(日) 22:44:51.38ID:2W4wB6er クソみたいな名前が増えないようにだよ
938デフォルトの名無しさん
2021/10/31(日) 22:57:25.82ID:Ou5/KoYl >>924
「関係するルールは単純でこれだけ」と言って関係ないものも含めて8個もルールを羅列するやつが丁寧で優しいわけがないよ
「関係するルールは単純でこれだけ」と言って関係ないものも含めて8個もルールを羅列するやつが丁寧で優しいわけがないよ
939デフォルトの名無しさん
2021/10/31(日) 23:04:28.74ID:4rIS02S1 >>937
変数名の再利用と状態変更はちがくね?
そもそも変更しないと宣言して変数をシャドーイングして変更可能にするのも疑問だけど、
まあそれは仕様だとして、それが変数名の再利用とは無関係じゃんね 再利用しない前提なんだから
変数名の再利用と状態変更はちがくね?
そもそも変更しないと宣言して変数をシャドーイングして変更可能にするのも疑問だけど、
まあそれは仕様だとして、それが変数名の再利用とは無関係じゃんね 再利用しない前提なんだから
940デフォルトの名無しさん
2021/10/31(日) 23:09:50.30ID:59hJVDPo もはや何言ってるかわからないレベル
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 台湾有事での集団的自衛権行使に賛成48%、「反対」が44.2% [♪♪♪★]
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★12 [BFU★]
- 中国・国連大使「日本側は反省せず、発言の撤回拒否」 書簡を国連事務総長に送る [♪♪♪★]
- 首相官邸前で「戦争あおるな」 台湾有事巡る答弁に抗議 ★3 [蚤の市★]
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★13 [BFU★]
- 【NHK】受信料の未払い督促を10倍に強化… 支払い拒否が続くと民事手続きも 「カーナビも受信料いただきます」方針 [冬月記者★]
- 他サポ 2025-260
- 【フジテレビ】2025 FORMULA 1【NEXT】Lap600
- 2025 SUPER FORMULA Lap18
- 【DAZN】フォーミュラGP【F1 2 3 SF P】Lap1807
- 京都競馬4回5日目エリザベス女王杯★3
- 福島競馬3回5日目
- 【実況】博衣こよりのえちえちゼルダの伝説 ムジュラの仮面🧪 ★4
- 中国駐日大使館「釣魚島とその付属島嶼は中国固有の領土」愛国者ブチギレへ [834922174]
- 小野田大臣「それ正式なデータですか?報道ベースですよね」(10万いいね) [237216734]
- 日本人の48%覚悟完了… [819729701]
- 🏡🏡😅🏡🏡
- 女の子、プチ整形で垢抜けまくってしまうwwwwwwwwwwwwwwwwwwwwwwww [329329848]
