2017.08 Evolving Slangs

TimToady has been working on providing a more stable API for handling sub languages, aka slangs, such as Slang::Piersing (allowing identifier names such as $foo? and $bar!) and Slang::Tuxic (uncuddle parens open from sub/method name when calling them). This is all part of work making parsing of grammars faster, which so far has been able to get a few seconds off of building the setting. It is also making it possible to implement new grammar related features in the future. And it should help keeping people, wanting to work on this piece of the Rakudo internals, sane.

Rakudo 2017.02 Compiler Release

Zoffix Znet and his trusty bots have done it again: this month’s Rakudo Compiler release, aka Rakudo 2017.02 is out now!

Blog Posts

Other Core Developments

  • Jonathan Worthington fixed a bug in Supplier::Preserving which would occasionally mix up the order of the emitted values. He also fixed a bug when using a grammar from several different threads.
  • Zoffix Znet made sure that flat() will pass on the is-lazy value of an Iterable if that is flattened.
  • Nick Logan and Stefan Seifert solved several issues regarding installing and loading of identically named modules, but with different auth/ver and/or being from different distributions.

Meanwhile on StackOverflow

Meanwhile on Twitter

The perl6org Twitter newsfeed now has more than 200 followers. Tweets not otherwise mentioned in the Perl 6 Weekly are:

Winding Down

Still a little jetlagged. Hope yours truly did not make too many mistakes in this episode of the Perl 6 Weekly Saga! Be sure to tune in next week, when yours truly hopes to have returned to her normal level of sanity.

2017.07 More Than One Zero

Ahoy-hoy! This week we’ve got a few nice fixes lined up for y’all:

  • the abs_n op in MoarVM now correctly turns -0e0 into 0e0 (Zoffix Znet)
  • closing an async socket now can’t cause the VM to crash. (jnthn)
  • fix a numeric overflow that could prevent a full collection from occurring (dogbert17)
  • on windows, MoarVM now correctly accepts unicode command line arguments and environment variables (thanks, nanis!)
  • the string repeat op will no longer cause the VM to panic if GC kicks in at just the right moment (samcv++, dogbert17++, and jnthn++)
  • smart matching char ranges against char ranges now works (MasterDuke17, Zoffix++)
  • a whole bunch of data races were fixed in precompilation-related code in rakudo (jnthn++)
  • smart matching a Str against a Numeric now no longer throws an exception if the Str can’t be coerced to a Numeric (Zoffix++)
  • the iterator used for implementing the rotor method used to violate the iterator protocol by pulling more values out after IterationEnd had been signalled, leading to strange exception messages (Zoffix++)
  • rational numbers used to normalize inconsistently between printing out and getting the numerator and denominator pulled out of ’em (Zoffix++)
  • a whole lot of useless coercions from int to num happened during even compiling the empty program in perl6. that number has been drastically reduced by MasterDuke17++
  • lizmat++ made Int.WHICH a bunch faster, which should make object hashes with Int keys in them faster, too.
  • I drafted a little op for MoarVM that’ll let you grab some statistics about the inner state of MoarVM. I’m intending to give info that might be interesting to have in a monitoring tool, for example if you’re running a server or web app. I’d love to hear some feedback on what pieces of data you might be interested in!

Ecosystem, Docs, and Bloggage

That’s it for now! Tune in again next week for more 🙂

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!

FOSDEM

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!

OSCON

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 🙂