Hi Alexis,

I've been aware of Coat since you started it. (But I hadn't seen the
value of a lite Moose until much later). I had even contributed two
patches. :)

I started Mouse (originally called Neutrino) a few months ago for fun,
to better understand how Moose fits together. It wasn't going to be
anything serious or used by anything. But then I mentioned it to a few
people and here we are.

Mouse strives very hard to be a *compatible*, fast, light replacement
for Moose. Coat is the latter two. It's marginally compatible, but
running s/Coat/Moose/g will probably not work for a decent sized
project. There are too many details that are different. For example,
if you leave out the "is" option to "has" in Coat, you get a
read-write accessor. In Moose, you get no accessor (not even
read-only). Coat probably did this to optimize for convenience. But it
is something you have to know about when upgrading from Coat to Moose.

I've tried to model even Mouse's internals on Moose as well. I have
Mouse::Meta::Attribute, Mouse::Meta::Class->linearized_isa, etc. Mouse
does provide a very barebones MOP, but that's often all you need.
Almost all of the features provided by Mouse's MOP are given the same
name and functionality as Moose. Even if you use the MOP you can
probably safely upgrade from Mouse to Moose. Coat's MOP is quite a bit
different (not bad, just different).

There are a number of Moose features (such as practically all the type
features) that Coat has that Moose doesn't have yet. Coat::Persistent
is also nowhere to be seen in Mouse. So I think there's plenty of room
in this space for two (or five) lightweight Mooses. :)

Shawn

Reply via email to