Perl 6 Summary for the week ending 20030817
Picture, if you will, a sunny garden unaffected by power cuts, floods,
plagues of frog or any of the other troubles that assail us in this
modern world. Picture, if you will, your summarizer sat in this garden
with a laptop on his knee, cursing the inability of LCD display
manufacturers to make displays that are legible in sunlight. Picture
your summarizer returning to the comfortable chair in the shade of his
book room casting around for a witty and original way to open another
Perl 6 summary. Picture him giving up and starting to type. Here's what
he writes:
We start, as usual, with the the internals list.
Tail call optimization
Leo T�tsch has started to work on getting IMCC to detect tail calls and
optimize them to either a simple jump or an invoke. If you're not sure
what tail call optimization is I can recommend Dan's "What the heck is a
tail call?" article on the subject.
http://xrl.us/pun
http://xrl.us/puo -- What the heck?
Leo's QUERIES from last week
Last week, Leo bundled up a bunch of outstanding questions for Dan, and
Dan answered them. Benjamin Goldberg queried Dan's answer about
"find_method", which, if I'm reading things correctly is currently
implemented in the interpreter. Benjamin argued (convincingly I thought)
that, although the method hashes needed to be stored in the interpreter
structure, "find_method" should be implemented on "default.pmc",
allowing for different classes/languages to override its behaviour.
http://xrl.us/pup
Why "~" for xor?
Michal Wallace wanted to know why "~" maps to both unary bitwise-not and
binary bitwise-xor in IMCC; he expected xor to be "^" and "^^". Leo
explained that it was, at one point at least, the way Perl 6 did it but
that he'd stopped keeping up with the developments in perl6-language. He
noted that, if the Perl 6 operator had been settled, then IMCC should
use that. A quick skim of my copy of *Perl 6 Essentials* tells me that
Perl 6 now uses "+&", "+|" and "+^" for bitwise and/or/xor, with "~&",
"~|", "~^" for stringwise and/or/xor.
http://xrl.us/puq
http://xrl.us/pur -- My review of *Perl 6 Essentials*
Raising Hell
Michal Wallace's Py-Pirate project continues to exercise the edges of
Parrot as he implements more and more of Python's semantics. This time
he needed to know about raising (and catching) exceptions. In particular
he wanted to be able to catch an exception when "find_lex" failed to
find an appropriately named variable. (Currently, a "find_lex" failure
doesn't raise an exception, it just kills Parrot). Jos Visser told him
that there were plans to have "find_lex" throw a real, catchable
exception, or maybe just return "undef". See last week's summary for a
pointer to that discussion.
http://xrl.us/pus
Pirate status and help with instances
Michal Wallace announced that he had just finished an all night coding
spree and that Py-pirate could now handle:
* functions (closures, recursion, etc)
* Global variables
* tuples (but they turn into lists)
* dictionaries ("create", "setitem", "getitem", "print")
* list comprehensions
* "raise" (strings only)
* "try...except" (partial)
* "try...finally"
* "assert"
(At this point, I think we should all pause for moment of wild
applause).
However, he was having a few problems with instantiating objects of a
class. (For those who don't know, Python instances are created by
calling the Class as if it were a function). Leo T�tsch noted that
almost nothing would work, since Parrot's classes and objects weren't
actually finished yet. He agreed with others in the thread who reckoned
that Python classes could be made to work by subclassing the standard
class.pmc to allow it to respond to an "invoke" by by creating a new
instance. Easy! Michal muttered something about faking classes with
closures but I don't think he went through with it.
http://xrl.us/put
Packfile fun
So long assemble.pl, it's been good to know you.
http://xrl.us/puu
Approaching m4
Leon Brocard, Sean O'Rourke and James Michael DuPont looked on in awe as
Bernhard Schmalhofer announced that he'd been working on implementing m4
in Parrot. According to Sean, the "implications are staggering... Sure,
plenty of compilers can bootstrap themselves, but how many can generate
their own configure scripts via autoconf? With p4rrot, we may live to
see this dream."
One does worry about Sean's dream life.
http://xrl.us/puv
Call and return conventions
TOGoS has been thinking about the workings of the Parrot calling
conventions. He wondered if there was a case for making calling and
returning look exactly the same, allowing for cunning stunts with fake
continuations in P1. Luke Palmer really liked the idea. Leo seemed to
think it was a good idea too. There has been no word from Dan yet.
http://xrl.us/puw
Packfile and EXEC
Leo T�tsch has started to extend the "packfile" functions to handle
multiple code segments and has been running into problems with EXEC --
the tool that uses the JIT to generate a native executable from Parrot
assembly. Daniel Grunblatt checked in a 'temporary' fix, which at least
solved Leo's immediate problem.
http://xrl.us/pux
Parrot 0.1.0 -- what's left?
Steve Fink thought, given the 'insane amount of work' on Parrot
recently, that it was approaching time to cut another release. He asked
if there was anything else coming up that people would like to see
included in the release, and whether we had enough to call the next
release 0.1.0. Luke Palmer really wanted to see objects finished, but
wasn't sure how much would that would entail. Leo thought that the
Parrot Calling Conventions (and more particularly the return convention)
support needed fixing, and noted that PackFile is currently in a state
of flux. Both of them thought 0.1.0 would be the right version number
though.
http://xrl.us/puy
"set" vs. "assign" continues to "add" vs "add!"
TOGoS wasn't keen on the variable behaviour of add depending on whether
its target was a PMC, or an integer/number register. Brent Dax thought
that TOGoS needed to train his expectations and went on to explain why.
For reasons that I can't quite follow, this discussion morphed into a
polite argument between Dan and Leo about the wisdom of having all those
keyed opcodes.
Benjamin Goldberg pointed out that, since TOGoS's desired 'set'
semantics could easily mocked up with an assign operator (but not vice
versa), then maybe IMCC could handle mocking it up automatically.
http://xrl.us/puz
Serializing functions
Michal Wallace wondered if it is possible to serialize a Parrot
function, or (slightly more tricky) if you could serialize a generator
and its state. Answer: Yes, it's almost done (well, the function part
anyway; Leo didn't' mention the generator thing).
I'm not sure if the support for this was fixed up in the packfile
changes that Leo checked in a couple of hours after his answer.
http://xrl.us/pu2
Parrot and STDOUT/STDERR
Arthur Bergman popped over from ponie-dev to ask about a problem he'd
been having with his parrot embedded miniperl. Apparently, if a caller
closes STDERR, the program produces no output on STDOUT either. Leo
found where the problem was happening -- Parrot was trying to open
STDERR, failing, and dying with an error message. To STDERR. J�rgen
B�mmels, the ParrotIO maintainer, outlined a few possible fixes.
http://xrl.us/pu3
Calling Parrot from C
Luke Palmer asked about calling a parrot sub from C and getting the
return value. Leo gave a terse answer that covered the bases and pointed
at classes/Eval.pmc for an implementation of something very like the
general case of calling parrot subs from C.
http://xrl.us/pu4
There's no undef!
Michal Wallace discovered that there seems to be no op to remove a
variable from a lexical pad. Leo patched the scratchpad PMC so that you
can now do:
peek_pad Pn
delete Pn["foo"]
to delete variable names.
http://xrl.us/pu5
Pirate 0.01 ALPHA!
Michal Wallace announced the version 0.01 alpha of Pirate which he
described as "(almost) everything I can do for Python without jumping
into C". Which turns out to be an awful lot of stuff.
I've just looked back through my summary archive and, as near as I can
tell, Michal's gone from thinking about doing this to having most of the
Python syntax working in just under 3 weeks, which is really rather
scary when you think about it. Well done Michal.
http://xrl.us/pu6
http://pirate.tangentcode.com
Timely destruction: An efficient, complete solution
Right at the end of the week, Luke Palmer posted another attempt to come
up with a neat solution to the timely destruction problem. I'm guessing
we'll see it discussed in next week's summary.
http://xrl.us/pu7
POW (Parrot on Win32) available
A while ago now, Jonathan Worthington offered to start making regular
binary builds of Parrot for those who use Win32 but who can't compile
Parrot on it. This week he announced that he's done it. Thanks Jonathan.
http://xrl.us/pu8
http://xrl.us/pu9 -- The POW site
Implementing Nickle
Simon Cozens pointed the list at the nickle programming language and
wondered if it might be a suitable language to implement on Parrot.
http://xrl.us/pva
http://nickle.org/implement/html -- The Nickle site
Meanwhile, in perl6-language
Traffic was light. Very light.
Apocalypses and Exegeses
Alberto Manuel Brand�o Sim�es, noting that the Apocalypses and Exegeses
were subject to later modification, wondered if anyone had any idea when
we'd have a freeze on the syntax and features for Perl 6. The obvious
joke -- "Sometime after Perl 5's syntax and features freeze" -- was
cracked. The consensus was that the syntax is currently 'slushy', and
will probably firm up in the next 6-12 months. There was also some
discussion of *Perl 6 Essentials*, and Nicholas Clark pointed us all at
a new book that Alan Burlison had found.
http://xrl.us/pvb
http://xrl.us/peo
Acknowledgements, Announcements and Apologies
If anyone's following the 'moving to the North East' saga, last week's
offer fell through, but that was actually a good thing as we're now
buying my daughter's Tyneside flat instead, which does rather take some
of the 'got to get everything sold by mid September' pressure off and
replaces it with 'How on earth are we going to fit the contents of a 4
bedroomed house into a two bedroomed flat?' pressure.
In case you hadn't already spotted that I was impressed, much kudos goes
to Michal Wallace for his sterling work on Pirate. Three weeks from
concept to having a huge chunk of the language implemented is just
amazing.
Check out http://xrl.us/mt4 for more of my writing.
As ever, 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, requests for consultancy, photographic
and writing commissions, or some free time to
[EMAIL PROTECTED]