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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2023/02/25(土) 09:49:46.74ID:VRyB88xR
C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな?
2023/03/16(木) 20:07:00.05ID:srO8KDRm
>>357
多人数でやるプロジェクトにはC++は自由過ぎて
その点は書き方にある程度拘束される意義はあると思う
363デフォルトの名無しさん
垢版 |
2023/03/16(木) 23:56:33.56ID:ufHOK4fg
>>320
ありがと
意外と変わらないんだ
364デフォルトの名無しさん
垢版 |
2023/03/17(金) 00:02:12.50ID:aeVIJ/KU
Rustでゲームエンジンやグラフィックソフト作れたら認めてやるよ
365デフォルトの名無しさん
垢版 |
2023/03/17(金) 00:04:03.80ID:aeVIJ/KU
DTMに使いそうなDAWソフトとかでもいいぞ
書き方はGitHubにいろんなOSSの見本があるから簡単でしょ?
366デフォルトの名無しさん
垢版 |
2023/03/17(金) 00:04:27.28ID:aeVIJ/KU
Rust使いこなせるくらいなら余裕のはず
2023/03/17(金) 00:14:30.94ID:o5CBT2m0
SDLのRustバインディングはあるけども
Rustで本体を書いて他の言語のバインディングって出来るの?
他の言語との乖離でRustならではの部分が封じられて
あんまり嬉しくないような気もするのだが?
それともRustでライブラリ書いたらターゲットはRustだけになるのかな?
2023/03/17(金) 00:14:49.50ID:6s2Kuhdf
>>356
>Rustが美しく書きやすく読みやすいのはそれらの多くが最初から解決されているからだと感じる
俺とは感覚が違う。Rustを美しく感じない。
2023/03/17(金) 00:21:48.75ID:6s2Kuhdf
これは理解できるし、はっきりそう書けばよい:
・Rustの本を書きました。Rustは良い言語なので本を買ってください。
・Rust用のライブラリを書きました。Rustは良い言語なのでライブラリを買ってください。
これは理解できないし、問題:
・C++は害悪なのでRustをみんなが使って世の中を良くしよう。
・自分がC++を使いこなせないのに、使いこなせる人が許せないから、使いこなせるRustを普及させたい。
2023/03/17(金) 00:39:18.46ID:2hBAQcCo
RustはC++なんかよりずっと簡単! <- これならわかる
2023/03/17(金) 00:51:57.03ID:6s2Kuhdf
>>370
それも意見が分かれそうだ。
2023/03/17(金) 00:54:59.09ID:UJajhYy7
>>367
出力をcdylibにすれば一般的なCソースのライブラリと同じ形式(soとかdll)で出力されるはず
当然FFI絡みの制約は出てくるしextern指定とかも必要だけど境界部分だけ気を付ければ内部は自由にRustできる

wgpuはRustで書かれたグラフィックライブラリだけどその機能をC/C++から呼ぶためのwrapperでwgpu-nativeがあって
さらにそのC用のwrapper経由で別言語(Pythonとか)のwrapperが作られてたりする
依存関係がややこしいけど
wgpu (Rust製、Rust用Lib出力) ← wgpu-native (Rust製、C用Lib出力) ← wgpu-py (C+Python製、Python用ライブラリ)
みたいな構造
2023/03/17(金) 01:04:51.03ID:o5CBT2m0
>>372
なるほどー
2023/03/17(金) 05:58:07.48ID:HbMAHHRq
>>359
Rustならマルチスレッドでもマルチタスク(=グリーンスレッド)でも書きやすく
さらにデータ競合を完全に防げるRustしか現状の言語では選択肢ないと思うよ
各言語で書き比べてみれば一目瞭然
そのため並行並列を使うプログラムはC++→RustだけでなくJava→Rustの移行も進んでる
375デフォルトの名無しさん
垢版 |
2023/03/17(金) 10:42:47.45ID:o5CBT2m0
>>374
>>そのため並行並列を使うプログラムはC++→RustだけでなくJava→Rustの移行も進んでる
全く進んでいないのだが?w
俺の周りではC++やJavaでマルチスレッドで書く奴の方が多い
というかそもそもRustを使っている奴は一人もいないw
妄想なのか詐欺師なのか...
Linuxでも さもRustの導入が進んでるように言うが実際は>>39だし...
2023/03/17(金) 10:55:37.94ID:FKqwIQQI
マルチスレッドはまあ普通だけどマルチタスクはめちゃくちゃ書きにくいぞ
単純なWeb Serverくらいならいいがちょっと凝った処理を書こうとするとくっそ面倒くさい
tokio依存なのもダメなところ
2023/03/17(金) 11:06:44.98ID:tBmmskox
そここそ、OSがRust化するっていうんだから、きれいなAPIが出てきてほしいね
結局、効率を求めたらC API に肉薄することになるし
2023/03/17(金) 11:15:24.56ID:TZnQdWAf
Linuxの現状はRustでドライバが書けるようになったってだけだよ
誤解なきよう
2023/03/17(金) 11:17:48.64ID:RPqYd1dp
>>376
マルチタスク(並行)で綺麗に書ける言語はRustとGoだけだな
GoはPromise(Future)使わないあのスタイルに寄せられるのとGC言語であるため
Rustが汎用では筆頭言語になる
2023/03/17(金) 11:33:47.61ID:Igk62yzo
>>376
だよな
Rustの非同期が簡単だと勘違いしてるやつはチュートリアルレベルしかやったことないやつだと思うわ
2023/03/17(金) 11:43:37.53ID:RPqYd1dp
>>380
自分でpollしたりするのも含めて色んなレベルで書いているが簡単だぞ
Rustで並行並列が難しいと言うならばとこが難しいのかを具体的に述べよ
そしてそのケースでRustの代わりに使える別言語があるならば述べよ
2023/03/17(金) 11:51:53.17ID:UWSndCzi
Goと比較したら性能面でも劣ることが多くて同程度の性能を実現したければ手動であれこれやらないといけないからな
2023/03/17(金) 12:19:57.65ID:CZQwnfV3
>>381
そうやって自分が分かってない事を無料で聞き出してしまおうとする。ずる賢い。
2023/03/17(金) 12:31:22.55ID:RPqYd1dp
>>382
Goが速い遅いと言ってたのは昔の話
今はGoもRust tokioも改善してほぼ同じwork stealing方式になり似たりよったりの速度
C++をあきらめてRustに対抗できるGoを持ち出すしかないほど追い込まれてるのかね

>>383
Rustで並行並列が他の言語より難しいことはない
難しいと主張するならば何が難しいのかを述べたまえ
もし本当に具体的に困ったことがあるならばアドバイスできる
2023/03/17(金) 12:38:18.49ID:YQ2F/Sw2
追い込まれてるってなんだろうね
楽しそうだね
2023/03/17(金) 12:39:30.67ID:o5CBT2m0
この人は妄想癖がある
2023/03/17(金) 12:56:40.90ID:LTrpjv8n
>>384
>Rustで並行並列が他の言語より難しいことはない
>難しいと主張するならば何が難しいのかを述べたまえ
>もし本当に具体的に困ったことがあるならばアドバイスできる
問題意識があること、気付くこと、それが大事。
あなたにはそれがない。
2023/03/17(金) 13:03:24.97ID:Gi38nai6
>>383
わかり味
こいついつも教えて君だよなぁ

総論しか書けないところみると
マニュアルだけ読み込んだペーパープログラマーがそれを隠すためのネタを欲してるようにしか見えない
2023/03/17(金) 13:03:47.55ID:T8dNhcTz
Goはgoroutine間のデータ競合の発見を実行時のランタイムでやるしかなく
Goはあまりお勧めできないなあ
メモリ共有せずチャネルを使う範囲ならGoでもいいけど
Rustでもチャネルはもちろん使えるし
共有メモリで安全にデータ競合を起こさず使えるからRustがいいよ
2023/03/17(金) 14:28:10.79ID:ZRpBqjDt
ほんと嘘ばっかりだな
2023/03/17(金) 15:04:18.42ID:RPqYd1dp
>>389
Goに限らずデータ競合を実行時にしか検出できない言語ではデータ競合が時々しか起きない場合のデバッグが難しい
Rustを使うべき理由はデータ競合を静的に検出できる点にある
2023/03/17(金) 15:55:42.60ID:LTrpjv8n
>>391
それはマルチスレッドプログラミングのアルゴリズムをRustは強く制限しているから。
だから、その制限から外れるようなアルゴリズムは使えないので柔軟性は欠く。
2023/03/17(金) 16:03:41.59ID:tBmmskox
そこが、新規書き起こしのRustのメリットでもあるわけよな
2023/03/17(金) 16:05:57.04ID:LTrpjv8n
>>393
そして、独自のアルゴリズムは使えないので、アルゴリズムの研究には向かない。
2023/03/17(金) 16:11:31.46ID:TZnQdWAf
第n次LinkedListおじさんvsGCおじさん戦争
2023/03/17(金) 16:16:19.10ID:tBmmskox
頑張ったら書けるんじゃねーの、それもsafeで
そのへんはC++もおなじ 自分も、ニッチすぎる薄いラッパなら頑張って書くし
2023/03/17(金) 16:20:04.75ID:KZujdKGk
>>392
Rustで記述できないマルチスレッドプログラミングのアルゴリズムなんてものは存在しない
Rustは柔軟性が非常に高い
2023/03/17(金) 16:32:10.93ID:LTrpjv8n
>>397
嘘を書かないで。
2023/03/17(金) 16:41:56.97ID:T8dNhcTz
Rustで書けないのがあると主張している人が例を出せばいいんじゃね
Rustにそんな制限はないからすべて書けるよたぶん
2023/03/17(金) 16:52:07.05ID:4tGjgBNl
結局何年か後にはlinux kernelを全部rustで書くつもりなんかな
2023/03/17(金) 17:00:34.34ID:tBmmskox
書けなくはないだろ、書きやすいかどうかだ 実際どうなん
C++は、なんでも書けるが、油断すると複雑すぎる代物ができあがる
そんで、「でも例外がくるとー」「でも異常値がくるとー」って
2023/03/17(金) 17:01:41.44ID:LTrpjv8n
>>399
マルチスレッドのアルゴリズムは非常に多く存在していて、ある意味では無限に
考えられる。Rustは数個しかサポートしていないから、無理。
2023/03/17(金) 17:26:21.78ID:T8dNhcTz
>>402
Rustで書けない例があると主張したいなら例を出せばいいんじゃね
Rustに何か制限があるわけじゃないからおそらくなんでも書けるよ
2023/03/17(金) 17:31:51.55ID:LTrpjv8n
>>403
unsafeになる。
2023/03/17(金) 17:42:50.37ID:T8dNhcTz
>>404
マジ?信じられん
もし本当ならそのunsafeを使わざるを得なかった例を具体的に出せばいいんじゃね
2023/03/17(金) 17:43:39.56ID:tBmmskox
unsafeをゼロにするよりも、極小なunsafeブロックを組み込んで華麗にキメてほしいね
これはC++も同様
2023/03/17(金) 17:52:35.17ID:2s/kFNH6
>>400
そういう枯れた古いものをわざわざ書き直すことに熱意を燃やせる人間は少ない
新世代のデータベースやcrypt/blockchainのように金になる新しい成長分野ではc/c++よりもrustがよく使われてる

技術の自然な世代交代は既存システムの置き換えから始まるものではない
2023/03/17(金) 18:01:30.86ID:LTrpjv8n
>>405
次のことが成り立っていれば教えてもらわなくても自然に分かる:
・マルチスレッドの事を理解している。
・Rustのことを理解している。
・算数的直観力に優れる。
2023/03/17(金) 18:03:48.04ID:u99ocdLb
複製おじさん vs 100点おじさん
Fight!
2023/03/17(金) 18:24:08.50ID:NC4w42Nt
>>401
そのへんの問題もRustだと安全安心なのがいいよなー
特に例外機構を無くしたのは大成功
あとResult放置してると警告もしてくれるしな

>>404
そのunsafe使わないと書けなかったコードを出してみ
寄ってたかって添削してやろう
2023/03/17(金) 18:36:02.65ID:LTrpjv8n
>>410
俺は天才だから、お前みたいな凡人に無料でヒントをくれてやらない。
2023/03/17(金) 19:13:16.48ID:tBmmskox
Rustって、削ぎ落したものは復活させません、って宣言とかしてるん?
2023/03/17(金) 19:55:25.86ID:9o1NNcpX
>>408
Rustをあんまり知らんけど言語間に根本的な差はなくね?
2023/03/17(金) 20:02:50.35ID:kImSYq8C
>>408はいつものキチガイ
RustもC++もコードを書けたことがない
相手にするだけ無駄
2023/03/17(金) 20:19:10.88ID:TZnQdWAf
>>414
今さらなに言ってるんだ?
ここにはキチガイしかいないぞ?
俺もお前もな
2023/03/17(金) 20:29:34.70ID:Zxg/DnHC
>>413
ん?だから何?
2023/03/17(金) 21:29:42.97ID:o5CBT2m0
>>416
アルゴリズムを書ける書けないの差はでない
418デフォルトの名無しさん
垢版 |
2023/03/17(金) 23:44:57.66ID:Lcw0Ean/
Rustほとんど知らん俺でも総合的にRustのほうがC++よりはいいだろと思う
C++より後発言語で、で、ライバルになるC++に劣っているようじゃダメだからな
で、お前らは、すごいRustで具体的に何を作っているんだ?
2023/03/18(土) 00:11:15.51ID:6kQD14Ek
ChatGPT先生に聞いてみた
>>404の言う通り

template <typename T>
class LockFreeStack {
public:
void push(const T& value) {
Node* new_node = new Node(value);
new_node->next = head.load(std::memory_order_relaxed);
while (!head.compare_exchange_weak(new_node->next, new_node,
std::memory_order_release,
std::memory_order_relaxed));
}
std::shared_ptr<T> pop() {
Node* old_head = head.load(std::memory_order_relaxed);
while (old_head && !head.compare_exchange_weak(old_head, old_head->next,
std::memory_order_acquire,
std::memory_order_relaxed));
return old_head ? std::make_shared<T>(old_head->value) : nullptr;
}
private:
struct Node {
T value;
Node* next;
Node(const T& value) : value(value), next(nullptr) {}
};
std::atomic<Node*> head{nullptr};
};
2023/03/18(土) 00:31:48.86ID:jelBOeFa
先生にからかわれとるぞw
2023/03/18(土) 00:53:02.93ID:rMRLIFsD
>>419はこれと同じのをRustで書いたらunsafeになる(だろ?)
って言いたいんだろ
偉大なるChatGPT先生が言うんだから間違いないだろな
2023/03/18(土) 00:58:57.68ID:6kQD14Ek
>>421
いやChatGPTは信用しない方が良い
俺はRustは良く分からんがChatGPT曰く
>Rustには、このようなロックフリーなデータ構造を提供する
>クレート(ライブラリ)が存在します。その一つがcrossbeamです。
>このクレートは、スレッドセーフで効率的なデータ構造を提供しており、
>crossbeam内でUnsafeな操作が行われているにもかかわらず、
>APIを通じて安全に使用できます。
だそうな
crossbeamってRustで書かれとらんのかな?
2023/03/18(土) 01:14:24.86ID:pMxUNH+f
>>422
本当は、ライブラリの中だけをunsafeにして、アプリ側はsafeに出来るケースも有れば、
アプリ側も unsafe を消せないケースもありえる。
2023/03/18(土) 01:17:39.13ID:6kQD14Ek
unsafeってキーワード使えばチェックをオフにできるのね
2023/03/18(土) 01:29:02.55ID:6kQD14Ek
>>420
Rustで書いてみよう!
2023/03/18(土) 04:35:18.48ID:+IGrKU6n
ArcとAtomicでほぼそのまま書けるけど
pointer dereferenceのためにunsafeは必須
2023/03/18(土) 10:03:55.24ID:fNuha5Rk
言語マウントごっこにしか使われてないrust
428デフォルトの名無しさん
垢版 |
2023/03/18(土) 10:25:46.77ID:fSPMk7mF
no chance
2023/03/18(土) 11:41:47.24ID:ux4diyjf
平日の昼にID真っ赤なのは仕事か
板違いのスレで必死に毎日お疲れさん
2023/03/18(土) 14:02:46.54ID:d2/CRNVk
ちょうどオライリーから「Rust Atomics and Locks」という本が出てるよ

基本的な内容を説明してる本なのでC++でatomicsやmemory orderingに慣れ親しんでる人がわざわざ買うほどのものではないかもしれないけど
かなりわかりやすくまとまってるのでRustでこの辺りの機能を使ったコードを良く書く人は読んで置いて損はないと思う
431デフォルトの名無しさん
垢版 |
2023/03/18(土) 16:09:57.63ID:fSPMk7mF
ほう
https://bokuweb.github.io/undefined/articles/20230205.html
2023/03/18(土) 18:42:10.12ID:kFUsfJhu
Lock-Freeなデータ構造を自分で作りたい人はこれを見るといい

Porting Java's ConcurrentHashMap to Rust (part 1)
https://www.youtube.com/watch?v=yQFWmGaFBjk
2023/03/19(日) 12:22:41.89ID:LfQxDddq
> cargo new hoge
> cargo run
→ 3MB
main.rs に
use clap::Parser;
追加すると
> cargo run
→ 100MB 超えるんだが
どうすれば容量減らせるん?
2023/03/19(日) 12:44:51.20ID:TIfaDrwo
とりあえず--releaseつける
2023/03/19(日) 13:32:03.94ID:fPDrKYk/
しらんけど
https://igaguri.はてなぶろぐ.com/entry/2020/06/07/133847
https://crates.io/crates/cargo-clean-recursive
2023/03/19(日) 13:35:18.59ID:fPDrKYk/
とりあえずは
cargo clean
で良いはず
最初から余計なのは造りたくないって言う話ならほんまにしらん
2023/03/19(日) 14:03:33.37ID:4KWNgnTF
>>436
ありがとうございました
2023/03/20(月) 08:59:55.73ID:8VwEKWf+
やっぱC++にもボローチェッカ欲しい
なんならCにも欲しい
attributeとか併用したら、やってできないことはないんじゃねーの
2023/03/21(火) 17:20:17.93ID:icU0z8mb
rg3d はなぜ
https://github.com/rg3dengine/rg3d
から
https://github.com/FyroxEngine/Fyrox
に改名したのですか?
2023/03/21(火) 17:50:34.39ID:5MGYYNx+
rustの読み物公式が面白いのしっかり出してるから
それ読むだけでも大分良い
後発言語らしくイイトコどりしまくってる
null無くした代わりになんでもかんでもラップしてるから若干だるいけど
すげー面白い
441デフォルトの名無しさん
垢版 |
2023/03/21(火) 19:41:09.03ID:4irMO5jk
Unity超えるゲームエンジン作ってから言え
442デフォルトの名無しさん
垢版 |
2023/03/21(火) 19:42:14.14ID:4irMO5jk
Blenderとかでもいいよ
2023/03/21(火) 21:54:25.24ID:gItZ+a0F
cpp2rsみたいのがじきできるから、そしたら一発
ただ、それだと、safeではあるけど、Rustのシンプルさは(メリットとして)失うな
444デフォルトの名無しさん
垢版 |
2023/03/22(水) 07:30:44.03ID:7nCtmzjD
>>443
ほんとにできる?
445デフォルトの名無しさん
垢版 |
2023/03/22(水) 09:09:27.85ID:II3LrhVD
文法がRustなだけで
Rustのコードとして使い物にならん
ゲテモノが出て来るわ
今のGPTも酷い
2023/03/22(水) 09:47:28.48ID:RLKJ2atP
ああ、あと全自動とは言わない あっちこっちで、あれなおせーこれなおせーって言われるかと
447デフォルトの名無しさん
垢版 |
2023/03/22(水) 10:40:01.19ID:Motackg9
たしかに、C++でメモリ安全性を静的チェックするツールを作るのはなかなか難しいもんかね?
2023/03/22(水) 12:19:59.74ID:jZlOcGNt
gccだとvargrindとかあるけどね
2023/03/22(水) 14:27:48.09ID:RqRpj7Ax
valgrindはgcc関係なくないか?
rustでもメモリリークの確認に使う

有用なツールだけど静的チェックと呼べるのかは疑問
2023/03/22(水) 21:31:28.83ID:vDLoPLCP
valgrindは実行時チェックだから出現レアケースだと時間内に検出できない
2023/03/22(水) 21:43:05.82ID:jZlOcGNt
AddressSanitizerでもValgrindでもmtraceでも好きなの選べ
https://kivantium.hateblo.jp/entry/2018/07/14/233027
2023/03/22(水) 21:46:10.74ID:vDLoPLCP
全て実行時チェックだな
2023/03/22(水) 21:54:30.07ID:jZlOcGNt
静的ツールだとこんなのもあるね
https://cppcheck.sourceforge.io/

スマートポインタ使えばそもそもいらんがね
454デフォルトの名無しさん
垢版 |
2023/03/23(木) 11:01:43.91ID:AQHpwrnP
C++で出来る人には要らん
455デフォルトの名無しさん
垢版 |
2023/03/23(木) 11:35:46.79ID:4E7FceMl
メモリ不安全の何が悪いかってメモリリークじゃなくて間違った場所にアクセスしちゃうことだと思うのだが
2023/03/23(木) 11:37:47.99ID:rQpQMC7M
>>455
例えばどういう状況かな?
457デフォルトの名無しさん
垢版 |
2023/03/23(木) 13:26:58.89ID:4E7FceMl
>>456
ゲームのバグとか
2023/03/23(木) 13:54:38.12ID:Pj5jY94w
Segmentation fault:呼んだ?
2023/03/23(木) 14:56:19.59ID:vn3KCE0y
Windowsで実行しています
https://doc.rust-lang.org/stable/std/process/
ここを観て
use std::process::{Command, Stdio};
let c = "cmd";
let a = "/c echo Hello, world!";
let o = Command::new(c).arg(a).output().expect("Failed to start process");
let v1 = o.stdout.as_slice();
すると v に必ず
[0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20,
0x77, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x22, 0x0d, 0x0a]
が入ります
let p = Command::new(c).arg(a).stdout(Stdio::piped()).spawn().expect("Failed to start process");
let e = p.wait_with_output().expect("Failed to open stdout");
let v2 = e.stdout.as_slice();
としても結果同じです
Hello, world!"+改行
で余計な"が入っているのですがなぜでしょう?どのように取り除くのが正しい対処方法を教えて!!
2023/03/23(木) 15:07:48.89ID:AQHpwrnP
let o = Command::new(c).args(&["/c", "echo Hello, world!"]).output().expect("Failed to start process");
461デフォルトの名無しさん
垢版 |
2023/03/23(木) 17:25:27.77ID:v7ZfYtIP
C++は例外処理とかもバグを生みやすくしていると思う
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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