2013-09-03 2 views
1

The Wiki page of the old PyGTK 2.8 binding утверждает, что объект правильно написанных на PythonGObject Самоанализ на нескольких языках

также должно быть легко использовать из кода C, или даже других языковых привязок.

Но PyGTK устарел и должен быть заменен PyGObject. Возможно ли смешивать и сопоставлять языки с новым связыванием на основе интроспекции? Например, можно ли написать класс gobject в Vala, расширить его с помощью Python и использовать результат в Java?

ответ

0

Теоретически, да, это должно быть возможно. На практике нет, не совсем. Смешивание нескольких периодов времени, подобных этому, чрезвычайно сложно и крайне бесполезно для ресурсов. Если вы хотите, чтобы ваш код можно было использовать на нескольких языках, вам очень нужно написать его в C или Vala. Или C++, пока вы открываете API C.

Самое близкое, что вы действительно получите, это что-то вроде libpeas, где вы создаете четко определенные точки расширения и затем можете реализовать эти расширения на любом выбранном вами языке.

+0

В моем случае достаточно четких точек входа, поэтому libpeas - хороший намек. Кажется, что он поддерживает не совсем любой язык, который я выбираю, но на самом деле гораздо меньше языков, чем самоанализ Gbject. [Или мне что-то не хватает?] (Http://stackoverflow.com/questions/18633753) – XZS

+0

libpeas должен поддерживать сам язык, в дополнение к языку, поддерживающему интроспекцию gobject. Например, libpeas должен использовать библиотеку времени исполнения Python для загрузки и выполнения '.py'-файлов в плагинах. gobject-introspection не предоставляет этого: он предоставляет возможность для каждой языковой среды загружать файлы GIR и typelib для доступа к связанным им API. Например, для Python это модуль Python, который загружает typelib и предоставляет его классы как классы Python. –

1

Я написал библиотеку плагинов на основе C, которая по сути делает это. Он использует GObject Introspection, и теоретически это возможно. Прямо сейчас есть C/C++, Python, Lua и SeedJS, все играют вместе в одном и том же пространстве памяти, но я не пробовал подкласс или не называть ничего, кроме C на других языках.

В любом случае, не стесняйтесь, если хотите. GPlugin