Like BSDiff, Raw Zucchini uses COPY / INSERT / FIX operations to write the "new" file. FIX operation specifies binary differences for bytes. Since it is only used when a correction is needed, so 0 never appears in FIX data stream. This means 0 is a value that can be used to specify something new!
We wish to experiment with using 0 in FIX data stream to represent a new operation: SKIP, which omits a byte in COPY (operation is streamable). SKIP can be repeated to skip multiple bytes.
Using SKIP may allow us to merge multiple adjacent equivalences that arise due to content removal. Other potential use is to have 0 specify an escape character, followed by more elaborate instructions.
The experiment can be conducted by operating directly on patch (using zucchini.js). So the problem is essentially transforming a patch from/to a patch. This means the optimization may be cannibalized by compression -- we won't know unless we try!
Comment 1 by huangs@google.com
, Apr 19 2018