[squeak-dev] Re: New TextDiffBuilder implementation

Levente Uzonyi leves at elte.hu
Tue Dec 29 16:46:10 UTC 2009


On Tue, 29 Dec 2009, Andreas Raab wrote:

> Levente Uzonyi wrote:
>> Hi,
>> 
>> We rewrote TextDiffBuilder using a modified version of the greedy longest 
>> common subsequence algorithm from 'An O(ND) Difference Algorithm and Its 
>> Variations (1986)' by Eugene W. Myers [1]. It's in The Inbox as:
>> 
>> System-klub.209. The implementation is smaller, faster, gives a minimal 
>> patch and passes the tests.
>>
>>                         Old        New      Ratio
>> Number of classes       5          4        0.8
>> Number of methods       50         29       0.58
>> Lines of code           387        197      0.51
>> 
>> We would appreciate if someone can review this before moving into trunk.
>
> Looks good. There seem to be a few matches that are shown differently (tried 
> with various MC diffs) but that's to be expected since it's a different 
> algorithm. Ship it :-)

Done. The main reason for the rewrite was that the old version didn't 
create minimal patches, even for really simple cases (see the failing 
tests). First I tried to fix it, but when I saw how bloated the 
implementation was for such a simple thing, I thought a rewrite would be 
better. Actually I couldn't find out how the old version worked.

Another reason for the differences in the diffs is that we accidentally 
swapped the order of insertions and removals when they occured after each 
other. This made only a "visual" difference. With the latest version, this 
is fixed too.


Levente

>
> Cheers,
>  - Andreas
>
>
>



More information about the Squeak-dev mailing list