[Gimp-developer] Re: your so called optimizations and why we don't like them

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On  3 Dec, Sven Neumann wrote:

> you recently checked in a huge change to GIMP that we (Mitch and me)
> have been very unhappy with. In the meantime, I have gone through the
> hassle of looking at every single line of your changes and I have
> reverted most of it. Here are the reasons, why we think your
> "optimizations" don't make sense and, even worse, are dangerous:

BTW: It would have been a single command for me to revert the changes
but since you decide to work everything on your own.

> While unsigned variables can speed things up under very special
> circumstances,

Not special, in many circumstances.

> they bear the danger of introducing subtle bugs that
> are almost impossible to find. A good example is found in
> pango/docs/TEXT/coding-style (a recommened read, btw.):
  
>   If width is unsigned and 10, then:
> 
>    int new_width = MAX (width - 15, 1);
> 
>   produces 4294967291, not 1.

This is clearly a bug in the code. There are sizes which are by
definition unsigned and code computes an negative value this is
about as harmful as an big positive one.

> Also, in lots of places you've changed, the value -1 was used to 
> indicate an unset value (width and height of GimpPreview for 
> example).

Shouldn't be. I was about to go even further and change all false uses
of such values. What you imply is that using unsigned types for unsigned
values is wrong because you also use them for errorindication and this
(together with magic constants) is about most of the evilness of
programming.

>> use bitfields in structs where possible
 
> this is an optimizations of structs sizes. It does make sense to use
> bitfields for boolean fields if large numbers of this struct are
> allocated. For rarely used objects the gain in memory usage is
> neglible however.

It's not only the memory consumption, it's also the addressing which is
much faster (normally) for bitfields because one can read several states 
at once while the access is realised with masking instead of several
memory reads (or writes) and as such using bitfields has several huge
advantages:

- Less memory accesses (and all the results thereof)
- Smaller objects because of less code
- Implied error checking against abuse by the compiler

My only worry here was that some compilers don't support them but since
you started using them in other files I didn't see any problem with
this. 

> Since the change makes the code less readable it should be applied
> with care.

I disagree strongly here. The code itself doesn't change and structure
definitions tend to win when it comes to readability here.

> The change again also bears the possibility of introducing bugs.

I see it the other way. It bears the possibility to detect unseen bugs.

> This happens when values others than TRUE (1) and FALSE (0) are
> assigned to struct fields defined as unsigned int : 1.

What do you expect to happen then?

> For this reason, this change should only be done
> late in the development cycle. Once the API is settled and the code is
> stable, we can think about converting booleans in frequently used
> structs to bitfields. At the very moment, it doesn't make sense at
> all.

Well, your thought.

> you changed code from
>  gimp->be_verbose = be_verbose ? TRUE : FALSE;
> to 
>  gimp->be_verbose = be_verbose;
 
> This is wrong, especially if a bitfield is used. I don't think I need
> to explain the reason.

It doesn't even make sense when NOT using bitfields but I definitely see
no problem when doing so. Please don't always assume I see what you mean
by telling "this is wrong"; if you see a problem here tell me so.

> Daniel, would you please from now on inform us about the changes you
> are working on and send patches to this mailing list instead of
> applying your work to CVS without asking. It took me hours to revert
> your changes and I don't want to have to go through this again. If you
> think I reverted too much (which I'm sure has happened in a few
> places), please send the relevant changes in small patches so we can
> discuss them here.

You not being able to use CVS efficently doesn't make me a bad person.
Maybe you would have saved you a lot of time if you simply asked me
to revert the (still correct) changes. 

Anyway, since you seem to like to develop on your own because you know
everything better anyway; feel free to do so. I don't care whether
correct code shines off your ass or you have the Saft but putting
embargos up to me because you don't understand what I'm trying to
achieve is just likely to piss off another of the few coders left.

BTW: Not that I've never corrected any of yours or Mitches code
resulting from a thinko or type...

It's up to you.

--
Servus,
       Daniel



[Index of Archives]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [GIMP for Windows]     [KDE]     [GEGL]     [Gimp's Home]     [Gimp on GUI]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux