Re: Plugin architecture

[email protected] (Eric Wilhelm)
Newsgroups perl.module.build
Message-ID <[email protected]>
# from Christopher J. Madsen
# on Saturday 15 March 2008 23:43:

>>This seems like it provides a lot of room
>> for subtle bugs.  How would a plugin declare that it is incompatible
>> with another or otherwise avoid the silent error of "only one of my
>> plugins ran"?
>
>I don't think it would.  That's up to the person selecting the plugins
>to run.  Hopefully, user & system level plugins would be used only for
>things unlikely to conflict with other plugins.

It is still difficult to debug, regardless of hope or intent.  If the 
user breaks something via their config, a loud and obvious error should 
result.

Similarly, maybe the priority should simply be by load-order.  At least 
then a plugin which knows it is incompatible with another can make 
noise.  Still it might be nice to have the noise created via some 
mechanism in the registration (e.g. "conflicts => {Foo => '<= 0.2'}".)

>I don't think many pre hooks will need to short-circuit evaluation.
>  But I think it needs to be possible to prevent the default method
> from being called.  I suppose we could say that if a pre hook
> short-circuits, the remaining pre hooks are still called (but any
> values they try to return would be ignored) and only the default
> method gets skipped.  But I'm not sure that's better.

Maybe the short-circuit (bypassing/replacing the default method) should 
just be defined differently.  That is: replace_METHOD() or something 
and only allow one definition of it.

A few concrete examples would certainly help me work through that logic.

I suppose ACTION_code() or ACTION_dist() would be good examples.  If 
these are modifying files on disk, a bypass probably means that none of 
the other hooks should run.  Further, what are the pre and post hooks 
typically doing in such a case?

When it comes to copying files, a cleaner scheme might be to install a 
chain of filter subs which get each file and take/return a list of 
lines.  But that's quite a bit different than a hook which just e.g. 
copies or generates some extra files or adds a depends().

--Eric
-- 
hobgoblin n 1: (folklore) a small grotesque supernatural creature that
          makes trouble for human beings
---------------------------------------------------
    http://scratchcomputing.com
---------------------------------------------------
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.