Что означает & ldquo; Самоанализ & rdquo; значит, а как это связано с GObject Introspection?

Что именно означает самоанализ? Чем это полезно для программиста? Может кто-нибудь объяснить, пожалуйста, с точки зрения неспециалистов?

8
задан 27 February 2012 в 14:54

1 ответ

Самоанализ является способом узнать то, что объект и что он содержит во времени выполнения. На некоторых языках это более необходимо, чем другие. 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 существует много.

11
ответ дан 27 February 2012 в 14:54

Другие вопросы по тегам:

Похожие вопросы: