The Perl 6 Summary for the week ending 20030112
... and we're back. Yup, it's summary time again. We'll dive straight in
with perl6-internals (as if you expected anything else).
More thoughts on DOD
Leopold T�tsch posted a test program showing the effects of PMC size and
timing of garbage collection and allocation and suggested ways of
improving the GC system based on the conclusions he drew from its
results. Leo, Dan and Mitchell N Charity discussed this further and
tried a few different approaches to try and improve performance (though
Mitchell did worry about premature optimization). Work in this area is
ongoing.
http://makeashorterlink.com/?Y3EB16513
The Perl 6 Parser
Dan asked about the current state of the Perl 6 parser, wanting to know
what was and wasn't implemented and wondered about adding the Perl 6
tests into the standard parrot test suite. Sean O'Rourke and Joseph F.
Ryan both gave a summaries of where things stood. Joseph also suggested
a few refactorings of the parser to deal with the fluidity of the
current spec (almost all the operators have changed symbols since the
parser was first written for instance).
http://makeashorterlink.com/?I6FB35513
LXR - Source code indexing
Last week I said that Robert Spier had 'started work on getting a
browseable, cross referenced version of the Parrot source up on
perl.org'. What actually happened was that Robert asked Zach Lipton to
do the work. This week Zach delivered the goods which, I must say, look
fabulous.
I'm sure that if someone were to extend LXR so it had a better
understanding of .pasm, .pmc, .ops and other special Parrot source types
then the community would be very grateful indeed. I know I would.
http://makeashorterlink.com/?K10C23513 -- Announcement
http://tinderbox.perl.org/lxr/parrot/source
Thoughts on infant mortality
Piers Cawley offered what he thought might be a new approach to dealing
with the infant mortality problem which got efficiently shot down by Leo
T�tsch. Which led to further discussion of possible answers, and it
looks like Leo's proposed solution involving a small amount of code
reordering and early anchoring will be the one that's tried next. All
being well it won't require walking the C stack and hardware register
set, which can only be a good thing.
Later on, Leo asked if it'd be okay to check in his work so far on
redoing the GC because he was up to 15 affected files and was starting
to worry about integration hell. Steve Fink wasn't sure about one of his
changes, so Leo checked everything else in.
http://makeashorterlink.com/?K41C21513
http://makeashorterlink.com/?S62C23513
Objects, finally (try 1)
Last week I mentioned that Leon Brocard's wishlist for the next Parrot
iteration included Objects. This week Dan posted his first draft of what
Parrot Objects would and wouldn't be able to do. The eleventh entry on
Dan's list (Objects are all orange) seemed to be custom made to please
Leon. There was a fair amount of discussion (of course), but the
consensus was positive.
http://makeashorterlink.com/?S13C31513
The benchmarking problem
Nicholas Clark crossposted to p5p and perl6-internals to discuss the
problems of benchmarking parrot against perl 5. One of parrot's aims is,
of course, to go faster than perl 5. The problem is, how do you measure
'faster'? Nicholas has been working on making perl 5 go faster and was
distressed to find out that using 'perlbench' a patch of his went 5%
faster, 1% slower, 0% and 1% faster, depending on what machine/compiler
combination he ran the benchmark on. Leo T�tsch commented that he'd
found performance varying by over 50% in a JIT test, depending on the
position of a loop in memory. Andreas Koenig commented that he'd come to
the conclusion that bugs in glibc meant that there was little point in
benchmarking Perl at all if it was built with a glibc older than version
2.3 (apparently malloc/free proved to be gloriously erratic...) I'm
afraid not much was actually resolved though.
http://makeashorterlink.com/?L64C22513
Meanwhile, in perl6-language
The discussion of Variable types vs Value types continued from the
previous week. Dan opined that Arrays weren't necessarily objects, which
brought forth squawks from Piers Cawley who pointed out that being able
to do:
class PersistentList is Array {
method FETCH ($index) {
...
}
...
}
would be much nicer than tying a value in the Perl 5ish fashion. Dan
reckoned that delegation would probably be enough which, IMHO seemed to
miss the point. Various other people chimed in to, essentially, tell Dan
that he was wrong, but I'm not sure Dan agreed with them.
Meanwhile, in a subthread sprouting lower on the thread tree, Damian
pointed out that there were two types associated with any Perl variable,
the 'storage type' and the 'implementation type' (see his post for
details, but essentially the storage type is the type associated with
the contents of a variable and the implementation type is the type of
the 'thing' that does the storing (usually one of SCALAR, HASH or ARRAY
-- ie, related to the variable's sigil) specifying a different
implementation type will probably be how Perl 6 does tying.)
http://makeashorterlink.com/?O25C13513
http://makeashorterlink.com/?G66C52513
Array Questions
In a thread that spilt over from the previous discussion about whether
arrays were objects or not, Michael Lazzaro put up a list of example
usages that seem to imply rather strongly that arrays are either objects
or indistinguishable from them and there was general muttering that
being able to overload tied Perl containers in this way was a neat way
of implementing tie semantics. Mr Nobody attempted to restart the left
to right versus right to left argument all over again. There was also
some discussion of the sickness of "my Foo @foo is Foo" (which, in Perl
5ish parlance creates a tied array (using Foo as the tying class) which
can only contain objects in class Foo.) Damian agreed that this was
definitely sick, and that he for one would be making use of it.
http://makeashorterlink.com/?S17C21513
L2R/R2L syntax
Argh! No! It's back and this time it means business. The dreaded
left->right versus right->left thing came back, and this time it was
Damian applying the electrodes to the corpse. Of course, it being Damian
he was instantly forgiven as he came up with the very cool, very low
precedence "~>" and "<~" operators, allowing you to write
@out = @a ~> grep {...} ~> map {...} ~> sort;
Which is, to these eyes at least, lovely. See Damian's post for the full
details. The general response to this was definitely on the 'lovely'
side of the balance, though one detractor did induce a sense of humour
failure on Damian's part. There was also a certain amount of discussion
about whether this was exactly the right syntax to go with the
semantics, but where would perl6-language be without a great deal of
syntactic quibbling? (A good deal easier to summarize). The most popular
alternatives were "|>" and "<|". There was also a certain amount of
discussion of what I can only describe as 'evil' uses of the syntax,
involving arrows going in different directions in one statement. Rafael
Garcia-Suarez earned at least one giggle when he suggested that we just
needed "v~" "^~" and we had our own flavour of Befunge.
There was a fair amount more discussion, mostly thrashing out details
and edge cases.
http://makeashorterlink.com/?Z18C23513
"Disappearing" code
John Siracusa wondered if there would be a perl6ish way of creating code
that was 'the spiritual equivalent of #ifdef, only Perlish'. To which
the answer is, of course, 'yes'. Damian showed off a neat trick (modulo
a couple of pretty typos) with an immediate function that demonstrated
using Perl 6 as its own macro language.
http://makeashorterlink.com/?I19C26513
http://makeashorterlink.com/?I1AC35513 -- Damian's neat trick
In Brief
Jim Radford fixed some typos in the rx.ops documentation.
Who's Who in Perl 6
Who are you?
Steve Fink. Some guy who writes code.
What do you do for/with Perl 6?
The only thing I set out to do was implement a regular expression
compiler. Along the way, I seem to have implemented hashtables,
patched the configuration system, messed with memory management,
implemented some stuff for IMCC, beefed up the PMC file parser,
fixed some problems with the JIT, and a few other things. Then I got
a job and ran out of time to work on parrot, so they made me
pumpking. And I still haven't made it that far with the regex
compiler.
Where are you coming from?
Computer games, originally. First language BASIC, second language
6502 assembly. Then a failed attempt at C, then more successful
encounters with Pascal and 68000 assembly, and then C++. Next, a few
more assembly languages together with SML, NESL, Lisp, Scheme,
COBOL, Tcl, Prolog, and a few others. And at last Perl4 and then
Perl5. Oh, and Java, fairly recently. My day job is now in a
combination of Perl5 and C++, as well as C when nobody's looking.
When do you think Perl 6 will be released?
Probably smoothing the path for other developers and keeping them
motivated. My highest priority is applying (and testing) other
people's patches, since the mostly likely reason for someone to lose
interest is to not have their hard work make it into the
distribution. I would also like to somehow make people's
contributions more visible -- anyone who has contributed anything
significant should at least be able to point to something and say
"Look! I did that! See my name?!"
I said, when do you think Perl 6 will be released?
Obviously Leopold T�tsch. Anyone paying an iota of attention would
know that. Particularly someone who's been writing the summaries,
unless you're stupid or something. Leo's amazing; I don't know how
he finds the time. To accomplish that much, I'd need to be working
full-time about 26 hours a day.
No, really. When do you think Perl 6 will be released?
No, not really. I was originally thinking of Perl6 when I got
involved, but since then the Parrot VM itself has become more
interesting to me. Although I still wish Perl6 development would
pick up -- there's a lot that can be done even with the limited
amount of the language that's been defined. Sean O'Rourke did an
excellent job in a short amount of time, but it looks like Real Life
has drawn him back into its fold, and nobody seems to have picked up
the slack.
Why are you doing this?
Heh. That is the question, isn't it? Making a release is probably
the most concrete measure of how I'm doing as a pumpking, and by
that standard I'm a dismal failure. As soon as we reclaim the
tinderbox (and without dropping any machines off it in order to do
so!) Everything else I wanted to get in is already there.
You have five words. Describe yourself.
No, I don't think so. Maybe I'm wrong, but I know that I personally
had to put aside a lot of the actual coding I was working on in
order to concentrate on making sure everyone else's changes were
being given proper consideration. I'd much rather relieve him of
that burden, and let him continue to exercise his demonstrated
talent at churning out quality code.
Do you have anything to declare?
No. It kind of makes sense, but I remember how I first started by
rewriting a bunch of Dan Sugalski's code, and then seeing most of my
code get rewritten. I used to be disturbed by that, but now I think
of it more as a badge of honor -- it proves that what I wrote was
worth rewriting. Much more so in Dan's case, I suppose, since he
stated up-front that he was merely doing a reference implementation
of a design. Dan's done an amazing job of laying out a design that
hasn't needed to change at its core, and so has been a very
dependable guide to the implementation of the backbone. But even in
my case, I can see a number of ideas that were carried through in
the reimplementation, even if no actual code survived.
(Interestingly, my tests did. Which kind of makes sense if you think
about it.)
Are you finished yet?
Why yes, thank you.
Ahem. Thanks Steve. Really.
Acknowledgements
Another Monday evening, another summary running over into Tuesday
morning. Ah well. Distractions were provided by the usual suspects (Mike
and Sully, our ginger kittens), supplemented this week by a horrible
cold (the compulsion to find a tissue does tend to derail the train of
thought).
Proofreading was once more handled by Aspell and me. This week we even
made sure that the Who's Who section contains the name of the person
answering the questions rather than making you wait 'til the
acknowledgements section.
Speaking of which, many thanks to Steve Fink for his answers to the
questionnaire (well, to the questions he wanted to answer anyway). The
questionnaire queue is now quite empty so, unless a few more folks in
the Perl 6 community send me some answers soon then the Who's Who
section may be going on hiatus. Send your answers (or request the
'correct' question list from) [EMAIL PROTECTED]
If you didn't like this summary, how did you get this far? If you did
like it, please consider one or more 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.
* Get involve in the Perl 6 process. The mailing lists are open to
all. http://dev.perl.org/perl6/ and http://www.parrotcode.org/
are good starting points with links to the appropriate mailing
lists.
* Send feedback, flames, money and or a couple of first class flights
to from London to Portland for this year's OSCON to
<mailto:[EMAIL PROTECTED]> ("Aim high!" they told me.)
The fee paid for the publication of these summarise on perl.com is paid
directly to the Perl Foundation.
The Perl 6 Summarizer disclaims any and all responsibility for the
sanity of his readers; he's having enough trouble hanging onto his own.