mastodon.cardina1.red は、数々の独立したMastodonサーバーのうちのひとつです。サーバーに登録してFediverseのコミュニティに加わってみませんか。

サーバーの情報

3
人のアクティブユーザー

適切な使い方をすれば必要ないか? まあ確かに Stream 自体が Clone 可能だしどうとでもなるにはなるのか

Token が Copy でない実用的な状況って何だ……? となったけど、たとえばソースのパスやソース内の位置とか編集履歴とかがトークン単位で紐付いていて Arc<Metadata> みたいな形で参照を持っているような場合だと、 Cloneable ではあるが Copyable ではない感じになるな。納得。

にしても、そうなると余計な trait bound を避けるためには単一文字のマッチに winnow::bytes::one_of 使うのは避けるべきという気がしてきたな。

any.verify とかでもいいのか。考えてみよう

あーはいはいはい、 verify が G: Fn(&O2) -> bool を要求していて &O2 が &<I as Stream>::Token になるから、ここで AsChar::as_char(self) を持ってくるのに dereference からの implicit copy が挟まるんやな

じゃあ次の疑問は、なぜ
impl<'a, T> AsChar for &'a T where T: AsChar { ... }
という blanket impl がないのか、ということだな

Why `AsChar` does not have blanket impl? · winnow-rs/winnow · Discussion #232
github.com/winnow-rs/winnow/di

ソース漁ってもコメントとかなかったし blame は reformat とかモジュール移動とかで追い掛けるのクソ面倒そうだったので、素直に直接聞くことにした

GitHubWhy `AsChar` does not have blanket impl? · winnow-rs/winnow · Discussion #232Currently (as of v0.4.1), winnow::stream::AsChar trait converts self into primitive copyable types char, bool, and usize. So this can be implemented for any &T where T: AsChar. In this case, blanke...

……てことは何だ、もしかしてこれ blanket impl が入るまでは任意の &T (where T: AsChar) から char を得る手段がなくて Copy bound は必須ってこと!?

yak shaving のお時間がやってまいりました……

理屈のうえでは AsChar::as_char はトークンを消費も変更もしないのだから &self であるべきで、 char とか u8 みたいな一部のプリミティブ型で self を取ることがあるのは、単にトレイトでなく concrete type の inherent method であって Copy は確定しているからという文脈依存の最適化にすぎない

現状の実装だと気持ち悪いのでワイがプルリコ書いてもええかなという気持ちは若干あるんだが、残念なことにこれから1週間はクソ忙しくてそんな余裕がない……
とりあえずメンテナの考えを待つしかないか

余裕がないとか言いながら結局パッチ書いてしまったわ
もう3時間しか眠れません、あーあ
労役はクソ