This Week in Perl 6, November 9 - 15 2004

All~

Welcome to yet another Monday summary. This would have been a Sunday summary, but Avernum (from Spiderweb Software) forcibly prevented it. As usual, we will start out with Perl 6 Language.

Perl 6 Language

Modules and Exports

Aaron Sherman wanted to know some specifics about exporting things from modules. In particular, he did not want to have to retype a whole bunch of things. Larry gave an answer indicating that some of what Aaron wants should occur, but some things are difficult for good reason.

AUTOCLASS(DEF)? Hooks

Rod Adams wanted to know if he could get AUTOCLASS and AUTOCLASSDEF hooks. Larry told him that he probably could. Rod also wanted module name aliasing. Larry told him that he could. Rod wanted to have module names with arbitrary strings. Larry told him that he could. Rod wanted to be able to load multiple versions of the same module. Larry told him that he could. The summarizer wanted each question of a different focus to be in a different message. Hopefully, Larry will tell him that they should…

Matching the *n*th Occurrences

Sudarshan Gaikaiwari wanted to know how to match the “second last” occurrence in Perl 6 rules. I think he might have posted directly to Google Groups, as I did not receive it in my email and nobody replied. The example Sudarshan gave matches the seconded occurrence. As I am not sure what Sudarshan meant by “2nd last”, I will answer the question I do know. m:2nd/foo/ will match the second occurrence of foo. You can access the nth occurrence similarly.

Perl 6 Compilers

Once again it is a race to see whether someone posts a comment to, or Google picks up, Perl 6 Compilers first.

Parrot

Welcome to the week of the continuation. If continuations make your head hurt overly, I advise taking a few Advils before continuing. If continuations are the way you naturally think, I advise you to stop playing with LISP compilers.

String Pinning

Bernhard Schmalhofer wanted to pass the same C string into two different external functions so that the first could do things to it that the second required. However, the solution that he found kept eating his string after the first invocation. Dan and Leo concluded that using the b parameter for NCI is correct in this situation.

GC Invocation

Last week Leo posted a radical idea about GC invocation. I decided not to invoke Warnock’s Dilemma too soon. This week, I invoke it.

perl vs. /usr/bin/perl

Gerd Pokorra requested that #! perl change to #! /usr/bin/perl. Although Warnock applied, I think this will likely not happen. Not all systems have Perl installed in /usr/bin/ and people might want to change which perl to invoke by changing their paths.

Command Line Support for Various Compilers

Will Coleda added a TODO item so that Parrot can take various compiler arguments on the command line. What are you waiting for?

Register Stomping

Matt Diephouse had troubles with his newly updated Forth compiler. The verdict seems to be that he has uncovered a bug. To quote Matt, “*sigh*.”

Calling Continuations, Basic Blocks, and Register Allocation

Either Leo or Jeff Clites (I don’t recall who) started what is probably the largest thread for this week, focusing on register allocation and continuation troubles. Apparently the presence of continuations can unduly extend the lifetime of registers (as can try-catch things, but they seem less important). The suggested solutions all have some shortcomings, although it appears that only using lexicals is winning.

Basic Compilation Example

Jeff Clites wondered how something like (a + b) would compile. The answer is to initialize an intermediate PMC to Undef, which will morph as appropriate.

Eval Changes

Leo updated the implementation of eval to make it even cooler, or possibly just clean it up and fix some bugs … I forget.

Basic Operations for MMD

Dan asked for volunteers to spec out the basic vtable and MMD functions for CLS (common language specification-or-other). Sam Ruby said he would be willing to take a stab at it in a few weeks. One week has gone by and Sam grows ever closer to stabbing things.

No Limit on IMCC Identifier Length

Will Coleda noted that there was no limit on the length of IMCC identifiers. Here come the eval buffer overflow attacks….

Duplicate Local Labels Break PASM

Will noticed that duplicate local labels cause IMCC to output broken PASM. I could be mistaken, but I though that IMCC -> PASM has been broken for a while…

Parrot API

Leo wondered if the parrot_api.pl could be less strict about what it thinks is and is not public. Jarkko Hietaniemi responded that this was not his call to make, and silence reigned supreme.

Empty Sub Troubles

Will Colleda posted a bug for empty subs in IMCC. Stéphane Payrard provided a fix. Leo applied it.

Languages with Object Support?

Jeff Horwitz wondered if there were any languages with object support that he could bend to the evil ends of mod_parrot. While no one answered, I think Parakeet might be such a language….

WinXP Problems

Christian Lott has been having troubles with WinXP, in particular with ops2vim.pl. Read on for the blow-by-blow.

Strings + Working Correctly = Pain

In his noble efforts to make Parrot respect foreign languages and cultures, while not necessitating ICU, Dan has massively reworked strings. He reports … progress. He also posed a question for all to ponder: “How global should the defaults be?”

runtime/parrot/library/config.pbc

Nicholas Clark wondered what would generate this file. Leo answered. Nicholas tracked his problem down to a quirk in FreeBSD make and fixed it.

#line Directives from PMC Files

Nicholas Clark announced his triumph over #line directives in pmc2c2.pl. People were impressed, but promptly asked how to turn it off. Kids these days don’t appreciate what they have. ;-)

Tail Calls

Jeff Clites asked about tail calls in the presence of continuations. After much debate, the consensus seems to be that they don’t affect each other much at all. In fact, continuations make tail calls easier. However, the topic was broached as to whether these were an optimization that IMCC should detect, or should compilers generate them explicitly. I think the final decision was compiler generated, although I doubt I would be alone in not minding if IMCC had a flag to allow it to add them as it saw fit….

Character Classes

Patrick R. Michaud wanted to know if Parrot had character class support (that is, checking membership). Leo responded that it would after Dan’s aforementioned string stuff.

POSTCOMP vs. LOAD

Leo asked about the differences between POSTCOMP and LOAD. Dan provided the answer: POSTCOMP runs only when (and as soon as) the sub is compiled. LOAD runs when the sub is loaded. This need not be the same time if the source is used to generate bytecode that is later executed.

Register Allocation/Spilling/Volatility

Jeff Clites suggested using variable-size register frames with explicit, volatile and non-volatile sections. Leo responded that this would cause serious code bloat, and pointed him to his and Miroslav Silovic’s “watermark” scheme. Others voiced support for this as well as removing the implicit operands. Dan said no.

AIX JIT Gnomes

Adam Thomason observed that the AIX JIT problems have gone away and thanked the gnomes responsible. Remember, the proper sacrifice for little people like gnomes are mini-Milanos or other reduced-size cookies (nothing from Keebler as the gnomes and elves have long-unresolved issues).

Register Allocation (Again)

Bill Coffman’s register allocator (or should I say his implementation of the Matula/Chaitin/Briggs algorithm) grows ever closer to being committed (although my initial prediction of two weeks ago was clearly wrong). In fact, his algorithm is so good that it even turned up bugs from other pieces of the code. Dan started a test run on his evil code, so we should have truly stressed performance numbers within the next several fortnights.

IMCC Segfault on Bad if

Gopal V found a way to make IMCC segfault. I think it is still waiting for a fix….

No perldoc == BIG FAT WARNING

James deBoer submitted a patch to fail if the configuration step did not find perldoc last week. This week the request has gone out to modify it to warn in a big and preferably fat way. No answer yet.

RT Clean Up

Will Coleda, whose diligent minding of the RT queue is much appreciated, closed a few tickets that no longer apply.

BASIC Compiler

Will “Dr. Frankenstein” Coleda has attempted to resurrect the basic compiler with some major surgery. He is making progress. Joshua Gatcomb put out a request for a new maintainer.

Config Provides Slightly More Info

Luke Palmer provided a patch for making Configure.pl slightly more informative. Brent “Dax” Royal-Gordon applied it.

Find-Method Inheritance

Sam Ruby asked for comment before committing a patch to allow calling of attributes as methods and to allow inheritance of attributes. When no one commented, he committed.

Threads, Events, Win32

Gabe Schaffer pointed out some issues with threads and events from a Win32 perspective. Leo pointed out that this has not yet been fully implemented/abstracted/documented and observed that Gabe would be a welcome volunteer.

Core Dump on japh16

Bernhard Schmalhofer noticed that japh16 core dumps. He also submitted a simplistic fix.

If you find these summaries useful or enjoyable, please consider contributing to the Perl Foundation to help support the development of Perl. You might also like to

Tags

Feedback

Something wrong with this article? Help us out by opening an issue or pull request on GitHub