Goals
The introspection project has two major goals, and a variety of more minor ones.
Two level applications - C and <your favorite runtime>
It makes sense to build many kinds of applications using (at least) two different levels and languages — one for the low level elements, interfacing with the OS and/or the hardware; and one for the high level application logic. C is good for graphics, multimedia, and lower level systems work. However, writing complex software in C is difficult and error-prone. A managed runtime such as JavaScript, Python, Perl, Java, Lua, .NET, Scheme etc. makes a lot of sense for non-fast-path application logic such as configuration, layout, dialogs, etc.
Note
To achieve this goal you need to write your code using GObject convention. For more information about that, see the GObject tutorial
Thus, one of the major goals of the GObject introspection project is to be a convenient bridge between these two worlds, and allow you to choose the right tool for the job, rather than being limited inside one or the other. With the introspection project, you can write for example a ClutterActor or GtkWidget subclass in C, and then without any additional work use that class inside the high level language of your choice.
Additional goals and uses
API verification - Sometimes the API of a library in our stack changes by accident. Usually by a less experienced developer making a change without realizing it will break applications. Introspecting the available API in each release of the library and comparing it to the last one makes it easy to see what changed
Documentation tools - The tools written inside of the GObjectIntrospection can easily be reused to improve that problem. Essentially; replacing gtk-doc. We want to document what we export so it makes sense to glue this together with API verification mentioned above
UI Designer infrastructure
Serialization/RPC/DBus