yuk1ty / learning-systems-programming-in-rust

「Rustでもわかるシステムプログラミング」
430 stars 23 forks source link

3.4の実装を行う #32

Closed higumachan closed 3 years ago

higumachan commented 3 years ago

11

higumachan commented 3 years ago

コード中にも書いているのですが、3_4_4に関してはRustではそもそもReadAtがない問題があります。(Read + Seekが近い?)

近しいものとしては

も見つけられましたがどちらも実質標準という感じではないと思います。

方針としては以下が考えられますがどういたしましょうか?

  1. 実装をスキップする
  2. ReadAtを自分で定義して、strings.Reader, bytes.Reader相当の実装を作る

僕的には本書でも「BufReader使っておけば…」のように書かれているので、1かなと思っています。

yuk1ty commented 3 years ago

これとか近いんじゃないかなと思いましたが、すみません、私もあまり Go の ReadAt を理解していないまま書いています🙇‍♀️ https://doc.rust-lang.org/std/io/struct.Cursor.html

2, 3, 4 は Go 特有の事情を説明する箇所が結構多く、迷ったら unimplemented にして飛ばしてしまうのはありかと思っています!なので、Cursor が厳しそうだったら、一旦1で大丈夫です。

higumachan commented 3 years ago

これとか近いんじゃないかなと思いましたが、すみません、私もあまり Go の ReadAt を理解していないまま書いています https://doc.rust-lang.org/std/io/struct.Cursor.html

2, 3, 4 は Go 特有の事情を説明する箇所が結構多く、迷ったら unimplemented にして飛ばしてしまうのはありかと思っています!なので、Cursor が厳しそうだったら、一旦1で大丈夫です。

そうですね、CursorはVec<u8>&[u8]に対してReadSeekが実装されてるので一番近いと思ってます。

bytes.ReaderCursor<Vec<u8>>とほとんど同じだと思っています。 strings.ReaderCursor<String>の実装はないので自分でラップして作る感じかなと思います。

僕もgoを書かないのでio.ReadAtについては一旦Read + Seekとして考えて実装して詳しい人のレビューがあるのを祈ろうかと思います。

yuk1ty commented 3 years ago

ReadAt は私も手元で動かしながら確認しています。少々お待ち下さい🙏 Cursor で特に問題ないんじゃないかなーと思っています!

higumachan commented 3 years ago

@yuk1ty コメントありがとうございます、修正しました。

yuk1ty commented 3 years ago

マージしますね!