GObject instantiation hopelessly overcomplicated??

The more I learn about what both type system and GObject do to create
instances, the more I come to the conclusion that the way it works is
way too complicated. I cannot think of a theoretical reason why fairly
simple constructor semantics wouldn't work, so I'm pretty sure there
must be a good practical reason ... however I'm not nearly experienced
enough to know what that might be. Can someone explain it to me?


In class object instantiation, why does it bother copying memory from
parent object to final when it will run the parent object's base_init on
the final object anyways? base_init takes no parameter, so its kind of
like a default constructor, no? Then anything that could be set with a
memory copy could be set with base_init. The only think that *couldn't*
be set is anything that was done to the class after base_init, which
should hopefully only be class_init. So why should we have a class_init
at all? Because class_init takes a parameter? Then why doesn't base_init
take a parameter?

Why does GObject implement its own constructor on top of the
instance_init constructors? Worse of all it makes you manually chain up
the parent constructors. If GObjects have their own constructors, then
isn't instance_init basically redundant and useless? I know the GObject
constructor is there to support properties, but couldn't we give
instance_init a parameter and just be done with it?

As I've mentioned before, I'm writing a tutorial (the first part of
which was posted to this list), so if you answer me, you will be
answering a lot of other people too.

Assuming that there are very good reasons for why the system is where it
is, what advice should I give readers about which of the many init
places is appropriate for what init code.

This exercise has really made me appreciate just how much GTK+/GNOME
need a proper high level language. Its interesting for me to learn about
this stuff but 90% of application developers cannot be bother with this
much minutiae.


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