So I've finished revamping all of the Class::MOP API documentation.

The new docs have a specific reader in mind. That reader is someone who is using CMOP to introspect existing classes, and _maybe_ tweaking classes uses APIs look ->add_method, ->add_attribute, etc.

Most of these readers will arrive at CMOP by way of Moose, and are probably already using Moose in their own code.

That means the focus is on presenting the introspection and modification APIs, without a lot of theory. I've also tried to organize the methods so that the ones they are most likely to want come first in the docs.

The docs are they were before didn't seem to have a clear idea of who the reader was. However, they did seem to think that the reader might be implementing something on top of CMOP like Moose itself. I think history has shown that to be somewhat unlikely.

Instead, people who might have done that have instead written extensions to Moose. Those people are best served by good docs on writing Moose extensions in the Moose distro, and I think those docs have been improved over the past year or so.

Towards my goal of serving this notional reader, you'll notice that there are a whole bunch of methods that have intentionally not been documented. By and large, these methods are ones that I think should be renamed to start with a leading underscore, because they are really only useful if you're writing a subclass (or role) for the given module.

They also are methods that I just couldn't imagine documenting, because my notional reader would not find them useful. Often there is another similar method that the reader can use. Other times, they really should never be calling these methods directly.

But since there is some debate over how to change the names, how/when/if to do these deprecations, I've made a couple branches.

One is called "renames-and-deprecations".

This branch should be rebased at the HEAD of master, and consists of a set of changes to make various methods protected. Mostly this consisted of adding a leading underscore to the name. The existing method name still exists, and warns that it has been made private when called.

I also added deprecation warnings for a few methods that have been marked deprecated in the docs for a long time (and just removed them from the docs entirely).

Finally, for CMOP::Module->create, I renamed it to ->_instantiate_module and changed the API quite a bit.

There is another branch called "refactor-immutable". Trying to document the immutable code was annoying me, cause it was much more complicated than it needed to be. I refactored it quite a bit to simplify its handling of state in this branch.

The changes means that there is one CMOP::Immutable object per metaclass. The metaclass creates it once when $metaclass->make_immutable is called. After that, future calls to ->make_(im)?mutable re-use this object.

I also changed the internals of CMOP::Immutable quite a bit to simplify them. The make_X methods no longer accept a list of options. Instead, the options passed to the constructor are always used (this is effectively how things worked before, but in a much more convoluted way).

I'd appreciate review of these two branches. I imagine the latter will be much less controversial, since I don't think anyone loved the immutable API.


-dave

/*============================================================
http://VegGuide.org               http://blog.urth.org
Your guide to all that's veg      House Absolute(ly Pointless)
============================================================*/

Reply via email to