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/
362デフォルトの名無しさん
垢版 |
2022/01/02(日) 02:22:18.22ID:TQn3/Mee
もちろんです。
2022/01/02(日) 08:42:35.10ID:/2Hc/nxf
現状でRustの欠陥は指摘なしなのか
まあ優れた言語だから主流になるとも限らんけど
ここはRust礼賛が多くて参考にならんな
2022/01/02(日) 08:43:38.07ID:i5Las0bb
>>360
キチの相手するならメールかなんかでやってくれ
2022/01/02(日) 12:04:39.89ID:7Z2MEM4u
キチの相手するスレやぞ
366デフォルトの名無しさん
垢版 |
2022/01/02(日) 14:18:19.00ID:TQn3/Mee
良いという人だって使ったことないんだから、欠点なんか出てこないよ。
2022/01/02(日) 14:52:25.82ID:gJq1EeIU
>>361
クリティカルセクションのこと?
2022/01/02(日) 19:27:00.77ID:ryp06yJk
int型(32ビット)でyy/MM/dd/HH/mmの形で日時を実装しているプログラムは、2022年1月1日0時0分(2201010001)に32ビットの最大値(2147483647)を越えてしまい、エラーが発生する。そういう実装をしているMicrosoft Exchangeでは既に問題が発生中。
みんな仕事始めになって気づいて大騒ぎに
2022/01/02(日) 19:33:55.23ID:3fzUeLHI
DosDateTime爆死確認w
2022/01/02(日) 20:28:27.33ID:yz2mFgPr
>>367
ハードウェア割り込みの割り込みコンテキストのつもりで書いた
社内独自用語なんだと思う
そこは気にせんでくれ
2022/01/02(日) 21:12:20.77ID:l2HAFLEV
>>361
Rustのポインタ(参照)および実体にはnull/nil/undefined等が一切ない
そのためnull問題が起きることはなく所謂null安全が保証されている

nullになる可能性がある場合は汎用のオプション型であるenum Option<T>型を用いる
このOption<T>はenumとしてSome(T)とNoneの二値を取り型Tは任意な型
つまり所謂NullはenumのNoneで表現され型Tとは異なるためnull問題が起きようがない

これで効率やコストはどうなるのか?
null(RustではNone)が使われない時は型Tのまま扱うので従来と同じ
null(RustではNone)が使われうる時は型Option<T>として扱う
型Option<T>から型Tを使うにはNoneでない確認が必要だがこれこそ必須な確認コスト
ポインタ(参照)の場合は値がnullすなわち0になることがないためコンパイル後はNoneが0で表現される最適化となる
つまり結果的にはC/C++と同じになるのだがRustは上述のようにコンパイル時点でnull安全を保証できる点で異なる
372デフォルトの名無しさん
垢版 |
2022/01/02(日) 22:09:32.73ID:TQn3/Mee
Javaのほうが安全。
373デフォルトの名無しさん
垢版 |
2022/01/02(日) 22:11:45.12ID:TQn3/Mee
ぬるぽ例外が発生するから安全じゃないとか言う書き込みがあった。
これはウソ。
ないほうが良いならCはヌルポを検出できないから安全って事になる。
Javaは検出して例外を発生させるから安全なのです。
キチガイに騙されるな。
2022/01/02(日) 22:18:47.48ID:i8dUNFkB
>ないほうが良いならCはヌルポを検出できないから安全って事になる。

発生したことを検出できないことと発生しないことを意図的に混同している
375デフォルトの名無しさん
垢版 |
2022/01/02(日) 23:11:16.20ID:TQn3/Mee
Firefoxの惨状を見れば全然安全でないことがわかるのに。
なぜ安全と言い張るのか。
2022/01/02(日) 23:20:08.47ID:Uu3cvt4h
CもC++もJavaも実行時にヌルポ発生するからいずれもダメ
Rustは実行時にヌルポ発生しないことが保証されているから安全
377デフォルトの名無しさん
垢版 |
2022/01/02(日) 23:22:44.87ID:TQn3/Mee
RustアンチがRustを称賛してるのではないか。
2022/01/03(月) 05:19:23.74ID:Tjf/rOJw
その可能性高いかも
2022/01/03(月) 06:00:15.35ID:V/HN/Yqp
学会が自らキチガイを演出する手口に栗卒
2022/01/03(月) 16:10:29.79ID:mJ9yMonw
RustはC++と同じ匂いがする
2022/01/03(月) 17:15:54.33ID:20WoIOil
このようにRustをやってる奴は性格が捻じ曲がってる
2022/01/03(月) 17:22:00.01ID:4XbgYwR9
rustってc++より難解だよな
こんな言語が流行るとは思わない
2022/01/03(月) 17:25:50.42ID:ZyFGqp6z
他の言語と比べればめちゃくちゃ難解だし、Rustコミュニティでもどうすれば簡単になるのかいろいろ議論されている
2022/01/03(月) 17:32:24.16ID:20WoIOil
ワイじゃないけど必死に褒めてるのにアンチだとか、ウジ沸いてる
2022/01/03(月) 17:37:11.03ID:5oO4lVIX
Rustファンも、こんなスレに書き込みしないで初心者向け解説でも書けばいいのにな。
386デフォルトの名無しさん
垢版 |
2022/01/03(月) 17:41:11.19ID:nW60oOQF
https://seiya.me/this-website-is-now-powered-by-kerla
このOS Rustで書かれている割にはメモリリークで落ちたりするらしんだけどなんで?
2022/01/03(月) 17:50:43.83ID:gvPAh7hb
必須じゃないけど他の言語も知らないRust初心者が異常に増えてきているからトンチンカンな推しをするだけで
コミュニティの増加は良いことだが、初心者が書いた意味不明なコードを直すのはあんたら
Null安全系の推しをしてるのはド素人
2022/01/03(月) 18:13:06.37ID:V/HN/Yqp
メモリ安全が守れればすべてが安全と謳ってる連中は原発は止めれば安心安全とほざいてた奴等と瓜二つ
2022/01/03(月) 20:13:37.59ID:r29FUtSQ
>>386
そもそもRustはメモリリークが起きないことは保証してくれない
参照カウントが循環参照にならないようにしたり、不要になった参照が残り続けたりしないようにするのはプログラマの責任
なのでプラグラム側になんらかのバグがあったのではないかと

メモリ管理周りを標準ライブラリやOSに全部任せられる普通のアプリケーションとは違って
全部自分でやらなきゃいけない自作OSだからバグなく作るのは難しいというのはあるかと思う
2022/01/03(月) 21:09:45.15ID:Tjf/rOJw
COBOLならメモリーリーク起こらないよ
391デフォルトの名無しさん
垢版 |
2022/01/03(月) 21:31:36.31ID:Qq3YHLjM
>>389
結局C++と同じで習熟甘いやつが作れば問題起きまくりなの?
2022/01/03(月) 21:51:41.06ID:WCyHxUxt
>>387
Rustを含めていまどきの言語がnull安全なのは常識
むしろC++やJavaが古すぎて様々な点で時代遅れにすぎない
もちろんRustはもっとその先へダングリングポインタ排除とGC排除を両立した点にある
2022/01/03(月) 22:09:21.15ID:DUDgVZbY
このように攻撃性と倒錯を丸出しを両立してしまうと初心者っぽさが出てとても引っ掛かりやすい
どこで覚えたのかNull安全からダングリングポインタという関連性がない事を言い出す。
ゴミくずが降り積もっていく・・・
2022/01/03(月) 22:13:14.24ID:WCyHxUxt
>>391
一般的にメモリ関係諸問題のうちメモリリークのみはGC利用でしか解消と判明している
しかし一方でRustではメモリリークを起こすのも意図的にしか起こせない
Rustには所有権の概念があるため特別に複数の所有権を認める特別な参照を
自分で明示的に使用した上でさらに循環参照を生じさせた時のみメモリリークが生じうる
もちろんそのような場面でも通常は弱参照を併用するためメモリリークは起きない
2022/01/03(月) 22:14:15.40ID:/9oDM4ll
>>386
自分で独自OSのランタイムやGCを作って
その上で稼働させるアプリがリークを起こすかどうかは
アプリだけじゃなく作ったランタイムやGCのロジックに依存するよね
2022/01/03(月) 22:17:11.19ID:nLr3i6Wg
nullで落としてるようなバカがnull安全な言語使っても同じく死亡するコード作るだけにしか思えんがな。
あれで救えるコードなんてほとんどないと思うが。
2022/01/03(月) 22:35:34.97ID:pC8I0HuA
もっとその先へ!草
上のOS記事の作者はリークというかフラグメンテーションの発生だと推測してるが絶対読んでないね。
「意図的にしか起こせない」はい嘘
2022/01/03(月) 22:36:13.58ID:CMKqgYgE
nullで落としてるようなバカって例えばGoogleのChromeチームとかかな?
まぁ全人類バカなのでしょうがないね
2022/01/03(月) 22:54:33.28ID:fEzSC6xc
ポインタ(参照)になぜかnull値を許してしまう欠陥言語でのみnull問題が起きる
そうでない普通の言語にとってnull安全は当たり前でありそれを意識することすらない
欠陥言語の存在に対してのみnull安全なる言葉の存在意義がある
2022/01/03(月) 22:56:23.92ID:pwAwOJBp
>>395
そりゃランタイムやライブラリがバグってたらしゃーないわ

>>396
いや、コンパイルエラーになるからそこでちゃんと直せばいい
まあバカがコンパイルエラーを回避することが目的になって余計ひどいことになる未来もあるけどw
2022/01/03(月) 23:21:21.46ID:T+WwhkSI
null安全はマジで当たり前すぎてメリットでもなんでもないから
nullの話なんてしたくないわ
2022/01/03(月) 23:22:53.63ID:T+WwhkSI
そもそもnullのある言語でもnull参照で死ぬなんてのは
よっぽどのクソコードでテストもしてないときだけだろ
2022/01/03(月) 23:26:20.57ID:r29FUtSQ
関数の定義からnullableが否かが分かるのがOption<T> のうれしいところと思う
加えて引数や戻り値の所有権が分かるのもRustのうれしいポイントかと
2022/01/03(月) 23:28:42.03ID:r29FUtSQ
fool proofの話をすると Option<T> でも闇雲に unwrap はできるので考えなしのプログラムだとクラッシュする点は変わらない
SEGVじゃなくpanicになるとか、落ちる可能性のある箇所が明示される点でnullよりはマシだが
2022/01/03(月) 23:34:21.19ID:T+WwhkSI
ほんま、そういうことやな
null安全で助かるケースなんてそもそもわずかしかないんだ
unwrapだとかゼロ除算だとかいろんなロジックミスで結局は落ちる

borrow checkerのおかげでデータ競合が起きない、とからへんが重要なメリットと思う
2022/01/03(月) 23:35:17.83ID:QWHqEk/O
いやいやww
2022/01/04(火) 00:27:33.52ID:bkmFGqSu
>>402
> よっぽどのクソコードでテストもしてないときだけだろ
そう言うのがボロボロ転がってますけどw
2022/01/04(火) 00:32:09.36ID:SqHXhMR8
こちらはNull安全協会です、今なら3,000円お支払い頂くとより安全になり免許証入れまでついてます。
本協会ではNullは許しませんが、DBなどの道路にNullが転がっています。
また外部値など入力が無いことを示すのはResult::Errや特異値:-1やNaNなどで表すものではありませんので
クソ設計はやめてください、Option::NoneでNullを示し、ほかの言語と同じく必ずmatchで検査してください。
unwrapもダメです。Null安全協会では皆様に頂いたご声援でド素人が語れてゴリラのマウントのように
ウッホウッホホと潤っています。またNull安全語り部Rusterの攻撃性は以上ですので近づかないでください
2022/01/04(火) 10:11:55.33ID:GnZE9ial
C++の利点は何だろ?
2022/01/04(火) 10:32:59.80ID:qi/CVito
>>409
自由であること
2022/01/04(火) 10:52:02.62ID:eYWJvdmr
Rustはコーディング刑務所
2022/01/04(火) 11:03:52.07ID:g6u5uJtl
Null安全性はまともなUXを提供したい場合に生産性を改善する道具
なくても落ちることはほとんどないみたいな視点でしか捉えてないなら価値を理解してない
2022/01/04(火) 12:02:58.31ID:ri86vl0z
誰のUXやねん
誰の生産性やねん
2022/01/04(火) 13:26:40.47ID:gSVIkeEa
>>386
GCはメモリーリークおこすし
どこで起こすかが実装によって変わる

GCはゴミなんよ
2022/01/04(火) 13:32:57.78ID:gSVIkeEa
>>409
もっとも健全なアプリを作りうること
2022/01/04(火) 14:39:07.88ID:h92/V+9B
>>409
鼻から悪魔が出てきたりしても言語仕様を逸脱していないこと
417デフォルトの名無しさん
垢版 |
2022/01/04(火) 17:56:16.15ID:llSa7WOy
Rustはコンパイルできたら問題は起きないみたいに思ってたけど違うのね
これじゃやっぱり初心者に毛が生えたようなのがゴミコード量産するのかな
2022/01/04(火) 18:04:30.86ID:eYWJvdmr
ゴミコーダ矯正所
2022/01/04(火) 18:35:43.62ID:mgG32sq7
それはそう
たとえPrologを使ってもバグはなくならない

でもコンパイラのチェックでなくせる類のバグならなくしたいよね
420デフォルトの名無しさん
垢版 |
2022/01/04(火) 19:10:18.46ID:llSa7WOy
コンパイルを通すために問題の発生するコードを書くとかも考えられるんじゃねーの
そっちのほうが分かりにくいような気がする
2022/01/04(火) 19:35:35.54ID:aGnbM+4r
>>417
あらゆる問題が起きないかというとそうではない(というかそんなプログラミング言語存在しないと思う)けど
大部分のコードのメモリ安全性がコンパイル時に保証されるのはかなり大きなメリットだと思う

例えばuse-after-freeやバッファオーバーフロー、データ競合なんかは問題が発生してもプログラムかその場でクラッシュするとは限らず、しばらく正しく動くように見えてしまう場合もある
この手の異常の原因特定は難しいので、rustでコンパイルエラーや実行時の問題発生時のpanicなどで即問題箇所が分かるようになっているのはかなり嬉しい
2022/01/04(火) 19:41:25.66ID:aGnbM+4r
初心者に毛の生えたようなのがゴミコード量産しないようなプログラミング言語ってそもそもどういったものなんだろうか
記述に自由度がなく誰がどう書いても同じになるような言語?
2022/01/04(火) 19:51:44.75ID:GnZE9ial
それpythonがうたってたきがする
2022/01/04(火) 19:52:02.24ID:pbb561T/
386みるとメモリリークの原因が不明っぽいんだけど
言語処理系にメモリ関連任せられるにしても結局原因不明のバグが残るんじゃ意味ないんでわ
2022/01/04(火) 20:04:11.59ID:jb/bub5S
>>424
OS書いてるのに言語処理系にメモリ管理任せられるわけないだろ
自作したメモリアロケータのバグとしか思えんが
2022/01/04(火) 20:06:56.90ID:KYGdyDbS
>>424
バグの数が0じゃなきゃ意味がないというのは違うのでは
100個バグがあるのと1個しかないのでは開発効率が全然違う
2022/01/04(火) 20:50:34.04ID:/2oFrrnl
>>409
C++の利点は過去資産
既にバグが枯れた過去資産を活用するのが得策
その他の点ではRustが全て完全に有利
2022/01/04(火) 20:53:09.33ID:hAXWFplk
Google&MS「バグの70%はC/C++。Rustにする」
https://medaka.5ch.net/test/read.cgi/prog/1619943288/
2022/01/04(火) 21:18:13.95ID:eYWJvdmr
C++でうまくかけないヤツとか構造化の仕方がヘタクソなだけだろ
2022/01/04(火) 21:26:13.33ID:XgtuTErn
>>424
そう思うんならそれでいいじゃない
意味ないってことで
2022/01/04(火) 22:20:27.31ID:3laoj6Oq
>>430
それでいいということを認めるなら、>>424にもちゃんと反論しろ
2022/01/04(火) 22:35:39.57ID:e2VKtfmk
>>428
で、バグが減ったか?まるで変わらんやろ。馬鹿馬鹿しい。
2022/01/04(火) 22:39:34.49ID:NZNEJALT
C++の存在意義がゼロになったわけではない
C++で作られた過去の莫大なライブラリは今後も併用される
C++しか使えない過去のプログラマーの活用のためにC++を用いる案件もしばらくは残る
2022/01/04(火) 22:40:33.65ID:f+4ZfnKj
議論したいならまず相手を選ぼうね
ルサンチさんを相手にしても理性的な議論にはならんから
2022/01/04(火) 22:57:10.37ID:llSa7WOy
個人的には大規模なC/C++の組み込み開発で散々メモリ破壊系の不具合に泣かされてきたから組み込みでRustを使う流れがきてるのに期待してる
国産RTOSだとKMCのToppersベースのOS、SOLIDが最近Rustに対応し始めた
2022/01/04(火) 23:30:25.45ID:C7kM4kmV
>>435
メモリ破壊ってそんな起きる?
lock,off,len,remainさえ揃ってたら破壊なんて起きなくね?
2022/01/05(水) 00:36:25.86ID:PXsSrjEd
>>436
そんなには起きないけど1,2機種に1個ぐらいは難問と言われるような不具合があるかな?
共通してるのは再現性がとても低いかつランダムな領域のメモリを破壊する
でもいざ何週間もかけて仕込み入れて再現されて原因特定するとしょーもない不具合だったりする
それこそRustじゃコンパイル通らないような初歩的な原因だったこともある
静的解析ツールは回してるけどどうしても漏れることはある
2022/01/05(水) 07:47:37.79ID:IIKhgKt4
嘘くせえwメモリ破壊を理由にRustに期待とか意味わからん
MMUがちゃんと設定できてないか、スタック不足でリークしてるだけとか、あるいはスレッド競合に見えるし
比べてる対象がOS前提のRustと、そんなもの無い開発を比べてないか
2022/01/05(水) 07:48:29.43ID:jCayWhDI
>>436
同意だな
Cなんて学習の過程でなんぼでもメモリ壊すもんだから
逆説的だけどメモリなんて壊し慣れてるんだよ
どうやって壊してるのかどうやったから壊れたのか
だからだんだん目新しい壊し方が無くなってきてスリルは無くなる
2022/01/05(水) 10:11:35.03ID:RHFS+zMh
バカだろおまえ
441デフォルトの名無しさん
垢版 |
2022/01/05(水) 12:14:32.80ID:R1aBhW/Q
このスレがム板内で一番勢いあるのが笑える
C++やRustの本スレより勢いあるやん
2022/01/05(水) 17:00:20.32ID:D7gzVahT
>>437
すまん、よく分からんわ…

>>439
分かる
壊し方も調査方法もパターン化してくるし、熟れてくると糞コードセンサーが働いて「この辺じゃね?」って見当つくしな
ログもコアもダンプもないなら難しいけども
2022/01/05(水) 17:48:42.80ID:od0+oW4W
本当に調査が難しいのは、並列処理があって競合状態が起きてるときかなあ
2022/01/05(水) 18:37:34.29ID:5WkA2q2d
ランダムな領域のメモリを破壊が毎回起きて組み込みやってます!キリッ
445デフォルトの名無しさん
垢版 |
2022/01/05(水) 19:21:52.17ID:bh75XIUs
HaskellとRustはコンパイル出来た時点でバグが無いことを保証される。
2022/01/05(水) 19:36:29.51ID:N7h+YsNa
釣り針見えてますよ
447デフォルトの名無しさん
垢版 |
2022/01/05(水) 20:15:39.00ID:bh75XIUs
これが釣りに見えるのか。
驚きです。
448デフォルトの名無しさん
垢版 |
2022/01/05(水) 21:37:09.44ID:hbslRCuW
HaskellとRustのバグはバグじゃなくて仕様と呼ぶからなw
2022/01/05(水) 22:15:33.82ID:/CcLnr/X
どうせバカが使ってもRc、RefCellばっかのコードで全く所有権なんて活かせないコードにしかならんよ。
2022/01/06(木) 14:37:54.75ID:eeb9qMHg
>>447
rustのコンパイラって不等号の向き間違ってますよとか教えてくれるの?
2022/01/06(木) 15:02:23.63ID:rC5yvWMp
日付比較で不等号の向きで古いファイルが消されるか新しいファイルが消されるか決まることもあるしな
ふるい分けファイルの方が日にち稼いでいるからデカいはずだと錯覚するヤツが必ずでてきてデススパイラル撒き散らしたりな
2022/01/06(木) 15:03:56.77ID:rC5yvWMp
×ふるい分け
○古い
2022/01/06(木) 16:49:55.21ID:eeb9qMHg
仲介イテレータ君かな
「バグ」という言葉すら独自解釈
2022/01/06(木) 16:54:48.74ID:/n5h7nDr
釣りじゃなくてマジだったらアカンやつだ
2022/01/06(木) 18:00:28.75ID:XfL6smUL
でかい釣り針は不都合なものから注意をそらせるために使うもの
2022/01/06(木) 21:02:54.57ID:WPtX8f+v
>>338
リーナスが例外(パニック含む)を受け入れないから
2022/01/06(木) 23:56:10.56ID:Q5dnJVm5
Rustなら例外機構がそもそも無いし
パニックを引き起こさないチェック付きの代替も揃っているからな
2022/01/07(金) 00:30:02.39ID:cXPu1ueH
SanitizerなしでCやC++書ける人にはRust不要かもね
逆に必要な人はRust使った方が幸せになりそうです
2022/01/07(金) 00:44:00.42ID:yZQL1qV+
例外機構≠パニックという主張はGoでもあるが無理がある。チェックも近代的な言語ならほぼある
2022/01/07(金) 01:15:29.54ID:9qeGIYdY
Rustは標準ライブラリの条件付きコンパイルをサポートしてるしそのうちpanic-freeな標準ライブラリも作れるようになるんじゃね。知らんけど
2022/01/07(金) 01:18:46.69ID:KVbSetTk
Rustで特別に安全っていうのはあくまでメモリらへんの事なんだよね
ダングリングポインタ、データ競合、未初期化の変数を読んでしまう、とかみたいなのは起きない
こういうのはC/C++だと巨大プロジェクトではどうしても抜け漏れが出るし、よく脆弱性になるからこれが保証されるだけでもめちゃくちゃ心強い

そんで例外っていう危うい仕組みはなくても、他にも気をつけなきゃいけない事はいくらでもある
例えば内部部割り込み、デッドロック、競合状態、メモリリークとかはunsafe使ってなくても普通に起こるので、
プログラマがちゃんと理解して考えて制御しなければいけない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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