Any::Moose とか幻想やったんや
Any::Moose
は Moose
と Mouse
のラッパーで、バックエンドがどちらになるかは use Any::Moose
した時点で Moose
or Mouse
がロードされているかによって変わる。
どこかで use Moose
していたら use Any::Moose
は use Moose
としてうごくし、 そうじゃない場合は use Mouse
としてうごく。
これはなんのためにあるかというと、MouseとMooseの両方のモジュールを混ぜて使うと壊れるからなんだけど、 そもそも混ぜて使って問題になるのは Mouse のクラスを Moose で extends したりとか、そういう Moose 周りの機能を相互に使おうとした場合だけであって、混ぜて使っていてもそれぞれのクラスを普通に使い合う分にはなんの問題もない。
また、昔はruntimeの速度にそこまで性能差はなかったということもある。(make_immutable
してたら Moose もそこまで遅くない)
しかし現在では gfx マジックによって Mouse は激しく高速化されており、runtime での速度差もかなりある。 したがって、Moose的な意味で相互利用する場合でなければ、Any::Moose
が勝手に Moose になるとうれしくない場合がほとんどだ。
さらに、MooseとMouseの非互換によって、バックエンドがMouseのときはうまく動いていたコードが、 どこからMooseモジュールを使用したことによってバックエンドがMooseに切り替わった瞬間に動かなくなるという事例もある。
結論として Any::Moose
つかわないで Mouse
を直で使う、で誰も困らないなーとおもってるのでそうしていこうと考えております。
もし混ぜることがあったとしても Moose からつかうときは non Moose なクラスとして扱うようにすれば別に問題ないでしょう。(僕はそもそもMoose使わないけどw)