公式
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/
探検
Rust part19
■ このスレッドは過去ログ倉庫に格納されています
2023/01/17(火) 12:41:32.25ID:nikBFIMQ
185デフォルトの名無しさん
2023/01/30(月) 22:40:43.76ID:xNQxd4Kt186デフォルトの名無しさん
2023/01/30(月) 22:43:08.31ID:jfU7NhFo >$ cat foo.txt
>cat: foo.txt: そのようなファイルやディレクトリはありません
ここで正しいファイル名を入力しろなどと言いだすCLIアプリは相当レア
>cat: foo.txt: そのようなファイルやディレクトリはありません
ここで正しいファイル名を入力しろなどと言いだすCLIアプリは相当レア
187デフォルトの名無しさん
2023/01/30(月) 22:48:41.78ID:mdZRdLQP >>186
その状況でエラー出して終了させるのは良いとして、まさかpanicさせるなんて言わないよね?
その状況でエラー出して終了させるのは良いとして、まさかpanicさせるなんて言わないよね?
188デフォルトの名無しさん
2023/01/30(月) 22:49:07.10ID:Rt4q8oMT189デフォルトの名無しさん
2023/01/30(月) 22:53:39.09ID:xlgBAXsb 「回復不能」って言葉がよくないんだろうな
エラーの種別についてある程度の前提知識を持ってないとなんでも恣意的に回復不能に分類しちゃう
エラーの種別についてある程度の前提知識を持ってないとなんでも恣意的に回復不能に分類しちゃう
190デフォルトの名無しさん
2023/01/30(月) 22:59:07.16ID:nWXKDIRj 通りすがりのF#erですが、RustでもRailway指向ってオススメですか?
191デフォルトの名無しさん
2023/01/30(月) 23:25:38.10ID:nWXKDIRj F#の記事ですが、ResultかpanicするべきかをRailway指向を考えた方が記事にしてます。
https://fsharpforfunandprofit.com/posts/against-railway-oriented-programming/
ドメインエラーはResult、それ以外はpanicの方が良いって言ってるぽいかな。
https://fsharpforfunandprofit.com/posts/against-railway-oriented-programming/
ドメインエラーはResult、それ以外はpanicの方が良いって言ってるぽいかな。
192デフォルトの名無しさん
2023/01/30(月) 23:30:11.69ID:dHwZCroo >>183
その場合でも例えばこのように
Result処理せずにunwrap()してpanicさせたら困ることをpanic派が気付いているかどうかだよね
fn foo(path: impl AsRef<Path>) -> String {
let text = fs::read_to_string(path).unwrap();
// テキスト処理略
}
その場合でも例えばこのように
Result処理せずにunwrap()してpanicさせたら困ることをpanic派が気付いているかどうかだよね
fn foo(path: impl AsRef<Path>) -> String {
let text = fs::read_to_string(path).unwrap();
// テキスト処理略
}
193デフォルトの名無しさん
2023/01/30(月) 23:56:32.97ID:WvBRUZ9a >>191
それは例外を使うべきケースと戻り値でエラーの種類を表現すべきケースの区別を例外機構のある言語を前提に語ってるもの
エラーの種別についての前提知識としては役立つがRustのResultとpanicの区別とはまた違う
その人が3種類に分類したエラーのうちPanicsだけがRustで言うところのpanicを使うケースにあたる
それは例外を使うべきケースと戻り値でエラーの種類を表現すべきケースの区別を例外機構のある言語を前提に語ってるもの
エラーの種別についての前提知識としては役立つがRustのResultとpanicの区別とはまた違う
その人が3種類に分類したエラーのうちPanicsだけがRustで言うところのpanicを使うケースにあたる
194デフォルトの名無しさん
2023/01/30(月) 23:59:11.83ID:dHwZCroo195デフォルトの名無しさん
2023/01/31(火) 00:14:04.93ID:c7ed+PvI 複おじ死んだんじゃなかったの?
いい加減コテつけてくれよな
あと新年の挨拶もまだだろ?まだ1月のうちにやっとけ
いい加減コテつけてくれよな
あと新年の挨拶もまだだろ?まだ1月のうちにやっとけ
196デフォルトの名無しさん
2023/01/31(火) 01:21:48.37ID:CDUXqGTR197デフォルトの名無しさん
2023/01/31(火) 04:50:14.13ID:JnYo5yDi panic・回復不能エラーは滅多にない。
Ruby on Rails でも滅多にない
ファイルが存在しない、数値に変換できないなど、予測可能なエラーは例外。
こういうのは普通に起きるエラー
たぶん、panicを使う香具師は、書き捨てのコードだろ。
リソースの解放・後始末が面倒くさいから
Ruby on Rails でも滅多にない
ファイルが存在しない、数値に変換できないなど、予測可能なエラーは例外。
こういうのは普通に起きるエラー
たぶん、panicを使う香具師は、書き捨てのコードだろ。
リソースの解放・後始末が面倒くさいから
198デフォルトの名無しさん
2023/01/31(火) 06:55:08.97ID:YNMDboNb >>191
これに尽きるでしょ
・Panics.
These are errors that leave the system in an unknown state, such as unhandleable system errors (e.g. “out of memory”) or errors caused by programmer oversight (e.g. “divide by zero,” “null reference”).
要はpanicはプログラマーにはどうしようもないメモリー不足とかプログラマーの想定外の状態になったときに使うものだよ
他のプログラム言語でもAssertとか使うだろ
これに尽きるでしょ
・Panics.
These are errors that leave the system in an unknown state, such as unhandleable system errors (e.g. “out of memory”) or errors caused by programmer oversight (e.g. “divide by zero,” “null reference”).
要はpanicはプログラマーにはどうしようもないメモリー不足とかプログラマーの想定外の状態になったときに使うものだよ
他のプログラム言語でもAssertとか使うだろ
199デフォルトの名無しさん
2023/01/31(火) 07:40:09.15ID:7I30yv0f >>196
そう
Rustはtry throw catchの例外機構を意図的に排除している
例外機構の導入は複雑になるだけだなく効率面での不利や他の機能との相性など様々な問題がある
そのためRustやGoなどのプログラミング言語では例外機構が導入されていない
例外機構のある言語の多くでは例外が素通りする途中の関数でその宣言をしないためコードを見てもその有無が分からない問題もあった
Rustでは戻り型のResultによりそれを扱うことの有無が明確になっている
さらに"?"オペレーターによりResult値が下から上へ素通りすることも明確になっている
つまり簡素化と効率化と可読性の向上全ての両立をRustは実現している
そう
Rustはtry throw catchの例外機構を意図的に排除している
例外機構の導入は複雑になるだけだなく効率面での不利や他の機能との相性など様々な問題がある
そのためRustやGoなどのプログラミング言語では例外機構が導入されていない
例外機構のある言語の多くでは例外が素通りする途中の関数でその宣言をしないためコードを見てもその有無が分からない問題もあった
Rustでは戻り型のResultによりそれを扱うことの有無が明確になっている
さらに"?"オペレーターによりResult値が下から上へ素通りすることも明確になっている
つまり簡素化と効率化と可読性の向上全ての両立をRustは実現している
200デフォルトの名無しさん
2023/01/31(火) 07:49:11.46ID:YNMDboNb >>199
> 例外機構のある言語の多くでは例外が素通りする途中の関数でその宣言をしないためコードを見てもその有無が分からない問題もあった
そりゃ途中の関数にはその例外は関係ないからね
関係ないものを見る必要はない
> 例外機構のある言語の多くでは例外が素通りする途中の関数でその宣言をしないためコードを見てもその有無が分からない問題もあった
そりゃ途中の関数にはその例外は関係ないからね
関係ないものを見る必要はない
201デフォルトの名無しさん
2023/01/31(火) 07:53:28.80ID:7I30yv0f202デフォルトの名無しさん
2023/01/31(火) 07:59:50.04ID:Tm4r8coX mainからリターンするのであればプログラムの終了に至る条件が増えるほどmainの条件分岐がでかくなる
ってことも理解できない人がpanicダメとか言っているんだね
ってことも理解できない人がpanicダメとか言っているんだね
203デフォルトの名無しさん
2023/01/31(火) 08:27:46.22ID:cn1TJfcU このスレ見ていると、Rust勉強しているのにコールスタックとかスタックフレームを理解していないやつて意外と多いのが分かるな。
そもそもmainはスタックの根元で、OSとかプログラマーから見てプログラムそのものの代表だろ。
正常なフローならmainで始まってmainで終わるのは定石であって、正常なフローを破壊するpanicは異常事態。
Rustはスタックを重視してResultとか?演算子とか整備しているんだから、わざわざ用途外でpanicを使うのはRustのコンセプトを理解できていない証拠。そんなにスタックフレームのフロー制御が嫌ならRust以外を使ったら?
そもそもmainはスタックの根元で、OSとかプログラマーから見てプログラムそのものの代表だろ。
正常なフローならmainで始まってmainで終わるのは定石であって、正常なフローを破壊するpanicは異常事態。
Rustはスタックを重視してResultとか?演算子とか整備しているんだから、わざわざ用途外でpanicを使うのはRustのコンセプトを理解できていない証拠。そんなにスタックフレームのフロー制御が嫌ならRust以外を使ったら?
204デフォルトの名無しさん
2023/01/31(火) 08:35:12.13ID:7I30yv0f >>202
そもそもpanicするのはメモリ不足くらいしかない
それも最近はtry_reserve()などpanicを避ける対応も増えてきたがまだpush_within_capacity()など安定化していないな
あと固定サイズ内でやりくりするArrayVecのtry_push()を使うこともよくある
そもそもpanicするのはメモリ不足くらいしかない
それも最近はtry_reserve()などpanicを避ける対応も増えてきたがまだpush_within_capacity()など安定化していないな
あと固定サイズ内でやりくりするArrayVecのtry_push()を使うこともよくある
205デフォルトの名無しさん
2023/01/31(火) 08:36:17.38ID:mKWzzzcA 例外がないせいで、複数ライブラリ使うとエラー型を合成する必要があってつらいわ
206デフォルトの名無しさん
2023/01/31(火) 08:39:39.26ID:08CfuspX >>200
入れ子になった関数の途中かどうかなんて関係なく、自身が呼び出した関数から出る例外に無関係な状況など考えにくいんだが
入れ子になった関数の途中かどうかなんて関係なく、自身が呼び出した関数から出る例外に無関係な状況など考えにくいんだが
207デフォルトの名無しさん
2023/01/31(火) 08:41:05.82ID:YNMDboNb >>201
何が困るのか具体的に書いてみ
何が困るのか具体的に書いてみ
208デフォルトの名無しさん
2023/01/31(火) 08:42:54.02ID:YNMDboNb209デフォルトの名無しさん
2023/01/31(火) 08:43:45.56ID:7I30yv0f >>205
それは"?"オペレータのところでFrom::from(err)変換が自動適用されるので変換をimplしておけばよいだけ
それは"?"オペレータのところでFrom::from(err)変換が自動適用されるので変換をimplしておけばよいだけ
210デフォルトの名無しさん
2023/01/31(火) 08:49:38.58ID:3fV3plkN panic派の主張は「肥大化するとなんかダサいからエラー処理サボってpanicさせとくわ。コード量は減ってスッキリするから格好いいでしょ」という風にしか聞こえない
どれだけ肥大化しようとも想定が必要なエラー処理を省略しては駄目だろう
どれだけ肥大化しようとも想定が必要なエラー処理を省略しては駄目だろう
211デフォルトの名無しさん
2023/01/31(火) 08:49:41.53ID:7I30yv0f >>207
例外がそこを通過するのか否かそこを見ただけで分からないからレビューでもリファクタリングでも何でも不便すぎる
一方でRustはそこがはっきりしていて可読性が良い
未処理な事項があって上位へ処理を委託していると明確に分かる
例外がそこを通過するのか否かそこを見ただけで分からないからレビューでもリファクタリングでも何でも不便すぎる
一方でRustはそこがはっきりしていて可読性が良い
未処理な事項があって上位へ処理を委託していると明確に分かる
212デフォルトの名無しさん
2023/01/31(火) 08:51:55.45ID:LXCt1d5H213デフォルトの名無しさん
2023/01/31(火) 09:03:32.22ID:cRk5v+aU214デフォルトの名無しさん
2023/01/31(火) 09:09:12.08ID:YNMDboNb215デフォルトの名無しさん
2023/01/31(火) 09:12:07.56ID:YNMDboNb >>210
panicはバグとかメモリー不足とかでどうしようない状態になったときに呼び出されるもので通常のエラー処理なんてできないってことぐらい理解しなよ
panicはバグとかメモリー不足とかでどうしようない状態になったときに呼び出されるもので通常のエラー処理なんてできないってことぐらい理解しなよ
216デフォルトの名無しさん
2023/01/31(火) 09:18:10.08ID:7I30yv0f >>213
そういう使い方をしたいならば例えばライブラリA,B,Cに対してMyErrorをEnumでErrorA,ErrorB,ErrorC各収容した方が扱いやすさも効率も良い
そのEnumに格納するだけのコードimpl From<MyError> for ErrorAしておくだけで簡単
そういう使い方をしたいならば例えばライブラリA,B,Cに対してMyErrorをEnumでErrorA,ErrorB,ErrorC各収容した方が扱いやすさも効率も良い
そのEnumに格納するだけのコードimpl From<MyError> for ErrorAしておくだけで簡単
217デフォルトの名無しさん
2023/01/31(火) 09:23:20.28ID:cRk5v+aU >>216
全部自動でやってよ
全部自動でやってよ
218デフォルトの名無しさん
2023/01/31(火) 09:28:45.86ID:7I30yv0f >>214
Rustでは通過する途中の関数においても"?"オペレータの有無で未処理エラーを上位へ委託しているか否かが明白に分かる
だからコードレビューがしやすいし機能追加やリファクタリングする時にも見落としがない
一方で例外機構のある多くの言語では通過する途中の関数を見ても例外が通過するのか否かすら分からない
範囲を大きく広げて探し回らないといけなくなりムダな作業も発生して不便である
Rustでは通過する途中の関数においても"?"オペレータの有無で未処理エラーを上位へ委託しているか否かが明白に分かる
だからコードレビューがしやすいし機能追加やリファクタリングする時にも見落としがない
一方で例外機構のある多くの言語では通過する途中の関数を見ても例外が通過するのか否かすら分からない
範囲を大きく広げて探し回らないといけなくなりムダな作業も発生して不便である
219デフォルトの名無しさん
2023/01/31(火) 10:14:19.93ID:PU9Vswnw >>205
自分のcrate用にエラーenumを定義して下位のエラーはそれにwrapするんだよ
その辺を楽させてくれるのがthiserror
カスタムな例外を定義しなくてもBulit-inの例外を使い回すだけで規模の小さいプログラムなら書ける例外+継承のある言語とは違うところ
Rustの場合はioエラーのみとかじゃなければ常にエラーenumを書くようになる
自分のcrate用にエラーenumを定義して下位のエラーはそれにwrapするんだよ
その辺を楽させてくれるのがthiserror
カスタムな例外を定義しなくてもBulit-inの例外を使い回すだけで規模の小さいプログラムなら書ける例外+継承のある言語とは違うところ
Rustの場合はioエラーのみとかじゃなければ常にエラーenumを書くようになる
220デフォルトの名無しさん
2023/01/31(火) 10:15:37.08ID:YNMDboNb221デフォルトの名無しさん
2023/01/31(火) 10:18:35.43ID:7I30yv0f222デフォルトの名無しさん
2023/01/31(火) 10:29:38.37ID:7I30yv0f >>220
中間関数は関与していないのではなくcatchしないことで例外エラーを上位へ移譲している
機能追加やリファクタリングではその処理位置が変わり得るから無関係ではなく把握する必要がある
同じことをRustならば上位への移譲があるか否かが明確に分かるため非常にやりやすい
中間関数は関与していないのではなくcatchしないことで例外エラーを上位へ移譲している
機能追加やリファクタリングではその処理位置が変わり得るから無関係ではなく把握する必要がある
同じことをRustならば上位への移譲があるか否かが明確に分かるため非常にやりやすい
223デフォルトの名無しさん
2023/01/31(火) 10:37:25.48ID:YNMDboNb >>222
> 機能追加やリファクタリングではその処理位置が変わり得るから無関係ではなく把握する必要がある
そりゃその関数が関与するような修正するならな、当たり前
でも全ての関数が毎回関与するわけじゃないだろ
なんかダメな理由を必死に探してるとしか思えないけど
> 機能追加やリファクタリングではその処理位置が変わり得るから無関係ではなく把握する必要がある
そりゃその関数が関与するような修正するならな、当たり前
でも全ての関数が毎回関与するわけじゃないだろ
なんかダメな理由を必死に探してるとしか思えないけど
224デフォルトの名無しさん
2023/01/31(火) 10:41:06.15ID:7I30yv0f225デフォルトの名無しさん
2023/01/31(火) 11:26:55.99ID:5zDIQfkR メモリ不足でパニックとか言っている時点で全く判かっていないの草
メモリのアロケーションに失敗した場合パニックしてもその動作は保証されない
なぜならスタックの巻き戻し中にメモリのアロケーションが試みられないことを保証するのは難しいからだ
そのアロケーションに失敗した場合に二重パニックになる
パニック時にアボートする場合は別だが、その場合はリソースやロックの開放もれが発生する可能性があるね
メモリのアロケーションに失敗した場合パニックしてもその動作は保証されない
なぜならスタックの巻き戻し中にメモリのアロケーションが試みられないことを保証するのは難しいからだ
そのアロケーションに失敗した場合に二重パニックになる
パニック時にアボートする場合は別だが、その場合はリソースやロックの開放もれが発生する可能性があるね
226デフォルトの名無しさん
2023/01/31(火) 11:52:51.31ID:df6faTWR227デフォルトの名無しさん
2023/01/31(火) 11:55:03.20ID:df6faTWR >>226
[補足]
Java などでは、例外を投げるには throw new SomeException(); のようにするが、
C++ では、throw SomeException() のようにする。つまり、前者はヒープから、
後者はスタックから例外オブジェクトを確保する。なので、例外throwそれ自体は
メモリー不足にはならない。
[補足]
Java などでは、例外を投げるには throw new SomeException(); のようにするが、
C++ では、throw SomeException() のようにする。つまり、前者はヒープから、
後者はスタックから例外オブジェクトを確保する。なので、例外throwそれ自体は
メモリー不足にはならない。
228デフォルトの名無しさん
2023/01/31(火) 11:56:57.46ID:eIPLUE+9 Resultでエラーを表現する一番の目的は
抜け漏れなくエラー対応してることを
シグニチャーを見ただけでわかるようにして
簡単に静的チェックができるようにするため
抜け漏れなくエラー対応してることを
シグニチャーを見ただけでわかるようにして
簡単に静的チェックができるようにするため
229デフォルトの名無しさん
2023/01/31(火) 12:41:27.68ID:YNMDboNb >>224
いらない情報書かれても読みにくいだけ
いらない情報書かれても読みにくいだけ
230デフォルトの名無しさん
2023/01/31(火) 12:44:13.13ID:+FKSpugG 今日もpanic警察が必死です。MISRA-C警察みたい
231デフォルトの名無しさん
2023/01/31(火) 12:45:18.07ID:YNMDboNb >>225
メモリー不足で動作が保証されないなんて常色だろ
同じくプログラマーの想定外の場合でも動作は保証できないからそういう時は余計なことしないで早期に終了させるしかない
panicってそのためのものだよ
なので個人的にはrustのスタック巻き戻しはやり過ぎだと思ってる
メモリー不足で動作が保証されないなんて常色だろ
同じくプログラマーの想定外の場合でも動作は保証できないからそういう時は余計なことしないで早期に終了させるしかない
panicってそのためのものだよ
なので個人的にはrustのスタック巻き戻しはやり過ぎだと思ってる
232デフォルトの名無しさん
2023/01/31(火) 12:46:06.11ID:YNMDboNb >>230
必要ないと思うなら使わなきゃいいのになぜか鬼の敵みたいになってるの草
必要ないと思うなら使わなきゃいいのになぜか鬼の敵みたいになってるの草
233デフォルトの名無しさん
2023/01/31(火) 12:47:09.57ID:oegPHy5Y panic使う人は使っても困らないような
プログラム開発してるだけ
本人が困ってないならそっとしておけ
プログラム開発してるだけ
本人が困ってないならそっとしておけ
234デフォルトの名無しさん
2023/01/31(火) 12:51:11.39ID:CpP2rI02 panicを使う理由が対応コード書くのがめんどくさいとか見通しとか回復可能でも呼ぶぜってところからきた話なので
回復不能エラーで呼び出された場合とか当たり前なところ話しても議論にもならんやろ
回復不能エラーで呼び出された場合とか当たり前なところ話しても議論にもならんやろ
235デフォルトの名無しさん
2023/01/31(火) 14:46:39.65ID:YNMDboNb > 本人が困ってないならそっとしておけ
と言いながら構わずに居られない>>233であったw
と言いながら構わずに居られない>>233であったw
236デフォルトの名無しさん
2023/01/31(火) 15:00:44.42ID:hwxs0+db 病院行ったほうがいいよ
237デフォルトの名無しさん
2023/01/31(火) 15:03:53.55ID:ylr44mGO >>233
元からそういう話だぞ。panic原理主義者が発狂しているだけで
元からそういう話だぞ。panic原理主義者が発狂しているだけで
238デフォルトの名無しさん
2023/01/31(火) 15:10:39.60ID:3fV3plkN 簡単にpanicされると困るようなプログラム作りたいからこそrust選んだのでは
239デフォルトの名無しさん
2023/01/31(火) 15:39:37.08ID:CAp90nIJ JavaやC#あたりの経験もなくPythonやJavaScriptしか触ったことがない層がRustをやろうとしてるんだろうな
そうでもないと説明がつかない
そうでもないと説明がつかない
240デフォルトの名無しさん
2023/01/31(火) 15:48:38.88ID:BgaMS/KG 言語というよりはエラー種別やドメインエラーをきちんと定義するようなアプリやシステムの開発経験がないからだと思われる
241デフォルトの名無しさん
2023/01/31(火) 15:52:55.96ID:+s4b9MNJ おじおじしてきたな
242デフォルトの名無しさん
2023/01/31(火) 16:06:06.73ID:YNMDboNb 単発ワラワラw
243デフォルトの名無しさん
2023/01/31(火) 16:33:36.83ID:hwxs0+db 自分以外がすべて同一人物が書いたかのように見えるなら病院に行きなさいって
244デフォルトの名無しさん
2023/01/31(火) 16:45:54.71ID:VKWM6Cjq 複オジ2世レベルやな
立場逆転してるのが感慨深い
立場逆転してるのが感慨深い
245デフォルトの名無しさん
2023/01/31(火) 16:51:02.90ID:+s4b9MNJ246デフォルトの名無しさん
2023/01/31(火) 17:01:16.78ID:k74gCp3T レスバしたいだけにしか見えねえ
247デフォルトの名無しさん
2023/01/31(火) 17:26:31.56ID:5mHFhJcn GoとかRustとか例外サポートしなくなった言語、標準でスタックトレースサポートしなくなった辛さにみんなどう対応してるのかね。
エラーメッセージで grep とか、ログからコールスタックを想像とか、かなり辛いんですけど。
エラーメッセージで grep とか、ログからコールスタックを想像とか、かなり辛いんですけど。
248デフォルトの名無しさん
2023/01/31(火) 17:30:47.95ID:fFj0kljj スタックトレースサポートされてるぞ
だかスタックトレースないとどこでエラーが発生したかわからないような作りは見直すべき
だかスタックトレースないとどこでエラーが発生したかわからないような作りは見直すべき
249デフォルトの名無しさん
2023/01/31(火) 18:11:46.10ID:CpP2rI02 古き良きline!マクロ
250デフォルトの名無しさん
2023/01/31(火) 18:25:09.41ID:Qz5B8C78 c++勉強しているけどやっぱりrustっていいんだな
c++の場合どのオーバーロードが足りないかもエラーをチラ見しながら勘で判断するしかない
少なくとも能力の低いワイはそうやって対処している
c++の場合どのオーバーロードが足りないかもエラーをチラ見しながら勘で判断するしかない
少なくとも能力の低いワイはそうやって対処している
251デフォルトの名無しさん
2023/01/31(火) 19:05:37.94ID:Tu8zoz2s 例外連呼しているくせに具体的なことを書かない時点でエアプか煽りなんだろうな
例外機構を持つ処理系はエラー処理を局所化できるメリットがある
同様のメリットをRustで得るにはどのような実装が推奨されるんかな?
例外機構を持つ処理系はエラー処理を局所化できるメリットがある
同様のメリットをRustで得るにはどのような実装が推奨されるんかな?
252デフォルトの名無しさん
2023/01/31(火) 19:31:24.49ID:p+H/rvZ9 そこまで言うなら見せてもらおうか。
スレッド間エラー転送とやらを。
スレッド間エラー転送とやらを。
253デフォルトの名無しさん
2023/01/31(火) 19:36:37.66ID:94wkFUZO254デフォルトの名無しさん
2023/01/31(火) 19:41:28.43ID:7I30yv0f >>229
Rustの利点に対して「いらない情報」と言い張るのはまるでアンチのように悪意があるなあ
可読性の向上という開発効率でのメリットと実行効率のメリットさらにスレッドやコルーチン実装のタスクからも伝播させることができるRust方式は非常に優れているよ
Rustの利点に対して「いらない情報」と言い張るのはまるでアンチのように悪意があるなあ
可読性の向上という開発効率でのメリットと実行効率のメリットさらにスレッドやコルーチン実装のタスクからも伝播させることができるRust方式は非常に優れているよ
255デフォルトの名無しさん
2023/01/31(火) 19:47:33.31ID:YNMDboNb256デフォルトの名無しさん
2023/01/31(火) 19:51:16.79ID:7I30yv0f >>247
Rustは標準でスタックトレースをサポートとしている
何でもいいからコンパイルして実行したことあればRUST_BACKTRACE=1と環境変数をセットすれば出力すると表示されることすら知らないのは不思議
ちなみにstd::backtrace::Backtraceによって自由自在に好きなところでバックトレースをキャプチャすることも出来る
Rustは標準でスタックトレースをサポートとしている
何でもいいからコンパイルして実行したことあればRUST_BACKTRACE=1と環境変数をセットすれば出力すると表示されることすら知らないのは不思議
ちなみにstd::backtrace::Backtraceによって自由自在に好きなところでバックトレースをキャプチャすることも出来る
257デフォルトの名無しさん
2023/01/31(火) 19:56:49.64ID:7I30yv0f258デフォルトの名無しさん
2023/01/31(火) 19:58:31.81ID:iWzBLVlH >>255
254じゃないけど、メリットは分かりやすいけどなぁ。
関数のインターフェイスに、関数の作用に関する情報がまとまっていたらそりゃ便利だろう。
例外を投げる関数の場合、例外に関する情報は関数のマニュアルを参照するかソースを参照するしかないことがほとんどじゃない?インターフェイスを見ただけで例外を把握できる言語てあったっけ?
254じゃないけど、メリットは分かりやすいけどなぁ。
関数のインターフェイスに、関数の作用に関する情報がまとまっていたらそりゃ便利だろう。
例外を投げる関数の場合、例外に関する情報は関数のマニュアルを参照するかソースを参照するしかないことがほとんどじゃない?インターフェイスを見ただけで例外を把握できる言語てあったっけ?
259デフォルトの名無しさん
2023/01/31(火) 20:06:28.07ID:0vRdrBrN ML系の系譜の言語はまあ大体そうなんじゃね
そしてRustでもdyn Errorで返されたら結局同じことやらされる羽目に……
そしてRustでもdyn Errorで返されたら結局同じことやらされる羽目に……
260デフォルトの名無しさん
2023/01/31(火) 20:17:47.02ID:YNMDboNb >>258
だから例外に関与しないのになぜそんな情報いるんだ?
だから例外に関与しないのになぜそんな情報いるんだ?
261デフォルトの名無しさん
2023/01/31(火) 20:25:27.93ID:QTaicIN8262デフォルトの名無しさん
2023/01/31(火) 20:27:00.46ID:1QZESm3t 例外に関与しないってどういう意味なんだろう?
ガン無視するって言ってるんだろうか?
ガン無視するって言ってるんだろうか?
263デフォルトの名無しさん
2023/01/31(火) 20:36:05.54ID:YNMDboNb >>261-262
いちいち曲解するなよ
下位で発生した例外は何もしなければそのまま上位に伝搬するだろ
例外安全に作られてればその関数で確保したリソースはちゃんと解放される
それは下位の例外の種類に依存しない
いちいち曲解するなよ
下位で発生した例外は何もしなければそのまま上位に伝搬するだろ
例外安全に作られてればその関数で確保したリソースはちゃんと解放される
それは下位の例外の種類に依存しない
264デフォルトの名無しさん
2023/01/31(火) 21:10:03.87ID:QTaicIN8 >>263
「上位に伝達する」という意味わかっている?
>258がインターフェイスの話をしているのは理解できている?
関数の呼び出し元からすれば、呼び出し先で投げられているのか、さらにその先で投げられているのか、とか関係なく「関数を使ったら例外を投げられた」だよ。関数のユーザーからすれば「投げる例外くらい明確化するのが常識だろ」と思うよな。
関数が例外を投げるのに、その関数の作者が「例外に関与しないからオレ知らね」とか言って逃げたらブチ切れるわ。そんなんだったら例外全部catchして関数の外に漏らすな、と。
「上位に伝達する」という意味わかっている?
>258がインターフェイスの話をしているのは理解できている?
関数の呼び出し元からすれば、呼び出し先で投げられているのか、さらにその先で投げられているのか、とか関係なく「関数を使ったら例外を投げられた」だよ。関数のユーザーからすれば「投げる例外くらい明確化するのが常識だろ」と思うよな。
関数が例外を投げるのに、その関数の作者が「例外に関与しないからオレ知らね」とか言って逃げたらブチ切れるわ。そんなんだったら例外全部catchして関数の外に漏らすな、と。
265デフォルトの名無しさん
2023/01/31(火) 21:16:22.90ID:1QZESm3t266デフォルトの名無しさん
2023/01/31(火) 21:28:25.11ID:Qz/Q1rYV Javaの検査/非検査例外以降の約20年余りの試行錯誤の結果辿り着いた現時点でのベストプラクティスを採用したのがRustやSwiftのエラー処理モデル
C → Java → C# → Go →Swift/Rust
C → Java → C# → Go →Swift/Rust
267デフォルトの名無しさん
2023/01/31(火) 21:35:24.95ID:Mxurit6u268デフォルトの名無しさん
2023/01/31(火) 21:42:42.48ID:QTaicIN8 まぁ、Result使うとしてもtry catch finallyブロックみたいなフローが欲しいというのはわからんでもない。
関数から抜ける時にResultを漏らさず処理したいというのはたまにあるし。
関数から抜ける時にResultを漏らさず処理したいというのはたまにあるし。
269デフォルトの名無しさん
2023/01/31(火) 21:48:12.48ID:jD2BQUnk270デフォルトの名無しさん
2023/01/31(火) 22:04:35.47ID:WaCEL3Yw この件でプログラミング言語が最低限サポートして欲しい点2つ
ある関数(ライブラリ)を使おうとした時に
①その関数やその子孫からエラーや例外が上がってくるのか、それとも全て処理済なのか?
これが奥深く辿らなくても局所的に把握できること
ドキュメントベースはそのミスや見落としが生じるため不可
②エラーや例外が下から上がってくる関数を用いた時に、
その処理をせずに続行してしまうコードを書いてしまったら、実行前に言語システムにより防げること
例えばRustならば①は返値がResult型かどうかですぐに把握できる
②は型システムによりRustコンパイラが型不一致や未処理放置Resultの存在を伝えてくれる
Rustは現在ベストなプログラミング言語と言い切っても過言ではない
ある関数(ライブラリ)を使おうとした時に
①その関数やその子孫からエラーや例外が上がってくるのか、それとも全て処理済なのか?
これが奥深く辿らなくても局所的に把握できること
ドキュメントベースはそのミスや見落としが生じるため不可
②エラーや例外が下から上がってくる関数を用いた時に、
その処理をせずに続行してしまうコードを書いてしまったら、実行前に言語システムにより防げること
例えばRustならば①は返値がResult型かどうかですぐに把握できる
②は型システムによりRustコンパイラが型不一致や未処理放置Resultの存在を伝えてくれる
Rustは現在ベストなプログラミング言語と言い切っても過言ではない
271デフォルトの名無しさん
2023/01/31(火) 22:16:44.29ID:Mxurit6u272デフォルトの名無しさん
2023/01/31(火) 22:19:53.43ID:Mxurit6u273デフォルトの名無しさん
2023/01/31(火) 22:45:41.29ID:WaCEL3Yw274デフォルトの名無しさん
2023/01/31(火) 23:47:23.84ID:ovWek0QN 使いたい関数だけじゃなくて、その関数が使ってる関数、更にその関数が、、、って調べていかないといけないのが無駄にコスト高になるんだよね。
275デフォルトの名無しさん
2023/01/31(火) 23:54:22.59ID:hwxs0+db >>274
使いたい関数のシグニチャ見れば分かることだろ?????
使いたい関数のシグニチャ見れば分かることだろ?????
276デフォルトの名無しさん
2023/02/01(水) 00:33:02.66ID:CK4ZTpUy やっぱ複オジは成長しねーな
2世と同類だわ
2世と同類だわ
277デフォルトの名無しさん
2023/02/01(水) 03:40:06.80ID:RyGmTTdX >>275
それが正しいか信頼できんだろ
それが正しいか信頼できんだろ
278デフォルトの名無しさん
2023/02/01(水) 06:17:22.82ID:5NtLPUR3279デフォルトの名無しさん
2023/02/01(水) 07:12:22.77ID:Hf88nfPH280デフォルトの名無しさん
2023/02/01(水) 07:21:02.47ID:Hf88nfPH281デフォルトの名無しさん
2023/02/01(水) 08:02:53.27ID:5NtLPUR3282デフォルトの名無しさん
2023/02/01(水) 08:17:31.54ID:rokbXrwB283デフォルトの名無しさん
2023/02/01(水) 08:17:38.20ID:Hf88nfPH284デフォルトの名無しさん
2023/02/01(水) 08:20:02.84ID:Hf88nfPH285デフォルトの名無しさん
2023/02/01(水) 08:25:05.41ID:ATJMUMOg >>279
その調べるかどうかをどう判断するかって話なんだが…
putsがI/Oエラーを上げてくるって知ってるから無視して上に上げるって判断ができるわけ
じゃあライブラリXの関数Yは無視すべきなのかそうでないのか?ってこと
その調べるかどうかをどう判断するかって話なんだが…
putsがI/Oエラーを上げてくるって知ってるから無視して上に上げるって判断ができるわけ
じゃあライブラリXの関数Yは無視すべきなのかそうでないのか?ってこと
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★2 [BFU★]
- 立憲・野田代表が主張 台湾有事答弁で「質問者批判は筋違い」「答弁がおかしい」「高市総理迎合のネット世論は危険」★4 [♪♪♪★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 中国官製報道「日本経済はもう持たない」にネット民ツッコミ「ニュースだけ見てたら日本はもう百回くらい爆発してる」 [1ゲットロボ★]
- 日中関係悪化で「日本からもうすぐパンダがいなくなる」 中国SNSでトレンド1位に★2 [♪♪♪★]
- 【STARTO ENTERTAINMENT】timelesz、メンバーの不適切言動を謝罪「不用意かつモラルに反した発言であった」 全員の署名入りでコメント [Ailuropoda melanoleuca★]
- 【実況】博衣こよりのえちえちホロ分かり手クイズ🧪🏴‍☠🌸
- 【高市悲報】中国「国連安保理の許可なしに日本を攻撃可能だ」★2 [115996789]
- 【高市悲報】中国「国連安保理の許可なしに日本を攻撃可能だ」 [115996789]
- 【んな専🏡】華金もんなっしょいとはやれやれなのらね🍬(・o・🍬)🏰
- ひもじい ←なぜか変換できない
- 結局宮崎駿はゲド戦記のこと認めたの?
