Cosa significa "Introspection" e in che modo è correlato a GObject Introspection?


Risposte:


11

L'introspezione è un modo per scoprire cos'è un oggetto e cosa contiene in fase di esecuzione. In alcune lingue questo è più necessario di altri. Python, che viene digitato in modo dinamico (vale a dire, un oggetto può ottenere attributi e metodi in fase di runtime) utilizza l'introspezione per scoprire lo stato corrente di un oggetto.

Ecco un esempio di Python molto semplicistico in cui inizi con una classe e aggiungi un nuovo attributo e, usando l'introspezione, monitora quali attributi sono disponibili sull'istanza dell'oggetto.

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

>>> instance = MyObject()

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

>>> instance.newvariable = "Kittens"

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

Quindi nei sistemi dinamici puoi usare cose come quelle di Python hasattrper dire se un oggetto sarà in grado di fare ciò che stai cercando di fare con esso. Anche se non lo si utilizza in fase di esecuzione, l'introspezione è anche estremamente utile per il debug.


Ora su GObjects e librerie basate su GObject. Sono in C e in C non si ottengono tutte queste adorabili assurdità del codice gestito, si ottengono prestazioni. Ciò significa che l'introspezione integrata non è presente e ciò significa che è più difficile mantenere un'associazione esterna.

I binding sono un'API tra elementi in diverse lingue che consentono loro di lavorare insieme. Affinché funzioni, è necessaria un'API comune e in questo caso l'API è GObject. Ma affinché questo funzioni, l'associazione del chiamante deve sapere cosa è disponibile. Fino a GObject Introspection questo ha dovuto essere codificato nei binding e ciò significa mantenere un elenco scritto a mano su ogni set di binding.

GObject Introspection fornisce essenzialmente uno scanner in grado di ricercare la fonte corrente di GObject con cui si sta lavorando e fornisce informazioni di associazione XML. Questo viene quindi elaborato dai binding e si finisce con un'API che funziona sempre, sempre.

Certamente non ho trattato tutto qui, ma sto cercando di darti un'idea dei due argomenti (introspezione e perché GObjects ne ha bisogno). Se vuoi saperne di più, sul sito Web di Gnome ce ne sono molti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.