Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re: what would you like to see in perl5.12? (attributes)

by lodin (Hermit)
on Aug 19, 2007 at 22:40 UTC ( #633678=note: print w/ replies, xml ) Need Help??


in reply to what would you like to see in perl5.12?

A solid, complete implementation of attributes. Luckily, attributes are marked experimental.

Here's the issues I think need to be addressed, in a fuzzily sorted order of importance.

  • Namespace scoping: This is fundamental. No more attributes in UNIVERSAL. It should be as easy to import/export attributes as variables and subroutines. Without it you can't release any general purpose attribute modules on CPAN that other module authors can re-use. They'll only be useful in-house where you can control they won't conflict with each other. Back in 2005 26 of 28 modules (that I found) on CPAN that provided attributes polluted the UNIVERSAL namespace.
  • A unified implementation: The simple FETCH_/MODIFY_*type*_ATTRIBUTES methods implementation is just begging for trouble. It works for systems like Catalyst, but not as a general language feature.
  • True attribute arguments: my $foo : Foo(foo => 'bar'); should work. The parenthesis shouldn't be a single quote yielding a string ("annotation"), but provide arguments to the implementor.
  • A working way to store attribute metadata: After my $foo : Foo;, how do you know that $foo is decorated with Foo?
  • Better/working subroutine attributes: Subroutine attributes should be able to "redefine" the subroutine. (Currently, named subroutines are not fully defined when MODIFY_CODE_ATTRIBUTES is called.) No more broken INIT workarounds. Anonymous subroutine attributes have no chance at all to modify the subroutine (or return another subroutine, wrapping the original). my $foo = sub :Memoize { ... }; cannot be written.

Some two years ago I wrote a note about why I think the current implementation of attributes is broken. I also wrote about a set of modules that would solve some of the issues. While I believe it was a better implementation than the alternatives it didn't overcome the major obstacles as they require changes in the perl source. So I put that work back on the shelf. In real life this is a "redo and do it right" subject.

I still believe there's a lot of potential in attributes, if only implemented properly.

Update: see Namespaces and importing/exporting of attributes for a concrete idea of a possible improvement.

lodin


Comment on Re: what would you like to see in perl5.12? (attributes)
Select or Download Code
Replies are listed 'Best First'.
Re^2: what would you like to see in perl5.12? (attributes)
by TimToady (Parson) on Aug 21, 2007 at 17:39 UTC
    I still believe there's a lot of potential in attributes, if only implemented properly.
    First have a look at how properties and traits are completely unified with object attributes and roles/mixins in Perl 6, which pretty much covers all of your points without thinking of attributes as a separate facility. I have this crazy notion that "implemented properly" must be preceded by "designed properly", you see... :-)
      Right, but I don't know that Perl 5 has the luxury to do any better than "designed well enough".

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://633678]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (7)
As of 2015-07-31 06:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (274 votes), past polls