This Week's Summary
Piers Cawley <[email protected]> Mon, 12 May 2003 18:17:24 +0100
| Newsgroups | gmane.comp.lang.perl.perl6.announce |
|---|---|
| Message-ID | <[email protected]> |
The Perl 6 Summary for the week ending 20030511
PEPPERPOT 1: Ooh look! It's another Perl 6 summary!
PEPPERPOT 2: Well I never did! What's in it this week?
PP 1: Ooh, I don't know. Shall we have a look?
PP 2: Ooh yes.
Following a convoluted animation sequence involving surreality, fig
leaves, classical statuary, and a cardboard cutout of an orange Leon
Brocard, the camera pulls back to reveal a large bearded man, sat in a
leather chair with a huge Apple PowerBook on his lap. PIERS looks from
the screen to the camera and says
PIERS: I never wanted to be a summary writer. I wanted to be a
lumberjack, leaping from tree to tree as they float down the mighty
rivers of Briti... Ah... *ahem*.
PIERS comes to a stammering stop as he realises that quoting Python is
*so* 20 years ago and that this year all the cool London.pm kids are
quoting *Buffy the Vampire Slayer* instead.
Anyhoo.
As you may have gathered from the above introduction, it's been fairly
quiet this week. However, design, development and discussion continues.
As usual we'll start with perl6-internals.
Long option Processing
Towards the end of April, Luke Palmer had posted a patch implementing a
long option processing subsystem for Parrot. After wondering if
"getopt_long" was a standard function (it isn't), Steve Fink applied the
patch.
<http://xrl.us/hh8>
Excessive memory usage?
Leo Tötsch responded to Peter Gibbs' question of the week before about
Parrot's apparently excessive memory use for a simple program. Leo and
Peter batted the issue back and forth a few times in the process of
tracking down the source of the problem. I think they got to the root of
the problem, but I'm not sure if they've worked out a fix just yet.
<http://xrl.us/hvq>
NCI and handling of generic buffers of stuff
Last week Clinton A. Pierce had wondered about allocating blocks of
'generic' memory within Parrot for use as targets for native functions
(in his case for calling Win32 functions). Piers Cawley wondered if it
wouldn't be possible to implement a scratch buffer PMC to manage such
blocks of memory. Dan pointed out that this was exactly what the
'unmanagedstruct' PMC type was intended for, but Clint wasn't sure that
this did quite what he wanted and asked for more advice.
Later in the week Clint announced that he'd got UnManagedStruct PMCs
doing some useful work, including allocating arbitrarily sized buffers
from parrot assembly. People were impressed (In fact, Dan went so far
as to call Clint his hero in his 'Squawks of the Parrot'
weblog). However, Leo Tötsch pointed out that a good deal of the work
that Clint had done on UnManagedStruct probably belonged on
ManagedStruct instead. Apparently Clint (and Dan) hadn't noticed that
ManagedStruct existed. Hopefully now he's had it pointed out to him,
things will become a little more logical.
<http://xrl.us/hid>
<http://xrl.us/hvr>
<http://xrl.us/hvs>
Calling convention changes
After Dan's last set of changes to the Parrot calling conventions, Brent
Dax wondered why we still had a user stack now that it was no longer
being used for argument passing. Klaas-Jan Stol reckoned it was still
useful and it would make targetting Parrot easier. Luke Palmer wondered
if the user stack wouldn't make it harder to implement an exception
system.
Interestingly, Dan seems to be toying with having Parrot use
Continuation Passing Style function calls at some point in the future.
Who knows, maybe the next final calling conventions will mandate CPS (I
confess, I rather like the idea myself...)
<http://xrl.us/hvt>
<http://xrl.us/hvu>
Building Parrot on windows
Getting Parrot working well in a Win32 environment seems to have been a
Parrot theme over the last few weeks. This week Cal Henderson popped up
with some problems getting things to link. The problem was tracked down
quite quickly, and Cal ended up offering to do regular windows builds
for the tinderbox system, though it looks like that's not yet as easy as
it could be. Apparently the standard Win32 make targets don't quite
build enough. I'm sure someone's working on fixing this; getting Win32
into the tinderbox will be really handy.
<http://xrl.us/hvv>
IMCC vs. Parrot assembler
Zellyn Hunter wondered about how to choose between IMCC and the native
parrot assembler. (Zellyn also presented me with a dilemma about which
personal pronoun to use, which I solved by going and looking at his
website. Unless 'Leah' turns out to be a chap's name I think I'm
safe). He also asked about the state of the documentation within CVS,
and wondered which documents were still valid and which (if any) had
been caught out by the march of development, suggesting a small meta
document with information on the validity of the various docs (which
begs the question of how one knows that the metadoc is up to date.)
The answer to the first question was "Well, it depends", with the rider
that, unless you enjoyed doing your own register allocation, IMCC looked
like the saner choice. Jerome Quelin pointed out that the Ook! compiler
targets PASM, which seems to be in agreement with the whole sane/unsane
thing.
<http://xrl.us/hvw>
More on stack walking
David Robins read Dan's blog entry about stack walking and had a few
questions about the details. He wanted to know what was done about false
positives (ie, how do you *know* that something that looks like a
pointer *is* a pointer), and what was done about object destruction. Dan
replied that, in one of the Parrot GC system's few conservative choices,
Parrot GC took the view that if something in the system stack looks like
a pointer then it's safest to assume that it is a pointer and proceed on
that basis. He also noted that, if a language required a specific order
of object destruction then it was down to the language to handle that.
The usual spectre of timely closure of IO handles was raised again --
Perl 5 guarantees that objects get destroyed (and therefore handles get
closed) as soon as an object goes out of scope. This is somewhat harder
to guarantee in a system that doesn't use reference counting for
garbage collection. Graham Barr commented that "Anyone who depends on
GC for the closing of file handles asks for all they get.", which is
certainly one way of approaching the issue, but it does rather fly in
the face of the Perl 5 Way.
<http://xrl.us/hvx>
<http://xrl.us/hif> -- Dan explains stack walking
PIO work
Jürgen Bömmels continued his sterling work on the Parrot IO system
(PIO), fixing up the problems with buffering and double frees etc that
were mentioned last week.
"sysinfo" op
Dan added a "sysinfo" op which allows a running program to at least get
some information about the machine it's running on. Things are
apparently somewhat spotty for various architectures that Dan didn't
have immediate access to, but there's a framework in place now and
patches are welcome.
<http://xrl.us/hvy>
Meanwhile in perl6-language
The language list was again busier than the internals list this week,
but only just. Maybe we're all waiting with bated breath for the next
exegesis. Or maybe everyone's exhausted. It can't last though.
"bool" Type
Discussion of the hypothetical/non-existent "bool" type continued. I
tried really hard to care.
Coroutine calling convention
As Luke Palmer continued to argue that Coroutines were a
useless/dangerous bit of syntactic sugar and we'd be better using
explicit iterator objects. Meanwhile, others discussed the various
options for calling semantics in the case where Coroutines continued to
look like coroutines instead of iterators. Damian Conway proposed
another form of Coroutine calling convention. Damian proposed that
"yield" return the 'new' arguments with which you 'resumed' the
coroutine. This gives the programmer the option to handle different
arguments however she likes. Piers Cawley liked the idea and posted a
few snippets of code for implementing these semantics using
continuations. He also suggested that it might be handy to be able to
declare 'Blocklike' subroutines that were 'return transparent'. I think
the continuations scared people off because there has been no comment,
even on the Blocklike subs idea.
<http://groups.google.com/groups?threadm=ygcvfwtici9.fsf%40babylonia.fla
tirons.org>
<http://xrl.us/hvz> -- Damian's proposal
Include macro
Uri Guttman, may his name be forever mispronounced, responded to last
week's summary (instead of the original thread, *bad* Uri!) by pointing
out that the simple minded include macro referred to in that summary was
inefficient and proposed an optimization. This turned into a discussion
of whether file reads should be 'slurpy' by default (Michael Lazzaro
thought they should be, almost everyone else disagreed with him).
Then Damian popped up with his proposed Grand Unification of HERE docs,
POD, and general file slurping, which looks very cool, but
unfortunately, the unary "<<" operator that Damian proposes to hang all
this off seems to clash with Larry's proposed use of " <<list of
words>>" as a replacement for "qw/.../". The idea was well received, and
people started casting around for a sensible operator and adding other
neat ideas to go with it. Damian won the 'evil, evil, evil' prize when,
after "<<<" had been proposed as the file slurp operator, he came up
with the idea of vectorizing it, which would lead to such delights as
my($stdout, $stderr) = >><<<<< open 'grep foo * |';
Or, for the avoidance of headaches:
my($stdout, $stderr) = >> <<< << open 'grep foo * |';
(I hate to think how one would write that in a POD C<...> escape).
This then turned into a discussion of whether "<<...>>" made sense as a
replacement for "qw<...>", especially given the perceived utility of
Damian's proposal.
Towards the end of the thread, Michael Lazzaro withdrew his contention
that slurpy reads should be the default.
<http://xrl.us/hv2>
<http://xrl.us/hv3> -- Conway's Unified Here Theory
Acknowledgements, Announcements and Apologies
The camera pulls back from observing a computer screen on which the
words "The camera pulls back from..." are being typed and swings around
to focus on the typist who looks up from the screen and addresses the
camera.
PIERS: And so, by some extraordinary coincidence, fate, it seemed, had
decided that you, my readers, should keep your appointment with the end
of this summary. But what of the new technologies that had been spoken
of?
AUDIENCE: Where *BLEEP*?
PIERS: In an empty house?
AUDIENCE: When *BLEEP*?
PIERS: In the middle of the night?
AUDIENCE: Best time!
PIERS: What diabolical plan had been shaped by Damian and Larry's crazed
imaginations? What indeed? From what had gone before it was clear that
this was going to be...
AUDIENCE: a picnic?
PIERS: no picnic.
AUDIENCE: Awwwww!
The lights dim, the screen fades to white and the following words scroll
up the screens of browsers the world over:
If you've appreciated this summary, 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.
* Get involved 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, photographic and writing commissions,
or a better framing device than terrible pastiches of Monty Python
and the Rocky Horror Show to [email protected]. People
suggesting an MST3K version of this summary can jolly well do it
themselves.
--
Piers