Wednesday April 28, 2010
05:20 PM
Perl 6 Design Minutes for 21 April 2010
The Perl 6 design team met by phone on 21 April 2010. Larry, Allison, Patrick, Will, Jerry, and chromatic attended.
Larry:
- been under the weather, so didn't get much done other than keeping up with questions
- S05 now allows negative quantifier ranges on reversible patterns
- S02 now defines the term
now to return the current instant - like
rand and self, it does not parse as a function, since it never takes arguments - we now specify what kinds of math are allowed on instants and durations
- improved error message on attempt to use old-school backreferences in regexes
- STD now implements the
now term and several other time-related names - we now allow enum names to be "constant variables" so that a class enum can declare an accessor
- thinking alot about a better unification of the semantics of protos
- this may also solve the current ambiguity in the meaning of postfix parens
- in any case, this is for post Rakudo *
Allison:
- mainly worked on packaging for Debian and Ubuntu before the release
- closed TT #389, no methods in namespaces
- collecting thoughts on what we need next from the GC
- we've done a lot of small cleanups
- now we need to solve some persistent problems
- might need to make some fundamental changes, like reducing copying
- coming up on my final week of classes, so lots of work there coming up
Will:
- updated a spectest
- minor ticket wrangling in Rakudo's RT queue
Jerry:
- GSoC will make its acceptance announcements soon
- expect TPF will get 10 slots
Patrick:
- reviewing Rakudo's current state
- made a couple of minor NQP patches
- reviewing patches, especially from Moritz and Bruce Keeler
- should check them in, probably with some refactorings
- hope to work on the
List implementation, especially laziness and context
c:
- fixed as much of line numbering as I found broken
- working on branch merges
- still looking at optimizations
- will focus most energy this month on the sweep-free GC
- hope to encourage other people to work on identified optimizations
- will review Solomon Foster's Mandlebrot example, especially with regard to performance
Tuesday April 20, 2010
11:09 PM
Perl 6 Design Minutes for 14 April 2010
The Perl 6 design team met by phone on 14 April 2010. Larry, Allison, Patrick, Will, and chromatic attended.
Larry:
- on p6l, did a bit of bikeshed paint removal with regard to hyphens vs underscores
- S02 now explicitly disallows both whitespace and unspace in top level of an interpolation
- per spec change, when STD is parsing an interpolation inside quotes and looking for a possible postfix, we now presume that a backslash belongs to the quotes and is not an unspace
- in the src/perl6 directory, renamed all Perl 6
.pm files to .pm6 to avoid confusion - this was necessary because the implementation of STD translates Perl 6 back to the corresponding Perl 5
- the ambiguity was causing problems with tools such as
NYTProf -
Cursor.pmc now prefers .pm6 over .pm in any particular directory when searching for Perl 6 code - as usual lately, most of my hacking work was in improving the human interface of the parser
- STD now distinguishes two final messages: "
Parse failed" vs "Check failed" - STD now warns on attempts to smartmatch with
True or False - STD now distinguishes continuable-but-fatal "sorry" messages from immediately fatal "panic" messages
- sorry messages will eventually fail at check time
- changed many of STD's semantic errors to use sorry messages when the parse state is not affected
- modified moritz++'s conflict marker patch to be more like the Clang compiler's behavior
- conflict markers now emit a "sorry" message and continues parsing one side of the conflict
- also fixed a buglet that prevented it from processing the conflict marker if first thing in the file
- while fixing the vws (vertical white space) rule for that, also changed it so that extra lines are now eaten with
\V*\v for consistency - it had be using
\N*\v - gimme5 now supports pointing to both ends of missing goal message
- STD's "
Couldn't find final ..." messages now use that capability to point to both ends of the error - standard quotes now also use the ~ compositor to set the goal and get that behavior
- STD will now dwim
<<op>> ("Texas hypers") better even if op contains angles - suppressed confusing backtracking on
~<< that produced a misleading quotewords error - some other patches
- CORE.setting now recognizes the '
note' function - gimme5 now translates
note to print STDERR - cleaned up some unneeded locmesses
- Actions.pm now handles prefix metaops without spewing spurious yaml dumps
Allison:
- worked on TT #389
- the actual fix was about two lines
- spent a lot of time fixing tests around it
- didn't like the original two-line fix
- fixed it in IMCC by passing along the
:nsentry flag - NQP-rx still depends on that feature
- I understood from Patrick that NQP-rx doesn't need that feature
- don't want to launch that before the 2.3 release
- worked on a lot of smaller issues
- worked on the Parrot Developer Virtual Summit
- will talk about some process changes more, as there are details to work out
- will work on GC as the next priority
- useful for Rakudo in general and Parrot concurrency
Patrick:
- catching up on mail and tickets
- should get back to coding in the next couple of days
c:
- worked on the immutable strings branch
- need a couple of changes in the Rakudo binder
- now it's time to convince everyone else it's a worthwhile design change
- going to work on bugfixes
- will try to land the constant string cache
- otherwise, added some optimizations
Will:
- worked on Partcl
- fixed a Parrot bug that broke Rakudo
- does Rakudo need TT #389 in 2.3?
Friday April 09, 2010
05:07 PM
Perl 6 Design Minutes for 07 April 2010
The Perl 6 design team met by phone on 07 April 2010. Larry, Allison, Patrick, Jerry, Will, and chromatic attended.
Larry:
- clarified that object identity from
WHICH may not be a mundane value type - instead object id's are of type
ObjAt to avoid type name collisions. - rewrote misleading description of "thunk"
- made some clarifications of the desired semantics of buffers
- Buf is primarily a role for dealing compact, unsigned integer arrays in a stringy way
- but a Buf may be instantiated with other numeric types as well.
- removed bogus mentions of Buf8, Buf16, Buf32; only the native buf types are sized that way
- STD now actually parses the insides of
tr/// and carps about malformed ranges - labels are now stored symbolically as constants rather than types
- so no coercion routine is added for the name, so it doesn't collide with the function namespace
- labels are now constants with a unique label type to prevent confusion with ordinary constants
- module subcompilation now reports the name of the file it's compiling
- improved various error messages regarding
foreach, !!op, $!{}, EOF, and missing punctuation after blocks
Allison:
- worked on line number reporting in HLLs
- no ticket to go on, no good examples
- didn't make much progress, but didn't have much time
- sounds like Christoph and chromatic are working on it
- might look at TT #389
c:
- you're welcome to it!
- let me know if you have questions; it's close
Allison:
- no travel plans for the next couple of months
- should have a lot more Parrot time
- probably time to consider another big project
- probably GC related
Patrick:
- updated the progress graph last night
- up to date as of yesterday
- Rakudo's passing over 30,000 tests, which is great
Jerry:
- we have 27 mentors signed up for GSoC
- a dozen student proposals have come in
- the admission period ends Friday, so I expect at least a handful more
- looks like a good year for proposals
- trying to keep on track of Rakudo development
- trying to be a go-between for Rakudo and Parrot
- seems like it's helping Rakudo as Parrot addresses issues that come up
c:
- Vasily and I fixed the Rakudo performance regression
- we're going to experiment with immutable strings in a branch
- expect some notable performance improvements there
- also worked on the plan to fix line number reporting
- need a test harness to help identify problems and avoid regressions
- learned my lesson last time I worked on that....
Larry:
- I cringe every time I hear "line numbers"
- I like what Clang does about highlighting the arguments to functions
- it'd be nice if we can do similar
c:
- that'd require more changes to Parrot, but it's doable
Larry:
- I just want people to bear it in mind
Allison:
- there's no reason we can't have richer annotations
- our first step is making sure the information we provide them (or they ask for) is accurate
- is it time to have another big development meeting for Parrot?
- the release is coming up
Jerry:
Sunday April 04, 2010
11:42 PM
Perl 6 Design Minutes for 31 March 2010
The Perl 6 design team met by phone on 31 March 2010. Larry, Allison, Patrick, Will, and chromatic attended.
Larry:
- in SpecLand, made it clear that the brackets in pairs are not related to subscripts, but follow the corresponding fatarrow semantics
- in particular, name extenders are just strings or list of strings, properly indicated by : or :() in most cases (this includes all operator names).
- we now forbid name extension using the
:{} keyless adverbial syntax - we don't need that because name extensions are really only supposed to use values, not closures
- if we really, really, need to supply a closure as part of a name extension, we can put it in parens, as in
:({}). - we can use that notation for supplying a closure as a first argument to a method without requiring a space between the colon and the curly, as in
.map:{...} - people keep writing that and expecting it to work, so I thought it would be good to make it work
- the colon is still require before the curlies, or it's a hash subscript
- we now capitalize the
Junction type again because I couldn't get people to stop capitalizing it - also, the native aspect of junctions is not their most salient difference from normal types
- conjectured an
Each type that autothreads lists like junctions, but is serial and lazy, and is used for its values in list context, not boolean context - in S05, did much cleanup of cursor semantics to reflect what STD and Rakudo actually do these days
- retargeted the
<&foo> regex assertion form to explicitly call a routine, just like <.foo> always calls a method - a bare
<foo> assertion now prefers to call a lexical function if visible, or calls as a method in current grammar if not - this is a compile-time distinction, not a fallback at run time
- in code hacking, continued debugging of the backtracking transactions I added last week
-
gimme5 now sets the correct xact on || alternations - deleted more of the transactions that are no longer needed when building match results that are no longer hypothetical
- a
LazyMap now always passes through the first result regardless of its associated commit transaction state - that's because the first cursor in a lazy list always represents the current match hypothesis, not a future hypothesis that needs pruning
- STD now parses to the new specs regarding name extensions not including
:{} - now allow colon form of method arguments to omit the space if the next char is a left curly, which is what people seem to expect anyway
- note that this makes the closure the first argument, not the only argument
- STD now gives more useful error messages when user says things like 'if' as a function call (
if(...) {...}), or a statement control like 'given' where one isn't expected ($x = given {...}) - STD now properly objects to unrecognized internal regex modifiers such as
:has - improved the message on adverbs with empty angles (
:foo<>) to list some better options - the problem arises when people think that the angles produce a null string, when in fact they produce a
Nil list - other malformed pairs are also better diagnosed, such as
:! not followed by an identifier, or pairs with duplicate arguments - added a new rule that traps all warnings and errors
- STD now uses
suppose in place of custom try blocks in diagnosing such things as two terms in a row, or unexpected infixes - also uses
suppose to soften the warning about backtick-less embedded comments by not complaining if the supposed comment eats the whole line anyway - put in some code to de-dup identical warnings
- STD now includes the signature's return type (after
-->) in the check for redundant 'of' types - did various tiny speed tweaks, fossil removals
- started playing with how to mark sink context and pure operations
- split out
Actions.pm from viv so that it can be used by other STD-based AST builders - this is in preparation for propagating attributes up and down the AST such as sink context and purity
- eventually this will result in "Useless use of" messages where appropriate, not to mention the ability to do constant folding
Allison:
- worked on the
compact_pool() function - split it into a series of smaller functions
- it could use more work, but it's an improvement
- found one possible bug
- worked on some documentation, especially for PMC attributes
Patrick:
- reviewed some patches to add variable handling in regexes
- they need some changes, but the overall concept is good
- reviewed a few other messages
- most of my time is going toward my family
- hope to get more time to be more active in the next couple of days, but I can't promise that yet
Will:
- talked to Jonathan about Rakudo Star priorities
- he's very pleased with the memory fixes
- the next thing on his list is getting good line numbers in reported errors
- closing tickets
- working to get rid of the last recursive Makefile
- may wait until after the new release, when we remove a lot of deprecated things
- practicing my NQP skills by working on Tcl again
c:
- worked on the Rakudo memory problems
- Vasily and I fixed the big memory use problem
- still some performance tuning to do there
- wrote up tasklists for two other important performance pieces
- will work on line numbers after we get performance back
Wednesday March 31, 2010
04:20 PM
Perl 6 Design Minutes for 24 March 2010
The Perl 6 design team met by phone on 24 March 2010. Larry, Allison, Patrick, Jerry, and chromatic attended.
Larry:
- clarified that nearly all normal operators autothread, including
=== and eqv - specced the
\| parcel parameter syntax - documented that
R metaoperator does not change associativity - clarified that
trusts traits do not extend to child classes, and moritz++ specced it - in STD, we now suppress spurious errors from badinfix lookahead (and react more accurately to bogus terms)
- now put the error location pointer before a bad infix, not after
- we no longer assume missing block punctuation is always semi or comma, but keep them as a suggestion
- missing punctuation message now points before any whitespace
- awesomified error message about no unspace in regexes to explain how to quote space or
# - pass single coeff to
radcalc to make :16<.BABEFACE> easier to allow - gives better message on missing
** part of radix literals - worked around fact that
:: doesn't correctly suppress relexing of multi tokens - scrapped the workaround and did a complete refactor of commit point transactions; no longer uses exceptions to commit
- instead, it walks the current commit chain to the proper commit target to disable choosers that should not choose any more options
- commit chain aliasing and forking to make a cactus stack is now managed by cursors, mostly transparently
- weighed in on the subject of stability domains (or lack thereof) in Rakudo *
Patrick:
- still working on personal issues, but hope to have some resolution by Saturday
- haven't had much time to work on Rakudo, but show up on #perl6 to give advice sometimes
- read Larry's email to the list; it was very helpful
Allison:
- met some interesting people at SxSW doing open source education technology
- reviewing the roadmap
- the GC sounds like the most important thing to work on next
- trying to catch up from having spotty network access lately
Jerry:
- the other Rakudo developers have started weekly planning meetings
- Jonathan has taken the lead
- plenty of contributors are in the meeting and offered to take on new tasks
- Rakudo Star may have a smaller scope, but it'll still come out in Q2
- it's nice to see that the Rakudo community continues even as Patrick has an extended absence
- still some Parrot issues affecting Rakudo
- PaFo hopes to have its 501(c)3 application done by summer
c:
- bugfixes
- minor optimizations
- helped merge the PCC refactor branch
- working on Rakudo memory issues (long analysis follows, partly Parrot GC and partly NQP behavior)
04:17 PM
Perl 6 Design Minutes for 17 March 2010
The Perl 6 design team met by phone on 17 March 2010. Larry, Allison, and chromatic attended.
Larry:
- documented which ops don't autoclose with
*, including assignment - conjectured a generalization of the closure-calling context (value-only lists) that subscripts enforce
- this generalization might allow the autoclosing of some of the current exceptions such as
1..* - added
Z to go with X metaop; documented that X and Z desugar to higher-order methods, crosswith and zipwith - speculate about how to
zip/cross dwimmily with non-identical ops; possibly creating a real use case for surreal precedence - however, for now sticking with conservative approach of requiring parens on differing list infixes
- hacking on
viv again - trying to get that bootstrapped, so I don't have to use
gimme5 - unbitrotted
viv --p6 so it exactly reproduces STD.pm again - various developments with
viv --p5 toward replacing gimme5 - should make it easier to emit other parsers eventually
- may emit Rakudo code someday
- it's a race to see whether STD can do that before the current Rakudo parser resyncs with STD
- anyone who wants to bootstrap on some other VM might want to use that
- mostly tired of writing in the subset of Perl 6 that
gimme5 understands - mostly hacking on better error messages, as always
- catches use of non-
$ hard reference - STD now read minds of people who forget that "
.meth I" is a two-terms-in-a-row error - now produces good messages on attempts to use
y/// or tr/a-z/A-Z/ syntax - now reports "previous line missing its semicolon" in the unexpected block checker
- ambiguous use of
. probably indicates p5-think, not missing method parens - STD now has in a
q-like sublanguage for tr/// string parsing - implements the
MONKEY_TYPING constraint on augment and supersede declarators - various random cleanups and bugfixes
- added
Z metaoperator - lots of works on regex flags to unify them into a single
%*RX structure at parse time - makes it easier to do all of the lexical scoping in parallel
- can now remap run-time's
$?FOO variables to parser's $*FOO dynamic variables - otherwise, bugfixes, spec cleanup, and test cleanup
Allison:
- working on tickets
- updating the Parrot roadmap to match our Rakudo Star support plan
- working on the mini-language in NQP for a class assignment
- found a new Pynie developer who saw my talk at Pycon
- may be doing a Summer of Code project in it
- answering lots of questions on IRC and helping out with ideas
c:
- working on lots of little bugs for Parrot
- should have the method namespace bug fixed, with help from Andrew
- exploring some optimization possibilities
- should be able to merge the PCC refactor shortly
- Allison, see TT #1511
Allison:
- we need to add a new opcode, something like
set_want - call it to update the CallContext with expected return information
c:
- works a bit like Perl 5 there
- we could use that information for MMD, that'd be interesting
Monday March 22, 2010
08:37 PM
Perl 6 Design Minutes for 10 March 2010
The Perl 6 design team met by phone on 10 March 2010. Larry, Allison, Patrick, Jerry, Will, and chromatic attended.
Larry:
- scrapped @array[%100_000] modular subscript notation in favor of a more general mapping closure
- put back
:s file test, removed :z, :T, :B, :M, :A, :C - clarified that these are defined on IO, not on strings
- deprecated the
{*} and #= reduction stub notations in grammars - attributive parameters now default to
is copy binding; but easy for an attribute to override this with is ref - tried to move operator definitions to CORE; found one approach that doesn't work and abandoned it
- STD now allows
_ in numeric variable names like $10_000. - factored out curlycheck so we can use it on any trailing curly
-
postcircumfix:<{ }> now uses curlycheck for consistency - STD now speculates missing semicolon when two terms in a row are separated by at least one newline
- removed mention of
*.notdef in favor of :!defined - still need to remove it from the spec though
- ambiguously rebound outer lexicals now detected even if ambiguity propagates from an inner scope
- reports more pertinent information in that case so the difficulty can be understood by the user
- various random debugger refactorings
- properly scope dynamic package names for block-oriented packages to include name declaration
- package_def of
; packages now eats statementlist itself to stay inside proper scope - much work on package qualified names
- correctly parse
<$x> part of FOO::<$x> as part of variable name - correctly follow symbolically indirected
OUTER:: links -
find_top_pkg no longer cares if name ends in :: - STD now figures out whether initial components lead to package or lexical scope
- no longer scans outer scopes on qualified names
- now handles
FOO::<$x> form in check_variable - no longer checks for
@/% mistakes on qualified names
Patrick:
- haven't had much hacking time lately due to personal demands
- should be able to hack again later today and the rest of the week
Allison:
- worked on the PCC refactor
- that went well; the hackathon was good
- it didn't pull in a lot of people, but me dedicating the weekend to it was helpful
- also pulled in a few other people willing to try things out
- we made good progress
- our initial task is over
- we're in the nebulous stage of debugging
- need to review a change in optional return values
- also worked on Ubuntu and Debian packaging
- Parrot 2.0 is in both
- it'll be in April's Lucid Lynx Ubuntu
Jerry:
- Google Summer of Code is starting
- TPF and PaFo are teaming up this year
- we're working on the organization application
- Jonathan Leto is leading things and I'm backing him up
- we're looking for mentors and ideas; see the TPF GSoC wiki page
Will:
- started going through Rakudo's RT queue
- did more Parrot building and cleanup work
- no longer invoking Perl to invoke the C compiler for each build file
- shaved some time off the build
- eliminated one recursive make, leaving two
- then I can remove more things from config
c:
- worked on a bunch of branches
- fixed a couple of bugs
- hope to get more bug fixing time in
Saturday March 13, 2010
06:19 PM
Perl 6 Design Minutes for 03 March 2010
The Perl 6 design team met by phone on 03 March 2010. Larry, Allison, Patrick, Jerry, Will, and chromatic attended.
Larry:
- noted how lastcall allows nextsame control of nested dispatchers
- reserved the final paren-based shape declaration syntax without committing to it meaning anything
- clarified that
Nil itself is defined but likes to produce undefined values when indexed - added some clarifications of how the series operator deals with type information
- clarified that
Pair.ACCEPTS uses "so" and "not" semantics so :s returns True or False - removed the
1/2 and +2-3i literal forms, now rely on angle forms <1/2> and <+2-3i> for literals, and the bare forms now rely on constant folding rather than a fragile special syntax - in STD, made undeclared variables more fatal
- STD now tries to be helpful if the user makes the typical P5-ish variant-sigil mistake on arrays and hashes
- also improved error message on the
-{}> kind of mistake that P5 programmers will make -
my $a, $b now gives better message - STD now reserves the
() shape syntax per current spec - fixed regression on indirect method knowing that method name is not bound early
- moved unexpected-
!! panic from infixstoppers to infix:<!!> for better extensibility - so a user's infix definition isn't ignored if it starts with
!! - you can define user operators starting with that, and it only complains for the right reasons now
- STD now gives an accurate message when a prefix is missing its term
- removed deprecated rational and complex literal forms from STD
- much preliminary work for moving operator defs to CORE.setting, not yet checked in
- only blocker is not being in Copenhagen
Patrick:
- Jonathan, Carl, Moritz, and Martin will be there
- I proposed a panel discussion instead of my talk on Tuesday afternoon at 3 pm
- I'll be online then
- can't make it due to sudden personal reasons
- will be online quite a bit the next few days though
- can participate in the hackathon remotely
- worked mostly on helping other people get their tasks done
- updated the parser to handle more operator conditions
- working toward enabling user-defined operators
- quite a few new people submitted patches
- several were non-trivial
- one patch put grammars, regexes, and tokens back in Rakudo
- that's not trivial and it worked pretty well
- I'm reviewing patches and making comments
- lots of good progress
- expect lots more during the hackathon
Allison:
- going to work on code stuff this weekend instead of traveling
- had a very productive trip
- glad to be home to get work done
- working on the PCC branch this week
- should be, fingers crossed, small and easy to get done
- want to avoid creature feeping
- get the re-ordering through and move on
Jerry:
- having trouble building Rakudo on Windows
- have time to debug with people online
- this is preventing me from talking to Patrick about and working on S19
Patrick:
- we can work on that tomorrow
Will:
- saw that problem on p6c as well
- fixed a Parrot bug for Patrick related to STRING indices
- we have some speed fixes on top of that
- still working on the build cleanup
- hope to merge to trunk in the next two or three days
c:
- haven't had and won't have much time
- fixed a few bugs
- working on helping other people get stuff done
Jerry:
- is there a hackathon or meeting time available after OSCON?
Allison:
- recommend the weekend after
Patrick:
- there'd have to be a hackathon for me to get TPF sponsorship
Jerry:
- the pace of spec changes has picked up
- any ideas what's driving that?
- is it different from before?
- was the end-of-year lull the same as before?
Larry:
- everyone did take a break over Christmas
- most of the changes are still simplifications
- or responses to implementation issues
- dealing with inconsistencies
Patrick:
- a lot of implementation issues have come up over the past three weeks
Larry:
- ng has flushed out a lot of design issues
Jerry:
Patrick:
- that's great for Larry, but I have a deadline!
Allison:
- remember, it's a stake in the ground
- "This is a release of Perl 6 you can use NOW!"
Patrick:
- we're driving the spec with regard to lists and arrays
Larry:
- they essentially have the same structure
- they need separate typology
- you need to know whether to clone an iterator
- that's the only reason you have to know
Patrick:
- did you see my comment about binding being the distinguishing feature?
Larry:
- I think about that in inside out terms
- not sure I can put that in words yet
- had a conversation with Solomon about the FP view of iterators and arrays
- that's some of my thinking
- do we promise to hold a pointer fixed, or go on to the next thing?
- whether that thing is persistent is mostly the bailiwick of the GC, from the standpoint of the language
Patrick:
- I wasn't sure how that applied to my specific context
- maybe I should work up a description of words or implementation
- some lists I want to keep around reified elements
- some lists I don't
- the distinction is whether it's bound to any variable
Larry:
- may depend on what it's bound to
- we might make the keeparound promise only for binding to
@
Patrick:
- I came up with binding to
$ examples - we can get laziness but eat up a ton of memory
- if we throw things away when iterating, we get more things wrong
Larry:
- it's a matter of tracking
- are we bound to something that tells the GC to keep the rest of the list around?
- that's the FP view
Patrick:
- that's not just a GC view
- it's how people refer to them
- my GC is taken care of by my virtual machine anyway
- it's about reachability from the HLL
- or did you see it disappear
Larry:
- that's whether you have a reference to it
Patrick:
- how do you know whether to keep a reference to it?
- I've produced this element
- can I send it back to the caller
- or do I need to keep it around so something else can get to it
- if the iterator itself is bound, you keep the reference
- if it's not bound, you can return it but not keep the reference around
- I'll write up my thoughts
Jerry:
- will these changes settle down after Rakudo *?
- are they a precursor to that release?
- will they continue afterward?
- will Rakudo * go stale?
- that's a tough one to answer
Patrick:
- I can't guarantee stability at this point
- we want a useful release
- we'd like not to have any deprecations after that point
- given how implementations and applications drive implementations
- Rakudo * exists to encourage people to develop applications
- we've never made that stability an explicit goal for Rakudo *
- we'll probably institute deprecation cycles when it comes out
- we don't want to change the world out from under people
- it doesn't represent a spec freeze
- thinking of a separate distribution release from the compiler release
- a three month stability cycle of releases for Rakudo *
- a different point of view
- any distribution release doesn't have to be tied to the newest compiler release
- I see Rakudo * as a series of releases, not a single release
Tuesday March 02, 2010
12:12 AM
Perl 6 Design Minutes for 24 February 2010
The Perl 6 design team met by phone on 24 February 2010. Larry, Allison, Patrick, and chromatic attended.
Larry:
- my work last week was almost entirely responsive to various discussions on irc and p6l, even when it doesn't seem like it
- clarified that
LEAVE-style phasers do not trip till after an exception is handled (and not resumed) - the implementation of take is specifically before unwinding even if implemented with a control exception
- simplified series operator by moving generator function to the left side (any function on right side will now be a limiting conditional)
- a
* is no longer required to intuit the series on the left; the absence of generator before the ... operator is sufficient - first argument on the right of
... is now always a limiter argument - for convenience and consistency, added a new
...^ form to exclude a literal limiter from the generated series - unlike ranges, however, there is no leading exclusion
^... or ^...^ - series is a list associative list infix, and each
... pays attention only the portion of the list immediately to its left (plus the limit from the right) - an "impossible" limit can terminate a monotonic intuited series even if the limit can never match exactly
- variables now default to a type of
Any, and must explicitly declare Mu or Junction type to hold junctions - this is to reduce pressure to duplicate many functions like
== with Mu arguments; most of our failure values should be derived from Any in any case - a
Mu result is more indicative of a major malfunction now, and is caught at first assignment to an Any variable -
Instant/Duration types are biased away from Num and towards Rat/FatRat semantics -
Instant is now completely opaque; we no longer pretend to be the same as TAI, numerically speaking -
Instants are now considered a more basic type than epochs, which are just particular named instants - all culturally aware time can be based on calculations involving instants and durations
- list associative operators now treat non-matching op names as non-associative rather than right-associative, forcing parens
-
Whatever semantics now autocurry any prefix, postfix, or infix operator that doesn't explicitly declare that it handles whateverness itself -
WhateverCode objects now take a signature to keep clear how many args are not yet curried - so
*+* is now more like WhateverCode:($x,$y) - autocurrying is still transitive so multiple ops can curry themselves around a
* - added semilists as
Slicel type to go with Parcel - this allows us to bind
@array[1,2,3] differently from @array[1,2,3;4,5,6], for instance - the
Matcher type now excludes Bool arguments to prevent accidental binding to outer $_ when closure is needed -
when and ~~ will now warn of always/never matching on direct use of True or False names as matcher - STD generalizes
\w lookahead to all twigils now - STD now treats non-matching list associatives as non-associative
- things like
1 min 2 max 3 are now illegal, and require parenthesization for clarity - STD now treat invocant colon as just a comma variant so it does not fall afoul of the list associativity change
- CORE now recognizes the
TrigBase enumeration
Patrick:
- first release of the new branch of Rakudo last week
- passing ~25,000 tests at the release
- thanks to optimizations from chromatic, Jonathan, and Vasily, Rakudo has a lot of speed improvements
- in particular, it can run those tests in under 10 minutes, non-parallel, depending on your hardware
- older releases took 25 minutes and more
- the regex tests will slow things down
- ultimately, we're seeing a big speed improvement over the past releases
- cleaned up lists and slices, now they work pretty well
- worked with Solomon Foster and others to speed up trig operations
- fixed a bug related to lexicals declared in classes
- fixed the long-standing and often recurring problem with curlies ending a line/statement causing the next statement to be a statement modifier
- easy to fix in the new grammar
- that was nice
- made an initial implementation of the
sort method - it's very short, because Parrot provides one
- there are a few bugs in Rakudo there still, but I'll get them
- planning for the Copenhagen hackathon on March 5 - 9
- Jonathan and I have been updating the Rakudo roadmap
- will check that in in the next couple of hours
- so far, every time we review it, we surprise ourselves at how much we've accomplished
- we're meeting all of the top priority goals without making any heroic efforts
- we'll put those goals in as well as timelines
- most of the major tasks from previous roadmaps have happened
Allison:
- working on Python this week
- attended Python VM summit, Python language summit, and PyCon
- Parrot's on good track to support what Python needs
- useful to make community connections
- when I reviewed Pynie, I was surprised to see how close it is to supporting the whole Python syntax
- some of those features are big, like objects
- but we should support them soon
- Debian packages delayed by the absence of a sponsor
- they should go into Debian soon though
- I put in a request for feature-freeze exception for Ubuntu 10.4
- Parrot 2.0 should go in
- haven't made any commits to the PCC branch
- that'll be a top priority for next week
c:
- fixed a Parrot GC bug for last week's Rakudo release
- made some optimizations in Rakudo and Parrot
- helped Jonathan find a few more
- fixed a long-standing math MMD bug
- still working on HLL subclassing; more tricky than you think
- may be some conflicting design goals about vtable overriding and MMD
Allison:
- Patrick, do we need an explicit deprecation for old PGE and NQP?
Patrick:
- I think Will already added one for NQP
- we can add one for PGE if we need
- they don't necessarily have to disappear at the next release
- but no one's planning to maintain them
Allison:
- no reason not to put in the notice now
- we don't have to remove them at the earliest possible date
Wednesday February 24, 2010
07:27 PM
Perl 6 Design Minutes for 17 February 2010
The Perl 6 design team met by phone on 17 February 2010. Larry, Allison, Patrick, and chromatic attended.
Larry:
- much work clarifying relationship of parcels to everything else (
<a b>, assignment, arguments, captures, parameters, signatures, gather/take, and loop returns) - we now list all scope declarators in one spot
- conjectured some ideas on how to handle the allomorphism of literals more dwimmily
- had already specced some of this behavior for literals found inside
qw angles. - literals that exceed a
Rat64's denominator automatically keep the string form around for coercion to other types - clarified that anon declarator allows a name but simply doesn't install it in the symbol table
- respecced the trig functions to use a pragma to imported fast curried functions
- still uses enum second argument for the general case (rakudo is still stuck on slow strings there)
- on iterators, renamed
.getobj to .getarg since arguments are the typical positional/slicey usage - signatures are never bound against parcels anymore, only against captures
- we now use "argument" as a technical term meaning either a real parcel or an object that can be used independent of context as an argument
- anything that would stay discrete when bound to a positional, basically
-
return, take, and loop return objects are also arguments in that sense - they all return either a parcel or anything that can stand on its own as an argument
- STD now adds a shortname alias on adverbialized names, ignores collisions on the shortname for now, which is okay for multis
- STD now complains about longname (adverbialized) collisions
- STD no longer carps about duplicate anonymous routine declarations
- made the undeclared type message the same for parameters as for other declarations
- clarify the error message about anonymous variables
- no longer report a
$) variable error where ) is the $*GOAL - add
WHAT etc. to list of functions that require an argument
Allison:
- working on two HLL implementations
- one is Pynie, the other is Camle
- nothing to do with Caml or ML
- I've noticed huge improvements in NQP-rx from the previous NQP
- can't say which feature improvements make the most difference, but I'll migrate Pynie pretty soon to take advantage of the new version
- continuing to shepherd Debian and Ubuntu packages
Patrick:
- essentially all I did was unify things
- previously it had been two or three tools
- it's just one
Allison:
- even the syntax seems more regular
Patrick:
- there are more pieces available in NQP-rx
- Rakudo's -ng is now master
- the old master is now -alpha
- we took a big hit on spectests, but they seem to be coming back quickly
- 5000 tests pass on trunk now
- we have 16k or 17k we haven't re-enabled; they make the spectest slower
- Jonathan thinks we may pass 25,000 tests now
- that's great, considering where we were a week ago
- I redid Rakudo's container, value, and assignment module
- previously variables held values directly
- now they contain reference PMCs
- that cleaned up many things
- we use more PMCs, but now we don't clone and copy as much
- we move references around more
- seems closer to how Perl 6 handles things
- was much easier than I expected
- updated the NQP-rx regex engine and built in constant types
- handles Unicode character names
- reclaims plenty of tests
- answered lots of questions for people adding things into Rakudo
- prioritizing other people writing code over writing code
- increases our developer pool; seems to be working well
- new release of Rakudo planned for tomorrow
- don't know how many tests we'll pass, but it should go well
- plan to put in a few things like
sort and grammars over the next week - then I'll review the RT queue to find bugs and (hopefully) closeable bugs
c:
- working on GC tuning
- also working on String PMC tuning
- working on built-in types and their behavior as classes and parent classes
- the multidispatch bugs in particular I hope to solve