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?" >