# from David Golden
# on Sunday 06 September 2009 21:53:

>> I would be very sad to see a runtime module requirement just to
>> declare some rarely-used meta info.  Ditto for requiring a new Perl.
>
>POD?  Hell, no.

Why not?  If it's properly specified and pod-renderable, things like the 
distribution status, author, bugtracker, repository, tags, blahblah, 
can be human-readable and appear in perldoc while also being 
machine-extractable.

That is, I'm quite happy with Getopt::AsDocumented, and it 
(suboptimally) reads the caller's own pod at runtime (VS metadata, 
which is often not needed at compile/run time at all.)  I can write the 
documentation and declaration at the same time.

It seems that anything which isn't referenced by use() would ultimately 
cause less trouble by being some bit of text rather than compile-able 
code.

And whatever is referenced on the installed machine need not be the same 
file that M::B parses when it builds a dist -- once the info is in 
META.yml you're done parsing.  (Picture say, keeping MYMETA.yml on the 
installed tree plus a scheme for querying that.)

>But, for the sake of argument, let's say some bold, foolish programmer
>implements an extended 'package' keyword for Perl, like so [1]:
>
>    package Foo 1.23;
>
>And, following popular demand, at least based on #corehackers and
>#toolchain, he implements a way of marking module release status, like
>so:
>
>    package Foo 1.23 stable;

Well, what about "author", "tags", "repository", etc?  Where the version 
number is a necessary thing and reduces boilerplate code, the status is 
an unnecessary thing which adds boilerplate code.

The '_' in your VERSION vanishes within the runtime because of the 
necessary eval().  The status and some way to query it is not a 
necessary part of the package -- plus all of this is really dist-level 
stuff and you're opening yourself to multiple conflicting status values 
per .pm file.

>...
>Then, and only then, do we figure out if it should be a comment, or
>just be set in Build.PL or whatever because we'll have thought through
>the issues with other toolchain developers and can probably quickly
>agree on a common approach.

I think you're going a bit knee-jerk on the maintenance concerns of the 
trigger mechanism.  The author features of M::B don't need to be so 
set-in-stone because the author has control over which M::B they're 
running and responsibility for doing what it expects.  That's not to 
say that I want to build something hugely complicated and then rip it 
out from under everyone on the next version, but the "# ALPHA" parse 
feature is small and special enough that it shouldn't be a big deal.

And as for the rest of the toolchain:  if we implemented a pod-parsing 
META declaration scheme, that would be a M:B feature which M::I could 
choose to replicate or not.  There is no need to hold back M::B just to 
make it easier for users to switch tools.  The produced data should 
adhere to the META spec, but how the user declares that data is up to 
their tool.

--Eric
-- 
software:  a hypothetical exercise which happens to compile.
---------------------------------------------------
    http://scratchcomputing.com
---------------------------------------------------

Reply via email to