2017.06 Fosdem After Math

This Weekend the FOSDEM conference happened in Brussels, Belgium. There was, like every time, a Perl table with lots of books, stickers, plush camels and camelias and other lovely stuff run by Liz and Wendy. There was also a Perl Programming Language Devroom where multiple Perl 6 related Talks took place.

You can get the video recordings from the fosdem server, but also have a look at the video status overview to see what videos still need to be processed.

Yours truly (timo this time) didn’t attend fosdem, but I heard good things about the conference from those Perl 6ers who did. And of course I watched a bit of the live stream. I enjoyed Dana Jacobsen talk about simple number theory in Perl 6. At the time of writing, the recording hasn’t been put up yet, though. (This is also where I took the inspiration for the title from).

Rakudo Progress

  • Jnthn fixed some trouble with handling connection errors from sockets, where an exception being thrown caused MoarVM to longjmp past a bunch of libuv frames that were supposed to clean up some stuff. Oops!
  • Zoffix Znet fixed the implementation of the native integer division op in MoarVM’s interpreter portion. Yours truly happened to implement it incorrectly very early on in MoarVM’s life and nobody ever checked that it handles numbers beyond 32bit correctly. Ouch!
  • Samantha McVey made MoarVM’s radix ops (i.e. parse a string that contains a number) a bunch faster by having it check for the unicode property “numeric type” rather than checking the general category.
  • Samantha McVey also made the East Asian Width property of unicode codepoints available.
  • Samantha McVey also did a bunch of work to make comparing/sorting unicode strings more featureful, by implementing Collations (four different levels that can individually be turned on and off) and a corresponding “coll” infix operator. There’s also a unicmp operator that isn’t configurable, but currently it’s hidden behind “use experimental :unicmp”.
  • MasterDuke17 made sure that not only nqp::radix_I would be accepted by the JIT, but that nqp::radix would also be considered for jitting.
  • There was some trouble with a very specific situation in Grammars would cause a bogus NFA to be generated that caused an out-of-bounds memory read when executed. Not only was the out-of-bounds read fixed (by giving an error much earlier) but the part of code that was responsible for creating the bogus NFA was also fixed to behave The Right Way™. Thanks, Jnthn!
  • pmurias did the usual assortment of work on nqp’s javascript backend, containing a bunch of test cases for nqp:: ops and QAST semantics, and a bunch of features required by rakudo on javascript.
  • lizmat landed a whole lot of array/list and iterator-related speedups:
    • @b = @a.map: { } about 10% faster
    • @b = do for @a { } about 20% faster
    • for @a { … } about 1% faster
    • my @b = @a.map: -> \a,\b { } about 15% faster
    • for @a -> \a, \b { } about 2% faster
    • gave List and Array their own tail method, where .tail is 8x as fast as [*-1], and .tail(N) is about 16x as fast as [*-N .. *-1]
    • Arrays that are already fully reified (i.e. there is no iterator to generate more values at the end any more) now have their own class of iterators that goes through the array a bunch faster, and also improves things like getting the number of elements.
  • Samantha McVey also did a few more nice things for performance, by giving the <ws> token a few improvements leading to about a 5% parse time improvement for our core setting, and also by making uniprop, unimatch, and unival up to 2x faster.
  • Zoffix Znet made Complex numbers smartmatch to Ranges, which only works if the imaginary part is close enough to 0 to not matter (i.e. artifacts of floating point arithmetic and such).
  • MasterDuke17 fixed a performance problem when you have “some constant string” x $a-very-big-constant-number in your code. It previously constant-folded the result of that operation, leading to a very big string being written out as a latin1 encoded buffer into the compilation result, just to immediately be read back out again when compile time transitioned into runtime.
  • MasterDuke17 also replaced a few occurrences of [*-1] in Rakudo’s source with the much faster .tail() method.
  • Thanks to Zoffix Znet, the REPL will now no longer complain at you and crash when some command you run evaluates to a Mu.
  • AlexDaniel improved the error you’d get when you write “return” instead of “returns” in a function signature.
  • Jonathan Stowe fixed a problem where multiple installed binaries in a CompUnitRepo could give you an older version rather than the latest one.
  • Larry Wall removed the dynamic variable $*ACTIONS that was used to hold the action class that’s being used to parse with a given grammar. It is now held as an attribute on the Cursor instead. This reduces the pressure on the already strained Dynamic Variable Cache a little bit.

Ecosystem Changes

Not very much happened to Perl 6′ module ecosystem last week:

  •  The Net::XMPP module was taken over by kalkin, who is engaged in the XMPP community.
  • nobodyinperson started working on a Fortran::Grammar.

Hacker News

Just about 10 hours ago, a topic entitled “Ask HN: Do you use it, how do you like it, what do you do with it?”, which already got 156 points and 129 comments on Hacker News. It’s well worth a read!

Signing Off

That’s my report for the last week. Liz is currently taking a vacation, so I’ve taken over for this week, and will also write the report next week. See you then!

2017.05 A Week Of Blue Mondays

It could be the cold speaking, but somehow the past week felt a bit silent on the Perl 6 development front. Looking at the traffic on #perl6, the past week definitely looks lighter than the weeks before. But quite a lot of work was done nonetheless!

Rakudo Star 2017.01

Steve Mynott has just released Rakudo Star 2017.01. If you don’t want to be on the bleeding edge of Rakudo Perl 6 development, but still want to get all of the nice improvements in speed and functionality, that’s the distribution you should try!

Think Perl 6

O’Reilly has formally announced the Perl 6 book by Laurent Rosenfeld: Think Perl 6 – How To Think Like A Computer Scientist.

If you want to learn how to program and think like a computer scientist, this practical guide will get you started on your programming journey with Perl 6, the new version of the popular programming language. Ideal for beginners, Think Perl 6 contains numerous exercises with multiple solutions and a lot of code examples. Even experienced programmers will learn a lot from this book, especially those familiar with Perl 5. It’s designed for teaching computer science to beginners in universities.

There should be early version ebooks available. If they aren’t yet, please try again in a few days!

6.d.PREVIEW available

Based on the work of Stefan Seifert almost a year ago, we now finally have a use v6.d.PREVIEW with actual new / incompatible features. The most important of these so far has been the adding of support for non-blocking await / react by Jonathan Worthington. In use v6.c, an await or a react would block the thread in which it occurred, making the system hang if the number of active awaits would get near the maximum number of threads available. If you do use v6.d.PREVIEW, this is no longer the case. But this also implies that one can no longer be sure that code is actually continued on the same OS thread after an await or react, which may cause some problems e.g. specifically when interfacing with external libraries with NativeCall.

Other Core developments

  • Zoffix Znet fixed quite some bugs again, such as colonpair-extended names on subroutines (e.g. sub foo:bar<ber>), bugs related to IO::Handle.lines and the .= initialization with types that have a :: in the name (such as my Foo::Bar $a .= new).
  • Samantha McVey fixed some bugs and added support for matching on Unicode properties, such as say "a" ~~ /<:Letter>/. She also added the last of the Unicode named sequences, which are in addition to the Emoji sequences that had been added earlier. Getting codepoints or sequences by name is also now case-insensitive, "\c[solidus] \c[Grinning Face]"; # / 😀. These functionalities are now documented.
  • Stefan Seifert made sure that all CompUnit::PrecompilationRepository implementations have a try-load functionality.
  • Christian Bartolomäus unbroke the JVM-build that got broken due to the v6.d.PREVIEW work.
  • TimToady made parsing in general about 2 percent faster, making the parsing of the setting a second faster.
  • Elizabeth Mattijsen worked on making a lot of iterator based features faster and test coverage of iterators more complete.
  • And, as usual, a flock of other fixes and improvements!

Blog Posts

Meanwhile on StackOverflow

Ecosystem Additions

A quiet week here as well, apart from Jonathan Stowe++ adopting a number of orphaned distributions.

Winding Down

The coming two issues of the Perl 6 Weekly will be brought to you by Timo Paulssen (again). After the FOSDEM next weekend, yours truly will be enjoying some quality R&R in the Gulf of Mexico and will be mostly offline for the duration. Hope the cold I have now will lift itself before then 🙂

2017.04 Welcome!

The Rakudo core development team has two new members! Please welcome Nick Logan (aka ugexe) and Christian Bartolomäus (aka bartolin). Followers of the development of Rakudo Perl 6 will recognize these names: they have been providers of many Pull Requests to the various Perl 6 related repositories for many years already. Here’s to them hoping they will continue their excellent work!

Rakudo 2017.01 Released

Zoffix Znet and his trusty bots have released yet another version of the Rakudo Perl 6 Compiler (Hacker News comments). Steve Mynott has been following closely in his footsteps and already put up a Rakudo Star 2017.01 Release Candidate. Please check them out if you can!

Grant Proposal

Zoffix Znet has made a Grant Proposal: Standardization, Test Coverage, and Documentation of Perl 6 I/O Routines. Having been down the I/O rabbit hole myself, I can only wish him all the support he can get, be it moral, technical or financial. So please let the TPF know what you think about the grant proposal!

Blog Posts

Core Developments

  • Incompatible Change: assigning Empty (aka the empty slip()) to a shaped array will now throw an exception.
    my @a[10];
    @a = @b;     # potentially empty array ok
    @a = Empty;  # always a mistake
    # Cannot Empty a shaped array as its size is fixed
  • New Feature: You can now call .skip(N) on any Seq or Iterable to skip the indicated number of values, similar to .head(N) (giving you only the first N values) or .tail(N) (giving you only the last N values). The reactive counterpart on Supply was also created.
  • New Feature: You can now call .batch(N) on any Seq or Iterable to batch the given number of values into a List (as a single value). The reactive counterpart on Supply already existed.
  • New Feature: You can now call next in whenever blocks (implemented by Timo Paulssen).
  • Zoffix Znet fixed various issues with cmp and eqv with edge cases of Num and Real values such as NaN and signed zeroes. He also fixed an issue with the handling of empty Slips in xx.
  • Daniel Green fixed an issue with calling lines() when STDIN has already been read completely. He also made postfix ++ and -- about 5% faster.
  • Samantha McVey has been mainly busy in the background. The currently most visible work is making htmlify.p6 (the script that takes all of the pod documentation to turn it into HTML) about 25% faster.
  • Elizabeth Mattijsen made .rotor between 15x and 20x faster, permutations() 2x to 24x faster, List/Array.fmt about 60x faster, List/Array.join about 20% faster.
  • And many more bugfixes and other improvements!

Meanwhile on Twitter

Moritz Lenz informs us that the Perl 6 News Feed on Twitter is doing very well. In the past week, my attention was drawn to the following tweets:

Meanwhile on StackOverflow

Ecosystem Additions

Not so many this week 😦

Winding Down

Again, quite some tea was necessary. Don’t forget to come to the Perl DevRoom at FOSDEM on 4 and 5 February! Hope to see you there! Please check in again next week.

2017.03 🙆‍♀️ (woman gesturing OK)

In the past week, Samantha McVey has landed emoji support in Rakudo Perl 6 on the MoarVM backend. The code of the title of this week:

say "\c[woman gesturing OK] (woman gesturing OK)";

If you see some strange characters in the title before the parenthesis open, your system doesn’t support Unicode 9 emojis yet. Oh, and should you wonder, all emojis are still only 1 character, thanks to NFG!

say "\c[woman gesturing OK]".chars;    # 1

Javascript Backend Milestone

Paweł Murias has reached another milestone in the development of the Javascript backend for Rakudo Perl 6. Again, a step closer to being able to run Perl 6 code in the browser. And for those of you remembering when Jonathan Worthington reached a similar milestone for the JVM backend: from here on out, it’s going to be a lot easier. I can only wish more power to Paweł!

Perl 6 – The Musical

JJ Merelo has made his latest Perl 6 project public. The introduction:

This book is about learning programming using a promising, and almost completely new, language: Perl 6. But it is only Perl 6 specific in a minority of the content. Most chapters that deal with Perl 6 could be rewritten using any other language, preferably a new, cool language such as Go or Rust. I, or someone, might do it some day. But for the time being, let us be content with Perl 6. Which is also new and cool.

He, and his family, will also talk about it at FOSDEM.

Blog Posts

Meanwhile on FaceBook

I’m adding strong typing to Perl6::Parser in order to help catch some stubborn bugs, and noticing runtimes *apparently* decreasing as I add more Array[Perl6::Element] return types. Yay team! ~10 seconds off Perl6::Parser‘s test suite. Incidentally I’m going to add some ‘find’ methods and start threading elements to have parents and siblings as well as children to make the structure easier to walk. And it pays off within 20 minutes of adding the last ‘returns‘ clauses by uncovering a hidden test-suite bug.
Jeffrey Goff

Meanwhile on StackOverflow

People are starting to ask more and more Perl 6 questions (and get answers!). The past week saw:

Core Developments

  • Incompatible change: previously, so called non-associative operators (such as cmp) could be used with more than two iterables, like so:
    @a Xcmp @b Xcmp @c

    Since this does not make sense, such code will now die: you can now only use 2 iterables with these types of operators.

  • Zoffix Znet tweaked the Geth bot in such a way that it will automatically list all of the associated NQP and MoarVM commits whenever an NQP or MoarVM version bump is done. This will help yours truly with reporting on core developments a lot! Zoffix Znet also fixed an issue with Tap::Harness in the way full file skips were (not) handled.
  • Jonathan Worthington fixed various race conditions with inlining of code in MoarVM and a case of unwanted Garbage Collection in spesh. He also made memory management of call frames much more efficient, resulting in a reduction of memory usage by 10% and making CORE.setting build times being 20% shorter. Finally, he fixed a bug in >>. dispatch (which was probably a main source of instability when running make spectest with a Perl 6 harness) and improved compilation of ||=, //= and &&=.
  • Samantha McVey removed several Unicode 1 names and added Unicode Name Aliases. And of course added emoji support 🦋.
  • Daniel Green made groups in <before> and <after> non-capturing.
  • Paweł Murias reduced the creation of unnecessary containers by reusing them better, only needing half as many as before: this mostly affects the JVM and Javascript backends.
  • Elizabeth Mattijsen made Z with a specific operator (e.g. like zip(:with(&[~]) aka Z~) about 12x faster, X (cross, either with or without a specific operator) about 7x faster, roundrobin() about 4x faster, combinations() about 2x and permutations() about 15x faster.
  • And many other improvements and bug fixes, at about 120 commits the past week.

Ecosystem Additions

Winding Down

This needed quite a lot of tea. See you next week!

2017.02 Dogfooding and Powerbotting

Seems everybody likes robots nowadays. The #perl6 channels on irc.freenode.org have quite a few of them. One of the oldest bots, dalek (written in Perl 5) announces commits to various repositories on the channel. Well, announced, because it has been decommissioned this week. A new, shiny bot called Geth (written in Perl 6) has replaced it (thanks to Zoffix Znet).

Meanwhile, the bisectable bot seems to have been inspirational to the Rust community. Too bad that post was not from a Rust developer.

If you’re interested in knowing what bots frequent the #perl6 channels, finding out about them is a bit troublesome. They’re not all officially documented, but there is a list that appears to be maintained. Maybe next week I can post a proper URL 🙂 .

Sparrowdo Blog

Alexey Melezhik announced the start of a blog about Sparrowdo, the lightweight and very flexible configuration management system written on Perl 6. It’s good to see such a tool being in active development!


In a few weeks it’s FOSDEM time again: on 4 and 5 February, it will all be happening in Brussels, Belgium. There will be a Perl DevRoom on Sunday. With quite a few Perl 6 related presentations:

Of course, there will also be a Perl booth, where you can get your tuits, stickers, buttons, leaflets and other swag for free. And stuffed camels, stuffed Camelias and books (even a Perl 6 book) at special FOSDEM prices!


It should also be noted that Jeffrey Goff will be given a half-day Perl 6 tutorial titled “Fundamentals of Perl 6 – From Zero to Scripting”. Too bad that’s the only Perl element at OSCON (8-11 May). But one can say we’re working on the future!

The Perl Conference in DC

The Perl Conference in DC (18-23 June) (formerly known as YAPC::NA) has presented its Call for Presentations. So please start submitting your Perl 6 presentations! 🙂

Meanwhile on FaceBook

The Perl 6 FaceBook Group has grown to 360 members. In the past week, a few people posted feedback as to how Rakudo Perl 6 has become faster and faster. Some quotes:

Over the last week Perl6::Parser‘s test suite magically sped up from 120 seconds total to 100 seconds total, and all I did was rebuild perl6. (cusr time went up a bit as did csys, but that’s another 16% speed increase in a matter of days! Good work to the #perl6 core team!
Jeffrey Goff

Found some random Perl 6 toy-code I wrote a few years ago, at the time when no compiler existed that would compile it. I forget what the issue was, but it was plum broken. Wouldn’t ya know? It worked first time with Rakudo this morning. That says something mighty fine about the development & developers of Perl6 and Rakudo. Nice work, all.
Paul Bennett

I switched to Wunderlist for managing my to do lists last month. But it didn’t quite handle recurring tasks the ways I wanted to. Good news: it has a public API. Better news: there is a Python library to work with it, and it works GREAT with Perl 6’s Inline::Python. Basically there are six lines of straightforward boilerplate at the beginning of my code, and after that you can call into the Python library almost exactly like it was native Perl 6.
Solomon Foster

That’s the type of stuff we really like to hear!

Meanwhile on Twitter

The Perl 6 News Feed on Twitter now has more than 120 followers, and has seen quite a lot of tweets. If you really want to be at the cutting edge of Perl 6 news, that’s a way to get it!

Meanwhile on GitHub

Rakudo Perl 6 was added to the Programming Languages Showcase. It’s always good to get a little more exposure!

Perl Foundation Grants

If you’re interested to get a grant from The Perl Foundation to do some Perl 6 development work you would otherwise not be able to do, you have until 15 January to send in your proposal!

Core Developments

  • Alex-Daniel Princess has been going over all calls to the camelia bot on the #perl6 channel (which allows you to execute any Perl 6 code), and used the strings to find out about problems and regressions in Rakudo Perl 6. And he has found quite a few of those, which are now all registered as RT tickets (with quite a few of them fixed already).
  • Samantha McVey continued working on Unicode 9.0 support, such as secondary/tertiary collation and emoji support. She also made decoding UTF-8 14% faster.
  • Daniel Green worked on allowed Nd numeric characters in regex backreferences and ${} special variables.
  • Stefan Seifert fixed the build of the JVM backend if there was an older build available (which would interfere).
  • Jonathan Worthington fixed a number of issues, including use of nextsame in conjunction with multi subs with where clauses, and the spooky issue reported as an OO::Monitors bug (which uses callsame) where occasionally the callsame would not, in fact, call anything.
  • Zoffix Znet fixed TAP::Harness choking on single backslashes in descriptions. He also implemented .clone for SetHash, BagHash and MixHash.
  • Elizabeth Mattijsen started working on optimizing meta-operators. So far, the bare Z operator is now 5x faster. She fixed .sort on native arrays and sped up sorting 0,1,2 element native arrays with 30%. She also gave Seq it’s own .join method, making structures such as @a.map(*.Str).join 30% faster.
  • And of course many more fixes and improvements, clocking in at about 120 commits in the past week.

Blog Posts

Ecosystem Additions

A nice catch again!

Winding Down

Phew! If this is any indication of the amount of news every week in 2017, I think I will need quite a lot more tea! Check in again next week to see if I did need more tea 🙂

2017.01 Glancing At A Prime Time

Yes, it’s going to be a prime year this year.

say "Prime Year" if 2017.is-prime;

In other ways, Perl 6 is also ready for the future!

say "News" if True but False;

Leaving it to the reader to decide which way that will go 😏

Perl 6 at a Glance

Andrew Shitov has beaten everybody with the first (modern) Perl 6 book on the market. So that will make at least four generic Perl 6 books this year. Can’t wait to actually have them all in my hands!

Samantha McVey

It is an honour to welcome our latest Perl 6 Core Developer. Looking at her track record so far, one knows that she will do great things in the coming years. Meanwhile, I will try to Keep Calm and Continue Programming.

Core Developments

  • Samantha McVey continued her outstanding work on Unicode support in MoarVM, which we should see in Perl 6 before long. She implemented the Unicode Collation Algorithm in MoarVM/NQP. She also improved Emoji support as well as handling of many Unicode properties, such as the Bidi_Mirroring_Glyph property.
  • Jonathan Worthington re-implemented the utf8-c8 encoding (the one that tries to interpret the input as UTF-8, but starts creating synthetic codepoints for those byte-sequences that aren’t UTF-8), making sure it will never segfault anymore and will always roundtrip regardless of which garbage is thrown at it. He also made sure that /:ignoremark \"/ now actually works.
  • Douglas Jenkins did a lot of work on optimizing IO::Socket::INET.
  • Christian Bartolomäus again fixed various issues on the JVM backend.
  • Zoffix Znet worked a lot on combinations, fixing consistency in handling of edge cases. He also worked on .lines and its handling of limits and the handling of Rat with 0 as the denominator. And many other smaller and bigger things.
  • Daniel Green worked on the Cursor internals to make them a bit faster: since this affects all regex matching / grammar parsing, we gladly take any improvement in that area.
  • Elizabeth Mattijsen worked a bit more on sorting, making sorting of 0, 1 and 2 element lists up to 50% faster.
  • And many other smaller things, with about 150 commits between the MoarVM, nqp and Rakudo repositories.

Blog Posts

Ecosystem Additions

Quite a nice bunch again this week.

Winding Down

One could say we’re off to a great start of the New Year! It also appears that everybody in the Perl 6 community still has the same number of fingers and eyes as before all of the New Year’s Eve fireworks. Please check in again next week for your weekly dose of Perl 6 News!

2016.52 Twittering Towards The End…

…of the year, of course! No (new) Apocalypse planned or anything like that. No, it feels more like there’s a new marketing push gaining strength. For news about the development of Learning Perl 6, you can now follow a dedicated Twitter page: @LearningPerl6, as brian d foy announced recently. Meanwhile, the Perl 6 Facebook Group is now at 340 members. And is still looking for new members!

There hasn’t been much news on Twitter about Perl 6 the past years. The reasons for that are manyfold. But Moritz Lenz has taken it upon him to start a Perl 6 News Feed: @perl6org. If you have anything you want to say on Twitter, contact him about it. Even better, if you would like to help him by tweeting stuff directly on that account, contact him as well. Thank you in advance!


The final bunch of the Perl 6 Advent Calendar posts:

Please check the Perl 6 Advent Calendar again on the 1st of December, 2017!

Other Blog Posts

Core Developments

  • Samantha McVey continued doing a lot of work on the Perl 6 highlighter, specifically for the docs. Previously the docs were using the Python Pygments highlighter to highlight Perl 6 code. Now it uses Github’s Highlights, which is the same engine Atom and Github use to highlight files. While Github does not yet have the latest and greatest version of atom-language-perl6, the Pull Request updating it has been merged. We only need to wait for the bump of the version of Linguist. She also did a lot of work on Unicode properties, which unfortunately hasn’t come to full fruition just yet.
  • Jonathan Worthington fixed an issue that would occur when you were recursing very deeply in code that was using a lot of native arrays. He also fixed an error in the error reporting of exceptions thrown in asynchronous code.
  • Daniel Green made IO::Handle.lines and IO::ArgFiles.lines 10% faster. Doesn’t look like a lot, but this being a very basic functionality, we take all the improvement we can get! And this was on top of a 40% improvement he did on the logic handling perl6 -ne!
  • After some discussion on #perl6, Zoffix Znet added infix + and infix - for DateTime and Duration. He also made sure that parse-base can handle strings like -.5. And, as usual, he also fixed many other smaller issues, did quite a few awesomisations and was generally busy.
  • Nick Logan fixed a problem in the handling of bin/resources when installing modules.
  • Elizabeth Mattijsen worked a lot on the sort internals, making sort between 4x (generic List/Array) to 12x faster (for native arrays) and much more memory efficient. She also worked on making Str.split(<a b c>) about 4x faster, which made the test-t canary 15% faster (going from 6.3 to 5.3 seconds).

Not bad for a week in the Holiday Season!

Ecosystem Additions

No ecosystem additions this week. Too bad. But hardly surprising this time of year.

Winding down 2016

This is the last post of the Perl 6 Weekly this year. Only a few issues were missed at the beginning of the year, when everybody was recovering from the frenzy of getting the first official release of Perl 6 into the world. Pretty sure we won’t be missing any issue in 2017! So, until then: be careful with the fireworks, keep all of your fingers and eyes, and see you again next year!