結局C++とRustってどっちが良いの? 5traits

■ このスレッドは過去ログ倉庫に格納されています
2023/06/30(金) 21:56:35.52ID:PDIJ4aZy
「C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」

っていう雑談スレ。

結局C++とRustってどっちが良いの? 4traits
https://mevius.5ch.net/test/read.cgi/tech/1686046386/

関連スレ(マ板): Google&MS「バグの70%はC/C++。Rustにする」
https://medaka.5ch.net/test/read.cgi/prog/1619943288/
2023/07/01(土) 03:46:54.61ID:/rHXN22N
gccは誰も使わないコンパイラ。
2023/07/01(土) 04:02:08.70ID:ulppHLtb
めっちゃ使ってる
clangもいいけど
11デフォルトの名無しさん
垢版 |
2023/07/01(土) 04:41:49.04ID:pfOq6Y2+
今、Rustでnumpyライクなライブラリを目指してるけど、行列の演算はrayonを内部にぶっこむべきだろうか。
ちなみにRustのndarrayベースで作るのはやめて一から実装している。
2023/07/01(土) 04:46:21.39ID:6lyrDsv3
ユーザが好きに選べるようにするべき
2023/07/01(土) 05:18:27.37ID:/rHXN22N
gccを使っていると言う変な人が、自分がスタンダード化の様に
偉そうに振舞えるのが匿名インターネットの世界。
2023/07/01(土) 07:08:07.40ID:oXr/pxLu
>>6
Zigがあるじゃない
2023/07/01(土) 08:15:56.69ID:TNFWMxVo
ユーザ数も指標の一つ
利用者が多ければライブラリも大量に出る
2023/07/01(土) 08:24:36.90ID:tCnNkKat
>>13
それも、この世界の下積みの一種かなって思ったり
17デフォルトの名無しさん
垢版 |
2023/07/01(土) 08:34:29.73ID:pfOq6Y2+
Rustはrust analyzerが優秀なので、何も考えずに言われた通りに修正したら何かコンパイルも通って大体挙動も正しいということが経験できる。これはC, C++では絶対ない。
2023/07/01(土) 08:59:45.18ID:tCnNkKat
C++にもチェッカはあるけど、あんまり利用が普及しないんだよね
利用が普及しないから成長も遅い それがC++の現状の弱さ
2023/07/01(土) 09:26:47.55ID:LlqqD8Ud
これすごいな
https://www.youtube.com/watch?v=0O_kqQ4RQI8
20デフォルトの名無しさん
垢版 |
2023/07/01(土) 09:31:25.82ID:LlqqD8Ud
Unreal Engine の Rust化なんて永久に来ないわ
21デフォルトの名無しさん
垢版 |
2023/07/01(土) 09:34:27.40ID:LlqqD8Ud
>>7
ggrks と似てるね
2023/07/01(土) 10:28:15.98ID:PswK3kno
>>13
Rustコンパイラに選択肢が出来ることは良いことではないか!
恐らく史上最も稼働しているカーネルをビルドしてるのがgccだよ
23デフォルトの名無しさん
垢版 |
2023/07/01(土) 10:29:07.14ID:pfOq6Y2+
Rustはゲーム製作周りのクレートとかが不足気味な気はする。でも、機械学習系の有用なRust純正クレートはかなり増えてきてるとは思う。
2023/07/01(土) 10:34:43.25ID:V94vxKDE
こんなにモダンで優れた言語があるのに今からそびえ立つ💩のシープラやる人いるのかね
2023/07/01(土) 10:38:27.78ID:PswK3kno
>>24
後方互換性なめすぎ
MSは賢かった
2023/07/01(土) 11:47:08.23ID:X7ULfVQU
>>24
>>1 にもあるとおり、仕事では、やれと言われたものをやる
SwiftでもDartでもおなじ

問題は、自分用の推し言語
俺はもうちょっとC++でいく Rustの知見をC++に持ち帰るんだ
2023/07/01(土) 14:19:14.54ID:Ou05Fmyx
同じく仕事で必要なものを使う。
今はC、C#、C++/CLI、Python。
Rustをまずは趣味で始めたいが時間が取れないのと、C++/CLIで作りたいものがある。
2023/07/01(土) 14:28:25.90ID:6lyrDsv3
えっ
C++/CLIはもう……
2023/07/01(土) 14:37:04.32ID:8lOSkeAQ
C++/CLIは、C++20くるよ (ぐぐると、使えないっていう記事があがってくる
https://devblogs.microsoft.com/cppblog/cpp20-support-comes-to-cpp-cli/

C++やっててC#もやってたら、十分射程に入る
2023/07/01(土) 14:42:28.74ID:Z5Xk75uh
持ち帰るも何もRustにはできてC++ではできないことなんかないやろ
匙加減の問題でしかない
C++ではスマポ限定の所有権、ライフタイムの設定を全オブジェクトに適用した
文法的に厳しくした
プログラムの制限が増えたせいでコンパイラがプログラマのミスを発見できる範囲が増えただけ
C++で同じ事ができるようになるとすればコンパイラオプションで
“-strict_variable_management”みたいなオプション新しく作ってRustスタイルの厳密な変数管理でコンパイルできるコンパイラが出てこないと無理、そして結局それ使うならrustスタイル(=スマポスタイル)の変数管理法を勉強しないといけない
そもそももうすでにポインタ使うならC++でもc++11以降のスマポの利用推奨で非推奨の方法避けるなら、これからは所有権とライフスタイルの概念勉強するのが不可避になってる
2023/07/01(土) 14:56:45.83ID:PswK3kno
勉強するってほどの御大層なものでもあるまいw
32デフォルトの名無しさん
垢版 |
2023/07/01(土) 15:36:05.30ID:HnAv4FCA
匙加減ww
バカにつける薬は無いとは良く言ったもの

複オジもたいがいバカだと思うが
C++に執着してるやつが輪を掛けてバカだから
このスレはいつ見てもサル山の争い
2023/07/01(土) 15:42:32.57ID:Agv00JYF
この文章読んでc++を擁護してると読めるのはどこまで日本語力ないんやろ
プログラミング能力どうこう言う以前の知能しかない
2023/07/01(土) 15:44:12.22ID:vSBdii75
できることが多いイコール優れているってのが間違い
RDBからカラム制約を外してエクセルのように使って幸せになれるか?
2023/07/01(土) 15:48:16.48ID:Agv00JYF
まぁこの手の論争スレで人の意見を“敵か味方か”に2値で分類して絡んでくるんやろ
そう言う行為がみっともないと考える知能もない
便所の落書きだからこんなもんなんなも知らんどな
36デフォルトの名無しさん
垢版 |
2023/07/01(土) 16:16:02.46ID:fFzDLWcL
RustよりHaskellのほうが安全で速い
2023/07/01(土) 16:51:31.78ID:DYHMlldq
そもそも、STLなんて後から入ったものだから、それを使うことは
強制されて無いのに、STLの欠点がC++の言語としての欠点に
勝手にみなされてっしまってる。
これまでずっと、C++はBetter Cとして使うのが好まれていたのに、
Better Cとして使うのは時代遅れなんていっておきながら、
STLならではの欠点を指摘して、だから、C++を使うのは馬鹿なんだ、
と言ってくる。
Better CとしてSTLではないライブラリを使っている限り、
その欠点は入ってこないにもかかわらず。
2023/07/01(土) 16:58:20.28ID:DYHMlldq
そもそも、C++でもsmart pointerを使うのが必須、などと言っているが、
むしろ、そうすることが煩わしさを生む。
そうすることによって、むしろめんどくさくなったり、分かりにくくなったり
することがあるのだ。
勝手に smart pointer を使うのが必須であるとして、それがとても使いにくい
ことがC++の欠点だと昇華され、だから、Rustでないとダメなんだと。
しかし、smart pointer を大々的に使おうとしたことが煩わしさの根本で
あることに気づいてない。
また、速度比較などでも、伝統的な Better C としての C++ ならば、
STL も smart pointer も使ってなかったから、Rustより速いにもかかわらず、
勝手に「最新のC++のやり方」とその人が思っていものを使って、
遅い結果にしてしまって、それをC++の「最高の結果」だと勝手に断定
してしまう。
世の中には「改悪」という現象がある事をその人は知らない。
2023/07/01(土) 17:04:31.83ID:HHzlehAK
C#でWindowsフォームアプリで作成中にWin10では別途.net coreを配る面倒な事がわかってショックだわ。
Windowsフォームアプリケーション (.NET Framework)にしたいのだが作り直ししか無い?
2023/07/01(土) 17:07:45.38ID:HHzlehAK
>>39
すまん誤爆しました。m(..)m
2023/07/01(土) 17:31:35.89ID:DYHMlldq
マイクロソフトのMFCも欠点が指摘されやすいが、しかし、STLより便利なところもある。
MFCにはなかった問題点をSTLは沢山入れてしまった。
MFCはSTLと距離を置いている。
そして、デファクトスタンダードとしては、現代においてC++を使うとは
MFCを使うことに他ならない。ということは、STLはほとんど使われていない。
にも関わらず、教科書に書いて有るようなSTLの非常に煩わしいやり方を持ってして
C++が使いにくい、と言ってくる。
C++が愛されてきたのは、MFCのせいであってSTLのせいではないことを知るべきである。
2023/07/01(土) 18:38:56.14ID:PswK3kno
プログラマなのによくこんな駄文書けるな
ChatGPTで水増しさせた?
2023/07/01(土) 18:41:37.69ID:Ij0EQZmJ
偏見を承知で言うと
マイクロソフト依存症の人はそんな人が多い
2023/07/01(土) 19:01:28.94ID:kqCQiy8S
C#使いなよ
2023/07/01(土) 19:03:32.57ID:DYHMlldq
C#は絶対嫌だ。
2023/07/01(土) 19:05:40.48ID:ulppHLtb
>>14
Zig使ったこと無いけどエコシステムが整ってるなら使ってみたいな
2023/07/01(土) 19:08:35.56ID:DYHMlldq
そもそもSTLがC++のメインライブラリなどと思っている人は、
C++をまともに使ったことが無い人だ。
2023/07/01(土) 19:17:18.65ID:ulppHLtb
boostだろメインライブラリは
2023/07/01(土) 19:18:04.10ID:X54p6y1Z
C++のテンプレートは理想(言語仕様)と現実(コンパイラ実装)が乖離してたからな
module導入で多少はマシになるかもしれないけどnamespace残したままだからカオス度が増してしまった
2023/07/01(土) 19:23:55.22ID:DYHMlldq
MFCは問題が有ったが、それは主にWin32のWindow関連の
APIとの連携においての話。
STLはそれ以前の問題で書き方がおかしい。
現実にプログラミング経験が少ない人が勝手に考えた感じだ。
2023/07/01(土) 20:02:19.26ID:l24kSvWl
>>36
ライブラリがな
2023/07/01(土) 20:20:46.38ID:uVimT7AM
>>36
HaskellがCやRustより速いとマジで言ってるの?
53デフォルトの名無しさん
垢版 |
2023/07/01(土) 21:49:33.99ID:jAprZXCn
>>39
>昇華
doubt
54デフォルトの名無しさん
垢版 |
2023/07/01(土) 22:14:34.22ID:jAprZXCn
>>38
全体は同意
2023/07/02(日) 01:00:29.09ID:jzpBLYtw
C#に慣れるとMFCでGUIは二度と書きたくない
56デフォルトの名無しさん
垢版 |
2023/07/02(日) 01:02:51.98ID:ieCgx+H2
行列のサイズがでかくなるとシングルスレッドよりもrayonによる並列演算の方が速くなってくるな。
2023/07/02(日) 06:54:41.92ID:jdLDLriS
そもそもMFCはfull freeにならんから
ちょっと前まではそうだった、今もそうだよな

自分用なら、コンソール+C#(OSに同梱の古い枯れたやつ)でいいし
2023/07/02(日) 09:53:50.16ID:UHuzldRb
>>55
開放するの忘れてリークしまくる。
2023/07/02(日) 13:18:42.16ID:Xyim1/0J
GUIがかんたんになったのはここ10年くらいでしょ
それ以前は何を選んでも面倒で難しかった
2023/07/02(日) 13:20:54.90ID:Xyim1/0J
IDEの性能や極まったポトペタ感で昔より作りやすくなってる
言語そのものじゃなくその周辺が作りやすさを決めてるだけじゃないか?
2023/07/02(日) 13:53:16.00ID:Xyim1/0J
RustのGUIってそんなに作りやすいか?
2023/07/02(日) 14:19:07.95ID:fG7MSDtE
GUI用のDSL(マークアップ)がある言語に比べればまだまだでしょ
Rustもマクロ使えばDSLくらいは組めそうだけど
最近は内部ブラウザみたいな代替技術があるから需要が少なそう
63デフォルトの名無しさん
垢版 |
2023/07/02(日) 15:12:58.96ID:BV1CApnr
>>59 難しいと思ったことは一度も無いな
>>61 Tauri は糞
2023/07/02(日) 15:49:02.90ID:OihXi6HP
TauriやElectronはGUIといっても
・マルチプラットフォームでスマホ対応も進行中
・Webと同じ知識技術で作れる
・Webアプリへとの共有や移行が容易
と大きなメリットがあり
VSCodeなどこの方式で成功しているアプリが多数ある
2023/07/02(日) 15:52:44.86ID:nM9kee/9
Rustで全てが非同期かつコンポーネントベースのGUIライブラリを作る機運が生まれてる
描画から全部自前でやる本当のネイティブ版Reactのようなもの
2023/07/02(日) 18:19:31.18ID:owOvhd2B
GUIをC++やRustでやる意味とは
UEだけだろ意味あるの
2023/07/02(日) 18:40:53.06ID:nM9kee/9
>>61
全てがasyncでコンポーネント化されている
これこそ次世代のGUIライブラリとなる
これを作れるのはrustのみ
2023/07/02(日) 19:45:01.65ID:l4k0OEWm
すべてasyncとか死ぬほどめんどくさそう
2023/07/02(日) 19:49:14.43ID:T91CalxQ
いやGUIだとそれが普通なんだよ
UIスレッドでブロッキングAPI使えないのだからその設計が普通
今までのライブラリの設計がミスってた
2023/07/02(日) 19:55:13.31ID:T91CalxQ
このライブラリがかなり理想に近い
https://wishawa.github.io/posts/async-ui-intro/

見てもらえればわかるがほぼReactだ
しかも全てが非同期なので非常に速い
71デフォルトの名無しさん
垢版 |
2023/07/02(日) 20:01:17.15ID:OihXi6HP
そもそもJavaScriptが非同期に動き並行プログラミングだからね
2023/07/02(日) 21:45:39.87ID:aMd0Z/JA
C#もそんな感じだろ
メッセージポンプスレを止めちゃいけないからとか聞いた、そういやそうだよな
モダンだね
2023/07/02(日) 21:52:34.41ID:T91CalxQ
C#は残念ながらブロックする処理を書く場合はスレッドを立てなきゃいけなくて遅い
さらにUIスレッドへの同期コンテキストが必要でその分さらに遅い
2023/07/02(日) 21:59:34.59ID:jzpBLYtw
結局のところOSの描画API呼び出すから、
最終的にUIスレッドに描画任せないといけないのはどのライブラリでも変わらん
2023/07/02(日) 22:04:50.40ID:OihXi6HP
>>74
それは違うんじゃないか
例えばファイル読み書きもOS呼び出すけど
並行プログラミングができていれば
シングルスレッドでもファイル読み書きでブロックされず
待ち時間に他の作業をできるよ
そこにマルチスレッドや描画専用スレッドの必要性はない
2023/07/02(日) 22:08:24.86ID:jzpBLYtw
OSの仕組み理解してなさそう
2023/07/02(日) 22:27:06.93ID:ajw2MJiV
>>76
OSの仕組みを理解していないのは君だ
Linuxならepollなど
WindowsならIOCPなどを勉強しなさい
2023/07/02(日) 22:31:37.38ID:T91CalxQ
なぜ非同期が良いか?
UIスレッドが呼び出しても何の問題もないことが保証されてるから
これはnode.jsが気が付かせてくれたパラダイムシフトだよ
2023/07/02(日) 22:49:45.19ID:OihXi6HP
>>76
並行プログラミングの基本はOSをノンブロッキングで呼び出すところにある
例えばシングルスレッドでもファイルを読み書きしつつ10000個のクライアントと通信するサーバーも作れる
これが並行プログラミング
具体的には>>77のepoll等やあるいはそれらを用いてマルチプラットフォーム対応したlibuvライブラリ等を使う

>>78
Node.js以前から行なわれてきている
Node.jsはそのイベントループ構造部分を内蔵していて
その核心部分をプログラミングできない人でもJavaScriptを書くだけで使える点は大きいね
2023/07/02(日) 22:54:55.66ID:aMd0Z/JA
C++にもco_awaitきてるけど、ああいうのこそ、所有権とか来たらラクに書けるだろうな
コルーチンおもろいぞ、C++erもいっぺん経験してみるべき
2023/07/02(日) 22:59:35.55ID:mbYcfrVi
フロントエンドならRustが活躍できるんだな
2023/07/02(日) 23:07:43.48ID:FpcWXL3u
いいGUIライブラリを使いなさい
2023/07/02(日) 23:09:15.57ID:OihXi6HP
Rustは昔からmioクレートがマルチプラットフォーム対応していて
| OS | Selector |
|---------------|-----------|
| Android | [epoll] |
| DragonFly BSD | [kqueue] |
| FreeBSD | [kqueue] |
| iOS | [kqueue] |
| illumos | [epoll] |
| Linux | [epoll] |
| NetBSD | [kqueue] |
| OpenBSD | [kqueue] |
| Windows | [IOCP] |
| macOS | [kqueue] |
こんな感じ

現在はmioを直接使わなくても
mioの上に並行並列スケジューラを構築しているtokioを使えばよい
2023/07/02(日) 23:47:03.38ID:jzpBLYtw
>>79
ファイルの話じゃなく描画の話をしてるんだが
2023/07/02(日) 23:57:38.16ID:aMd0Z/JA
最近ちょっと(GUIまわりから)離れてるけど、GUIのメッセージキューがメインスレッドに付いてるから、
処理をとっととワーカスレッドに移しちゃうってのは、古くて新しいテーマだよな
2023/07/03(月) 00:14:59.36ID:uVoNxoEf
>>84
ファイルだろうがネット通信だろうが描画だろうが全てソケットに抽象化されているので同じ
2023/07/03(月) 00:21:47.27ID:f710ZASI
C言語が、あるいはそれに連なるC++が業界標準の地位を確立したのって何ともANSI Cの存在が大きい気がします
言語が流行るためには何はともあれ“人が作ったプログラムが自分の環境で試せる”と言うのは大きい。それをちょっと変えてみたらどうなるかとか試してみて学んだりできるのって大きい気がします
今の“業界標準のRust”ってどこが取り仕切っているんですか?
そしてその“業界標準Rust”に収録されてる“標準ライブラリ”の一覧のようなものはどこかで一覧の形で見れますか?、
2023/07/03(月) 00:25:47.65ID:t+8O8Mfo
epollって並列待機処理でそもそもの待機側を開放したい
async/awaitとは別の話題だと思うんだが
2023/07/03(月) 01:22:18.45ID:5E3kHz23
>>87
https://www.rust-lang.org/ja/governance

Rustユーザがもっと増えて
gccrsのように他にもコンパイラが出てきたら
規格が必要になってくるかもね
2023/07/03(月) 01:36:25.99ID:uVoNxoEf
>>88
同じ
(スレッドを使う並列でななく)並行処理を行なうコードを自分で書いてみるとわかる
I/Oを非同期多重化することになる
ためselect/poll/epoll/kqueueを用いたイベントループがスケジューラ相当として核をなす
それを直接使う未分化な原始的な利用から始めて、
次にコールバック方式による単純分離、
さらにpromise/futureによる抽象化、
そしてasync/awaitによる糖衣構文、
と進むことになるが核部分はもちろん同じ
2023/07/03(月) 01:37:43.68ID:7CVvhqQm
>>89
thx
92デフォルトの名無しさん
垢版 |
2023/07/03(月) 02:06:46.42ID:bFZG83Bf
サイズの大きい配列って結構コピーの部分で時間が取られるのかねえ?GUI周りの話ではないが。Rustでnumpyライクなライブラリを作っているからそこら辺は気になる。
2023/07/03(月) 02:28:24.34ID:+YxiNHjZ
>>88
async/awaitって元はただのブロックしないコールバック付きの関数だよ
2023/07/03(月) 03:05:22.10ID:3IqJ4QRg
と言うかRustの利点はそこにあるんやろ
特に返り値のとき
返り値に大きいサイズのObjectを返すときが問題
その場合Cでは返り値のどデカい構造体を呼び出し側のスタック領域にコピーする手間がどうしてもかかってしまう
それを避けるには
・返り値をヒープに領域確保して返す
・呼び出し側で受け取りようの空の構造体領域を呼び出し側スタックエリアに確保してその参照を渡して返り値をそこに書き込んでもらう
くらいしかない
しかしヒープにわざわざ永続的には存在する必要のないデータの受け渡しのためエリアをとるとフラグメンテーションの原因になるし、呼び出し側が返り値の大きさをあらかじめ計算してから領域確保して呼び出さないといけないのはメチャクチャ手間がかかってしまう
Rustなら返り値の構造体をダイレクトに呼び出し側のスタックエリアに確保できる(と思う、未確認)のでそこでパフォーマンスの優位性が出る(ハズ)
今のC,C++にはこのメカニズムを実現する方法はないと思う
2023/07/03(月) 03:22:41.96ID:+YxiNHjZ
>>94
別にそこに関しては今やRustもC++も大して変わらんぞ
今のC++はreturn時に余計なコピーをしないようになってる
2023/07/03(月) 03:24:05.61ID:5E3kHz23
RVO?
2023/07/03(月) 03:37:51.42ID:80Y4MX+q
>>95
そうなんだ
CとかC++は必ずコピーが発生するからどうやって回避するかでの定石習ったけどな
今はコピー回避できるんだ
2023/07/03(月) 04:29:45.61ID:+YxiNHjZ
>>97
今のC++コンパイラはめちゃくちゃ賢くなってて
最適化できる処理はほぼ全て最適化する
特にreturn時や引数に渡す場合の処理で最適化して問題ないと判断されるとほぼ最適化される
2023/07/03(月) 04:35:39.10ID:+YxiNHjZ
>>92
めちゃくちゃ遅くなるよ
現代のアーキテクチャでは無駄なアロケーションやコピーが1番遅くなる要因
1番速いのは当然同じ領域を使い回してそこに書き込むようにすること
キャッシュも効くし無駄なアロケーションが発生しない
ただし副作用と可読性の低下という犠牲を払う
速度と安全性はまさに水と油
2023/07/03(月) 04:46:33.55ID:mO9TuvlK
>>98
その“コピー回避”の方法は“ヒープを利用して回避”ではなくて“呼び出し側のスタック領域を利用する”で回避してるんですか?
ソースあります?
2023/07/03(月) 04:48:48.70ID:+YxiNHjZ
>>100
https://cpprefjp.github.io/lang/cpp17/guaranteed_copy_elision.html
2023/07/03(月) 04:56:04.09ID:+YxiNHjZ
prvalueとかxvalueとかの値のカテゴリについてはこちらが詳しい
https://cpp.rainy.me/037-rvalue-reference.html#%E6%A6%82%E8%A6%81
2023/07/03(月) 05:46:02.09ID:6xMIl2cM
>>102
thx
でもコレやっぱりこの機能をスタック領域でやってるのかどうかの明言はないですね
上の方で誰かが言ってたんですけどC++のスマポ絡みは全部ヒープでやってるって話があったのでどうなんだろと
この問題はとても難しくて私勉強してた頃は解決できてなかったんですよ
例えば

object theFunc(){
object a,b;
.......
if comp( a, b) {
return( a );
} else {
return( b );
}
}

のようなコードの場合コンパイラは実際に変数aかbかのどちらが返り値として返されるのか決定する事はできません
もうこのような場合にはほとんど必然的にコピーするしかなくなります
回避する唯一の方法はobject a,bの両方を呼び出し側のスタックに確保して使わなかった方のobjectは呼び出し側スタックの穴として我慢します
もちろん一時的にスタックに穴が開きますがその呼び出し側の処理が終われば全部御破算にされるので目を瞑る作戦です
なんか聞こえは悪いですがスタック領域中に使われる変数でほんの一瞬しか使われない変数なんか山のように出るものなのでそれを一々気にしてたらキリがありません、問題視しないといけないのは永続的に残るヒープ領域のフラグメンテーションです
じゃあいつでも何でもかんでも呼び出し側のスタックに返り値を受け取る領域確保すればいいのかといえばそれもウソでほんの数バイトの情報しかないならいる分だけコピーしていらないデータは綺麗さっぱり消してしまった方がいい時もあって、どちらが良いかコンパイラは判断する方法がCでは中々解決できないみたいな事習った記憶があります
Rustならできるのかはまだ勉強中なのでよく分からないですけど
2023/07/03(月) 06:42:22.66ID:YLpV4/YA
スタックの穴ってなんのことぞや

関数等の行き返りで、intptr_t以上のものを受け渡ししようっていうのが、そもそもの無理筋感があるんだよな
rvalueを渡すなんていうのは、渡しているのやら、いないのやら

C++時代は、自信のないことはしない、だったんだ
2023/07/03(月) 06:49:45.31ID:YLpV4/YA
>>102
どうせならこっち https://github.com/EzoeRyou/cpp-intro/blob/master/037-rvalue-reference.md
2023/07/03(月) 08:24:46.39ID:Pxa6JMwc
最適化しすぎるが故に、未定義を踏むとこういう事も起きてしまうという
https://cpplover.blogspot.com/2014/06/old-new-thing.html
107デフォルトの名無しさん
垢版 |
2023/07/03(月) 08:42:15.29ID:bFZG83Bf
何かRustだとreturn時にコピーが行われてるような気がする。
2023/07/03(月) 08:58:28.64ID:gVPXZxAL
std::move() もそうだが、最低限のコピーはしないといかんぞどうせ
生成コードみてみろよ C++ならそうするので、取るべき行動は同じ
109デフォルトの名無しさん
垢版 |
2023/07/03(月) 09:05:18.13ID:XqdEtb//
要はAddAssignとAddだと計算結果は同じでもAddAssignの方が圧倒的に速いという現象が起こったりすることがある。これはAddだとコピーをリターンするのに対してAddAssignだとselfの値は同じメモリ上で書きかえられてreturnによるコピーがないから。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況