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

■ このスレッドは過去ログ倉庫に格納されています
2023/04/02(日) 00:42:57.53ID:W9/nq+tL
「C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」

っていうスレ。

前スレ: 結局C++とRustってどっちが良いの?
https://mevius.5ch.net/test/read.cgi/tech/1677286186/
2023/04/21(金) 02:33:15.05ID:9IEMPFWw
かのIntel(当時)が頑張ってもこんなもん(こんなことになる)か
難しいもんなんだな。。

俺にできないだけで、本気出せば難しくないもんかと思ってたのに
2023/04/21(金) 05:31:12.23ID:7fROJFuD
具体的に誰が頑張ったのか全然わからない
いまさら英雄化してももう遅い
338デフォルトの名無しさん
垢版 |
2023/04/21(金) 09:34:15.68ID:Jt0l0JSP
>>330
>安全にも書けるのは分かる(それはC++も同じこと)
C++でもRustと同じレベルで安全に書けるというのはさすがにウソでしょ
複オジの説明がショボいからと言ってウソはダメだよ
2023/04/21(金) 10:24:01.60ID:YWjwap1N
play.rust-lang.org で
use rstk::*; とか
use wx; とか
もちろん出来ない訳だが
use したときに一瞬一覧で選べるものが出て来るので
これの一覧をテキストファイルで欲しいんだが
どこで観れますか?
2023/04/21(金) 10:33:13.77ID:YWjwap1N
>C++に勝ってると主張するために普段はunsafeのことを脇に置いてメリットばっかり語ってるのに
>性能で負けてるって言われて悔しいからって急にget_uncheckedの話持ち出す

ほんそれ
341デフォルトの名無しさん
垢版 |
2023/04/21(金) 11:32:23.34ID:obBiE3Vg
>>339
crates.ioのダウンロードTop100とその依存クレート
入れ替えとかどう対処してるのかは知らん
playgroundのヘルプにリスト(Cargo.toml)へのリンクがある
2023/04/21(金) 15:41:39.16ID:YWjwap1N
>>341
thx!
自分用のCargo.tomlに置き換えたいときは?
343デフォルトの名無しさん
垢版 |
2023/04/21(金) 16:08:14.43ID:e/N20Lgf
>>342
それは自分の環境でどうぞ
344デフォルトの名無しさん
垢版 |
2023/04/21(金) 21:37:21.45ID:AfLtEamq
控えめに言って Rust は超マゾ言語
2023/04/21(金) 23:59:16.40ID:LZBHeARm
C++もRustも基本的には変わらん
C++で常に安全に書ける人にとってライフタイムなんてすぐ理解できて困らん普通のことだった
Rustでいいと思ったのはイテレータメソッドチェーンのシンプルさとか
あらゆる部分でパターンマッチングできる点とか
2023/04/22(土) 00:04:17.51ID:L3G+XloM
GC言語は良いと思うし使いけど可視化する気にならない
GC言語が多過ぎるから
Python並みの人気でも過半数に支持されるとは思えない
2023/04/22(土) 01:08:10.55ID:6MRD/fZf
ライフタイム付き再帰構造体を再帰関数で回してlifetimeのvarianceで苦しむまでがボローチェッカチュートリアルです
2023/04/22(土) 05:11:35.36ID:ve/ll5uR
Rustの弱点突きまくり
2023/04/22(土) 07:15:46.36ID:iD47eBZH
言語(Rust含む)がせっかく親切にしてくれてるのに、その虚を突く

…っていうか、虚を天然で踏み抜いちゃうのが、シロウトなんだよなあ 俺含む(自戒
350デフォルトの名無しさん
垢版 |
2023/04/22(土) 07:19:16.96ID:UYc1nlSd
PythonのAI系のライブラリを
rustで作り直したら爆速になるのかな?
2023/04/22(土) 07:23:17.49ID:iD47eBZH
大人気のCUDA版は、CUDAでできてるから Pythonで操ってるだけ
352デフォルトの名無しさん
垢版 |
2023/04/22(土) 09:44:15.55ID:UBHQks3G
C++のライフタイムが本当に簡単ならライフタイム系のバグを100%検知できるツールなんて簡単に作れるはずだよね?
2023/04/22(土) 09:50:17.61ID:OMpDwvP8
>>352
そういう意味ではなく逆だろ
C++でもともなコードを書けているプログラマーはRustでライフタイムをすぐ習得してしまう話だろう
逆にライフタイムを難しいと言ってるプログラマーはC++で込み入ってくると正しいコードを書けない
2023/04/22(土) 10:40:59.94ID:iD47eBZH
>>352
いくらか指針・実装はあったんだけど、決定打に欠いた
いろいろと自由すぎたんだよ

Rustのやり方が業界標準になったら、C++がそれを取り込むのは早いと思う
2023/04/22(土) 10:48:04.53ID:/en2DlgL
varianceをOOPにたとえると
変数の型を宣言できないが基底クラスなら宣言できる
という理解でいいんでしょ
変数の型を宣言するツールを簡単に作れるかが問題なのでは
356デフォルトの名無しさん
垢版 |
2023/04/22(土) 10:54:03.92ID:8hXabeY8
ポインタと同じでライフタイムも概念を理解するのは何も難しいことはない
バグなしで使いこなすのが難しいだけ
それだからRustは厳しめのルールにしてコンパイラでチェックする
C++が脆弱性を量産してきた負の遺産を継承しないためにね
2023/04/22(土) 11:23:28.94ID:XW9UuYWq
>>356
所有権システムは単純に使いづらい
インスタンス作るときのデフォルトにされるのはちょっと...
2023/04/22(土) 12:09:24.25ID:SKSgk+MB
少し前にvectorの再配置の例が出てたけど
他で参照してる間にデータを操作して参照がおかしくなる事故が後を絶たないから仕方ない
普通のイテレータで走査してる最中に要素を削除したりとか
2023/04/22(土) 12:57:45.65ID:/en2DlgL
>>358
参照カウントが2以上ならエラーでいい
実行時エラーなら難しくない
コンパイル時が難しいだけ
2023/04/22(土) 13:13:05.95ID:XW9UuYWq
>>358
それはどういう状況かな?
2023/04/22(土) 13:44:44.50ID:3JkCsMe2
RustはまだMicrosoftがVisualRust出してないしなあ…
2023/04/22(土) 15:25:53.88ID:V6k8LZu5
Microsoft方言なRustとかはいらん
2023/04/22(土) 15:57:35.73ID:nX3yaBf6
>>357
所有権システムはC++もRustも基本的に同じで難しいところはない
表記方法は両者で異なるがRustの方がシンプルに整理されていてわかりやすいだろう

そのインスタンスの挙動についてもRustは新たな型宣言時に特に指定しなければムーブ型になるが
コピー型にしたいならばこう宣言すれば挙動がムーブではなくコピーとなる
#[derive(Copy, Clone)]
struct Foo(i32, i32);
let mut p = Foo(123, 456);
let q = p;
p.0 = 789;
assert!(p.0 != q.0);
assert!(p.1 == q.1);
2023/04/22(土) 17:41:44.05ID:+yUQZ3bR
>>359
実行時に参照カウントが2以上ならエラーとなる型もRustでは作れるよ
でももっと便利な仕様「実行時に(可変でない)参照カウントはいくつ増えてもOKだけど、可変参照を得る時だけは独占的つまり参照カウントが0でないとエラー」がもっと便利
標準ライブラリRefCell<T>がその仕様そのままで
RefCell<T>自体の可変参照を持っていなくて(非可変)参照を持ってるだけでもTを書き換えることができちゃう
Rustの厳しい可変参照ルールを無視できるから便利だね
いわゆる内部可変性と呼ばれる型の一つ
2023/04/22(土) 18:24:59.90ID:/en2DlgL
>>364
Rc<T>とRefCell<T>に互換性のようなものはないから「もっと便利」というのは違和感がある
2023/04/22(土) 18:42:18.67ID:+yUQZ3bR
>>365
Rcはジャンルも機能も動作も利用方法も全く異なりその話は誰もしていないよ
あなたが>>359で言った、
> 参照カウントが2以上ならエラーでいい
> 実行時エラーなら難しくない
> コンパイル時が難しいだけ
は、Rcとは全く異なる挙動でありRcとは無関係

あなたが言っている挙動「参照カウントが2以上ならエラー」は「sIngle reader or single writer」
そしてRefCellはその上位の「multiple readers or single writer」
つまりRefCellはもっと便利であり利用面での上位互換
2023/04/22(土) 18:45:43.59ID:pFB+K5t4
話が専門的になってきているけれども、「メモリー関連バグ」はバグの一部に
過ぎず、それが完全に防げたとしてもバグが入り込む余地はたくさんある。
例えば、JSやJava、C#、BASIC、Pythonなどの言語はメモリー関連バグは
入り込まないが、バグはいくらでも入り込む。
2023/04/22(土) 18:51:49.24ID:iD47eBZH
Javaはぬるぽぬるぽいってたけどねえ いまさらだけど、あれなんだったんだろう (nullptrは使ってます
2023/04/22(土) 19:01:05.60ID:pFB+K5t4
>>367
追加として、Ruby、PHP、Perl なども同様。
メモリー関連バグは入らないが、論理バグはいくらでも入り込む。
だから、ネットショッピングサイトをこれらの言語で作っても、
データ漏洩や、データ消失(顧客情報の間違った削除など)、
インターフェースのバグ、買いたいものが買えない、別人のアカウントで
買った事になってしまう、あるいは、セキュリティーホールなどは、
入り込む余地はいくらでもある。
15 番の人が購入しているのに、16番の人を購入したことにしてしまったりとか。
または、ボタンを一回押したのに、2回購入したことになってしまったとか。
キャンセルボタンを押しても動作しないとか。
または、キャンセルすると、14番の人の購入がキャンセルしてしまったりとか。
そういうのは基本的に論理バグであり、メモリー関連バグとは別に発生しうる。
2023/04/22(土) 19:24:40.58ID:2MwGVm8+
>>367
GC言語を含めた多くの言語で発生する普遍的なバグがデータ競合
データ競合は様々なものがあってマルチスレッドでは当然発生するだけでなく
スレッドを利用しなくても部分参照が可能な言語ではデータ競合が容易に発生してしまう

後者の例はこのスレ既出でベクター型においてその何番目かの要素の参照を持っているときに
要素追加が行われると再配置によりダングリングを引き起こしたり
要素挿入が行われると再配置がなくてもズレて意図せず異なる要素を指してしまうデータ競合が起きる

>>369の例の別の人の購入データになってしまったりするバグも様々なデータ競合により引き起こされることが多い

このように色々なデータ競合がプログラミングで発生するが
Rustではデータ競合が発生せずコンパイルエラーとなる
これは非常に大きな強み
2023/04/22(土) 19:37:17.80ID:pFB+K5t4
>>370
> 369の例の別の人の購入データになってしまったりするバグも様々なデータ競合により引き起こされることが多い
データ競合が発生しなくても、単なる論理ミスでも発生するから、Rustでも
ちゃんと正しい論理を書かなければ発生する。
2023/04/22(土) 19:40:54.01ID:iD47eBZH
ポインタは究極の共有オブジェクトだから、同様に管理する習慣が付けば、データ競合のミスは減りそうだよね
2023/04/22(土) 19:50:59.03ID:2MwGVm8+
>>371
それはビジネスロジックの論理バグ
プログラミング言語が何であろうと関係なく生じるのでこのスレの目的である言語の比較に無関係

そしてプログラミングのデータの取り扱いで発生する論理バグがデータ競合
データ競合はバグを引き起こしうるためプログラマーが回避しなければならない
Rustはコンパイルが通ればデータ競合がないことが保証される
任意のプログラミング言語に対してRustが有利
2023/04/22(土) 20:01:02.96ID:pFB+K5t4
メモリやデータ競合に関係したバグの送りにくさRustは有利ではある。
ただ、言語に求められるのはそれだけではない。
2023/04/22(土) 20:07:00.96ID:2MwGVm8+
>>374
他の言語では起きないまたは起こりにくいバグが
Rustだと起きるまたは起きやすい例ってある?
その例を示せないとRustが最強になってしまうよ
2023/04/22(土) 20:10:28.97ID:YMOkCFj1
Visual Studio でC++のMFCや C#のWPFのようにGUI開発がサポートされたら新規ソフトはRustになっていきそう
逆に現状のままなら開発元のMozilla以外はLinuxカーネルみたいなマニアックな用途だけで終わりそう
2023/04/22(土) 20:13:15.69ID:pFB+K5t4
>>375
あるけど言わない。それは自分で気付かないと。
なぜ言わないかと言えば、その情報を元に論文書いたり、
国から研究費貰ったりする人がいるから。
2023/04/22(土) 20:17:17.43ID:ZakZodsv
let mut hoge: Vec<Vec<String>> = vec![Vec::with_capacity(3); 4];
のとき
hoge.len() は 4
hoge[0].len() は 0
hoge[0].capacity() は 3 を期待していたのですが何故か常に 0 になってしまいます

Why?
2023/04/22(土) 20:58:04.53ID:SKSgk+MB
vec![expr; n]は内部でclone使うんだけど、Vecのcloneはcapacityまでは複製しないみたい
複製はできるだけ余剰メモリをカットしたい気がするから仕様だろうな

fn main() {
let a: Vec<String> = Vec::with_capacity(10);
let b = a.clone();

println!("{}, {}", a.capacity(), b.capacity()); // 10, 0
}
2023/04/22(土) 20:58:54.89ID:+yUQZ3bR
データ競合を防ぐのは簡単で「multiple readers or single writer」を守れば防げる
どの言語でもそのような形になるようにプログラマーが解決する
ただしRust以外の言語はデータ競合があっても検出できずに競合を起こしたまま動いてしまいバグとなる

>>377
存在しない

>>378
vec!は回数分のcloneするだけ
そしてcloneはcapacityを保持しない
だからその0となる挙動は仕様通りで正しい
その3となる挙動にしたいなら例えば
Vec::from_iter((0..4).map(|_| Vec::with_capacity(3)));
あるいはrepeat_withでtake(4)
2023/04/22(土) 21:09:18.75ID:iios9sCz
やっぱりC++のstd::variant欲しいっすな
Refに対応したCow作ったけどなかなかだるい(というか標準で対応してくれの感が激しかった)し
こんどはRc<RefCell<T>>と&Tのenumが欲しい
わざわざ作るのもだるい
2023/04/22(土) 21:09:58.95ID:XW9UuYWq
制約は安全性を高めるためなんだろうけど率直に言ってウザいからな
他人に書かせるならRustを選ぶかもしれんがw
自分で書くものにはRustは不要かな
2023/04/22(土) 21:26:41.96ID:suBXXmuN
マルチスレッドの主な用途は数値計算なんだけど、数値計算だと
データ競合が起きるような場合はシミュレーション結果がおかしくなるので
テスト段階で分かることが多い。また、脆弱性とも関係無い。
脆弱性が問題になるのは、主にブラウザ。
自分のマシンのセキュリティーホールに悪さをするアホはいない。
つまり、脆弱性とはネットと関係する場合にのみおきると言っても過言ではない。
だから、シミュレーションとかは脆弱性とは関係が無いので、
データ競合が起きたら、結果がおかしくなるだけ。
2023/04/22(土) 21:26:48.13ID:2MwGVm8+
>>377
ついに嘘つき敗北宣言『あるけど言わない。』を出したのか
2023/04/22(土) 21:29:51.72ID:2MwGVm8+
>>382
Rustでウザい制約って何かある?
必要な制約は当然あるけど不要な制約はないんじゃないか
2023/04/22(土) 21:30:53.79ID:suBXXmuN
>>384
いや、有る。
2023/04/22(土) 21:36:25.12ID:suBXXmuN
ここの人達は、自分と意見が合わない人を馬鹿だと思ってる気がするけど、
それは違うぞ。
俺は貴重な意見を言っている。
まあ、日本全国探しても貴重だろう。
だけど、全部は大事なところは言わん。
2023/04/22(土) 21:38:49.06ID:2MwGVm8+
>>383
データ競合はタイミングなどで稀にしか発生しないものも多い
テストで何度か実行すれば必ず判明するわけではない
そして特定の分野でのみ発生するものではない

>>386
もし>>375の例があると主張するなら例を出しなよ
2023/04/22(土) 21:39:07.62ID:OFX5zT+6
無能である上に突っ込まれるのが怖くて意見表明すらできない
負け犬極まれりだな
2023/04/22(土) 21:41:53.93ID:suBXXmuN
>>388
>データ競合はタイミングなどで稀にしか発生しないものも多い
数学的に考えているから、細かいミスが取れた後は大丈夫。
脳内で証明済みのアルゴリズムを使うから。
才能の無い人は誰かが考えたアルゴリズムを真似て使うのだろう。
俺はそんなことはしてない。
2023/04/22(土) 21:42:53.35ID:suBXXmuN
>>389
自分の周りと同じにしないほうがいいぞ。
付きぬけている人をみたことがないみたいだな。
2023/04/22(土) 21:46:36.12ID:XW9UuYWq
>>377
自分がそれをネタに論文を書く予定でもないなら
別に良いのでは?
2023/04/22(土) 21:49:17.49ID:suBXXmuN
>>392
姿を隠して情報収集ってか。
2023/04/22(土) 21:50:20.64ID:+yUQZ3bR
>>390
データ競合を引き起こしてきたプログラマーたちは皆そのように言っている
「自分はデータ競合を引き起こさないように(アルゴリズムを考えて)コードを書いた」
しかし実際にはデータ競合が起きた
データ競合はRustのようにプログラミング言語で防いだほうが好ましい
2023/04/22(土) 21:51:10.61ID:suBXXmuN
>>394
俺とそいつらの頭脳は同じではない。
2023/04/22(土) 21:54:28.66ID:suBXXmuN
Mozillaは、凡庸な技術者しかいないからRustが必要になった。
それだけの話。
もっとも、普通の企業はそんなもんだろうが。
2023/04/22(土) 21:55:58.32ID:XW9UuYWq
データ競合起きたら意図と異なりデタラメな結果になるので
すぐ分かると思うよ
2023/04/22(土) 21:57:39.05ID:XW9UuYWq
>>393
こんなところで姿を出す訳にいかないじゃないか!
俺はコンパイラ屋ではない
2023/04/22(土) 22:00:29.73ID:SKSgk+MB
>>385
文字列全体(String)とその一部の参照(&str)を同じ構造体に詰めないとか
オブジェクト指向言語に慣れた人だと辛いと思う
厳密にはC++でも難しい(&strの初期値で悩む)けどこっちはまだごまかせるし

上の方でもちょっと書いたけど行ロックを意識したDBのテーブル設計に近い印象
とりあえず全項目を1つのテーブルに突っ込むみたいな方法だと途中で引っ掛かるから
大雑把な人には面倒な言語かもしれない
2023/04/22(土) 22:03:16.47ID:suBXXmuN
>>397
俺の経験から言ってもそう思う。
テスト時に働かないような「if 文」を入れたりしない限りは。
バグが取れない人は、変なところに if 文を入れている。
数学的な理想世界では基本的には if は存在しないことがおおい。最小と最大の
付近以外では。
だから、数学的に考えられる人は if 文は最低限しか入れないで済む。
このルールを守っていれば、滅多なことで妙なバグは入らない。
2023/04/22(土) 22:11:27.43ID:+yUQZ3bR
>>396
つまりRust採用を進めているGoogleやMicrosoftやAWSなどIT各社は凡庸な技術者しかいないからRustが必要になったとの主張??
キチガイじみてるね
2023/04/22(土) 22:15:02.54ID:suBXXmuN
>>401
いや、Microsoftは、「凡庸な技術者」もいるが、優秀なのも居る。
2023/04/22(土) 22:19:29.86ID:2MwGVm8+
>>399
それはString内容が変わったり空になったら意味のないデータになったり無効メモリを指すから、非GC言語でその設計はよくないね
Rust本スレで話題があったようにもう少し詳細な用途毎にstring_cacheやtyped_arenaを使ったりそういう自作設計をして安全と効率を両立させるべきかと
2023/04/22(土) 22:35:35.61ID:XW9UuYWq
>>401
使ってる例が出始めたってだけで
GoogleやMicrosoftやAWSで書かれる全コードの何%なのやら...
405デフォルトの名無しさん
垢版 |
2023/04/22(土) 22:41:58.79ID:DWNDga3I
>>383
>マルチスレッドの主な用途は数値計算なんだけど
へぇーw
406デフォルトの名無しさん
垢版 |
2023/04/22(土) 22:42:49.07ID:Bx6uBAXU
「数学的」な人だったかww
2023/04/22(土) 22:42:53.24ID:/en2DlgL
rustcがソースコードを採点してくれるのに
なぜ採点結果ではなく書いた文字の量を競っているんだ
2023/04/23(日) 00:09:49.30ID:XReMgABv
>>399
>文字列全体(String)とその一部の参照(&str)を同じ構造体に詰めないとか
JavaやC#でそういうことする??
2023/04/23(日) 00:35:50.04ID:s119dOFU
>>408
例えばURL全体を受け取ってパースした結果の部分文字列を保持する場合とか

JavaとC#は全部Stringにするから関係ないけどRustで同じことをしようとしたときに
本体のStringと一緒に部分文字列の&strを持ちたいと考えるかもしれない

あと?を2つ重ねるとなんか頭悪そうに感じるからやめたほうが…
2023/04/23(日) 00:46:01.33ID:XReMgABv
>>409
完全にダメな設計だね
??は皮肉だから
411デフォルトの名無しさん
垢版 |
2023/04/23(日) 00:52:26.01ID:hjyESha+
オブジェクト指向全く関係ないな
2023/04/23(日) 03:53:33.10ID:a38AwUhr
>>397
データ競合は実行タイミングや入力データなどによって発生したりしなかったりすることもある
だから実行してみて不具合が無ければ大丈夫というものではない

>>400
そういうお子様プログラミングしかしたことがないやつに複雑な状況でのコードは理解できないだろう
2023/04/23(日) 08:58:13.51ID:XDoVkNXv
>>380
>ただしRust以外の言語はデータ競合があっても検出できずに競合を起こしたまま動いてしまいバグとなる

Rustで実行時にデッドロックを回避する方法を教えてくれ
2023/04/23(日) 09:05:15.73ID:mbhtlP00
デッドロックはデータ競合ではなく無関係
デッドロックはロック順序を守ることで防ぐ
2023/04/23(日) 09:57:26.70ID:yqsq+eY1
rustコンパイラじゃ防げない
2023/04/23(日) 10:01:44.66ID:bH2G2Xj3
Rust初心者だけど、シングルスレッドでしか動かさない場合にも、
マルチスレッドで起きるデータ競合を気にしてるってことよね
それはめんどくさくない?
2023/04/23(日) 10:07:31.97ID:yqsq+eY1
気にしてるのはコンパイラ
418デフォルトの名無しさん
垢版 |
2023/04/23(日) 10:21:19.31ID:mWycOQ2H
>>416
シングルスレッドでも起こる
データ競合が防げるというのはメモリ安全性の副産物
2023/04/23(日) 10:47:08.19ID:SLeXOLnV
ライブラリがマルチスレッドかもしれんだろ、そういうとこ油断しちゃだめだw
2023/04/23(日) 10:59:51.10ID:yqsq+eY1
>>418
>データ競合が防げるというのはメモリ安全性の副産物
関係ないのでは?
2023/04/23(日) 11:05:41.04ID:5RizofHX
>>391-392
Qi痛のネタ程度の話を論文って言っちゃう人って

>>396
それだ!
2023/04/23(日) 11:26:29.64ID:L76w/S48
フリーソフトで遊んでる場合にも、お金に関する問題を気にしてる奴が一番めんどくさいぞ
2023/04/23(日) 11:41:38.27ID:SLeXOLnV
各社だいたい優秀なんだろうけど、飲酒コーディングするような香具師も混じってるってことだよ
デバフだデバフw
2023/04/23(日) 11:45:11.86ID:s119dOFU
参照のread-writeロックもどきは↓みたいなコードを防いでる

fn main() {
let mut a = vec![42];
let r = &a[0];
println!("{r}"); // 42
a.clear();
println!("{r}"); // もういないよ
}
2023/04/23(日) 13:20:52.91ID:L76w/S48
a[0]をコピーまたはcloneできる場合にも&a[0]を使うのはめんどくさい
Tをコピーまたはcloneできる場合にもRefCell<T>を使うのはめんどくさい
2023/04/23(日) 13:21:04.29ID:XDoVkNXv
>>409-410
Rust の hoge()? って頭悪そうだよな
2023/04/23(日) 13:43:48.93ID:s119dOFU
C#は
int? hoge = null;
int fuga = hoge ?? -1;
まで進歩してるからhoge()?くらいなら余裕
2023/04/23(日) 18:41:22.14ID:y593Lq73
C/C++ で安全なコードを描ける人からすれば Rust なんてホント苦行でしかない
全然生産性上がらないぞω
2023/04/23(日) 19:13:33.85ID:1wjDCw27
>>428
逆だな
C++で安全なコードを書ける人にとってRustは楽勝
430デフォルトの名無しさん
垢版 |
2023/04/23(日) 20:15:54.20ID:njNVQguc
C/C++で安全なコードを描けると思ってるやつはもはやレガシープログラマー
2023/04/23(日) 20:20:12.47ID:Rh211EN3
つまり結局のところRustは苦しいと
そう思わないやつはC++で安全なコードを書けると思い込んでいる人であると
それか大したプログラムを書いたことがないか
2023/04/23(日) 20:38:12.61ID:SLeXOLnV
酷い目に遭ったことがないんだろう
慣れるまでに、自分が踏み抜いたり、他人が踏み抜いたとばっちりを食ったりするんだけどね

ごりごり汗が書けるやつは、たしかにレガシ コーダだな
ちゃんと書けるなら、レガシにしてレジェンド
2023/04/23(日) 20:42:24.61ID:L76w/S48
Cは複雑なGUIを作らず、スクリプトのインタプリタを作るから結構安全だ
外見重視でインタプリタ言語嫌いなOOPが危ない
2023/04/23(日) 22:43:02.30ID:9nArI2JN
>>425
コピーできる型でコピーが望ましいならそうすればいいだけだぞ
シーケンシャルにポインタを進めていく方が望ましい時はコピー可能か否かに関係なく参照のイテレータを使えばいい
コピーできる型で内部可変性が欲しいならばRefCellではなくCellを使え
2023/04/23(日) 22:48:39.88ID:9nArI2JN
>>428
コンパイル時点でメモリ問題やデータ競合の無いことが保証されるRustはもちろん開発効率がよい
時間と手間の大きな節約になる
2023/04/23(日) 23:07:42.53ID:yqsq+eY1
「C/C++ で安全なコードを描ける」=「メモリ問題やデータ競合の無」く書ける
なのでは?
経験を積むと書けるようになるよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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