The Perl 6 design team met by phone on 18 March 2009. Larry, Allison, Jerry, Nicholas, Will, and chromatic attended.
Allison:
- spent a large part of the past week preparing for Parrot 1.0
- making lots of test packages for Ubuntu and Debian
- lots of spit and polish finishes before the release
- I didn't warn our admins that we'd get a traffic spike
- but I didn't expect that either, so I'm pleasantly surprised
- will work on the Pynie implementation in the next week
- partly because I'm going to Pycon
c:
- some bugfixes for Parrot
- some longer term planning
- will write up some thoughts on future Parrot architecture in the near future
- otherwise trying to finish the Modern Perl book
Jerry:
- helped get Parrot 1.0 out
- a lot of people chipped in
- Allison dedicated a lot of time to it, so she deserves a lot of credit
- gave a talk at SPUG last night on Parrot 1.0
- well-received
- will generate some more interest in local interest
- some people asked about writing their own languages
- which was the goal of 1.0
Allison:
- CJ Collier sent me a positive note about your talk last night
Jerry:
- I think there's a dynamic languages conference at Microsoft in April
- I'll find out more details
- otherwise, Google accepted TPF for GSoC 2009
- just made it public an hour ago
- we need people to sign up as mentors
- we need ideas
- there's a wiki page we can update
- http://www.perlfoundation.org/perl5/index.cgi?gsoc_2009_projects
Larry:
- been a busy boy!
- junctions are now a native type that you aren't allowed to change the internals of
.eigenstates
is now a private method
- it was too tempting for people to play with
- if they want to get at that method, they have to persuade the
junction
type to trust them
- we decided that blocks should not autothread
- they should generally be transparent to datatypes which transfer in and out of them
- the default parameter to a block is now
Object
and not Any
- subroutines and methods take an
Any
, so they still autothread by default
- you can force an autothread by passing an
Any
as a parameter
- lots of little cleanups
- no longer an
int
prefix operator; we have typecasts
- it was ambiguous as to whether it expected a following term
- general cleanup on other confusing words of that type
- we've created a category of syntactic terms which are values: pi, e, enums
- they're not 0-ary functions
- they don't expect a following term
- we're breaking the Perl 5 notion that constants are merely 0-ary functions
- typenames already were these singleton values
- they were typically undefined protoobjects
- now you can declare constants in this category
- they're defined but parse the same way as types do
- last week we turned the
Result
object into a hash element .<?>
- then it was an object attribute,
.rob
- we've noticed that as it's used mostly to create ASTs
- now it's available through the accessor
.ast
- I didn't like the term "result object" anyway
- S05 uses the term "result" 95% of the time to refer to something else
- they're now abstract objects or AST objects
- reviewed the IO spec
- simplified it massively
- fixed many syntax errors and brainos
- somewhat cleaner now
- decided that the
.()
for a normal function call was bogus
- the dot forms other than that are all a form of dereferencing
- on a normal function call, it's syntactic sugar for the bare parens as part of the special form
- because it was confusing as to accessor functions, we removed the special dot form
- you can still put whitespace with a backslash, but not the dot form
.()
needs some object which responds to the Callable
role
- we now have non-sigil constant declarations:
constant pi = 3
- spec'd a while ago, but I never managed to get that into STD
- other big effort was to get
viv --p6
to spit out a perfect copy of STD.pm
- it's a deparser
- I managed to get it to that point, but not always by the correct means
- match objects now -- not quite specified yet -- have the notion of accessing the captures in the order of parsing, left to right
- makes it very easy to write a translator
- you can traverse them in order and translate the ones you want according to type
- no need to reconstruct the order of the nodes
- this is often useful
- makes it easy to process if some of the captures capture multiple things under the same name
- choice of accessing by name and by array under that
- my next goal is to rewrite
gimme5
as a Perl 5 emitter using viv
- then I'll have a real parser which spits out code
- looked at some of the tests
- constant.t had several tests inside hard-wired
eval
s
- they're invisible when I run my standard parsing tests
- I took them out
- if something isn't parsing there, someone needs to add fudge comments
- I wonder how many other
eval
s hide broken syntax
Jerry:
- that's a holdover from the Pugs tests
- should be reasonably easy for Moritz and the other folks to catch
- it's unusual they didn't catch that
Larry:
- improved a lot of error messages
- I love error messages
- if you use the semicolon stub form of a sub or something, it complains about a missing closure
- reasonable error messages for extra decimal points
- created a bug in heredoc processing by changing the internals of my nibbler
- have to pull out the insides of the quoted string to find the closing heredoc terminator
- shot myself in the foot on that one
- cleaned out a lot of dead wood
Nicholas:
- woohoo on the Parrot release!
- woohoo on the Summer of Code!
- interested to note that Rakudo's implementation of state variables came after Perl 5's implementation
Will:
- been working on This Week in Parrot posts up to the 1.0 release
- will do a double-long one next week as I skipped last week
- need to get both Tcl and APL working again
- ignored those in favor of helping with 1.0
- going through the usual ticket mongering and removing deprecated things
- that's much more satisfying now that 1.0 is out
- and today is Rachael's birthday, so you have to put this in the notes
- no singing
Nicholas:
- in Perl 5 at work, we've had an ideological battle about
use constant
- which I know the optimizer can inline
- and the other is the use of
Readonly
, which uses tied variables
- the XS version flips the
READONLY
flag
- the latter interpolate in strings, even though they're not inlined
Larry:
- they interpolate in Perl 6 inside a closure block,
"{pi}"
- not as big an issue if you use the sigil in front
- the question is "Does the compiler know about the value?"
- that's irrelevant to the sigil in the front
- Perl 6's
readonly
is runtime only
- a true constant you can constant fold at compile time
- you can't do that with
readonly
, because it might have a different value next time
Nicholas:
- it's not necessarily immutable
Larry:
- all formal parameters are
readonly
by default
- but they might have different values on the next call
- we're distinguishing between
constant
and readonly
in Perl 6