Moose Hacking Guide Fuji, Goro (gfx) <gfuji@cpan.org> YAPC::Asia 2009 Lightning Talks (first day, 18:15-)
Moose の流行 <ul><li>「最近 Moose が流行っていることだし、ソースコードでも読んでみるか」 </li></ul>
The Moose distribution <ul><li>Moose, Moose::Error::Confess, Moose::Error::Croak, Moose::Error::Default, Moose::Exporter, ...
Too many modules! <ul><li>There are too many files in the distribution </li></ul><ul><ul><li>58 modules </li></ul></ul><ul...
Categolization (modules) <ul><li>Moose and Moose::Role  (and oose.pm) </li></ul><ul><ul><li>クラス / ロール定義のためのシュガー </li></ul>...
Categorization (classes) <ul><li>Moose::Meta::* </li></ul><ul><ul><li>内部で使われるクラスのための名前空間 </li></ul></ul><ul><ul><li>Moose ...
Moose::Meta::Instance <ul><li>derived from Class::MOP::Instance </li></ul><ul><li>オブジェクトインスタンスの生成とアクセスを抽象化する </li></ul><ul...
Moose::Meta::Class <ul><li>derived from Class::MOP::Class </li></ul><ul><li>has Instance, Attribute, Method, Role </li></u...
Moose::Meta::Attribute <ul><li>derived from Class::MOP::Attribute </li></ul><ul><li>インスタンスの属性に関するクラス </li></ul><ul><li>属性の...
Moose::Meta::Method <ul><li>derived from Class::MOP::Attribute </li></ul><ul><li>コードリファレンスの扱いやすいラッパーという役割と、 Moose 管理下にあるメソ...
Moose::Meta::Role <ul><li>derived from Class::MOP::Module </li></ul><ul><li>ロールのためのクラス </li></ul><ul><li>役割は M::M::Class に...
Moose::Meta::TypeConstraints <ul><li>TCオブジェクトを実装する </li></ul><ul><li>M::M::TC と M::Util::TC の関係は、 M::M::Class と Moose の関係に...
Moose::Meta::TypeCoercion <ul><li>型変換を実装する TC の補助クラス </li></ul><ul><li>M::M::TypeCoercion::* は M::M::TypeCoercion のサブクラスで特...
Use Devel::NYTProf <ul><li>クラス構成が分かったところでどこから取りかかればいいか分からない! </li></ul><ul><ul><li>それ NYTProf で! </li></ul></ul>
NYTProf is ... <ul><li>A Perl profiler </li></ul><ul><li>Also, a Perl source code viewer </li></ul><ul><li>実行時の情報を元にソースコード...
まとめ <ul><li>モジュール数は 50 以上あるが、分類すると実は 10 種類くらいしかない </li></ul><ul><li>単純なクラスを NTYProf に掛けて、 has() あたりから動作を追っていくと、 Moose の振る舞...
That's all <ul><li>See also Moose::Manual::Contributing </li></ul><ul><li>Enjoy hacking Moose! </li></ul><ul><li>Thank you...
Upcoming SlideShare
Loading in …5
×

Moose Hacking Guide

2,645 views

Published on

Used for lightningtalks in YAPC::Asia 2009

- gfx

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,645
On SlideShare
0
From Embeds
0
Number of Embeds
31
Actions
Shares
0
Downloads
20
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Moose Hacking Guide

  1. 1. Moose Hacking Guide Fuji, Goro (gfx) <gfuji@cpan.org> YAPC::Asia 2009 Lightning Talks (first day, 18:15-)
  2. 2. Moose の流行 <ul><li>「最近 Moose が流行っていることだし、ソースコードでも読んでみるか」 </li></ul>
  3. 3. The Moose distribution <ul><li>Moose, Moose::Error::Confess, Moose::Error::Croak, Moose::Error::Default, Moose::Exporter, Moose::Meta::Attribute, Moose::Meta::Attribute::Native, Moose::Meta::Attribute::Native::MethodProvider::Array, Moose::Meta::Attribute::Native::MethodProvider::Bool, Moose::Meta::Attribute::Native::MethodProvider::Counter, Moose::Meta::Attribute::Native::MethodProvider::Hash, Moose::Meta::Attribute::Native::MethodProvider::String, Moose::Meta::Attribute::Native::Trait, Moose::Meta::Attribute::Native::Trait::Array, Moose::Meta::Attribute::Native::Trait::Bool, Moose::Meta::Attribute::Native::Trait::Counter, Moose::Meta::Attribute::Native::Trait::Hash, Moose::Meta::Attribute::Native::Trait::Number, Moose::Meta::Attribute::Native::Trait::String, Moose::Meta::Class, Moose::Meta::Class::Immutable::Trait, Moose::Meta::Instance, Moose::Meta::Method, Moose::Meta::Method::Accessor, Moose::Meta::Method::Augmented, Moose::Meta::Method::Constructor, Moose::Meta::Method::Delegation, Moose::Meta::Method::Destructor, Moose::Meta::Method::Overridden, Moose::Meta::Role, Moose::Meta::Role::Application, Moose::Meta::Role::Application::RoleSummation, Moose::Meta::Role::Application::ToClass, Moose::Meta::Role::Application::ToInstance, Moose::Meta::Role::Application::ToRole, Moose::Meta::Role::Composite, Moose::Meta::Role::Method, Moose::Meta::Role::Method::Conflicting, Moose::Meta::Role::Method::Required, Moose::Meta::TypeCoercion, Moose::Meta::TypeCoercion::Union, Moose::Meta::TypeConstraint, Moose::Meta::TypeConstraint::Class, Moose::Meta::TypeConstraint::DuckType, Moose::Meta::TypeConstraint::Enum, Moose::Meta::TypeConstraint::Parameterizable, Moose::Meta::TypeConstraint::Parameterized, Moose::Meta::TypeConstraint::Registry, Moose::Meta::TypeConstraint::Role, Moose::Meta::TypeConstraint::Union, Moose::Object, Moose::Role, Moose::Util, Moose::Util::MetaRole, Moose::Util::TypeConstraints, Moose::Util::TypeConstraints::OptimizedConstraints, Test::Moose, oose </li></ul>
  4. 4. Too many modules! <ul><li>There are too many files in the distribution </li></ul><ul><ul><li>58 modules </li></ul></ul><ul><ul><li>47 documents </li></ul></ul><ul><li>しかも Moose は Class::MOP の上にある! </li></ul><ul><ul><li>15 modules in the Class::MOP distribution </li></ul></ul>
  5. 5. Categolization (modules) <ul><li>Moose and Moose::Role (and oose.pm) </li></ul><ul><ul><li>クラス / ロール定義のためのシュガー </li></ul></ul><ul><li>Moose::Util </li></ul><ul><ul><li>ユーティリティ関数群 </li></ul></ul><ul><li>Moose::Error </li></ul><ul><ul><li>エラー処理クラス </li></ul></ul><ul><li>Moose::Object </li></ul><ul><ul><li>すべての Moose アプリケーションクラスの基底 </li></ul></ul><ul><li>Moose::Exporter </li></ul><ul><ul><li>Moose 自身と MooseX のための Exporter </li></ul></ul>
  6. 6. Categorization (classes) <ul><li>Moose::Meta::* </li></ul><ul><ul><li>内部で使われるクラスのための名前空間 </li></ul></ul><ul><ul><li>Moose の振る舞いを実装している核心部分 </li></ul></ul>
  7. 7. Moose::Meta::Instance <ul><li>derived from Class::MOP::Instance </li></ul><ul><li>オブジェクトインスタンスの生成とアクセスを抽象化する </li></ul><ul><li>たとえば、デフォルトではオブジェクトインスタンスはハッシュリファレンスである </li></ul>
  8. 8. Moose::Meta::Class <ul><li>derived from Class::MOP::Class </li></ul><ul><li>has Instance, Attribute, Method, Role </li></ul><ul><li>クラスを管理するクラス (=metaclass) </li></ul><ul><li>Method 、 Attribute の管理など </li></ul><ul><li>実際にインスタンスを生成するのは Instance の仕事 </li></ul>
  9. 9. Moose::Meta::Attribute <ul><li>derived from Class::MOP::Attribute </li></ul><ul><li>インスタンスの属性に関するクラス </li></ul><ul><li>属性の振る舞いを規定する </li></ul><ul><li>Moose.pm の has() シュガーの引数は、 M::M::Attribute->new(...) に渡される </li></ul>
  10. 10. Moose::Meta::Method <ul><li>derived from Class::MOP::Attribute </li></ul><ul><li>コードリファレンスの扱いやすいラッパーという役割と、 Moose 管理下にあるメソッドを生成するという二つの役割がある </li></ul><ul><li>M::M::Method は主にラッパー </li></ul><ul><li>M::M::Method::* は M::M::Method のサブクラスで、メソッドを生成する </li></ul>
  11. 11. Moose::Meta::Role <ul><li>derived from Class::MOP::Module </li></ul><ul><li>ロールのためのクラス </li></ul><ul><li>役割は M::M::Class に似る </li></ul><ul><li>M::M::Role::* はロールのサブクラスではなく、ロールが内部で使用するクラス </li></ul>
  12. 12. Moose::Meta::TypeConstraints <ul><li>TCオブジェクトを実装する </li></ul><ul><li>M::M::TC と M::Util::TC の関係は、 M::M::Class と Moose の関係に似ている </li></ul><ul><li>M::M::TC::* は M::M::TC のサブクラスで、特殊な TC の機能を提供する (e.g. Parameteriz(?|able|ed) TC) </li></ul>
  13. 13. Moose::Meta::TypeCoercion <ul><li>型変換を実装する TC の補助クラス </li></ul><ul><li>M::M::TypeCoercion::* は M::M::TypeCoercion のサブクラスで特殊な機能を提供 (e.g. Union) </li></ul>
  14. 14. Use Devel::NYTProf <ul><li>クラス構成が分かったところでどこから取りかかればいいか分からない! </li></ul><ul><ul><li>それ NYTProf で! </li></ul></ul>
  15. 15. NYTProf is ... <ul><li>A Perl profiler </li></ul><ul><li>Also, a Perl source code viewer </li></ul><ul><li>実行時の情報を元にソースコードを見て回ることができる </li></ul><ul><li>サブルーチンの呼び出し元が分かる </li></ul><ul><li>ポリモーフィックメソッドでも、実際に呼び出したメソッドを追跡できる </li></ul>
  16. 16. まとめ <ul><li>モジュール数は 50 以上あるが、分類すると実は 10 種類くらいしかない </li></ul><ul><li>単純なクラスを NTYProf に掛けて、 has() あたりから動作を追っていくと、 Moose の振る舞いを簡単に追うことができる </li></ul>
  17. 17. That's all <ul><li>See also Moose::Manual::Contributing </li></ul><ul><li>Enjoy hacking Moose! </li></ul><ul><li>Thank you for your attention. </li></ul>

×