Perl 6 Design Minutes for 22 August 2007

chromatic on 2007-08-25T19:31:45

The Perl 6 design team met by phone on 22 August 2007. Larry, Patrick, Jesse, Nicholas, and chromatic attended.

c:

  • fixed several Parrot bugs
  • we now have Tcl, Lua, and Perl 6 all which can work at the same time
  • I want to make sure they stay working

Jesse:

  • are you having fun in GC land?

c:

  • I think a good refactoring is in order
  • I despair of anyone understanding it well without that anyway
  • so hopefully making it cleaner and not throwing away metadata will help find or fix the bugs
  • my immediate goal is to fix any blockers that people run into
  • also work in the HLL system for Parrot; that's the source of the Lua, Perl 6, Tcl bug

Patrick:

  • I'm blocking on time
  • it's been quite a week this past week
  • just released Parrot 0.4.15
  • just a few cleanups necessary
  • NQP has come along extremely well
  • it's nearing completion for its use as a tool in other compilers
  • may be able to write some example applications in NQP probably within the next 24 hours
  • we can interface to libraries such as the SDL bindings
  • I already have the transformation for the abc language written in NQP
  • NQP parses it
  • it just needs a few extra pieces to compile or run
  • that could happen within the next 24 to 48 hours as well
  • then I'll start on Perl 6
  • a side benefit is that I've had a good chance to readdress some of the Perl 6 blockers and solve them for NQP
  • they're trivial now in Perl 6
  • they're now part of the AST nodes
  • lots of features will just start to work for Perl 6 once it moves to NQP
  • Larry's work on the standard grammar has been extremely helpful
  • NQP has followed it as much as possible
  • that's helped find missing spots in the standard grammar
  • Larry's revised it based on that feedback
  • some of the tough things in the Perl 6 grammar are now easier there

Jesse:

  • I get people asking how they can help with NQP
  • can you break off a few chunks of 20 minutes or so for people to help?

Patrick:

  • there's not much left with NQP
  • with Perl 6, there are a few
  • people who want to help need to look at what it would take to help
  • Colin's driven a lot of the updates
  • adding various updates and statements
  • usually he'll say, "I want to add an operator"
  • he wants one to look at to cargo-cult
  • I've had to write one, then he goes from there and writes the others
  • he's added most of the fundamental pieces to NQP
  • I've done more architectural work and work on the compiler toolkit
  • I'll make an effort to make list tasks on NQP, Perl 6, or abc
  • another interesting task for a PIR hacker is to make the other SDL examples work with NQP

Larry:

  • I wrote a little program last week which processes the standard grammar
  • Pugs can process and run it
  • it can parse rudimentary expressions
  • it supports most of the constructs used in the standard grammar so far
  • just hacked in a first whack at bindings
  • let us produce an AST
  • that's still a work in progress
  • that flushed out a few more issues with the standard grammar
  • takes about a minute for Pugs to compile the standard grammar after post-processing
  • not exactly speedy
  • the actual pattern matching it does right now isn't optimized
  • parses everything to use gather and take
  • lazy lists already give you basically continuations underneath
  • this parser can have many different simultaneous backtracks held in reserve in a list
  • for a minimal match, just read your lazy list in order
  • to be greedy, reverse that list and read it in the opposite order
  • seems to work out nicely
  • conceptually pretty
  • avoids throwing continuations directly at the reader of the code
  • for a ratcheting grammar, it could be faster by getting rid of the gather/take

Nicholas:

  • could someone else work on that particular pass?

Larry:

  • someone else is helping me... rhr... Ryan Richter
  • I'm concentrating on correctness now
  • because each of these possibilities gets generated on the fly, each has to keep its own match object

Jesse:

  • how memory intensive is that?

Larry:

  • it depends on how many matches you have in the air simultaneously
  • in theory, if it's lazy enough, "no more than you need"
  • when it tries to be greedy when you didn't want it to be greedy, you use a lot of memory
  • sweeping that under the carpet of laziness fixes that issue nicely
  • that means I don't have to think about backtracking
  • just attach the state to the right continuation going forward
  • probably reinventing a packrat parser
  • I figure out I need something and do it, then find out someone already has a name for it
  • I don't know if this will ever be used for a real bootstrap, but it's definitely flushing a lot of issues out
  • exactly what objects do we need
  • we have current language, current continuation, match object...
  • are they the same or different?
  • exactly how many objects do we pass down through it
  • also trying to do a better parsing of embedded sublanguages such as double-quoted variants
  • there's a kludge for finding terminators
  • I don't think that's very clean
  • I think the grammar will clean up in a few places because of this
  • don't know how much time I'll have, as we leave for Vienna on Saturday

Jesse:

  • how much have you followed what Flavio's been doing as of late?

Larry:

  • keeping half an eye on it
  • they can pass parameters to methods in kp6 and are working on subroutines
  • they seem to whack on it frequently

Jesse:

  • I talked to Steve Peters
  • he's had more time free up recently

c:

  • I checked in a couple of patches and have a couple more to review from him

Patrick:

  • STD.pm looks like a problem if you have a subroutine followed by a bare block
  • it parses as if it's postcircumfix braces after the sub

Larry:

  • even with whitespaces?

Patrick:

  • the <routine_def>rule eats up the trailing whitespace
  • in NQP, I created an <afterws> assertion that determines if the current position follows a memoized <?ws>
  • the <postop> only goes if it's not after whitespace, that is, token postop { <!afterws> ... }
  • it seemed to work pretty well
  • that's an advantage of the tests that Colin's putting in
  • putting in the explicit "did I just eat whitespace?" test works pretty well

Jesse:

  • I presume we're off next week because of YAPC::EU
  • we'll pick up the following week