
Hi Chris,
Thanks for providing feedback. It's much appreciated.
On Wed, Jul 30, 2008 at 11:34 PM, Chris Kuklewicz
The differences: Your error handling is via Alternative, and if the first branch advances (consumes input) then the second branch is not attempted. The state can only go forward (by 1 byte) or remain in place (there is no look-ahead). If reading past the end, then either (*) the new first byte works (*) the new first fails and the Alternative is ready to try it.
This is by design. This is enough for parsing many network protocols like HTTP and avoids having to deal with backtracking and the potential space leaks and bookkeeping overhead that might come with it.
The management of saved state on the stack of pending operations is much simpler with your commit-if-advance semantics and much more complicated with my rollback semantics. Oddly, it seems your committed operations do not immediately release the pending handlers so they can be garbage collected. This same kind of issue motivated me to improve the implementation of binary-strict's incremental get.
I'm not sure what you mean by releasing pending handlers. It's probably something I've not considered. Could you please elaborate? Cheers, Johan