On Wed, Jan 24, 2018 at 8:43 AM, KES <[email protected]> wrote:
> Here is another place where diff can be improved:
> @@ -141,8 +140,9 @@ My_runops(pTHX)
> // Do not trace variables in DB:: module
> if( SvOK( inDB ) ) continue;
>
> - sv_inc_nomg( inDB );
>
> + // save_item( inDB );
> + sv_inc_nomg( inDB );
> dSP; SINFO; SAVETMPS;
>
> // printf( "SWITCH\n" );
>
>
(Manually reconstructing), the before:
// Do not trace variables in DB:: module
if( SvOK( inDB ) ) continue;
sv_inc_nomg( inDB );
dSP; SINFO; SAVETMPS;
// printf( "SWITCH\n" );
and after:
// Do not trace variables in DB:: module
if( SvOK( inDB ) ) continue;
// save_item( inDB );
sv_inc_nomg( inDB );
dSP; SINFO; SAVETMPS;
// printf( "SWITCH\n" );
> This would be better it the patch looks like:
> ( this patch is manually created just to light the idea. It may contain
> errors)
> @@ -140,6 +140,7 @@ My_runops(pTHX)
> // Do not trace variables in DB:: module
> if( SvOK( inDB ) ) continue;
>
> +
> + // save_item( inDB );
> sv_inc_nomg( inDB );
> -
> dSP; SINFO; SAVETMPS;
Before:
// Do not trace variables in DB:: module
if( SvOK( inDB ) ) continue;
sv_inc_nomg( inDB );
dSP; SINFO; SAVETMPS;
after:
if( SvOK( inDB ) ) continue;
// save_item( inDB );
sv_inc_nomg( inDB );
dSP; SINFO; SAVETMPS;
Seems like the diff is the same.
I agree that we'd rather want to remove/add empty lines
instead of moving full lines. Maybe we can add a penalty for that
in the diff code. Currently each line costs the same, as diff algorithm
optimizes for number of lines to be minimal, which both these diffs
satisfy.
>
> As we can see, here the `sv_inc_nomg( inDB );` line is unchanged and `//
> save_item( inDB );` is added.
> Here we just add/remove empty lines and patch looks more better.
>
> I think (and this is my assumption), the the diff algorithm should take into
> account the string length.
> This is more better to add/remove more short lines
Yup. Thanks for giving an example.