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

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

っていう雑談スレ。

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

関連スレ(マ板): Google&MS「バグの70%はC/C++。Rustにする」
https://medaka.5ch.net/test/read.cgi/prog/1619943288/
2023/05/08(月) 12:31:11.67ID:B7yn02Wa
>>251
バカだな
>>131の実行環境のマシンはプログラミング言語に依らず同一に決まってるだろ
2023/05/08(月) 12:43:44.96ID:PotcPEgC
>>201
これは良いサンプル
https://www.youtube.com/watch?v=U-_43dmdV_I
2023/05/08(月) 12:43:46.40ID:iczXOFhv
>>249
内部で呼ばれるcargo packageの仕様っぽいね
https://doc.rust-lang.org/cargo/commands/cargo-package.html
の2.でCargo.lockを含める条件が書かれてる
excludeで強引に外せるのかな
2023/05/08(月) 12:48:52.30ID:PotcPEgC
>>228
全ての素数の積でπを造る公式あるな
2023/05/08(月) 12:50:45.02ID:PotcPEgC
>>234
C++使ってるけどC++が一番好きではない
どっちかというとCの方が好き
2023/05/08(月) 12:56:17.27ID:yn6KTAlC
Rustの検証や推論ってAIの役に立つか?というか役に立つようなAIを作るべきか?
それらもコンパイラではなくAIが判断するようにしたほうがよくないか?
2023/05/08(月) 12:57:11.50ID:PotcPEgC
thx!
2023/05/08(月) 13:48:29.03ID:imilCHLn
今話題になってるAIは緻密な整合性検証できるというよりも、人間の雑な問いに「らしい」答えを返してくれる感じだから、コンパイラ側の緻密な推論とかは引き続きやっていく必要あんじゃねえの。
2023/05/08(月) 14:22:47.81ID:yn6KTAlC
>>259
それならAIが内部でRust的なツールを使ってチェックするだけでよくて、
Rustのコードを出力する必要はないんじゃね
2023/05/08(月) 15:04:56.15ID:eTYn8zaL
>>245
AIにRustのコード吐かせる理由なんて無いよね
2023/05/08(月) 15:39:48.45ID:pZhRtbOb
Rust急進派によると、rustcをパスするコードは自動的に与信できるらしいので
2023/05/08(月) 15:42:47.04ID:QcAzVd3l
速度は、1%位の差になってくると、コンパイラの最適化能力に依存するが、
Rustはrustcの強力なLLVMを使っているのに、C++は、LLVMのclangを
使えばいいのになぜかgccを使っていたりするのもおかしい。
2023/05/08(月) 16:19:16.98ID:SySGd/wN
>>259 >>262
そうするとコードの安全性は人間かコンパイラが保証するしかないわけか
そうなるとAIに書いてもらうコードはRustしかないな
2023/05/08(月) 16:35:56.27ID:x8c+D5IZ
>>263
llvmの方がgccより性能良くなった?
2023/05/08(月) 16:41:27.47ID:NDGne9Ur
>>265
12年前から既にclangの方が速いです:
https://stackoverflow.com/questions/3187414/clang-vs-gcc-which-produces-faster-binaries
267デフォルトの名無しさん
垢版 |
2023/05/08(月) 17:24:13.85ID:dxF1xGv4
>>264
仕様を自分で書く
仕様を満たしてるかどうかを確認するテストを機械に書かせる
テストが正しいがどうか人間がレビューする
テストをパスするコードを機械に書かせる
この繰り返し

機械にやらせてるところは今はベンダーに外注してる作業
抽象度が低くパターン化しやすい仕事ほど高い信頼度で機械化しやすい
268デフォルトの名無しさん
垢版 |
2023/05/08(月) 18:43:10.50ID:A57Tkf07
>>266
その手の話は信用ならねえな
2023/05/08(月) 20:09:42.31ID:tptm3XCm
>>267
コーディングできない上流と設計できない下流の非効率なウォーターホール方式を続けるの?
テストさせられるほどの細かな設計まで自分でやるならコーディングもしてしまった方が早くない?
270デフォルトの名無しさん
垢版 |
2023/05/08(月) 22:23:28.00ID:Sk4xBlmq
>>269
テストの粒度は上流から下流まで様々あるんだよ
テストさせられる==細かな設計とは限らない

ちなウォーターフォールね
2023/05/08(月) 22:48:34.95ID:23L22zMg
そんな上位の仕様を渡すだけで内部設計も何でも自動でやってくれるAIは当分来ない
学習して曖昧パターンで答えてくれる方のAIは論理的思考がまるでダメ
論理的な方のAIは厳密に指定し尽くさないと適当に補完してやってくれない
根本的に180度違うから融合の見通しもない
2023/05/09(火) 02:35:37.18ID:roDNqhiB
公開したcrateの要らなくなった古いバージョンとか消したくても消せないのか
githubよりタチが悪いな
他から参照してると仕方ないのが判るが
管理システムとして破綻してないかこれ
2023/05/09(火) 02:55:17.89ID:oJhOeTc4
yank
2023/05/09(火) 03:40:24.06ID:LWOtm1Dy
>>268
gccとclangのどちらの最適化が優れているかは誰にも分からないので、
その影響をなくすためにも、rustc と 比較すべきは gcc ではなく、clang
ということになるわけです。なので、今後ベンチマークを取る際には、
rustc vs clang で行かないと意味が有りません。
2023/05/09(火) 06:12:08.21ID:CM93Ewnl
そのように同じくLLVMを使ってコンパイルしても
>>178のように言語仕様が原因でC++が遅くなりRustが速くなる事例があるんだよな
2023/05/09(火) 07:51:20.97ID:roDNqhiB
yankしても消えないやん?
2023/05/09(火) 08:28:08.83ID:cNhnBb7C
いくらC++が速いといっても、ちゃんと書かないと速度は出ない
当たり前の事実と向き合うべき時期が来ているようだなw
2023/05/09(火) 09:22:12.89ID:E9TE6Urv
プログラミングは能力差が激しいからな
C++を使おうが遅いプログラムが出来上がってしまう人たちも多いが本人自身はなかなか気付けない
Rustだとそれが顕著に出るのでわかりやすい
入門初期は仕方ないがその後もRustを難しいとか面倒とか言ってる人たちは能力の低いプログラマーだけ
2023/05/09(火) 10:03:50.18ID:MyUREp4F
vec!とか使い捲ってると便利過ぎて
コピーされてるのか所有者移動してるのか意識してない人は遅くなりがち
2023/05/09(火) 10:17:59.79ID:DWbeMcsH
とフィボナッチイテレータより高度なプログラムが書けない人が申しております
2023/05/09(火) 10:29:01.80ID:VcsuRebp
>>279
vec!はベクタ初期化時のみに用いられるマクロにすぎずそんな問題はない
値一つ指定でN個を初期化するにはClone以外に方法はない
まあClone回避パターンもありRustは完璧だ
2023/05/09(火) 11:12:55.99ID:MyUREp4F
>vec!はベクタ初期化時のみに用いられるマクロにすぎずそんな問題はない
doubt

>値一つ指定でN個を初期化するにはClone以外に方法はない
doubt

>まあClone回避パターンもありRustは完璧だ
doubt

よくこんな短文で嘘ばかりかけるな
283デフォルトの名無しさん
垢版 |
2023/05/09(火) 11:27:29.07ID:5GLz9i7j
複オジにいちいち突っ込んでたらキリがないぞ
騙されそうな奴がいなければほっとけばいい
2023/05/09(火) 11:41:48.76ID:aPAF6NA5
オジ使いの人は否定はしても理由も正解も書かないからどっちが正しいのかいつもわからん
2023/05/09(火) 12:08:20.62ID:By46q85D
オジオジ言ってる人は間違いも多いけど偶然あってるときもあるぞ
適当に聞き流しとけ
2023/05/09(火) 12:19:41.76ID:DWbeMcsH
な、単発だろ
2023/05/09(火) 12:27:45.30ID:DWbeMcsH
プログラミング言語に使われる人になってはいけない
プログラミング言語を使える人になりなさい
2023/05/09(火) 13:50:33.38ID:TWnpopnf
>>275
ですが、LLVMの最適化層は、メモリー領域が重なっているかどうかを解析する
機能も持っていますから、noaliasを明示的に付けなくても、最適化層が
自動的にnoalias相当の属性を付けてくれる場合も有り、そうなれば、
同じ程度に最適化されます。
C 言語の register 属性を付けなくても今のコンパイラは変数を自動的にレジスタ
に割り当てるのと似たようなことです。
飽くまでも補助情報です。
2023/05/09(火) 14:18:30.40ID:qRADqwfY
>>288
残念ながら一般的な場合にはその解析が不可能
そのためC言語はrestrictキーワードの指定の有無がそのまま最適化の有無に繋がる
このnoaliasによる最適化はベクトル化にも繋がるため実効果も大きい
Rustの可変参照は常にnoaliasとなりLLVMへその情報が伝わるため有利
2023/05/09(火) 14:27:49.18ID:TWnpopnf
>>289
>残念ながら一般的な場合にはその解析が不可能
一般的には難しいとされていますが、できる場合も有り、実際 LLVM
の最適化層は、解析を「しています」。
2023/05/09(火) 14:49:54.81ID:qRADqwfY
>>290
もちろんLLVMが解析で見つけ出すケースもゼロではないだろう
実際にはC言語でrestrict指定のコードを書くか否かで最適化の有無となっている現実が多々ある
つまり各言語はnoalias情報をLLVMへ渡したほうが確実に有利だ
C++は言語仕様にないが各コンパイラの独自拡張を使えば指定可能
もちろん無闇に指定してよいわけではなく確実にnoaliasと判断できる場合でないと動作不良を引き起こす
Rustは言語仕様によりデータ競合を起こさないよう可変参照が排他的になるため確実にnoaliasがLLVMに渡る
2023/05/09(火) 15:08:56.17ID:oJhOeTc4
https://stackoverflow.com/questions/57259126/why-does-the-rust-compiler-not-optimize-code-assuming-that-two-mutable-reference

だいたいそんな感じなんだけど実際にはバグったせいで付けたり外したりしてしてます
2023/05/09(火) 15:10:24.05ID:TWnpopnf
>>291
C++でも、noalias をつけたLLVMを出力するコンパイラも有るかも知れません。
コンパイラの進化の問題です。
2023/05/09(火) 15:21:42.16ID:GHMOM/oZ
>>292
バグが見つかったのはLLVM側ね
Rustが常にnoaliasをLLVMへ指定してくるようになって
適用事例が増えてLLVMのバグが発覚できた感じ
そしてLLVM側がバグ改修中にRust側は一時的にnoaliasの指定をオフした話だね
2023/05/09(火) 16:23:47.59ID:oJhOeTc4
重要なのは犯人捜しではなく
「可変参照は常にnoaliasとなり」は嘘だということです
2023/05/09(火) 16:57:31.86ID:qRADqwfY
>>293
Cではプログラマーがrestrict指定した箇所だけコンパイラがLLVMへnoalias指定する
C++ではプログラマーがコンパイラ独自拡張__restrict指定した箇所だけLLVMへnoalias指定される
言語仕様によりC/C++コンパイラがnoaliasを自動付与することはできない
C/C++プログラマーが安全に適用できると判断した時だけ自己責任でrestrict指定することになる

Rustは言語仕様により常に安全に自動的にコンパイラがLLVMへnoalias指定する
そのためRustプログラマーは何もしなくてもnoaliasによる最適化の恩恵を受けることができる
これが根本的な違い
2023/05/09(火) 17:04:50.38ID:9RO9lVT1
コンパイラに撃墜されてるRustプログラマもいるから「何もしなくても」は言い過ぎだな
2023/05/09(火) 17:08:17.41ID:qRADqwfY
>>295
現在はLLVMがバグ対応したため常にnoalias指定となる
もちろん意図的にバグ未対応の古いバージョンのLLVMを指定したときを除く
その場合にRustコンパイラはnoaliasを指定しないという安全な動作をする
2023/05/09(火) 17:09:31.38ID:oJhOeTc4
そんでいったい何nsec早くなるんですか?ってな
些細すぎる点です
2023/05/09(火) 17:30:52.58ID:JrSVS9vw
Rustならテキトー書いても速くなる…はさすがに夢見すぎだろう (やってないので)しらんけど
2023/05/09(火) 17:33:18.67ID:d0WXtuj5
おそらくだけど最適化が利いたとしてもベンチとかでは0.01%も速度は速くならないと思うけどな
2023/05/09(火) 17:35:11.58ID:d0WXtuj5
普通にコードを書く限り一般的な速度は
c<c++<rust何だろ
でもそんなのにこだわって言語選ぶ意味はないよ
2023/05/09(火) 17:49:39.63ID:d0WXtuj5
速度じゃないわな
実行時間だ
速度だと
c > c++ > rust
2023/05/09(火) 21:13:21.70ID:jpsGavbj
>>300
Rustは適当に書いたらコンパイル通らない。
305デフォルトの名無しさん
垢版 |
2023/05/09(火) 21:36:53.43ID:Pc0KyjBY
いうて、C++でinline、constexprやらテンプレートメタとかで実行時の処理効率を上げまくったらRustじゃ敵わないと思うんだけど、、
Rustでも似たようなこと出来るんだっけ?
306デフォルトの名無しさん
垢版 |
2023/05/09(火) 21:55:51.60ID:m/PdBmgz
>>305
できるよw
2023/05/09(火) 22:07:22.50ID:GHMOM/oZ
>>305
Rustもできるよ
そもそもRustのconstはコンパイル時定数でC++のconstexprのこと
Rustの手続きマクロはRustコードの構文解析を入出力としてコンパイル時に実行生成するためC++より強力だね
308デフォルトの名無しさん
垢版 |
2023/05/09(火) 22:10:15.60ID:Pc0KyjBY
なるほどね
俺の全力のC++コードじゃRustには敵わないようだ
2023/05/09(火) 23:53:36.96ID:qRADqwfY
>>299
>>301
noalias指定で劇的に速くなる例はC言語でrestrict修飾の有無の解説ページが多数あって詳しい
restrict指定がないとnoalias最適化ができずにベクタ化されずに遅くなる例なども出ている
2023/05/10(水) 07:24:49.96ID:gVulLBUf
テキトーに書いてもコンパイルが通る言語に憧れるなあ
2023/05/10(水) 08:38:28.50ID:uLiToFDO
体感ではこうかな
c > rust > c++
2023/05/10(水) 08:59:49.54ID:yd4Msfz1
複雑なことを好き勝手に書けるのがC++だったけど、簡潔に書くことも求められるようになりそうだねえ

当初は複雑だったけど、やることが大体固まったものをrewriteするなら、
いまなら確かにrustがアツい 成果も目に見えると思う たぶんCでは力不足だしね
313デフォルトの名無しさん
垢版 |
2023/05/10(水) 10:30:02.81ID:gGgNP0IP
>>308
全力のrustコードを書けばいい
2023/05/10(水) 12:47:47.75ID:of34847N
C++相談室part161、ワッチョイ導入直前のスレ
https://mevius.5ch.net/test/read.cgi/tech/1653135809/343-381
https://mevius.5ch.net/test/read.cgi/tech/1653135809/481-650

C++相談室part162、ワッチョイ導入直後
https://mevius.5ch.net/test/read.cgi/tech/1667194175/
"Rust" の検索結果: 1件

は〜
2023/05/10(水) 12:48:26.46ID:usV3D88W
lintだけでもいいから、smart c++とか名前を付けてRustもどきの強制フォーマットを作って欲しいわ。
Rustそのものは要らん。
2023/05/10(水) 12:49:05.61ID:of34847N
Rust本スレもワッチョイ無しのほうやめちまえばいいのにな
C++相談室はすんなり移行できてて羨ましい
2023/05/10(水) 13:11:50.30ID:dsu8fQGS
>>310
それならば静的型付けではない言語を選ぼう
ここは静的型付けのC++とRustのスレだからコンパイル時に可能な限りエラーを出す言語

>>315
その方向を求めるならばRustの方が優れているからC++にこだわる必要ないんじゃないかな
生産性の高いRustを使った方がメリット享受もたくさん
2023/05/10(水) 13:15:44.86ID:uLiToFDO
crates.io にうpして docs.rs の comment cover が
中々 100% に到達しないんだが
どこの comment が足りないって簡単に教えてくれるツールは?
local で docker 使えば判るもんなの?
あと「未 comment」数を減らした(=100%に近付けた)はずなのに
逆に%下がるケースもあるみたいで良く判らん
2023/05/10(水) 14:03:23.86ID:jzBK8DOC
lintにmissing_docs
https://doc.rust-lang.org/rustdoc/lints.html#missing_docs
があるけどデフォルトでallowになってるらしい

lib.rs(main.rs)に
#![warn(missing_docs)]
を足すかコマンドで↓を実行
cargo rustc -- -W missing-docs
320デフォルトの名無しさん
垢版 |
2023/05/10(水) 14:21:07.26ID:HatbRJDw
>>316
注意喚起テンプレとこの隔離スレが効いてるから本スレも平和
2023/05/10(水) 16:48:54.33ID:uLiToFDO
>>319
dクス
しかし足りない数(あと5ヶ所のはず)よりはるかに多い warning が出て来たでござる
2023/05/10(水) 17:11:01.06ID:uLiToFDO
>>319
5ヶ所治して残りの warning 放置で 100% 達成出来ました!
ほんとうにありがとうございました!!!
2023/05/10(水) 17:13:13.74ID:dsu8fQGS
コメントカバー率の計算対象は限定されてるよ
https://doc.rust-lang.org/rustdoc/unstable-features.html#--show-coverage-calculate-the-percentage-of-items-with-documentation
2023/05/11(木) 03:47:03.48ID:1mbxr1bo
C++だとdoxygenなど使うところが
Rustだと公式サポートされて色々と進んでいるのね
2023/05/11(木) 08:01:31.45ID:UvaUTinw
https://twitter.com/markrussinovich/status/1656416376125538304

If you're on the Win11 Insider ring, you're getting the first taste of Rust in the Windows kernel!
https://pbs.twimg.com/media/FvzF4ZraQAUumaq.png
https://twitter.com/5chan_nel (5ch newer account)
2023/05/11(木) 11:43:59.84ID:Ue/TF0sJ
win32kbase_rs.sys
win32kfull_rs.sys
って何?
ついでに名前が似た以下のファイルも
win32kbase.sys
win32kfull.sys
327デフォルトの名無しさん
垢版 |
2023/05/11(木) 12:35:35.38ID:hMF5bhvG
ttps://japan.zdnet.com/article/35198420/
328デフォルトの名無しさん
垢版 |
2023/05/11(木) 12:57:22.38ID:h0Ssdxno
>>327
C++は何故か年々人気が上がってるね
2023/05/11(木) 13:16:26.32ID:a3sWIGIB
C++0xの暗黒時代を知らない世代が増えたんだろう
2023/05/11(木) 14:21:03.16ID:kyUN9mFL
>>317
上澄みだけ使うならライブラリも豊富だし悪くない。

本来なら、c++標準化団体がAccelerated C++みたいなのを用意してメンテナンスすべきだと思うけどなぁ。
2023/05/11(木) 14:44:20.03ID:Ue/TF0sJ
いらね
2023/05/11(木) 15:04:29.85ID:OsVl9AaP
デザパタ流行した時ほにゃららパターンのほとんどが理解できなかったけどそのうち理解しなくても何の問題もない事が判った
うんこうんこうんこー
333デフォルトの名無しさん
垢版 |
2023/05/11(木) 15:26:04.23ID:IKYAIOBH
>>332
実務で今使ってるのは、state, proxy, singleton, factoryくらいかな。
あとは使ってないね。
2023/05/11(木) 16:10:38.63ID:o+lB6Dgi
近年の C + 人気は上の画像でも見ただろ
競技プログラミングだよ
2023/05/11(木) 16:14:51.13ID:a3sWIGIB
GoFのパターンはiteratorとかadapterも含めてるから多分無意識で使ってるよ
昔のforループはi++で回すのが普通だったし
JavaにIterator(foreach構文)が追加されたのが1.5くらいのはず
2023/05/11(木) 18:30:22.74ID:mNkrg+hY
懐かしの 何とかの呼吸 ○の型 ほにゃらら!が沢山あるけど
使わないときは使わないと言うだけです
2023/05/11(木) 18:41:36.44ID:mNkrg+hY
Rustの呼吸 一の型 mut代入!
Rustの呼吸 二の型 シャドーイング!
2023/05/11(木) 18:56:15.63ID:gsH464oC
それ現行コンテンツちゃうの? (初クール初回から録画だけして観てない
339デフォルトの名無しさん
垢版 |
2023/05/11(木) 19:34:36.36ID:KOkRWEaK
C++コアガイドラインに従い、IDE組み込みのチェッカーを使う
これが一般的なスタイル
これだけであなたの悩みはすべて解決する
340デフォルトの名無しさん
垢版 |
2023/05/11(木) 19:37:24.28ID:KOkRWEaK
CCG!CCG!
2023/05/12(金) 14:15:57.41ID:qPE7RwmZ
終戦のお知らせ

Rust言語で開発されたカーネルがプレビュー版「Windows 11」に - やじうまの杜 - 窓の杜
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1500062.html
2023/05/12(金) 14:19:03.50ID:jNwvrlvi
解散
2023/05/12(金) 14:25:26.74ID:uf2dKGIg
カーネルのどのへんで使われてるんだろう
Linuxみたいに周辺部分からかな
2023/05/12(金) 14:32:56.45ID:yiIZVwAo
>>341
Rustの成果をC/C++に還流させるフェーズ どんどんやってくれ
2023/05/12(金) 14:44:13.86ID:GoY4o9UG
Microsoft Azure security evolution: Embrace secure multitenancy, Confidential Compute, and Rust
https://azure.microsoft.com/en-us/blog/microsoft-azure-security-evolution-embrace-secure-multitenancy-confidential-compute-and-rust/

Rust as the path forward over C/C++

Decades of vulnerabilities have proven how difficult it is to prevent memory-corrupting bugs when using C/C++. While garbage-collected languages like C# or Java have proven more resilient to these issues, there are scenarios where they cannot be used. For such cases, we’re betting on Rust as the alternative to C/C++. Rust is a modern language designed to compete with the performance C/C++, but with memory safety and thread safety guarantees built into the language. While we are not able to rewrite everything in Rust overnight, we’ve already adopted Rust in some of the most critical components of Azure’s infrastructure. We expect our adoption of Rust to expand substantially over time.
2023/05/12(金) 14:45:57.07ID:QUxSeMfx
マイクロソフト、Rust言語による開発を含む初めてのWindowsカーネルをInsiderプログラム参加者向けに提供開始
https://www.publickey1.jp/blog/23/_rustwindowsinsider.html

デバドラからか
347デフォルトの名無しさん
垢版 |
2023/05/12(金) 15:41:33.52ID:66ak38wv
これを見ると、言語の移り変わり時期が来ると
一気に使われなくなって廃れていくんやな、、
https://m.youtube.com/watch?v=qQXXI5QFUfw
2023/05/12(金) 16:02:52.10ID:TaYVXf5t
むかしもこんな感じでJ++に騙されたんだよ
2023/05/12(金) 16:05:02.84ID:vtQb4m8q
コンパイラは何使っているんだろうね?
MSがllvmなんかつかうのかな?
2023/05/12(金) 16:11:29.41ID:GsK+e8JY
Visual Rust++登場も近いな
2023/05/12(金) 16:19:18.80ID:MfrxynDP
新しいGC言語がどれだけ出て来ても
C++の天下は揺らがない
もしC++が転落するときが来るとすれば
C++の欠点を解決しつつ同等の性能を出せる新たな非GC言語が登場した時だけだ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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