Que signifie «Introspection» et en quoi est-il lié à l’Introspection GObject?

Qu’est-ce que l’introspection signifie exactement? Comment est-ce utile pour un programmeur? Quelqu’un peut-il s’il vous plaît expliquer en termes profanes?

L’introspection permet de déterminer ce qu’est un object et ce qu’il contient au moment de l’exécution. Dans certaines langues, cela est plus nécessaire que d’autres. Python qui est typé dynamicment (c’est-à-dire qu’un object peut acquérir des atsortingbuts et des méthodes au moment de l’exécution) utilise l’introspection pour connaître le statut actuel d’un object.

Voici un exemple très simpliste de Python dans lequel vous commencez avec une classe et ajoutez un nouvel atsortingbut, puis, en utilisant l’introspection, contrôlez quels atsortingbuts sont disponibles sur l’instance d’object.

>>> class MyObject: ... variable = False >>> instance = MyObject() >>> dir(instance) ['__doc__', '__module__', 'variable'] >>> instance.newvariable = "Kittens" >>> dir(instance) ['__doc__', '__module__', 'newvariable', 'variable'] 

Ainsi, dans les systèmes dynamics, vous pouvez utiliser des éléments tels que hasattr de Python pour indiquer si un object sera capable de faire ce que vous essayez de faire avec. Même si vous ne l’utilisez pas au moment de l’exécution, l’introspection est également extrêmement utile pour le débogage.


Passons maintenant à GObjects et aux bibliothèques basées sur GObject. Ils sont en C et en C, vous n’obtenez pas toutes ces absurdités de code géré duveteuses, vous obtenez des performances. Cela signifie que l’introspection intégrée n’existe pas et qu’il est donc plus difficile de maintenir une liaison externe.

Les liaisons sont une API entre des éléments de différentes langues qui leur permettent de travailler ensemble. Pour que cela fonctionne, vous avez besoin d’une API commune et, dans ce cas, cette API est GObject. Mais pour que cela fonctionne, l’appelant doit savoir ce qui est disponible. Jusqu’à GObject Introspection, cela devait être codé en dur dans les liaisons, ce qui signifie qu’il faut conserver une liste manuscrite pour chaque ensemble de liaisons.

GObject Introspection fournit essentiellement un scanner capable de parcourir la source actuelle de GObject avec lequel vous travaillez et vous fournit des informations sur les liaisons XML. Ceci est ensuite traité par les liaisons et vous vous retrouvez avec une API qui fonctionne, tout le temps.

Je n’ai certes pas tout couvert ici, mais j’essaie de vous donner une idée des deux sujets (l’introspection et pourquoi les objectives de GO en ont besoin). Si vous voulez en savoir plus, vous en trouverez de nombreuses sur le site Web de Gnome.