Was bedeutet "Introspektion" und in welcher Beziehung steht es zur GObject-Introspektion?

8

Was bedeutet Selbstbeobachtung genau? Wie ist es für einen Programmierer nützlich? Kann jemand bitte in Laienbegriffen erklären?

Nishant George Agrwal
quelle

Antworten:

11

Introspektion ist eine Möglichkeit herauszufinden, was ein Objekt ist und was es zur Laufzeit enthält. In einigen Sprachen ist dies notwendiger als in anderen. Python, das dynamisch typisiert wird (dh ein Objekt kann zur Laufzeit Attribute und Methoden erhalten), verwendet Introspektion, um den aktuellen Status eines Objekts herauszufinden.

Hier ist ein sehr vereinfachtes Python-Beispiel, in dem Sie mit einer Klasse beginnen und ein neues Attribut hinzufügen und mithilfe der Selbstbeobachtung überwachen, welche Attribute auf der Objektinstanz verfügbar sind.

>>> class MyObject:
...   variable = False

>>> instance = MyObject()

>>> dir(instance)
['__doc__', '__module__', 'variable']

>>> instance.newvariable = "Kittens"

>>> dir(instance)
['__doc__', '__module__', 'newvariable', 'variable']

In dynamischen Systemen können Sie also mithilfe von Pythons hasattrfeststellen, ob ein Objekt in der Lage ist, das zu tun, was Sie damit versuchen. Selbst wenn Sie es zur Laufzeit nicht verwenden, ist Introspection auch für das Debuggen äußerst nützlich.


Nun zu GObjects und GObject-basierten Bibliotheken. Sie sind in C und in C bekommt man nicht all diesen schönen, flauschigen, verwalteten Code-Unsinn, man bekommt Leistung. Dies bedeutet, dass keine integrierte Selbstbeobachtung vorhanden ist und dass es schwieriger ist, eine externe Bindung aufrechtzuerhalten.

Bindungen sind eine API zwischen Dingen in verschiedenen Sprachen, mit denen sie zusammenarbeiten können. Damit dies funktioniert, benötigen Sie eine gemeinsame API. In diesem Fall handelt es sich bei dieser API um GObject. Damit dies funktioniert, muss die Anruferbindung wissen, was für sie verfügbar ist. Bis zur GObject-Introspektion musste dies in den Bindungen fest codiert werden. Dies bedeutet, dass für jeden Satz von Bindungen eine handgeschriebene Liste geführt wird.

GObject Introspection bietet im Wesentlichen einen Scanner, der die aktuelle Quelle des GObjects durchsuchen kann, mit dem Sie arbeiten, und der Ihnen XML-Bindungsinformationen liefert. Dies wird dann von den Bindungen verarbeitet und Sie erhalten eine API, die immer funktioniert.

Ich habe hier sicherlich nicht alles behandelt, aber ich versuche Ihnen eine Vorstellung von den beiden Themen zu geben (Selbstbeobachtung und warum GObjects sie brauchen). Wenn Sie mehr wissen möchten, finden Sie auf der Gnome-Website zahlreiche Informationen.

Oli
quelle