The Perl 6 Summary for the week ending 20021124
And some rough beast, its hour come 'round at last slouches toward...
And then the scansion goes to pot and I can't make a joke fit. Shame.
Anyhoo, it's time for another episode of the continuing saga of Perl 6
development. When I say 'saga' I don't mean a long, long poem of
alliterative lines, but a bright, breezy and brisk tale of the bods in
the lists. Well, one week mayb, when we've been quiet...
We start, as usual with the internals list.
C#/Parrot Status
Rhys Weatherley, who has been absent from the internals list lo these
many days popped up again to ask about:
* Object/class support
* Fixed-size integers and/or conversion opcodes
* Embedding of binary extension sections
He noted that "Not Done Yet" was an acceptable answer. Which is good,
because, as Leopold T�tsch pointed out, none of them were done yet. Leo
also reckoned that a start would be to implement fixed size integers and
conversion ops, and asked for details of what was wanted. Iacob Alin
wondered if the various types would be PMCs (answer: Only those types
which don't easily map to native types.) Florian Weimer wondered about
trapping integer arithmetic. Dan says these will be handled using
Parrots standard exception handling mechanism (which doesn't actually
exist yet, but signs in the wind suggest we might be getting a Halt and
Catch Fire op to raise an exception).
http://makeashorterlink.com/?P3F621592
Parrot 0.0.9 status
According to Steve Fink: "The basic status is that lots of people, many
of them coincidentally named Leopold T�tsch, have been fixing zillions
of things and implementing a number of new features. Nearly everything
needed for 0.0.9 has happened, and a lot else besides."
See his post for details of what's still to be done.
One of the most important items was that the tinderbox (a fleet of
machines that constantly make, test and remake the latest parrot builds)
was a beautiful shade of orange and red, which led to discussion of what
was going on (since most people's home boxen seem to be making and
testing okay...) Various remedies and patches were tried, but I believe
the tinderbox is still mostly the wrong colour.
http://makeashorterlink.com/?I50722592
http://makeashorterlink.com/?W21751592
Unified core.jit
Leopold T�tsch posted an RFC in which he proposed writing a universal
core.jit which provides the basic JIT framework and which delegates the
generation of native ops to processor specific implementations. Daniel
Grunblatt liked the basic idea, but thought there might be a case for
creating cisc.jit and risc.jit to avoid piles of "#ifdef"s. Daniel, Leo
and Nicholas Clark then spent a few posts thrashing out issues to do
with parameter naming and other more or less arcane things.
http://makeashorterlink.com/?U12722592
Native Function calls
Dan announced that he'd redone the native function call interface and
had added a new op, "bnc", which stands for `build native call'. His
post has the details of how it all works (and how to use it). Well,
that's what he said at first, but apparently it's not true. What he's
actually done is altered the "dlfunc" opcode to behave like "bnc" he
described. (It's a shame you can't hit "s/bnc/dlfunc/" in your mailer
and have the world alter every single copy of the mail you just sent. It
would have been useful for some of my previous summaries.)
Brent Dax wondered if this was going to be the new XS or if there was
more coming. Answer: Sort of.
Leo T�tsch didn't like nci.c's string functions, and wondered too about
places where you'd need to pass a pointer to the parrot interpreter. Dan
doesn't like the string functions either, noting that the code is "evil,
crufty [and] embarrassing", but that it is at least "well encapsulated,
so it can be ripped out, shot, and replaced with something elegant and
fast at some point in the future." As for parrot interpreter pointers,
Dan reckons that any code that needs to go so far should install real
extension sub PMCs.
Gopal V worried about the type safety (it's an obsession of his
apparently) or rather the complete lack of it, in this interface. Dan,
in a quote of the week post said yup, of course it's totally type unsafe
and he liked it that way, before confessing that he was getting that
`XML feeling. (You know the one--"It seemed like a good idea until I
thought about it")' and started backpedalling. Gopal V made a few
suggestions, and that's about where we left it.
http://makeashorterlink.com/?Z23715592
http://makeashorterlink.com/?P54723592 -- the correction
Leopold T�tsch, still the patch monster
Leo's contributions this week include:
* Patches to the JIT which give a 370% speedup in mops_p.pasm
* Patched strings to try and fix a GC issue.
* More patches to the JIT to tidy things up
This patch set also added i386 support for JITted floating point,
which apparently makes mandel.pasm at least 10 times faster.
And that's not counting his contributions in other threads. Once again,
I wonder where he finds the time.
Other patches this week from other keyboards that Leo's:
* Op restarts
Jason Gloudon's patch adds a new control flow flag to op.h to mark
which ops can cause interpreter restarts. This information can
apparently be used to improved performance in JITted code by
removing the need for unnecessary checks.
* Function <= Data Pointer casts in nci.h
Josh Wilmes's patch to try and correct warnings on some compilers
(and 'outright breakage on tcc'). Steve Fink seemed to like it, and
produced an updated version and Dan suggested that they don't worry
about it too much right now as he was in the process of redoing
nci.c anyway.
* Befunge now supports PerlArray's push/pop
Jerome Quelin is one of the "let's implement a bunch of languages on
Parrot" crew, and his pet language is Befunge. If you don't know
about Befunge, you're lucky, but if you don't want to stay lucky,
Google will probably be depressingly informative. Anyhow, Jerome has
now rewritten his Befunge interpreter to use PerlArray's push and
pop rather than his older, hand crafted Parrot assembler routines.
Dan committed the patch `with the appropriate amount of fear'.
* The return of Leon Brocard
As regular listeners will know, I try to mention Leon Brocard at
least once a week. This has been tricky of late because Leon had
been on holiday. And when he returned he didn't actually say that
much.
This week, he rectified that and offered a couple of patches, and a
minor dilemma. The first simply improves a set of error messages,
making it easier to track a couple or three problems down. However,
his second patch is a little trickier.
The thing is, Leon has implemented another programming language for
Parrot. He'd posted it to the list some time ago (before my time as
a summarizer I think), but it'd got out of sync with the state of
the avian, so this time he offered it as a patch with its own
subdirectory of languages. "So? What's the problem?" I hear you ask.
The problem is the name of this language, which some people may find
offensive. In a postscript to the patch, Leon suggests that a bit of
creative misspelling may be in order, so I'll go that route:
Last week, Leon Brocard posted a patch implementing a brianfuck
interpreter.
There, that was easy wasn't it?
Coo, what a remarkably long section with no associated links.
Meanwhile, on perl6-language
The `Unifying invocant and topic naming syntax' thread rumbled on. Adam
Lopresto wondered what was wrong with "sub bar(;$foo is given) {...}".
Damian wasn't sure and reiterated his suggestion of "sub foo (;$foo =
$def_foo) is given($def_foo) {...}", but Larry really didn't like that
(and he's not alone -- Ed.) Larry spun off a few other suggestions, one
of which Damian shot down quite handily, and one of which, after couple
of modifications, he quite liked. Brent Dax wondered what was wrong with
just using $CALLER::_ and having done with it, which led to some
muttering that the CALLER should really be a namespace of last resort
for people doing bad and/or clever things and that using it just to
import the caller's topic seemed like overkill. And on it went for a
total of 47 posts this week. Highlights include: Damian's discussion of
why it makes sense to pass the topic into a function without it
appearing on the argument list illustrated with an example from
Class::Contract; Andy Wardley's almost universally disliked suggestion
of using $__, $___, ... to access callers' topics up the call chain;
Allison Randal's handy restating of the details of what was being
discussed; Andy Wardley also brought up the Law of Demeter and got
ignored for his pains.
I have the feeling we haven't seen the last of this yet, things still
aren't quite resolved.
http://makeashorterlink.com/?P15713592
http://makeashorterlink.com/?X46713592
http://makeashorterlink.com/?X37711592
http://makeashorterlink.com/?Y58722592 -- Allison's summary
http://makeashorterlink.com/?P59713592 -- Law of Demeter
The string concatenation operator
The mammoth operator thread continues on it's merry way with a slightly
morphed subject (It's now *called* the `string concatenation operator'
thread, but it can't fool me). I think it might be slowing down though;
there were only 31 posts in the thread this week.
Anyhow, Martin D Kealey opened proceedings for the week, talking about
parallel processing. (And people wonder why I find this thread hard to
summarize -- the subject line is almost always inaccurate, and it always
seems to be going off on tangents), and the benefits of functional and
applicative programming languages when compilers need to notice possible
parallelism. Simon Cozens talked about typing of values (not variables),
and reckoned that with reasonably strongly typed values there seemed to
be no reason why "+" shouldn't be used for string concatenation.
However, Larry reckons that not using "+" to concatenate strings was one
of the things he got right in Perl 1. He also had some interesting
things to say about the Principle of Least Astonishment.
Dan talked about threading (remember, this thread is about the string
concatenation operator), which led into a discussion of the various ways
of handling threading. Matt Diephouse wondered how to pass a junction to
a function. It turns out to be easy; "sub foo ($param is junction)
{...}". But not that easy. The subthread that ensued ended up talking
about what happens when some members in junction cause exceptions to be
thrown when others don't, and I'm *still* not sure what's going on.
I don't suppose someone would like to write an article on junctions
along the same lines as Allison's 'Topics' article? Or is it still way
too early to do that?
http://makeashorterlink.com/?S3A751592
http://makeashorterlink.com/?Z1C735592
http://makeashorterlink.com/?Y2D731592
Continuations
The misnamed coroutines thread continued, discussing the use of
coroutines as iterators in while and for loops, which then morphed into
a discussion of "<<". You see, "<<...>>" is the ASCII synonym for
"�...�", which is, in turn a (the?) new way of saying "qw/.../" (and for
vectorizing an op). Ken Fox worried that using "<<" in this way would
mean you couldn't use it for introducing a HERE doc, but Damian assured
him that it wasn't a problem because """ (and presumably "'") would be
illegal as the very first character of a "<<...>>" delimited list. This
worried Paul Johnson slightly who paged Simon Cozens (Champion of
Regularity! Smiter of the Unexpected!) who didn't show up.
Austin Hastings asked if we couldn't rename coroutine "next" to be
"bork" (standing for "Break OR Kontinue" or "Brain On Raw Krack", you
decide) just so he could write
my $cheffy = $recipe.iterator;
$cheffy.bork.bork.bork;
Damian appeared to take him seriously (well, not about the bork thing,
but the post wasn't just about the silliness).
All of which eventually led to Damian's rather sensible proposal on the
semantics of "<...>", which is well worth a read. The rest of the thread
was spent with people asking for a few clarifications.
Quote of the Thread:
Damian: "Think Of It As Evolution In Action"
Austin: This coming from someone whose national bird is
the platypus
Hey, it made me laugh.
http://makeashorterlink.com/?Q1E712592
http://makeashorterlink.com/?W2F714592
http://makeashorterlink.com/?A50832592
http://makeashorterlink.com/?Q11862592 -- semantics of "<...>"
Superpositions and Laziness
Piers Cawley failed to change the subject line as he asked about runtime
class creation. He wanted to know if one could do:
class {
push @ISA, $parent_class;
...
}
Damian sincerely hoped not. Frankly, so does Piers, what he really wants
is a nice interface to Class:
Class.new( isa => $class ) {
method { ... }
method { ... }
}
But so far everybody has ignored that post...
http://makeashorterlink.com/?G12833592
Dynamic scoping (take 2)
Ralph Mellor posted a summary of his understanding of dynamic scoping
with "temp" and "let" and went on to propose a system of implicit
argument passing, intended to get 'round the perceived problem of
threading and dynamic scope not playing well together. Larry pointed out
that Ralph seemed to have a misapprehension about Perl threads where,
unless a variable is explicitly marked as shared between threads then
dynamically scoped variables work just fine. Larry went on to discuss
some rather splendid extensions of the currying concept:
use Dog.assuming(tail => "cut short", ears => "cut_long")
my $little_dog = Dog.where_oh_where();
Which is rather cute.
http://makeashorterlink.com/?T23812592
http://makeashorterlink.com/?O24852592
Meanwhile, on the documentation list
The Documentation list continued its mission to explain, spending the
week working on Numeric Literals, producing a 5th summary of what is
known.
http://makeashorterlink.com/?B25851592
In brief
Last week, Brent Dax stated that we'd have to write Perl6 in Perl
'because otherwise we can't have the self modifying grammars'. Which
caused Simon Cozens to wonder why he'd been spending so much time
writing self modifying parsers in C.
Joseph F. Ryan has been writing tests for numeric and string literals
and keeping them in sync with discussions on perl6-documentation. Thanks
Joseph.
David Robins wondered when the long double bug would be fixed. Nobody
quite knows, but Dan is working on it, once he gets a compiler back up
on his long double machine.
Who's Who in Perl 6?
Who are you?
Nicholas Clark
What do you do for/with Perl 6?
Lurk. Sadly I usually generate more e-mail than code. I sometimes
dabble in fixing compiler warnings, the ARM JIT, and anything else
that seems interesting to me. It's a good thing I'm not expected to
do anything important, as parrot would never get finished if were.
Where are you coming from?
Well, porting Perl5 to RISC OS, then getting gradually sucked into
being a core Perl5 porter. I keep seeing things that look fun to
implement which no-one else seems to want to do, so I try to
implement them myself.
When do you think Perl 6 will be released?
Before perl 5.10 However, I doubt Perl 6 will be ready by 1st April
next year :-(
I believe that the parrot engine will become substantially useful by
the middle of next year. However, I expect that the Perl 6 language
design will not be complete by then, let alone implemented, let
alone implemented optimally. So I suspect that the first real users
of the parrot engine will be "other" languages. It's a shame that
many of the major dynamic languages which could be implemented on
top of parrot don't have anywhere near the level of regression tests
that Perl does, as I'm told that this lack of tests makes it much
harder to go about writing a re-implementation. I blame Schwern for
making it too easy for Perl people to write tests :-)
Why are you doing this?
The perl5 internals are a complete mess. It's like Jenga - to get
the perl5 tower taller and do something new you select a block
somewhere in the middle, with trepidation pull it out slowly, and
then carefully balance it somewhere new, hoping the whole edifice
won't collapse as a result. The only long term solution to the perl5
internals is a complete re-write, and far too many corner cases of
perl5 (as well as all of XS) actually depend on how bits of the
internals work, so an internals only re-write isn't going to be
possible without some changes at the language level. And as the
language itself has to change, then it might as well progress too.
You have 5 words. Describe yourself.
incorrigible pragmatic noisy pedantic perfectionist
Do you have anything to declare?
I've probably just contradicted myself. It wouldn't be the first
time. On, and I can't code anywhere near as fast as I can talk.
Sorry.
Acknowledgements
Proofreading was once again provided by Aspell and myself. I really
should start writing this thing on Mondays again, then I'd have time to
get it properly proofread by other human beings. Ah well. Next week.
I've been getting some interesting mail recently about Perl 6 and what
it's doing from people who aren't active on the mailing lists, to the
extent that I'm thinking of adding a `letters to the editor' section
(assuming I ever find the time). Is this a good idea? Am I even madder
than you thought I was? What day is this? Are you the nurse? Only they
tell me I'm not supposed to talk to strangers...
Ahem.
Here's the chorus once more:
If you didn't like the 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 Nikon Coolscan 4000 ED to
<mailto:[EMAIL PROTECTED]>. (One of these days, this is going to
work...)
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?