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

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

っていう雑談スレ。

・C/C++ <=> Rust いまさら聞けない移行質問なども適当にどぞ
・レスバはじめんのは勝手だけど、面白いこと・へぇなこと書いたヤツが優勝
・マな話は、マのスレもご活用ください↓

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

関連スレ(マ板): Google&Microsoft「セキュリティバグの70%はC/C++のメモリ管理ミス。Rustにする」
https://medaka.5ch.net/test/read.cgi/prog/1619943288/
2023/11/23(木) 21:58:33.69ID:hsLNP7GU
ディープコピーを知らずに盛大に恥を晒した某オジがコピーについて語るとか世も末だなw
2023/11/23(木) 22:09:33.63ID:t7xzkVTj
テンプレートはコンテナを矛盾なく書くのがめちゃくちゃ難しいのよ
まず要素の型が実体とポインタ両方に対してうまく動くようにするのは至難の業
例のコピー可能オブジェクトの話とも絡んできて「無理」となる
この辺Rustはよくできてる
イテレータが可変参照なのか共有参照なのか、実体なのかによってきちんと分けられている
C++で困った部分を完全に解決してくれてる
Rust素晴らしい
653デフォルトの名無しさん
垢版 |
2023/11/23(木) 22:28:06.68ID:0De2U7us
>>652
>テンプレートはコンテナを矛盾なく書くのがめちゃくちゃ難しいのよ
>まず要素の型が実体とポインタ両方に対してうまく動くようにするのは至難の業
STLで何か問題でも?
2023/11/23(木) 23:13:27.00ID:FMewW6Qw
そりゃSTLで満足してる間はそれでいいだろ
アロケーターを指定したことないだろ?
2023/11/23(木) 23:28:00.45ID:M3SMKrV5
むかしはSTLがない環境も多かったからね
windows環境ではクソ遅かったせいか
完全にないものと扱う奴さえいた
656デフォルトの名無しさん
垢版 |
2023/11/23(木) 23:30:28.39ID:0De2U7us
>>654,655
じゃ今のSTLは問題ないで良いのかな?
2023/11/23(木) 23:37:07.63ID:u/H26W0M
>>652
そこに加えてRustはスタック領域も扱えるからさらにヒープ使用を減らせるところ
2023/11/23(木) 23:37:56.70ID:09UkZirn
問題ないと問われればあるだろうね
ただよく訓練されたC++使いは気に入らないと文句を垂れても仕方ない事もよく理解してるから
その環境で可能な別の手段を用いるだけだよ
659デフォルトの名無しさん
垢版 |
2023/11/23(木) 23:39:53.17ID:0De2U7us
>>658
曖昧なことしか書かんのだな
問題あるならどのような問題かを短いサンプルコードで具体化してよ
2023/11/23(木) 23:48:05.78ID:09UkZirn
どのような問題かなんて別の手段で解決した後に覚えてるわけないじゃん
何でも欲しがりさんには判らないか
661デフォルトの名無しさん
垢版 |
2023/11/23(木) 23:58:49.29ID:0De2U7us
>>660
示せないなら問題あるなんて言ってはいかんだろうよ?
2023/11/24(金) 00:21:55.00ID:oZLKiYTi
C++はSTLを一応擁しているけど、各プロジェクトで、もうちょっと軽量で自分とこ向きのコンテナ持ってるとこが多い
異論は認める
2023/11/24(金) 00:29:35.14ID:qKRvRsRu
>>662
でその自作コンテナを矛盾なく書くのがめちゃくちゃ難しいとな?
今のSTLは問題ないで良い?
2023/11/24(金) 00:31:58.77ID:oZLKiYTi
俺はSTLが重厚すぎて自分の手に負えないと思ってるので、なんとも。
STLにもバリエーションがあるのは承知していて、あんまり幅広く試せてないってのも。
ただし、依存(include)してるプロジェクトは当然あるし、試作には便利なので、ないのは困る。
2023/11/24(金) 07:39:29.33ID:eRQLkcC1
>>652
要素の型が実体とポインタ両方に対してうまく動くようにする

それはポインタを部分特殊化しろ、ということでは?
2023/11/24(金) 08:38:00.98ID:4SGglGUV
>>663
同意を求めるなよw
お前の用途ではSTLで十分ってだけ
そうじゃない場合もある
STLで足りるならboostもEASTLも存在してない
667デフォルトの名無しさん
垢版 |
2023/11/24(金) 11:26:41.73ID:qKRvRsRu
>>666
>>652
>テンプレートはコンテナを矛盾なく書くのがめちゃくちゃ難しいのよ
>まず要素の型が実体とポインタ両方に対してうまく動くようにするのは至難の業
これがいったい何のことを言っているのか分からんので
STLで問題を指摘させれば共通の題材として議論できるからSLT取り上げた
2023/11/24(金) 11:31:35.71ID:UKwUTpr8
継承を使いこなせない者同士仲良くしろよなw
2023/11/24(金) 14:20:00.82ID:v63PRHPl
嫌儲にまでスレ立てることないだろw
2023/11/24(金) 14:23:40.25ID:9RAaBgN9
全然伸びてなくて草
こんな過疎スレで敗走したからって嫌儲民おらに力を分けてくれーーってやろうとしたけど
そこでも無視されてる
情けない奴だ
だからゴミクズなんだよ
2023/11/24(金) 14:29:03.78ID:rK2EDUzF
Why I think C++ is still a desirable coding platform compared to Rust
https://lucisqr.substack.com/p/why-i-think-c-is-still-a-very-attractive
2023/11/24(金) 14:36:54.58ID:eHJQmp62
>>671
そもそも前半の話いる?w
的外れ過ぎて意味のない指摘だよ
2023/11/24(金) 16:11:19.50ID:UVQLfV0S
>>671
これは酷いw
2023/11/24(金) 16:25:00.95ID:tvJVQF3W
いくらめんどくさくても安全のお守りがほしいんすわ
C++製システムがクラッシュしてうなだれたあの日の鬱憤が安全を求めるんすわ
675デフォルトの名無しさん
垢版 |
2023/11/24(金) 16:34:40.23ID:6OrpRj0R
>>671
何故この手のやからって、
自分は今まで大丈夫だったから他の人(今度の新卒社員とか)も大丈夫に違いないと思えるんだろうか。
いつも一人で仕事してるのかな。
2023/11/24(金) 16:45:30.90ID:Oe/LAESW
>>671
その人はRustを知らなすぎるな
C++はインラインアセンブリがある云々もRustにもあるし
算術ラッピング演算の件もRustはラッピングの有無両方が用意されてるのを知らずに書いていたり
2023/11/24(金) 16:52:45.75ID:KbRqc6TK
フルボッコで草
2023/11/24(金) 16:55:26.04ID:rK2EDUzF
めっちゃ感想来てるw

俺は読まずに貼った、おもしろそうだったから
[Roast Me] って付いてたので、異論は認める系の日記かなって思ってた
仕事終わったら俺も読む 気にしないから感想はご自由に
679デフォルトの名無しさん
垢版 |
2023/11/24(金) 19:51:30.59ID:FR/8T+5m
>>674
わかる。他人の書いたC++ライブラリがめっちゃメモリリークする時とかそう思うわ
2023/11/24(金) 19:53:16.58ID:Pf2BWo+V
元記事に英語でコメント付けに行くことはしい内弁慶たちであった
2023/11/24(金) 20:53:52.01ID:HwIqF0Eo
>>652
要約: バカには無理
2023/11/24(金) 22:58:47.93ID:cJ52o0CU
使うなと言ってもバカはクラス継承をどうしても使いたがって質を下げるため
モダンなプログラミング言語は一斉にクラスごと言語から排除した
2023/11/24(金) 23:09:27.03ID:UpLQZeUm
そうそうバカはclassやextendを無くせば実装継承が無くなったと勘違いするからバカに気づかれないようにカモフラージュして実装してバカが無節操に使わないようにしてるんだよなぁ
684デフォルトの名無しさん
垢版 |
2023/11/24(金) 23:40:23.66ID:qKRvRsRu
そうしてマイナー言語マニアの思い出の一つとして
長く記憶に留まる言語となるであろう
2023/11/25(土) 00:57:31.51ID:xDUppX6s
>>683
実装継承の定義教えてくれ
686デフォルトの名無しさん
垢版 |
2023/11/25(土) 09:02:19.65ID:rKTwm3uz
>他人の書いたC++ライブラリがめっちゃメモリリークする

某OSのAPIのことですね判ります
2023/11/25(土) 09:47:04.81ID:9BsUE7B+
>>685
サブタイピング時に
上位の型が持つ実装コードの一部が
下位の型と共有されること
2023/11/25(土) 21:29:31.59ID:1Ohowu9E
嘘オジと複オジは撃沈されたようだな
2023/11/26(日) 15:19:59.23ID:06WEnIxy
OSにバグがあって後処理をしてもOSがリソースを掴みっぱなしになるといった経験はないだろうか。
そういった場合そのリソースを使う箇所だけ子プロセスとして隔離し、使い終わったらそのプロセスを終了する事でリソースを完全に開放させることが可能だ。
このプロセスの隔離はかなり万能な解決方法で、納期が短くて怪しいと思っても修正が困難なケースにも応用可能だ。
まあ要するにリークを疑われる場合一旦別プロセスにすれば必ず開放されるからリークは必ずしも怖くないよって話。
2023/11/26(日) 15:30:13.25ID:qv9H5y0z
と、御社の現お取引先ホームページにありますね。
弊社はRust採用実績十分、リークは原則としてありません
2023/11/26(日) 16:02:44.80ID:GTIMQwMH
>>687
いい定義だな
2023/11/26(日) 16:21:23.35ID:8OjiBh4l
Rustはモダンな言語の一つなので
その定義でもRustは実装継承を持たずきちんと排除している
693デフォルトの名無しさん
垢版 |
2023/11/26(日) 18:06:50.18ID:6qvbnksS
結局、c++が最狂ってことでいいな?
694デフォルトの名無しさん
垢版 |
2023/11/26(日) 18:08:00.70ID:Dq1p+inG
>>618
c++が最凶最悪
2023/11/26(日) 18:37:35.88ID:4YJKEDWv
>>689
OSのバグならアプリのプロセスを落としたところでリソースが解放されるとは限らない
プロセス落とすのはどちらかと言うとアプリのバグに対処するため
696デフォルトの名無しさん
垢版 |
2023/11/26(日) 18:49:55.09ID:o8qwwCxG
>一旦別プロセスにすれば必ず開放される

doubt
2023/11/26(日) 19:14:33.38ID:6NRjjzPt
すくなくともWindowsは長期間起動し続けると空きメモリが減っていく
OSが意図的に開放せずにキャッシュしてるのかリークなのかは分からないが
2023/11/26(日) 19:39:37.59ID:AfiVlC9p
>>689
それ本当にOSのバグ?w
2023/11/26(日) 19:41:06.05ID:Lbe7PiAw
>>689
子プロレス切り離しが大仕事だろ
そこで別のバグが大量に入り込む
全然簡単な話じゃない
お前言うだけでやったことないだろ
2023/11/26(日) 19:44:09.20ID:EBR4w0d/
>>689
きっしょ
2023/11/26(日) 22:37:51.44ID:06WEnIxy
俺が遭遇したのは2件で、どちらもOSの不具合という結論だよ
MSのナレッジに残ってるかもしれないがどっちもプロセスを終了するしか解決策が示されなかった
>>699
こういう理不尽に遭遇して回避策が示されたなら大仕事でもやらざるを得ないと思うけどね
別に難しいって程でもないし
2023/11/26(日) 22:48:32.77ID:06WEnIxy
そういや別件でOSが設定しているタイムアウト値を待てない場合も別プロセスにして回避した事がある
この板って年寄りばかりだろうしWindowsのプログラミング長年やってれば何度かそういう事に遭遇するんじゃないの
2023/11/26(日) 23:01:37.86ID:iMOX0Yuj
あのね、年寄りが真面目に答えてやるとOSの観点から言うと
windowsとLinuxじゃプロセスの考え方が結構違ってて
Linuxの場合、バックグラウンドプロセスっていうのは普通に使われまくってるの
いわゆるプロセスのクローンだから扱いが楽
シェルから作れるし

一方windowsではexeなんでクソ重い上に扱いが面倒
データ共有やプロセス間通信も一苦労だ
だからwindowsではLinuxっぽいバックグラウンド処理はスレッドを使う
windowsにおいてスレッドの方が軽い

一方Linuxではスレッドもプロセスも本質的に同じ
(カーネルの構造体thread_structはプロセス生成の時も使う)

よってプログラミングモデルがだいぶ違うため
どうすべきか?はかなり違う

以上がwindowsでもLinuxでも並行処理を書いてきた俺の感想
2023/11/26(日) 23:12:09.99ID:dlQxZ4PC
Windowsはプロセスもスレッドも、互換性チェックみたいのが重厚らしく超高コスト
さらに、セキュリティソフトが走ってるのが当たり前の世界なので、ファイルハンドルも高コスト
なんでもWSL2でやったほうが軽い? らしい

てことで、コルーチンはいいぞw
2023/11/26(日) 23:30:18.11ID:EFSUb3PR
Rustの東京を使えばデフォルトでCPUのコアスレッド数をフル活用してコルーチンを何万も同時に動かせますものね
2023/11/27(月) 00:37:45.36ID:ggQuSpTQ
Elixir は、10万もの小プロセスを起動できる

Go の並行処理も、mattn の本に書いてあるけど、
C で、100スレッドを起動したら、
CPU 使用率が高く、12秒も掛かったが、

Goで100 goroutine を起動したら、
6スレッドしか起動せず、9秒で済んだ

Goの方が、CPUコアを効率的に使える
707706
垢版 |
2023/11/27(月) 00:48:36.74ID:ggQuSpTQ
とにかく、スレッドを起動したらダメ!

CPU コアや時間の大半が、起動処理に使われるから
2023/11/27(月) 00:59:58.17ID:zZXu+dmb
とはいえコルーチンって使い所が難しいのよ
流行りそうで流行らないのがその理由
結局「本当の並列性が必要ないようなすぐ終わる処理を大量にする」ユースケースにしか使えないから

こういう処理ってあまりないことに気がつく
まず真の並列性が必要となる数値計算では使えない
処理の中でブロックするとダメなのでその判断も難しい

よって普通の言語では使うのが難しい
2023/11/27(月) 01:36:12.87ID:O2rw1r7K
>>706
使いたければc/c++にはむっかしからコルーチンにファイバーがあるから
native言語なんだからosの資源使う上で不利になるはずない
2023/11/27(月) 01:38:37.07ID:AHLzaHDv
>>706
>Goの方が、CPUコアを効率的に使える

そう主張したかったら根拠を示さないとね
例えば逆の根拠として
Go各のgoroutineは別々の各々のスタック領域を必要とするけど
Rustはスタックレスなコルーチンだから必要とせずその分だけ効率的だね
2023/11/27(月) 01:45:48.38ID:zZXu+dmb
>>707
普通はスレッドプール使うやろ
2023/11/27(月) 06:31:05.54ID:klBkI3Ol
おれの作成したソフトは起動時に64個のスレッドを立ち上げているが常にサクサクだ
713デフォルトの名無しさん
垢版 |
2023/11/27(月) 07:50:36.80ID:h6EdzCL7
>>712
言語は何?
2023/11/27(月) 07:54:36.67ID:klBkI3Ol
cppは光速
715デフォルトの名無しさん
垢版 |
2023/11/27(月) 09:19:45.20ID:7/k6/GSg
>>701
それどころかプロセスを完全に終了させても解放されないリソースが残ることがある
OSを再起動してやっと治る
こんなもんOSのバグとしか言いようがない
716デフォルトの名無しさん
垢版 |
2023/11/27(月) 09:21:22.84ID:7/k6/GSg
>>702
あるね
>>699 こそやったこと無い香具師だと感じる
717デフォルトの名無しさん
垢版 |
2023/11/27(月) 09:24:14.02ID:7/k6/GSg
>>703
Windowsにforkがあれば良かったと思うことは何度かある
718デフォルトの名無しさん
垢版 |
2023/11/27(月) 09:26:12.71ID:7/k6/GSg
ああでも
>>703
>一方windowsではexeなんでクソ重い上に扱いが面倒
>データ共有やプロセス間通信も一苦労だ
>だからwindowsではLinuxっぽいバックグラウンド処理はスレッドを使う

ここは完全に間違ってるよ
719デフォルトの名無しさん
垢版 |
2023/11/27(月) 09:30:39.99ID:7/k6/GSg
>>706
>C で、100スレッドを起動したら、
>CPU 使用率が高く、12秒も掛かったが、
>
>Goで100 goroutine を起動したら、
>6スレッドしか起動せず、9秒で済んだ

可笑しな理屈だな
スレッド数で比較するならgoでも100スレッド使って比較するか
Cの方でスレッド数増やさないCで描いたコルーチンで比較するべきだろ
2023/11/27(月) 10:19:10.91ID:bfNyVWtl
プロセスを分けて独立したメモリ空間の単位で障害を切り離して耐障害性を高めるのは昔からよく使われる方法だけどこれはスレッドやコルーチンでは代用できない

並行性を高める目的ならコルーチン+スレッドプールが最も効率が良い
C++やRustはまだまだ使いにくいけどGoやC#やSwiftのように使いやすいAPIが用意されれば誰もが当たり前のように使うようになる
2023/11/27(月) 13:17:02.15ID:y1vsdTcE
>>717
ある程度時間がかかる処理を並行で動かすという面でこれほど楽で使いやすいものはないしね
windowsへの移植性を上げるためにはforkを捨てなきゃならんのはかなり厳しい
2023/11/27(月) 13:22:19.90ID:y1vsdTcE
windowsくんェ
https://draftcode.github.io/2011/12/29/145918.html
2023/11/27(月) 13:27:11.60ID:UqO8a829
fork移植されてると思うけどそういう話ではなく?
2023/11/27(月) 13:40:29.77ID:y1vsdTcE
>>723
pythonじゃ使えないぞ
2023/11/27(月) 14:04:14.09ID:l+s92lQ4
遅くともcygwinとかで、なんちゃってforkは実装されてるけど、コレジャナイ感は付きまとうんだよな(個人の感想です
2023/11/27(月) 14:10:54.29ID:O2rw1r7K
execなしのforkなんて時代錯誤もいいところ
いまだに使ってるやついんのか?
さっさと引退するのが世のために
2023/11/27(月) 14:17:35.21ID:zZXu+dmb
RubyもNotImplementedError
Perlはエミュレーションしてるがすでに非推奨レベル
2023/11/27(月) 14:21:41.56ID:+D1aTXqp
こんどはforkを取り囲んでフェルマータするターンか
2023/11/27(月) 15:12:24.83ID:qB4qrVrI
forkは同じページを(書き換えるまで)共有できるのが売りだと思うけどwin版は最初からコピーするのか
そんな実装でfork爆弾作れるの?
2023/11/27(月) 15:12:35.28ID:l+s92lQ4
ま、雑談だからな おもしろければどうでもおっけー
2023/11/27(月) 15:37:56.10ID:+D1aTXqp
オジジジジジw

https://medaka.5ch.net/test/read.cgi/prog/1619943288/667
667: 仕様書無しさん 2023/11/24(金) 01:57:39.09
>>665
C++のスマポは機能が弱すぎてできないことが多すぎる
例えばヒープ領域しか指せないから
(L1キャッシュ効果と領域確保解放コスト無しで高速な)スタック領域の活用がスマポではできない
732デフォルトの名無しさん
垢版 |
2023/11/27(月) 15:50:29.33ID:UqO8a829
スタック領域をスマートポインタで指す必要はあるの?
2023/11/27(月) 15:57:04.75ID:l+s92lQ4
先々で、うっかりfreeするような書き方してしまったときにコンパイルエラーで止まってほしい
実体としては生ポだけど、チェック用の何かにラップされてる…そういうスマポ
2023/11/27(月) 17:16:07.46ID:FscsMJtl
いつものように誰かが書いてた受け売りで中身は理解してないんだろ
少し突っ込まれたら表面的なことを繰り返す壊れたレコードになる
2023/11/27(月) 17:19:29.35ID:ZLucLoet
www.microsoft.com/en-us/research/uploads/prod/2019/04/fork-hotos19.pdf
736デフォルトの名無しさん
垢版 |
2023/11/27(月) 19:00:17.85ID:UqO8a829
>>733
実装すれば良いのでは?
2023/11/27(月) 19:12:23.49ID:MloD+hDC
>>731
スタック領域は勝手に解放されますが
2023/11/27(月) 19:23:48.42ID:VTBvXWTh
Rustはヒープ領域だけでなくスタック領域にまで所有権やムーブや参照の概念を拡張したことから
C++よりスタック領域の活用で効率的になってる話ではないか
2023/11/27(月) 19:41:50.12ID:4LX/kS4x
>>738
コードで示してよ
C++の
2023/11/27(月) 19:55:41.13ID:XLFtaca7
>>738
単に「何でもスタックに積む」というだけでは?
ヒープはVec Box使わないと確保できないんじゃなかったっけ。
741デフォルトの名無しさん
垢版 |
2023/11/27(月) 19:57:13.46ID:ceTrdy2T
C++は書くのがしんどい
Rustもしんどいけど、生成AIに書かせたコードもコンパイルとテスト通ればメモリリークの心配なく使えるので気持ちは楽
2023/11/28(火) 03:07:58.34ID:iuwbNdCf
Boxってヒープのメモリどうやって管理してんの?スコープ?
743デフォルトの名無しさん
垢版 |
2023/11/28(火) 06:19:45.83ID:fb4KLmhh
>>734
ほんそれ
同じ香具師なんだろうバレバレ
2023/11/28(火) 07:21:41.08ID:p7m/jx+j
>>742
unique ptrみたいな感じじゃない?
2023/11/28(火) 07:38:03.63ID:OE19BKGq
>>736
自分なりには考えてみてるんだけどね

ベーシックな車輪くらい、削り出せなきゃいけない
ダサいので試してるってのは他言はしないけどね ここくらいだ
2023/11/28(火) 08:32:49.65ID:t7+ip2Xg
>>738
また嘘言ってる
Rustはヒープ領域だけでなくスタック領域にまで所有権やムーブや参照の概念を拡張したことから
C++よりスタック領域の活用で非効率的になってる

>>741
お前は死んだ方が良い
2023/11/28(火) 08:34:53.09ID:4GFkN+H+
スタック使うってカーネルで使えるん?
2023/11/28(火) 09:04:02.54ID:uB2ZO1/C
Rustの所有権チェックって、(コンパイル時にコストを寄せてるから)実行時はゼロコストじゃないん

へたくそに書いたら効率が下がる(たいてい実装効率が上がった犠牲)のは、C/C++も同じ
2023/11/28(火) 10:10:56.04ID:pC50QOa+
技術的選択というのは最終的には必ずトレードオフになるので
ある選択のプラス面だけしか見ない/考えない/認識できないやつは何やらせてもダメ
750デフォルトの名無しさん
垢版 |
2023/11/28(火) 12:14:38.37ID:0HFLSmnD
新人やお前らの前任の調子いいだけの奴がコンパイル通したコードで、rustとc++のどっちが安心できるかってことよ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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