ETOOBUSY 🚀 minimal blogging for the impatient
Raku cglib: a priority queue
The first implementation in cglib-raku: PriorityQueue.rakumod!
My first stab at adding something to cglib-raku was porting the PriorityQueue.pm Perl module.
The porting in PriorityQueue.rakumod is pretty much a translation, although of course the two languages are different and even more so in their handling of OO coding.
I have to admit that getting used to the Raku way of doing OO was easy, thanks to Moose (as a movement) and to Moo (which I like to use, although not in cglib-perl).
The original PriorityQueue.pm was coded with bare bones OO in
Perl: keeping stuff in an anonymous hash and
Admittedly, this and my goal to be as compact as possible (optimizing
for cut-and-paste in CodinGame!) make the Perl implementation
quite difficult to read, but this is no more the case in Raku in
I liked the possibility to define and use private methods instead of relying upon the convention to pre-pend these methods with an underscore, as well as being able to easily avoid some of the “Perl line noise” constructs. Example:
# Perl $self->_adjust($k) if $k <= $#$is; # Raku self!adjust($k) if $k <= @!items.end;
Although I generally like the huffmanization that happened in
Perl, I have to admit that I like using
@array.end a bit better
(easier on the eyes I guess). Still, a matter of taste I guess.
Using twigils is a bit overwhelming, and in the first pass of the porting I easily forgot about one half of them. All in all, anyway, I think they make sense and I hope I’ll get up to speed with them shortly.
All in all, I liked doing the porting and using the batteries included, language provided OO machinery was really refreshing.
At this point, I really hope that Corinna (well, whatever it will
evolve into anyway) will make its way into the Perl core. I can
@ISA are a genius hack that allowed introducing
an effective OO “style” with very little, but I also think that a
contemporary general-purpose language should include production-grade
OO as a first-class citizen.