The Perl 6 Summary for the week ending 2005-10-30 Hmm... Thursday afternoon and I've only just started writing the summary... What happened to professionalism? What happened to rigid, albeit self-imposed deadlines?
Um... I've had a cold. The cats ate my homework. This week in perl6-compiler It's weird isn't it? Activity on Pugs and the other Perl 6 compiler tools shows no signs of slowing (especially now conference season is over), but the volume of mail on the list continues to be tiny. Autrijus seems to be Erdösing round Europe and writing everything up on use.perl. I could give you a bunch of links to various other blogs and journals where various Perl 6 developers are writing up their work, but it's probably easiest just to point at the Planet Perl Six aggregator. It's good to see so much of this stuff becoming a little more visible. <http://planetsix.perl.org/> Meanwhile, in perl6-internals Discussion of the Parrot JSON serialization code span off into a discussion of generalized serialization for Parrot data structures. <http://xrl.us/ia4m> Determining the number of return values expected Leo and Jonathan Worthington discussed how to find out about the number and types of return values the caller expects. Jonathan ended up implementing an experimental op to kick around. <http://xrl.us/ia4n> Rules for changing APIs Leo talked about the Parrot policy for changing APIs. In general, it's a good idea not to have to change a public API, but in practice, it happens. As Leo said, the general rule is "You break it, you fix it", so the policy is that if any API changes break anything in the Parrot subversion tree, it's up to whoever changed the API either to fix it or to work with the the sub project's 'owner' to get it fixed. Projects that aren't in the tree will need to keep themselves up to date, but if you didn't document your changes well enough, expect to be fielding questions for a while after your changes. <http://xrl.us/ia4o> "check_progs" is not portable François Perrad pointed out that the "check_progs" subroutine used by Parrot's config system doesn't work on windows. He suggested using the CPAN module File::Which instead. This turned into a discussion about whether it would be good to have a Bundle::Parrot set up on CPAN with all the CPAN modules needed for Parrot to build, or if we should continue to bring those modules that Parrot needs into the Parrot distribution so that, once you've downloaded the Parrot tar file you won't need to scurry off to CPAN for various supporting bits and pieces. <http://xrl.us/ia4p> The Configure System Understating the case somewhat, chromatic pointed out that the plugin system for configuration is grotty. Everyone agreed pretty much, but the question is whether to do anything about it since the current configuration is supposed to be a stopgap solution until we get the proposed miniparrot scheme up and running. Pretty big gap eh? Hopefully this means we're going to get work started on the miniparrot approach. Or maybe someone will clean up the stopgap. Neither would be bad. <http://xrl.us/ia4q> Yet another C compiler Leo pointed everyone at the Amsterdam Compiler Kit, which is the default compiler for Minix and wondered if anyone wanted to experiment with it to see if it could compile parrot. <http://tack.sourceforge.net/> <http://xrl.us/ia4r> Deprecation warning Leo announced that the "newsub" operator is about to be removed. Check docs/compiler_faq.pod for details of the Right Way of making subs. Patrick had a few questions so he could track the changes in PGE. Leo answered them. <http://xrl.us/ia4s> Compiling parrot with c++ Nick Glencross wondered if it would be a good idea to make it so that Parrot couple be compiled by a compiler in C++ mode. The answer appeared to be 'yes'. <http://xrl.us/ia4t> Documenting "new_pad" Jerry Gay asked about the use of the "new_pad" op, which appears to be both undocumented and untested. Not good. He posted some apparently reasonable code that fails. Matt Diephouse reduced it to a simpler failing case and Leo tracked down the bug. None of which addresses the lack of documentation of course, but it's a start. <http://xrl.us/ia4u> "All tests successful" considered harmful Jerry Gay pointed out that "All tests successful" is only a useful message when you're confident that your test suite has good enough coverage. Jerry thinks parrot has too few tests. So he's started writing more and sending in patches. He noted that trying to write tests was a very good way of discovering areas of Parrot that aren't sufficiently (at all) specced. He called for others to join him in writing tests and picking off parrot's low hanging fruit. Go Jerry! One of Jerry's issues was that you can't easily write tests in PIR. So chromatic pointed him at his Test::Builder ported to PIR and committed to getting Parrot::Test (or some useful subset of it) ported to make use of it. Go chromatic! <http://xrl.us/ia4v> Rejigging NCI to use the ffcall library Nick Glencross wondered about rejigging NCI, the parrot Native Call Interface to use the ffcall library. In fact he went so far as to offer up a proof of concept implementation. Apparently the ffcall approach makes it much easier to write callbacks in PIR/PASM. Leo thought it sounded like a useful thing to do, but licensing issues (ffcall is under the GPL) meant that Parrot might have to stick with the current NCI interface. <http://xrl.us/ia4w> Meanwhile, in perl6-language That darned class sigil I just can't keep track... When Larry originally introduced a class sigil, it was "¢". The discussion went off in several directions and, as I write this and the next summary will probably say that the sigil is now longer ¢ because of difficulties typing the character on Asian keyboards. The discussion was generally in favour of some kind of new sigil though. <http://xrl.us/ia4x> Perl 6 Fears Juerd announced that he's added a list of Perl 6 fears to the pugs distribution. The idea is to gather all the things that worry people about Perl 6 into one place and see what, if anything can be done to address them. People don't seem to like Unicode operators... Slightly tangentially to this, Dan Sugalski blogged a couple of weeks ago about his successes and failures with Parrot. The comments are worth reading -- there's a fair few more or less well founded complaints about the way the Perl 6 project has been managed, many of which seem already to have been addressed. Certainly the design process is rather more visible now. <http://xrl.us/ia4y> <http://xrl.us/ia4z> Ways to add behaviour Ashley Winters has been thinking about all the different ways to add behaviour to classes in Perl 6. He came up with 7 and I think he missed a few... A discussion between span off with Larry and Stevan talking about the hows of whys of adding behaviour via ".meta", which in turn morphed into a wider discussion of how the Perl 6 metamodel's going to work. I find myself wondering what we're going to run out of first, Unicode characters for new operators, or terms for MetaModel concepts. $_ defaulting for mutating ops Quickly, what does a line of code like: given $subject { ++ } do? Juerd thinks it should increment $_/$subject. The idea being that all mutating operators should default to operating on $_ in the absence of any other operand. Larry pointed out that, as you can already use "." on any postfix operator, it's already possible to write given $subject { .++ } He reckoned that changing the other operators in the way Juerd proposed would probably be a losing proposition. I'm not sure Juerd was convinced. <http://xrl.us/ia42> txt vs OO Michele Dondi replied to Stevan's assertion of a few weeks ago that "Perl 6's OO system has the potential to be to OO programming what Perl 5 etc, was to text processing". Michele thought that being known for OO might well be as much of a trap as being known for text processing was for Perl 5 (at least to the wider community of programmers who didn't look further than the headlines). In the ensuing discussion, Larry came up with the idea that the design of Perl 6 is aimed at making it possible to 'usefully cargo cult aspects of interest' without having to learn the whole damned language. When the OED adds the verb form of 'cargo cult' to its corpus, remember where you read that first. Even if you're not that interested in the rest of the thread, it's worth reading what Larry has to say on this. <http://xrl.us/ia43> <http://xrl.us/ia44> -- Larry on cargo culting "+$arg" changed to ":$arg" Larry announced that one of the major changes in the latest version of Synopsis 6 was that named arguments are now marked with ":" and not "+". The aspect of this that had me punching the air and shouting "Yes!" was that it's now possible to declare a parameter with both an external name and an internal variable name (which is one of the aspects of Smalltalk style method selectors that I really like). After a long post of thinking aloud, he went off to revise the synopsis again. Discussion of the implications of using ":" ensued. <http://xrl.us/ia45> Roles vs. Classes Rob Kinyon wondered if the only difference between a Role and a Class was that the Role was immutable. He reckoned that, if that was the case he'd rather use Roles all the time. Luke, chromatic and Larry thought he was wrong about this, pointing out that open/closed optimizations should be left to the class's clients not to the class itself. Essentially, if everything declares that it's not going to monkey with everything else after the compile phase is over, then perl can get on and optimize like an optimizing monkey based on the (good) assumption that all classes are closed for the duration of the program's execution. <http://xrl.us/ia46> Is there a way to generate an object without a new? Yiyi Hu doesn't want to have to type 'new', preferring instead to do "Class( b => 5)". Luke liked the idea. Juerd didn't. Larry pointed that making it work would have unpleasant syntactic ramifications. <http://xrl.us/ia47> Role Method Conflicts and Disambiguation Stevan had some questions about how method conflict resolution works with roles. He had a few simple, if pathological cases to demonstrate the issues. Various solutions were proposed, but I did find myself thinking of the old joke: "Doctor, it hurts when I do this." "Well, don't do that then." Ahem. The old ones are still the old ones. And the Old Ones are still the Old Ones, but I don't think we've yet added "Perl Six will awaken great Cthulhu from his long sleep beneath the island of R'Lyeh" to the Perl Six fears list. <http://xrl.us/ia48> <http://xrl.us/ia49> Crossing lists Darren Duncan wants a 'simple way to combine 2 arrays where every element of each array is combined with every element of the other arrays', he calls this the "cross" operator. Luke pointed to several places where it, or something like it had already been discussed, but I don't think it's something that's made it in to the language. <http://xrl.us/ia5a> Acknowledgements, apologies and everything else Sorry it's late. I'll do better next time. I'm still looking for work; perl or ruby programmer, photographer, tech writer, folk singer -- I'm multi talented. Let me know if you need any of 'em. Also, if anyone is interested in taking up sponsorship of the Summaries, please drop me a line, I'd be delighted to hear from you. Help Chip <http://geeksunite.org/> -- Chip still needs help. The usual coda If you find these summaries useful or enjoyable, please consider contributing to the Perl Foundation to help support the development of Perl. <http://donate.perl-foundation.org/> -- The Perl Foundation <http://dev.perl.org/perl6/> -- Perl 6 Development site Check out my website, it's lovely. <http://www.bofh.org.uk/> Vaguely pretty photos by me can be found at: <http://xrl.us/ia5b> -- Piers Cawley <[EMAIL PROTECTED]> http://www.bofh.org.uk/