forked from jam1garner/binrw
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This trait method exists pretty much exclusively to support deferred reads of `FilePtr` values but causes ongoing trouble elsewhere and the benefits do not seem to outweight the problems: 1. It requires `T::Args` to be cloneable in many cases where it should not be the case, which causes confusion, has a strong chance of causing accidental slowness, and makes it unnecessarily hard to move from imports; 2. An analysis I ran of binrw users on GitHub showed that pretty much all cases of `FilePtr` were using `FilePtr::parse` or `deref_now`, so any potential performance benefit does not seem to be realised by real-world projects; 3. Because there is no hard requirement to call `after_parse` and it mostly will not break anything, it is too easy for users to write custom implementations that do not do this and so are subtly broken. From the same GH analysis, there was only one case where I found someone who wrote a custom implementation that correctly called `after_parse`; 4. Since `after_parse` does not build a stack of objects to revisit later, its ability to avoid non-linear reads of data is limited to at most one struct or enum at a time anyway. Given these things (and probably others that I forget), IMO the existence of this feature is not justified. Instead, I think that a design that reads offsets into a `Vec<{integer}>` and then iterates over them later to convert into `Vec<T>` is preferable; a subsequent patch includes some helper functions to do this, but also right now it can be done (with some verbosity) using the `args_iter` helper. Closes jam1garner#17, jam1garner#119. Fixes jam1garner#185, jam1garner#197.
- Loading branch information
Showing
21 changed files
with
134 additions
and
607 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.