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?