# from David E. Wheeler
# on Thursday 29 January 2009 15:06:
>As I said in my previous email, if I'm installing your code, I'm going
> to be running it, anyway. So why can't the build script be written
> in Perl?
Well, that's the wrong argument. Sure, running arbitrary code requires
more trust than not, but structured data can be queried to the answer
for a given environment regardless of the environment in which the
query was run.
So, arbitrary code would check $^O eq 'MSWin32', or possibly something
silly like "-d 'c:\\progra~1'" and yield the desired answer on the
target environment. But, if I wanted to determine the win32
dependencies from Linux (for e.g. bundled packaging from a single build
machine), I would have to set $^O to get the right answer -- and that
might have undesired side-effects.
One could require/suggest that authors use some slightly more structured
mechanism so that the query could pass a hash with e.g. a 'target_os'
key, but then you still have a black box of code to run: "my %answer =
code(%inputs)", which is a closed system. A data structure is a more
open system (like an open-face sandwhich) because you can see what the
conditionals are.
And yes, you have to admit that at some point you haven't provided the
key/function for "whatever thing you didn't think of" and so you end up
with an eval($blackbox) situation. But, that's just one pickle in the
sandwhich so you can still identify the cheese and mustard because
everything is laid out where you can get at it.
And, we could require that user functions be named, which means you
could absorb them into a later definition of the format.
Note that I'm thinking beyond just building or doing CPAN meta stuff.
Things like if_os_is(...) and has_library(...) are used differently
when you start dealing with packaging for three platforms. There is
also the use-any-of-these-modules issue, where I might have
specifically chosen one to include.
--Eric
--
"Left to themselves, things tend to go from bad to worse."
--Murphy's Corollary
---------------------------------------------------
http://scratchcomputing.com
---------------------------------------------------