The Perl 6 Summary for the week ending 20021110
Far off in distant Newark a figure, muttering something about `Leon
Brocard', shambles across a railway bridge and makes its way into a
waiting room. Time passes. After a while, a train arrives and the figure
shambles on board, takes its seat, pulls a laptop from its bag and
starts to type. This is what it types: `=head1 The Perl 6 Summary for
the week ending 20021110'.
Yes, it's time for another update on the japes and tomfoolery from the
world of Perl 6. We start, as usual, with perl6-internals.
The Myth of Fingerprints
At the end of the previous week, Gregor posted an outline of his
proposal for fixing the fingerprinting issue with dynamic loading. (The
fingerprinting issue is that 'old' .pbc files may break big time when
run on newer Parrots. Ideally we'd like Parrot to refuse to run such
files *before* bad things happen. It's proposed that this be done by
adding `fingerprints' to .pbc to allow for identification by Parrot.)
Leopold T�tsch wasn't at all sure about Gregor's approach, pointing out
that it would have massive speed implications, and lo, the thread got
dragged off in the direction of a discussion of optimizing Parrot for
speed. How did that happen then?
http://makeashorterlink.com/?T12252F62
"on_exit" not portable
Andy Dougherty pointed out that Solaris doesn't have "on_exit", which is
used by Parrot to clean up after itself, and suggested that
interpreter.c be reworked to use "atexit". However, SunOS has on_exit
but doesn't have atexit. It's a quandary. Josh Wilmes suggested
implementing "Parrot_on_exit()" and "Parrot_exit()" in platform.c and
half promised a patch (unless somebody beat him to it.) Leo T�tsch and
Nicholas Clark both said, essentially "Nice idea, go do it."
Dan chimed in, pointing out that the current "on_exit" behaviour seemed
to be there as a workaround for bugs in exceptions, and that fixing
those was probably the better idea. Leo turned off the 'on_exit' stuff,
just as Josh was sending a patch implementing the Parrot_* functions. I
think that, as we now stand, we're back to doing exit cleanup, but using
the portable Parrot_* functions.
http://makeashorterlink.com/?F53246F62
http://makeashorterlink.com/?G14231F62
Should memory be washed?
Peter Gibbs was unsure of the guarantees given by "Parrot_allocate" and
friends regarding the contents of the memory supplied. Apparently, some
code appears to assume that it will get pre-washed memory, while other
code does its own cleaning. Which is right? Leo T�tsch reckons that the
current behaviour (memory is zeroed at allocation time) should be
guaranteed. Dan wasn't so sure that this was a good idea if we go for a
`malloc like' scheme and thought that it could be argued that it was a
bug for any code to assume that the memory it got was zeroed.
Eventual consensus was that the basic allocator should not guarantee
zeroed memory, but that there should be a set of allocator functions
that *do* return zeroed memory. Leo checked in a patch to that effect.
Then they started talking about performance.
http://makeashorterlink.com/?X15224F62
"string_set" is back
Leopold T�tsch has added a 'string_set' function which allows strings to
be recycled instead of having to create new strings every time. This can
lead to substantial speed gains when used appropriately. This led to a
discussion on when it was appropriate to use non destructive assignment
and when to use a destructive set. Somewhat to my surprise, nobody has
yet suggested the lispish "set" is non destructive, "set!" is
destructive split, allowing the Parrot coder to choose. Looks like I
just suggested it here.
http://makeashorterlink.com/?M26225F62
Meanwhile, over in perl6-language
Amazingly, the main topic of conversation this week wasn't the dreaded
operator thread...
Unifying invocant and topic naming syntax
Allison Randal has written an article about Perl 6 topics for perl.com.
`Ralph' read this and didn't appear to like it very much, particularly
the "sub foo ($bar) is given($baz) { ... }" syntax which sets $baz to
the value of the caller's topic. (If you're not sure what I'm talking
about, now would be a good time to read Allison's article. Topics are
great, you'll like them.) Ralph wanted to do "sub foo ($baz : $bar is
topic) { ... }", and supplied several further, terser and terser
declaration forms, "method f ($self : $c : $a*, $b) {...}" anyone?
Allison thought Ralph was barking up the wrong tree, and explained the
thinking behind the topic related syntax and pointed out that Ralph
appeared to be conflating two `independent but interacting features'
with his proposal, but Ralph didn't give up that easily. Eventually,
after comments from Damian and Allison he let the subject lie.
http://makeashorterlink.com/?W59612C52
http://makeashorterlink.com/?P47251F62
UTF-8 and Unicode FAQ
Actually, I lied about the operator thread subsiding. It fragmented. But
at least now the various fragments got their own subjects. In this
particular subthread the whole 'Unicode operators in core' thing got
discussed. There appear to be two camps. The first camp maintains that
Unicode operators in the core means Perl will start looking dangerously
like APL and will need a space cadet keyboard to use. The second camp's
argument for Unicode operators appears to be `Yeah, and your point was?
We only want to use � and �, and isn't it about time the world got with
the Unicode program?'
Me? I'm on the fence. I can see the reasoning behind wanting Unicode
operators, but I'm not entirely sure I like them (the 'email encoding'
problem is my major bugbear...)
http://makeashorterlink.com/?R28251F62
http://makeashorterlink.com/?O29212F62 -- A decent summation from
Michael Lazzaro
Supercomma!
At one point in the UTF-8 and Unicode thread, Larry wondered if he could
raid Unicode for a better character than ";" for separating parallel
"for" loop streams. Michael Lazzaro responded with a couple of
suggestions for different supercommas which would have different
meanings. I couldn't tell you what the symbols are, my mailer rendered
'em as Latin-1 digraphs, neither of which looked much like a comma.
Larry then confessed that he was thinking of changing the declaration of
parallel for loops from:
for @a ; @b ; @c - $a ; $b ; $c {...}
to something like:
for parallel(@a, @b, @c) - $a, $b, $c {...}
Which has the advantage of not messing with the block signature at all,
which Larry reckons should make Simon Cozens happier. Damian pointed out
that doing things this way would probably mean we'd get a bunch of
useful functions for iterating over arrays (and then implemented one
such function). Others followed, implementing various other useful
functions before Damian capped them all with a nicely generalized "zip"
implementation.
Buddha Buck endeared himself to the summarizer with his summary of "for"
loop possibilities. Buddha also included a rather pretty implementation
of "for" as a recursive function, though Damian reckoned he'd not quite
got the signature right.
http://makeashorterlink.com/?T2A212F62
http://makeashorterlink.com/?V6B212F62
http://makeashorterlink.com/?Y2C252F62
http://makeashorterlink.com/?Q2D211F62
The interminable operator thread
`Smylers' is my hero of the week for a message he posted summarizing the
various (12) options for changing the look of operators, with particular
reference to vectorization. Options range from `as we were' to the
`guillemot' option which involves seabirds and a pathological inability
to spell `guillemet'.
http://makeashorterlink.com/?C1E222F62
FMTWYENTK about ":="
Bravely declining to expand the acronym in his subject, arcardi posted a
summary of his current understanding of the behaviour of ":=", the
binding operator, and peppered the post with questions. None of which
got answered this week.
http://makeashorterlink.com/?I5F213F62
Junctions and laziness
Junctions are what we're calling superpositions this week. Piers Cawley
had another crack (the operative word I think, on rereading) at his non
deterministic search algorithm using junctions and a subclass of
Function. Damian, of course, came up with a better possible syntax for
lazy functions:
sub some_func(Num $n) is lazy returns Num {
return $n ** $n;
}
Billy Naylor wondered if a similar notation could be used for memoize:
sub fib(Num $n) is memo returns Num {
given $n {
when 0 { 0 }
when 1 { 1 }
otherwise { fib($n-1) + $fib($n-2) }
}
}
and Damian pointed out that this was covered in Apocalypse 2, but the
name of the property was yet to be decided. Which led to discussion of
appropriate names.
http://makeashorterlink.com/?A10342F62
Primitive vs. Object types
David Whipp was worried about the use of primitive types. He pointed out
that "whenever a value passes through a primitive type, it loses all its
run-time properties; and [junctions] will collapse. I worry that this
could cause very obscure bugs". He also worried that the similarity of
names ("Int" for an object vs. "int" for a primitive) would make such
problems harder to spot, and violated Larry's maxim that `Similar things
should look different'. He proposed that, in order to use primitive
types, a module author should first do something like "use primitives
qw(int)", and that maybe names like "int" should be changed to names
like "_prim_int32".
Dan wasn't entirely sure that David's basic assumption about
properties/junctions was accurate, but Michael Lazzaro pointed out that
this had been strongly implied by things Larry and Damian had said,
though Michael later dug up a reference to Apocalypse 2 which was
ambiguous about runtime properties on primitive types. Dan started
making 'worried' noises about supporting primitive types and Larry,
while still keeping things fluid about what will actually happen,
explained more of his thoughts about them.
Garrett Goebel wondered about the difference between `attribute' and
`property' in Perl 6. I assume everyone would like to know this. The
very short answer goes something like: `attribute' is the Perl 6 term
for an instance variable, a `property' can be thought of as a `yellow
sticky note attached to an arbitrary object'. Dan has a better
explanation which doesn't avoid using a trademarked term.
http://makeashorterlink.com/?A11332F62
http://makeashorterlink.com/?Z12322F62
http://makeashorterlink.com/?N23363F62 -- Dan's attributes/properties
explanation
perl6-documentation was born
On Wednesday, Michael Lazzaro (who has been doing some sterling
documentation work, check out his `introduction to variables and values'
docs, linked below) proposed that now was the time to start documenting
(and finalizing) the detailed design of what we know about Perl 6 so
far. He is concerned that for all the discussion on the language list,
most of the decisions don't appear to be being documented, nor reflected
back in updated Apocalypses and other documentation.
He proposed, therefore, that perl6-language `focus on fleshing out every
last detail implied by Apocalypses 2-N, *in that order*' and hoped that
we could `migrate perl6-language into a list that finalizes aspects of
the design, documents them, and revises them as needed'.
Allison Randal wasn't initially convinced that this was necessarily a
good idea. She worried that Larry (the Official Last Word on Perl 6)
would be snowed under by an RFCesque tide of new documentation, and that
reviewing such a tide would make him lose focus.
At this point, Michael threw the Virtual Coffee Mug.
After a further period of discussion Dan pointed out that the key was to
`Just Do It' (a phrase normally pronounced with four words), so we
created the perl6-documentation mailing list and your summarizer got a
bunch more work.
The thread is long. I've summarized the main line (badly) and now
provide some links to key posts, but if you want more detail I suggest
you follow the first link and read the thread. For those that like drama
and high emotion, the virtual CM chucking post is Michael's response to
Allison's reply. I'm not going to link directly to it; trust me, context
is better.
http://cog.cognitivity.com/perl6/val.html -- vars and values intro
http://makeashorterlink.com/?D24332F62
http://makeashorterlink.com/?H25312F62 -- Dan talks sense
http://makeashorterlink.com/?U66325F62 -- So does Simon Cozens
http://makeashorterlink.com/?R27363F62 -- The tests should be the spec
Meanwhile, In perl-documentation
The new baby got off to a flying start as Michael Lazzaro laid down his
goals for the project. Early discussion centred on the overall structure
of the intended documentation; what formats it should be written in; the
requirements for concrete, executable Perl 6 test cases and the
importance of fluidity. Michael repeatedly stressed that it was vital
that the documentation list retain focus; his goal is that the entire
list should work on one thing at a time.
http://makeashorterlink.com/?E68322F62
Roll call
Michael asked for a quick roll call of who was interested in the
documentation project. As an added bonus, he asked that even the lurkers
put their hands up if they were interested. Surprisingly, some of them
decloaked and did so.
http://makeashorterlink.com/?T29332F62
Project Goals?
Michael formally kicked off the discussion with the question "How can
this documentation project best help with the overall goal of producing
a finished Perl 6?" Answers on a piece of data to the list, do not
attempt to write on both sides of the data at once.
http://makeashorterlink.com/?D2A352F62
Project Start: Section 1
Late on Friday, Michael kicked off discussion of the first section, most
of the discussion of which took place during the following week. Which
is when I'll summarize it.
http://makeashorterlink.com/?C1B355F62
In Brief
Leo T�tsch and Brent Dax have been working on ways of making Parrot GC
go faster by improving the performance of the `destroy' phase.
Andy Dougherty sent in a patch to ensure that the languages/perl6 build
will work without bison. Andy found and fixed a compiler specific bug
introduced by someone using C++ style comments.
Richard Proctor suggested that miniparrot should be called `budgie'.
Leo T�tsch showed off some numbers for the life generations/sec test.
JIT is looking very quick indeed, it's only around 25% slower than a
native C implementation.
Dan's back from Seattle and digging through his mail backlog.
Leo T�tsch has been thinking about regexes/patterns/rules and thinks
that we should reintroduce a regex state object, making regexes
reentrant once more.
Who's who in Perl 6?
Who are you?
Simon Glover
What do you do for/with Perl 6?
Write tests, stomp on compiler warnings, fix bugs (occasionally)...
Basically, I try to help out with some of the tedious but necessary
stuff in order to free up other people to concentrate on design &
implementation.
Where are you coming from?
About this time last year, I was starting to get a bit frustrated at
what appeared to me to be the slow pace of Parrot development, when
I suddenly thought: 'You know, if you gave them a hand, they'd
finish sooner'. So I did (and we haven't... yet. Of course, I've now
got a better understanding of *why* this takes a long time).
I'd also like to add that I'm proof that you don't have to be a C
coder in order to be useful on a project like this...
When do you think Perl 6 will be released?
Depends what you mean by Perl 6 -- after all, we already have a
subset of it up and running on Parrot. Seriously, I think we'll have
something that's genuinely usable and useful well before the end of
2003, even if there are still a few loose ends to tie up.
Why are you doing this?
I like Perl - it matches the way I think. The problem is, Perl is
too slow for many of the things that I'd like to use it for, and too
hard to extend. Parrot should fix both of these problems.
Also, it's nice to see one of my favourite features of F90 finally
make it into Perl :-)
You have 5 words. Describe yourself.
Mild-mannered English computational astrophysicist.
Do you have anything to declare?
All the C I know I learnt from Parrot. (Well, OK, K&R helped too,
but it's amazing how much you can learn from reading other people's
code).
Acknowledgements, requests and general banter
This summary was again brought to you from the 0625 Newark on Trent to
Kings Cross and the 1720 Kings Cross to Newark on Trent trains. It was
fuelled by copious amounts of GNER coffee and, one one occasion, a bacon
and tomato toasted sandwich. I'd like to extend my thanks and best
wishes to Avril Hill, who's been bringing me morning tea for months now,
but who's about to escape the train and start working on Leeds station.
Proofreading services were supplied by aspell and myself. Blame aspell
if it's really terrible.
I'm running short of questionnaire answers. If you've *ever* been
mentioned in a Perl 6 Summary, or if you haven't (yet), please consider
answering the questions Simon just answered and sending them to
<mailto:5Ws@;bofh.org.uk. Thanks.
Now, if we all join in with the chorus:
If you didn't like this summary, what are you doing still reading it? If
you did like it, please consider one or both of the following options:
* Send money to the Perl Foundation at
http://donate.perl-foundation.org/ and help support the ongoing
development of Perl 6.
* Send feedback, flames, money and/or a Schneider 90mm f/5.6 Super
Angulon XL to <mailto:pdcawley@;bofh.org.uk
The fee paid for publication of these summaries on perl.com is paid
directly to the Perl Foundation.
--
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?