The Perl 6 design team met by phone on 31 December 2008. Larry, Patrick,
Allison, Jerry, Jesse, Will, and chromatic attended.
Patrick:
- lots of Rakudo work since the last report
- now passing 765 more tests than two weeks ago
- many little things
- some workarounds to get Perl 6 constructs to work
- Unicode for example
- temporarily in place until we get the full grammar
- loops handle exceptions correctly
- refactoring and revisiting subroutine parameters and variable handling
- some of the existing code is starting to break
- the refactor is going extremely well
- things are much cleaner
- re-reading the Synopses, now I also understand Perl 6's metamodel
Larry:
- you'll have to explain that to me
c:
- I'd like to get one for Parrot too
Patrick:
- don't want to merge in my branch until we can do so without regression
- classes don't quite work now
- that'd be a serious regression
- working on that now
- but the branch has fixed several funny bugs
- probably can close a dozen RT tickets after the merge
- next up are the Hague grant refactors
- added the goal matching syntax from S05
- really understood now why Larry put that in
- also need to sit down and write reports
- don't want to pause my momentum to do that
- in the next three weeks, I'll write a set of documents to describe PCT
- "Here's how to start using it."
Jesse:
- what could help you be or feel more productive
Patrick:
- 800 passing tests in the past few weeks help
- things around the house here help
- running into very few blockers
- begrudging sleep too
Jerry:
- the holiday gave me a lot of time to think about Larry's comments on my first draft
- wrote that down and committed
- lots of positive changes shaping up pretty well in my mind
- need some more reviews
- had a good conversation on #pugs which led to bugfixes and explanations
- will write documents to help new and inexperienced eyes on the documents
- all options have a long description name
- common options have short, single-letter names to allow clustering
- the metasyntax to pass options to subsystems makes more sense now
- devoting myself to S19 entirely
- occasional Parrot builds to make sure nothing's broken
- small bugfixes when I find the time or need a break
Allison:
- finished and merged in the IO branch
- did another branch to make the core IO types subclassable
- otherwise helping other people meet their milestones
- working on calling conventions
- reviewing Reini's install stuff
- getting the GC stuff moving
Will:
- working on the deprecation removal milestone
- trying to rip out as many of those as possible
- poking Allison and others for feedback
- I can be more efficient at annoying you if that's helpful
- trying to get Partcl to run faster
- no matter what I do, it seems to get slower and slower
- the spectest takes four times longer in the past ten days
- getting out of memory errors
- if I fix the memory leak, that time might improve
- generating a lot of PMCs
- lots of memory pressure going on
- hopefully I can pass along lessons learned to other language developers
- none of them seem to be having the problems I've had
c:
- helping remove deprecated features
- working on some bug fixes
- made PGE about a third faster last week
- did some profiling
- will be working on the incremental GC
- don't expect many speedups
Larry:
- returned from visiting relatives in Southern California
- most of my time spent being an oracle to interpret the specs
- elaborated on the meaning of the
Whatever
and hyper-Whatever
terms
- you might distinguish them by their signature
Patrick:
- I no longer have a question about them
Larry:
- Daniel Ruoso found out you can't pass a Capture as a parameter and bind it to a regular variable
- it binds as an item
- so now you assume the backslash on the argument
- otherwise hacked in a few specified things that weren't in the grammar
- fixed a few misparses
- mostly just keeping everyone on track on IRC
- don't have to travel until April
- planning two major projects
- will do a real DFA to replace the faked-up one with tries
- want to cut down memory use and execution time
- also want to move all operators out of the standard grammar into the prelude
- need to teach the grammar about lexical scopes
- then take a snapshot of a lexical scope
- then dump a snapshot of a lexical scope of the prelude so it can start up in that scope
- then move operator definition parsing into the prelude
Jesse:
- had very nice lunch and coffee with Chip
- hearing some ideas about Perl 5 on other runtimes
- nothing fully baked yet
- some prodding at PPI with the idea of transforming Perl 5 code into something that Parrot can run
Patrick:
- the way to handle this is multimethods of the operator that do signature matching?
Larry:
- the two
Whatever
s are different types
- you get
Code
objects when you derive from them
- a normal
Whatever
produces a Code object with a single argument
- a hyper
Whatever
produces a Code object with a slurpy argument
- if you ran a for argument with a slurpy, it'd slurp up all of the arguments
- if we had a regular way to apply a signature to a set of arguments and report how far it gets, the for loop and this subscripting mechanism could use it
- at some level, it would do a multi dispatch
- if you have to introspect the arity of a
Signature
, you're doing something wrong
Patrick:
- Rakudo builds closures for all subscripts
- it can evaluate any
Whatever
s there then and DTRT
Larry:
- pre-thunked closures
- but you want to optimize that
Patrick:
- we don't want to do subscripting that much anyway
- if I assign
Whatever
to a scalar and use that within a subscript, does it work as a term?
- played with having the parser detect a
Whatever
- it set a flag saying "You have to thunk this."
- that doesn't help if it's buried
Larry:
- you may have to put a
|
in front of a variable to get it to pay attention to slice context
- like interpolating an argument list with a scalar variable still a scalar
- unless you explicitly expand that scalar into thunks, it probably shouldn't
c:
- that way lies Tcl's madness
Patrick:
- we're trying to put navigational points through Perl 6's madness
- I need to review the spec
- I'm happy with how slicing works out in Rakduo right now
- ranges of strings are weird
- they don't act intuitively at all
- they're weird to define in terms of autoincrement and autodecrement string magic
- should we try to define ranges on strings not in terms of that on
.HOW
?
- or ranges on single-character strings?
- maybe it's really a
Buf
- inside a regular expression, someone wants to match a byte by doing
\x0..\xFF
- that cycles if you treat it as a range
- unless you do it as a
Buf
Larry:
- the character class should not pay attention to magical increment
Patrick:
- should it be codepoints?
a.._
in a character class is different from a range?
- it's different and weird and hard to explain
- people are having trouble in #perl6 understanding what should and shouldn't happen
- maybe it's trying to be too magical for its own good
Larry:
- maybe one could take a picture of a range that's numeric
- specify them numerically, even in hex
Patrick:
- maybe a range adverb indicating which kind of range you expect
Larry:
- maybe
- if it's ambiguous, it requires...
Patrick:
- it just doesn't seem obvious
- ranges ought to be obvious
- it works great in the numeric range
Larry:
- to use magical autoincrement, you could say
a, b, c ...
which creates a closure
- it doesn't tell you where to quit
- but presumably it's lazy
- it's a thought
- not sure it's a good thought
Jerry:
- ran across a couple of things in S19 development
- Unicode
- I'm no expert, being an American
- there's the encoding of a file you're reading to execute
- or something typed on the command line to execute via
-e
- then there's setting your standard filehandles for a specific encoding/charset
- I'm not sure how to address those
- am I instructing the parser with
-e
to be Unicode-aware?
- is this something overall to Perl 6 programs?
- the same goes for filehandles
Patrick:
- the encoding specifies how the bytes translate into codepoints
- the charset maps those to glyphs or graphemes
- if I use ASCII, my charset only goes up to codepoints 127
- I use a fixed 8-bit encoding
- if I use Unicode, my codepoints go up high
- I have a range of charsets to use
- people tend to specify an encoding
- it's ASCII, ISO-8859-1 (Latin-1), or UTF-8
- most people mean UTF-8 when they say Unicode now
- that's what web sites tend to use
Jerry:
- Windows uses UCS-2
- whether it's long or not, every character takes up that amount of space
Larry:
- Perl 6 doesn't really care about the encoding
- we just have to know what it is
- as soon as things get into the language, everything has "Unicode semantics", whatever that means
- we have to know how to get into that semantics
- without metadata, we guess or throw up our hands in despair
- it comes down to metadata
Jerry:
- could that fit in a file, directly after a shebang?
Larry:
- that's probably the least of our worries
- the filename, the command line, the places where POSIX ought to be shot
- the problem basically is that POSIX doesn't give you the metadata
- very weakly, they pretend like locales are sufficient for that purpose
Jerry:
- for my working draft, should I just say that Perl 6 is a POSIX girl living in a POSIX world?
Larry:
- assume that you're in a UTF-8 world
Jerry:
- as far as setting filehandle encodings, that's just pass to Perl 6, the program, and not a specific subcomponent?
Larry:
- if it needs specification in the program, it's specified to
open
or as a pragma
Jerry:
- suppose I'm outputting a text file from the command line
- I want to tell Parrot that I want a UTF-8 or ASCII encoding
Larry:
- I don't think you'll go wrong in the future if you assume everything goes into UTF-8, or some BOM-marked UTF-16 or -32
- let the other people define themselves as departures from that default
Patrick:
- I agree
- UTF-8 is well known and capable enough for most things
- do everything as deltas from that
Larry:
- this is our chance to do everything right
- let's not choose the wrong default
Jerry:
- I'd like to allow intermixed options and values on the command line
- we can't say
perl foo.pl -w
Jesse:
- how do you differentiate running foo.pl and handing it the
-w
flag?
Jerry:
- also not clear on negating an option
- if the option is
:name
, you can negate it with :!name
- that's the history character in certain shells
:/name
is a workaround
- Larry suggested
:0name
Patrick:
- Rakudo doesn't implement that yet
Jerry:
- do we need more than one?
- should we get rid of them?
- short arguments are always single character
Jesse:
- how about prefixing long options with
no-
Jerry:
Larry:
- you might as well use
\!
- at least it's not ambiguous with the rest of the options
Jesse:
- once you're into long words, you're into readability
Jerry:
:no-name
looks different to me
- it's actual Perl 6 syntax
- that should set the value of something called
no-name
- rather than negating the value
Larry:
- do what I do
- change your history operator
Jerry:
- Perl 6 is rewriting history now?
Patrick:
- at some point, if you really want negation,
:name=false
- you're there
Larry:
- shells do not pay attention to history characters without alphanumerics after them
- maybe you can swap the bang and the colon
- I wouldn't be surprised if someone didn't invent a shell which did that though
Jerry:
- this will be the default argument processor for all user-defined programs
- I want it to work for them too
- I'm replacing Getopt::Long here
- I can't do
+name=value
- should evaluate to
name = value but false
Larry:
- I hesitate to propogate the brain damage of the plus and minus to colons
Patrick:
- I'd prefer not to see it at all
Jerry:
- bang-dash, bang-double-dash, or bang-colon?
Patrick:
- as long as I've been doing Unix command lines, those pluses bug me
Larry:
- using them for beginning and ending sort fields, I can never remember which comes first
- same with
@+
and @-
in Perl 5, and it's my language, darnit!
- I'm pretty okay with the slash
- we're using them in the sense of HTML tags: the end of a metamarker
:/
means the opposite of the beginning of something
Jerry:
- it seems that zero will work
Larry:
- it will, but it disappears against the word
- it's not very visually distinctive