"Introspection"은 무엇을 의미하며 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하여 객체로 수행하려는 작업을 수행 할 수 있는지 알 수 있습니다. 런타임에 사용하지 않더라도 내부 검사는 디버깅에 매우 유용합니다.


이제 GObject 및 GObject 기반 라이브러리로 이동하십시오. 그들은 C에 있고 C에 당신은이 사랑스럽고 푹신한 관리 코드를 말도 안되게하지 않으며 성능을 얻습니다. 이는 내장 된 내부 검사가없고 외부 바인딩을 유지하기가 더 어렵다는 것을 의미합니다.

바인딩 은 서로 다른 언어로 된 것들 사이의 API로 함께 작동 할 수 있습니다. 그것이 작동하려면 공통 API가 필요 하며이 경우 API는 GObject입니다. 그러나 이것이 작동하려면 호출자 바인딩이 사용 가능한 것을 알아야합니다. GObject Introspection까지는 바인딩에 하드 코딩되어 있어야했으며 이는 각 바인딩 세트에 손으로 쓴 목록을 유지하는 것을 의미합니다.

GObject Introspection은 기본적으로 작업중인 GObject의 현재 소스를 검색 할 수있는 스캐너를 제공하며 XML 바인딩 정보를 제공합니다. 그런 다음 바인딩에 의해 처리되고 항상 작동하는 API로 끝납니다.

나는 확실히 여기에 모든 것을 다루지 않았지만 두 가지 주제에 대한 아이디어를 제공하려고 노력하고 있습니다 (탐색과 GObjects가 필요한 이유). 더 알고 싶다면 Gnome 웹 사이트에 많은 정보가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.