Perl 6 Design Minutes for 18 March 2009

chromatic on 2009-03-20T20:50:05

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 evals
  • 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 evals 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