結局C++とRustってどっちが良いの? 3traits
■ このスレッドは過去ログ倉庫に格納されています
「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/ >>267 コーディングできない上流と設計できない下流の非効率なウォーターホール方式を続けるの? テストさせられるほどの細かな設計まで自分でやるならコーディングもしてしまった方が早くない? >>269 テストの粒度は上流から下流まで様々あるんだよ テストさせられる==細かな設計とは限らない ちなウォーターフォールね そんな上位の仕様を渡すだけで内部設計も何でも自動でやってくれるAIは当分来ない 学習して曖昧パターンで答えてくれる方のAIは論理的思考がまるでダメ 論理的な方のAIは厳密に指定し尽くさないと適当に補完してやってくれない 根本的に180度違うから融合の見通しもない 公開したcrateの要らなくなった古いバージョンとか消したくても消せないのか githubよりタチが悪いな 他から参照してると仕方ないのが判るが 管理システムとして破綻してないかこれ >>268 gccとclangのどちらの最適化が優れているかは誰にも分からないので、 その影響をなくすためにも、rustc と 比較すべきは gcc ではなく、clang ということになるわけです。なので、今後ベンチマークを取る際には、 rustc vs clang で行かないと意味が有りません。 そのように同じくLLVMを使ってコンパイルしても >>178 のように言語仕様が原因でC++が遅くなりRustが速くなる事例があるんだよな いくらC++が速いといっても、ちゃんと書かないと速度は出ない 当たり前の事実と向き合うべき時期が来ているようだなw プログラミングは能力差が激しいからな C++を使おうが遅いプログラムが出来上がってしまう人たちも多いが本人自身はなかなか気付けない Rustだとそれが顕著に出るのでわかりやすい 入門初期は仕方ないがその後もRustを難しいとか面倒とか言ってる人たちは能力の低いプログラマーだけ vec!とか使い捲ってると便利過ぎて コピーされてるのか所有者移動してるのか意識してない人は遅くなりがち とフィボナッチイテレータより高度なプログラムが書けない人が申しております >>279 vec!はベクタ初期化時のみに用いられるマクロにすぎずそんな問題はない 値一つ指定でN個を初期化するにはClone以外に方法はない まあClone回避パターンもありRustは完璧だ >vec!はベクタ初期化時のみに用いられるマクロにすぎずそんな問題はない doubt >値一つ指定でN個を初期化するにはClone以外に方法はない doubt >まあClone回避パターンもありRustは完璧だ doubt よくこんな短文で嘘ばかりかけるな 複オジにいちいち突っ込んでたらキリがないぞ 騙されそうな奴がいなければほっとけばいい オジ使いの人は否定はしても理由も正解も書かないからどっちが正しいのかいつもわからん オジオジ言ってる人は間違いも多いけど偶然あってるときもあるぞ 適当に聞き流しとけ プログラミング言語に使われる人になってはいけない プログラミング言語を使える人になりなさい >>275 ですが、LLVMの最適化層は、メモリー領域が重なっているかどうかを解析する 機能も持っていますから、noaliasを明示的に付けなくても、最適化層が 自動的にnoalias相当の属性を付けてくれる場合も有り、そうなれば、 同じ程度に最適化されます。 C 言語の register 属性を付けなくても今のコンパイラは変数を自動的にレジスタ に割り当てるのと似たようなことです。 飽くまでも補助情報です。 >>288 残念ながら一般的な場合にはその解析が不可能 そのためC言語はrestrictキーワードの指定の有無がそのまま最適化の有無に繋がる このnoaliasによる最適化はベクトル化にも繋がるため実効果も大きい Rustの可変参照は常にnoaliasとなりLLVMへその情報が伝わるため有利 >>289 >残念ながら一般的な場合にはその解析が不可能 一般的には難しいとされていますが、できる場合も有り、実際 LLVM の最適化層は、解析を「しています」。 >>290 もちろんLLVMが解析で見つけ出すケースもゼロではないだろう 実際にはC言語でrestrict指定のコードを書くか否かで最適化の有無となっている現実が多々ある つまり各言語はnoalias情報をLLVMへ渡したほうが確実に有利だ C++は言語仕様にないが各コンパイラの独自拡張を使えば指定可能 もちろん無闇に指定してよいわけではなく確実にnoaliasと判断できる場合でないと動作不良を引き起こす Rustは言語仕様によりデータ競合を起こさないよう可変参照が排他的になるため確実にnoaliasがLLVMに渡る >>291 C++でも、noalias をつけたLLVMを出力するコンパイラも有るかも知れません。 コンパイラの進化の問題です。 >>292 バグが見つかったのはLLVM側ね Rustが常にnoaliasをLLVMへ指定してくるようになって 適用事例が増えてLLVMのバグが発覚できた感じ そしてLLVM側がバグ改修中にRust側は一時的にnoaliasの指定をオフした話だね 重要なのは犯人捜しではなく 「可変参照は常にnoaliasとなり」は嘘だということです >>293 Cではプログラマーがrestrict指定した箇所だけコンパイラがLLVMへnoalias指定する C++ではプログラマーがコンパイラ独自拡張__restrict指定した箇所だけLLVMへnoalias指定される 言語仕様によりC/C++コンパイラがnoaliasを自動付与することはできない C/C++プログラマーが安全に適用できると判断した時だけ自己責任でrestrict指定することになる Rustは言語仕様により常に安全に自動的にコンパイラがLLVMへnoalias指定する そのためRustプログラマーは何もしなくてもnoaliasによる最適化の恩恵を受けることができる これが根本的な違い コンパイラに撃墜されてるRustプログラマもいるから「何もしなくても」は言い過ぎだな >>295 現在はLLVMがバグ対応したため常にnoalias指定となる もちろん意図的にバグ未対応の古いバージョンのLLVMを指定したときを除く その場合にRustコンパイラはnoaliasを指定しないという安全な動作をする そんでいったい何nsec早くなるんですか?ってな 些細すぎる点です Rustならテキトー書いても速くなる…はさすがに夢見すぎだろう (やってないので)しらんけど おそらくだけど最適化が利いたとしてもベンチとかでは0.01%も速度は速くならないと思うけどな 普通にコードを書く限り一般的な速度は c<c++<rust何だろ でもそんなのにこだわって言語選ぶ意味はないよ 速度じゃないわな 実行時間だ 速度だと c > c++ > rust >>300 Rustは適当に書いたらコンパイル通らない。 いうて、C++でinline、constexprやらテンプレートメタとかで実行時の処理効率を上げまくったらRustじゃ敵わないと思うんだけど、、 Rustでも似たようなこと出来るんだっけ? >>305 Rustもできるよ そもそもRustのconstはコンパイル時定数でC++のconstexprのこと Rustの手続きマクロはRustコードの構文解析を入出力としてコンパイル時に実行生成するためC++より強力だね なるほどね 俺の全力のC++コードじゃRustには敵わないようだ >>299 >>301 noalias指定で劇的に速くなる例はC言語でrestrict修飾の有無の解説ページが多数あって詳しい restrict指定がないとnoalias最適化ができずにベクタ化されずに遅くなる例なども出ている テキトーに書いてもコンパイルが通る言語に憧れるなあ 複雑なことを好き勝手に書けるのがC++だったけど、簡潔に書くことも求められるようになりそうだねえ 当初は複雑だったけど、やることが大体固まったものをrewriteするなら、 いまなら確かにrustがアツい 成果も目に見えると思う たぶんCでは力不足だしね lintだけでもいいから、smart c++とか名前を付けてRustもどきの強制フォーマットを作って欲しいわ。 Rustそのものは要らん。 Rust本スレもワッチョイ無しのほうやめちまえばいいのにな C++相談室はすんなり移行できてて羨ましい >>310 それならば静的型付けではない言語を選ぼう ここは静的型付けのC++とRustのスレだからコンパイル時に可能な限りエラーを出す言語 >>315 その方向を求めるならばRustの方が優れているからC++にこだわる必要ないんじゃないかな 生産性の高いRustを使った方がメリット享受もたくさん crates.io にうpして docs.rs の comment cover が 中々 100% に到達しないんだが どこの comment が足りないって簡単に教えてくれるツールは? local で docker 使えば判るもんなの? あと「未 comment」数を減らした(=100%に近付けた)はずなのに 逆に%下がるケースもあるみたいで良く判らん 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 >>316 注意喚起テンプレとこの隔離スレが効いてるから本スレも平和 >>319 dクス しかし足りない数(あと5ヶ所のはず)よりはるかに多い warning が出て来たでござる >>319 5ヶ所治して残りの warning 放置で 100% 達成出来ました! ほんとうにありがとうございました!!! C++だとdoxygenなど使うところが Rustだと公式サポートされて色々と進んでいるのね win32kbase_rs.sys win32kfull_rs.sys って何? ついでに名前が似た以下のファイルも win32kbase.sys win32kfull.sys ttps://japan.zdnet.com/article/35198420/ C++0xの暗黒時代を知らない世代が増えたんだろう >>317 上澄みだけ使うならライブラリも豊富だし悪くない。 本来なら、c++標準化団体がAccelerated C++みたいなのを用意してメンテナンスすべきだと思うけどなぁ。 デザパタ流行した時ほにゃららパターンのほとんどが理解できなかったけどそのうち理解しなくても何の問題もない事が判った うんこうんこうんこー >>332 実務で今使ってるのは、state, proxy, singleton, factoryくらいかな。 あとは使ってないね。 近年の C + 人気は上の画像でも見ただろ 競技プログラミングだよ GoFのパターンはiteratorとかadapterも含めてるから多分無意識で使ってるよ 昔のforループはi++で回すのが普通だったし JavaにIterator(foreach構文)が追加されたのが1.5くらいのはず 懐かしの 何とかの呼吸 ○の型 ほにゃらら!が沢山あるけど 使わないときは使わないと言うだけです Rustの呼吸 一の型 mut代入! Rustの呼吸 二の型 シャドーイング! それ現行コンテンツちゃうの? (初クール初回から録画だけして観てない C++コアガイドラインに従い、IDE組み込みのチェッカーを使う これが一般的なスタイル これだけであなたの悩みはすべて解決する カーネルのどのへんで使われてるんだろう Linuxみたいに周辺部分からかな >>341 Rustの成果をC/C++に還流させるフェーズ どんどんやってくれ 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. マイクロソフト、Rust言語による開発を含む初めてのWindowsカーネルをInsiderプログラム参加者向けに提供開始 https://www.publickey1.jp/blog/23/_rustwindowsinsider.html デバドラからか これを見ると、言語の移り変わり時期が来ると 一気に使われなくなって廃れていくんやな、、 https://m.youtube.com/watch?v=qQXXI5QFUfw コンパイラは何使っているんだろうね? MSがllvmなんかつかうのかな? 新しいGC言語がどれだけ出て来ても C++の天下は揺らがない もしC++が転落するときが来るとすれば C++の欠点を解決しつつ同等の性能を出せる新たな非GC言語が登場した時だけだ trait 内の fn は pub 付けていなくても trait 自体が pub で定義されていたら 他の trait (というか上の trait を引き継いでいる) からでも参照出来るんだね Visual R++ Visual R# しっくりこない R言語はもう別であるからRustがR++になる心配はない トリビア: トレイトメソッドに付くVisibilityは構文定義上だけは許されている https://doc.rust-lang.org/reference/items/traits.html#item-visibility Trait items syntactically allow a Visibility annotation, but this is rejected when the trait is validated. またひどい知ったかぶりしてる…… https://medaka.5ch.net/test/read.cgi/prog/1619943288/575 575 仕様書無しさん 2023/05/12(金) 15:53:45.02 C++のスマートポインタはRustで吸収され ・RustのCopy実装型 (使われる時は自動コピー) ・RustのCopy非実装型 (使われる時はムーブ) ← C++のunique_ptr ・RustのArc型 (atomic増減でスレッド間も利用可) ← C++のshared_ptr ・RustのRc型 (高速にスレッド内で利用可) つまりunique_ptrの機能がRustでは標準で備わっている さらにshared_ptrはArcでその軽量版Rcが追加 C++と異なり使い間違えるとコンパイルエラーで知らせてくれる さらにRustは参照と可変参照の規則によりデータ競合をコンパイル時に防ぐ >>361 C++のunique_ptrとRustのBoxは対応しない Boxはヒープ確保であり例えば以下でのnew int(123)部分にあたる std::unique_ptr<int> foo(new int(123)); そしてunique_ptr自体にヒープ確保の機能はない 天下ねえ 天下って思われてると、むだに煽られるよねえ C++サイコーwww(大好き)とは思ってるけど 何故プログラミング言語が変わるのか まずハードが変わる、当然命令セットも変わる、さりとてハードが変わるたんびに新しい言語を覚える、既存のソフト移植する、など不可能なのでここで一個 ソフトサイドで新しい考え方が出てくる、既存の考え方ではバグ出やすい、効率悪い、こう考える方がいいという新しいプログラミングに関する知見が出れば言語そのものの刷新に向かう圧力が出る ここで一個 大別すればこの2段やろな ①高級言語 ━━━━━━ ②繋ぎレイヤ ━━━━━━ ③アセンブラ ①、③は必然的な刷新圧力に応じてどんどん変わっていく、③は必然的に新しいハードが出るたびに、①は絶対ではないけどBasic, Perl, Java, Ruby, Python などなど概ね5〜10年周期で変わってきた しかし②のレイヤはほぼ半世紀近くC,C++の独壇場, MachとかObjectice Cとかあったけど結局消えていった さてさてどうなるのか? Windows, Linuxでは一部Rubyに置き換える試みがなされてるけどコレは本流の大きなにがれになるのか、あるいはやはりごく一時的なものでやはりC,C++の牙城は崩れないのか たった今あるソリューションがRustだから、切迫した更新需要にはRustが入ると思う もうちょっとゆとりのあるものは、improved C/C++ でいいかなって感じじゃないかな 自分もその位置 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる