-
Notifications
You must be signed in to change notification settings - Fork 22
Add defmac
crate
#25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add defmac
crate
#25
Conversation
defmac
defmac
, derive_builder
, and unchecked-index
Builder パターンを競プロで使う需要はあるのでしょうか...? |
マラソン時にパラメータが5個10個くらいある let data = Data {
cost: 42,
..Data::default(),
};
debug_assert!(data.validate()); の代わりに let data = Data::builder()
.cost(42)
.build()
.unwrap(); と書くことを想定してました。ただまあ..微妙そうですね。builder patternが欲しくなるときってデータを追加するごとに何らかの計算を行ないたいとかrequiredなパラメータがあるけどoptionalなのと合わせると7個を超過するので関数にし難い場合とかなので。 |
うーむ...。どれほどのユースケースがあるのか微妙です。 また、 サーバー側で UB に起因する無意味な判定が出るようなことがあれば、デバッグにも影響しそうです。 (別の箇所をコメントアウトしたら (関係ないのに) テストケースがREしなくなったから、そこに問題があると誤認するなど) 。 |
let mut xs = vec![0];
let mut xs = unsafe { unchecked_index::unchecked_index(&mut xs) }; // 添字アクセスが速くなるおまじない★
xs[0] += 1;
assert_eq!(xs[1], 1); // oops あと推奨する使用用途としては『高速化するもの』の冒頭に書かれた通りの正真正銘マラソン専用のcrateとして、危険性を承知した上自己責任で必要最小の部分に適応することですね。マラソンでもない普段のコンテストではその通りメリットよりもデメリットの方が大きいので。 実際このことは周知されていて、C++使いですら通常のコンテストでは |
|
8a15b98
to
d80c7de
Compare
defmac
, derive_builder
, and unchecked-index
defmac
and unchecked-index
これは今考えたのですがdebug modeでチェックすることは高速化のため安全性を『諦める』部分を少しでも小さくしようとする試みではないでしょうか。 (手元にテストケースさえあれば確実に境界違反を発見できる) 逆に |
個人的な感覚なのかもしれませんが、たとえ Safety に「全て unsafe で囲んでね」と書いてあるとしても、 Rust が保証するメモリ安全性などの条件を Safe Rust 内で犯せてしまう、というのは大きな問題かと思います。逆にプログラマーが意識的に気をつけるべき条件があるようなものを閉じこめるのが
(https://doc.rust-lang.org/nomicon/safe-unsafe-meaning.html) マラソンの経験はないので憶測にはなるのですが、基本的に (考察の時間に比してコーディングの) 時間は十分あるものと認識しています。必要があればデバッグ時と本番でチェックの有無を切り替えるような関数を用意することもできるかと思います。通常の競プロのように素早くコードを書き捨てる必要はないと思いますので、マラソンがメインターゲットであるならなおさら不要な気もします。 |
一日考えたのですがその通りなので削除したいと思います。というかより安全?なAPIのものを |
d80c7de
to
c641c92
Compare
defmac
Addderive_builder
Addunchecked-index
(for "高速化するもの")32crateslibm
(breaking change?)derive_more
(minor change)euclid
(minor change)im-rc
(breaking change (MSRV bumped))nalgebra
(breaking change?)rand_pcg
(minor change)