Perl 6 Design Minutes for 02 December 2009

chromatic on 2009-12-09T23:57:09

The Perl 6 design team met by phone on 02 December 2009. Larry, Allison, Patrick, Will, and chromatic attended.

Allison:

  • mostly mailing list talk
  • finishing up course work before the break

Larry:

  • renamed void context to sink context
  • appears to have worked
  • working out the semantics of higher-level abstract conversions with the lower-level ones
  • the method conversions — .Num, .Str, .Bool — are low-level
  • the abstract ones are conversions to roles, like + to Numeric
  • the generic role is in charge of which conversion to use
  • seems to map better to what people expect
  • started to straighten out .true versus .Bool
  • renamed is ref to is parcel
  • made it synonymous with backslash
  • did more work on the Rat semantics to separate out what we originally called Ratio
  • now called FatRat
  • looked at all of the mentions of context in the spec
  • removed overloaded meanings
  • dynamic contexts are now call frames
  • contextual variables are now dynamic variables
  • context means two things now, the old list versus scalar notion and some notion of a thread's context (left those alone)

Allison:

  • "call frame" makes a lot of sense
  • we may kidnap that

Larry:

  • Damian has sent in various spec tweaks, as we gear up to do a Perl 6 book
  • kicked the p5=> out of the core into something supplied as a macro by a translator
  • ranges now preserve interval semantics when you do math on ranges
  • renamed blorst to blast so we can talk about phaser blasts
  • worked on the nature of constants
  • constant declaration is now in the same category as the subset keyword and othe declarators
  • now have an anon declarator
  • it confused people to misuse my or our in a situation without a name
  • had added an else to go with also, as Damian suggested
  • removed both of those in favor of a new metaoperator which guarantees sequential evaluation of the arguments
  • the S metaoperator
  • after deciding that undef is a lousy concept in Perl 6 -- it turns out to mean five or six different things -- we decided to untangle all of them
  • temporarily renamed Object to U, for the most generic undefined
  • then revised, per Damian's suggestion, to Mu
  • that represents the most generic undefined value and the type from which all other classes derive
  • one use of undef was in smart matching
  • added a .notdef method for the convenience of testing definedness
  • possible to write longer versions which work with smart match
  • a convenience method felt nicer
  • used heavily in the test suite
  • can test something directly with the method without having to use smartmatch
  • worked on the Rats of unusual precision (not ROUSes)
  • some confusion as to when things get limited to 64-bit denominators
  • clarified that only the user-visible results use that limit
  • intermediate calculations performed by an operator which can and must exceed that limit temporarily
  • added a scaling option to the round function
  • easy to round to a particular rational value
  • after lots of carping about how ill-defined enums are, I rewrote that spec
  • they're no longer roles
  • the but and does infix operators still can intuit an attribute property mixin
  • that's a function of operator DWIMmery though
  • enums, to the first approximation, are simply collections of constants
  • they also supply a method, .mapping, which returns a hashlike mapping
  • that takes care of most of the special cases
  • STD now forces the symbols it matches into strings
  • lots of hacking to track spec changes, such as renames
  • complex number literals now parse the initial plus or minus as part of the complex
  • prevents tragedy in negating the wrong part of the number
  • need to nail down pure versus impure ideas to move that into constant folding
  • infix operators couldn't accept assignment operator forms for baseops with square bracket or hyperoperator forms; fixed that
  • worked on error messages, especially the Borg forms
  • removed some redundant rules and the term lexer decreased in size by two-thirds
  • added a warning about the use of undef; gives a long list of things you might mean instead
  • if you use ** in a range in a regex, but you mess it up where it parses .. as matching anything, you now get a malformed range warning
  • added a few missing things to the CORE setting, such as range iterator
  • now trims pi and e to fit in to a Rat64
  • tweaked viv to support code production of infix operators
  • don't have to grovel around to find the operator

Patrick:

  • not a lot of direct Rakudo coding
  • working in the ng branch
  • have eval working; it doesn't poke in the middle of the compiler guts
  • also provides a cleaner interface that other HLLs can reuse from PCT
  • added regular expression matching
  • still needs some work
  • added array push and unshift
  • fixed a few bugs
  • otherwise working on some design issues, such as lazy lists
  • answering questions for the branch
  • lots of syntax improvements in NQP
  • improved error messages
  • adding a few features
  • added :c($x) (continue) and :p($x) (position) options for regex matching in NQP and ng
  • those didn't exist in PGE or the previous Rakudo
  • cleaned up the abstract match handling (.ast) to match the new spec
  • reviewed Stephen Weeks's work to add try and catch blocks, and it was fine
  • updated a few things in NQP to make it easier to write built-in operators
  • enables the Perl 6 operator syntax directly
  • also working on Partcl
  • handles quite a bit already, but not enough
  • keep plugging away
  • the parsing works closely to what the language spec requires
  • I like that
  • throughout the implementation, we've focused on doing most of it in NQP itself, not PIR
  • seems to work out fine
  • adding lots of different commands
  • that's fed back into improvements for NQP
  • working out very well
  • started a regex syntax for Partcl which matches what Tcl requires
  • previously used the P5 syntax, which isn't an exact match
  • an example for other people of how to do it
  • mostly doing Parrot fixes to support the other tasks
  • a few small updates to PAST
  • improving code generation
  • enabling features that other languages need
  • bugfix for handling self attribute access in method calls
  • adding methods and interfaces for the compiler objects
  • will refocus on Rakudo's ng branch
  • lots of work fleshing out HLL interop interfaces
  • necessary to handle module imports
  • also a roadmap item and the last piece on my Hague grant
  • posted an interim report recently
  • that report marks the halfway point, but I'm much further than that
  • should finish the grant this week

Will:

  • have a version of Partcl mostly written in NQP
  • putting some energy into a discussion about reexamining our roadmap priorities
  • been doing that incrementally, but never had a specific meeting just to talk about that
  • trying to focus some energy on the list

c:

  • fixed a bug or two
  • profiled and optimized a bit

Allison:

  • how long would it take to migrate Pynie to the new NQP?

Patrick:

  • shouldn't take too long at all

Allison:

  • have a month off between classes starting in a week
  • might work on that

Patrick:

  • glad to help wherever I can
  • might be an area where you run into a problem and I need to write documentation

Will:

  • you can look at the NQP version of Partcl to start

Allison:

  • examples have been most helpful in the past

Will:

  • Stephen's also converting Squaak and abc to NQP
  • might be helpful to look at those too