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