As rumored, at FOSDEM this year, Larry Wall announced that Perl 6 will be available this Christmas. I followed the blog coverage (e.g. “Fosdem 2015: It’s Christmas!"), listened to Miyagawa’s podcast with Larry and was inspired to read the (unfortunately quite dated) guide “Perl 5 to Perl 6”.
Now that it’s 2015 and Christmas is coming, I decided to reflect again on Perl 6.
Stuff I’m excited about
The gradual typing should be a big win for optimization and types of computation that are unavoidably slow in Perl 5. If Perl 6 can overtake Perl 5 in speed at release (or soon after), that will be a strong reason for Perl 5 people to learn Perl 6.
Subroutine signatures and a proper, built-in OO system will be a relief. Even with Perl 5 gaining experimental signature support, it’s a crude patch over a gap, whereas Perl 6 has it from the start.
Lazy lists and evaluation look like a potential big win, since avoiding work is the best optimization.
The Unicode model looks to be one of the sanest and most well-integrated of any programming language I’ve seen.
The model for rationals (instead of floats) looks really groundbreaking, particularly if it turns out to be fast. Saving people from decimal math bugs with floating point representation seems like a win.
The “awesome” error reporting looks at least fun and likely will really help people learning the language.
Stuff that concerns me
The language is BIG. One of the appeals of Go to me is how small the language is. Perl 6 strikes me as the opposite philosophy. Look at the list of operators for an example. It will make it harder to master and puts a bigger context switching cost going between languages. I think it will also make idiomatic Perl 6 code harder to read for newbies and outsiders.
The documentation also seems to have significant gaps. E.g. at the time wrote this, the Input/Output docs page is completely empty. Plus, there have been so many changes to the project (and there are different backends with different feature support) that I’m never quite sure if any docs, example or presentation I see is actually still relevant.
One of my bigger areas of concern is the toolchain/ecosystem. I know that Perl 6 plans to allow loading different releases of a module at the same time, but this appear unimplemented still. The distribution of Perl 6 modules seems git repository based, with an extremely primitive way of specifying dependencies (lists of module names, without even version numbers).
While I’ve spoken about lessons of the toolchain to Perl 6 people at Perl QA hackathons in the past (and will again this year), I can’t figure out if this part of Perl 6 results from benign neglect or an active decision to discard decades of lessons learned from the Perl 5 CPAN.
The concurrency model seems sensible (see “Composable Concurrency in Perl 6”), but that paper dates from 2013 and I don’t know how much is still relevant. Certainly, I don’t hear a lot about concurrency and I don’t know if that’s because it’s a given and boring or because it’s not actually going to turn out to be a big deal or because it’s not done. Seeing “Synchronization” partially done and other concurrency ideas (like parallelized hyper operators and junction etc.) not yet implemented on the feature matrix is disconcerting.
It’s still not clear to me what the “killer feature” is. If Perl 6 can be a much faster Perl 5 (by absolute performance or better concurrency), then I think it will be familiar enough that we’ll see adoption by Perl 5 developers willing to trade the learning-curve for higher performance.
But I don’t see anything that would drive adoption by other communities or new developers. The sheer size and complexity will be daunting. By contrast, Go – a small, highly-opinionated language – has become wildly popular in certain niches. It solves several serious developer pain points that appeal to both static and dynamic language enthusiasts.
I think the Perl 6 team needs to find a few key examples of features of the language that really shine compared to other languages. Not “clever features” – features that get back to the mantra of making hard things possible in areas that programmers encounter every day.
It also needs much better documentation. Someone needs to start the equivalent of “Modern Perl”, with the goal of having a compact, tight reference for Perl 6 and aim to have it ready at least in draft form by Christmas.
I’ve added the Perl 6 weekly summary to my newsreader and look forward to seeing what happens during the rest of the year.
 If you haven’t heard the joke, Larry was fond of saying that Perl 6 would be out by Christmas, but not saying which Christmas. Now he’s actually said which Christmas.