[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2ch.scのread.cgiへ]
Update time : 02/11 13:46 / Filesize : 165 KB / Number-of Response : 546
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Rust part19



1 名前:デフォルトの名無しさん mailto:sage [2023/01/17(火) 12:41:32.25 ID:nikBFIMQ.net]
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

公式ドキュメント
https://www.rust-lang.org/learn

Web上の実行環境
https://play.rust-lang.org

※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/

※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust

※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/

※次スレは原則>>980が立てること

前スレ
Rust part18
https://mevius.5ch.net/test/read.cgi/tech/1670663822/

2 名前:デフォルトの名無しさん mailto:sage [2023/01/17(火) 12:41:51.84 ID:esjs4yiD.net]
たておつ

3 名前:デフォルトの名無しさん mailto:sage [2023/01/17(火) 14:00:56.91 ID:MqwPrlrO.net]
89 それでも動く名無し 2023/01/10(火) 23:26:51.53 ID:pA5+SQtP0
痴漢ものAVと違ってこういうガチ痴漢は臨場感が違うわ
抵抗されて上手く行かなかったり、たまに他の客にバレて逃走してるからな
マジで興奮する
https://i.imgur.com/My4nuB1.jpg
https://i.imgur.com/ttXkWGH.jpg
https://i.imgur.com/upphmaU.jpg
https://gcolle.net/product_info.php/products_id/763929/ref/15062/affiliate_banner_id/1

520 名無しさん@ピンキー sage 2023/01/03(火) 21:36:57.85 ID:AS4vmq4R0
不朽の名作が復活していたので
https://i.imgur.com/SGsDTp5.jpg
https://i.imgur.com/4R20ojB.jpg
https://gcolle.net/product_info.php/products_id/863650/ref/15062/affiliate_banner_id/1

4 名前:デフォルトの名無しさん mailto:sage [2023/01/17(火) 14:01:08.20 ID:MqwPrlrO.net]
すみません、誤爆しました

5 名前:デフォルトの名無しさん mailto:sage [2023/01/17(火) 14:04:39.15 ID:QD1aLS8A.net]
   . :::';;;;: . .     ..,,,;;:
   . . :;;;;;:.:;;,,    ..:.;;;;.:
   :;;'''  .:';;; . .  .:.:;;;;;':. . .        .,,,,;,,...,,
      .:;;;' :   .:;;;;; .: ,,,;;;,,,   ,  .:;;;';;''' ''';;;;,,
     . :.;;;;' . .:   ;;;;;;;;'''' ';;;:.:.. ,;: . .    ''''''"
     ';;:;'     '''';   .:.';;;;,,;;.
                 '''  ,.:.:';;;;,,,,
             ,、—-、    .;.';:;.:.: ;;;;;;:.;.;...
   -、_      (_二ニ=っ,、;;;:.:;.:;...:.:...'''''''''''
     `‐-、_  (  ´∀)f、 `''、:..:.:. .:
         `-,ノ   つ; /
         (〇  〈-`'"
         (_,ゝ  ) `‐-、_
           (__)     `'‐-、,_..
                        `‐-、._

6 名前:デフォルトの名無しさん mailto:sage [2023/01/17(火) 14:25:12.33 ID:IvlgRnTP.net]
ここが新しいおちんぽスレと聞いて

7 名前:デフォルトの名無しさん [2023/01/17(火) 14:31:29.73 ID:AjT+2M0N.net]
最低だな
犯罪者予備軍やん

8 名前:デフォルトの名無しさん mailto:sage [2023/01/17(火) 16:35:46.70 ID:+0g0VEsU.net]
通報しといたよ

9 名前:デフォルトの名無しさん mailto:sage [2023/01/17(火) 16:41:04.96 ID:mmIRzxLT.net]
はよ立て直せ

10 名前:デフォルトの名無しさん mailto:sage [2023/01/18(水) 10:59:16.69 ID:j7LzfbP6.net]
ワッチョイ有効スレ
https://mevius.5ch.net/test/read.cgi/tech/1674007100/



11 名前:デフォルトの名無しさん mailto:sage [2023/01/18(水) 12:30:23.66 ID:NvrWVfIW.net]
おちんぽまんまんスレ違いと聞いて

12 名前:デフォルトの名無しさん mailto:sage [2023/01/18(水) 20:15:50.70 ID:CRD98AUE.net]
ResultがErrの時だけブロックを実行するifってどうやって書けばいいの?
if Err(_) = fs::read_to_string("foo.txt") { err() }
は通らないようだが

13 名前:デフォルトの名無しさん mailto:sage [2023/01/18(水) 20:29:34.91 ID:vXgVoSzN.net]
if let Err(_)

14 名前:デフォルトの名無しさん mailto:sage [2023/01/18(水) 20:41:58.72 ID:CRD98AUE.net]
>>13
サンキュー。行けた

15 名前:デフォルトの名無しさん mailto:sage [2023/01/19(木) 04:27:00.05 ID:UpsgRjC+.net]
>>12
エラーが起きた時は先に判断してreturnして
そうでなく正常値が得られた時はlet代入してインデントを下げずに書けないかな?

16 名前:デフォルトの名無しさん mailto:sage [2023/01/19(木) 07:51:52.20 ID:kHXiKnOP.net]
>>15
それが少し前に入ってみんな喜んでた let else だね。

let Ok(value) = result else { return };
/* Ok のときやりたい処理 */

みたいにエラーは早期リターンして、正常系をインデント下げて書くみたいなことができる。

俺は Err は anyhow で呼び出し側に返しちゃう事が多いから正直あまり使わないけど。

17 名前:デフォルトの名無しさん [2023/01/19(木) 10:36:41.67 ID:pws6L0p3.net]
Option/Result系は?演算子で素直に返すしそれ以外でもResultを返す関数に切り出して呼び出し側で?演算子にするからlet-elseは使い所がよく分からん

18 名前:デフォルトの名無しさん mailto:sage [2023/01/19(木) 11:05:24.00 ID:MVgEnHGb.net]
>>15
そもそもreturnしない。err()の中身はエラーメッセージを出力後にパニックさせるので一方通行

19 名前:デフォルトの名無しさん [2023/01/19(木) 13:52:46.10 ID:i8wJP128.net]
expectじゃだめなのかな?
もう少しちゃんとしたロギングをしたいならlog crate使ってlog_expectみたいな形でunwrap

20 名前:デフォルトの名無しさん [2023/01/19(木) 14:21:48.46 ID:plizw9iy.net]
自分で書いといてあれだからやっばりexpect使うケースじゃないな
panicさせるよりもErrのまま最上位まで返してそこでログ出力含めてハンドリング



21 名前:デフォルトの名無しさん mailto:sage [2023/01/19(木) 18:44:58.53 ID:kHXiKnOP.net]
expectってライブラリの動作確認とかサンプルコードとか、トップレベルで雑なことしたいとき以外使わなくない?

深めの階層で見かけたら身構えちゃいそう。

22 名前:デフォルトの名無しさん mailto:sage [2023/01/19(木) 19:25:25.54 ID:UlqzrrZi.net]
論理的に安全にunwrapできるってわかってる箇所には使うかな
もしパニックになるならそもそも致命的な論理バグがあるってことになるから
変にエラー処理するより早期に落とした方がいいってケース

23 名前:デフォルトの名無しさん mailto:sage [2023/01/19(木) 20:03:32.07 ID:KyLvYp+m.net]
横からですまんが安全なら unwrap() でよくない?
expect() にする理由ってなんだろう

24 名前:デフォルトの名無しさん mailto:sage [2023/01/19(木) 20:30:48.24 ID:UlqzrrZi.net]
個人的には Regex::new(r"").unwrap() みたいに自明ならunwrap
安全にunwrapできる理由を書きたいならコメントに書くよりexpectに書くかな

25 名前:デフォルトの名無しさん mailto:sage [2023/01/19(木) 20:45:59.09 ID:kHXiKnOP.net]
なるほどね。自明な時に unwrap したいけど、仮に起きたときに原因調査しやすいよう expect というのは納得できる。

26 名前:デフォルトの名無しさん mailto:sage [2023/01/19(木) 20:51:26.80 ID:kHXiKnOP.net]
あ、違うか。unwrapできる理由を書くわけか。

paniced at 'ここでは 0 は渡ってこないので自信を持って除算する'

みたいな出力になるから割と恥ずかしいな。

27 名前:デフォルトの名無しさん mailto:sage [2023/01/19(木) 21:03:13.60 ID:KyLvYp+m.net]
>>26
これは俺も思ったw
まぁ自分しか使わないライブラリとかならいいかもね

28 名前:はちみつ餃子 mailto:sage [2023/01/19(木) 22:24:19.09 ID:uAmZfzQm.net]
>>27
自分意外が使う前提のときのほうが except が必要だと思う。

外部から与えられる情報が仕様外の場合 (事前条件が満たされない場合) など
使い方が誤っているときに起こりえるなら except で説明があったほうがいいんじゃない?

内部的なロジック的に起こりえないと確信しているところは unwrap でいいと思う。
間違いがあったときに panic! してくれることには変わりないしバックトレースも出せるんで、
特に必要だと思う箇所だけ説明を付けておけば十分でしょ。

29 名前:デフォルトの名無しさん mailto:sage [2023/01/19(木) 22:58:51.51 ID:TbDEskmg.net]
>>26
関係ないけどpanicに-ed、-ingつけるとkが差し込まれてpanicked、panickingになる
自分もRust触るまで知らなかった

30 名前:デフォルトの名無しさん mailto:sage [2023/01/20(金) 00:14:17.87 ID:+VmzUJ32.net]
Optionを返す関数が2つ(以上)あり、
Someを得られるまで遅延評価で順に試す場合に、
func1(arg)
.or_else(|| func2(arg))
と非対称で手間なのを改善する方法ありますか?
例えば func1(arg) || func2(arg) と書けると便利だと思いました



31 名前:デフォルトの名無しさん mailto:sage [2023/01/20(金) 00:47:21.47 ID:sbzTb5wM.net]
イテレータ化してchain()で繋げるとか?
でも手間は変わらないか

32 名前:デフォルトの名無しさん [2023/01/20(金) 02:52:18.79 ID:rWEP7xyW.net]
>>30
ないんじゃね
何回も書く必要があるなら単に関数化する
||演算子で書きたければマクロ内独自文法作る

33 名前:デフォルトの名無しさん mailto:sage [2023/01/20(金) 11:05:21.77 ID:cF/QvtGv.net]
>>20
今だいたいそうなっていてmainにエラー出力用のコードが散在している状態
エラーメッセージの出力先もコンソールのみじゃないのでexpectだと難しい気が

34 名前:デフォルトの名無しさん mailto:sage [2023/01/20(金) 13:36:20.52 ID:pmLm7hT0.net]
ちんちん!シュッ!シュッ!!シュッ!!!

35 名前:デフォルトの名無しさん [2023/01/20(金) 21:59:08.95 ID:A12k25he.net]
>>33
いろんな問題をごちゃ混ぜにしすぎ
頭とコードを整理しよう

36 名前:デフォルトの名無しさん mailto:sage [2023/01/21(土) 14:16:15.90 ID:tEFzN85r.net]
1.すべてmainまで返してmainでエラー処理をする
2.エラー処理用の関数を作ってそれを呼び出す
3.パニックハンドラでエラーメッセージを出力
くらいしか思いつかん。ググってもThe Bookに書いてある程度のことしか出てこなくて参考にならない
3はpanic!やexpectで脱出できるのは楽だけどハンドラへ渡せるデータが文字列のみでなのがいまいち
またエラー処理に必要な情報を文字列にエンコードする必要がある
2ならmainまで戻らずともエラー処理できるのでこの方向で実装中

37 名前:デフォルトの名無しさん [2023/01/21(土) 14:57:31.49 ID:hb5eMxVX.net]
log crateやtrace crateはチェック済み?
logは準標準、実装は好きなのを選ぶ必要がある
traceはtokio-rs製

38 名前:デフォルトの名無しさん mailto:sage [2023/01/21(土) 16:41:16.71 ID:3Tq4pZe4.net]
>>32
|オペレータのstd::ops::BitOrトレイトのように
||オペレータのトレイトをRustコンパイラが用意してくれたらOptionも||で扱えそう

39 名前:デフォルトの名無しさん mailto:sage [2023/01/21(土) 18:30:23.18 ID:/bIQjlWu.net]
>>37
info!やerror!ってpanic!やexpectと本質的に変わらないような。いずれにしろ呼び出し側で文字列の加工が必要
GUIへの対応方法もよくわからない。開発時はもちろんコンソールへの出力を使うけど
運用中のエラー出力はGUIのポップアップメッセージがメインになるし

あとソースコードは600行弱くらいだけどリリースビルドで生成されるバイナリは800KB弱もあるんで
これ以上でかくしたくないというのもある

40 名前:デフォルトの名無しさん [2023/01/21(土) 22:40:10.67 ID:wag66I/R.net]
ロガーを設定/生成するコード
ロガーを使うコード
ロガー自体のコード
それぞれ分けて考える

ロガーを使うコードではファイル出力だろうが標準出力だろうがinfo!やerror!でコードを変える必要はない
使うロガーを変えたり設定を変えたりする

ロギングライブラリを使うのは自前で作るのは面倒だから



41 名前:デフォルトの名無しさん [2023/01/22(日) 02:33:12.00 ID:5IaN6zUW.net]
書籍で最初に読むとしたら
平家蟹の方?
それとも可愛い方?

42 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 02:45:54.00 ID:DAK16wxY.net]
平家蟹がかわいくないとか、こいつアンチか?

43 名前:デフォルトの名無しさん [2023/01/22(日) 02:46:40.77 ID:4BdfAMug.net]
>>39
>GUIへの対応方法もよくわからない。
GUIのレイヤーまでResultを戻してErrならエラー表示をするだけ

44 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 12:43:00.06 ID:WLCvNrGP.net]
>>39
ログはログ。何が起きたか記録するだけ。ログレベルが何であれ副作用は起こさない。
エラーはエラー。発生したときにどうハンドリングするかはプログラムの性質で決める。
パニックはそのまま稼働したらまずい状況に陥ったら時だけ起こす。

45 名前:デフォルトの名無しさん [2023/01/22(日) 14:52:04.22 ID:RMpOCJx1.net]
>>41
モンタギュー蟹の方

46 名前:デフォルトの名無しさん [2023/01/22(日) 15:29:33.81 ID:WCVJRVcD.net]
アプリケーションのレイヤーでパニック起こすのはバグの時だけ

47 名前:デフォルトの名無しさん mailto:sage [2023/01/25(水) 16:19:44.22 ID:zlgPT3s2.net]
ネットワーク前提にしてる時に、panicになるのはバグではないよ?

48 名前:デフォルトの名無しさん mailto:sage [2023/01/25(水) 16:35:00.31 ID:LG3Fy/yw.net]
うっわすっげー読みやすいコードと思ってよく見てみたら
過去に自分が書いたやつだった(´・ω・`)

49 名前:デフォルトの名無しさん mailto:sage [2023/01/25(水) 16:39:27.19 ID:5onhVltK.net]
天才か?

50 名前:デフォルトの名無しさん mailto:sage [2023/01/25(水) 16:40:49.73 ID:GSIKYco3.net]
過去の自分は他人だと思え、がプログラミングの基本



51 名前:デフォルトの名無しさん mailto:sage [2023/01/25(水) 17:17:39.71 ID:xORIlv/9.net]
過去のことを忘れていても過去の自分が考えることは今の自分が考えることとあまり差がない。
名前の付け方とかは何度考えても同じような状況なら同じ名前を付けるし。

書くときに想定する読み手が全くの他人のときと未来の自分のときではちょっと違う意識があるな。

52 名前:デフォルトの名無しさん mailto:sage [2023/01/25(水) 18:36:03.64 ID:V9gmFqbx.net]
一度も使ったことがない機能は書くことはできても読めると思うな、が基本
使ってから読め

53 名前:デフォルトの名無しさん mailto:sage [2023/01/25(水) 19:53:08.97 ID:sck5kayB.net]
>>47
ネットワークこそ途中で途切れること前提に書かないといけない機能の最たるものだろ。エラー返してハンドリングしろ。

54 名前:デフォルトの名無しさん [2023/01/25(水) 20:37:11.28 ID:5EKz9Dxo.net]
>>48
あるあるだね

55 名前:デフォルトの名無しさん [2023/01/25(水) 20:38:19.94 ID:xtWPaGBn.net]
>>47
なんでpanicになるの?

56 名前:デフォルトの名無しさん mailto:sage [2023/01/25(水) 21:43:02.36 ID:jK9fbSTx.net]
>>38
一度ポシャってるけど実装される可能性はあると思う
https://github.com/rust-lang/libs-team/issues/144

57 名前:デフォルトの名無しさん mailto:sage [2023/01/25(水) 23:55:49.39 ID:7h2BZmgN.net]
bool以外でも&&と||の遅延評価が使えるようになるわけか
欲しいね

58 名前:デフォルトの名無しさん mailto:sage [2023/01/26(木) 00:47:59.28 ID:Oik+f0Gv.net]
bool以外でもifを使えるといえばif letで
elseを省略することで3項ではなく2項演算のようになるのも&&と同じ
だがelseを省略できても{}を省略できなければ意味がない

59 名前:デフォルトの名無しさん [2023/01/26(木) 11:05:43.50 ID:G0iCERKY.net]
>>58
もうちょっと基礎を勉強してからレスしろ

60 名前:デフォルトの名無しさん [2023/01/26(木) 11:09:10.89 ID:QY5r5/0E.net]
すまんが、これの解答はmutをつけろっていうことなのはわかるけどさ
https://github.com/rust-lang/rustlings/blob/main/exercises/variables/variables4.rs
なんで8行目で所有権を失って9行目で代入できなくなったりしないの・・・・?



61 名前:デフォルトの名無しさん [2023/01/26(木) 11:24:13.84 ID:DDvWU5a2.net]
>>60
これはもっともな疑問

The Bookのどこかに書いてたように思うけど
ざっくり言えばprintlnはreferenceを取るから所有権は移動しない

DisplayトレイトやDebugトレイトのメソッドシグニチャを見ると分かる

62 名前:デフォルトの名無しさん mailto:sage [2023/01/26(木) 11:33:53.75 ID:Y60o/Mze.net]
>>60
ついこないだ Teratail で同じような質問を見たぞ。
マクロは構文糖を作り出す仕組みなので展開形によっては所有権を取ることも借用なことも何にも使いすらしないということもある。

63 名前:デフォルトの名無しさん mailto:sage [2023/01/26(木) 14:03:27.91 ID:YuUaXpq9.net]
ある関数の&mut T型の引数として、T型の変数を貸すのは分かるけど
&mut T型の変数を又貸しするのが不思議
なぜmoveしたことにならないのか

64 名前:デフォルトの名無しさん mailto:sage [2023/01/26(木) 15:25:17.84 ID:MCrVnhV0.net]
>>63
&TはCopyだからmoveしないよ

65 名前:デフォルトの名無しさん [2023/01/26(木) 15:35:28.34 ID:SkvAt80a.net]
>>63
implicit reborrowのことかな?
&mut Tの又貸しと言ってるのがどういうケースなのかはコードかないハッキリはわからないな

66 名前:デフォルトの名無しさん mailto:sage [2023/01/26(木) 17:21:49.46 ID:YuUaXpq9.net]
implicitly reborrowedされるとhogeが&mut *hogeになるのか
勉強になった
ありがとう

67 名前:デフォルトの名無しさん mailto:sage [2023/01/26(木) 18:45:49.05 ID:nglgEIPC.net]
結局&mutを持っている間は専有しているから既存ルールに抵触することなく貸し出し自由自在という理解でいいのかな
&*でimmutableなreborrowも出来ちゃうもんね

68 名前:デフォルトの名無しさん mailto:sage [2023/01/26(木) 19:48:43.33 ID:16g2h/GU.net]
>>60
変数が値を所有しているんだよ
値がムーブされて一度無効化された変数にも新しい値を所有させられるよ
例えば、その9行目でxが3を所有していなかったとしても新しい値を入れられるよ
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=657d792c80f30e9430f0fbff11556fe6

69 名前:デフォルトの名無しさん mailto:sage [2023/01/26(木) 19:50:53.34 ID:uBPDOaY+.net]
暗黙で参照が外されることがあるからわかりにくいんだろうな
最初から暗黙の参照外しがなければよかったと思うが
後方互換性を大事にするなら、もう改善は不可能だな

70 名前:デフォルトの名無しさん mailto:sage [2023/01/26(木) 20:31:02.62 ID:q1WzF/2m.net]
>>53
だからバグじゃないよね?



71 名前:デフォルトの名無しさん [2023/01/26(木) 21:11:51.00 ID:BacNCpeu.net]
>>70
エラーを返すんだからpanicしないだろ

72 名前:デフォルトの名無しさん [2023/01/26(木) 21:14:28.71 ID:GObOayQz.net]
>>68
そりゃmutならなw

73 名前:デフォルトの名無しさん [2023/01/26(木) 21:18:17.56 ID:q8T2WGhT.net]
implicit reborrowはThe Bookには書かれないし直感的でもないから動きが理解しにくいというのはよく分かる

74 名前:デフォルトの名無しさん mailto:sage [2023/01/26(木) 21:50:47.31 ID:ZxPs9rBQ.net]
>>70
例えばtwitterアプリを地下鉄とか通信できない状況で起動して panic で落ちる事を考えてみろ。そりゃバグだろ。

75 名前:デフォルトの名無しさん mailto:sage [2023/01/26(木) 22:06:21.53 ID:HEA6MC1t.net]
Deref無しは流石にきついな
一気にRust書きたくなくなる気がする

76 名前:デフォルトの名無しさん mailto:sage [2023/01/26(木) 22:20:38.36 ID:nglgEIPC.net]
>>69
むしろderef含めたcoercionのおかげでRustは便利かつ読みやすいと思う
初心者の最初のうちだけは混乱するかもしれないけどそのデメリットを誤差にするほどの絶大なメリットがある

77 名前:60 [2023/01/27(金) 11:24:22.85 ID:CSClNfzp.net]
教えてくれてるのは本当にありがたいんですが、訳がわかんないぽ・・・・

78 名前:デフォルトの名無しさん [2023/01/27(金) 11:51:57.32 ID:YDsF+xqw.net]
>>77
何がわからないのか書いて

79 名前:60 [2023/01/27(金) 13:58:30.55 ID:CSClNfzp.net]
マクロが展開するコードがあって、そこに&がついてるってことなんですか?

80 名前:デフォルトの名無しさん mailto:sage [2023/01/27(金) 14:00:09.55 ID:MqPTrKVr.net]
せやで
Playgroundの左上のボタンでShow HIRするとマクロ展開等終わった後のコード出るから見てみ



81 名前:デフォルトの名無しさん mailto:sage [2023/01/27(金) 19:13:43.59 ID:q2LYouLt.net]
&はついてるけどあなたの疑問とは関係ないと思う

82 名前:デフォルトの名無しさん mailto:sage [2023/01/27(金) 21:29:03.39 ID:N1uoRX56.net]
>>74
例がtwitterアプリって...通信が出来ない状態でも何らかのオフライン操作が行えるアプリであればそうでしょうが
仕様上、エラーハンドリングを行わなければならないとされていないならバグではないでしょ....
むしろ大したログやコンソールでの情報も出さず、「エラー:通信ができましぇん」なんて返されるほうが迷惑だわ

83 名前:デフォルトの名無しさん mailto:sage [2023/01/27(金) 21:54:30.76 ID:cQ0vJjwr.net]
>>82
バグかどうかは仕様次第というのはそりゃそうなんだけど、それじゃ建設的な議論にならんでしょ。
俺はError返しといたほうが利用側がハンドリングする余地があっていいと思うね。

84 名前:はちみつ餃子 mailto:sage [2023/01/28(土) 02:45:04.16 ID:OM0pptP0.net]
>>82
Rust の文化にあまり詳しいわけじゃないけど panic を呼び出すのって C/C++ で言うところの assert 的なもんでしょ。
普通に考えたら panic が呼ばれるのはモジュールの仕様に対して使い方が間違っているかリカバリ不可能な場合。
逆に言えば使い方が正しくてリカバリ可能な状況で panic になるべきではない。

モジュールの使い方が完璧に正しいプログラムを書いても panic が引き起こされてしまうなら panic の使い方のほうが間違ってる。
絶対に通信が確立する状況で使えという仕様を設定すりゃあ間違ってるのは使い方のほうではあるけどさー、
ネットワークでそれは不可能な前提じゃん? ありえない前提を元にするのは不毛だろ。

85 名前:デフォルトの名無しさん mailto:sage [2023/01/28(土) 07:46:19.92 ID:NqcfPhRT.net]
>>82
> 仕様上、エラーハンドリングを行わなければならないとされていないならバグではないでしょ....
仕様バグ...

86 名前:デフォルトの名無しさん mailto:sage [2023/01/28(土) 09:58:07.00 ID:40nYh31B.net]
ユーザーにとって不自然な動作をすれば開発者が仕様だと言い張ったところでそれはバグだよ

87 名前:デフォルトの名無しさん mailto:sage [2023/01/28(土) 10:54:36.16 ID:9JWZ6Tol.net]
エラーにも回復可能なエラーと不可能なエラーがあり、panicすると回復不可能な状態になるんだから、回復可能なエラーはpanicすべきじゃない。ましてや通常使用でしばしば発生する状態でpanicするのは言語道断だわな。

88 名前:デフォルトの名無しさん mailto:sage [2023/01/28(土) 10:57:15.78 ID:A5TUrW0u.net]
assertというかexitやな。推奨はされん、普通はデバッグで面倒な時くらいじゃないか。

89 名前:デフォルトの名無しさん mailto:sage [2023/01/28(土) 11:52:23.17 ID:NqcfPhRT.net]
>>86
MSの開発者を説得してくれ

90 名前:デフォルトの名無しさん mailto:sage [2023/01/28(土) 11:54:06.56 ID:NqcfPhRT.net]
>>88
exitは正常終了でも呼ばれるからassertのほうが意味的には近いと思うぞ



91 名前:デフォルトの名無しさん mailto:sage [2023/01/28(土) 14:06:35.25 ID:qTYDIi6E.net]
マルチスレッド界隈ではスレッドの一つや二つ終了しても
回復不可能と思ってないでしょ

92 名前:デフォルトの名無しさん [2023/01/28(土) 14:59:51.08 ID:pTjpQsNq.net]
The Bookにある回復不可能かどうかという判断基準は曖昧であまり役に立たない

Resultを伝播させてトップレベルでログ出力でもしてabortさせるのに比べて
問題発生箇所でpanicさせるメリットは処理をinfallibleな関数として定義出来ること

逆に言えばバグでも無いのにinfallibleな関数呼び出しでpanicで落ちるような設計はそれ自体がバグの可能性大

93 名前:デフォルトの名無しさん mailto:sage [2023/01/28(土) 17:20:49.61 ID:qTYDIi6E.net]
0か1かではなくバグが何個あるのかも重要
落とせば一つ?
進めれば二つ以上?

94 名前:デフォルトの名無しさん [2023/01/28(土) 17:59:00.91 ID:b6xT90Ev.net]
>>93
イミフ

95 名前:デフォルトの名無しさん mailto:sage [2023/01/28(土) 19:43:12.93 ID:qTYDIi6E.net]
>>86
開発者なんていないよ、みんなユーザーだよって言い張ったのがオープンソースだね

96 名前:デフォルトの名無しさん [2023/01/28(土) 21:12:57.88 ID:ZIiiTUHL.net]
>>95
イミフ その3

97 名前:デフォルトの名無しさん mailto:sage [2023/01/28(土) 22:16:55.89 ID:qTYDIi6E.net]
ユーザーと開発者を分断して対立煽るのをやめようってことだよ

98 名前:デフォルトの名無しさん mailto:sage [2023/01/28(土) 23:41:24.90 ID:j4/fJAgO.net]
自分(たち)で用いるツール類だけは
自明な前提を満たしていない場合に限り
エラー処理をサボったpanicで終わらせてもよい

それ以外のpanicは状態矛盾など続行不可禁止で発生するが
正しくエラー終了させるべきものであり
panic発生はバグと呼んでも差し支えない

99 名前:デフォルトの名無しさん mailto:sage [2023/01/29(日) 01:28:33.47 ID:K5ah9cLk.net]
>>98
panicをハンドリングしないのはバグかどうかは仕様次第と完全に認めてるのに、建設的な議論って・・・
作法的な話や、ユーザーフレンドリなUIでエラーメッセージを出したい、いきなり終了して欲しくないのであってもプロジェクトごとに異なるし、一般的な普遍性なんて「仕様上」に何が言いようがあるんだ?
オレはいつもこうしてます!という癖だったらいくらでも言えるし、100人集めてアプリケーションのレイヤーでpanicをハンドリングする/しないでアンケートしてどっちが人気かで正しさが決まるようなものではない。
最終的に「アプリケーションのレイヤーでパニック起こすのはバグの時だけ」とかいうのは明らかに間違ってるでしょ
そうするような特定のプロジェクトの仕様がたまたま(確率的に)一致するかもしれないが、それも一般化できる話ではないよ。

まあ、お望みの建設的な議論をするなら、アプリケーションをライブラリのように使用できる余地があるならResultsなどでErrorを返すのはとても良いですが、それでもpanicをハンドリングしてErrorで返すべきでは”無い”でしょうね
なぜならRustはそれを推奨していないし、Errorチェックしてをpanicに変換する方向性はあっても、panicをErrorに変える方向性は、仮にログ出力してもpanicの握り潰しやエラー情報の欠落に等しい。(なぜならログへのI/Oエラーになってる可能性もあるから)
それは、そもそもRustのpanicは言葉上は回復不能なエラーであり、バグではなくメモリーに物理的な障害が発生して配列インデックスが変になったとか、処理が続行できない、もしくはいったん特定の場所に戻って回復できないときに使われる思想。
なので、panic->Error変換処理が正常に働くかも怪しい。だからRustはそれを捉えず上位へ流して最低限やるスタックの巻き戻しのみ処理を推奨し、即座に終了させる(=プログラムが落ちる)
Linusはこのスタックの自動巻き戻しがとても気に入らないらしいが、理由は巻き戻し処理が正常に働く理由が無いからだ。
それを無理やり捉えて、スタックトレースが出るのが嫌、即座に終了するのが嫌、は分かるけどpanicで終了したからと言って仕様に書いてなければバグじゃないでしょ

これを癖でやってしまうのはtry-catch構文があるC#やJava系から来た人が多いのではないかな...?

100 名前:デフォルトの名無しさん mailto:sage [2023/01/29(日) 02:35:07.62 ID:r5isV+tS.net]
誰もpanicをResultに変換する話はしとらんやろ








[ 続きを読む ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<165KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef