競え
※前スレ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/
C vs C++ vs Rust Part.2
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2021/12/15(水) 12:35:50.91ID:biBE4xC0446デフォルトの名無しさん
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
449デフォルトの名無しさん
2022/01/05(水) 22:15:33.82ID:/CcLnr/X どうせバカが使ってもRc、RefCellばっかのコードで全く所有権なんて活かせないコードにしかならんよ。
450デフォルトの名無しさん
2022/01/06(木) 14:37:54.75ID:eeb9qMHg >>447
rustのコンパイラって不等号の向き間違ってますよとか教えてくれるの?
rustのコンパイラって不等号の向き間違ってますよとか教えてくれるの?
451デフォルトの名無しさん
2022/01/06(木) 15:02:23.63ID:rC5yvWMp 日付比較で不等号の向きで古いファイルが消されるか新しいファイルが消されるか決まることもあるしな
ふるい分けファイルの方が日にち稼いでいるからデカいはずだと錯覚するヤツが必ずでてきてデススパイラル撒き散らしたりな
ふるい分けファイルの方が日にち稼いでいるからデカいはずだと錯覚するヤツが必ずでてきてデススパイラル撒き散らしたりな
452デフォルトの名無しさん
2022/01/06(木) 15:03:56.77ID:rC5yvWMp ×ふるい分け
○古い
○古い
453デフォルトの名無しさん
2022/01/06(木) 16:49:55.21ID:eeb9qMHg 仲介イテレータ君かな
「バグ」という言葉すら独自解釈
「バグ」という言葉すら独自解釈
454デフォルトの名無しさん
2022/01/06(木) 16:54:48.74ID:/n5h7nDr 釣りじゃなくてマジだったらアカンやつだ
455デフォルトの名無しさん
2022/01/06(木) 18:00:28.75ID:XfL6smUL でかい釣り針は不都合なものから注意をそらせるために使うもの
456デフォルトの名無しさん
2022/01/06(木) 21:02:54.57ID:WPtX8f+v >>338
リーナスが例外(パニック含む)を受け入れないから
リーナスが例外(パニック含む)を受け入れないから
457デフォルトの名無しさん
2022/01/06(木) 23:56:10.56ID:Q5dnJVm5 Rustなら例外機構がそもそも無いし
パニックを引き起こさないチェック付きの代替も揃っているからな
パニックを引き起こさないチェック付きの代替も揃っているからな
458デフォルトの名無しさん
2022/01/07(金) 00:30:02.39ID:cXPu1ueH SanitizerなしでCやC++書ける人にはRust不要かもね
逆に必要な人はRust使った方が幸せになりそうです
逆に必要な人はRust使った方が幸せになりそうです
459デフォルトの名無しさん
2022/01/07(金) 00:44:00.42ID:yZQL1qV+ 例外機構≠パニックという主張はGoでもあるが無理がある。チェックも近代的な言語ならほぼある
460デフォルトの名無しさん
2022/01/07(金) 01:15:29.54ID:9qeGIYdY Rustは標準ライブラリの条件付きコンパイルをサポートしてるしそのうちpanic-freeな標準ライブラリも作れるようになるんじゃね。知らんけど
461デフォルトの名無しさん
2022/01/07(金) 01:18:46.69ID:KVbSetTk Rustで特別に安全っていうのはあくまでメモリらへんの事なんだよね
ダングリングポインタ、データ競合、未初期化の変数を読んでしまう、とかみたいなのは起きない
こういうのはC/C++だと巨大プロジェクトではどうしても抜け漏れが出るし、よく脆弱性になるからこれが保証されるだけでもめちゃくちゃ心強い
そんで例外っていう危うい仕組みはなくても、他にも気をつけなきゃいけない事はいくらでもある
例えば内部部割り込み、デッドロック、競合状態、メモリリークとかはunsafe使ってなくても普通に起こるので、
プログラマがちゃんと理解して考えて制御しなければいけない
ダングリングポインタ、データ競合、未初期化の変数を読んでしまう、とかみたいなのは起きない
こういうのはC/C++だと巨大プロジェクトではどうしても抜け漏れが出るし、よく脆弱性になるからこれが保証されるだけでもめちゃくちゃ心強い
そんで例外っていう危うい仕組みはなくても、他にも気をつけなきゃいけない事はいくらでもある
例えば内部部割り込み、デッドロック、競合状態、メモリリークとかはunsafe使ってなくても普通に起こるので、
プログラマがちゃんと理解して考えて制御しなければいけない
462デフォルトの名無しさん
2022/01/07(金) 08:07:46.87ID:qbYUQ+0I463デフォルトの名無しさん
2022/01/07(金) 11:19:37.80ID:OPgAeAPs >>462
445 = 447だし、何いってるかわかんない
445 = 447だし、何いってるかわかんない
464デフォルトの名無しさん
2022/01/07(金) 11:31:20.72ID:HBPsUOSr465デフォルトの名無しさん
2022/01/07(金) 11:36:10.44ID:SxdBDGb9 誰でも知ってる常識を鬼の首を取ったように言うなよ
見てるほうが恥ずかしくなる
見てるほうが恥ずかしくなる
466デフォルトの名無しさん
2022/01/07(金) 11:38:11.47ID:lEqOkEly >例外っていう危うい仕組み
この捉え方のほうが危うい
この捉え方のほうが危うい
467デフォルトの名無しさん
2022/01/07(金) 11:46:55.77ID:9qeGIYdY >>466
ここで言う例外はプログラミング言語の機能としての例外(大域脱出)のことで一般的な例外処理のことではないのでは
ここで言う例外はプログラミング言語の機能としての例外(大域脱出)のことで一般的な例外処理のことではないのでは
468デフォルトの名無しさん
2022/01/07(金) 12:40:14.57ID:syLxl2NY469デフォルトの名無しさん
2022/01/07(金) 13:12:58.77ID:qCXwEiOj >>467
「一般的な例外処理」の定義をしないで語られても
「一般的な例外処理」の定義をしないで語られても
470デフォルトの名無しさん
2022/01/07(金) 13:46:09.88ID:OPgAeAPs471デフォルトの名無しさん
2022/01/07(金) 13:54:43.45ID:pFd15XiZ 再帰から一気にジャンプ出来る例外案件
472デフォルトの名無しさん
2022/01/07(金) 14:57:02.30ID:0CT3Il9G Rustの勉強も始めたが
驚き感動することが多くてはまりそうだ
try/throw/catchがないのに同じことが出来てる仕組みに感動した
?一文字でエラーを上位へ委ねることができたり
単なるenumに過ぎないはずのResult型が巧妙に使えるヤツだったり
驚き感動することが多くてはまりそうだ
try/throw/catchがないのに同じことが出来てる仕組みに感動した
?一文字でエラーを上位へ委ねることができたり
単なるenumに過ぎないはずのResult型が巧妙に使えるヤツだったり
473デフォルトの名無しさん
2022/01/07(金) 15:04:16.53ID:d3CBVc0r >>472
おまえいい加減にしろよ
おまえいい加減にしろよ
474デフォルトの名無しさん
2022/01/07(金) 15:07:55.28ID:sUYYT/1a >>467
一般的な例外処理で大域脱出でないのがあればそう言えるけど、そんなのあったっけ。
一般的な例外処理で大域脱出でないのがあればそう言えるけど、そんなのあったっけ。
475デフォルトの名無しさん
2022/01/07(金) 15:48:22.19ID:oWk93qwk476デフォルトの名無しさん
2022/01/07(金) 16:14:22.26ID:9qeGIYdY >>469
>>474
https://ja.m.wikipedia.org/wiki/%E4%BE%8B%E5%A4%96%E5%87%A6%E7%90%86
この意味での例外
確かに言語でサポートするなら大域脱出になるか
>>474
https://ja.m.wikipedia.org/wiki/%E4%BE%8B%E5%A4%96%E5%87%A6%E7%90%86
この意味での例外
確かに言語でサポートするなら大域脱出になるか
477デフォルトの名無しさん
2022/01/07(金) 17:12:07.47ID:NadPmQt/ >>476
そのwikiの定義はめちゃくちゃ曖昧だな
回復不能なエラーのことだったり、業務エラーに対するシステムエラーのことだったり
さらには設計で想定されてない問題と言いつつ
ユーザーの入力間違いや他システムと疎通が取れない場合が含まれてたり
そのwikiの定義はめちゃくちゃ曖昧だな
回復不能なエラーのことだったり、業務エラーに対するシステムエラーのことだったり
さらには設計で想定されてない問題と言いつつ
ユーザーの入力間違いや他システムと疎通が取れない場合が含まれてたり
478デフォルトの名無しさん
2022/01/07(金) 17:20:41.93ID:TtYC21gO >>477
なら例外(処理)の明確な定義ってなんだ?
なら例外(処理)の明確な定義ってなんだ?
479デフォルトの名無しさん
2022/01/07(金) 17:49:08.57ID:CgdU4kfS480デフォルトの名無しさん
2022/01/07(金) 17:57:58.23ID:htF+iGlC >>478
まぁ、ここはプログラミング言語を取り扱っているので、各言語ごとの例外機構のことなんじゃないかな
まぁ、ここはプログラミング言語を取り扱っているので、各言語ごとの例外機構のことなんじゃないかな
481デフォルトの名無しさん
2022/01/07(金) 17:58:11.94ID:0CT3Il9G GoやRustなどの言語には例外処理がないと一般的に言われているけど
これはtry/throw/catchといった特別な枠組みが存在しないことを意味してる
これはtry/throw/catchといった特別な枠組みが存在しないことを意味してる
482デフォルトの名無しさん
2022/01/07(金) 18:14:31.53ID:BlSvqzvB483デフォルトの名無しさん
2022/01/07(金) 18:40:25.34ID:zxQaNr2W 結局いつもの気持ち悪い自演コース
484デフォルトの名無しさん
2022/01/07(金) 18:51:47.76ID:g+gfmcT1 例外が発生しないので安全です。
485デフォルトの名無しさん
2022/01/07(金) 18:53:45.04ID:rW64eTg1486デフォルトの名無しさん
2022/01/07(金) 18:58:51.33ID:g+gfmcT1 古典的言語はどれも例外が発生するので危険です。
487デフォルトの名無しさん
2022/01/07(金) 19:07:57.34ID:IML2cdj0 panicよりマシだろ。
488デフォルトの名無しさん
2022/01/07(金) 19:15:54.57ID:g+gfmcT1 例外が発生しない安全な言語を使うべきです。
489デフォルトの名無しさん
2022/01/07(金) 19:16:41.68ID:g+gfmcT1 例外が発生すると大変危険です。
490デフォルトの名無しさん
2022/01/07(金) 19:28:13.38ID:qbYUQ+0I 正確には、例外が発生する「ような」状況、な。
例外すら出さずにpanicするような言語は論外。
例外すら出さずにpanicするような言語は論外。
491デフォルトの名無しさん
2022/01/07(金) 19:44:23.16ID:9qeGIYdY492デフォルトの名無しさん
2022/01/07(金) 21:01:46.84ID:duI+LFWm 例外安全性を静的に保証できる言語なんて無かったよな
493デフォルトの名無しさん
2022/01/08(土) 07:16:32.27ID:a3IlDrHC lowlevel、ハードウェアに近い開発者は例外を嫌う傾向にある
494デフォルトの名無しさん
2022/01/08(土) 08:43:00.56ID:MbImecmg スタック深階層から天元突破する不思議なマホウ
エクスセプションナムパトローナ!
エクスセプションナムパトローナ!
495デフォルトの名無しさん
2022/01/08(土) 09:24:36.18ID:y8+gbORs >>493
signalはよく使うがな
signalはよく使うがな
496デフォルトの名無しさん
2022/01/08(土) 12:05:39.79ID:Q0+pmoTx try/catchの仕組みはなくても、割り込みの対応はまあどうしても必要だよな?
497デフォルトの名無しさん
2022/01/08(土) 13:29:15.68ID:jKqZNByJ 組み込み用にexception handlerあるみたいよ
498デフォルトの名無しさん
2022/01/08(土) 13:56:43.16ID:L9/OhHd6 言語側に求められる割り込みの対応って何
割り込みの呼び出し規約に従った関数を定義できれば良い?
割り込みの呼び出し規約に従った関数を定義できれば良い?
499デフォルトの名無しさん
2022/01/08(土) 14:36:14.89ID:lA4SvdIz 低レベルの割込み処理に言語側で出来ることはあまり無い
コンパイラ側の対応次第
組込みだとマイコンの割込みベクタテーブルに関数(いわゆる割込みハンドラ)のアドレスを設定するだけ
ハンドラ内のレジスタバンク切替えやコン テキストスイッチングなどは言語の範疇を超えるのでインラインアセンブラで記述する場合もある
コンパイラ側の対応次第
組込みだとマイコンの割込みベクタテーブルに関数(いわゆる割込みハンドラ)のアドレスを設定するだけ
ハンドラ内のレジスタバンク切替えやコン テキストスイッチングなどは言語の範疇を超えるのでインラインアセンブラで記述する場合もある
500デフォルトの名無しさん
2022/01/08(土) 14:41:47.33ID:5x1u92SJ >>494
各関数呼び出し毎にRAIIによるデストラクタ処理が入る
だから例外で一気にスタックを巻き上げるだけにはならない
結局try-catch / throwという特殊な枠組みはRustのように無くしてしまえばいいのかもしれない
各関数呼び出し毎にRAIIによるデストラクタ処理が入る
だから例外で一気にスタックを巻き上げるだけにはならない
結局try-catch / throwという特殊な枠組みはRustのように無くしてしまえばいいのかもしれない
501デフォルトの名無しさん
2022/01/08(土) 15:35:19.92ID:tKnKvPsu502デフォルトの名無しさん
2022/01/08(土) 16:01:51.30ID:L9/OhHd6503デフォルトの名無しさん
2022/01/08(土) 17:09:19.03ID:MlahXNcM 従来の例外は皆がwikipediaの定義を批判しているように何でもかんでも曖昧に整理されずに詰め込みすぎている
そして各言語でのtry/catchの使われ方も同様
だからRustでは分離したのではないか?
例えば相手の状態や相手からのデータや入出力次第で起こりうる各種エラーは
こちらのプログラムに関係なく起き得ることだから普通に関数の返り値によるエラー処理でよい
一方でそれらとは全く別にプログラムが原因で起きるあってはならない論理的な間違いや
もしくはリソース不足などでの続行不可能などの事象はエラー処理ではないためパニック処理として分離した
したがって曖昧な存在である例外というものは消え去った
そして各言語でのtry/catchの使われ方も同様
だからRustでは分離したのではないか?
例えば相手の状態や相手からのデータや入出力次第で起こりうる各種エラーは
こちらのプログラムに関係なく起き得ることだから普通に関数の返り値によるエラー処理でよい
一方でそれらとは全く別にプログラムが原因で起きるあってはならない論理的な間違いや
もしくはリソース不足などでの続行不可能などの事象はエラー処理ではないためパニック処理として分離した
したがって曖昧な存在である例外というものは消え去った
504デフォルトの名無しさん
2022/01/08(土) 18:42:49.44ID:Q0+pmoTx なるほど
Goのpanic/recoverは例外機構なのか、っていうとそうじゃない感じするしややこしいなあ
Goのpanic/recoverは例外機構なのか、っていうとそうじゃない感じするしややこしいなあ
505デフォルトの名無しさん
2022/01/08(土) 18:50:40.59ID:Q9qOpCpC 461 == 467 == 503
506デフォルトの名無しさん
2022/01/08(土) 18:52:09.09ID:iq37Yx1h507デフォルトの名無しさん
2022/01/08(土) 19:06:30.46ID:uo/Nlf0C >>503
カーネルコードではallocできなくても継続不可能とはみなさないように
何を続行不可能な事象とするかはアプリケーションによって変わる
つまりその分け方は業務エラー/システムエラーや回復可能エラー/回復不能エラーなど従来の分け方と同じ
カーネルコードではallocできなくても継続不可能とはみなさないように
何を続行不可能な事象とするかはアプリケーションによって変わる
つまりその分け方は業務エラー/システムエラーや回復可能エラー/回復不能エラーなど従来の分け方と同じ
508デフォルトの名無しさん
2022/01/08(土) 19:52:28.22ID:1etCU7+u >>505
ちがうよ
ちがうよ
509デフォルトの名無しさん
2022/01/08(土) 21:04:20.72ID:MlahXNcM510デフォルトの名無しさん
2022/01/08(土) 21:50:04.90ID:VeAeICw1 例外が発生しなければ安全です。
したがって例外をサポートしない言語が安全です。
したがって例外をサポートしない言語が安全です。
511デフォルトの名無しさん
2022/01/08(土) 21:54:31.05ID:FAQD/Dxg >>510
なあ、例外がなければ安全だなんて言ってる無能な働き者はお前ぐらいだけど、大丈夫?
なあ、例外がなければ安全だなんて言ってる無能な働き者はお前ぐらいだけど、大丈夫?
512デフォルトの名無しさん
2022/01/08(土) 23:09:37.91ID:dcBn+b5K >>509
>もしくはリソース不足などでの続行不可能などの事象はエラー処理ではないためパニック処理として分離した
>したがって曖昧な存在である例外というものは消え去った
ここで言ってるパニック処理が例外処理そのもの
例外処理用のハンドリング方法を別途用意しただけであって例外というものが消え去ったわけではない
>もしくはリソース不足などでの続行不可能などの事象はエラー処理ではないためパニック処理として分離した
>したがって曖昧な存在である例外というものは消え去った
ここで言ってるパニック処理が例外処理そのもの
例外処理用のハンドリング方法を別途用意しただけであって例外というものが消え去ったわけではない
513デフォルトの名無しさん
2022/01/08(土) 23:12:31.28ID:dcBn+b5K514デフォルトの名無しさん
2022/01/09(日) 00:21:57.46ID:fLRbfEkO Rust坊の植民地になった。ここまでC/C++に対する優位性の証明ゼロ、分裂したRust坊を収容するスレ
あんたらが本当に必要なのはRust初心者スレだ。親の仇のようにC/C++に攻撃性を向けるのはもうやめたら?
あんたらが本当に必要なのはRust初心者スレだ。親の仇のようにC/C++に攻撃性を向けるのはもうやめたら?
515デフォルトの名無しさん
2022/01/09(日) 03:40:09.35ID:IJqCXjgr トリオンが足りないのでは?
516デフォルトの名無しさん
2022/01/09(日) 04:14:04.91ID:sevz4s4M 誰もC++攻撃してないよね
517デフォルトの名無しさん
2022/01/09(日) 09:21:12.75ID:IY0PEP+W 元々はRustスレに定期的に出没する「俺は天才だからC++でも安全なコードを書ける、Rustの制約はパフォーマンスの足枷」ってうるさい奴を隔離するスレだったんだよな
あいつがフェードアウトしたのに逆の意味でスレが機能し続けるのは皮肉なもんだ
あいつがフェードアウトしたのに逆の意味でスレが機能し続けるのは皮肉なもんだ
518デフォルトの名無しさん
2022/01/09(日) 09:37:17.07ID:E6fr7wut519デフォルトの名無しさん
2022/01/09(日) 10:02:26.10ID:QVmVQA75 >>518
> 日本がIT後進国なのを痛感する
例外の話だけじゃなくてこれはいろんなとこににじみ出てるよな
いろんなwikipediaの記事も日本語版って何かあいまいだったり
説明が簡潔じゃなかったりして驚く
まぁこれに関しては国のIT進歩度というよりは
あっちの人のほうが単に理論的で
理論的に書くのが好きで
理論的に書いてないのを許さない文化がるんだと思う
> 日本がIT後進国なのを痛感する
例外の話だけじゃなくてこれはいろんなとこににじみ出てるよな
いろんなwikipediaの記事も日本語版って何かあいまいだったり
説明が簡潔じゃなかったりして驚く
まぁこれに関しては国のIT進歩度というよりは
あっちの人のほうが単に理論的で
理論的に書くのが好きで
理論的に書いてないのを許さない文化がるんだと思う
520デフォルトの名無しさん
2022/01/09(日) 10:37:31.41ID:oMGs2plE >>518-519
そういう具体性の欠片もないレスでドヤ顔されても… w
そういう具体性の欠片もないレスでドヤ顔されても… w
521デフォルトの名無しさん
2022/01/09(日) 10:38:49.37ID:0wOzwgXF >>519
それが逆に数学分野や工業化学分野だと、日本の方がはるかに端正で正確な記述だと思っているのです…
それが逆に数学分野や工業化学分野だと、日本の方がはるかに端正で正確な記述だと思っているのです…
522デフォルトの名無しさん
2022/01/09(日) 11:07:34.53ID:QVmVQA75523デフォルトの名無しさん
2022/01/09(日) 11:28:40.59ID:B5+MKIjQ www 503 == 520 == 521 www
524デフォルトの名無しさん
2022/01/09(日) 16:55:21.90ID:dllKbKSF >海外のものを翻訳
ここは笑うところか?
ここは笑うところか?
525デフォルトの名無しさん
2022/01/09(日) 18:55:06.30ID:KYx55eM0 wikipediaで知識を語る超初心者がマウント取るための厨房すれ
526デフォルトの名無しさん
2022/01/09(日) 20:11:12.28ID:IJqCXjgr 例外をサポートしない言語は例外が発生しないので例外安全です。
527デフォルトの名無しさん
2022/01/09(日) 21:06:21.23ID:prbTf4O2 型安全性を保証しない言語は型検査エラーを起こさないので型安全ですって言ってるようなもんやん
528デフォルトの名無しさん
2022/01/09(日) 22:16:01.73ID:tE6q+RNQ 例外安全てのは例外によって引き起こされる問題に対して安全かどうかなんだからその喩えは不適切
529デフォルトの名無しさん
2022/01/09(日) 22:29:15.26ID:z2Ja0yjO 何かを言っているようで実質内容がないw
530デフォルトの名無しさん
2022/01/09(日) 22:32:02.28ID:IJqCXjgr 全てのエラーは例外が原因です。
例外サポートを無くしましょう。
例外サポートを無くしましょう。
531デフォルトの名無しさん
2022/01/09(日) 22:52:05.52ID:8Ry9gb1y >>526
https://en.wikipedia.org/wiki/Exception_safety
> The guarantees presented here originated out of work on C++, but apply equally to other languages and error-handling mechanisms.
https://en.wikipedia.org/wiki/Exception_safety
> The guarantees presented here originated out of work on C++, but apply equally to other languages and error-handling mechanisms.
532デフォルトの名無しさん
2022/01/09(日) 23:01:24.93ID:ULYulOFy Rustがtry-catchの例外機構を持たない理由は非常に単純で
(A) 本質的にリカバリできることは通常のエラー処理だけで十分に対処可
(B) 本質的にリカバリできないことはpanic
前者の(A)では関数がResult<T,E>で返しそれがエラー時Err(E)の時に
処理をスルーして上位へ移譲したいならfunc()?と?を1文字付加だけで済む仕組み
一方で(B)の「本質的にリカバリできない」panicとは具体的に次のどちらかとなる
(1) プログラムに論理的な間違いがある場合
(2) 何らかのリソース不足になった場合
この(1)は具体的に以下のようなケースがある
- ありえない状況に陥ってプログラマー自らpanicさせる場合
- 一部の標準ライブラリに対してありえない値を渡した場合
- 配列などで範囲外のインデックスで操作しようとした場合
- ResultやOptionで正常値でない時にunwrap()した場合
- RefCellやRwLockで実行時借用ルールを犯した場合
これらはプログラムに論理的な間違いがある場合のみ生じるためエラー処理とは本質的に異なる
一方で(2)の「何らかのリソース不足になった場合」は
プログラム自体には論理的なミスはないが何らかが溢れた以下のケース
- 数値型が溢れて計算を続行できない場合
- ヒープが溢れて新たにアロケーションできない場合
- スタックが溢れて新たに関数呼び出しができない場合
このうち数値溢れ演算はpanicを起さないチェック付き演算で置き換えて回避可能
アロケーションもpanicを生じさせないアロケーターを作ることで回避可能
# ちなみに「リカバリできないことはpanic」の考えはクロージャ単位にまで拡張されていて
# panic::catch_unwind(クロージャ)を使うとResult<T,E>を返しpanic時にErr(E)を得られるため
# そのクロージャ自体は内部でリカバリできないがpanic発生を捕捉すること自体は可能
このようにRustでは曖昧な存在である『例外』を廃して
通常のエラー処理と真の異常時であるpanicの二種類に分けて扱っている
(A) 本質的にリカバリできることは通常のエラー処理だけで十分に対処可
(B) 本質的にリカバリできないことはpanic
前者の(A)では関数がResult<T,E>で返しそれがエラー時Err(E)の時に
処理をスルーして上位へ移譲したいならfunc()?と?を1文字付加だけで済む仕組み
一方で(B)の「本質的にリカバリできない」panicとは具体的に次のどちらかとなる
(1) プログラムに論理的な間違いがある場合
(2) 何らかのリソース不足になった場合
この(1)は具体的に以下のようなケースがある
- ありえない状況に陥ってプログラマー自らpanicさせる場合
- 一部の標準ライブラリに対してありえない値を渡した場合
- 配列などで範囲外のインデックスで操作しようとした場合
- ResultやOptionで正常値でない時にunwrap()した場合
- RefCellやRwLockで実行時借用ルールを犯した場合
これらはプログラムに論理的な間違いがある場合のみ生じるためエラー処理とは本質的に異なる
一方で(2)の「何らかのリソース不足になった場合」は
プログラム自体には論理的なミスはないが何らかが溢れた以下のケース
- 数値型が溢れて計算を続行できない場合
- ヒープが溢れて新たにアロケーションできない場合
- スタックが溢れて新たに関数呼び出しができない場合
このうち数値溢れ演算はpanicを起さないチェック付き演算で置き換えて回避可能
アロケーションもpanicを生じさせないアロケーターを作ることで回避可能
# ちなみに「リカバリできないことはpanic」の考えはクロージャ単位にまで拡張されていて
# panic::catch_unwind(クロージャ)を使うとResult<T,E>を返しpanic時にErr(E)を得られるため
# そのクロージャ自体は内部でリカバリできないがpanic発生を捕捉すること自体は可能
このようにRustでは曖昧な存在である『例外』を廃して
通常のエラー処理と真の異常時であるpanicの二種類に分けて扱っている
533デフォルトの名無しさん
2022/01/09(日) 23:16:25.98ID:ShKK+0Hb 昔のテレビにはホワイトノイズあったけど、そんな感じです
534デフォルトの名無しさん
2022/01/09(日) 23:43:54.04ID:IJqCXjgr プログラムには二種類ある。
例外か例外でないか。
例外は悪。
それ以外は善。
例外か例外でないか。
例外は悪。
それ以外は善。
535デフォルトの名無しさん
2022/01/09(日) 23:45:42.71ID:pQtTDH+G じゃあ配列の範囲例外が発生するプログラムは全部悪ですね、範囲外を示して書き換えられるようにしないと!
なるほどです!ためになります!
なるほどです!ためになります!
536デフォルトの名無しさん
2022/01/09(日) 23:50:45.64ID:uOSYnK8a537デフォルトの名無しさん
2022/01/10(月) 00:23:41.85ID:KrhDNAF9538デフォルトの名無しさん
2022/01/10(月) 00:56:16.67ID:yjEJqFVX >>537
例えば以下のフィボナッチ数列を表示するプログラム
fn main() {
let mut m: i32 = 1;
let mut n: i32 = 1;
loop {
println!("{}", m);
let next = m + n;
m = n;
n = next;
}
}
これは45回まで正しく表示した後に46回目に数値が溢れてpanicとなる
プログラム自体に論理的な間違いがあるわけではない
ただ数値の溢れというリソース不足を起こしただけにすぎない
例えば以下のフィボナッチ数列を表示するプログラム
fn main() {
let mut m: i32 = 1;
let mut n: i32 = 1;
loop {
println!("{}", m);
let next = m + n;
m = n;
n = next;
}
}
これは45回まで正しく表示した後に46回目に数値が溢れてpanicとなる
プログラム自体に論理的な間違いがあるわけではない
ただ数値の溢れというリソース不足を起こしただけにすぎない
539デフォルトの名無しさん
2022/01/10(月) 01:07:09.56ID:yDWpdoZh 配列の範囲外(Index bounds)と言っているのに、数値の溢れ(overflow)をリソース不足と言い出す
「論理的間違い」とか何を言ってるのかサッパリ分からんな、こんすれの隔離Rust超初心者たち…
「論理的間違い」とか何を言ってるのかサッパリ分からんな、こんすれの隔離Rust超初心者たち…
540デフォルトの名無しさん
2022/01/10(月) 01:19:02.91ID:yjEJqFVX541デフォルトの名無しさん
2022/01/10(月) 01:56:06.89ID:jIBPGNfV 数値型の範囲も論理的に考慮してくださいよ
542デフォルトの名無しさん
2022/01/10(月) 02:26:23.03ID:yjEJqFVX543デフォルトの名無しさん
2022/01/10(月) 02:32:35.04ID:p+yOPw5a >>541
論理的に返答できる相手がどうかも論理的に考慮してくださいよ
論理的に返答できる相手がどうかも論理的に考慮してくださいよ
544デフォルトの名無しさん
2022/01/10(月) 03:15:13.62ID:B939XhoW 例外は危険なりよ。
545デフォルトの名無しさん
2022/01/10(月) 08:11:22.08ID:G9ZH73mK 有限回のイテレーションしか回せないことが分かっているのに無限ループで書くのはプログラムの論理的な誤りじゃないんだ?
メモリだのファイルディスクリプタだのPIDだのの枯渇、いわゆる通常の「リソース不足」と違って、事前に発生が完全に予見できるのに?
メモリだのファイルディスクリプタだのPIDだのの枯渇、いわゆる通常の「リソース不足」と違って、事前に発生が完全に予見できるのに?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 自民・麻生太郎 副総裁 石破政権の1年は「どよーん」 高市政権の発足で「何となく明るくなった」「世の中のことが決まり動いている」 [Hitzeschleier★]
- 東京都「都民の税金1.5兆円が国に奪われている」「全国に分配されている」に地方民ブチギレ [Hitzeschleier★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ [蚤の市★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★4 [Hitzeschleier★]
- 【27歳会社員】「自慰行為に使うために」コインランドリーの乾燥機から24歳女性の下着など計11点(時価8万2080円相当)盗んだ疑い [nita★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- トランプ、G7に代わるcore 5を発表 [805596214]
- イ カ れ た メ ン バ ー 紹 介 す る ぜ !
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★5
- 為末大「ラーメン屋の行列を、年寄りが1万円渡してきて順番譲ってくれと言ったら? 答えられない問題だよ。」 [592058334]
- 【悲報】日本共産党、ツイッター速報にブチギレ法的措置WWWWWWWWWWWWWWWWWWWWWWWWWWWW [935793931]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★4
