Rust での unwrap, expect, panic, assert 周辺の話

unwrap, expect, panic!, assert! をいつ使うべきか、どういう意味で読んでいるか等。 雑にツイット集めただけなので誰か整理してくれ〜
3
前へ 1 ・・ 6 7
Ryusei @mandel59

パニックが起きるソフトウェアを使いたくはないし、リリースもしたくないですよね

2020-12-22 18:17:35
Ryusei @mandel59

バグってるソフトも使いたくないし、バグってるよりマシだからパニックがあるわけですけど

2020-12-22 18:18:15
らりお・ザ・.*🈗然㊌㋞㋰㋷㋓ @lo48576

bottom が型なのはやっぱり大事だと思った、 std::process::exit() の型を見たときに。 [[noreturn]] void exit(int); じゃあないんだよな (?)

2020-12-22 18:18:41
らりお・ザ・.*🈗然㊌㋞㋰㋷㋓ @lo48576

バグも panic も勘弁してほしいが、どちらか選べと言われると panic ですね……

2020-12-22 18:19:11
Ryusei @mandel59

これはRustの場合の話であって、完全性を保証する型システムを考えることもできます

2020-12-22 18:20:11
ふみ (DJ Monad) @fumieval

Rustでunwrapからのパニックを出すライブラリを見るとキレそうになるが、Haskellは実行時エラーを出す関数の数々が言語仕様レベルで決められているので人のことを言えなかった

2020-12-22 18:20:20
Ryusei @mandel59

Rust, 無限ループが定義されていて未定義動作じゃないから、そこらへんわりと考えるのが面倒くさい気がする ! が「未定義動作」ではないわけで……

2020-12-22 18:26:56
らりお・ザ・.*🈗然㊌㋞㋰㋷㋓ @lo48576

未定義動作を明示できたら、それもう「定義動作」じゃない? みたいな気持ちはある (適当)

2020-12-22 18:28:05
Ryusei @mandel59

ゼロが数値であるように、未定義動作という動作を考えてセマンティクスを完全にしているんだと思う

2020-12-22 18:29:12
らりお・ザ・.*🈗然㊌㋞㋰㋷㋓ @lo48576

あくまで never type (`!`) は発散であって空集合みたいな型でしかないので、その点では単純で使いやすい (が、処理系実装者からすると結構面倒みたいで、それは昔 blog.cardina1.red/2017/12/07/nev… で調べた)

2020-12-22 18:29:14
らりお・ザ・.*🈗然㊌㋞㋰㋷㋓ @lo48576

オートマトンの想定しなかったアルファベットが入力に来たときにゴミ箱的状態に全て投げ捨てるアレを想像していました (伝われ)

2020-12-22 18:30:07
Ryusei @mandel59

無をモデルに組み入れるの、わりとよく使われている手法だ

2020-12-22 18:32:00
らりお・ザ・.*🈗然㊌㋞㋰㋷㋓ @lo48576

bottom / never type / diverge は独立した状態でなく全ての型の部分型になっているから、その辺りが厄介なのかな (適当)

2020-12-22 18:33:09
らりお・ザ・.*🈗然㊌㋞㋰㋷㋓ @lo48576

@denjiry dtolnay/no-panic: Attribute macro to require that the compiler prove a function can't ever panic github.com/dtolnay/no-pan… 検査までは試みられてますが、 clippy に導入されるレベルまで来るのは相当先になりそうですね……

2020-12-22 18:36:02
らりお・ザ・.*🈗然㊌㋞㋰㋷㋓ @lo48576

To panic! or Not To panic! - The Rust Programming Language doc.rust-lang.org/book/ch09-03-t… なんか読んだ覚えのない公式文書が出てきたんですがマジっすか (TRPL 1st edition を読んで育ったマンなので 2nd edition に目を通してない)

2020-12-22 18:38:31
らりお・ザ・.*🈗然㊌㋞㋰㋷㋓ @lo48576

後ろで「制約込みの型を作って幸せになろうな」とかも書いてあるし、総合的に私の考えと一致していたので、まあそうだよなとなった

2020-12-22 18:44:49
らりお・ザ・.*🈗然㊌㋞㋰㋷㋓ @lo48576

いい文書なので件のブログ記事にリンク追加しておこう

2020-12-22 18:45:11
denjiry @denjiry

(てっきりここからあの記事生まれたものかと思ってた)

2020-12-22 18:46:31
らりお・ザ・.*🈗然㊌㋞㋰㋷㋓ @lo48576

Panic を恐れるべからず - 何とは言わない天然水飲みたさ blog.cardina1.red/2019/12/19/don… よく見たら既にリンク貼ってあって、こいつバカか??? と思いました (ハイ)

2020-12-22 18:48:01
らりお・ザ・.*🈗然㊌㋞㋰㋷㋓ @lo48576

まあ「ちゃんと自分の納得した思想として定着した」ということでここはひとつ……

2020-12-22 18:48:39
まじかんと @tnacigam

expect の引数にエラーの説明を渡すの未だに納得してゐない (パニクることを望んでゐる様に読めるので) twitter.com/lo48576/status…

2020-12-22 21:03:06
らりお・ザ・.*🈗然㊌㋞㋰㋷㋓ @lo48576

github.com/blas-lapack-rs… ピピー! unwrap 警察です! .unwrap() の代わりに .expect("エラーにならない理由") を使いましょう!!!

2020-12-22 15:16:21
前へ 1 ・・ 6 7