GNOME Project представляет поддержку интроспекции для системы GObject.
Интроспекция (англ. Introspection) - возможность определения типов и получения описаний (метаданных) типов и интерфейсов во время выполнения программы. Задачей проекта GObject Introspection, по словам авторов, является попытка собрать метаданные по всему стеку библиотек GTK+/GNOME (и не только), оформить их в универсальном, машинно-читаемом формате, и предоставить соответствующее API.
Возможные варианты использования GObject Introspection:
- привязки к языкам (language bindings). На данный момент, как правило, для различных языков используются свои методы описания API, что зачастую приводит к дублированию информации. Проект GObject Introspection должен представить унифицированный интерфейс для получения информации об API;
- верификация API. Нередко случаются критические изменения публичного API (в результате, например, непредусмотрительности разработчика-новичка), которые могут "сломать" некоторые программы. GObject Introspection позволит автоматизировать сравнение двух версий API и выявить изменения с предельной точностью;
- инструменты документирования. В рамках самого проекта GObject Introspection уже используется инструмент для автоматического документирования публичных API, которым в дальнейшем планируется заменить gtk-doc в рамках всего проекта GNOME;
- автогенерация пользовательского интерфейса (наподобие того, как сделано в системе аудиосинтеза Beast);
- дизайнер пользовательского интерфейса;
- сериализация, RPC (в том числе средствами DBus), компонентная система.
- схему (формат) XML для представления метаданных, называемую GIR (GObject Introspection Repository);
- модуль на языке Python для манипуляции форматом GIR;
- генератор GIR из файлов исходных текстов на С (.c + .h);
- систему typelib, схожую с XPCOM/MSOLE, для сохранения метаданных в бинарном формате;
- конвертер между GIR (XML) и typelib (бинарный формат);
- C-библиотеку для чтения typelib.
Проект GObject Introspection активнейшим образом используется в языке Vala.
>>> Подробности