Slash Boxes
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
More | Login | Reply
Loading... please wait.
  • I personally think that the word "framework" is a heavily overloaded term these days. If I were to give my own definition (which is surely not the correct one, only how I personally view them) it would be "a collection of software libraries that you work /within/ to create an application". By "within" I mean that the set of libraries tends to envelop your code in such a way that the end user/consumer of your code rarely has direct connection with your code itself, but instead iteracts with some layer of the framework instead. This is most obvious in something like Catalyst in which the details of URL dispatch, Template creation (almost always automagically handleded by the View class) and request parameter processing are all largely handled for you.

    By this definition (which I admit is very broad), Moose is a framework. It is a framework for doing OO programming (yes, very Perl6-ish OO). But (as you correctly point out) I dont anywhere call it an "OO Framework", because I don't look at it that way. I see it as an OO "system" which itself then becomes an "extension" of the language itself. This is very much how I have heard CLOS referred too, which is suprising given how heavily CLOS influenced the design of Moose and Class::MOP. It was also a big design goal of Moose that it not force you to do everything "The Moose Way", but allow you to use as much or as little of Moose as you needed.

    Now, one small thing I would like to point out. We do mention the word "framework" in the latest release. Chris Prather did some excellent fiddling with some of the internals of and was able to expose some of goodness of the Sub::Exporter module (which we use to export Moose's "keywords"). The result is that it is much much easier to "extend" Moose and even "embed" Moose within your "framework" (see the EXTENDING_AND_EMBEDDING_MOOSE [] section of the docs). In this way you could look at Moose as a "meta-framework" which you can use as the basis for your own framework.

    - Stevan