Что именно означает самоанализ? Чем это полезно для программиста? Может кто-нибудь объяснить, пожалуйста, с точки зрения неспециалистов?
Самоанализ является способом узнать то, что объект и что он содержит во времени выполнения. На некоторых языках это более необходимо, чем другие. Python, который с динамическим контролем типов (то есть объект может получить атрибуты и методы во времени выполнения), самоанализ использования для обнаружения текущего статуса объекта.
Вот очень упрощенный пример Python, где Вы запускаете с класса и добавляете новый атрибут, и, с помощью самоанализа, контролируете, какие атрибуты доступны на экземпляре объекта.
>>> class MyObject:
... variable = False
>>> instance = MyObject()
>>> dir(instance)
['__doc__', '__module__', 'variable']
>>> instance.newvariable = "Kittens"
>>> dir(instance)
['__doc__', '__module__', 'newvariable', 'variable']
Таким образом в динамических системах можно использовать вещи как Python hasattr
сказать, сможет ли объект сделать то, что Вы пытаетесь сделать с ним. Даже если Вы не используете его во времени выполнения, самоанализ также чрезвычайно полезен для отладки.
Теперь на GObjects и находящиеся в GObject библиотеки. Они находятся в C и в C, Вы не получаете всю эту прекрасную пушистую ерунду управляемого кода, Вы получаете производительность. Это означает, что встроенный самоанализ не там, и это означает, что более трудно поддержать внешнюю привязку.
Привязкой является API между вещами на различных языках, которые позволяют им сотрудничать. Для этого для работы Вам нужен общий API и в этом случае что API является GObject. Но чтобы это работало, вызывающая сторона, связывающая, должна знать то, что доступно ему. До Самоанализа GObject это должно было быть трудно кодировано в привязку, и это означает вести рукописный список на каждом наборе привязки.
Самоанализ GObject по существу обеспечивает сканер, который может искать через текущий источник GObject, с которым Вы работаете, и предоставляет Вам информацию о привязке XML. Это затем обрабатывается привязкой, и Вы заканчиваете с API, который просто работает все время.
Я, конечно, не покрыл все здесь, но я пытаюсь дать Вам общее представление об этих двух темах (самоанализ и почему GObjects нужен он). Если Вы хотите знать больше, на веб-сайте Gnome существует много.