C vs C++ vs Rust Part.2

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2021/12/15(水) 12:35:50.91ID:biBE4xC0
競え
※前スレ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/
2022/01/18(火) 21:45:51.63ID:gaAtUhso
重くて本番で使わない結果
本番環境で運用中に生じる競合を検出できない
2022/01/18(火) 21:46:20.73ID:Edb5UGZv
>>787
そりゃそうなんだけど実際検出したいバグは本番環境で長時間実行したらたまに出る、みたいなやつなので
手元でrace付けて簡単に再現するやつはそもそもそんなにデバッグにも苦労しないし、いまいち噛み合ってない感はあるなぁ
2022/01/18(火) 21:56:48.08ID:kepaLF1q
>>783
例外と例外指定の違いもつかないでC++批判か
2022/01/18(火) 22:02:37.92ID:L9ANQ96E
>>776
自動でのチェックはできないかもしれないけどgoroutine間で変数を共有しないよう
注意するなら目視チェックでも十分だと思うがなぁ。
2022/01/18(火) 22:07:29.63ID:6oUcJD0w
>>791
横からレスするけど、並列処理をガツガツ書く機会って少ないから
ちゃんとわからずに書く人多すぎんだよ・・・
やっぱRustみたいなコンパイル時に厳しくチェックしてくれる言語って重要だと思う
2022/01/18(火) 22:14:10.77ID:Edb5UGZv
>>791
目視で99%見つけても1%残ったら落ちるからなぁ
多人数開発してて差分でレビューしてるときに全部発見できるかというと…できるか?
2022/01/18(火) 23:02:11.65ID:L9ANQ96E
>>776のようにカジュアルに発生するってのは問題だが1%見逃すのは仕方ないんでないの?
並列処理のデータ競合バグを100%排除できる言語なんてある?
2022/01/18(火) 23:23:43.01ID:3Ht6lHCg
>>794
少なくともRustはコンパイラやunsafe絡みのバグを除けば原理的には100%なんだから、それと同じくらいまでは頑張って欲しい
せっかくgoroutineが使いやすいのに、目視レビュー頑張ってって言われるとちょっと…
2022/01/18(火) 23:31:50.26ID:VN+VluXj
>>784
これ読んできなよ
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0709r4.pdf
2022/01/18(火) 23:42:36.64ID:L9ANQ96E
例えばCでグローバル変数絡みのバグを防ぐためにグローバル変数使用禁止という規約はよくあるが
それを守るには目視チェックでも十分。そのくらいの感覚。
2022/01/18(火) 23:59:32.27ID:gaAtUhso
みんな理解していると思うが念のため
Rustコンパイラが100%保証するのは「データ競合(data races)」が起きないこと
だからその点ではC++やGoよりは遥かに優れている

一方でデータ競合を除く「競合状態(race conditions)」を100%検出する方法は存在しない
だからデッドロックなどはRustコンパイラでも当然ながら検出できない

もちろんデッドロックはロック順序決めで対応できるし
Rustならロック解除し忘れ防止も大丈夫といったように別の解決方法となる
2022/01/19(水) 00:10:47.44ID:mUI3y0qL
>>796
例外じゃなくてエラーコードにしろよ派の人かと思ったよ
これね
https://cpplover.blogspot.com/2018/07/c.html
2022/01/19(水) 00:23:42.92ID:7HSVmIfo
>>796
Stroustrup の反論に遭って2年ほど塩漬け状態だねぇ。
https://github.com/cplusplus/papers/issues/310
2022/01/19(水) 01:17:11.35ID:cSOd3D9g
>>788
テストしないのかな?
それともテストで検知できないような設計しちゃってるのかな?
2022/01/19(水) 01:48:14.37ID:+cO9q0A4
>>799
C++の従来の例外の諸問題を解決するため
オーバーヘッドが無く決定的な例外(zero-overhead deteministic exceptions)が提案されていてそれを静的例外と呼ぶわけね
その静的例外はexpected<T,E>みたいな感じで関数の返り値として返すわけか
そのexpected<T,E>はRustのResult<T,E>とほぼ同じで別途P0323R10としてstd::expectedへ向けて進行中のようだ
従来の例外メカニズムよりも様々な面で優れているという点は共通認識なのね
2022/01/19(水) 05:23:35.13ID:mUI3y0qL
>>802
完全移行しましょうという話ではないよ
804デフォルトの名無しさん
垢版 |
2022/01/19(水) 07:39:45.49ID:cFKRo9Uk
>>791
いつもお前がチェックしてるの?
それともお前のチームのあいつもチェックするの?あいつに任せて大丈夫?
2022/01/19(水) 07:57:00.40ID:1qFppSOF
>>801
テストでカバレッジ100%とか目指しちゃってる?
テスト終わるのかな?
(真面目な話、長期運用中のレアなバグをテストで捕捉できるんなら誰も苦労しない)
2022/01/19(水) 11:07:19.52ID:eMdpT3GP
>>805
まぁ、C0カバレッジはおろかC1カバレッジ100%にしても、競合のバグは発見できないことが多々あるんだけどね
2022/01/19(水) 11:48:30.52ID:gQYkvdGO
テストで競合のバグ網羅的に検出する方法教えてほしいわ...
2022/01/19(水) 12:03:27.07ID:i7kz0e3/
>>805
データ競合確認用のテストを書くんだぞ
カバレッジ上げて検出できるようお祈りしてるだけじゃそりゃ無理よ
2022/01/19(水) 13:00:05.26ID:Li1rxlZL
競合のバグってどんなバグ?
2022/01/19(水) 13:29:00.39ID:IYc6/CaJ
>>808
え?データ競合を網羅的にチェックできるテスト手法があるの?
こんなとこに書いてる場合じゃなくて、学会発表とか特許出願したほうがいいんじゃない?
2022/01/19(水) 13:36:39.59ID:eMdpT3GP
・複数人で開発している
・その中にど素人が紛れている
・誰でもアクセスできる場所にデータが置かれている

というときにど素人がデータ競合をやらかす可能性があるが、それ以外は設計で防げる気がするがどうか
2022/01/19(水) 14:37:52.59ID:K9rAR3/n
>>810
網羅的なんて書いてないだろ
お前は網羅的にできないから全くやらないのか?
2022/01/19(水) 14:44:54.08ID:eMdpT3GP
結局の所、高頻度・ロングランテストするくらいしか検出方法ないんですかね
2022/01/19(水) 14:59:15.19ID:WoOGtWuY
ロングランテストwww
何の関係があるんだよw
いつもの知ったかさんでしょコレ
2022/01/19(水) 15:00:04.95ID:gQYkvdGO
設計自体のバグもあり得るしねえ
形式手法を使うくらいか?
2022/01/19(水) 15:26:10.86ID:eMdpT3GP
>>814
通常のテストで検知が難しいバグを見つける手段として、高負荷・高頻度・長時間(の組み合わせ)のテストをするのは常識
もちろん、それで問題が発生しなかったからといって、バグがないことが証明されたわけではないけどね
2022/01/19(水) 16:14:13.73ID:v8LOrcPB
>>792
意地悪なこと言ってスマンけど
「ガツガツ書く」「少ない」
「ちゃんとわからず」「多すぎ」
夢見がちで可愛い表現だなw
井戸の中のカエルが反り返って演説してる気迫を感じる
2022/01/19(水) 16:36:54.72ID:gE2NB2l/
哲学知らぬ者、バグを知らず
2022/01/19(水) 17:49:18.38ID:eMdpT3GP
食事する哲学者問題?
2022/01/19(水) 17:57:12.48ID:eoe5MjrB
結局のところ未熟者が書いたコードは当てにならないと言うのがすべて
2022/01/19(水) 17:58:56.29ID:gQYkvdGO
未熟者に限らず自分自身含む人が書いたコードはまず疑った方が良い
2022/01/19(水) 18:28:03.14ID:bwa81yuy
ロングランテストの所有権を複製して仲介イテレータで処理すれば算数は100点!!
2022/01/19(水) 18:33:19.44ID:eMdpT3GP
最近Rustが楽しくなってきた
824デフォルトの名無しさん
垢版 |
2022/01/19(水) 18:45:27.74ID:Vf45iCZs
RustはFirefoxがまともに動くようになってからでイイわ。
本家すら使いこなせてないのに俺ら雑魚にはまだ無理だわ。
2022/01/19(水) 18:54:05.02ID:eMdpT3GP
GoとRustはやっといた方が良い予感がする
2022/01/19(水) 21:11:11.24ID:+cO9q0A4
>>824
ブラウザがこのスレにどういう関係が??
2022/01/19(水) 21:51:11.75ID:BS0PFXNl
>>811
並行性テストすら知らないど素人さんが言うと説得力あるね〜
2022/01/19(水) 22:55:16.29ID:23hBiJnP
今はRustで書けばコンパイラがデータ競合も指摘してくれるので大丈夫
C++は既存システムのメンテ用
2022/01/19(水) 23:24:32.20ID:mUI3y0qL
データ競合起こすようなコードしか書けない奴はプログラマに向いてないわ
2022/01/19(水) 23:52:50.70ID:23hBiJnP
ベテランでもデータ競合やメモリ安全のうっかりミスがあることは何度も示されている
それらをコンパイラでチェックできる高機能なプログラミング言語が登場したのだから
高機能な新しいものに付いて来れないプログラマこそ向いていない
831デフォルトの名無しさん
垢版 |
2022/01/20(木) 00:39:05.76ID:Rx+HndAo
必死で宣伝するほどのものでもないのでは?
2022/01/20(木) 00:48:04.28ID:f9tdz5B4
Cで書かれているLinux OSが
あれほどC++は無意味な言語と採用を拒否し続けてきたにも関わらず
Rustを一部採用し始めたのが典型的ですね
833デフォルトの名無しさん
垢版 |
2022/01/20(木) 00:48:26.56ID:Rx+HndAo
以前のHaskellのような勢いがあるけど、まったく使われないのもHaskellと同じでは?
2022/01/20(木) 01:09:18.97ID:2FFUKTfw
うっかりミスで競合バグやメモリ破壊が起きるとは思えんな
データ構造やテーブルの設計ができない、メモリ安全な書き方知らないってスキルや知識、経験の問題だろうよ

マルチスレッドの使いどころを知らないやつ、知ったか、コミュ障あたりがプロジェクトに混じると起きる
そういった猿を炙り出せるrustはパラドックスを抱えてる気もするが俺は好意的
2022/01/20(木) 01:25:44.62ID:Vi2E1kzg
>>830
お前あんの?
俺一回もないけど
どんだけひどいコードかいてんだよw
2022/01/20(木) 01:26:44.10ID:Vi2E1kzg
あとメモリ安全の話してないしw
2022/01/20(木) 01:27:16.51ID:u4d94q6b
俺もそうだったが、初めてマルチタスクOSでプログラミングし始めた頃に
興味を持ちやすいのが、マルチスレッドや、メッセージパッシング、
同期、非同期、排他処理など。
そして、実際にプログラム経験を積むにつれ、そういったものは、そんなに
使用しなくてもほとんどのプログラムには関係無いことが分かってくる。
というのは、シングルスレッドでも処理速度が足りる場合が多いからだ。
また、ブラウザ以外では async, awaitなどを使う理由は皆無である
ことも分かってくる。複雑になるだけで速度も上がらないから。
ほぼブラウザ上アプリ専用だと考えて良いだろう。
2022/01/20(木) 01:29:39.27ID:z2ZQEaJV
>>837
なぜブラウザだけ?
839デフォルトの名無しさん
垢版 |
2022/01/20(木) 01:30:31.76ID:Rx+HndAo
>>837
ウェブ周りは間違った設計が堂々としてて凄い貫禄と思う。
無印ペンティアム辺りの時代を未だに引きずっているのかも。
840デフォルトの名無しさん
垢版 |
2022/01/20(木) 01:31:27.85ID:Rx+HndAo
>>838
貫禄が在りすぎて我々にはどうしようもない。
2022/01/20(木) 01:52:40.04ID:hnvUf8sg
>>837
色々とおかしいぜ
まずシングルスレッドでも可能な並行処理とマルチスレッドとなる並列処理の違いがわかっていない?
さらに非同期処理と並行並列処理の違いも分かっていない?

まずシングルスレッド内でもマルチタスクで並行処理はするしasync/awaitは用いる
ブラウザ上での各ページのJavaScriptもシングルスレッドで動いていてasync/awaitが使われる
非同期であればasync/awaitは使われるのだからマルチスレッドである必要はない

さらにasync/awaitを使おうと使わまいと非同期処理は必須
ネット通信にしてもI/O読み書きにしても同期かつ並行並列もなく待ちぼうけプログラミングでもしているのかね?
842デフォルトの名無しさん
垢版 |
2022/01/20(木) 02:21:18.74ID:Rx+HndAo
そういうことじゃないんだよな。
2022/01/20(木) 04:37:02.48ID:Hal1pivO
>>837
マルチスレッドは処理速度だけじゃなく、プログラムをシンプルにする目的でも使うんよ
2022/01/20(木) 08:33:11.42ID:lGM+CbA+
>>841
"ロングランテスト"でしかテストできないという意味では全部一緒ですねw
2022/01/20(木) 09:27:27.00ID:Vi2E1kzg
デスクトップアプリでsureddo使わないと、処理中はアプリが固まるんだけどなw
846デフォルトの名無しさん
垢版 |
2022/01/20(木) 09:44:08.26ID:YvBiSXkf
>>835
お前が無くてもチームの誰かがあったらダメじゃねーの?
2022/01/20(木) 09:47:19.38ID:L6GD7VFA
>>845
シュアード・ドゥ使わなくてもオルニチン使えば大丈夫..
2022/01/20(木) 10:35:37.00ID:XHUr7069
>>846
データ競合に関しては、ありがたみがわからないんだよね
そもそもそれが発生する設計しないというか...
2022/01/20(木) 11:56:51.04ID:BSrnUcOL
同感だわ
ポインタほどプログラム全体に散らばるようなものじゃないからな
2022/01/20(木) 12:08:15.10ID:/QGeeRaj
自分で書くぶんにはデータ競合はほぼ踏まないと思ってるし
実際Rustで書いてもSend/Syncエラーになったりはしないんだが
だからといって社内の謎ライブラリやらマイナーなOSSが
同程度に信頼できるわけではないからな
チェックがあるに越したことはない
2022/01/20(木) 13:07:09.28ID:r0r0TMJm
Send/Syncはまた別の話
2022/01/20(木) 13:25:20.64ID:XHUr7069
>>850
あ、そっか
スレッドセーフじゃないAPIを不用意に使って、共有するなにかが壊れる系のバグはあるわな
2022/01/20(木) 15:08:40.58ID:kNFbPrzb
社内の一番馬鹿に合わせるのって苦痛じゃないの?
854デフォルトの名無しさん
垢版 |
2022/01/20(木) 15:23:18.62ID:YvBiSXkf
>>850
同意
2022/01/20(木) 16:03:42.89ID:XHUr7069
>>853
嫌ならやめればいいね
2022/01/20(木) 16:21:18.96ID:hnvUf8sg
データ競合やメモリ安全のコンパイラによる保証よりも
Rustは様々な点でC/C++よりプログラミングしやすいことが一番の大きな点だと思う
挙げだすとキリがないけど値格納付enumや強力なマッチング&デストラクチャリングなど含め基本的なことを始めにね

言語にそんな色んな機能は要らないしコンパイラによる保証も自分でやるから要らないという人にはC言語がある
C++は何もかもが中途半端な存在となってしまっていることに気付いた
2022/01/20(木) 18:41:53.83ID:kNFbPrzb
>>855
それは苦痛って意味?
2022/01/20(木) 19:12:10.38ID:XHUr7069
>>857
嫌ならやめればいいねって意味だけど?
2022/01/20(木) 19:30:40.05ID:kNFbPrzb
>>858
そもそも苦痛かどうか聞いてるんだけど?
2022/01/20(木) 21:43:31.04ID:f9tdz5B4
プログラミング言語として優劣差が明白にあります
C++とRustの両方を書ける人たちが新たなプロジェクトをする場合
100%Rustが採用されます
2022/01/20(木) 22:05:27.01ID:WtRmajcd
>>860
ソースは?
2022/01/20(木) 23:37:03.72ID:7c1Oq9Kl
kerneldeveloperだけど、c使うな言われたらrust使うかな
2022/01/21(金) 00:37:31.45ID:gQq8dla+
>>859
ケースバイケースでしょ
何アホな質問してんだか
2022/01/21(金) 01:58:41.80ID:7FRrrgJK
>>863
アホはレスしないで
2022/01/21(金) 06:29:26.72ID:rZUqxNH8
>>853
苦痛だが、合わせざるを得ないのが現実だろ
2022/01/21(金) 17:44:48.18ID:GenQVxT3
こういうのが嫌なんだよな

> Rustのデータベース系クレートでは、長らくORMのdieselがデファクトスタンダードとして各入門系テキスト/書籍でも扱われていましたが、ここ最近はdieselの名前を見かけることはあまり多くないように思います。
867デフォルトの名無しさん
垢版 |
2022/01/21(金) 18:42:50.23ID:manmLzTJ
C++の線形代数系ライブラリでは、長らくEigenがデファクトスタンダードとして扱われていましたが、ここ最近はEigenの名前を見かけることはあまり多くないように思います。
868デフォルトの名無しさん
垢版 |
2022/01/21(金) 22:57:18.79ID:7ASANqXl
>>866
標準でないライブラリはどの言語でも一緒やん。
2022/01/21(金) 23:25:41.90ID:gQq8dla+
仕事には使えんな
2022/01/22(土) 13:46:13.26ID:o4PPoyn9
毎年決定版のライブラリやフレームワークが
変わるJS/TSで仕事回ってるし
2022/01/22(土) 14:52:11.36ID:v1aiSn8P
ブラウザは特殊。
デスクトップアプリでasync,awaitは不要。
2022/01/22(土) 16:21:57.94ID:o4PPoyn9
サーバサイドで使われてるのしらないの?
2022/01/22(土) 16:26:26.49ID:v1aiSn8P
もともと並列処理は、スーパーコンピューターで、クロック数の増加速度に陰りが
見え始めた時、複数のCPUで処理することで高速処理をするために発明されたもの。
プログラミングがとても難しいことが知られており、速度が十分な場合は不要。
1コア(スレッド)なのに非同期にする理由は無い。
2022/01/22(土) 16:29:08.60ID:v1aiSn8P
並列処理は、プログラムの難しさと引き換えに、速くなるためだけに発明された
だけの苦肉の策。
技術的な頭打ちをなんとか凌ぐために登場した。
シングルスレッドだと全く速くならないのに、プログラムを難しくするだけで
意味が無い。
2022/01/22(土) 17:02:58.58ID:UcDtUdFv
>>870
ほー、じゃ直近3年でプロジェクトに採用したFWを時系列に並べてみ?
2022/01/22(土) 17:06:13.90ID:cP8tdrQi
非同期並列ネタは複製おじさんの釣り仲介イテレータ
2022/01/22(土) 17:28:20.63ID:vZsc1PCZ
お前はまずマルチスレッドとマルチコア(or プロセッサ)の違いを理解してから書き込め
スパコンの前からマルチタスクは普通に使われてた
2022/01/22(土) 18:12:53.04ID:CQ3v+kYe
>>877
それはアプリケーションレベルでの話で、マルチプロセス。
複数のCPUや複数のコアが搭載されるようになってからのみ、
マルチスレッドプログラミングの意味が出た。
879デフォルトの名無しさん
垢版 |
2022/01/22(土) 18:14:18.83ID:CQ3v+kYe
>>877
マルチタスク(マルチプロセス)は、OSの利便性のために生まれた。
速度とは関係無いし、アプリのプログラミングにもほぼ関係無い。
2022/01/22(土) 18:28:41.27ID:+h3Uwt/E
何言ってるんだ?
古くからマルチプロセスで高速化なんていくらでもあるだろ
make -j オプションとか知らんのかよ
2022/01/22(土) 18:37:28.25ID:CQ3v+kYe
>>880
シングルコア、シングルCPUのPC-9801だと基本的に速くならん。
2022/01/22(土) 18:48:08.80ID:+h3Uwt/E
>>881
お前CPU Bound / IO Boundって知らんだろ
そんな知識で語るなよw
2022/01/22(土) 19:05:35.39ID:vfyV6CZn
>>871
最近はブラウザベースのデスクトップアプリ多いよね
2022/01/22(土) 22:34:52.70ID:hteSw3T0
>>882
プログラマにあなたのような頭が悪い人が増えているから、
async,awaitが有名になっているのかも。
2022/01/22(土) 22:36:34.19ID:rHbcHXIR
>>884
もうそういうレスしか返せないならやめたら?
痛々しいぞ
2022/01/22(土) 23:42:41.14ID:hteSw3T0
頭が悪い人は出入り禁止にして欲しい。
馬鹿とカシコがごちゃまぜになって紛糾してしまうのが匿名性掲示板の限界。
2022/01/22(土) 23:52:32.52ID:VFDCJ7kC
>>882
でもお前もインフライトキュー知らねーじゃん
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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