This Fortnight in Perl 6, Feb. 23 - March 7, 2005

All~

Welcome to yet another fortnight summary, once again brought to you by chocolate chips. This does have the distinction of being the first summary written on a Mac, so if I break into random swear words, just bear with me.

Off-list Development

In more related news, someone pointed out to me that development goes on off-list on places like IRC. I briefly contemplated quitting my job and tracking such things full time, but then I decided that it would be better to accept brief submissions for the summary. Thus I will be adding a fourth section to the summaries based on contributions. If you would like to make a contribution, email me with a brief summary. Please include the name by which you would like me to attribute you (though sadly the process I use will likely to mangle any Unicode characters). Please make all links full. I will shorten them. Thanks!

Perl 6 Language

not()

It turns out that not() (with no arguments) made Perl 5 core dump for a while, and it took us five years to figure that out. In Perl 6 it will be a list op. Calling it with no arguments will return a null list or an undef depending on context.

Junctions and Threading

I had hoped that last week someone would have addressed the concerns about threading. I was disappointed in this. A new crop of concerns surfaced and died down fairly quickly (as the chief proponent, Damian, was away).

Serializing to Various Languages

Somehow the discussion of junctions morphed into a discussion of sets, which morphed back into junctions, which morphed into a discussion of serialization to different languages. Interesting stuff, but I wouldn’t hold my breath for it.

Performance Analysis and Benchmarks

Adam Preble posted an offer to develop some benchmarks for Perl 6. Unfortunately, I think he posted it to Google Groups. Also, he probably should have posted it to p6c or p6i as the language folk tend to wave their hands and say “magic occurs but correctness is preserved” when it comes to optimization.

Send + More = Junctions

Autrijus posted an example using junctions, instead of parents, to solve the classic

SEND MORE + ===== MONEY

problem. Markus Laire asked for a clarification, and Rod Adams pointed out that he felt that it would not work as it did not capture the interdependence of the “e”s. This lead to the question of how to write Prolog-like code (including unification and backtracking) in Perl 6. No one offered answers.

Pairs as lvalues

Ingo Blechschmidt wondered what the behavior of pairs as lvalues would be. The answer is that you will receive an error for attempting to modify a constant.

Perl 6

Roberto Bisotto wanted to know where he could download Perl 6 to start playing with it. We embarrassedly told him that a full implementation was not yet available, but Pugs was gaining ground quickly.

Hash Keys

Autrijus wanted to know if hash keys were still just strings or if they could be more. The answer is that by default they are strings, but you can declare them as having a different shape. This led to a discussion of hashing techniques such as the .bits, .canonicalize, or .hash methods.

Dynamically-Scoped Dynamic Scopes

Dave Whipp wanted to make “dynamically-scoped dynamic scopes”. My head hurt, but apparently Larry’s didn’t. He replied, “Piece of cake, the syntax [and implementation] are left as an exercise for the would-be module author.”

Parameters to Rules

Rod Adams asked how he could specify arguments to rules so they could be more function-like. Larry explained that there were several syntaxes, each of which can coerce its arguments in slightly different ways. He then mused that perhaps there were too many. I agree. There are too many.

Compile Time Signature Checking

Ahbijit Mahabal wondered how type checking will work for cases where it is not easy to determine the types at compile time. The answer: checking will be deferred to run time. In the end it seems that Perl 6 will blur the line between run time and compile time heavily. Perhaps it will provide nifty support for staged programming. Meta-Perl 6 here we come.

%*CONFIG and %?CONFIG

Brian Ingerson asked about the CONFIG hash and what sort of secondary sigil it would have. Larry explained that $?CONFIG holds the config for the machine compiling the program and $*CONFIG holds the config for the machine running the program. Then he made some noise about parsing, compiling, and running all on different machines. Then he suggested that this way led to drug induced madness.

Sigils and Structural Subtypes

Thomas Sandlaß proposed using sigils to provide a structural type system as opposed to its class/signature-based one and its constraint-based one.

Optional Binding

Luke Palmer wondered how optional arguments and slurpy ones would interact. Brent and Larry explained that they would snap up whatever arguments they could, but you can always beat them back by piping in your slurpy stuff with ==>.

Types, Classes, and Junctions

Thomas Sandlaß wants to know how the type system and the class system interrelate. He drew a happy tree of A, B, and its junctions. Really it confused me, and I agree with him that I don’t understand the value of the one junction in the context of types.

Code Indentation

Wolverian does not like any of the ways he can indent his long function declaration when it uses traits. He wants to allow a comma in them to solve this dilemma. Larry and others suggested a few alternatives. This led to a discussion of module loading and header/module files. Larry admitted that he would not mind if Perl 6 developed Ada-like module files.

Perl 6 Compiler

Pugs Releases and patches

Autrijus released Pugs 6.0.9 and 6.0.10 with help from many people.

Various Pugs Patches

Luke Palmer added more qq delimiters and fixed a unary - bug. Yuval Kogman posted a fix that made anonymous blocks both parse and run. Stevan Little un-TODOed a bunch of tests that started working; he went on to add some new tests that do not yet pass. I suspect that he is just providing more for him to un-TODO later. Yuval Kogman submitted several patches including array interpolation, a CATCH {} test, a test for an assignment bug, and a fix for a conditional of expected. Garrett Rooney cleaned up given.t, added a test for %hash.kv, one for declaring variables in a loop, and another for $?LINE and $?FILE.

Where to Post Things?

Abhijit Mahabal wondered if p6c was the correct place to post questions about Pugs and bugs in Pugs. Patrick and Autrijus agreed that p6c was indeed the correct place for most initial questions. Things will escalate to p6l only when the Apocalypses|Exegeses|Synopses are not clear.

Argument Binding Problems

Abhijit Mahabal found and analyzed a bug in Pugs argument binding. There is no solution yet.

No More Numeric Postfix Operators

Due to the space-eating postfix dot, Larry declared that there would be no numeric postfix operators. A great cry went out as if there had been a huge disturbance in the force (or not).

&?SUB and Pointy Subs

Garrett Rooney was having trouble using the &?SUB variable in pointy subs. That is because they don’t use it. &?SUB is only for full-fledged subs. That way you can call &?SUB from within a for loop in a sub and get the nice recursive behavior you likely want.

When is $_ Set

Autrijus asked Larry for clarification of which circumstances set $_. Larry explained that -> topicalizes its first argument but full subs undefine it until something else sets it, while methods bind it to their first invocant.

Parens on Method Calls

Luke Palmer was having trouble getting for %hash.keys { ... } to parse correctly. Larry replied that it is problematic if methods parse in the same manner as subs. Fortunately, the parens are mandatory when there are arguments in addition to invocants.

@x = @a == @x = @a[]

Autrijus wanted to verify that

my @x = @a;
my @x = @a[];
my @x[] = @a;

were all the same. Larry confirmed it.

Misleading Compiler Messages

Terrence Brannon noticed a very confusing error message from Pugs.

Integration Testing

Darren Duncan has offered to start the ball rolling with Perl 6 integration testing. He will translate a few modules he has written to Perl 6 so that they can act as more holistic tests for Pugs and Perl 6. There is an interesting conversation about CPAN and Perl 6 involved too.

Refs in Scalar Context

Stevan Little found a bug involving refs in scalar context.

Parrot

Parrot_get_runtime_prefix

William Coleda found a bug in Parrot_get_runtime_prefix. Leo admitted that it was a mistake.

Z Machine

Leo put up his tiny Z machine for adoption. Steve Peters offered to adopt it.

MinGW Build

Michal Jurosz posted a link to his guide to building Parrot with MinGW.

Splitting VTABLE into Interfaces

Leo and Sam posted their thoughts about splitting VTABLEs.

Checking an Attribute’s Existence

Cory Spencer wants to check for the existence of an attribute, or at the very least catch the exception thrown when an attribute is not found. Leo told him that it was on the list of things to do.

Calling C routines

Vlad Florentino wanted to know if he could call C library routines from Parrot. The answer is NCI. Look at the Parrot SDL bindings as an example.

heredoc for PIR

Bernhard Schmalhofer asked about adding heredoc support to PIR. This led to Melvin ranting that PIR is not a language for people to write. PIR’s goal was to be to be an intermediate language targeted by compilers and was not supposed to have human niceties like heredoc. Of course, for PIR to reach that state, we need a high level language that actually targets it.

PPC Linux troubles

Once more chromatic and Leo worked to try to fix Parrot for PPC Linux.

Automatic Verification of Parrot Assembly

Steve Coleman wants to develop a research project to verify assembly for security purposes, thus he had some questions about Parrot Assembly. Melvin happily provided some answers.

Tail Call Improvements

Bob Rogers supplied a patch that improved the .tail_call support in IMCC. Leo applied it.

Strings Support

Leo announced that he has merged Dan’s string patch into the current CVS head. Thanks go to Will Coleda for doing all the heavy lifting. String content in assemblers now assume the iso-8859-1 charset, unless you specify otherwise.

Where Are Thou, Dan?

Edward Peschko wondered where Dan was. Will Coleda provided the answer. He is MIA.

String Encoding Bug

Bernhard Schmalhofer found a bug with string encoding in PBC files. Leo fixed it.

Parrot 0.1.2 “Pheonix”, or, Counting is Fun

Leo proudly announced the release of Parrot 0.1.2. Thanks to everyone for all your hard work.

Test Suite Cleanup

Bernhard Schmalhofer provided a large patch which cleans up some of the test suite. Leo gave him the go ahead to apply it.

Dynclasses Cleanup Wanted

Leo posted a plea for a cleanup to dynclasses. There are no takers yet.

Parrot Installer

Olivier Thauvin wants to make a Parrot RPM for Mandrake. Leo and Will gave him pointers on where to start.

Warnocked documentation patch

Matt Diephouse wondered about the status of a patch he sent in. There is still no response. ::nudge::

Mac OS X Build Problem

Will Coleda found an Mac OS X build problem. Leo slapped himself on the forehead and fixed it.

Strip the Strip

Jarkko Hietaniemi posted a patch fixing a Tru64 build problem. Leo applied it.

Gpm Linkage

Ron Blaschke supplied a patch fixing gpm linkage. Leo applied it.

Failing Tests on Win32

Ron Blaschke posted a list of failing Win32 tests. He then mentioned that he was going to fix the missing export symbols problem.

Objects and VTABLE Changes

Leo posted a summary of his proposed changes and how they effect MMD and objects.

Rogue 0xA0 Characters

Jarkko Hietaniemi found some random 0xA0 characters in Parrot header files. He removed them and Leo applied the patch.

Parrot Config

Adrian Lambeck wondered how he could query Parrot config. Will pointed him to library/config.imc.

Tinderbox

Leo put out a request to revive the tinderboxen. Steve Peters asked if it would be useful to build it into Perl’s current smoke report.

Mac OS X Test Failure

Leo found and fixed a problem with dynclasses tests on Mac OS X.

Flatten Return Values

Bob Rogers wants to flatten a variable number of return values, just as he can flatten a variable number of arguments. Leo felt that it was a reasonable request.

Major Changes

Leo proposed a set of core changes that should take parrot to 0.2 and beyond. Roger Browne and Melvin Smith provided comments.

ncurses_life.imc error

Uwe Voelker had a problem with ncurses_life. chromatic sent him a patch to try and see if it fixed it.

Posting via the Google Groups interface does not work.

To post to any of these mailing lists please subscribe by sending email to perl6-internals-subscribe@perl.org, perl6-language-subscribe@perl.org, or perl6-compiler-subscribe@perl.org. 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 send feedback to ubermatt@gmail.com.

Tags

Feedback

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