Wednesday December 09, 2009
06:57 PM
Perl 6 Design Minutes for 02 December 2009
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
Perl 6 Design Minutes for 02 December 2009 0 Comments More | Login | Reply /