[Geany-Devel] RFC: Proxy plugins
Matthew Brush
mbrush at xxxxx
Sat May 17 01:43:40 UTC 2014
On 14-05-16 03:03 PM, Thomas Martitz wrote:
> Am 16.05.2014 19:32, schrieb Dimitar Zhekov:
>> On Fri, 16 May 2014 16:59:17 +0200
>> Thomas Martitz <kugel at rockbox.org> wrote:
>>
>>> I have a question regarding libpeas. There doesn't seem to be a public
>>> (nor documented) API to add loaders. From what I can see the current
>>> language support of libpeas is quite poor (only python and seed (that's
>>> JS isnt it?)). Also, they don't seem to very committed to maintaining
>>> their loaders[1].
>>>
It doesn't seem to make much sense to support two JavaScript
implementations, although I don't know the specifics of this.
>>> I think we want to maintain the ability to add loaders on our own,
With Peas you can, in fact it's designed with this purpose in mind,
unlike the existing C-only loader.
>>> without depending on a 3rd party project. Especially for potentially
Meh, we depend on lots of 3rd party projects, several directly and many
indirectly (see `ldd geany`).
Peas seems to be quite popular in the community around our framework/UI
toolkit and is used by several (if not dozens) of popular applications,
which also means it's readily available in many popular distros' package
repositories.
Even if Peas becomes unmaintained/unsupported, we could roll it into our
own source tree and maintain it like we do ctags and tagmanager and we
still wouldn't have had to write it ourselves :)
>>> creating a compat-loader for our existing plugins. It doesn't seem
After experimenting with this a bit, I believe it doesn't make much
sense to make a compatibility layer because a) you still need basically
the same code as the existing loader code, b) you would have to
change/refactor/re-write lots of it c) you would still have two distinct
ways to implement plugin interfaces, d) increases chances of breaking
the existing loader/plugins and e) intertwining the two loaders would
probably make it harder in the distant future to just drop one of them.
>>> libpeas readily supports this. Unless I'm missing something.
>> The loaders (except for C) are plugins, and the build-in ones are
>> installed in /usr/lib/libpeas-<version>/loaders/ as .so libraries.
>> For example, peas-plugin-loader-python.c contains:
>>
>> G_MODULE_EXPORT void
>> peas_register_types (PeasObjectModule *module) <-- as a regular plugin
>> {
>> peas_object_module_register_extension_type (module,
>> PEAS_TYPE_PLUGIN_LOADER,
>> PEAS_TYPE_PLUGIN_LOADER_PYTHON);
>> }
>
> I found that too. But this is not public and not documented. It's also
> not installed to /usr/include/libpeas-1.0.
>
Yikes! Free Software not properly documented! :)
> Since we want plugin authors to be able to create loaders we need
> something that's stable and documented.
>
Then why do you want to write our own libpeas into the existing C plugin
loader? It will (at least for some time) be buggier, and less widely
tested/used/maintained (ie. only by us), take lots of extra effort, not
automate the bridge between core and the plugins' language, probably be
less well-documented, and after all, the end result would most-likely
provide an inferior experience for non-C plugin authors.
> Best regards.
>
>
>> And for the next probable question, there is no search for .py files,
>> instead the plugin .ini file (foo.plugin) specifies which loader should
>> be used (C if missing).
>
> I think this could be a problem too. Unless we maintain two loaders
> (that would be better avoided) we need to find a way to have libpeas
We wouldn't have to maintain libpeas, it's a separate project with other
developers maintaining it for us. Eventually in the long distant future
(eg. Geany 2.0), we could drop the old loader and maintain zero loaders :)
> find (and load) current plugins. Perhaps we could create a small helper
> function that creates a suitable .ini (if it doesn't exist) out of the
> current plugin_set_info() before running libpeas scan, for compatibility
> purposes.
>
As mentioned above, this doesn't seem worth the trouble and I don't
think it would be as easy/useful as it seems on the surface. We could
just leave the existing loader without breaking anything, it's quite
stable and works pretty well for plain C plugins that don't want to use
GObject-ish stuff. We could document the Peas loader and related work as
provisional while we get it all integrated and working well with the GI
bindings and still leaving the existing stable C loader in-tact during
this time and for the foreseeable future.
Cheers,
Matthew Brush
More information about the Devel
mailing list