This file is part of the Perl 6 Archive

Note: these documents may be out of date. Do not use as reference!

To see what is currently happening visit

The Perl Summary for the week ending 20021215

Hi, and welcome to the first summary prepared on my shiny second hand TiBook (no, it wasn't a gift from a grateful summary reader, it was bought from a friend who was upgrading, gifts from grateful summary readers are, of course, still welcomed).

So, kicking off with perl6-internals

Curses Life

Or should that be "Curses! Life!"?

Around the end of last week Leon "Namecheck" Brocard announced that he'd made use of the Native Call Interface to implement a version of life.pasm that used the curses library for drawing. Dan "Dan" Sugalski told Namecheck that he was really scary and muttered something about fixing up some of NCI's `register stomping' behaviour. Piers "The Summarizer" Cawley said that he'd suggested that Namecheck try getting Readline working next and then, once he'd got the zmachine loader and opcodes up and running, Dan would be able to take a well earned rest by playing through the Zork adventures without leaving Parrot.[]

logical_not issue.

The discussion of how logical_not should work rolled over from last week with David "Ruby" Robins mounting a spirited defence of simple booleans and successfully convincing Dan of his righteousness.

Tinderbox Summary

Steve "Release Boy" Fink got tired of `endlessly clicking on tinderbox links' so he wrote something to do it for him, summarized the results of his investigations to the list and wondered if fixes for the problems were in hand. A few of the machines in the tinderbox had their parrot directories zapped and reinstalled before starting their round of rebuilds once again, but there wasn't much reporting back of the success or failure of these operations.

IMCC and Labels

Leopold "The Patchmonster" Tötsch warned that, with the next set of changes the previously informal rules about label naming would become formal, enforced rules.

Buffer/PMC unification

The Patchmonster announced that he would soon be starting on unifying Buffers and PMCs into a common Parrot Object (or PObj) and gave a thumbnail sketch of the changes he expected to be making. Pretty much every subsequent message in this thread came from the Patchmonster, though Dan chimed in at one point with a correction. The Patchmonster told him he was wrong and carried on as before. Way to go Patchmonster. -- Start announcement, Monday -- Done announcement, Wednesday

A work list! (Coming soon)

Dan announced that he was working on compiling a list of things that need doing and asked for suggestions from everyone of what they wanted to see. Gopal "Five" V wanted Object support; Nicholas "Not Nick" Clark offered a longish list including such obvious items as "a pony" and "Quantum Larry (writing the apocalypses in parallel universes in constant time)" as well as a long list of rather more practical requests (see the link for details); the Patchmonster had a list too.[] -- (Not Nick)'s list -- The Patchmonster's list

Naive .const directive for IMCC

Gregor "Jako" N. Purdy had a crack at adding a .const directive to IMCC and sent his patch to the list (he didn't commit the change because he doesn't `own' IMCC). The Patchmonster thanked him and set about implementing something based on Jako's patch and his recent lexical changes and using the same syntax.

=head Parrot v.0.0.9 feature freeze

Release Boy announced that 2002-Dec-14 at 20:00 GMT would see a feature freeze leading to a release on the following Wednesday. He also said that he'd be compiling a list of changes between 0.0.8 and 0.0.9 and noted that the release would still go out even if the tinderbox wasn't completely green, but that he'd greatly appreciate improvements in that area. Tanton "This nicknames in the summary thing started off as a nice idea, but now it's getting silly so I'll stop" Gibbs noted that the `multiarray' problem that was causing problems in the tinderbox seemed only to fail with --gc-debug turned on and set about investigating it. Work in this area is ongoing.

Jürgen Bömmels asked that patch #18379 get added before the freeze as it brought languages/scheme much nearer to being a real functional language and Dan obliged.

The feature freeze went ahead on time, the only patches allowed are bugfixes and warnings eliminations until 0.0.9 is released.


Dan has added support for monkeying with a hash of PMC properties. Well, he thinks he has, but he hadn't written any tests so he wasn't entirely sure. Simon Glover promptly found a bug and Leo patched things up. Simon also wondered if the fact that hash keys are passed by reference is a bug or a feature. Feature says Dan.[]

More Jako changes

Gregor N. Purdy checked in a huge rewrite of the Jako compiler, which has been ported to IMCC. Apparently there's a fair bit of cruft left in the jako directory, but there's lots of cool stuff in there too. Gregor then announced the addition of native calls via thunks (what is a thunk? anyone?) It wasn't quite working when he first announced it. Leo narrowed it down to a GC bug, the effect of which he minimized but apparently there's was issue with Parrot's 'toCstring' function which is now resolved, but which will require changes in a host of places to fix properly.


Robert Spier pointed at the CVS Monitor installation on and recommended that people check it out. Dan was impressed (So am I, it's very spiffy) and wondered if there was somewhere which gathered all such useful links together, and Brent Dax pointed out just such a place.

Meanwhile in perl6-language

Right-to-left pipelines

During the discussion of purge (which became part) Stephane Payrard changed the subject to 'right-to-left pipelines' and proceeded to make the unsupported assertion that left to right pipelines were a good idea and wondered what syntactic tricks would be needed to support them. (I'm afraid I'm not exactly impartial on when it comes to summarizing this thread; personally I think that left to right pipelines supported via anything more than @ary.grep(...).map(...).sort(...) are a really bad idea, especially if the tools needed to support them mean a change in the current right to left syntax.)

Luke Palmer thought there might be something in the idea; apparently he's been playing with Mathematica which has similar functionality and which he found to be useful and Arcadi Shehter liked the idea too. Adam D. Lopresto pointed out that, with some appropriate methods on the Array class that left to right pipelines could be handled with a chain of method calls. Damian pointed out that Adam's proposed behaviour didn't quite work because method calls needed to have their argument list in brackets. Simon Cozens started a digression into the way Ruby does this sort of thing by wondering if there was any way to get 'round that when passing a block. Damian thinks not. (Essentially it's to do with when things are known. Parsing happens at compile time, at which time Perl generally doesn't know the class of an object on which a method is being invoked, so it can't know the prototype of the method, so you can't omit parentheses around the method arguments, param checking only happens at runtime when methods are involved.)

Somewhere in all this Damian pulled then out of his bag of tricks:

   @out = @in then map { foo }
              then grep { bar }
              then sort { $^a <=> $^b };

Ralph Mellor suggested binary -> possible syntax for left to right pipelines. -- Ruby Digression starts here.

Purge: opposite of grep

Another thread that ran over from last week (Sadly, in the real world, threads don't start neatly on a Monday and end on a Sunday night. Ah well.) Ken Fox had asked Damian to explain some stuff about his proposed part mechanism so Damian provided an explanation. Later in the thread, Smylers said something that Damian deliberately requoted a huge chunk of "because it's so very right". -- Damians requote of the previous link

Hashkey context/Str context

It appears that the `purge' thread can be thought of as the driver thread for this week. In this subthread Dave Storrs asked for confirmation that, in Perl 6 hash keys could be any datatype and that one should not expect them always to be smashed into a string. The answer is that the default will be to downcase everything to a string in a hashkey context, but that you would be able to declare different sorts of hash (e.g. my %hash is keyed(Object)) and get different hashkey behaviour.

Dave went on to wonder if all this discussion of typed declarations meant that type declarations was going to be required. Answer: Hell no, type declarations are there to allow the compiler chances for optimization and for setting up multiply dispatched functions and methods (that's my reading of it anyway).

Partially Memoized Functions

Smylers wondered about writing a function that would be partially memoized, giving as an example a function for getting the number of days in a month where, he argued, things would only really need to be memoized for the 'February' calculation. It was thought that, in the particular example given, there wasn't really much point in not memoizing the whole thing. Then Damian Conway reached into his Big Bag O' Perl 6 tricks and came up with a lexically scoped, named, cached subroutine, which made Adam Turoff gasp and stretch his eyes, and wonder if that would work. Answer: Yup, named subs, even lexically scoped ones are only compiled the once (and they're not closures).

Usage of \[oxdb]

Nicholas Clark played the `ask an awkward question' game and wondered what the Perl 6 "" parser would do when presented with what appears to be a $() interpolation sequence inside some other double quoting construct, and offered three options. Luke Palmer thought that the first of Nicholas's options was what would happen because "The Perl 6 parser is one-pass now". Dan wasn't sure that the parser is one-pass. Joseph F Ryan thought that it should be, but added the caveat that it doesn't actually exist yet...

Stringification of references

In another continuation (reopening) of an old thread, Michael Lazzaro asked for a decision on how References were to be stringified. And didn't get one. However, the thread morphed into:

Comparing Object Identity

This thread looks set to run and run. Luke Palmer pointed out that, in many OO languages there's a distinction between "equal" and "same", and wondered if Perl needed another equality operator, proposing === for the task. Michael Lazzaro came down on the "Yes" side, and suggested :=: as another option. Michael Schwern thought that this would be better handled with a method, proposing sameas for the task, and Dan Sugalski agreed with him. Damian pointed out that that's what the universal id operator was for; you should just be able to do $ == $ But John Siracusa reckoned that id was badly named, as it was the kind of method name that would be more useful for user code.

I'm afraid that the waters here are still rather muddy, but it looks to me like we're heading in the direction of a method on Object to determine object identity. -- I'm not sure how this relates to the subject at hand, but it's a good Larry moment.

Everything is an Object

Michael Schwern reminded everyone that, in Perl 6, everything is an object and pointed out some of the consequences this has for language design (chiefly, that it has the potential to "stem the tide of new grammar"). As with most stuff from Schwern's cursor his post is worth reading, I commend it to you. Larry commented that "About the only things that have to be truly built-in to Perl 6 are lambda and the regex engine. Everything else is negotiable." and noted that he counted method dispatch under "lambda".

For some reason this thread led back to the 'left to right pipelines' thing, during which Piers Cawley got rather wound up.

In Brief

Gregor is looking at adding native calls to Jako and thought he needed changes to IMCC to get things working, but the Patchmonster pointed him toward a workaround.

Leo Tö checked in some changes allowing gdb to inspect parrot registers inside JITted code (with some caveats about N and I registers). Way to go Leo.

Simon Glover made Nicholas Clark a happy man by checking in an interpreter.c bugfix that made at least one FreeBSD box a happier computer.

David Whipp wondered if it'd be possible to do value based multi dispatch. Adam Turoff thought that it'd be an accident waiting to happen while Damian said that it was being considered and that "we're still weighing our courage against our sanity on that idea. ;-)"

Rich Morin wondered about using regular expressions as sequence generators. Most people seemed to think it wasn't such a good idea in the general case and Luke Palmer suggested using junctions, which appear to fit the bill rather neatly.

Who's Who in Perl 6?

  • Who are you?
  • Andy Wardley

  • What do you do for/with Perl 6?
  • Not a great deal, just hanging around, mostly lurking, occasionally asking stupid or frequently asked questions. I designed the Parrot logo (which I'm rather pleased with), but it's hardly a monumental contribution to getting Parrot or Perl 6 out the door.

  • Where are you coming from?
  • Guildford, England. I've been programming computers for about twice as long in my life as I haven't (answers on a postcard). Started with a ZX81 and things went downhill from there, through assembly, C, C++ and finally ending up happy and (mostly) content at Perl's door (although I have been known to visit Ruby's house on occasion).

  • When do you think Perl 6 will be released?
  • On a tuesday, shortly after lunch.

  • Why are you doing this?
  • Because you asked us to send you our answers. Oh, you mean why am I doing Perl 6? Well, like I say, I'm not really doing much right now. I love Perl and I'm excited to see it evolving (or should that be revolting?). But mostly I'm just hanging around with the smart kids, hoping some of it rubs off on me.

  • You have 5 words. Describe yourself.
  • Someone who needs more than 5 words.

  • Do you have anything to declare?
  • Nothing officer, I've been in Amsterdam on business, honest.


Once again this summary has mostly been written in a first class carriage travelling between London and Newark, usually behind schedule (a bit like the summaries in fact).

Proofreading was handled by a spell checker and me. I really should stop running so close to my self imposed deadlines that I don't have time to get the summary looked over externally.

Thanks to Andy "Brain out of control" Wardley for his questionnaire answers this week. My answer queue is down to two sets of answers, so if you think you should, please answer the questions and send your answers to mailto:[email protected]

And now, the chorus:

If you didn't like the summary, what are you doing still reading it? If you did like it, please consider one or more of the following options:

  • Send money to the Perl Foundation at donate and help support the ongoing development of Perl 6.
  • Get involved with the Perl 6 process. The mailing lists are open to everyone, and are good starting points with links to the appropriate mailing lists.
  • [email protected]'>Send feedback, flames, money and or a decent pair of headphones to mailto:[email protected]

The fee paid for publication of these summaries on is paid directly to the Perl Foundation.