結局C++とRustってどっちが良いの? 2traits
■ このスレッドは過去ログ倉庫に格納されています
「C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」
っていうスレ。
前スレ: 結局C++とRustってどっちが良いの?
https://mevius.5ch.net/test/read.cgi/tech/1677286186/ 世界的にインフラはRust製になりつつある
https://japan.zdnet.com/article/35183866/
Amazon Web Services(AWS)は、同社のエンジニアたちがプログラミング言語「Rust」を
使っている大きな理由として、エネルギー効率の高さを挙げる。
AWSは早くからRustを採用し、Rust Foundationの創設にも携わった。
現在もRustの普及に熱心に取り組んでいる。
AWSのソフトウェアエンジニアで、Rustの普及に取り組む
Shane Miller氏と主任エンジニアのCarl Lerche氏の投稿によれば、
Rustはメモリー安全性を高め、セキュリティ関連の不具合を減らす役に立つだけでなく、
PythonやJavaよりもはるかに「エネルギー効率に優れている」という。
Amazonは、2025年までにデータセンターの100%を再生エネルギーでまかなうという目標を掲げ、
データセンターの環境負荷の軽減に取り組んでいる。
Rustの採用はその一翼を担うという。
Rustで構築されたAWSサービスの例としては、
コンテナーアプリ用のサーバーレスプラットフォーム「Lamba」を支える「Firecracker」、
「Amazon Simple Storage Service(S3)」「Amazon Elastic Compute Cloud(EC2)」、
コンテンツ配信ネットワーク「Amazon CloudFront」、
LinuxベースのコンテナーOS「Bottlerocket」がある。
「CやRustが他の言語よりもエネルギー効率に優れていることに驚きはない。
衝撃的なのは、その違いの大きさだ。CとRustを広範に採用すれば、
控えめに見積もってもコンピュートに使用されるエネルギーの量を50%削減できる可能性がある」と
Miller氏は述べ、その根拠として、C、GoogleのGo、Lua、Python、Ruby、Fortranなどをはじめとする
複数の言語のエネルギー効率を相対的に示した研究結果を紹介している。 なぜ皆がC++を捨ててRustへ移行していくのか以前は不思議だったが
Rustも書くようになってようやく理由がわかった
色んな面で快適になっている Rustは高機能に洗練されていて意外にコンパクトだね
C++では同じことを出来ないも多くて何とか出来ることもC++17やC++20の知識が必要で普及していなかったり
どちらにも新規な人ならRustの方が学習量が少なくて済むね === 複製おじさん(通称複おじ)について ===
Rustスレを中心に活動し、2023年4月現在で1年以上ム板に住み着くRustacean。無自覚な荒らし。
Rustスレでは、基本的に他住民の意見を聞いて糧とすることなく、自らのコードが最善であると、ID変更自演を交えいつまでも主張し続ける。
同スレで「所有権が複製される」という違和感のある表現を、「違和感がある」とする他住民の意見をすべて否定してしつこく擁護し続けたことから、「複製おじさん」というあだ名が付けられた。
それ以外のム板スレでは、基本的に他住民の意見を聞いて糧とすることなく、Rustこそが最善であると、ID変更自演を交えいつまでも主張し続ける。
その基本戦術は、「GC言語は遅い」の一声でC/C++/Rust以外の言語を否定し、残ったC/C++は安全ではないので、Rustが最善であるとするもの。
しかしながら、Rust以外の言語に関しては、正当な批判を展開するのに十分な知識を持っているとは言いがたい。
本スレPart1では、C++の問題点を指摘しようとして多数の誤り・知識不足を露呈することとなった。特にしつこく食い下がったのが「動的ディスパッチ」に関する誤解である。
https://mevius.5ch.net/test/read.cgi/tech/1677286186/786-799(ID:Evbafc70とID:RiLc+pIfが複製おじさんであると考えられている)
要約すると、通常「条件分岐」と呼ばれるものを「動的ディスパッチ」と呼ぶのが正しいと主張し続けたのである。
常識的にはあり得ない誤解だが、提示されたC++のコードが自らの主張(C++にはパターンマッチが無い)に不都合であると感じたためか、C++のコードを正しく読み解くことができないにもかかわらず脊髄反射的に否定してしまい、その根拠として誤った論理をこじつけてしまったものと思われる。
ちなみにこの後、同種の誤解を持って書き込むID:wHEiYRW7(これはID使用歴的に複製おじさんとは考えにくい)に対して、正しい理解に基づく指摘を行う単発IDが複数出現するが、この中にも複製おじさんが多数含まれていると考えられている。
このように自分の誤りを認識した場合、それを認める書き込みは決して行わず、別人の振りをして最初から正しく理解していた体を装うのも複製おじさんの特徴である。 C++は確実に滅びる
各種安全性が保証されているRust製と穴を多発してきたC++製
企業や国自治体がどちらを選ぶか明らか
いずれ要件にも入るだろう >>5
おいおい!処理を切り替えること一般をディスパッチ
その実装をディスパッチャと言うんだよ
ifやmatchなどの条件分岐はやっていることはディスパッチャだよ
実行時にやっているから動的ディスパッチ
仮想関数テーブルを介した関数の呼び出しの切り替えも動的ディスパッチ
一方で関数のオーバーロードによる切り替えは
コンパイル時に決まるので静的ディスパッチと言う GoogleとMicrosoftで脆弱性の70%がメモリー管理バグに起因のためRust採用
https://xtech.nikkei.com/atcl/nxt/column/18/00692/042700054/
Rustは、プログラムに必要なメモリーの確保や解放に関連するバグが生じない「メモリー安全」が保証されたプログラミング言語である。
それに対してこれまでのOS開発に使われてきたC/C++は「大規模な開発においてメモリー安全なコードを記述することがほぼ不可能」
(Microsoftのブログ「We need a safer systems programming language」出典)だという。
GoogleによればAndroidに存在した深刻なセキュリティー脆弱性の70%近くがメモリー安全に関するバグに起因するという。
同様にMicrosoftも、同社製品に存在したセキュリティー脆弱性の70%がメモリー安全に関するバグに起因すると述べている。
C/C++を使う限りセキュリティー脆弱性を根絶するのは不可能と考えて、Rustを採用するに至ったというわけだ。 >「業界談義」、愚痴はプログラマー板へどうぞ。
板ルールが読めない池沼
そしてプログラム書けずにドヤ顔で役に立たない長文書くバカ 大手IT企業は揃ってC++ではダメだと判断してRustへ移行しつつあるのに
底辺は真逆でRustはダメでC++に拘るのはなぜ? あっちにもスレあったんだけどね、あんま流行ってなかったから
マの問題じゃない、言語がイイんだ! ってgdgdやるのがいいみたいだ
Google&MS「バグの70%はC/C++。Rustにする」
https://medaka.5ch.net/test/read.cgi/prog/1619943288/
ほんとにマの問題なら、>>1 で終わってしまうw >>11
DQNだから言語的になんら優位性のないC++に固執している
過去の遺産だけはC++の優位性があるがそれすら時間とともに置き換わっていく Rustは難しくない。そうだろ?
大手が本格的に移行しはじめてからでも、全然遅かねえんだよ
ま、C++を捨てられないってのは、このスレだけの内緒だけどな! Rustに移行ってのは、採用された程度じゃ移行じゃない
APIに、Rustの所有権・マルチスレッド関係のシグネチャが付くようになって、ようやっとだ
その日はくる
そして、Rustの独占は揺らぐ C++を捨てたんなら、no_mangle とか、まさか、extern "C" とかいう呪詛を唱えてないよな?
移行っていう以上、そういうの要らないんだよ
C++が、こっちから適合してやっからよ 複おじはね、承認に飢えた構ってちゃんなのよ
この紛うことなきクソスレを隔離スレ化して構い続けてあげれば、他スレの被害を最小限にできるって寸法よ
こんなクソゴミスレを存続させる意義はここにある
君たちも>>5は知識として覚えておいて、そこらでそれっぽい書き込みを見ても一切反応しちゃいけないぞ ディスパッチはディスパッチだろ、くらいに思ってたのに、
Rustの優位性を説明するキーワードのひとつなのね
もうちょっと勉強してからそのへんはゆっくり読む罠 ついていけん
C++を捨てろって言われると猛然と怒るけど、
じゃRust使わないのかって聞かれると、いやじゃんじゃん使うよ必要ならって答える
それがC++er >>19
>Rustの優位性を説明するキーワードのひとつなのね
静的ディスパッチ/動的ディスパッチの違いは
基本としておさえておくべきポイントというだけで
Rustに明確な優位性があるわけではないよ
vtableの持ち方の違いもトレードオフだから
何に重きを置くかによってRustがやや有利な場合もあればC++が有利な場合もある >前スレ
>Rust派は、Rustなら、必ず・全部安全
doubt そりゃC++よりは安全だろうけど
少なくともメモリ管理において、Rustの安全性って、数学的に保証されるものなの? >>24
定義次第だと思うのでメモリ管理以外で「安全性が数学的に保証されてる」と思ってる例をいくつかあげてみて あ、わかった
Rustがsafeといっても、定義次第なんだね >>26
Rustに関係なく「安全かどうか」は定義次第だからね ていうか、こっちに定義を聞いてこられても困るんだよね
この定義において、Rustはここまで安全、って言ってもらえると、それを遵守するんだから >>30
数学的に安全性が保証されてるかどうかを質問してるにも関わらず
「数学的に安全性が保証されてる」とはどういう定義なのか聞かれたら困るのか
それじゃどうしようもないな 数学的に安全性が保証されてるっぽい何かがあるんだろ? ってなことだよ
根拠もなしに、安全か? そりゃC++よりマシだろうけどさw そんな難しいことを考えなくても
Rustの所有権システムをC++で体験したければ
インスタンスを作るときに
必ず常にmake_uniqueかmake_sharedするようにすれば
だいたい同じ振る舞いになる
安全性は保証される C++ってstd::move(x)した後にx使うとコンパイラに怒られるの? コンパイラは怒らないから
静的解析ツールが必要だね C++はコンパイルとは別に静的解析とデバッグ解析が不可欠だからな
Rustはコンパイラがメモリ安全からデータ競合安全まで保証してくれるのでかなり楽 デバッグ解析てなんやねん
コンパイラがやる静的解析の範囲が広いというだけでRustでも静的解析・動的解析は基本不可欠
clippy, rustfix, rust-fmt, cargo-expand辺りは静的解析ツールの一種 まともにrustかけるやつって例外なくc++もかけるけどな。 Rustだって、まともにって難しいだろ、たぶん
俺は簡単に使いたい
>>39 は >>36 「安全」に描こうとするとコピーが大量に発生するのか >>31
Rust は(限られた範囲において)常に安全ω(キリっ C++er あるあるシリーズ
#![allow(unused)]
... = hoge().unwrap;
... = hoge()?;
let p: *const [u8] = &fuga;
unsafe {} >>37
C++のスマポの使い方をミスっても公式支援がない話でそれらは的外れかなあ
clippyはRust公式リント
rustfixはRustコンパイラのよる提案の適用
rust-fmtは清書
cargo-expandはマクロ展開 >>41
Rustはムダなコピーを発生させずに参照を使って安全にメモリ管理できる言語
もしRustで不可能なケースがあったらそれはC++でも不可能で元から無理筋 >>44
それはRustの実装が一つしかないのを公式と言っているに過ぎない
C++でデバッガが用意されていない開発環境は無い?
もしくは使われていないのでは? >>44
誰もが使ってるツールにわざわざ説明つけてるところ見ると基本の静的解析ツールも知らなかったんだな
複オジは所詮このレベルだから全く信用できない >>45
C++は選択ができる
値とポインタ(スマートポインタ)と参照(左辺値と右辺値)
冗長に書くも効率的に書くもプログラマ次第
素人にはオススメしない >>49
それはどちらも同じ
所有権を持つ: C++のスマポ、Rustの変数
所有権を持たない: C++とRustの参照
ただしライフタイムが管理できるRustの参照の方が強力かつ安全 >>50
「ライフタイムが管理できるRustの参照」って何?
単に参照先が死んでることをコンパイラで弾くことを「管理」って言ってるの? Rustの宣伝文だけ読んで他言語を知った気になり
Rustの宣伝文を5chにコピペし続けるだけの人生 >>50
C++の参照とRustの参照はかなり違うぞ
C++の参照はちょっとミスるとダングリングになる 「数学的」連呼してる割には名前に直交性が無いな
.iter
.indexed_iter
.iter_mut
.indexed_iter_mut
.outer_iter
.outer_iter_mut
not exist .indexed_iter_mut
not exist .enumerate_iter_mut
.enumerate_pixels_mut
いちいち覚えてられるか? 違ったので訂正
誤 not exist .indexed_iter_mut
正 not exist .indexed_outer_iter_mut あ。「数学的」連呼してたのは、C++側の俺
そして、あんまり、数学的な安全の論拠ってのはみつからない
ありゃあC++で真似するんだよ 手本にしない手はない >>56
各ライブラリで命名方針が異なるのは、プログラミング言語の比較の話と全く無関係じゃね?
あと、enumerate_pixels_mutをその提案のenumerate_iter_mutとしてしまったら、肝心なピクセルが消えて意味不明じゃん。 雑談としては、そのへんも「きれい」になってくれるとありがたいね
これはC++も同様 直交性の意味がよく分からなかった
index_of(先頭から検索)とlast_index_of(末尾から検索)は直交性がないことになるのかな
標準と非標準の関係で考えると自然な命名だと思うけど かわいそうだから答えてやるか
数学的な保証が云々ってたぶんRustBeltプロジェクトのことだよね
https://plv.mpi-sws.org/rustbelt/ Rust 安全 論文、で上手く引き当てられなかったんだよ
仕事サボって、ちょっと読んでみるw
>>63
いや、いいんだ。「それっぽいの」って俺も言った。 >>62
unsafeを使ってsafeなインタフェースを作っている部分、すなわち人間が安全性を保証しなければならなかった部分を、数学的に保証する試みがあるのか そこも気を付けて読んでみるけど、
unsafeを撲滅しようと思ったら、SoCのサポートが必要ってのが今のところの俺の考え
そう考えないと、C++も永遠にsafeに成れないことになってしまう
unsafe部分にバグが、っていう古い記事が出てきたりするんだけど、
どうせ、safeでいいものまでunsafeでいっぱい書いたんでしょ、と思ってる
これは個人の推測 学術的とか、論理的とか、適当に読み替えてくれよ、俺がうまく言えなかったのがいけなかっただけ >>61
last_index_ofはlast occurrenceのindexを示すだけで検索方向を示すものでは無いと思う >>56 >>59
.indexed_pixel_mut も欲しいです >>70
はあ?
indexed_iter_mutがあるのはndarray crateの話
enumerate_pixels_mutがあるのはimage crateの話
pixelのイテレータとrowのイテレータがあるためiterではなくpixelsおよびrowsと名付けている
>>56が無関係な両ライブラリをごっちやに取り上げてその意味も分からず批判しているだけにすぎない >>72
Rustは継承がなくトレイト合成なんだから当然だろ
>>73
間違ってはいないだろ まあ、ちゃんとキャストできるようにできてるというか 日本人はtraitとtoiletの区別がつきにくい rustのcrateはdependenciesで入るのが多過ぎるし大き過ぎるわ
要らないものまで無理やり入れさせられてる気分になる dependenciesに5個程度指定するだけで
依存crateが100個近くになるのも珍しくない
nodeとは比べ物にならないくらいひどいよ しかもビルドすると500~1GB超の容量使うからノートの内蔵SSDを使ってると残す必要のないのは積極的にcleanしないときつい そんだけファイルの読み書きするなら
IOの速度に影響されそうだね マイコンでも大人気と聞いたんだが、どうなってるんだ 容量使うのはインクリメンタルビルド用の中間生成物で配置するものとは違うよ C++もPCHファイルを生成するとアホほどでかかったりするが…世の中うまくいかんな C++なら明示的インスタンス化を使おうよ
使っている人をほぼ見ないけども こう書いておけば、インスタンス化した関数に、こんな風に溶け込むだろうな、とか思って書いてたりはする
時間があれば、生成コードを汗で確認する
びっくりするほどスパゲッティな出力になってて、びっくりすることがある まあ実力不足を痛感する瞬間 ああ、callで呼ぶようなものはなんでも関数って言っちゃうねつい そこにこれ載ってた
[RFC] Lifetime annotations for C++
https://discourse.llvm.org/t/61377
Rustは勝利した しかし、Rustはその勝利を独占できない ■ このスレッドは過去ログ倉庫に格納されています