Что означает "Самоанализ" и как он связан с Самоанализом GObject?
Что конкретно означает самоанализ? Чем это полезно для программиста? Может кто-нибудь объяснить, пожалуйста, с точки зрения непрофессионала?
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. Они в Си, а в Си ты не получаешь всю эту прелестную чушь за глупый управляемый код, ты получаешь производительность. Это означает, что встроенного самоанализа нет, а значит, сложнее поддерживать внешнюю привязку.
Привязки - это API между вещами на разных языках, которые позволяют им работать вместе. Чтобы это работало, вам нужен общий API, и в этом случае этот API - GObject. Но чтобы это работало, привязка вызывающей стороны должна знать, что доступно для нее. До GObject Introspection это должно было быть жестко закодировано в привязках, что означало ведение рукописного списка на каждом наборе привязок.
GObject Introspection, по сути, предоставляет сканер, который может искать текущий источник объекта GObject, с которым вы работаете, и предоставляет вам информацию о привязке XML. Затем они обрабатываются привязками, и в результате вы получаете API, который работает постоянно.
Я, конечно, не все здесь рассмотрел, но я пытаюсь дать вам представление о двух темах (самоанализ и зачем GObjects это нужно). Если вы хотите узнать больше, на сайте Gnome есть много всего.