Perl6 Summary for the week ending 2002-09-01
    Well, it's been a week. Damian came to London and made our heads spin;
    perl6-language erupted in a flurry of interesting, high signal/noise
    threads; Parrot reached its 0.0.8 release; Larry made many of his
    wonderfully unexpected but obviously *right* interjections and the world
    kept on turning.

    So, we'll kick of with perl6-internals as usual.

  DOD etc
    The 'elimination of garbage collection handwaving' thread continued as
    Nicholas Clark asked a hard question about garbage collection and dead
    object detection (DOD). As far as Nick could tell, it seems that `if we
    have unrefcounted "deterministic destruction" objects somewhere freely
    in the GC system, then we'll be needing a DOD run after every statement'
    and he noted that `All ways of doing deterministic destruction seem to
    have considerable overhead'. Sean O'Rourke wondered if we could use a
    hybrid `full GC + refcounts where needed' scheme, but Juergen Boemmels
    pointed out that refcounting would be contagious. Anything which
    contained a reference to a refcounted object would need to be refcounted
    in its turn...

    Meanwhile, Mike Lambert wondered why we needed to promise deterministic
    destruction in the first place and proposed a couple of schemes to deal
    with the canonical `filehandle' case. Sean O'Rourke and Steve Fink both
    came forward with cases where deterministic destruction proved useful,
    and where Mike's scheme didn't really work. And that's where the thread
    came to rest. I have the feeling that it, or a thread like it, will be
    back.

    http://makeashorterlink.com/?K11642DA1

  Dynamic Keys
    Tom Hughes, who has been doing good work on keyed access wondered about
    dealing with dynamic keys, and proposed a way forward. Dan asked whether
    Tom had looked at the proposed ops in PDD06, and pointed out that
    dynamic keys didn't necessarily need to go the whole PMC hog. `They're
    our internal structures--we can screw with them as we need :)'. Tom
    pointed out a few issues with the PDD06 op set, and proposed a few more
    ops with a (hopefully) consistent naming scheme. So far he's had no
    answer to the questions he raised in that post.

    http://makeashorterlink.com/?P12621DA1

  Perl6 Test Failures
    Steve Fink wondered about all the test failures he keeps seeing for Perl
    6; he doesn't want to go trying to make a language neutral regex engine
    play nicely with the Perl6 engine when that engine is in such a state of
    flux. Sean O'Rourke suggested nailing down some calling conventions and
    then both teams could code to those conventions. Steve pointed out that,
    so far, he knows of at least 5 attempts at a regex engine in parrot.
    Leopold Toetsch suggested Steve try the tests again, forcing a grammar
    rebuild, and the test failures got all better.

    http://makeashorterlink.com/?R23631DA1

  Regex status
    On Wednesday, Dan wondered where we were with Apocalypse/Exegesis 5
    compatible patterns/rules/regexes. Sean O'Rourke told him. (Answer:
    Still some way to go, but making good speed.)

    http://makeashorterlink.com/?U14651DA1

  Counting down to 0.0.8
    On Thursday, Jeff Goff posted his timetable for 0.0.8, `Octarine'
    release of Parrot, complete with a 25 hour code freeze. Markus wondered
    if using a GMT timetable might be more friendly for every one who wasn't
    on the East Coast of the United States. Parrot actually saw release on
    Monday September the second, which is slightly outside the scope of this
    summary, but I'll let it sneak in anyway.

    http://makeashorterlink.com/?Z55612DA1

    http://makeashorterlink.com/?A16623DA1

  An `Oops' moment.
    Leopold Toetsch found an interesting bug with the GC system interacting
    with initialization. examples/life.ar.p6 is a Perl6 implementation of
    Conway's Life, which has a rather lengthy initialization phase, after
    which it checks the @ARGS array, which is conventionally placed in "P0"
    at startup. But there's a catch. By the time it comes to make the check,
    @ARGS has been garbage collected. Peter Gibbs posted a quick fix patch,
    and Mike Lambert stuck his hand up to being a `lazy bum', but reckoned
    that Steve Fink's fixes should solve the problem.

    http://makeashorterlink.com/?U27631DA1

  Various changes to IMCC
    Whilst `idly toying' with IMCC, Steve Fink made a bunch of speculative
    changes, bundled 'em up in a patch and offered them to the list. I'm not
    sure what people thought of the changes, but the thread morphed into a
    discussion of generating conditional makefiles and making sure that IMCC
    and the other tools needed to get the Perl6 compiler working were as
    portable as possible. Mike Lambert pointed out that it may make sense to
    have the files generated by bison/flex checked directly into the
    repository, since then those tools wouldn't be needed except by people
    who go messing with the grammar.

    http://makeashorterlink.com/?F28652DA1

  Concatenation failing
    Leon Brocard (phew, I was worried I was going to have to run his
    questionnaire this week) found a bug where concatenation fails
    occasionally leaving no clues as to why. He attached some sample code
    which illustrates the problem. Peter Sinnott noted that Parrot seems to
    be getting confused about the length of the strings involved. Peter
    Gibbs meanwhile offered a patch and Mike Lambert reckoned it fixed a bug
    in his code, but couldn't for the life of him work out why. Peter
    reckons it has to do with "unmake_COW" resizing the allocation and
    causing confusion elsewhere. I get the feeling that what we have now is
    a `symptomatic' fix in search of a fix for an underlying issue. But I'm
    just a summarizer.

    Markus Laire found what he thinks might be another bug, but I've no idea
    if it's fixed by Peter Gibbs' patch.

    http://makeashorterlink.com/?N69623DA1

    http://makeashorterlink.com/?V3A623DA1

  IRIX64 alignment problem
    Steven McDougall chased down a bug causing t/pmc/perlhash.t to throw a
    bus error, but wasn't at all sure how to go about fixing it, and asked
    for advice. Bryan C. Warnock offered a few pointers, as did Peter Gibbs,
    but we don't have a fix yet.

    http://makeashorterlink.com/?M3B615DA1

Meanwhile, in perl6-language
  Prototypes, grammars and subs, oh my!
    Thom Boyer wondered what "while"'s signature would be. He'd considered
    "sub while (bool $test, &body);" and "sub (&test, &body);" but neither
    really fit. Larry agreed and offered

        sub while (&test is expr, &body);

    and then, reaching deeper into his bag of tricks, he pulled out the
    wonderful/scary

        sub while (&test is rx/<expr>/, &body);

    (Think about that for a moment. What is proposed that you'll be able to
    specify a grammar for your functions argument list, which is definitely
    something that made *me* sit up and take notice.) Damian sat up and took
    notice too, offering some refinements and did some thinking aloud.
    Damian suggested that maybe the prototype should look like "sub while (
    &test is specified(/<Perl.expr>/), &body);". Damian also suggested
    blurring the line still further between statements and expressions by
    having the likes of "for" return a value, and had some thoughts on
    multimethods. Trey Harris also offered some more comments on
    multimethods.

    All of which leaves me looking forward with bated breath for Apocalypse
    6.

    Quote of the thread: "The whole point of making Perl 6 parse itself with
    regexes is to make this sort of stuff easy." -- Larry

    http://makeashorterlink.com/?H1C632DA1

    http://makeashorterlink.com/?E1D623DA1

  Rule, rx and sub
    Deborah Ariel Pickett summarized the state of her understanding of the
    difference between "rule" and "rx" and wondered if there was any case
    where

        ... rule ...

    and ... rx ...

    (given the same "..."s in both cases), lead to valid, but different
    semantics. Uri Guttman thinks not. Damian thinks so, and provided an
    example. (It was joked, on the London.pm mailing list (by Damian
    himself) that Damian is currently our only real, live Perl6
    interpreter.). Luke Palmer raised a red flag about Damian's example;
    Damian thinks it wasn't a red flag, but left it to Larry to adjudicate.
    This also provoke a certain amount of discussion about the philosophy
    behind some of the design decisions so far.

    Glenn Linderman wondered if "rx" shouldn't be respelled, as the term
    `regex' is being deprecated. Damian suggested that "rx" actually stood
    for `Rule eXpedient', but I'm not sure he convinced anyone (himself
    included). Ever the linguist, Larry observed that `we can tweak what
    people mean by "regular expression", but there's no way on earth we can
    stop them from using the term.' and that, no matter how many editions it
    goes through, Friedl's book is always going to be called *Mastering
    Regular Expressions*. So, Larry is `encouraging use of the technical
    term "regex" as a way to not precisely mean "regular expression".'

    Piers Cawley raised a question about when "}" terminates a statement and
    got it wrong. This subthread led to a short discussion on good Perl 6
    style. Damian told us that `Any subroutine/function like "if" that has a
    signature that ends in a &sub argument can be parsed without the
    trailing semicolon', which I don't remember seeing in any Apocalypse.
    This led to a discussion about what was legal in a prototype specifier,
    ending when Larry told us that it'd be possible to specify a grammar as
    a function's prototype.

    http://makeashorterlink.com/?G3F656DA1

    http://makeashorterlink.com/?C10753DA1

    http://makeashorterlink.com/?V21742DA1

    http://makeashorterlink.com/?C22751DA1

  Auto deserialization
    At the root of what turned into a large thread, Steve Canfield asked a
    deceptively simple question: `[Will] code like this Do What I Mean: "my
    Date $bday = 'June 24, 2002'"'? We weren't entirely sure what he meant
    by that...

    The thread was long, and pretty much unsummarizable, but we ended up
    with the rather pleasant looking "my Date $date .= new('Jun 24,
    20002')", the idea being that, because $date is known to be a "Date",
    even if it's undefined, then it's possible to make a static method call
    on it. The response to this suggestion spilt over into the next week,
    but `favourable' would be a good description of it.

    http://makeashorterlink.com/?P23712DA1

    http://makeashorterlink.com/?M14721DA1

  Hypothetical synonyms
    Aaron Sherman wondered if he would be able to write

        $stuff = $field if m{^\s*[
            "(.*?)"     {let $field = $1} |
             (\S+)      {let $field = $2}]};

    Larry thought

        my $stuff;
    
        m{^\s*[
            "$stuff:=(.*?)" |
             $stuff:=(\S+)
        ]};

    was a better way of doing it, saying that he saw no `particular reason
    why a top-level regex can't refer to variables in the surrounding scope,
    either by default, or via a :modifier of some sort.'

    Uri Guttman, in possibly the first ever Perl 6 golf post (he denies it's
    really golf), suggested a way of shortening the pattern further, and
    Larry trumped him by shortening it to "my $field = /<shellword>/", which
    led Nicholas Clark to wonder about oneliners along the lines of "my
    $data = /<xml>/" and wondered if the Perl regex engine would be faster
    than using "expat". Nick also wondered if Perl 6 would give shorter golf
    solutions than Perl 5.

    There was quite a bit more in this thread, but my summarizing skills are
    failing.

    http://makeashorterlink.com/?X15721DA1 -- Thread starts here, it's
    jolly good.

  Does ::: constrain the pattern engine implementation
    Deven T. Corzine wondered if the presence of ":::" and friends in the
    pattern language meant we'd constrained the possible implementation of
    the pattern engine before we'd started, and if we could implement
    something that didn't do backtracking. General opinion seemed to be that
    we couldn't avoid backtracking, but Deven wondered if it wouldn't be
    possible to use a non backtracking implementation for some special
    cases. The consensus appears to be `If you build it, and it's faster, we
    will come'.

    http://makeashorterlink.com/?N16733DA1

  Backtracking into "{ code }"
    Ken Fox wondered if

      rule expr1 { <term> { /@operators/ or fail } <term> };

    and

      rule expr2 { <term> @operators <term> }

    were equivalent. Damian thought not, and added that "expr1" should
    probably be rewritten as "rule expr1 { <term> { m:cont/@operators/ or
    fail } <term> }". Larry says that we *will* backtrack into subrules.

    Again, the whole thread is worth reading if you're interested in the
    rules/patterns/regex engine.

    http://makeashorterlink.com/?D67741DA1

  Prebinding questions
    Philip Hellyer asked a bunch of questions sparked by Damian's talk about
    Perl 6 to London.pm (at the Conway Hall no less, London.pm knows how to
    find appropriate venues). Damian answered them.

    http://makeashorterlink.com/?E38721DA1

  "@array = %hash"
    Nicholas Clark noted that "@array = %hash", for a hash of n elements
    would return an array of n pairs. The Perl5 style, returning a list of
    2n elements, keys and values interleaved would be "@array = %hash.kv".
    All this led Nick to wonder what happened in the other direction.
    Obviously "%hash = @list_of_pairs" was going to do the right thing, but
    what about "%hash = @kv_array". And, more worryingly, what about

       %hash = ("Something", "mixing", pairs => "and", "scalars");

    It turns out that the @kv_array case will Just Work, and the last case
    will cause discussion to break out. Damian thought that the example
    above would throw an error because there are 5 elements in the list.
    Another school thought that, because PAIRs are first class objects in
    Perl 6, the code should work, with one of the keys of the hash being the
    pair "(pairs =" 'and')>. Damian thought not, and discussion ensued. I'm
    afraid I'm not entirely well qualified to summarize this thread as I'm
    one of those who thinks Damian is wrong, or at least, not yet
    sufficiently correct. However, for now, the state of the design is such
    that pairs are `special' and it takes an effort of compile time will to
    use them as keys (or values come to that) in a hash.

    http://makeashorterlink.com/?G19752DA1

  Regex stuff
    Choosing a deliberately vague subject line in an effort to give the
    summarizer a headache, Piers Cawley asked a question about binding to
    numeric hypotheticals. It turns out that binding to a numeric
    hypothetical variable in a regular expression is special cased
    (resetting the numeric `counter') and even mentioned in the appropriate
    apocalypse, and the problem that Piers thought he saw doesn't actually
    exist.

    http://makeashorterlink.com/?G6A752DA1

  Atomicness and \n
    Aaron Sherman wondered what "\n" would be translated to in a Perl 6
    pattern. Aaron proposed "<[\x0a\x0d...]+>". Damian thought it was
    "<[\x0a\x0d]>", and Ken Fox thought it would be something like "\0xd
    \0xa | \x0d | \x0a". Personally I think it'll be "[ \0xd \0xa |
    <[\x0a\x0d...]> ]". (I also believe that whoever came up with the idea
    of a two character end of line marker should be taken out and shot, but
    that's another story entirely).

The news from London
    On Thursday Damian managed to deliver his Perl 6 prospectus talk in
    about 3.5 hours. Okay, it *sounds* like a long time, but Damian told us
    that, on average, the talk runs to 5 hours. The 'one question' rule
    introduced by London.pm seems to have worked well. As predicted a whole
    load of lights went on over peoples heads as they started to 'get' how
    the whole thing hung together.

    Anyway, the one question rule led to a bunch of questions about Perl 6
    cropping up on the London.pm mailing list that haven't (yet) been cross
    posted to perl6-language. One interesting question concerned what
    happens when bare/if/while/do/when/etc blocks have "return" in them.
    Damian answered that they throw a 'return' control exception, which the
    control structure catches and re-throws. Piers wondered how you'd go
    about writing your own looping construct and made a couple of proposals
    about the treatment of control exceptions.

    Quote of the London.pm threads: `yImoj Perl javDIch!' which, as everyone
    knows, is the Klingon for `Be Perl6. Now!'.

    http://makeashorterlink.com/?Y3B721DA1

    http://makeashorterlink.com/?E2C752DA1

  Call for assistance
    Next week is the Zurich Perl 6 mini conference, and I won't be there.
    Soon after that is YAPC::Europe 2002, and I won't be there either. This
    week, Damian is in Belfast and will be talking to Belfast.pm about
    stuff, guess what, I'm not there either. If anyone would like to send me
    some Perl 6 related reports for the summary from any of these events I
    would be *enormously* grateful. Thanks in advance.

  Squashing a myth
    You may have come across the `Damian Conway is looking for graduate
    students' meme. I know I have, and I repeated it at one of Damian's
    talks in London. Guess what, it's not true (as I should have realised).
    Damian is no longer associated with any institute of higher learning and
    is not looking for graduate students. Kindly readjust your memeplexes.

In Brief
    Pete Sergeant pointed us all at some work he'd done toward building an
    'operations dictionary' for Parrot. Available at
    http://grou.ch/parrot/index.cgi.

    Over the course of a surprisingly long thread, Steve Lambert, Markus
    Laire and Leopold Toetsch and a few of the usual suspects got IMCC and
    Perl6 compiling properly with Windows.

    Bryan C. Warnock offered a large patch to parrot's glossary.pod; a
    document worth reading. Bryan also PODified byteorder.dev so it would
    show up correctly on http://www.parrotcode.org/docs/. Bryan also added
    POD title blocks to a pile of PODs. Kudos to the docmonster.

    Daniel Grunblatt added conditional breakpoints and watchpoints to the
    Parrot Debugger. Steve Fink also waved a magic wand over the debugger
    and fixed up a bunch of problems. Well done chaps.

    Andy Dougherty wondered about how up to date MANIFEST is. There were 497
    files listed in MANIFEST, but a fresh CVS checkout runs to 2215 files.
    Daniel Grunblatt thinks he's added all the important files to MANIFEST.

    Sean O'Rourke made some big changes to IMCC; newlines within statements
    are no longer allowed, and there's been some `significant changes to
    register allocation and spilling.'

    Bryan C. Warnock wondered about the file permissioning inconsistency in
    the parrot source tree. Andy Dougherty pointed out that it wasn't
    (quite) as inconsistent as it looked; build scripts should be left
    without execute bits so that makefile authors would use the more
    portable "$(PERL) script.pl", which makes no assumptions about the
    whereabouts of perl.

    Peter Gibbs offered a *huge* patch, merging his `African Grey' parrot
    tweaks with the CVS parrot. It's not been applied in CVS, but
    http://makeashorterlink.com/?O1D741DA1 has the details.

    Jason Gloudon wondered about temporary PMCs used in opcodes like "ADD
    Px, Py, Pz", and wondered what "set_pmc" should do in the simple case.
    Sean O'Rourke pointed out that often one wouldn't need to create
    transient PMCs because one could use the specialist string and number
    registers to hold the temporaries. Sean voted for `morph' in the simple
    "set_pmc" case.

    Jonathan Sillito contributed a patch allowing for hierarchical lookup of
    lexical variables in scratchpads, and which makes subroutines into real
    closures (by virtue of the hierarchical lookup up of lexical
    variables...). Warnock's Dilemma applies...

    Andy Dougherty did some cleaning up of the build process, removing lint
    and cruft from the Makefiles and Configure.pl. Hmmm... I wonder how far
    we are from our goal of 'compile a miniparrot, use that to execute the
    more advanced config script, and then compile the full parrot', and
    removing the dependency on Perl to build parrot...

    Now that we have ICU in the repository Angel Faus wondered how we should
    deal with differently encoded strings. No answers yet.

    Andy Dougherty wondered if the time had come to make IMCC build with
    plain old yacc and lex instead of depending on bison and flex. Leopold
    Toetsch reckoned that that would be a good idea and asked Andy for his
    patches.

    Leopold found a bug in "mul", "div", "mod", "sub", "concat" when
    operating on PMCs. So he fixed it. I'm not sure if the patch has been
    applied.

    Jürgen Bömmels got fed up with MANIFEST not being accurate. So he wrote
    an automated test which compares the MANIFEST with CVS/Entries and
    complains if they don't match. I don't know if it's been checked in yet,
    but when it does, let's hope the committer remembers to update the
    manifest.

    Steve Fink has a patch which stops Configure.pl touching files unless
    they've actually changed, and wondered if it would be of any use to
    people not actually working on Configure. Nicholas Clark took the
    opportunity to point us at http://ccache.samba.org/.

    Steve Fink also submitted a flurry of clean up patches, many of which
    look like they'll get applied once 0.0.8 has been released.

    Dan noted that Hashes are an order of magnitude slower to GC than, say
    PerlStrings, and two orders of magnitude slower than PerlInts. Which
    isn't good. Dan wondered if there might be a way to get less GC
    overhead. Steve Fink offered a few suggestions.

    `:/::/:::/<commit> makes backtrack fail current atom/group/rule/match.'
    -- Markus Laire summarizes the various backtracking assertions.

Who's who in Perl 6
    Who are you?
        Miko (pronounced "Mike-Oh") O'Sullivan, Father of Melody, Husband of
        Starflower, Follower of Jesus, Author of The Idocs Guide to HTML

    What do you do for/with Perl 6?
        Participate in perl6-language, generally by suggesting small
        features that I think would make life a lot easier for programmers.

    Where are you coming from?
        I come from the perspective that a) I want things to just work
        without a lot of startup effort on my part b) I believe that things
        can in fact actually do that c) Perl does d) Perl can do so even
        more e) I'm pretty normal in these feelings. Oh, also Blacksburg,
        VA, USA.

    When do you think Perl 6 will be released?
        Put me down for June 6, 2003, 1:37:03 am EST.

    Why are you doing this?
        I'm sort of like a Lab (i.e. the dog) that instinctively jumps into
        a lake: I just must do it.

    You have 5 words. Describe yourself.
        Impatient.

    Do you have anything to declare?
        I declare a lot of public static constants.

Acknowledgements
    Thanks to Gill for putting up with me last night while I sat and pretty
    much ignored everything as I worked on this summary. For some reason,
    perl6-language threads are much harder to summarize well; I *always*
    take longer to write a summary when that list is busy.

    As usual, if you liked this summary, please send money to the Perl
    Foundation at http://donate.perl-foundation.org/ to support the
    ongoing development of Perl.

    This week's summary was funded by the O'Reilly Network, who now pay the
    publication fee for the summaries directly to the Perl Foundation. So, a
    big thank you to them.


-- 
Piers

   "It is a truth universally acknowledged that a language in
    possession of a rich syntax must be in need of a rewrite."
         -- Jane Austen?

Reply via email to