Wow, the last week certainly flew past quickly. At least that’s how it feels to me. Or perhaps that’s just how cryo chambers work? Anyway, the Perl 6 IRC channel has been really, really busy and there’s been a whole lot of commits zipping past. Let’s see what’s in it for our users:

Multi methods in roles are now a whole lot more useful, as you can put multiple candidates with an implementation of { … } in a role to force classes that are supposed to do the role to implement them. (jnthn)

EVAL with non-literal strings is now loudly complained about unless you make your intention extremely clear by using the pragma “MONKEY-SEE-NO-EVAL” (to go with other pragmas like MONKEY-TYPING, MONKEY-GUTS (which used to be called “use nqp”), …). (TimToady)

Dependencies of precompiled modules are now directly found rather than searched for in the whole precompilation database, which causes a dramatic speed-up when a module with multiple dependencies are loaded. (nine)

Supply blocks now get a CLOSE phaser, which will fire when a tap is closed or the supply otherwise completes. (jnthn)

The annoying warning about using an undefined %ENV in string context is fixed! (ugexe)

NativeCall now understands an extra version parameter to its “is native” trait, which gets translated to per-platform naming. (Skarsnik)

Newline handling was changed again. Here’s jnthn‘s commit message for the change: Now,

always means \x0A by default (the newline pragma currently is still available, pending a decision from TimToady++ on its future). We translate \r

on file/pipe input to

, and

to \r

on output. We don't perform any such translation on sockets, nor on explict .encode and .decode calls (providing an escape hatch). \r

remains a single grapheme, though you're now much less likely to run in to one. This brings us in line with how the problem has commonly been tackled in other languages; logical

turned out not to work out so well in real life, even if avoiding the cost of boundary translation was nice. Note that we translate at grapheme, not codepoint, level, so a \r

will never accidentally become \r\r

(as can happen in some translation layers).

We now have much more support for sized as well as signed/unsigned ints. That means you can now do my int8 $foo = -1; my uint8 $bar = -1; and get -1 and 255 respectively. 32bit floats are now also a thing with “num32”. Different native ints used to only make a difference when using NativeCall or in Buf and such. (jnthn)

Rakudo now understands × and ÷ operators for multiplication and division respectively. Thus, a WhateverCode that multiplies its two arguments can now be * × * instead of * * *. Also, if you accidentally paste a unicode “MINUS SIGN” instead of the commonly used “HYPHEN-MINUS” (any TeX users in the crowd tonight?), it’ll still give you the subtraction operator. (TimToady)

Also, I think I’ve neglected to mention this, but Rakudo has supported unicodey numbers (only as single digits) for a while now (say ৪ + ૪ outputs “8”). On top of that, numeral unicode superscripts are also supported now (even with more than one digit!). So if you’re so inclined, you can write say 5⁸⁸ == 5 ** 88 and it’ll give “True”.

pre-increment and pre-decrement are now a bit faster yet. (TimToady)

Getting the .elems of a .combinations iterator is now blazing fast (grondilu)

IO::Handle::Seek now expects SeekFromBeginning, SeekFromEnd, or SeekFromCurrent as its whence argument. (lizmat)

We have a bool type based on stdbool.h now! (FROGGS)

X, Z, and roundrobin now understand itemization (this also fixes the metaop versions of X and Z – not only X, and Z,). (jnthn)

The xx operator now no longer gets rid of structure. (jnthn)

The JS backend of NQP now implements a whole bunch of mathematical operators. This includes a whole lot of tests for these operators. (pmurias)

MoarVM no longer throws an exception when trying to delete non-existing files. (cygx)

Thanks to ilmari, MoarVM now accesses unaligned values much less often.

UDP reads with length 0 (which libuv sometimes uses to signal a specific states) now no longer trip up MoarVM (hoelzro)

That’s all the interesting changes that immediately stood out to me from a cursory glance over the changelog.

More Adventing

Of course the advent calender didn’t sleep during the last 7 days:

(Yup, that’s 8. I’m giving you a little extra bonus. Because I like my viewers so much!)

Ecosystem catch-up

Since I forgot it last week, here’s the ecosystem additions of two weeks:

Lingua::Conjunction by Zoffix Znet

Minecraft::Tools by flussence

Number::Denominate by Zoffix Znet

Audio::Silan by jonathanstowe

Math::Matrix by pierre-vigier

Discord by Skarsnik

Bamboo, a dependency manager/bundler by sergot

MQTT::Client by Juerd

Lingua::EN::Numbers::Cardinal by thundergnat

Proc::Screen by skids

Not bad for “before the release”, eh? 🙂

Anyway, I’m pretty tired and it’s pretty late. That’s why I’ll end this post here. Thank you for reading! Be sure to follow Perl 6-related news channels later this week when Christmas hits and release-related things start happening!