From Fedora Project Wiki
(add first runthrough of table) |
|||
Line 29: | Line 29: | ||
|'''Requirement'''||'''Example'''||'''Current'''||'''Target'''||'''Compat?'''||'''Comment''' | |'''Requirement'''||'''Example'''||'''Current'''||'''Target'''||'''Compat?'''||'''Comment''' | ||
|- | |- | ||
|<code>use base</code> constructs correctly evaluated||<pre>use base 'XXX';</pre>||<pre>perl(base)</pre>||<pre>perl(base) | |''<code>use base</code> constructs correctly evaluated''||<pre>use base 'XXX';</pre>||<pre>perl(base)</pre>||<pre>perl(base) | ||
perl(XXX)</pre>|| ||Need also to correctly evaluate <code>use parent ...</code>, etc. | perl(XXX)</pre>|| ||Need also to correctly evaluate <code>use parent ...</code>, etc. | ||
|- | |- | ||
|''No duplicate provides''|| || || || ||We often see duplicate requires. These are harmless, except in the case where one requires is versioned and another unversioned.<br><br>This might need to be addressed at a higher level than perl.prov. | |''No duplicate provides''|| || || || ||We often see duplicate requires. These are harmless, except in the case where one requires is versioned and another unversioned.<br><br>This might need to be addressed at a higher level than perl.prov. | ||
|- | |- | ||
|Mo*se subclassing||<pre>extends 'Some::Class';</pre>|| ||<pre>perl(Some::Class)</pre>|| || | |''Mo*se subclassing''||<pre>extends 'Some::Class';</pre>|| ||<pre>perl(Some::Class)</pre>|| ||Multiple classes can be specified; not possible to specify version with this syntax. | ||
|- | |- | ||
|Mo*se roles||<pre>with 'Some::Class';</pre>|| ||<pre>perl(Some::Class)</pre>|| || | |''Mo*se roles''||<pre>with 'Some::Class'; | ||
# multiple roles at once | |||
with 'Role::A', 'Role::B';</pre>|| ||<pre>perl(Some::Class) | |||
perl(Role::A) | |||
perl(Role::B)</pre>|| ||Multiple classes can be specified; not possible to specify version with this syntax. | |||
|- | |- | ||
|Mo*se traits||...in an attribute specification:<pre>... | |''Mo*se traits''||...in an attribute specification:<pre>... | ||
traits => [ 'X', 'Y' ]</pre>|| ||<pre>perl(Moose::Meta::Custom::Trait::X) | traits => [ 'X', 'Y' ]</pre>|| ||<pre>perl(Moose::Meta::Custom::Trait::X) | ||
perl(Moose::Meta::Custom::Trait::Y)</pre>|| ||This is going to be tricky. | perl(Moose::Meta::Custom::Trait::Y)</pre>|| ||This is going to be tricky. | ||
|- | |- | ||
|Mo*se metaclasses|| || || || || | |''Mo*se metaclasses''|| || || || || | ||
|- | |- | ||
|Catalyst and other plugin syntax|| || || || || | |''Catalyst and other plugin syntax''||<pre>use Catalyst qw/-Debug ConfigLoader Static::Simple/;</pre>||<pre>perl(Catalyst)</pre>||<pre>perl(Catalyst) | ||
perl(Catalyst::Plugin::ConfigLoader) | |||
perl(Catalyst::Plugin::Static::Simple) | |||
</pre>|| || | |||
|- | |- | ||
|Ability to include/exclude|| || || || || | |''Ability to include/exclude''|| || || || || | ||
|} | |} |
Revision as of 19:42, 19 February 2009
Brain dump. Comments welcome and appreciated, on the talk page.
Current Flaws
Needed
- Understands "use base", "use parent", etc, constructs.
- Understands Moose
- "extends" - subclassing
- "with" - roles
- "metaclass" - metaclasses
- "traits" - metaclass roles
- Understands Catalyst plugin speficication syntax
- This should be extensible to other module classes
- Doesn't generate duplicates. e.g.: perl(Foo) and perl(Foo) >= 1.9
- Better able to deal with the wonders of Perl versioning; e.g.
- 1.20a stays 1.20a
- 1.20 becomes 1.020000 (version triplet)
Questions
- Should we attempt to compile? (a la
perl -wc
or Module::ScanDeps)- PROS: highly accurate
- CONS: may fail for a variety of reasons
- Should we try to normalize the versions?
Requirement | Example | Current | Target | Compat? | Comment |
use base constructs correctly evaluated |
use base 'XXX'; |
perl(base) |
perl(base) perl(XXX) |
Need also to correctly evaluate use parent ... , etc.
| |
No duplicate provides | We often see duplicate requires. These are harmless, except in the case where one requires is versioned and another unversioned. This might need to be addressed at a higher level than perl.prov. | ||||
Mo*se subclassing | extends 'Some::Class'; |
perl(Some::Class) |
Multiple classes can be specified; not possible to specify version with this syntax. | ||
Mo*se roles | with 'Some::Class'; # multiple roles at once with 'Role::A', 'Role::B'; |
perl(Some::Class) perl(Role::A) perl(Role::B) |
Multiple classes can be specified; not possible to specify version with this syntax. | ||
Mo*se traits | ...in an attribute specification:... traits => [ 'X', 'Y' ] |
perl(Moose::Meta::Custom::Trait::X) perl(Moose::Meta::Custom::Trait::Y) |
This is going to be tricky. | ||
Mo*se metaclasses | |||||
Catalyst and other plugin syntax | use Catalyst qw/-Debug ConfigLoader Static::Simple/; |
perl(Catalyst) |
perl(Catalyst) perl(Catalyst::Plugin::ConfigLoader) perl(Catalyst::Plugin::Static::Simple) |
||
Ability to include/exclude |