Bumping the ABI would only allow changing the size or layout of the GObject
structures; it would do nothing about its fundamental design flaws, or the API. It would also require a “rebuild the world” downstream of GLib that not everyone is willing, or able, to perform. The result would be a lot of work for negligible results.
The original design of GObject called for multiple root objects; things got progressively moved into GObject because of maintenance burden, and because we did not have the benefit of seeing what other standard libraries in other languages were doing. The design of type system predates a fair chunk of the C++ standardisation; the movement from GtkObject
to GObject
predates the C++11 standard library types, and the entirety of Rust.
That’s not really a parallel: GTK and Clutter had a whole windowing system abstraction, even if their base objects were GObject
types. The fact that a ClutterActor
was not a widget is not really why two toolkits were bad; after all, GtkWidget
, today, is just a generic container for other widgets and render commands, which are GTypeInstance
types but not GObject
.
If anything, the design of Clutter not only informed the design of GTK, but also demonstrated that having more lightweight object types is a good goal.
In the end, GObject
will remain for the foreseeable future; the end goal of this effort is to expand the type system to include things that, right now, are either not representable, or are limited to GObject
.
GTK has already migrated to GTypeInstance
for various types; adding more features, like properties, or being able to put instances on the stack is driven, in part, from feedback coming from GTK. Having typed containers in GLib is a long-standing request from GStreamer, as a way to replace GValueArray
.
There isn’t much to “adapt” inside applications.