Co oznacza „introspekcja” i jak jest ona powiązana z introspekcją GObject?


Odpowiedzi:


11

Introspekcja to sposób na sprawdzenie, czym jest obiekt i co zawiera w czasie wykonywania. W niektórych językach jest to bardziej konieczne niż w innych. Python, który jest dynamicznie typowany (to znaczy, obiekt może uzyskać atrybuty i metody w czasie wykonywania) korzysta z introspekcji, aby sprawdzić aktualny status obiektu.

Oto bardzo uproszczony przykład Pythona, w którym zaczynasz od klasy i dodajesz nowy atrybut, a korzystając z introspekcji monitorujesz, jakie atrybuty są dostępne w instancji obiektu.

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

>>> instance = MyObject()

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

>>> instance.newvariable = "Kittens"

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

Tak więc w systemach dynamicznych możesz używać rzeczy takich jak Python, hasattraby stwierdzić, czy obiekt będzie w stanie zrobić to, co próbujesz z nim zrobić. Nawet jeśli nie używasz go w czasie wykonywania, introspekcja jest również niezwykle przydatna do debugowania.


Teraz w GObjects i bibliotekach opartych na GObject. Są w C, aw C nie dostajesz tych wszystkich uroczych, puszystych bzdur zarządzanego kodu, zyskujesz wydajność. Oznacza to, że nie ma wbudowanej introspekcji i trudniej jest utrzymać powiązanie zewnętrzne.

Wiązania to interfejs API między rzeczami w różnych językach, które pozwalają im współpracować. Aby to zadziałało, potrzebujesz wspólnego API, w tym przypadku API to GObject. Ale aby to zadziałało, powiązanie dzwoniącego musi wiedzieć, co jest dla niego dostępne. Do czasu introspekcji GObject musiało to być zakodowane na stałe w powiązaniach, a to oznacza utrzymywanie ręcznie napisanej listy na każdym zestawie powiązań.

GObject Introspection zasadniczo zapewnia skaner, który może przeszukiwać bieżące źródło GObject, z którym pracujesz i zapewnia informacje o powiązaniu XML. To jest następnie przetwarzane przez powiązania i powstaje interfejs API, który po prostu działa przez cały czas.

Z pewnością nie omówiłem tutaj wszystkiego, ale staram się dać Wam wyobrażenie o dwóch tematach (introspekcja i dlaczego GObjects tego potrzebują). Jeśli chcesz dowiedzieć się więcej, na stronie Gnome jest mnóstwo.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.