Notation, and the 'business case' for Perl 6
A few days before Christmas, I was sitting in the car with my father. I decided to try to explain why I'm spending time doing Perl 6.
I compared the evolution of programming languages with the evolution of mathematical notation. In maths, it was tricky to imagine the concept of zero before it was formalized down to a number; the idea of derivatives was tossed around in vague forms before Newton and Leibniz made notations for it; we slowly but surely got a standard way of saying "is equal to". And so on.
I was just about to connect this back to how each new programming language can be seen as a contribution to an ongoing, open debate about notation within the programming world, one that has only been going on in earnest for half a century or so. But I never got that far, because my father interrupted me and asked what the business case is for Perl 6.
I was half stumped, half amused by this interjection. I didn't have a good answer for him, besides trying to explain FOSS and the fact that we're not developing Perl 6 with the expectation that someone will buy it from us. But I still felt he had a point; so, earlier today, I took the question to #perl6
, and got a set of good replies and musings by Su-Shee++, moritz++, vorner++ and mdxi++. If you have time, do read it.
I'll have to give the 'business case' train-of-thought a lot more time to mature before I can say anything coherent about it myself. But I'd like to say a bit more about notations.
Perl 6 isn't truly revolutionary in a lot of respects. It's mostly lots and lots of minor improvements. (The exception being, I think, things surrounding grammars. Those are truly revolutionary.)
What Perl 6 does do, is provide a 'strangely consistent' notation where a lot of thoughts, with practice, are easy to express. This is very much in the Perl spirit, and the main reason (according to me) to still call Perl 6 a language in the Perl family.
The notational convenience really consists of a thousand little things, but here are a few haphazardly chosen examples:
- The prefix symbols
?
,+
and~
have been co-opted to signify conversion to the 'contexts'Bool
,Num
andStr
, respectively. This parallels their use in binary (infix) operators specific to those contexts, such as+
,~
,?&
,+&
, and~&
- The three short and common verbs
is
,has
anddoes
all do useful work in the OO system. Not only that, but they are a good fit for what they do, and summarize both established and modern OO research. - Some syntactic/semantic features are re-used where you least expect it, reducing the total number of independent components in the language. The left-hand side of a list assignment uses the same signature mechanism as do routines. (I.e. the
(Bool $a, Int $b, Str $c)
inmy **(Bool $a, Int $b, Str $c)** = True, 42, 'foo';
is the same kind of beast as insub foo**(Bool $a, Int $b, Str $c)** { ... }
.) Smartmatching with~~
is implicitly re-used inwhen
expressions, and thegiven
/when
construct is re-used as theCATCH
exception handling mechanism. And so on.
It's things like these that I think make Perl 6 a convenient, attractive notation for thinking about programming. Seeing that notation come alive, and seeing people use it in cool new ways for amazing ends, is the main reason I spend time helping with Perl 6.