Perl 6 Design Minutes for 31 December 2008

chromatic on 2009-01-10T22:27:32

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 Whatevers 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 Whatevers 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:

  • not very Perlish

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