結局C++とRustってどっちが良いの?
■ このスレッドは過去ログ倉庫に格納されています
C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな? >>125 君はてをにはがおかしい 寝ぼけた頭で脊髄反射で書き込むのはやめたほうがいいな >>127 何処が可笑しいか指摘してくれ おれには判らん >>129 「CやC++に置き換わる言語の話」なんて誰もしていない 「CやC++に取って代わる」あるいは「CやC++を置き換える」と言いたいのだろう あるいは本気で「CやC++に置き換わる言語の話」をしているのなら今度こそ本当に頭がおかしいな >>126 VB6はトレースGCではないけど参照カウンタGC方式のGC言語 VB6オブジェクトは裏で参照カウンタが自動的に使われていてそれにより使われなくなったメモリを回収している ちなみにC++のshared_ptrなども参照カウンタ方式だが裏で勝手に使われることはなく必須でもなくプログラマー裁量なのでC++はGC言語ではない Rustに期待している人のフラストレーションを解消したいなら フルスクラッチでOSを書くくらいしか方法はないだろうね OSの普及は更に至難の技だけども (実務経験ゼロ + 論理的思考力の欠落 + 自己愛性パーソナリティ障害) * Rustへの執着 = 通称複製おじさん | | 彡⌒ミ \ (´・ω・`)またGCの話してる (| |):::: (γ /::::::: し \::: \ >>133 フルスクラッチの新たなOSを普及させるのは難しいだろうが >>74 に記事があるようにGoogleがRustのみで新OSを作ってるな あとAndroidもLinuxもWindowsもRustの一部採用を始めて この流れはOSに限らず全てのシステムでRust化が進んでいくのだろう GoogleとMicrosoftがRust言語でOS開発 https://xtech.nikkei.com/atcl/nxt/column/18/00692/042700054/ >>137 次第に現行プロジェクトを置換して増えていくなんて展開はありえないっての AndroidやWindowsをRust製のOSで置換するくらいしかストーリとしてはない Linuxに入っているRustコードは>>39 で書いた通り 私はRustで年収1億稼ぎましたみたいな話はないのかよ マイナープロジェクトでちょっと使われたら勝利なのかよ Winnyの作者みたいに逮捕されるかと思ったら怖くて無理 Rustで検証してうまくいったらそのままCにコンバートすれば余計なチェックコードが削れてる速く動く とかね。 >>133 それよりもグラフィックソフト作ったほうが広まると思うけどね Blender参考に3Dモデリングソフトつくってよ >>144 それでは心が満たされないんだよ GCの話しかしない人とか >>143 GCの有無はその言語がカバーできる範囲の差となり優劣関係が明白 GCのない言語は全てをカバーできる >>146 UEとかのゲームエンジンは当たり前だがついてる うまく付き合ってくほうが大事 本当にGCの話しかしないんだね GC以外のことを語る知識がない GCはこの板見てる人はほぼ誰でも知っているだろう 色んな言語のライブラリがC++(や最近はRust)で書かれているのを考えると C++とRustが王者決定戦になるのは当たり前じゃね? 入力にゴミデータを与えるとゴミしか出力されないことの好例 いつのまにかPythonやJavaScriptのライブラリがRustで作れるようになってるのな | | 彡⌒ミ \ (´・ω・`)またGCの話してる (| |):::: (γ /::::::: し \::: \ ふと思ったんだけど、Rustのmutableな構造体の中にimmutableなフィールドって持てるんだっけ? >>157 そういえば、C++のcv属性は、論理和方式で、constは足し算の様に0から1に 変わるが、mut 属性はそうはならないだろうから、どうなるんだろうな。 constは意味的に考えてもcastしない限りは、、constなものはいくらやっても 書き込めるようにはならない、というのは安全性から当然なんだけど、 mutだとそうはいかない。 >>158 mutとconstは逆さまの働きみたいだから、どっちで行くかは言語設計者の自由と 思われがちだけど、constな構造体のメンバは勝手に全てconst扱いになるという 単純な論理に出来るけど、mut方式の場合は、constキーワードも別に必要になりそう。 >>157 他の言語と同じでsetter相当をなくしてgetterだけにすればいい 専用のラッパーを作る方法もあるができて当然の機能なので誰もやらないだろうね >>159 C++でconstを誤用しているのとは異なり Rustではconstを正しく定数の意味で使っているので注意 つまりconstは定数でありコンパイル時に静的に定まる もちろんconstとは別の概念としてmutableとimmutableがあり、これらは可変性の有無を表す さらにそれらと別の概念として所有権があり、所有権を持っていればimmutableであろうと関係なくmutableな変数へ移すことで可変性を得られる 一方で所有権を持たないimmutableな参照からは可変性を得られない >>161 >C++でconstを誤用しているのとは異なり 誤用なの? >>162 そうだよ 実行するたびにあるいは関数を呼ぶたびに値が変わりうる変数(=静的に値が定まらず変わりうること)に対して、 変数がimmutableであることを間違えてconstと付けてしまった そのためC++では定数(=静的に値が定まること)の場合は苦肉の策でconstexprと変な名前を付けることになった >>163 C++では単に値が`constant'って意味で使っただけではないのかな? それを誤用とは言わんと思う ところで何でconstexprではないconst変数は 静的に定まらないことになってるの? >>164 もちろんC++は整数などに限ればconstで静的な定数となるが それ以外C++のconstは定数ではなく静的にコンパイル時に定まらない そのため真のconstを表すためにconstexprというキーワードを新たに用意する本末転倒な状況となった 以下の2つは矛盾してないかい? >>163 >実行するたびにあるいは関数を呼ぶたびに値が変わりうる変数(=静的に値が定まらず変わりうること)に対して、 >変数がimmutableであることを間違えてconstと付けてしまった >>164 >もちろんC++は整数などに限ればconstで静的な定数となるが 2つ目はなるんだっけ? >>165 >そのため真のconstを表すためにconstexprというキーワードを新たに用意する本末転倒な状況となった 「本末転倒」とは違うと思うよ >>166 C++で何らかのクラスのインスタンスを作ってconstに入れることを考えてみるとわかりやすいよ もちろんこのconstのインスタンスはコンストラクタの引き数の値によって変わるから静的な定数じゃないよね つまり単なるimmutableな変数に過ぎないわけだけどC++はそれに対してconstと間違えて名付けちゃった だから本当の定数に対してconstexprと名付けることになった有名な話だよ >>168 >つまり単なるimmutableな変数に過ぎないわけだけどC++はそれに対してconstと間違えて名付けちゃった C++のconstは単なる`constant'の意味で 静的な定数という意味でないというだけなのでは? 本当に「間違えて」名付けたのかな? 俺にはC++のconstにあなたが「間違えて」静的な定数という意味を 期待しているだけに見えるのだが? >>169 環境によって実行毎に、または、関数の引き数によって関数が呼ばれるごとに、>>168 の示してる例だと値が変わりうる その変わりうるものに対して、C++がconstと付けたのは失敗としか言いようがないのではないか そしてC++は本当にconstantなものに対して、後からconstexprと付けざるをえなかったことが、C++の失敗を誰の目にも明らかにしている >>170 >環境によって実行毎に、または、関数の引き数によって関数が呼ばれるごとに、>>168 の示してる例だと値が変わりうる これはどいう状況か分かりにくい? ソースで書いてみて >>171 関数に渡ってきた毎回変わりうる引き数を使ってそれを渡してインスタンス作成してconstに突っ込む場合でもよい あるいは環境変数やargv使ってインスタンス作成でもよい いずれも毎回インスタンスの値が変わりうるため定数ではないがC++ではconstと付けてしまった そして本当の定数にconstexprと付けた >>172 曖昧さを避けたいのでソースで書いて 反論する ただし*const Tのconstだけはコンパイル時定数の意ではなく、C++と同じで書き換えを行えないという意味です 一貫性がありませんね >>169 数字でも物理でも定数は静的に定まるものだよ でもC++はconstをimmutableの意味で間違えて名付けてしまいました そして定数を表すためにconstを使えなくなりconstexprと名付けたという誰でも知ってる有名な話だよ >>175 >でもC++はconstをimmutableの意味で間違えて名付けてしまいました とあなたが思っているだけではないかな? C++のconstにあなたなが「間違えて」静的に定まるものを期待しているだけでは? 言われてみれば数字や物理で定数は静的に定まる値だな どうせC++で静的に定まる値を示すキーワードも必要となるんだから素直にそれをconstにしておくべきだったか 設計ミスだな immutableとconstantの違いを区別できていない人がimmutableに対してconstと命名してしまったのかな そのためconstantに対してconstと命名できなくなってconstexprと命名したと 同じ言葉や字句でも言語ごとにその概念が指すものは異なる 相対主義的に考えなさい 相手の価値観を理解しなければ説得力は生まれません ・y = ax (a=10である) aをimmutableと呼ぶかconstantと呼ぶか ・y=f(a) (a=10である) f(a)をconstantと呼ぶかconstant expressionと呼ぶか まあ考え方次第だよな >>182 上はxが実行時に値がわかる変数なんでしょ? それならconstantには成りえないんじゃない? >>183 かかるaについてなんと呼ぶかって話だから別にxについて気にする必要は無いよ >>182 あと例を出すにしても 整数は特殊でconstexprでなくconstでも静的定数になる例外だから例として最も不適切 自演してRustゴリ推し他言語叩きをしてるのは 複製おじさんと呼ばれてるRustスレでは有名な荒らし しかもそいつが「RustJP公式 」の中の人で間違いなさそうって話だから手に負えない >>187 「RustJP自称公式 」なのでなんの問題もない y = ax y も a も x も変数としか言いようがない aを10としたときにコンパイル時 最適化してしまうかaという入れ物残しとくか更にはf(a)も計算して結果だけ使うか 整数はconstやconstexprの有無に関係なくコンパイル時に最適化されるから整数を持ち出して来ても意味がない C++ならクラスのインスタンスを生成する場合などを考えるとわかりやすい コンパイル時点でそのインスタンスを定数化できる時にconstexprを使い静的に定数となる そうでなく実行時にならないと値が定まらない変数となる時はconstexprを使えない その変数がimmutableつまり生成以降は値を変更できない時はconstを使う constというものの表現を語るうえで言語依存しない形で書いただけなので 少数でも文字列でも適当に読み替えてね >>192 C++の命名ミスだな 定数にconstと命名すべきであり immutableな変数にconstと命名すべきでなかった 結果的に後からみればC++の命名ミスなんだろうが歴史的経緯で仕方ないだろ 昔はimmutableとconstantの概念の区別が曖昧だった どうしても`immutable'を使いたければマクロ定義すれば? #define immutable const Rustはconstをimmutableとcompile-time constantの両方の意味で使うので一貫性が無い >>174 >>200 Rustでconstは常に静的な定数を表す *constはconstとは全く別のものであり予約語を最小限にするための使い回し組み合わせ 両者は種別も異なるため混乱することもない constは定数の定義なのでこの位置に来る let foo: i32 = 12345; const FOO: i32 = 12345; *constは生ポインタの型を示すのでこの位置に来る const BAR: &i32 = &FOO; const BAZ: *const i32 = &FOO; このように両者は全く別物で出現位置も異なり共存もでき混乱することもない この生ポインタはunsafe Rustでしか使わないため通常は出て来ない そのために新たな予約語を消費するのは馬鹿げているため既存の組み合わせという合理的な選択をした constはCからの流れだしな。 元々Cがシステムプログラミング向けだったことを思えば、「リードオンリーセクションに置け」っていうくらいのつもりだったんだろ。 定数は#defineで指定しろって感じかな。 >>201 > この生ポインタはunsafe Rustでしか使わないため通常は出て来ない safeの範囲で普通に使うけど 参照の同一性比較とか書いたことないの? >>203 参照の比較は生ポインタ直接比較ではなくstd::ptr::eqを使うのが行儀良いマナー 参照を渡せば*constに自動でcoerceされるためコードに*constを記述する必要はない Rustは優秀なんだろうけど、言語仕様が難解なのと、「〜の分野ならRust」と言えるものがないから広がりにくいんだろうね それにRustは左翼的な弱者救済的な雰囲気が漂う。 VBも同じ理由で使ってるだけで駄目プログラマとみなされていったから、 同じようにRustを使ってるだけで駄目プログラマ決定されてしまう気がする。 Excelもそうだ。Excelを使ってるだけで弱者扱いされてしまうようになっている。 VBもそうなったから、中味はそう変わってないのに名前を変えてC#にされた。 しかし、だんだんと、C#もVBと同じように馬鹿プログラマ専用言語とみなされる ようになってきてる。 Rustもきっとそうなるだろう。 Rustも悪くないけど日本語のドキュメントが酷すぎるかなあ。 たとえば第七章のパッケージとグレートの話とかでも ------- 最初に学ぶモジュールシステムの要素は、パッケージとクレートです。 クレートはバイナリかライブラリのどちらかです。 クレートルート (crate root) とは、Rustコンパイラの開始点となり、クレートのルートモジュールを作るソースファイルのことです -------- 英文の方は版が新しいこともあってか The first parts of the module system we’ll cover are packages and crates. A crate is the smallest amount of code that the Rust compiler considers at a time. Even if you run rustc rather than cargo and pass a single source code file (as we did all the way back in the “Writing and Running a Rust Program” section of Chapter 1), the compiler considers that file to be a crate. と、いう具合で以下だいぶ丁寧に解説してる。 パッケージにはa library crateとあるから一つだけなの?とChatGPTに尋ねたら複数入ることもあると断言されたけど。 面倒ならとりあえずDeepLに掛ければ良いのにね > モジュールシステムで最初に取り上げるのは、パッケージとクレートです。 > > クレートは、Rustコンパイラが一度に考慮する最小のコード量です。cargoで > はなくrustcを実行し、1つのソースコードファイルを渡したとしても(第1章 > の「Rustプログラムの作成と実行」でやったように)、コンパイラはそのファ > イルをクレートと見なします。 >>209 ひどすぎるのには同意するが それはボランティアによる非公式な翻訳で 識者による監修や査読がされてないから 質が低いのは当然といえば当然 一部専門用語を除くと機械翻訳のほうが それよりはマシな訳になることが多いので 多少英語が苦手でも公式を見たほうが断然効率がいいよ >>209 7章の最初のページ見ればそれぞれどういう関係なのか一目瞭然 単数形複数形の違いを丁寧に訳してなければ重要な意味が日本語訳では消えてるかもね ・Packages: A Cargo feature that lets you build, test, and share crates ・Crates: A tree of modules that produces a library or executable ・Modules and use: Let you control the organization, scope, and privacy of paths ・Paths: A way of naming an item, such as a struct, function, or module >>209 そのページは原文の2年半以上前の状態止まってる 日々改善されてるOSSで数年単位の遅れがあると全く役に立たないから 現状はRustの日本語ドキュメントは無いものと思っておいたほうがいい >>213 原文のいつの状態を反映した訳なのか全然管理できてないらしいからね アップデートは望み薄 規格がないので二流感が拭えない かと言ってC++が登場したときのように 今はプログラミング言語の実装が いくつも出てくる状況でもないのかな? >>215 C++での混乱と失敗を繰り返さないことが重要 >>214 マジかよw たかだか100個程度のファイルが管理できないってどんだけよ 実装が複数あることはメリットもあるがデメリットも多くユーザを混乱させてきた 一方で言語仕様とその実現方法が確定して枯れた時は複数実装のメリットが上回る Rustについては更なる理想の言語に向けて公開todoリストも多くまだ発展段階なので複数実装は向いていない もちろん従来的な使い方ならば現状のRustで既に十分に利用できる >>218 ユーザーフォーラムのしかもたった二人の回答を「公式コミュニティの見解」にしてしまうオツムの人達だからさ一般常識があると思ったら大間違い >>219 3行目は全否定しておく CやC++に複数の実装があった第一の要因は開発ツールが売れたという背景がある Rustに限らず開発ツールは最早ビジネスとしては成り立たなくなってしまった >>220 あれ痛いよね でもピン留めして晒し上げるのはさすがにどうかと思うわ Rustは公式が提供するcargoやrust-analyzerで開発環境は十分だもんな もちろんrust-analyzerはLSPなのでVScodeなどの既存の統合開発環境で使える >>220 Rustユーザーの大半は英語のドキュメントを直接見てるからな 同じRustユーザーというだけであのリテラシーレベルと同類扱いされるのは誠に遺憾 >>212 一目瞭然ってことはないよ。 わかってるやつにはわかるっていうレベル。 特にmodule and use以下で戸惑うと思うよ。 Rustはプログラミング言語としてはCとかで神経使っていたところで楽させてくれる感じだけど、新人を呼び込むにはドキュメントがまずいかなあ。 前にもこれどこかで同じレスしたことあるけど Javascriptってドキュメントすっごい充実してるよな 2000年以前はHTMLとJavascript一緒になった解説本の最後の方に申し訳程度に乗ってたくらいで あとは某とほほサイト見るくらいしかなかったけど 最近ちらっとみたらすごいのな https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/find これは適当にクリックした特に選んでない一例だけど ちょっと過剰なくらい説明と例が乗っててスゴイと思ったわ Rustにここまでを要求したほうがいいとも思わんけど いつかみんなが使う言語になったときはそうなってるのかもしれん ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる