This Fortnight in Perl 6, November 16-30 2004
Welcome to yet another summary. Although Aliya is present for this summary, I think the unnamed gecko with its tongue out will be the one who is helping to bring it to you, aided of course by Nicola Conte and Massive Attack. Rather than try to do something witty about the strange music I am listening to, or the stuffed animals who are assisting me, I will start this summary off with an entirely self-serving request. <abuse>A while ago I saw the quote, “Computer Science is merely the post-Turing Decline of Formal Systems Theory,” without an attribution. I have tried to find an attribution for it, but have been unable to find one. If any of you know it, that information would be appreciated.</abuse>
Without too much further ado, I give you Perl 6 Language.
Perl 6 Language
Nicholas Clark wondered what kind of return value the
s/// operator would return. Larry provided the answer: a match object that does wicked, smart things based on context (Boston is getting to me).
Matthew Walton wondered about deep operators and return types. No answer yet, but it is still a little early to call in the awesome forces of Warnock.
Perl 6 Compiler
The race between Google and the compiler is over and Google loses. Badly. While, alas, I do not have a pretty interface, you all have links from nntp.perl.org, plus a nifty infant grammar engine to torture.
Parrot Grammar Engine
Patrick R. Michaud (forever after known as Patrick) released a first version of the Perl 6 Grammar Engine (P6GE). Sometime later, he renamed it the Parrot Grammar Engine, as it will be standard in Parrot and PGE sounds better. He asked for people to poke and prod it. Many people did, with quite some glee. Some work has been done adding it to the Parrot build and making it use Parrot’s Configure/make system, as well as some cross-platform cleanups. Patrick also put out a request for tests and explained the basic framework already in place. He also explained his short term plans.
Larry has managed to persuade dev.perl.org to host the latest and most up-to-date versions of the Synopses. Consider the former link deprecated. Larry also mentioned that this should probably wait a little while before it hits Slashdot. Dan put a desperate plea not to also, as “I feel obligated to actually *read* the comments on Parrot and Perl 6 stories on Slashdot, at 0.”
Having fought my way through the lack of Google, I can now return to its calm, warm tones and convenient threading.
RT Data Extraction
Will Coleda pointed out that he has the mystical power to extract and summarize data from RT automatically. Then he asked for suggestions about how to use this power for good or for awesome.
Adam Warner has some trouble locating shared libraries on Debian. Leo pointed out that Debian apparently names these libraries funny things. The he added support for symlinks and asked Adam to provide the appropriate symlinks.
Adam Warner played around with the Leibniz summation for pi example, but could not get it to be more precise than 3.1431591. It turns out that the
sprintf worked better. In fact, it allows you to print more precision than you actually have. Ain’t life in the floating point world a pain? We should all use integers, where pi is exactly 3.
The ongoing thread of three-letter acronyms finally seems to have run its course, ending in a climactic upgrade to Perl 5.8.5.
Leo posted a new, calling scheme proposal. Dan stomped on it hard, then posted an updated version of PPD03 (calling conventions). People spent some time fleshing out every little corner of the new doc.
Joshua Gatcomb kindly acted as a intermediary between the list and Clinton A. Pierce. Apparently perl.org has blacklisted Clinton’s domain and ISP. He would be willing to resume work on it, but he would like help, and/or to be un-blacklisted. There was no real answer to Clinton’s troubles. On a side note, my old email provider, www.softhome.net, also occasionally gets blacklisted by perl.org (it seemed to go in fits and starts).
Michel Pelletier was wondering if he could have CVS access to the Parakeet language directory now that he has a perl.org username (michel). Dan said that he had forgotten to mention that he had put in a request, and he would likely forget to mention when the request went through.
In the confusion of what not to change and what to change, the op to return to the caller by invoking the current return continuation disappeared in the shuffle. After sorting out the fact that Dan wanted it to go in, Leo added it, naming it
returncc for lack of anything better.
Jeff Horwitz noted that Parakeet did not quite work. Leo pointed out that Parrot had outflown Parakeet and it needed to catch up with the new eval changes.
Deprecation of P0, P1, P2
Leo sent a warning to the list that, as per PDD03, access to the current continuation and sub should only come from the
interpinfo ops. Usage of P0 and P1 for these things is officially deprecated and soon to be discontinued. Also, P2 current object came along for the ride later, which caused troubles with imcc’s
self macro. Later, he removed the deprecated things.
Leo has coerced
main into looking and acting exactly like any other sub. Consistency is nice like that.
Continuations, Basic Blocks, and Register Allocation
The thread of the week last week continued strong into early this week, slowly but steadily clearing up misconceptions of certain summarizers who would like to remain anonymous. Also, later in the week, Bill Coffman provided a summary of the problems and ideas thus far. We all eagerly await the resolution.
To keep up with the aforementioned
eval changes, Bernhard Schmalhofer provided some m4 improvements.
Dan, Leo, and Patrick had an interesting discussion about the speed of various calling conventions. While
RET beats continuations, continuations with tail-call optimization beat
RET with tail-call optimization edges out continuations. In the end, the PGE will be agnostic to calling conventions so as to provide a real-world test for benchmarking. Either way, fear the Big Sweaty Russian (ask Mike Z if you want to know ;-).
Last week I incorrectly claimed that the
d signature allowed access to a raw buffer. I was wrong, it was
b. Thanks for the catch, Bernhard.
Andy Dougherty noticed that matchrange.pmc attempted to return something from a void function. He supplied a patch, but there seems to be no response….
Gerd Pokorra submitted a patch to fix a problem with
perl6 --tree. Warnock applies.
ResizableIntegerArray Needs Soda
Patrick requested that someone provide the wonderfully amazing
pop. Once that is done, PGE should switch from using a
PerlArray to a
ResizableIntegerArray. Patches welcome.
James deBoer provided the previously requested patch for doing the right thing when there is no
perldoc present. Leo applied it.
The great thing about breaking benchmarks is that if you do it right, your execution time goes from a big number to nearly nothing. It provides one hell of a speed up. Unfortunately, it also means they don’t work. Alas, such is life. Fortunately Leo provided an explanation, if not a fix.
Leo voiced his confusion about
MMD_ADD_INT. When Leo is confused, I worry.
Polymorphic Inline Caches (PICs)
Leo posted some interesting stuff about PICs and provided some preliminary benchmarks. He also provided a link to the article from which he drew the idea.
Klaas-Jan Stol noticed that pmc2c2.pl failed on his 10.2 installation. He asked for help, but no one has responded yet.
William Coleda noticed that we did not consistently use_underscores or pushwordstogether. Everyone agrees this is a problem, so we are probably just waiting on a brave soul who can make the necessary sweeping change. I think that underscores_won_out.
Will Coleda added basic list support to Tcl. Then he threatened to do more with it. I, for one, welcome our new list overlords.
chromatic (whose name Google rudely capitalizes) had some trouble building Parrot on PPC Linux. No resolution yet.
New TODO Items
Will Coleda added some new TODO items.
Tim Brunce asked how Parrot was handling IP concerns. Dan told him that we have lawyers working up “Real Paperwork” even as we speak. In the meantime, it is mostly an honor system.
Will Coleda found a bug in MMD. Leo took responsibility and submitted a fix.
Patrick wondered if some code sitting around would properly escape a string into a nice, clean form. The answer is yes, use
Luke Palmer found this bug. Leo fixed it.
Luke Palmer wondered if subs still had to have
_ before their names. Leo provided the answer: no, and the docs are out of date.
Leo noted that opcodes with silent effects need a little more special treatment. This morphed into a conversation about the continuation troubles that have been haunting us all and exceptions, too.
Will Coleda asked if it would be possible to indicate what route Parrot would return to after a
returncc opcode. Leo liked the idea and put in a quick hack for it, which needs cleanup.
Gabe Schaffer continued to explore the problems and approaches to portable threading with Leo’s help. Best of luck, guys.
Will Coleda noticed a possible optimization with register mapping. Leo said that it was not that simple, but it would be implemented at some point in the new register allocator.
Exceptions hurt my head, especially Dan’s description of them. Thus I will just leave you to read it for yourself, so your head can hurt, too.
Leo noticed that the Makefile is not quite right about its dependencies. This frequently recurs.
Stéphane Peiry provided some more JIT support for the Sparc. Leo applied the patch.
Will Coleda, Luke Palmer, Jerome Quelin, and Patrick all worked to clean up PGE to have its own namespace and consistent naming.
Bernhard Schmalhofer noticed that
Parrot_compreg had a different signature than documented, so he submitted a patch to fix it. Leo applied it.
Leo added a TODO ticker for opcode numbering.
Tests Pass, but Create Core Files
I reported that on my machine all of the tests claim to pass, but core files appear in the parrot directory. Dan confirmed my suspicion that this was a real problem. I tried to supply helpful information like back trace, but Warnock applies.
Leo removed the recently deprecated P0, P1, P2 usage. Relatively few tests break as a result.
Luke Palmer wanted to know if there is syntax for calling subs from a particular namespace. Leo provided the answer: call it as a method on the namespace PMC.
Luke Palmer wondered if he could define a
.sub "new" to get around reserved word problems. Leo added the support, but warned him not to use “spaces or such.”
Lexicals, Continuations, Register Allocation, and ASCII Art
This thread (and the ones that preceded it) have made me wish that Gmail and Google Groups had a fixed-width font option. Sadly, this summary will probably not get me it, as it did not get me p6c either. Ah well. The problems associated with lexicals and continuations churned. There was a plea for guidance from Dan. Hopefully he will guide us shortly.
Bloves had a question about assemble.pl in the Parrot 0.0.1 source. Warnock applies.
chromatic managed to track down some of the PPC build issues for Linux. Leo wondered where all of the config hackers went. I think Leo wants someone to fix it.
Flavio S. Glock noted that the preprocessor did undesirable things. Leo suddenly realized that it was woefully out-of-date and need major fixing/disabling. Flavio submitted a small patch for it, but Leo pointed out that this was not enough to actually fix the preprocessor.
Leo added a new
push_eh opcode and deprecated the old
TODO and RT Wrangling
Will Coleda continued his stellar work managing the RT queues. Brent “Dax” Royal-Gordon patched the first one.
PMC Does “hash|array|monkey”
Will Coleda added a ticket for the
does functionality. He promptly closed it when Leo pointed out that it already existed in the form of the
does op. So Will up and started using it.
Dan announced that the last of his string stuff was checked in and he would like brave souls to help him merge it back into the tree.
Will Coleda thanked Josh Wilmes for fixing the Language TODO tests. Apparently one of Tcl’s has mysteriously started working.
Jens Rieks noticed that somewhere in the shuffle minesweeper broke. As a professional minesweeper-er, this shocks and offends me. Leo offered a pointer as to where to start looking to fix it.
Leo added some support for anonymous subroutines. People liked them and began to use them. Luke Palmer promptly tried combining it with
@IMMEDIATE and began to wonder if it were immediate enough.
I think that I shall continue to spell out PGE for a little while, but I may decide to use only the acronym in some later summary without warning, so be prepared. Oh right, the whole reason I mentioned it in the first place … Will Coleda pointed out a few issues, including (1) doesn’t compile by default and (2) doesn’t compile at all. Nicholas Clark fixed (2), and Patrick figured that (1) could wait until it was a little more mature. Personally, I feel that maturity is overrated, poo-poo head.
Cindi Jenkins posted a link to an interesting blog entry on rules engines. Unfortunately, I think she posted it to Google Groups as it did not find its way onto the list. Also, unfortunately, it is a post about logic rules engines a la Prolog and not grammar rules. Who knows, though, there might be some overlap….
PIR Examples on the Website
Herbert Snorrason noted that there were no PIR examples on the website and opened a ticket for it. Will took a first pass at it.
Luke Palmer found a subtle-looking problem in string_102.pasm. Leo couldn’t reproduce it and suggested that it might be a Red Hat thing. Peter Sinnott chimed in with a possibly unrelated failure, also on Red Hat.
Matt S. posted a question about how much internal tuning and monitoring Parrot will allow. Unfortunately, I think he posted it to Google Groups, as it didn’t show up in my inbox. I am honestly not sure how much is available or in the works.
Andy Dougherty submitted a patch fixing a missing directory in the manifest by allowing ops2pm.pl to add it.
Dan posted a refresher on the current state of the object system. He then went on to explain where it was headed and conjectured that this would be enough. Just reading his description of it hurts my head enough that I do not wish to guess if he is right or not.
Brian Wheeler wondered why there was no “eof” opcode. Leo told him that it was a method on a PIO object. Apparently most of the IO opcodes should actually be PIO methods. Go figure.
Ops to Deprecate or Not
Leo attempted to trim down the core by removing some opcode variants. Dan did not appreciate the change and told Leo to roll it back. Fortunately, Dan went on to explain the longer-term goal (which should satisfy Leo).
Perl 6 Language
Last week, Matthew Walton wondered about Deep Operators and if they would work as he expected. As I tentatively predicted, the answer came back and was “yes.” Then the thread got sidetracked with context and Perl vs. perl vs. PERL concerns.
Dave Whipp wanted to know if he could use
take with multiple bins. Michele Dondi suggested using adverbs for it. Rod Adams pointed out that as
gather is inherently lazy, the two-binned approach could cause strange results (like churning for a while, filling one bin, and trying to get an element for the other). Of course, not being able to do it would mean possibly having to compute an expensive generator function. This is more than necessary, unless it is memorized….
Thomas Seiler has decided to test my copy-paste-fu by starting a discussion on characters that don’t appear on my keyboard. His question was if
<<END could start a here-doc. The answer appears to be “no.”
The above thread led to a discussion of the various quoting operators, and the differences between
<<>>. This led to much discussion on the finer points of
qw in favor of
qq:w, which Larry liked. Rod Adams suggested scrapping
<<END in favor of
qq:h/END/, which I like.
Alexey Trofimenko wondered about unifying the $, @, and % namespaces. Larry told him that this ship sailed long ago and that it was not changing.
Adam Kennedy wants to be able to syntax color (and possible perform basic programmatic manipulations of Perl 6 code). Anyone who has used a good IDE like Visual Studio, Eclipse, or IntelliJ probably understands where he is coming from. He does not, however, want to execute arbitrary code in the process of doing this. Much discussion ensued, but it does not look like he will be able to do this. Quite the tragedy, but Perl is simply too dynamic for the docile lexing of static languages.
Nick Glencross has the honor of the only message on p6c this week, but his sentiment is shared by all. Nice work, Patrick.
The Usual Footer
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 firstname.lastname@example.org.
Something wrong with this article? Help us out by opening an issue or pull request on GitHub