I finally broke through my little writer’s block phase (well, at least partially) to give you this two-week coverage post! Since it’s already a bit into the third consecutive week, I’m going to cover the 16th through the 28th of last month in this post.
In the first week, masak did a rakudo release and FROGGS did a Rakudo Star release with Parrot and MoarVM and the .msi files for Windows are available already as well.
A nice bit of news is that Rakudo-MoarVM now starts up about 15% faster than perl5 with Moose loaded. We need a different benchmark that puts us back in the second place so that we can improve some more 😉
Actually, on that topic, our performance is improving across the board, but let me break all the changes down in list form:
- Thanks to lizmat, Supply.lines and Supply.words now exist and the lines method/sub for reading from files or splitting strings now take an “eager” option that gives a little preview of how fast things can get once we have the Great List Refactor™. Other than that, you can also pass a “count” parameter to get the number of lines instead of the lines themselves. Str.words got a similar treatment.
- lizmat also made sure the output from a Proc::Async’s chars/bytes supplies will not give chunks out of order, which could sometimes happen before.
- Another neat little thing lizmat added was the beginning of a “dd” sub that dumps variables’ contents together with their name to stderr.
- There was an attempt to optimize the push method for iterables before, but it unfortunately led to a major performance regression in the variants we test in the benchmark suite. Jnthn now worked some more on that method and made it quite a bit faster than it was before.
- FROGGS has already done the same optimization to rakudo’s MATCH method that nqp already got a while ago, but even though the initial version of that got optimized by 25% with a later commit, the performance hasn’t caught up to the performance it was before yet. We should reach a pretty good performance improvement after we work out the problems.
- A big thing people have probably been waiting for is lax mode (not having to predeclare variables before using them). Thanks to FROGGS, you can explicitly enable/disable it with “use strict” or “no strict” (where “use strict” is still the default for scripts), but if you run your code on the commandline with the -e flag, you’ll have lax mode on by default.
- The nativecallglobal op that lets you access globals exposed by a dynamically loaded C library is now also available on the JVM, thanks FROGGS!
- Lots of spec test suite work has been put in by lizmat, dwarring, usev6, stmuk, TimToady, …
Here’s things in progress that have not really materialized yet:
- Jnthn and masak were in China for a dayjob gig and weren’t able to get much coding in, but what they did work on is thinking and discussing a lot about how escape analysis should be implemented on MoarVM.
- Another topic jnthn put some thought into is how to tackle the improvements to native values. Examples for this are being able to ++ a native int or having an “is rw” accessor for a native attribute in your classes or (which I’m really looking forward to) having native arrays in Perl 6 itself – which would also be a prerequisite to proper vectorization (think SSE) of hyper operations and such.
I would have loved to give you a quite thorough comparison of the performance of rakudo-parrot, rakudo-moar, rakudo-moar-jit and perl5 over more than a year, but across all the versions, all benchmarks seem to have missing data at least once, so the results ended up being “100 points every single release for every compiler, but no benchmarks were run”, which I thought wasn’t very insightful.
Anyway, I hope you’ll excuse the much belated and surprisingly short post; My energy levels seem to be below 0.009 recently 😦
Have a nice rest-of-week, esteemed readers, and see you next week!