Unless the compile-time attributes say that there's nothing funny about it, that even if tied everything leading up to the last deref is "pure" or idempotent.
I see the opcode structure on the Parrot takes multiple keys directly. Does that help matters?
So, simply by using a temporary (either named or topicalized), I'm saying explicitly that the subexpression is only to be evaluated once.
In Perl 6 there is the // or err operator that will take care of some of this, but no native way to handle exists though maybe undef. | [reply] [d/l] [select] |
Unless the compile-time attributes say that there's nothing funny about it, that even if tied everything leading up to the last deref is "pure" or idempotent.
Yep. If you tell us it's OK, we can do it. Whether we will or not is an open question--writing optimzers isn't easy, and it'll likely be a while before parrot gets one anywhere near as good as, say, DEC^WCompaq^WHP's or IBM's C compiler.
I see the opcode structure on the Parrot takes multiple keys directly. Does that help matters?
Nah. Makes it even worse. The reason for the multidimensional key structure is so that a tied variable could potentially consume multiple keys at once, as it knows you're looking for a two or three or four level deep thing, so there's even less information (potentially) on how things work. :)
| [reply] |