fbxcel-0.6 の reader モジュールと ParserSource trait の設計について考えていたんだけど、どうも ParserSource::position() が io::Result<usize> でなく usize を返すようにした辺りにマズさを感じている。

たとえば R: BufRead なものについて impl BufRead for PositionCacheReader<R> のようなものを考えるとすると、 BufRead::fill_buf() が失敗したとき R のカーソル位置は非自明になる。
このとき、失敗の可能性なく stream position を得ることはできない

Show thread
Follow

「カーソルを動かすわけでもない位置取得で失敗するわけないやろw」とか「失敗する可能性のある I/O の際に一緒に位置も追跡してキャッシュしとけば失敗なんて考えなくていいでしょw」とか思ってたんだろうけど、完全に甘かったみたいね

や、一応 BufRead が失敗した時点で諦めず Seek::seek(r, SeekFrom::Current(0)) する手もあるんけど、それも失敗してしまったら本当に打つ手なしなので、いずれにせよ異常系の想定が完全に甘かったとしか……

Show thread
Sign in to participate in the conversation
Mastodon

The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!