Re: Moose -> Mouse -> Mouse::Tiny/Muscle

[email protected] (Sartak)
Newsgroups perl.moose
Message-ID <[email protected]>
Hey gang,

I uploaded Mouse 0.08 just now. It has no hard dependencies.
Scalar::Util is required only if you use weaken.
Class::Method::Modifiers is required only if you use
before/after/around. I'll see about inlining the latter. The only loss
in functionality is the feature set provided by Sub::Exporter. But, as
Yuval said, it is okay to make that kind of compromise.

I haven't gotten to a (one-file) Mouse::Tiny but that's next.

Shawn

On Tue, Sep 9, 2008 at 9:30 PM, Michael G Schwern <[email protected]> wrote:
> Sartak wrote:
>> On Tue, Sep 9, 2008 at 4:20 AM, Michael G Schwern <[email protected]> wrote:
>>> I looked at just copying in Mouse, but Mouse has dependencies which themselves
>>> have dependencies, some of them with XS.  Ideally, what I want is Mouse::Tiny,
>>> or as I like to put it, "Muscle". [2]  A stand-alone, single file, no non-core
>>> dependencies, 5.6 compatible implementation of 80% of Moose.  That way I can
>>> just copy it into the Test::Builder2 distribution and have a real OO system.
>>
>> I'd love to see Mouse itself go this way. There's little point in
>> having a lightweight Moose that has a number of dependencies
>> (especially XS). It looks like we could make all the dependencies
>> optional, and only required if you use the features.
>
> Excellent.
>
>
>> Here are Mouse's direct dependencies, and why we have them:
>>
>> * Sub::Exporter is used for a more powerful export. I use its extra
>> features (as a user of a Sub::Exporter module) very infrequently, so
>> being able to drop down to regular Exporter would be useful.
>
> It looks like extends(), has() and with() all depend on Sub::Exporter's
> ability to customize by caller.  However, that's easily emulated.
>
>
>> * Scalar::Util is used for blessed, weaken, looks_like_number, and
>> openhandle. It's in core as of 5.8, but if we need 5.6 then I think we
>> can make it work:
>>
>> - looks_like_number and openhandle are used only for the Num and
>> FileHandle type constraints. These aren't used very often as far as I
>> know, so perhaps we can delay-require Scalar::Util.
>>
>> - weaken is only used whenever you want weak refs for an attribute. I
>> personally do this with some frequency. But if you don't use it
>>
>> - blessed is used a lot. "use Mouse" also exports it. We could
>> probably provide an alternate implementation that uses ref and makes
>> sure it isn't a builtin type.
>
> looks_like_number(), openhandle() and blessed() all have short, pure Perl
> versions that can be easily copied.
>
> weaken requires XS and weak ref support, but it's perfectly fine to load that
> on demand.
>
>
>> * MRO::Compat is used for get_linear_isa. We could implement this in
>> Perl (and using mro::get_linear_isa if $] >= 5.10).
>
> It looks like that can all be separated from Class::C3.  I wonder what the
> performance hit will be?
>
>
>> * Class::Method::Modifiers are used for before/after/around. I wrote
>> this one, so we have more flexibility here. It's only a few pages of
>> code, so we could just add it into Mouse::OneFile, or again delay-load
>> it.
>
> That appears to only depend on MRO::Compat which we have to deal with anyway,
> so it looks like a straight copy is possible.  before, after and around will
> be useful for TB2.
>
>
> --
> E: "Would you want to maintain a 5000 line Perl program?"
> d: "Why would you write a 5000 line program?"
>
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.