Что означает «Самоанализ» и как он связан с Самоанализом GObject?

8

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

Нишант Джордж Агвал
источник

Ответы:

11

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

Привязки - это API между вещами на разных языках, которые позволяют им работать вместе. Для того чтобы это работало, вам нужен общий API, и в этом случае этот API - GObject. Но чтобы это работало, привязка вызывающей стороны должна знать, что доступно для нее. До GObject Introspection это должно было быть жестко закодировано в привязках, что означало ведение рукописного списка для каждого набора привязок.

GObject Introspection по сути предоставляет сканер, который может искать текущий источник объекта GObject, с которым вы работаете, и предоставляет вам информацию о привязке XML. Затем они обрабатываются привязками, и в результате вы получаете API, который работает постоянно.

Я, конечно, не все здесь рассмотрел, но я пытаюсь дать вам представление о двух темах (самоанализ и зачем GObjects это нужно). Если вы хотите узнать больше, на сайте Gnome есть много всего.

Оли
источник