rc-zip icon indicating copy to clipboard operation
rc-zip copied to clipboard

derive(Serialize) state: Fsm vs AsyncSeek

Open dishmaker opened this issue 1 year ago • 1 comments

Any async io function over trait AsyncSeek can be turned into a sans-io FSM.

I think that's a fact - just calling future.poll(..) on a clever object that pauses on seek and read calls is enough to simulate an ArchiveFsm. So for example async_zip::ZipFileReader can be made into a sync sans-io interface with a wrapper.

Therefore, my open questions are:

  • Which paradigm is easier to write in Rust? sans-io or async?[^1]
  • Which paradigm is faster to execute? sans-io or async?
  • Can we clone the EntryFsm state to remember decompressor state in the middle of 100 GB file with sans-io? [^2]
  • Can we serialize/save the EntryFsm state into JSON and resume it later with sans-io?[^3]

Some answers are already in video fasterthanlime: The case for sans-io

[^1]: async fn is actually an FSM https://users.rust-lang.org/t/serde-async-state-machine/99648 [^2]: DecompressorOxide implements Clone [^3]: async_zip ZipFileReader implements Clone, but not Serialize

dishmaker avatar Feb 11 '25 12:02 dishmaker

Well, sans-io rc-zip definitely wins.

async_zip::ZipEntryReader does not implement Clone.

dishmaker avatar Feb 11 '25 15:02 dishmaker