There's at least one thing to look forward to in Perl 6,
junctions.
Junctions provide a simple interface for set-like operations, typically with
the functions all, any, none, and one. For
some time now we've had this functionality available to us in Perl 5 thanks to
the Mad Aussie's
Quantum::Superpositions;
in fact it was featured on the advent calendar way back in
2001. Alas, this wonderful tool
came with a very hefty performance hit. In my first use of the module, I ended
up switching to a grep and gaining a ten+fold increase in speed.
Enter Perl6::Junction,
note the lack of plural—I doubt I'm the only one who'll find themselves
repeatedly typing Perl6::Junctions. Junction might be thought of as
Superpositions Lite: it lacks several features but is significantly faster
1. In a recent
thread
on Boston.PM we determined that Junctions is about 50x faster than Quantum
2
ANY:
s/iter QS P6 <= Note this is s/iter instead of Rate (iter/s)
QS 1.20 -- -98% Rate ~ 0.83/s
P6 2.10e-002 5611% -- Rate ~ 47.6/s
ALL:
Rate QS P6
QS 1.46/s -- -98%
P6 79.2/s 5337% --
One of the notably missing features of Perl::Junction 1.1 is that it neither
exports by default nor does it provides an :all tag. It also lacks
stringification, or the ability to view eigenstates.
1. The performance difference between Junction and
Superpositions are due to implementation details rather than feature set e.g;
Junction uses short-circuiting; internally Superpositions is object oriented,
uses multimethods and an occasional eval.
2. Activestate 813 on XP.
See Also
For more generic set operations see
Set::Array,
Set::Bag,
Set::IntRange,
Set::IntSpan,
Set::Scalar