Có nghĩa là gì Introspection, và nó liên quan đến GObject Introspection như thế nào?


8

Nội tâm chính xác có nghĩa là gì? Làm thế nào là hữu ích cho một lập trình viên? Ai đó có thể vui lòng giải thích trong điều khoản cư sĩ?

Câu trả lời:


11

Introspection là một cách để tìm hiểu xem một đối tượng là gì và nó chứa gì khi chạy. Trong một số ngôn ngữ, điều này là cần thiết hơn những ngôn ngữ khác. Python được gõ động (nghĩa là, một đối tượng có thể có được các thuộc tính và phương thức trong thời gian chạy) sử dụng tính năng hướng nội để tìm ra trạng thái hiện tại của đối tượng.

Dưới đây là một ví dụ Python rất đơn giản khi bạn bắt đầu với một lớp và thêm một thuộc tính mới, và, bằng cách sử dụng phần hướng nội, theo dõi những thuộc tính nào có sẵn trên thể hiện đối tượng.

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

>>> instance = MyObject()

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

>>> instance.newvariable = "Kittens"

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

Vì vậy, trong các hệ thống động, bạn có thể sử dụng những thứ như Python hasattrđể biết liệu một đối tượng có thể làm những gì bạn đang cố gắng thực hiện với nó không. Ngay cả khi bạn không sử dụng nó trong thời gian chạy, thì introspection cũng cực kỳ hữu ích để gỡ lỗi.


Bây giờ vào GObjects và thư viện dựa trên GObject. Họ ở C và ở C, bạn không nhận được tất cả các mã vô nghĩa được quản lý dễ thương này, bạn sẽ có được hiệu suất. Điều này có nghĩa là hướng nội tích hợp không có ở đó và điều đó có nghĩa là khó duy trì ràng buộc bên ngoài hơn.

Ràng buộc là một API giữa các thứ trong các ngôn ngữ khác nhau cho phép chúng hoạt động cùng nhau. Để làm việc đó, bạn cần một API phổ biến và trong trường hợp này API đó là GObject. Nhưng để làm việc này, ràng buộc người gọi phải biết những gì có sẵn cho nó. Cho đến khi GObject Introspection, điều này đã được mã hóa cứng vào các ràng buộc và điều đó có nghĩa là duy trì một danh sách viết tay trên mỗi bộ ràng buộc.

GObject Introspection về cơ bản cung cấp một máy quét có thể tìm kiếm nguồn GObject hiện tại mà bạn đang làm việc và cung cấp cho bạn thông tin ràng buộc XML. Điều này sau đó được xử lý bởi các ràng buộc và bạn kết thúc với một API chỉ hoạt động mọi lúc.

Tôi chắc chắn không bao gồm tất cả mọi thứ ở đây nhưng tôi đang cố gắng cung cấp cho bạn một ý tưởng về hai chủ đề (hướng nội và lý do GObjects cần nó). Nếu bạn muốn biết thêm, có rất nhiều trên trang web Gnome.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.