[Geany-Devel] New plugin loader mechanisms
Dimitar Zhekov
dimitar.zhekov at xxxxx
Fri Mar 20 19:25:53 UTC 2015
On 18.3.2015 г. 23:15, Matthew Brush wrote:
>> Scope contains 20 source files and 22 headers. Using static is not an
>> option, and marking everything global as hidden will be cumbersome,
>> ugly, and easy to miss (inexperienced plugin developers are sure to miss
>> symbols).
>>
>
> Why does it need so many globals? Shouldn't the only globals really be
> the stuff Geany requires? I'm wondering because one day it would be cool
> to able to do stuff like having multiple "instances" in-process and to
> allow a plugin per in-process "instance" or some stuff like this. With
> the additional userdata pointer, in theory one could make a big huge
> structure containing all their global (instance) state and have that
> passed around, and then there's less issue with symbols and multiple
> instances and such.
Because, if I have foo.c and bar.c, and foo needs to call a function
from bar, the obvious way is to use a non-static function. And the
normal way to guarantee that bar_function() will not cause any
collisions is not to record it in some global pointer function list
(you'll need a bar_init() for that anyway), but define it
non-exportable. That will automatically enable per-instance usage.
The scope modules are separated by purpose, and they need to call each
other no less than the Geany modules. I can declare everything static,
create an "all.c", and #include all .c files, but why?
The global variables are:
- the global plugin configuration
- the current program (name, working dir, env, options...)
- the thread count, current thread and frame.
Of these, the first two categories may be reasonably put in structs,
like in Geany, but I'm using name prefixes instead.
--
E-gards: Jimmy
More information about the Devel
mailing list