「C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」
っていうスレ。
前スレ: 結局C++とRustってどっちが良いの?
https://mevius.5ch.net/test/read.cgi/tech/1677286186/
探検
結局C++とRustってどっちが良いの? 2traits
■ このスレッドは過去ログ倉庫に格納されています
2023/04/02(日) 00:42:57.53ID:W9/nq+tL
366デフォルトの名無しさん
2023/04/22(土) 18:42:18.67ID:+yUQZ3bR367デフォルトの名無しさん
2023/04/22(土) 18:45:43.59ID:pFB+K5t4 話が専門的になってきているけれども、「メモリー関連バグ」はバグの一部に
過ぎず、それが完全に防げたとしてもバグが入り込む余地はたくさんある。
例えば、JSやJava、C#、BASIC、Pythonなどの言語はメモリー関連バグは
入り込まないが、バグはいくらでも入り込む。
過ぎず、それが完全に防げたとしてもバグが入り込む余地はたくさんある。
例えば、JSやJava、C#、BASIC、Pythonなどの言語はメモリー関連バグは
入り込まないが、バグはいくらでも入り込む。
368デフォルトの名無しさん
2023/04/22(土) 18:51:49.24ID:iD47eBZH Javaはぬるぽぬるぽいってたけどねえ いまさらだけど、あれなんだったんだろう (nullptrは使ってます
369デフォルトの名無しさん
2023/04/22(土) 19:01:05.60ID:pFB+K5t4 >>367
追加として、Ruby、PHP、Perl なども同様。
メモリー関連バグは入らないが、論理バグはいくらでも入り込む。
だから、ネットショッピングサイトをこれらの言語で作っても、
データ漏洩や、データ消失(顧客情報の間違った削除など)、
インターフェースのバグ、買いたいものが買えない、別人のアカウントで
買った事になってしまう、あるいは、セキュリティーホールなどは、
入り込む余地はいくらでもある。
15 番の人が購入しているのに、16番の人を購入したことにしてしまったりとか。
または、ボタンを一回押したのに、2回購入したことになってしまったとか。
キャンセルボタンを押しても動作しないとか。
または、キャンセルすると、14番の人の購入がキャンセルしてしまったりとか。
そういうのは基本的に論理バグであり、メモリー関連バグとは別に発生しうる。
追加として、Ruby、PHP、Perl なども同様。
メモリー関連バグは入らないが、論理バグはいくらでも入り込む。
だから、ネットショッピングサイトをこれらの言語で作っても、
データ漏洩や、データ消失(顧客情報の間違った削除など)、
インターフェースのバグ、買いたいものが買えない、別人のアカウントで
買った事になってしまう、あるいは、セキュリティーホールなどは、
入り込む余地はいくらでもある。
15 番の人が購入しているのに、16番の人を購入したことにしてしまったりとか。
または、ボタンを一回押したのに、2回購入したことになってしまったとか。
キャンセルボタンを押しても動作しないとか。
または、キャンセルすると、14番の人の購入がキャンセルしてしまったりとか。
そういうのは基本的に論理バグであり、メモリー関連バグとは別に発生しうる。
370デフォルトの名無しさん
2023/04/22(土) 19:24:40.58ID:2MwGVm8+ >>367
GC言語を含めた多くの言語で発生する普遍的なバグがデータ競合
データ競合は様々なものがあってマルチスレッドでは当然発生するだけでなく
スレッドを利用しなくても部分参照が可能な言語ではデータ競合が容易に発生してしまう
後者の例はこのスレ既出でベクター型においてその何番目かの要素の参照を持っているときに
要素追加が行われると再配置によりダングリングを引き起こしたり
要素挿入が行われると再配置がなくてもズレて意図せず異なる要素を指してしまうデータ競合が起きる
>>369の例の別の人の購入データになってしまったりするバグも様々なデータ競合により引き起こされることが多い
このように色々なデータ競合がプログラミングで発生するが
Rustではデータ競合が発生せずコンパイルエラーとなる
これは非常に大きな強み
GC言語を含めた多くの言語で発生する普遍的なバグがデータ競合
データ競合は様々なものがあってマルチスレッドでは当然発生するだけでなく
スレッドを利用しなくても部分参照が可能な言語ではデータ競合が容易に発生してしまう
後者の例はこのスレ既出でベクター型においてその何番目かの要素の参照を持っているときに
要素追加が行われると再配置によりダングリングを引き起こしたり
要素挿入が行われると再配置がなくてもズレて意図せず異なる要素を指してしまうデータ競合が起きる
>>369の例の別の人の購入データになってしまったりするバグも様々なデータ競合により引き起こされることが多い
このように色々なデータ競合がプログラミングで発生するが
Rustではデータ競合が発生せずコンパイルエラーとなる
これは非常に大きな強み
371デフォルトの名無しさん
2023/04/22(土) 19:37:17.80ID:pFB+K5t4 >>370
> 369の例の別の人の購入データになってしまったりするバグも様々なデータ競合により引き起こされることが多い
データ競合が発生しなくても、単なる論理ミスでも発生するから、Rustでも
ちゃんと正しい論理を書かなければ発生する。
> 369の例の別の人の購入データになってしまったりするバグも様々なデータ競合により引き起こされることが多い
データ競合が発生しなくても、単なる論理ミスでも発生するから、Rustでも
ちゃんと正しい論理を書かなければ発生する。
372デフォルトの名無しさん
2023/04/22(土) 19:40:54.01ID:iD47eBZH ポインタは究極の共有オブジェクトだから、同様に管理する習慣が付けば、データ競合のミスは減りそうだよね
373デフォルトの名無しさん
2023/04/22(土) 19:50:59.03ID:2MwGVm8+ >>371
それはビジネスロジックの論理バグ
プログラミング言語が何であろうと関係なく生じるのでこのスレの目的である言語の比較に無関係
そしてプログラミングのデータの取り扱いで発生する論理バグがデータ競合
データ競合はバグを引き起こしうるためプログラマーが回避しなければならない
Rustはコンパイルが通ればデータ競合がないことが保証される
任意のプログラミング言語に対してRustが有利
それはビジネスロジックの論理バグ
プログラミング言語が何であろうと関係なく生じるのでこのスレの目的である言語の比較に無関係
そしてプログラミングのデータの取り扱いで発生する論理バグがデータ競合
データ競合はバグを引き起こしうるためプログラマーが回避しなければならない
Rustはコンパイルが通ればデータ競合がないことが保証される
任意のプログラミング言語に対してRustが有利
374デフォルトの名無しさん
2023/04/22(土) 20:01:02.96ID:pFB+K5t4 メモリやデータ競合に関係したバグの送りにくさRustは有利ではある。
ただ、言語に求められるのはそれだけではない。
ただ、言語に求められるのはそれだけではない。
375デフォルトの名無しさん
2023/04/22(土) 20:07:00.96ID:2MwGVm8+376デフォルトの名無しさん
2023/04/22(土) 20:10:28.97ID:YMOkCFj1 Visual Studio でC++のMFCや C#のWPFのようにGUI開発がサポートされたら新規ソフトはRustになっていきそう
逆に現状のままなら開発元のMozilla以外はLinuxカーネルみたいなマニアックな用途だけで終わりそう
逆に現状のままなら開発元のMozilla以外はLinuxカーネルみたいなマニアックな用途だけで終わりそう
377デフォルトの名無しさん
2023/04/22(土) 20:13:15.69ID:pFB+K5t4378デフォルトの名無しさん
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?
のとき
hoge.len() は 4
hoge[0].len() は 0
hoge[0].capacity() は 3 を期待していたのですが何故か常に 0 になってしまいます
Why?
379デフォルトの名無しさん
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
}
複製はできるだけ余剰メモリをカットしたい気がするから仕様だろうな
fn main() {
let a: Vec<String> = Vec::with_capacity(10);
let b = a.clone();
println!("{}, {}", a.capacity(), b.capacity()); // 10, 0
}
380デフォルトの名無しさん
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)
どの言語でもそのような形になるようにプログラマーが解決する
ただしRust以外の言語はデータ競合があっても検出できずに競合を起こしたまま動いてしまいバグとなる
>>377
存在しない
>>378
vec!は回数分のcloneするだけ
そしてcloneはcapacityを保持しない
だからその0となる挙動は仕様通りで正しい
その3となる挙動にしたいなら例えば
Vec::from_iter((0..4).map(|_| Vec::with_capacity(3)));
あるいはrepeat_withでtake(4)
381デフォルトの名無しさん
2023/04/22(土) 21:09:18.75ID:iios9sCz やっぱりC++のstd::variant欲しいっすな
Refに対応したCow作ったけどなかなかだるい(というか標準で対応してくれの感が激しかった)し
こんどはRc<RefCell<T>>と&Tのenumが欲しい
わざわざ作るのもだるい
Refに対応したCow作ったけどなかなかだるい(というか標準で対応してくれの感が激しかった)し
こんどはRc<RefCell<T>>と&Tのenumが欲しい
わざわざ作るのもだるい
382デフォルトの名無しさん
2023/04/22(土) 21:09:58.95ID:XW9UuYWq 制約は安全性を高めるためなんだろうけど率直に言ってウザいからな
他人に書かせるならRustを選ぶかもしれんがw
自分で書くものにはRustは不要かな
他人に書かせるならRustを選ぶかもしれんがw
自分で書くものにはRustは不要かな
383デフォルトの名無しさん
2023/04/22(土) 21:26:41.96ID:suBXXmuN マルチスレッドの主な用途は数値計算なんだけど、数値計算だと
データ競合が起きるような場合はシミュレーション結果がおかしくなるので
テスト段階で分かることが多い。また、脆弱性とも関係無い。
脆弱性が問題になるのは、主にブラウザ。
自分のマシンのセキュリティーホールに悪さをするアホはいない。
つまり、脆弱性とはネットと関係する場合にのみおきると言っても過言ではない。
だから、シミュレーションとかは脆弱性とは関係が無いので、
データ競合が起きたら、結果がおかしくなるだけ。
データ競合が起きるような場合はシミュレーション結果がおかしくなるので
テスト段階で分かることが多い。また、脆弱性とも関係無い。
脆弱性が問題になるのは、主にブラウザ。
自分のマシンのセキュリティーホールに悪さをするアホはいない。
つまり、脆弱性とはネットと関係する場合にのみおきると言っても過言ではない。
だから、シミュレーションとかは脆弱性とは関係が無いので、
データ競合が起きたら、結果がおかしくなるだけ。
384デフォルトの名無しさん
2023/04/22(土) 21:26:48.13ID:2MwGVm8+ >>377
ついに嘘つき敗北宣言『あるけど言わない。』を出したのか
ついに嘘つき敗北宣言『あるけど言わない。』を出したのか
385デフォルトの名無しさん
2023/04/22(土) 21:29:51.72ID:2MwGVm8+386デフォルトの名無しさん
2023/04/22(土) 21:30:53.79ID:suBXXmuN >>384
いや、有る。
いや、有る。
387デフォルトの名無しさん
2023/04/22(土) 21:36:25.12ID:suBXXmuN ここの人達は、自分と意見が合わない人を馬鹿だと思ってる気がするけど、
それは違うぞ。
俺は貴重な意見を言っている。
まあ、日本全国探しても貴重だろう。
だけど、全部は大事なところは言わん。
それは違うぞ。
俺は貴重な意見を言っている。
まあ、日本全国探しても貴重だろう。
だけど、全部は大事なところは言わん。
388デフォルトの名無しさん
2023/04/22(土) 21:38:49.06ID:2MwGVm8+389デフォルトの名無しさん
2023/04/22(土) 21:39:07.62ID:OFX5zT+6 無能である上に突っ込まれるのが怖くて意見表明すらできない
負け犬極まれりだな
負け犬極まれりだな
390デフォルトの名無しさん
2023/04/22(土) 21:41:53.93ID:suBXXmuN >>388
>データ競合はタイミングなどで稀にしか発生しないものも多い
数学的に考えているから、細かいミスが取れた後は大丈夫。
脳内で証明済みのアルゴリズムを使うから。
才能の無い人は誰かが考えたアルゴリズムを真似て使うのだろう。
俺はそんなことはしてない。
>データ競合はタイミングなどで稀にしか発生しないものも多い
数学的に考えているから、細かいミスが取れた後は大丈夫。
脳内で証明済みのアルゴリズムを使うから。
才能の無い人は誰かが考えたアルゴリズムを真似て使うのだろう。
俺はそんなことはしてない。
391デフォルトの名無しさん
2023/04/22(土) 21:42:53.35ID:suBXXmuN392デフォルトの名無しさん
2023/04/22(土) 21:46:36.12ID:XW9UuYWq393デフォルトの名無しさん
2023/04/22(土) 21:49:17.49ID:suBXXmuN >>392
姿を隠して情報収集ってか。
姿を隠して情報収集ってか。
394デフォルトの名無しさん
2023/04/22(土) 21:50:20.64ID:+yUQZ3bR >>390
データ競合を引き起こしてきたプログラマーたちは皆そのように言っている
「自分はデータ競合を引き起こさないように(アルゴリズムを考えて)コードを書いた」
しかし実際にはデータ競合が起きた
データ競合はRustのようにプログラミング言語で防いだほうが好ましい
データ競合を引き起こしてきたプログラマーたちは皆そのように言っている
「自分はデータ競合を引き起こさないように(アルゴリズムを考えて)コードを書いた」
しかし実際にはデータ競合が起きた
データ競合はRustのようにプログラミング言語で防いだほうが好ましい
395デフォルトの名無しさん
2023/04/22(土) 21:51:10.61ID:suBXXmuN >>394
俺とそいつらの頭脳は同じではない。
俺とそいつらの頭脳は同じではない。
396デフォルトの名無しさん
2023/04/22(土) 21:54:28.66ID:suBXXmuN Mozillaは、凡庸な技術者しかいないからRustが必要になった。
それだけの話。
もっとも、普通の企業はそんなもんだろうが。
それだけの話。
もっとも、普通の企業はそんなもんだろうが。
397デフォルトの名無しさん
2023/04/22(土) 21:55:58.32ID:XW9UuYWq データ競合起きたら意図と異なりデタラメな結果になるので
すぐ分かると思うよ
すぐ分かると思うよ
398デフォルトの名無しさん
2023/04/22(土) 21:57:39.05ID:XW9UuYWq399デフォルトの名無しさん
2023/04/22(土) 22:00:29.73ID:SKSgk+MB >>385
文字列全体(String)とその一部の参照(&str)を同じ構造体に詰めないとか
オブジェクト指向言語に慣れた人だと辛いと思う
厳密にはC++でも難しい(&strの初期値で悩む)けどこっちはまだごまかせるし
上の方でもちょっと書いたけど行ロックを意識したDBのテーブル設計に近い印象
とりあえず全項目を1つのテーブルに突っ込むみたいな方法だと途中で引っ掛かるから
大雑把な人には面倒な言語かもしれない
文字列全体(String)とその一部の参照(&str)を同じ構造体に詰めないとか
オブジェクト指向言語に慣れた人だと辛いと思う
厳密にはC++でも難しい(&strの初期値で悩む)けどこっちはまだごまかせるし
上の方でもちょっと書いたけど行ロックを意識したDBのテーブル設計に近い印象
とりあえず全項目を1つのテーブルに突っ込むみたいな方法だと途中で引っ掛かるから
大雑把な人には面倒な言語かもしれない
400デフォルトの名無しさん
2023/04/22(土) 22:03:16.47ID:suBXXmuN >>397
俺の経験から言ってもそう思う。
テスト時に働かないような「if 文」を入れたりしない限りは。
バグが取れない人は、変なところに if 文を入れている。
数学的な理想世界では基本的には if は存在しないことがおおい。最小と最大の
付近以外では。
だから、数学的に考えられる人は if 文は最低限しか入れないで済む。
このルールを守っていれば、滅多なことで妙なバグは入らない。
俺の経験から言ってもそう思う。
テスト時に働かないような「if 文」を入れたりしない限りは。
バグが取れない人は、変なところに if 文を入れている。
数学的な理想世界では基本的には if は存在しないことがおおい。最小と最大の
付近以外では。
だから、数学的に考えられる人は if 文は最低限しか入れないで済む。
このルールを守っていれば、滅多なことで妙なバグは入らない。
401デフォルトの名無しさん
2023/04/22(土) 22:11:27.43ID:+yUQZ3bR402デフォルトの名無しさん
2023/04/22(土) 22:15:02.54ID:suBXXmuN >>401
いや、Microsoftは、「凡庸な技術者」もいるが、優秀なのも居る。
いや、Microsoftは、「凡庸な技術者」もいるが、優秀なのも居る。
403デフォルトの名無しさん
2023/04/22(土) 22:19:29.86ID:2MwGVm8+ >>399
それはString内容が変わったり空になったら意味のないデータになったり無効メモリを指すから、非GC言語でその設計はよくないね
Rust本スレで話題があったようにもう少し詳細な用途毎にstring_cacheやtyped_arenaを使ったりそういう自作設計をして安全と効率を両立させるべきかと
それはString内容が変わったり空になったら意味のないデータになったり無効メモリを指すから、非GC言語でその設計はよくないね
Rust本スレで話題があったようにもう少し詳細な用途毎にstring_cacheやtyped_arenaを使ったりそういう自作設計をして安全と効率を両立させるべきかと
404デフォルトの名無しさん
2023/04/22(土) 22:35:35.61ID:XW9UuYWq405デフォルトの名無しさん
2023/04/22(土) 22:41:58.79ID:DWNDga3I406デフォルトの名無しさん
2023/04/22(土) 22:42:49.07ID:Bx6uBAXU 「数学的」な人だったかww
407デフォルトの名無しさん
2023/04/22(土) 22:42:53.24ID:/en2DlgL rustcがソースコードを採点してくれるのに
なぜ採点結果ではなく書いた文字の量を競っているんだ
なぜ採点結果ではなく書いた文字の量を競っているんだ
408デフォルトの名無しさん
2023/04/23(日) 00:09:49.30ID:XReMgABv409デフォルトの名無しさん
2023/04/23(日) 00:35:50.04ID:s119dOFU >>408
例えばURL全体を受け取ってパースした結果の部分文字列を保持する場合とか
JavaとC#は全部Stringにするから関係ないけどRustで同じことをしようとしたときに
本体のStringと一緒に部分文字列の&strを持ちたいと考えるかもしれない
あと?を2つ重ねるとなんか頭悪そうに感じるからやめたほうが…
例えばURL全体を受け取ってパースした結果の部分文字列を保持する場合とか
JavaとC#は全部Stringにするから関係ないけどRustで同じことをしようとしたときに
本体のStringと一緒に部分文字列の&strを持ちたいと考えるかもしれない
あと?を2つ重ねるとなんか頭悪そうに感じるからやめたほうが…
410デフォルトの名無しさん
2023/04/23(日) 00:46:01.33ID:XReMgABv411デフォルトの名無しさん
2023/04/23(日) 00:52:26.01ID:hjyESha+ オブジェクト指向全く関係ないな
412デフォルトの名無しさん
2023/04/23(日) 03:53:33.10ID:a38AwUhr413デフォルトの名無しさん
2023/04/23(日) 08:58:13.51ID:XDoVkNXv414デフォルトの名無しさん
2023/04/23(日) 09:05:15.73ID:mbhtlP00 デッドロックはデータ競合ではなく無関係
デッドロックはロック順序を守ることで防ぐ
デッドロックはロック順序を守ることで防ぐ
415デフォルトの名無しさん
2023/04/23(日) 09:57:26.70ID:yqsq+eY1 rustコンパイラじゃ防げない
416デフォルトの名無しさん
2023/04/23(日) 10:01:44.66ID:bH2G2Xj3 Rust初心者だけど、シングルスレッドでしか動かさない場合にも、
マルチスレッドで起きるデータ競合を気にしてるってことよね
それはめんどくさくない?
マルチスレッドで起きるデータ競合を気にしてるってことよね
それはめんどくさくない?
417デフォルトの名無しさん
2023/04/23(日) 10:07:31.97ID:yqsq+eY1 気にしてるのはコンパイラ
418デフォルトの名無しさん
2023/04/23(日) 10:21:19.31ID:mWycOQ2H419デフォルトの名無しさん
2023/04/23(日) 10:47:08.19ID:SLeXOLnV ライブラリがマルチスレッドかもしれんだろ、そういうとこ油断しちゃだめだw
420デフォルトの名無しさん
2023/04/23(日) 10:59:51.10ID:yqsq+eY1421デフォルトの名無しさん
2023/04/23(日) 11:05:41.04ID:5RizofHX422デフォルトの名無しさん
2023/04/23(日) 11:26:29.64ID:L76w/S48 フリーソフトで遊んでる場合にも、お金に関する問題を気にしてる奴が一番めんどくさいぞ
423デフォルトの名無しさん
2023/04/23(日) 11:41:38.27ID:SLeXOLnV 各社だいたい優秀なんだろうけど、飲酒コーディングするような香具師も混じってるってことだよ
デバフだデバフw
デバフだデバフw
424デフォルトの名無しさん
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}"); // もういないよ
}
fn main() {
let mut a = vec![42];
let r = &a[0];
println!("{r}"); // 42
a.clear();
println!("{r}"); // もういないよ
}
425デフォルトの名無しさん
2023/04/23(日) 13:20:52.91ID:L76w/S48 a[0]をコピーまたはcloneできる場合にも&a[0]を使うのはめんどくさい
Tをコピーまたはcloneできる場合にもRefCell<T>を使うのはめんどくさい
Tをコピーまたはcloneできる場合にもRefCell<T>を使うのはめんどくさい
426デフォルトの名無しさん
2023/04/23(日) 13:21:04.29ID:XDoVkNXv >>409-410
Rust の hoge()? って頭悪そうだよな
Rust の hoge()? って頭悪そうだよな
427デフォルトの名無しさん
2023/04/23(日) 13:43:48.93ID:s119dOFU C#は
int? hoge = null;
int fuga = hoge ?? -1;
まで進歩してるからhoge()?くらいなら余裕
int? hoge = null;
int fuga = hoge ?? -1;
まで進歩してるからhoge()?くらいなら余裕
428デフォルトの名無しさん
2023/04/23(日) 18:41:22.14ID:y593Lq73 C/C++ で安全なコードを描ける人からすれば Rust なんてホント苦行でしかない
全然生産性上がらないぞω
全然生産性上がらないぞω
429デフォルトの名無しさん
2023/04/23(日) 19:13:33.85ID:1wjDCw27430デフォルトの名無しさん
2023/04/23(日) 20:15:54.20ID:njNVQguc C/C++で安全なコードを描けると思ってるやつはもはやレガシープログラマー
431デフォルトの名無しさん
2023/04/23(日) 20:20:12.47ID:Rh211EN3 つまり結局のところRustは苦しいと
そう思わないやつはC++で安全なコードを書けると思い込んでいる人であると
それか大したプログラムを書いたことがないか
そう思わないやつはC++で安全なコードを書けると思い込んでいる人であると
それか大したプログラムを書いたことがないか
432デフォルトの名無しさん
2023/04/23(日) 20:38:12.61ID:SLeXOLnV 酷い目に遭ったことがないんだろう
慣れるまでに、自分が踏み抜いたり、他人が踏み抜いたとばっちりを食ったりするんだけどね
ごりごり汗が書けるやつは、たしかにレガシ コーダだな
ちゃんと書けるなら、レガシにしてレジェンド
慣れるまでに、自分が踏み抜いたり、他人が踏み抜いたとばっちりを食ったりするんだけどね
ごりごり汗が書けるやつは、たしかにレガシ コーダだな
ちゃんと書けるなら、レガシにしてレジェンド
433デフォルトの名無しさん
2023/04/23(日) 20:42:24.61ID:L76w/S48 Cは複雑なGUIを作らず、スクリプトのインタプリタを作るから結構安全だ
外見重視でインタプリタ言語嫌いなOOPが危ない
外見重視でインタプリタ言語嫌いなOOPが危ない
434デフォルトの名無しさん
2023/04/23(日) 22:43:02.30ID:9nArI2JN >>425
コピーできる型でコピーが望ましいならそうすればいいだけだぞ
シーケンシャルにポインタを進めていく方が望ましい時はコピー可能か否かに関係なく参照のイテレータを使えばいい
コピーできる型で内部可変性が欲しいならばRefCellではなくCellを使え
コピーできる型でコピーが望ましいならそうすればいいだけだぞ
シーケンシャルにポインタを進めていく方が望ましい時はコピー可能か否かに関係なく参照のイテレータを使えばいい
コピーできる型で内部可変性が欲しいならばRefCellではなくCellを使え
435デフォルトの名無しさん
2023/04/23(日) 22:48:39.88ID:9nArI2JN436デフォルトの名無しさん
2023/04/23(日) 23:07:42.53ID:yqsq+eY1 「C/C++ で安全なコードを描ける」=「メモリ問題やデータ競合の無」く書ける
なのでは?
経験を積むと書けるようになるよ
なのでは?
経験を積むと書けるようになるよ
437デフォルトの名無しさん
2023/04/23(日) 23:31:52.59ID:/tirlZFd >>436
その根拠のない自信とミスが多くのバグとセキュリティホールを生んできた
一方で経験を積んだ者ならばC++でもRustでもどちらのコードも書けることも事実その通りだ
ならば客観的に各種問題のないことが保証されているRustのコードの方が選ばれる
その根拠のない自信とミスが多くのバグとセキュリティホールを生んできた
一方で経験を積んだ者ならばC++でもRustでもどちらのコードも書けることも事実その通りだ
ならば客観的に各種問題のないことが保証されているRustのコードの方が選ばれる
438デフォルトの名無しさん
2023/04/23(日) 23:38:05.13ID:s119dOFU 経験を積むと安全なコードを書けると言ってる人は過去に書かれたコードのメンテとかも経験してるんだろうか
当然前後のコードを全て確認したうえで安全なコードを書いてきたんだろうけど
確認作業の範囲を少しでも減らしたいとか考えたことないのかな
当然前後のコードを全て確認したうえで安全なコードを書いてきたんだろうけど
確認作業の範囲を少しでも減らしたいとか考えたことないのかな
439デフォルトの名無しさん
2023/04/23(日) 23:54:04.28ID:FpD4OybJ 俺がRustへ移った理由もそれ
開発でも保守や更新でも言語システムが自動的に確認作業をやってくれる
こちらはビジネスロジックのテストだけに専念できて非常に効率がいい
開発でも保守や更新でも言語システムが自動的に確認作業をやってくれる
こちらはビジネスロジックのテストだけに専念できて非常に効率がいい
440デフォルトの名無しさん
2023/04/23(日) 23:55:54.84ID:yqsq+eY1441デフォルトの名無しさん
2023/04/23(日) 23:56:47.54ID:yqsq+eY1 >>438,439
他人のコードについての見解は一理あると思う
他人のコードについての見解は一理あると思う
442デフォルトの名無しさん
2023/04/23(日) 23:57:54.34ID:yqsq+eY1 翻って>>382だな
443デフォルトの名無しさん
2023/04/24(月) 00:16:29.06ID:TbIWWoB3 経験深いC++プログラマーにとって、Rustは難しいものでもなく特にウザいものでもないよなあ。
部分的に各片方が書きやすい面もあるが、フィフティフィフティでどちらにも分はある。
結局Rustコンパイラが色々と保証してくれる信頼性と効率性だけが決定的な差異で、Rustへ進む流れだろな。
部分的に各片方が書きやすい面もあるが、フィフティフィフティでどちらにも分はある。
結局Rustコンパイラが色々と保証してくれる信頼性と効率性だけが決定的な差異で、Rustへ進む流れだろな。
444デフォルトの名無しさん
2023/04/24(月) 00:17:39.52ID:5FvgLQUn 完璧なC++のコードを書けるやつならまぁそうすればいいけど、同僚も完璧に書けるかな?って話だよな
同僚も完璧なのが書ける? でも同僚もお前のことを「完璧に書ける奴」と認識してるとは限らない
そんで慢心の発生は自分自身を完璧と信じてるかと関係なく起こるわけで
同僚も完璧なのが書ける? でも同僚もお前のことを「完璧に書ける奴」と認識してるとは限らない
そんで慢心の発生は自分自身を完璧と信じてるかと関係なく起こるわけで
445デフォルトの名無しさん
2023/04/24(月) 00:25:06.29ID:6UK4+7Cd 普通にGC付きの言語を使えばそんなウジウジしなくていいのに
システムプログラマ以外にはrustもC++も縁遠い
システムプログラマ以外にはrustもC++も縁遠い
446デフォルトの名無しさん
2023/04/24(月) 00:29:33.47ID:6UK4+7Cd 速度を抜きにしてc++の利点は生ポインタを使って直感的にコードを書けたりするところにもあったと思う
それが今は捨てられたのでまあ他の言語でもいいじゃんと思う
それが今は捨てられたのでまあ他の言語でもいいじゃんと思う
447デフォルトの名無しさん
2023/04/24(月) 00:40:24.53ID:/2/+f4dj >>445
従来の非GC言語と比べて
Rustは以下の点でGC言語に近くなっていて書きやすいわー
・メモリや競合など色んなことをRustは安全だと保証してくれる
・メモリ解放も常に何もしなくてよくてRustは完全に自動でやってくれる
・各GC言語のモダンな機能がRustも取り入れていて便利に使える
という感じ
対象言語やコードによっては数倍Rustが速くて
エコでリソースコストも少なくて金銭的コストも数分の1になるのが魅力的
従来の非GC言語と比べて
Rustは以下の点でGC言語に近くなっていて書きやすいわー
・メモリや競合など色んなことをRustは安全だと保証してくれる
・メモリ解放も常に何もしなくてよくてRustは完全に自動でやってくれる
・各GC言語のモダンな機能がRustも取り入れていて便利に使える
という感じ
対象言語やコードによっては数倍Rustが速くて
エコでリソースコストも少なくて金銭的コストも数分の1になるのが魅力的
448デフォルトの名無しさん
2023/04/24(月) 00:40:47.69ID:47nwKPG1 C++にあってRustにない特徴はCを包含していること
Rust派は欠点と考えているだろうが
この特徴がなければ普及しなかっただろうね
ハゲの慧眼だよ
Rust派は欠点と考えているだろうが
この特徴がなければ普及しなかっただろうね
ハゲの慧眼だよ
449デフォルトの名無しさん
2023/04/24(月) 01:05:01.61ID:GFnVwc83450デフォルトの名無しさん
2023/04/24(月) 04:53:42.06ID:7IjMEuJY 個人的には、Rustは、メモリ安全であると言う以外に魅力は無いと思ってる。
しかも、Java、C#、JS、Ruby、PHP、Perl、Python、Kotlin、Go
は全てメモリー安全。
しかも、Java、C#、JS、Ruby、PHP、Perl、Python、Kotlin、Go
は全てメモリー安全。
451デフォルトの名無しさん
2023/04/24(月) 04:56:59.60ID:7IjMEuJY それに、C++やCでずっとプログラミングしているが、メモリー関連バグが
生じる頻度は非常に低い。大部分はロジックのバグで、少しずつテストを
するのでその段階で取れることが多い。
メモリー関連バグが起きる場合でも、VisualStudioでは容易に原因箇所が
発見できることが多い。
特にC++では、デストラクタの中に ポインタ型のメンバ変数の delete 文を
書いておけば、メモリー関連バグはまず起きない。
その意味では、C++は、それで賄えない特殊な場合を除いては、メモリー解放が
自動化されていると言える。
生じる頻度は非常に低い。大部分はロジックのバグで、少しずつテストを
するのでその段階で取れることが多い。
メモリー関連バグが起きる場合でも、VisualStudioでは容易に原因箇所が
発見できることが多い。
特にC++では、デストラクタの中に ポインタ型のメンバ変数の delete 文を
書いておけば、メモリー関連バグはまず起きない。
その意味では、C++は、それで賄えない特殊な場合を除いては、メモリー解放が
自動化されていると言える。
452デフォルトの名無しさん
2023/04/24(月) 05:04:26.63ID:7IjMEuJY メモリー関連バグは、VisualStudioではコンパイル段階での静的な発見は一般的
には出来ないが、動的には、デバッガを使うことでかなり高い確率でメモリー
関連バグの原因箇所が分かる様になっている。
昔、C言語を使っていて、メモリー関連バグで困るのは、全く原因が分からないような
ことがありえることであったが、C++では、classのデストラクタの中にdelete文を
閉じ込めることによって、メモリー解放が自動化される。
だから、メモリー関連バグが起きるのは、それでまかなえない場合に限る。
同じ関数の上の方とnew文と下の方でdelete文を単純に対応させて書けば
「どう見ても安全」のような書き方ができる。
また、それで書けない場合でも、delete文を、EndXxx()のような「終了関数」
の中だけに書く様にすれば、滅多なことでメモリー関連バグは入らない。
これでも原因不明なメモリー関連バグが起きた場合でも、VisualStudioの
場合はあの手この手で、メモリー関連バグの原因を動的検査で特定し易くなっている。
には出来ないが、動的には、デバッガを使うことでかなり高い確率でメモリー
関連バグの原因箇所が分かる様になっている。
昔、C言語を使っていて、メモリー関連バグで困るのは、全く原因が分からないような
ことがありえることであったが、C++では、classのデストラクタの中にdelete文を
閉じ込めることによって、メモリー解放が自動化される。
だから、メモリー関連バグが起きるのは、それでまかなえない場合に限る。
同じ関数の上の方とnew文と下の方でdelete文を単純に対応させて書けば
「どう見ても安全」のような書き方ができる。
また、それで書けない場合でも、delete文を、EndXxx()のような「終了関数」
の中だけに書く様にすれば、滅多なことでメモリー関連バグは入らない。
これでも原因不明なメモリー関連バグが起きた場合でも、VisualStudioの
場合はあの手この手で、メモリー関連バグの原因を動的検査で特定し易くなっている。
453デフォルトの名無しさん
2023/04/24(月) 05:06:00.35ID:7IjMEuJY CやC++でメモリー関連バグに悩まされている人は、gccなどのフリーのコンパイラ
を使っている人ではないかと思う。
Visual StudioのIDEとデバッガを使えば、メモリー関連バグで悩むことは滅多に
なくなる。
それと、C++の場合は、正しい流儀で書けば、そもそもメモリー関連バグが
入り込む可能性が劇的に減る。
を使っている人ではないかと思う。
Visual StudioのIDEとデバッガを使えば、メモリー関連バグで悩むことは滅多に
なくなる。
それと、C++の場合は、正しい流儀で書けば、そもそもメモリー関連バグが
入り込む可能性が劇的に減る。
454デフォルトの名無しさん
2023/04/24(月) 05:12:08.93ID:7IjMEuJY gccとVisual Studioのメモリー安全性に関する違いは、ヒープメモリに対しての
さまざまな工夫に有る。プログラマが明示的に初期化して無い部分には 0xcccccccc
のようなデータで初期化するコードをコンパイラが書きこむ。
それに、ヒープメモリーのリンクチェーンにも何らかの工夫がされている。
「デバッグビルド」では、そういった構造を、適切なタイミングでチェックする
コードが自動的に付加されるので、「おかしなことをやった直後に近いタイミングで」
IDEが「異常」を報告してくれる。
また、MFCの場合は、さまざまな場所にASSERT() 文で検査コードを入れてあるので、
メモリー関連バグも気付き易い。なんらかの異常は、早い段階で発覚するので、
原因がどこにあるかが特定し易くなっている。
このおかげで、多くの場合は、異常が発見された直前の処理を疑えばよくなっている。
さまざまな工夫に有る。プログラマが明示的に初期化して無い部分には 0xcccccccc
のようなデータで初期化するコードをコンパイラが書きこむ。
それに、ヒープメモリーのリンクチェーンにも何らかの工夫がされている。
「デバッグビルド」では、そういった構造を、適切なタイミングでチェックする
コードが自動的に付加されるので、「おかしなことをやった直後に近いタイミングで」
IDEが「異常」を報告してくれる。
また、MFCの場合は、さまざまな場所にASSERT() 文で検査コードを入れてあるので、
メモリー関連バグも気付き易い。なんらかの異常は、早い段階で発覚するので、
原因がどこにあるかが特定し易くなっている。
このおかげで、多くの場合は、異常が発見された直前の処理を疑えばよくなっている。
455デフォルトの名無しさん
2023/04/24(月) 05:45:34.11ID:7IjMEuJY SNSで、「オブジェクト指向は意味が無く、むしろ駄目」というような話題が
出ることがあるが、C++のclassのデストラクタは、メモリー安全性に大きく
寄与しており、Cよりもメモリー安全になっている。
逆にclassがなければ、メモリー管理にバグが入りやすかったことであろう。
それだけでも、「オブジェクト指向」の意味がある。
出ることがあるが、C++のclassのデストラクタは、メモリー安全性に大きく
寄与しており、Cよりもメモリー安全になっている。
逆にclassがなければ、メモリー管理にバグが入りやすかったことであろう。
それだけでも、「オブジェクト指向」の意味がある。
456デフォルトの名無しさん
2023/04/24(月) 07:52:58.48ID:HpPlDS3N 気をつければ大丈夫というのはプログラマーの考え方ではない
少なくとも向いてない
少なくとも向いてない
457デフォルトの名無しさん
2023/04/24(月) 08:08:18.28ID:y0BYTv6v c++erにとってRustはウザいけど、他人にライフタイム管理を強制できるというメリットが大きい。
基本的にRustは他人にやらせるための言語。
基本的にRustは他人にやらせるための言語。
458デフォルトの名無しさん
2023/04/24(月) 08:23:30.04ID:5e4ZDdTw ツールやコンパイラがいろいろやってくれる優位性を語っておいて
Rustの利点に目をむけないって意味わからんなあ
Rustの利点に目をむけないって意味わからんなあ
459デフォルトの名無しさん
2023/04/24(月) 08:50:49.89ID:r05pWbWI セキュアコーディングについて、誰かがキメてくれるというのがデカい
Rustはそれをやったんだ
欲しいのはunsafeのやり方であって、それができるんならC++でもいいんだよ
そうと決まれば、処理系も実装者もどんどん追従する
だから、採用すると言い切ったんだから、APIもとっととRust化してほしい
そうしたら速攻で、unsafeがC++にも来る
Rustはそれをやったんだ
欲しいのはunsafeのやり方であって、それができるんならC++でもいいんだよ
そうと決まれば、処理系も実装者もどんどん追従する
だから、採用すると言い切ったんだから、APIもとっととRust化してほしい
そうしたら速攻で、unsafeがC++にも来る
460デフォルトの名無しさん
2023/04/24(月) 09:49:02.72ID:47nwKPG1461デフォルトの名無しさん
2023/04/24(月) 10:03:11.22ID:Tyw8xG0A Rustを難しいとかウザいとか言ってる人は単にまだ慣れていなかったり知識が足りていないだけだ
C++できちんとコーディングできていた人にとってRustは難しくなく慣れと知識を獲得した後はC++よりも全体効率がアップする
したがってRustを難しいとかウザいとか言ってる人の発言は全て無視してよい
C++できちんとコーディングできていた人にとってRustは難しくなく慣れと知識を獲得した後はC++よりも全体効率がアップする
したがってRustを難しいとかウザいとか言ってる人の発言は全て無視してよい
462デフォルトの名無しさん
2023/04/24(月) 10:18:34.43ID:47nwKPG1463デフォルトの名無しさん
2023/04/24(月) 10:33:40.77ID:r05pWbWI >>1 のとおり、職務とかでやれといわれたらやるんだけど、
Rust勢がいうとおり、デファクトスタンダードになりそうなら、C++にもほぼ間違いなく「来る」だろうしねえ
それなら、安全になったC++でいいや、Rustに限らず、新言語とかたりぃな、とかは思う
新言語覚えるかわりに、安全になったC++勉強しなきゃだし、と言ってもいい
Rust勢がいうとおり、デファクトスタンダードになりそうなら、C++にもほぼ間違いなく「来る」だろうしねえ
それなら、安全になったC++でいいや、Rustに限らず、新言語とかたりぃな、とかは思う
新言語覚えるかわりに、安全になったC++勉強しなきゃだし、と言ってもいい
464デフォルトの名無しさん
2023/04/24(月) 10:39:05.54ID:6eJhjjay C++とRustの比較は簡単
両方使いこなせるプログラマーはどちらを選んでいるか?
・多くのことをコンパイラに任せられて開発保守効率の良いRust
・その逆でそれらの開発保守効率に劣るC++
企業はどちらを選んでいくか?
・客観的に各種の安全性が保証されるRustで書かれたコード
・その逆で各プログラマーの腕により保証されるC++で書かれたコード
プログラマーと企業どちらの視点に立っても
RustもC++も選べる環境状況にあるならば
新規のプロジェクト(案件)でC++を採用する動機は完全に無くなった
両方使いこなせるプログラマーはどちらを選んでいるか?
・多くのことをコンパイラに任せられて開発保守効率の良いRust
・その逆でそれらの開発保守効率に劣るC++
企業はどちらを選んでいくか?
・客観的に各種の安全性が保証されるRustで書かれたコード
・その逆で各プログラマーの腕により保証されるC++で書かれたコード
プログラマーと企業どちらの視点に立っても
RustもC++も選べる環境状況にあるならば
新規のプロジェクト(案件)でC++を採用する動機は完全に無くなった
465デフォルトの名無しさん
2023/04/24(月) 10:47:20.17ID:47nwKPG1 >>464
企業の視点に立つとRustはプログラマが確保できんだろw
企業の視点に立つとRustはプログラマが確保できんだろw
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【ラジオ】永野芽郁、田中圭との不倫疑惑後初の『ANNX』で謝罪「誤解を招くような行動…反省」「本当にごめんなさい」★3 [Ailuropoda melanoleuca★]
- いじめられていた記憶しかないが…年収2500万円・身長180に急成長・妻も美人なエリート男性が初めて行ってみた「同窓会」 [パンナ・コッタ★]
- 【テレビ】芦田愛菜“好きな納豆の食べ方”語る「週に2〜3回くらいは食べますよ」 [湛然★]
- 自民幹事長 中国の国際交流団体トップにパンダ貸与継続 求める [香味焙煎★]
- 【移民】日本史上初めての中国人の大量移住が始まる ★5 [ぐれ★]
- コメ5キロ、最高値4220円 16週連続上昇、前年比2倍 ★3 [蚤の市★]
- 【実況】博衣こよりのえちえち朝こよ🧪★1
- 中国「今年の7月、日本が危ないらしいから不動産購入は慎重にな」自国民に注意喚起😫 [583597859]
- セブンイレブンの冷凍麻辣湯、ガチで美味そうだと話題に [183154323]
- 日本政府「うわああぁ!少子高齢化でヤバい!このままでは日本滅びる」 →「能力ない外人をたくさん受け入れて育てることに決めました」 [271912485]
- 【祝】コメ、16週連続値上がり 自民党とJAが悪い [402859164]
- エッホ、エッホ、エッホ、お🏡が立ったって伝えなきゃ