「イントロスペクション」とはどういう意味ですか。また、GObject Introspectionとどのように関連していますか?


回答:


11

イントロスペクションは、オブジェクトが何であるか、実行時にオブジェクトに何が含まれるかを見つける方法です。一部の言語では、これは他の言語よりも必要です。動的に型付けされる(つまり、オブジェクトは実行時に属性とメソッドを取得できる)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ベースのライブラリーについて説明します。それらはCにあり、Cでは、この素敵なふわふわしたマネージドコードをすべてナンセンスにするのではなく、パフォーマンスを実現します。これは、組み込みのイントロスペクションが存在しないことを意味します。つまり、外部バインディングを維持することが難しくなります。

バインディングは、さまざまな言語の物事の間のAPIであり、それらを連携させることができます。これを機能させるには、共通のAPIが必要です。この場合、そのAPIはGObjectです。しかし、これが機能するためには、呼び出し側のバインディングで、何が利用できるかを知る必要があります。GObject Introspectionまでは、これをバインディングにハードコーディングする必要がありました。つまり、バインディングの各セットで手書きのリストを維持する必要がありました。

GObject Introspectionは、基本的に、作業中のGObjectの現在のソースを探ることができるスキャナーを提供し、XMLバインディング情報を提供します。これはバインディングによって処理され、常に機能するAPIになります。

ここではすべてを取り上げたわけではありませんが、2つのトピック(イントロスペクションとGObjectsがなぜそれを必要とするのか)について説明します。詳細を知りたい場合は、Gnome Webサイトにたくさんあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.