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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2023/07/29(土) 15:05:46.55ID:2Hm/yplK
C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」

っていう雑談スレ。

前スレ 
https://itest.5ch.net/mevius/test/read.cgi/tech/1688129795

関連スレ(マ板): Google&MS「バグの70%はC/C++。Rustにする」
https://medaka.5ch.n...cgi/prog/1619943288/
2023/08/04(金) 14:23:45.74ID:neuFS+YA
気のせいです
128デフォルトの名無しさん
垢版 |
2023/08/04(金) 14:45:44.75ID:z0X1ZVr3
>>125
唐突なポエム草
2023/08/04(金) 15:02:43.37ID:BcxuRAkw
もっともマトモな層は、コード書きに行ってこんなとこ来ないからw
2023/08/04(金) 15:21:59.11ID:9eDSr/2C
急にスレのベレルが下がったな
131デフォルトの名無しさん
垢版 |
2023/08/04(金) 15:39:49.20ID:XLfSEGlw
高かったことが一度でも在ったかのような言い草だな
2023/08/04(金) 15:45:57.96ID:f95F43ae
散髪屋に安全ガミソリを強制したり、マシン語プログラマを
蔑みそうな思想だな。
2023/08/04(金) 15:49:31.23ID:f95F43ae
安全ガミソリは刃に毛が挟まって取れなくなって、
再利用しにくいのに対し、直刃のかみそりは、
安全面さえ気をつければ手入れが簡単で再利用しやすい
からプロは後者を好んで使う。
それと同じ。
2023/08/04(金) 15:51:38.78ID:f95F43ae
直刃のかみそりを好んで使うプロたちに対して、
「お前らは客の安全性を疎かにする自信過剰で傲慢な
駄目な奴ら」
だとか言うつもりか。
2023/08/04(金) 15:56:47.17ID:i+NL2LDR
急にスレのベレルが下がったな
2023/08/04(金) 15:58:20.80ID:BcxuRAkw
>>134
消毒(sanitize)はどうしてるのかって問題はたしかにあるな
俺は気にしてないが、気にする人がいてもいい
2023/08/04(金) 16:01:00.54ID:f95F43ae
マシン語プログラマに対して、
「おまえらは、自身の腕を過信する安全性軽視の
 駄目プログラマだ」
なんて言う権利は他人には無いと思う。
2023/08/04(金) 16:09:50.05ID:S7yEvO65
>>137
安全性とは何なのかも定義も理解できていないからそんな馬鹿げた書き込みばかりしてるのか
2023/08/04(金) 16:17:28.67ID:f95F43ae
結局、相手を馬鹿にしてRustを推すのが、Rust信者の
やり口。
140デフォルトの名無しさん
垢版 |
2023/08/04(金) 16:31:11.69ID:EJnCR0gN
安全カミソリは安全ではないし
直刃のカミソリを使うプロでも客に切り傷つけることはよくある
141デフォルトの名無しさん
垢版 |
2023/08/04(金) 19:56:00.95ID:l9tpj9tS
直刃のカミソリっていうか、柄もないカミソリの刃だけを使うようなもんだろ。
自分も痛い目みること含めて。
2023/08/04(金) 20:09:16.36ID:S7yEvO65
他人が書いた部分や使ってるライブラリやその孫ライブラリまで含めて全ソースをチェックするのは非現実的だからな
もちろん自分で書いた部分やリファクタリングした部分も万が一のチェックを書き換えるたびにするのも手間暇コスト増
unsafeでもunguardでも呼び名はなんでもいいからsafe/guard部分がコンパイラによる自動チェックされるようになれば人間がチェックすべき部分は激減できる
2023/08/04(金) 20:15:00.62ID:bJlFt79O
急にスレのベレルが下がったな
2023/08/04(金) 20:26:53.92ID:og8Edpiv
ダングリングの検出ってGPTの登場で
言語側が備える意味は最早なくなった
そのうち外部にチェックプログラムが登場するよ
ABIが非互換になるデメリットを考えると
なおさらRustに追随する言語はないと思う
さよならRustの未来を信じた皆さん
2023/08/04(金) 20:36:35.81ID:q/UYza0u
>>144
ダングリングなんて小さな問題だけが対象ではないことを理解していなさそうにもみえるが
これまで外部ログラムがいくら頑張っても各種問題を静的に見つけることはできていないし今後も無理だろう
AIであろうとそれは同じであり神のようなAIが登場するならその時は全ての言語のプログラマー全員廃業だ
146デフォルトの名無しさん
垢版 |
2023/08/04(金) 21:00:09.09ID:IJ6nE+NX
>>144
外部のチェックツールって今までもあったけどね。
上手いプロンプトを考えられたらいいね。
147デフォルトの名無しさん
垢版 |
2023/08/04(金) 21:36:58.62ID:K3V5Xtdy
>そのうち外部にチェックプログラムが登場するよ
今まで使ったことないのかよww
2023/08/04(金) 22:00:25.44ID:CoH1yBj0
CheckGPTでRustは終わる
149デフォルトの名無しさん
垢版 |
2023/08/05(土) 00:03:15.32ID:8PC/4Tei
残念だけど言語サポート無しにRustと同じレベルのチェックは不可能
それがわからない時点で安全なコードを書く能力もないことが分かる
2023/08/05(土) 01:06:25.49ID:YeB01PWa
>>149
SendやSyncのマーカートレイトなど
様々な安全性を型チェックで保証できるような枠組みがRustには揃ってるあたりのことか
C++にも導入すべきだよな
C++は色んな機能が足りなすぎる
2023/08/05(土) 01:50:07.55ID:dts8KIsS
Rustは人の命をあずかるシステムに使えますか?
2023/08/05(土) 02:47:29.11ID:LVFgAb7y
使えます
2023/08/05(土) 04:34:10.67ID:KocMWFZU
Rust信者の正体は、ぎゃあぎゃあ五月蝿い評論家だ。
自分が上だと思って色々言ってくる。
2023/08/05(土) 04:36:47.68ID:KocMWFZU
実際にソフトウェアでサラリーマンとしてではなく、事業
として成功している人以外の意見はさらっと流して無視
しなければ、上手く行かない。
2023/08/05(土) 07:16:06.28ID:xdlV5LLb
>>148
これ
2023/08/05(土) 07:31:06.33ID:YeB01PWa
>>155
Rustが様々な安全性をコンパイラで保証できる仕組みは
例えばスレッド間での移動や共有の可否などを抽象的なトレイトで表現して
各型をそれらのトレイト境界で制約して型チェックで実現したりしているようだから
C++にもそういう仕組みを導入すれば自動チェックの可能性が出てくるね
2023/08/05(土) 08:05:44.87ID:xdlV5LLb
>>156
将来的にそういうのはエディタに組み込まれたCheckGPTがやってくれるんじゃん
2023/08/05(土) 08:24:07.60ID:YeB01PWa
>>157
言語仕様に組み込まれていないとそれは不可能と思われる
もしそれさえ覆すAIが出現した時にはプログラミング言語自体が全て滅びてしまう新時代となる
その新時代になるまでは言語仕様が強力なRustがAI支援で圧倒的に有利にみえる
2023/08/05(土) 08:38:30.69ID:xdlV5LLb
>>158
AIに最適化された言語が登場するのかも
160デフォルトの名無しさん
垢版 |
2023/08/05(土) 11:23:13.95ID:NzC+Rt9F
>>158
>言語仕様に組み込まれていないとそれは不可能と思われる
そなの?
人間がソースコードを読んで発見できるバグなら
直感的にはAIにも出来るのでは?
2023/08/05(土) 11:43:54.44ID:Lx+Vx/pL
クソスレ上げんな低能
2023/08/05(土) 12:00:58.94ID:YeB01PWa
>>160
そこは単純な話でプログラミングよりも遥かに難しいため
つまりそれが可能な領域にAIが達した時にはAIが最初から全て行なうのでそもそもチェックも不要になる
2023/08/05(土) 12:36:48.81ID:G0xPWQV0
人間がソースコードを読んで発見できるバグなら最初からバグ入らない
164デフォルトの名無しさん
垢版 |
2023/08/05(土) 12:44:17.52ID:NzC+Rt9F
人間が読んで発見できないバグをRustが発見できるかのような言い草だな
2023/08/05(土) 12:48:32.07ID:C2ROzTMY
たぶん、いきなり初作でバグ書いたりはしないと思うのな
あとで改造したときにエンバグする
そこでコンパイルエラーになるように言語ができてる
166デフォルトの名無しさん
垢版 |
2023/08/05(土) 14:13:18.22ID:NzC+Rt9F
ChatGPT-4では検出できないが
Rustで書けば検出出来るC/C++のバグを考えようぜ
ChatGPT-4はかなり賢いので俺は既に無いと予想するよ
2023/08/05(土) 14:14:11.76ID:NzC+Rt9F
俺は既に無いと主張するが
反証1つで論破できる
2023/08/05(土) 14:42:07.80ID:z8pTYjl5
ChatGPTは、
じゃんけんの論理構造が理解できないから、じゃんけんの
プログラムのバグを発見できない。
2023/08/05(土) 15:00:11.14ID:LVFgAb7y
とりあえずシンプルなバグ
ChatGPT使い方分からんから検証は任せた
C++は長いこと書いてないから古い書き方があったらすまん

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main() {
auto names = vector<string>();
names.reserve(8);

string empty = "";
string *longest = ∅

while (true) {
string name;
cin >> name;
names.push_back(name);
if (names.back().length() > longest->length()) {
longest = &names.back();
}
cout << names.size() << " names, (longest: " << *longest << ")" << endl;
}
}
2023/08/05(土) 15:14:36.79ID:LVFgAb7y
なんか&empty;が空集合の記号に変換されて表示されてしまった…
たしかに文字参照形式だけど5chのバグ踏んだんかな
2023/08/05(土) 15:21:16.34ID:NzC+Rt9F
>>169
Thanks! そのまま貼るね
I: C++プログラムのバグを教えて欲しいのですが? コードレビューをできますか?
G: もちろんです、C++のコードを見せていただければ、そのコードのバグや改善点を提案することができます。どんなコードをレビューすればよいですか?
I: >>169のコード
ただし string *longest = は string *longest = nullptr; に修正
2023/08/05(土) 15:22:34.42ID:NzC+Rt9F
G: コードを見た結果、最初の問題点は次の行で生じます。
if (names.back().length() > longest->length()) {
G: 最初の入力が行われる前、longest ポインタは nullptr に設定されています。
したがって、デリファレンス操作(-> を使用)は無効なメモリへのアクセスを引き起こし、
これは未定義の動作につながります。
この問題を解決するためには、longest ポインタを使用する前に、
有効な string オブジェクトを指すように設定する必要があります。
コードを次のように修正することで、
最初の入力の後に longest ポインタを設定することができます。
2023/08/05(土) 15:23:56.83ID:NzC+Rt9F
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
vector<string> names;
names.reserve(8);
string *longest = nullptr;
while (true) {
string name;
cin >> name;
if (name == "exit") { // 終了コマンドを追加
break;
}
names.push_back(name);
// 入力後にポインタを初期化
if (longest == nullptr || names.back().length() > longest->length()) {
longest = &names.back();
}
cout << names.size() << " names, longest: " << *longest << endl;
}
return 0;
}
2023/08/05(土) 15:24:14.45ID:LVFgAb7y
もし空集合の記号が見えてたら&empty;(←半角)に修正してほしい
nullptrだと最初の比較で普通に死ぬから意図したバグが出ない
2023/08/05(土) 15:27:55.04ID:NzC+Rt9F
文章を解釈してオーダにない修正(exitの追加)までしている
ChatGPT-4はマルチスレッドの競合状態なんかも検出するよ
デッドロックは試してないがら無理かもね
Rustはデッドロックは検出するんだっけ?
2023/08/05(土) 15:30:21.32ID:LVFgAb7y
173見るとnullエラーは検出するけどvectorの再配置によるダングリングは見逃す感じでいいのかな
2023/08/05(土) 15:33:22.24ID:NzC+Rt9F
>>174 修正してみた
-string *longest = nullptr;
+string *longest = ∅
G: あなたのコードは、ユーザーからの入力を無限に受け取り、
最長の文字列を保持しようとしていますが、問題がいくつかあります。
まず、reserve関数はメモリを確保しますが、実際の要素数を増やすわけではありません。
したがって、push_backを使用すると、reserveで予約された領域を超えてメモリが確保されます。
しかし、それはこの特定のコードには重大な問題ではないと思われます。
大きな問題は、無限ループとポインタの管理です。
1. 無限ループ:while (true)とすると、無限ループになります。
これは、ユーザーが特定のアクション(例:特定のキーワードを入力する)を行わない限り、
永遠に終了しないプログラムを作成します。
これを解決するためには、ループを抜け出すための条件(例:空の名前が入力された場合)を設定する必要があります。
2. ポインタの管理:longestへのポインタが問題です。
names.back()が返す参照は、次にpush_backが呼び出されると無効になる可能性があります。
これは、push_backが内部の動的配列をリサイズする必要がある場合、
新しいメモリ領域に要素が移動され、古い参照が無効になるからです。
以下に修正したコードを示します。
2023/08/05(土) 15:33:27.10ID:97ZAjLd0
俺、C++ド素人で>>169が何をしているのかさっぱり分からんから、
どこが悪いのかさっぱり分からんが
でも、ChatGPTは何をしよう(しているのか)を理解して
(質問者にvectorの再配置でポンタ無効になるからと教えて)
>>171のような修正を提示するんだな。賢すぎだろ
2023/08/05(土) 15:34:42.49ID:NzC+Rt9F
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
vector<string> names;
string longest = "";
while (true) {
string name;
cin >> name;
if (name.empty()) {
break;
}
names.push_back(name);
if (names.back().length() > longest.length()) {
longest = names.back();
}
cout << names.size() << " names, (longest: " << longest << ")" << endl;
}
return 0;
}
このコードでは、longestがポインタではなく値として管理されているため、
namesの内容が変更されても影響を受けません。
また、名前が空の場合にループを抜ける条件を追加しました。
2023/08/05(土) 15:39:09.24ID:NzC+Rt9F
>>176
その通りだね
ところが>>177の修正を加えて返ってきた答えには
vectorの再配置によるダングリングを考慮してある
>>177以外の修正は俺は一切加えていない

まだ間違った答えを返すことがあるが
正解を返すポテンシャルは既にある
2023/08/05(土) 15:41:17.99ID:NzC+Rt9F
ところで>>175なんだけど
Rustってデッドロックって検出できるんだっけ?
2023/08/05(土) 15:44:11.69ID:97ZAjLd0
いま、C++で生ポンタを使うこと避けるようにするんじゃないのか
2023/08/05(土) 15:45:41.69ID:LVFgAb7y
>>174
サンクス
さすがにこのレベルだと検出できるか
(ほかに目立つバグがあるとスルーされるのかもしれないけど)
2023/08/05(土) 15:58:47.07ID:wQaB7TT9
デッドロックは人間でも解決できないパターンがあるからw
2023/08/05(土) 16:03:33.32ID:LVFgAb7y
あらゆるデッドロックを検出しようとするとデッドロックするから無理って
チューリング先生が証明してたと思う
停止性とは違うのかもしれないけどどうせ帰着ルート見つけるでしょ(適当)
2023/08/05(土) 16:22:05.73ID:z8pTYjl5
AIに関して。たまたま上手く行ったケースだけを
書いている可能性がある。
実際にやってみると変になることもあったりする
のがよくあるパターン。
2023/08/05(土) 16:44:23.90ID:NzC+Rt9F
>>186
>>171は1回だよ そのあと>>170を読んだので
チャットの途中から>>177の修正を加えて回答を生成させた
これも1回限り
ChatGPT-4を普段触っていて能力を知っていれば
納得の回答レベルだと思うけど?
2023/08/05(土) 16:52:12.45ID:z8pTYjl5
std::vector でよくある性質だけ、ChatGPTに
ハードコーディングされてる可能性がある。
2023/08/05(土) 17:30:10.13ID:YdmkUc66
>>181
デッドロックは静的に(実行せずに)検出できないことが理論的にわかっている
そのためRustを含めて任意のシステムで静的にデッドロックを検出するものは存在しない
2023/08/05(土) 17:46:13.30ID:YdmkUc66
デッドロックはロック順序が定まるように自主的対応するとして
一方でデータ競合についてはRustがデータ競合のないことを保証してくれる
2023/08/05(土) 18:41:15.10ID:NzC+Rt9F
>>190
データ競合はChatGPG-4も検出してくれる
192デフォルトの名無しさん
垢版 |
2023/08/05(土) 18:58:04.88ID:nLwYtk1m
実は俺は未来が見える。
Rustは普及しない。
いっちゃった。
ヤバイ。
2023/08/05(土) 19:24:44.46ID:YdmkUc66
>>191
ChatGPTは検出できるケースもあるだけだぞ
Rustはデータ競合を100%回避できる
そしてデータ競合は100%回避しなければならない
100%回避できる方法がある状況でそうではないChatGPTに頼るやつはバカだと断言できる
2023/08/05(土) 19:35:03.34ID:3ig1p59X
>>193
GPT4使ったてないやろ?
そんなもんじゃない
2023/08/05(土) 19:45:05.47ID:YdmkUc66
>>194
100%防がなければいけないこと(今回の例だとデータ競合)で
ChatGPTに依存するは愚の骨頂
ましてや100%防げるRustが存在する状況で
2023/08/05(土) 19:56:21.43ID:ovYwnQ8g
>>195
だってRust覚えるのめんどいじゃん?
2023/08/05(土) 21:11:57.10ID:xdlV5LLb
はいRustの負け〜
2023/08/05(土) 21:31:44.37ID:Ab8yJnrX
>>196
Rustは必要な高機能が充実しているにま関わらず
洗練されていて覚えることが少なくて楽だ
C++はC++20まで把握してもまだRustの高機能に追いつけていない
2023/08/05(土) 21:39:17.35ID:NzC+Rt9F
RustやってもCを別に覚えなきゃならないじゃん?
C++覚えればCはサブセットだし楽だよ
なによりRustはやってる人が少な過ぎて人が集まらん
2023/08/05(土) 22:16:55.85ID:lVlXn5uE
RUSTぐらいサクッと習得出来る人じゃ無ければ集まらなくって良くない?
2023/08/05(土) 22:45:10.55ID:HgL/MIsm
>>198
そういうのはdyn-upcastとかspecializationとかのRFCをstabilizeしてから言ったほうがいい
202デフォルトの名無しさん
垢版 |
2023/08/05(土) 23:31:44.33ID:Z3AMXPsc
Rustは速くsimd命令周りをstableにして欲しい。
2023/08/06(日) 00:25:51.10ID:yMFHtXLh
Rustってなんで全然普及しないの?
2023/08/06(日) 01:19:10.93ID:3wcIZOky
それはね
もう十分普及してるからだよ
2023/08/06(日) 01:22:19.33ID:qy7GXfpS
直訳すると最期って意味だから縁起が悪い
2023/08/06(日) 01:36:56.92ID:/n3JPvRf
信者の脳内でLinuxは大成功している事と同様の事也。
2023/08/06(日) 01:59:35.05ID:0QxiCITa
Linuxって史上最も普及したカーネルだと思うよ
2023/08/06(日) 02:18:54.27ID:3wcIZOky
それじゃ全然足りないってことでしょ
「信者が〜」とか言っちゃう奴って目標高過ぎというか欲張り過ぎなんだよね
どっちが信者だよって感じ
2023/08/06(日) 02:36:01.14ID:/n3JPvRf
無料なので、100均やユニクロより地位は下だということなんだがな。
2023/08/06(日) 02:37:30.46ID:/n3JPvRf
Linuxと比べれば底辺の食べ物みたいに馬鹿にされる
サイゼリヤやマクドナルドの方が遥かに高級ということになる。
2023/08/06(日) 02:45:19.77ID:/n3JPvRf
そしてgccやemacsやnasmは貧者のツール。
2023/08/06(日) 02:45:25.28ID:0QxiCITa
まーた始まった
2023/08/06(日) 02:48:06.95ID:0QxiCITa
>>211
50代だと思うけど引きこもりなのかな?
力になるよ
2023/08/06(日) 02:51:33.28ID:/n3JPvRf
無料なんだから、貧者のツールだ。
当たり前。
2023/08/06(日) 02:59:11.89ID:/n3JPvRf
アメリカ製のSNSが存続できているのは、アメリカ政府の
補助金のおかげ。YouTubeは個人情報をアメリカ政府に
差し出す見返りに政府から補助金を得ている。
2023/08/06(日) 02:59:19.72ID:0QxiCITa
>>214
引きこもってるの?
2023/08/06(日) 03:01:24.81ID:0QxiCITa
>>215
周りに気兼ねなく話せる人はいるかい?
2023/08/06(日) 03:07:03.60ID:/n3JPvRf
どうでもいい。
2023/08/06(日) 03:21:25.88ID:FBMr5AjE
Rust叩きをしている人たちがちょっと頭のおかしい人たちばかりなのは偶然なのか必然なのか
2023/08/06(日) 03:48:28.55ID:/n3JPvRf
Rust信者は域外者に対する批判に暇が無いね。
2023/08/06(日) 06:57:45.77ID:G1mNNcoT
>>214
C++も無料だから、それを言ったらどっこいどっこい
222デフォルトの名無しさん
垢版 |
2023/08/06(日) 07:19:58.01ID:V97WePr1
スレのレベルがまた一段と下がってるね
低学年の小学生みたいw
2023/08/06(日) 07:47:32.01ID:yMFHtXLh
↑これってボット?
224デフォルトの名無しさん
垢版 |
2023/08/06(日) 09:15:11.08ID:xJ7XeiL9
>>170
5chのバグではない
仕様通りの動作
225デフォルトの名無しさん
垢版 |
2023/08/06(日) 09:23:00.88ID:xJ7XeiL9
>>199-200
今Rustで募集すると間違いなくゲーマーが応募してくる
2023/08/06(日) 09:56:02.83ID:ctz5BWzh
>>221
ほとんどのプロは無料環境を使ってない。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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