GObject
GObject(ジーオブジェクト、GLib Object System)は、移植性の高いオブジェクトシステムと言語間の透過的相互運用性を提供するフリーなライブラリ(LGPL)である。GObjectはC言語で実装されており、他の言語ではバインディングによって利用可能となっている。
オブジェクトのインスタンス毎に存在する。先頭にスーパークラスのインスタンス構造体がある。その後にインスタンス固有の変数群があり、C++のメンバ変数に対応する。
C言語の構造体には“public”、“protected”、“private”といったアクセス修飾がないので、インスタンス構造体にプライベートデータへのポインタ _priv がある。プライベート構造体は共通ヘッダファイルに宣言することはできるが、定義は個々の実装ファイルでのみ行われ、外部から見えないようにしている。プライベート構造体をGTypeに登録すると、自動的にオブジェクトシステムで確保される。プライベートデータが必要なとき常に G_TYPE_INSTANCE_GET_PRIVATE を使うようにすれば、_priv ポインタを構造体に含める必要はない。
GObjectフレームワークの欠点は、冗長性である。新たなクラスを生成するとき、型登録や各種マクロを多量にコーディングする必要があり、その多くは決まりきった形式である。GObject BuilderやGOB2はこの問題に対処するツールであり、Java風の構文からコードを生成できる。GOB2で書かれたコードはコンパイル前にC言語のコードに展開される。他にもC#風の文法でコーディングできるValaがある。