March 09, 2010
Howdy,
I am working on the application for The Perl Foundation and Parrot
Foundation to participate in Google Summer of Code 2010 [0]. GSoC is a
program where Google funds eligible students to hack on open source
projects for a summer. It is a great opportunity for the students and
the communities that mentor them. You also may be interested in this
summary of our involvement last year [1]. Our application will be
submitted by the end of this week.
Please join us in getting prepared for this year. There is a page for
possible mentors to volunteer [2]* as well as a page for project ideas
[3]. If you would like to help with the wiki, our main GSoC page [4]
is the best place to start. You are also invited to join our mailing
list [5] and come ask question in #soc-help on irc.perl.org .
Thanks!
Duke
[0] http://socghop.appspot.com/
[1] http://google-opensource.blogspot.com/2009/10/perls-of-wisdom-perl-foundation-parrots.html
[2] http://www.perlfoundation.org/perl5/index.cgi?gsoc_mentors
[3] http://www.perlfoundation.org/perl5/index.cgi?gsoc_2010_projects
[4] http://www.perlfoundation.org/perl5/index.cgi?gsoc
[5] http://groups.google.com/group/tpf-gsoc
* If you listed yourself as a mentor last year and you are not
interested this year, please remove yourself from the page.
--
Jonathan "Duke" Leto
jonathan@leto.net
http://leto.net
March 09, 2010 01:12
March 08, 2010
Ever wonder why bash closes if blocks with fi? This practice was inctroduced in Algol 68, a language that Perl 6 was accused of reinventing yesterday on the perl6-language list.
Curious, I went to the Wikipedia article to read up on Algol 68.
ALGOL 68 (short for ALGOrithmic Language 1968) is an imperative computer programming language that was conceived as a successor to the ALGOL 60 programming language, designed with the goal of a much wider scope of application and more rigorously defined syntax and semantics.
"Successor." "Wider scope of application". "More rigorously defined syntax and semantics". Sound familiar?
ALGOL 68 has been criticized [...] for abandoning the simplicity of ALGOL 60 becoming a vehicle for complex or overly general ideas, and doing little to make the compiler writer's task easy [...]
Oh dear. ☺ We even have the 'do little to make the compiler writer's task easy' meme in Perl 6...
<TimToady> after all, Perl Philosphy is simply to torment the implementors on behalf of the user (#perl6, 2008-10-09)
<pmichaud> aha! I have a quote for my keynote.
Besides that, there's all these other little parallels, such as
- Algol 68 seemingly playing with words (they borrowed the term 'gomma' from Finnegan's Wake, but the feature it denoted got scrapped in a 1973 revision),
- something junction-like called 'multiple value',
- a whole heap of values for different forms of nothing and undefinedness,
- a newly-invented grammar formalism, and
- a general feeling of deep ambitiousness and a desire to get things right.
So, there are deep similarities between Algol 68 and Perl 6. There's not much to say to that, except perhaps "huh".
If there's anything in it all that's uplifting though, it's the second paragraph of the article:
Contributions of ALGOL 68 to the field of computer science are deep and wide ranging, although some of them were not publicly identified until they were passed, in one form or another, to one of many subsequently developed programming languages.
If that's not spot on for Perl 6, I think it will be in a decade or so.
March 08, 2010 22:01
an impressive post like that one a week ago won't come again so fast. Last days I added Pawel Murias and Gabor and mentioned pixie, but the main part is done here. The
timeline (structured and with 33 items) is now also mostly done. You can also see that we exceeded the zenith of edits. The number of articles touched in last 14 days is now sinking rapidly. it So whats next?
Well
renee needs the next perl 6 article, which I want deliver this week. All the experience I collected writing the 200+ changes in last 2 weeks will go into that. But my next goal for the TPF wiki will be the translation of my
perl 6 tut and the release of
Kephra 0.4.3, which is some weeks overdue.
March 08, 2010 01:21
March 04, 2010
March 04, 2010 23:35
March 02, 2010
Oops. I think excessive distractedness just made me miss a 10-day interval, thereby falling off the Iron Man challenge. Oh well. [Sidenote: Is there a way to easily check one's Ironman status?]
Lately, I've been feeling a bit like the snowplows shuffling snow around outside my office window. I have a lot of things I want to blog about, but I've been pushing them ahead of me. That's exactly what the Iron Man thing is supposed to counter. Guess procrastination won out in this case.
So, how much blog would a masak write if a masak could write blog? Here's a list off the top of my head of the things I've been thinking of blogging about:
- The presentation I'm writing for the Open Source Days in Copenhagen this weekend. I'm really excited about it.
- The "7 Wonders of the Ancient Grammar Engine" series. I've started on it, and I like what I have so far.
- More E03 stuff. Guess that's what I didn't blog about in the past 11 days.
- snarkyboojum++ and I have started toying with writing a time-travelling debugger. Yes, really.
- A lot of things are happening in Rakudo-land this month, after the successful ng merge. colomon++ especially shines like a bright star right now, bringing lots of tests back online each day.
- I'd like to get enums in Rakudo before this month's release. I've already done anon enums. Next up: named enums.
- I've been starting to think seriously about u4x lately. Partly because of other people's questions, partly because it seems the the time is ripe to start it.
- However, every time I have that thought I realize that the book is more important at the moment. I have some unimplemented ideas there as well.
- GGE is very near being PGE-compliant. Just a few finishing touches are needed. This will likely usher in a new era in Perl 6 grammars and parsing.
Will I have time in the near future to expand these one-liners into full-fledged blog posts? Only time will tell.
March 02, 2010 11:15
The Perl 6 design team met by phone on 24 February 2010. Larry, Allison, Patrick, and chromatic attended.
Larry:
- my work last week was almost entirely responsive to various discussions on irc and p6l, even when it doesn't seem like it
- clarified that
LEAVE-style phasers do not trip till after an exception is handled (and not resumed) - the implementation of take is specifically before unwinding even if implemented with a control exception
- simplified series operator by moving generator function to the left side (any function on right side will now be a limiting conditional)
- a
* is no longer required to intuit the series on the left; the absence of generator before the ... operator is sufficient - first argument on the right of
... is now always a limiter argument - for convenience and consistency, added a new
...^ form to exclude a literal limiter from the generated series - unlike ranges, however, there is no leading exclusion
^... or ^...^ - series is a list associative list infix, and each
... pays attention only the portion of the list immediately to its left (plus the limit from the right) - an "impossible" limit can terminate a monotonic intuited series even if the limit can never match exactly
- variables now default to a type of
Any, and must explicitly declare Mu or Junction type to hold junctions - this is to reduce pressure to duplicate many functions like
== with Mu arguments; most of our failure values should be derived from Any in any case - a
Mu result is more indicative of a major malfunction now, and is caught at first assignment to an Any variable -
Instant/Duration types are biased away from Num and towards Rat/FatRat semantics -
Instant is now completely opaque; we no longer pretend to be the same as TAI, numerically speaking -
Instants are now considered a more basic type than epochs, which are just particular named instants - all culturally aware time can be based on calculations involving instants and durations
- list associative operators now treat non-matching op names as non-associative rather than right-associative, forcing parens
-
Whatever semantics now autocurry any prefix, postfix, or infix operator that doesn't explicitly declare that it handles whateverness itself -
WhateverCode objects now take a signature to keep clear how many args are not yet curried - so
*+* is now more like WhateverCode:($x,$y) - autocurrying is still transitive so multiple ops can curry themselves around a
* - added semilists as
Slicel type to go with Parcel - this allows us to bind
@array[1,2,3] differently from @array[1,2,3;4,5,6], for instance - the
Matcher type now excludes Bool arguments to prevent accidental binding to outer $_ when closure is needed -
when and ~~ will now warn of always/never matching on direct use of True or False names as matcher - STD generalizes
\w lookahead to all twigils now - STD now treats non-matching list associatives as non-associative
- things like
1 min 2 max 3 are now illegal, and require parenthesization for clarity - STD now treat invocant colon as just a comma variant so it does not fall afoul of the list associativity change
- CORE now recognizes the
TrigBase enumeration
Patrick:
- first release of the new branch of Rakudo last week
- passing ~25,000 tests at the release
- thanks to optimizations from chromatic, Jonathan, and Vasily, Rakudo has a lot of speed improvements
- in particular, it can run those tests in under 10 minutes, non-parallel, depending on your hardware
- older releases took 25 minutes and more
- the regex tests will slow things down
- ultimately, we're seeing a big speed improvement over the past releases
- cleaned up lists and slices, now they work pretty well
- worked with Solomon Foster and others to speed up trig operations
- fixed a bug related to lexicals declared in classes
- fixed the long-standing and often recurring problem with curlies ending a line/statement causing the next statement to be a statement modifier
- easy to fix in the new grammar
- that was nice
- made an initial implementation of the
sort method - it's very short, because Parrot provides one
- there are a few bugs in Rakudo there still, but I'll get them
- planning for the Copenhagen hackathon on March 5 - 9
- Jonathan and I have been updating the Rakudo roadmap
- will check that in in the next couple of hours
- so far, every time we review it, we surprise ourselves at how much we've accomplished
- we're meeting all of the top priority goals without making any heroic efforts
- we'll put those goals in as well as timelines
- most of the major tasks from previous roadmaps have happened
Allison:
- working on Python this week
- attended Python VM summit, Python language summit, and PyCon
- Parrot's on good track to support what Python needs
- useful to make community connections
- when I reviewed Pynie, I was surprised to see how close it is to supporting the whole Python syntax
- some of those features are big, like objects
- but we should support them soon
- Debian packages delayed by the absence of a sponsor
- they should go into Debian soon though
- I put in a request for feature-freeze exception for Ubuntu 10.4
- Parrot 2.0 should go in
- haven't made any commits to the PCC branch
- that'll be a top priority for next week
c:
- fixed a Parrot GC bug for last week's Rakudo release
- made some optimizations in Rakudo and Parrot
- helped Jonathan find a few more
- fixed a long-standing math MMD bug
- still working on HLL subclassing; more tricky than you think
- may be some conflicting design goals about vtable overriding and MMD
Allison:
- Patrick, do we need an explicit deprecation for old PGE and NQP?
Patrick:
- I think Will already added one for NQP
- we can add one for PGE if we need
- they don't necessarily have to disappear at the next release
- but no one's planning to maintain them
Allison:
- no reason not to put in the notice now
- we don't have to remove them at the earliest possible date
March 02, 2010 05:12
The wiki madness continues, I did 2,3 People stubs(Will Coleda, Gabor) and a lot stubs around Parrot: PCT, NQP, Blizkost, PIR, Parrot compiler, PGE but that will slow down. There are some community related things missing like conferences, hackathons and so on and maybe a perl 6 timeline but what I want to show today, are articles which became well formated good content.
Sprixel was done its coauthor Martin.
March 02, 2010 01:15
February 25, 2010
Now its's the third time I'm rambling about the recent TPF wiki overhaul. Beside the fresh cleaned frontpages that just containes links to the 5 most important pages and aggregation of recent recent blog posts (was there before), many new pages were created. before we had 3 or 4 pages about wiki contributers now we have:
Kudos to lot of these people who helped me to write their article. Masak is last because the November bug is still there. :) Then we had an article about KP6, SMOP , Rakudo and Parrot. Now we have:
Special thanks here to chromatic++. Yes, yes almost all of them are stubs, but i add constantly. then I also added:
Like said, many of them are very short, but sometimes its only necessary to give form like a crystalization point.
February 25, 2010 23:46
The Perl 6 design team met by phone on 17 February 2010. Larry, Allison, Patrick, and chromatic attended.
Larry:
- much work clarifying relationship of parcels to everything else (
<a b>, assignment, arguments, captures, parameters, signatures, gather/take, and loop returns) - we now list all scope declarators in one spot
- conjectured some ideas on how to handle the allomorphism of literals more dwimmily
- had already specced some of this behavior for literals found inside
qw angles. - literals that exceed a
Rat64's denominator automatically keep the string form around for coercion to other types - clarified that anon declarator allows a name but simply doesn't install it in the symbol table
- respecced the trig functions to use a pragma to imported fast curried functions
- still uses enum second argument for the general case (rakudo is still stuck on slow strings there)
- on iterators, renamed
.getobj to .getarg since arguments are the typical positional/slicey usage - signatures are never bound against parcels anymore, only against captures
- we now use "argument" as a technical term meaning either a real parcel or an object that can be used independent of context as an argument
- anything that would stay discrete when bound to a positional, basically
-
return, take, and loop return objects are also arguments in that sense - they all return either a parcel or anything that can stand on its own as an argument
- STD now adds a shortname alias on adverbialized names, ignores collisions on the shortname for now, which is okay for multis
- STD now complains about longname (adverbialized) collisions
- STD no longer carps about duplicate anonymous routine declarations
- made the undeclared type message the same for parameters as for other declarations
- clarify the error message about anonymous variables
- no longer report a
$) variable error where ) is the $*GOAL - add
WHAT etc. to list of functions that require an argument
Allison:
- working on two HLL implementations
- one is Pynie, the other is Camle
- nothing to do with Caml or ML
- I've noticed huge improvements in NQP-rx from the previous NQP
- can't say which feature improvements make the most difference, but I'll migrate Pynie pretty soon to take advantage of the new version
- continuing to shepherd Debian and Ubuntu packages
Patrick:
- essentially all I did was unify things
- previously it had been two or three tools
- it's just one
Allison:
- even the syntax seems more regular
Patrick:
- there are more pieces available in NQP-rx
- Rakudo's -ng is now master
- the old master is now -alpha
- we took a big hit on spectests, but they seem to be coming back quickly
- 5000 tests pass on trunk now
- we have 16k or 17k we haven't re-enabled; they make the spectest slower
- Jonathan thinks we may pass 25,000 tests now
- that's great, considering where we were a week ago
- I redid Rakudo's container, value, and assignment module
- previously variables held values directly
- now they contain reference PMCs
- that cleaned up many things
- we use more PMCs, but now we don't clone and copy as much
- we move references around more
- seems closer to how Perl 6 handles things
- was much easier than I expected
- updated the NQP-rx regex engine and built in constant types
- handles Unicode character names
- reclaims plenty of tests
- answered lots of questions for people adding things into Rakudo
- prioritizing other people writing code over writing code
- increases our developer pool; seems to be working well
- new release of Rakudo planned for tomorrow
- don't know how many tests we'll pass, but it should go well
- plan to put in a few things like
sort and grammars over the next week - then I'll review the RT queue to find bugs and (hopefully) closeable bugs
c:
- working on GC tuning
- also working on String PMC tuning
- working on built-in types and their behavior as classes and parent classes
- the multidispatch bugs in particular I hope to solve
February 25, 2010 00:27
February 23, 2010
He was a major writer in the TPF wiki. At least half of the todays visible content is his and ruosos typework, even if I did spit a lot out these days. Because these efforts, other than his 1000$ donation for
November, are largely unrecognized I solute him here. That doesn't mean
I brag with my stuff too.
He gave the
new frontpage the final polish.
Currently I am focussed on entering all major people and implementations into the TPF wiki. So check please if I'm writing something wrong about you. Yes and chromatic, Allison and Damian are still missing.
February 23, 2010 02:53
February 20, 2010
together with mberends++ we revamped the
fronpage of the TPF wiki, sorted links, pages, deleted spam and added some minor content. There are still some old links left but camelia smiles now.
February 20, 2010 02:26
My signature improvements Hague Grant is pretty much wrapped up. I wrote a couple of posts already about the new signature binder and also about signature introspection. In this post I want to talk about some of the other cool stuff I've been working on as part of it.
First, a little background. When you make a call in Perl 6, the arguments are packaged up into a data structure called a capture. A capture contains an arrayish part (for positional parameters) and a hashish part (for smok^Wnamed parameters). The thing you're calling has a signature, which essentially describes where we want the data from a capture to end up. The signature binder is the chunk of code that takes a capture and a signature as inputs, and maps things in the capture to - most of the time, anyway - variables in the lexpad, according to the names given in the signature.
Where things get interesting is that if you take a parameter and coerce it to a Capture, then you can bind that too against a signature. And it so turns out that Perl 6 allows you to write a signature within another signature just for this very purpose. Let's take a look.
multi quicksort([$pivot, *@values]) {
my @before = @values.grep({ $^n < $pivot });
my @after = @values.grep({ $^n >= $pivot });
(quicksort(@before), $pivot, quicksort(@after))
}
multi quicksort( [] ) { () }
Here, instead of writing an array in the signature, we use [...] to specify we want a sub-signature. The binder takes the incoming array and coerces it into a Capture, which essentially flattens it out. We then bind the sub-signature against it, which puts the first item in the incoming array into $pivot and the rest into @values. We then just partition the values and recurse.
The second multi candidate has a nested empty signature, which binds only if the capture is empty. Thus when we have an empty list, we end up there, since the first candidate requires at least one item to bind to $pivot. Multi-dispatch is smart enough to know about sub-signatures and treat them like constraints, which means that you can now use multi-dispatch to distinguish between the deeper structure of your incoming parameters. So, to try it out...
my @unsorted = 1, 9, 28, 3, -9, 10;
my @sorted = quicksort(@unsorted);
say @sorted.perl; # [-9, 1, 3, 9, 10, 28]
It's not just for lists either. An incoming hash can be unpacked as if it had named parameters; for that write the nested signature in (...) rather than [...] (we could have use (...) above too, but [...] implies we expect to be passed a Positional). For any other object, we coerce to a capture by looking at all of the public attributes (things declared has $.foo) up the class hierarchy and making those available as named parameters. Here's an example.
class TreeNode { has $.left; has $.right; }
sub unpack(TreeNode $node (:$left, :$right)) {
say "Node has L: $left, R: $right";
}
unpack(TreeNode.new(left => 42, right => 99));
This outputs:
Node has L: 42, R: 99
You can probably imagine that a multi and some constraints on the branches gives you some interesting possibilities in writing tree transversals. Also fun is that you can also unpack return values. When you write things like:
my ($a, $b) = foo();
Then you get list assignment. No surprises there. What maybe will surprise you a bit is that Perl 6 actually parses a signature after the my, not just a list of variables. There's a few reasons for that, not least that you can put different type constraints on the variables too. I've referred to signature binding a lot, and it turns out that if instead of writing the assignment operator you write the binding operator, you get signature binding semantics. Which means...you can do unpacks on return values too. So assuming the same TreeNode class:
sub foo() {
return TreeNode.new(left => 'lol', right => 'rofl');
}
my ($node (:$left, :$right)) := foo();
say "Node has L: $left, R: $right";
This, as you might have guessed, outputs:
Node has L: lol, R: rofl
Note that if you didn't need the $node, you could just omit it (put keep the things that follow nested in another level of parentheses). This works with some built-in classes too, by the way.
It works for some built-in types with accessors too:
sub frac() { return 2/3; }
my ((:$numerator, :$denominator)) := frac();
say "$numerator, $denominator";
Have fun, be creative, submit bugs. :-)
February 20, 2010 00:21
February 19, 2010
I was a bit optimistic with time. So what else is new.
Anyway, various distractions such as $WORK kept interrupting my translation of E03 today, but now I've finally got it all ported to modern Rakudo-Perl 6. Here it is. Two biggish things remain:
- I haven't tried running the code. I'm pretty sure it won't run on the new Rakudo master yet. But I've written it with alpha (the old development branch) in mind, and it should run there.
- I haven't looked at SF's E03 translation yet. (Yes, I'm linking to a blog entry which I haven't read yet.) I saw that the title of his post is "first stab", which makes me feel a little better.
Here are a few random comments about the code.
- The original code in E03 is the strangest example code I've ever read. All due props to Damian, but... quod? A program whose task it is to "locate a particular data file in one or more directories, read the first four lines of each such file, report and update their information, and write them back to disk"? Come again? (My suspicion is that this was the program arrived at by simply cramming in as much of A03 as possible into the same piece of code, but nevermind.)
- A few nice things are still missing from Rakudo. The
s{}{} syntax is the last still unimplemented request in an old blog post of mine. It'd be pretty nice to have. I think we'll have it soon, thanks to ng. - You can't open files
rw in Rakudo. Then again, you can't seek or truncate them either, so I guess opening them rw wouldn't make much sense anyway. Due to this, I had to work around a central part in the program, where filehandles were stored in a hashtable, to be read from in one subroutine and written to in the next one. Had to store the filenames instead, and re-open the files for writing. - We don't have the
:r and :w filetests yet, but :e and (strangely enough) :s are implemented. Someone with tuits should really do :r and :w. - A fair amount of the updates in E03 are out-of-date. I guess operators and related things are an area where Perl 6 really has evolved a lot in the past few years, or even in the past year. As I speak, the exact semantics for
infix<...> is still being discussed on #perl6. - When I say things have changed around a lot, I should really mention that I say that with a sort of relief of the sort that means "gee, I'm glad we didn't stick to what we thought we wanted back then!". Things have, by and large, improved greatly. I actually hope to write more about that.
This exigesis-modernising is kinda fun! Now I'm eager to go read what SF++ has been up to.
February 19, 2010 23:30
On behalf of the Rakudo development team, I'm pleased to announce the
February 2010 development release of Rakudo Perl #26 "Amsterdam".
Rakudo is an implementation of Perl 6 on the Parrot Virtual Machine
(see http://www.parrot.org). The tarball for the February 2010 release
is available from http://github.com/rakudo/rakudo/downloads .
Rakudo Perl follows a monthly release cycle, with each release named
after a Perl Mongers group. The February 2010 release is code named
"Amsterdam" for the largest chapter of the Dutch Perl Mongers. Perl
development enjoys considerable support from the Netherlands, with
donations from NLNet, and hosting of the feather machines and several
important Perl 6 web domains and sites.
This release is the first release based on the new branch of
Rakudo development begun in October 2009. The branch refactors
the grammar, object metamodel, and a number of other key features
to improve compatibility with the Perl 6 specification and give us
a more solid foundation to build on. Indeed, in many ways the
development of this new branch has driven important changes to the
specification in the areas of lists, iterators, slices, and much
more.
However, this release contains a number of significant regressions
from previous compiler releases. We expect to have full functionality
restored in this branch in the next couple of weeks. For those
looking to explore a wide variety of Perl 6 features or who have
applications developed using previous releases of Rakudo, you may
wish to continue to use the January 2010 (#25, "Minneapolis")
release.
This release of Rakudo requires Parrot 2.1.0. One must still
perform "make install" in the Rakudo directory before the "perl6"
executable will run anywhere other than the Rakudo build directory.
For the latest information on building and using Rakudo Perl, see the
README file section titled "Building and invoking Rakudo".
Some of the specific changes and improvements occuring with this
release include:
* Now using nqp-rx for parsing and actions
* Grammar is much closer to STD in many aspects, and makes use of
protoregexes
* Closures and lexical/contextual variable declarations in regexes work
* Laziness is implemented
* All class and role construction is handled through the meta-model
The Perl 6 language specification is still in flux. Please take note of the
following changes, which might affect your existing programs. In the next
release of Rakudo, the deprecated features will likely be gone.
* The root of the object hierarchy has been changed from 'Object' to 'Mu'.
The type 'Object' goes away.
* The term 'undef' is gone. You can replace it with other constructs,
depending on context:
- 'Nil' is undefined in item context, and the empty list in list context
- 'Mu' is the most general undefined value which does not flatten in
list
context
- as a smart matching target, you can replace '$obj ~~ undef'
by '$obj ~~ *.notdef'
* Builtin classes will derive from 'Cool' (which itself derives from 'Any').
Most of the builtin methods on these classes will be defined in the
'Cool' class instead of 'Any'. See Synopsis 2 for more details.
* Starting with the this release, release identifiers are given
as "YYYY.MM" instead of "YYYY-MM" (dot instead of hyphen).
This is intended to simplify building and packaging for other
distribution systems.
The development team thanks all of our contributors and sponsors for
making Rakudo Perl possible. If you would like to contribute,
see http://rakudo.org/how-to-help , ask on the perl6-compiler@perl.org
mailing list, or ask on IRC #perl6 on freenode.
The next release of Rakudo (#27) is scheduled for March 18, 2010.
A list of the other planned release dates and codenames for 2010 is
available in the "docs/release_guide.pod" file. In general, Rakudo
development releases are scheduled to occur two days after each
Parrot monthly release. Parrot releases the third Tuesday of each month.
Have fun!
[1] http://www.frozen-perl.org/
[2] http://use.perl.org/~pmichaud/journal/39779
[3] http://use.perl.org/~pmichaud/journal/39874
February 19, 2010 09:58
On behalf of the Rakudo development team, I'm pleased to announce the
February 2010 development release of Rakudo Perl #26 "Amsterdam".
Rakudo is an implementation of Perl 6 on the Parrot Virtual Machine
(see http://www.parrot.org). The tarball for the February 2010 release
is available from http://github.com/rakudo/rakudo/downloads .
Rakudo Perl follows a monthly release cycle, with each release named
after a Perl Mongers group. The February 2010 release is code named
"Amsterdam" for the largest chapter of the Dutch Perl Mongers. Perl
development enjoys considerable support from the Netherlands, with
donations from NLNet, and hosting of the feather machines and several
important Perl 6 web domains and sites.
This release is the first release based on the new branch of
Rakudo development begun in October 2009. The branch refactors
the grammar, object metamodel, and a number of other key features
to improve compatibility with the Perl 6 specification and give us
a more solid foundation to build on. Indeed, in many ways the
development of this new branch has driven important changes to the
specification in the areas of lists, iterators, slices, and much
more.
However, this release contains a number of significant regressions
from previous compiler releases. We expect to have full functionality
restored in this branch in the next couple of weeks. For those
looking to explore a wide variety of Perl 6 features or who have
applications developed using previous releases of Rakudo, you may
wish to continue to use the January 2010 (#25, "Minneapolis")
release.
This release of Rakudo requires Parrot 2.1.0. One must still
perform "make install" in the Rakudo directory before the "perl6"
executable will run anywhere other than the Rakudo build directory.
For the latest information on building and using Rakudo Perl, see the
README file section titled "Building and invoking Rakudo".
Some of the specific changes and improvements occuring with this
release include:
* Now using nqp-rx for parsing and actions
* Grammar is much closer to STD in many aspects, and makes use of
protoregexes
* Closures and lexical/contextual variable declarations in regexes work
* Laziness is implemented
* All class and role construction is handled through the meta-model
The Perl 6 language specification is still in flux. Please take note of
the
following changes, which might affect your existing programs. In the next
release of Rakudo, the deprecated features will likely be gone.
* The root of the object hierarchy has been changed from 'Object' to 'Mu'.
The type 'Object' goes away.
* The term 'undef' is gone. You can replace it with other constructs,
depending on context:
- 'Nil' is undefined in item context, and the empty list in list
context
- 'Mu' is the most general undefined value which does not flatten in
list
context
- as a smart matching target, you can replace '$obj ~~ undef'
by '$obj ~~ *.notdef'
* Builtin classes will derive from 'Cool' (which itself derives from
'Any').
Most of the builtin methods on these classes will be defined in the
'Cool' class instead of 'Any'. See Synopsis 2 for more details.
* Starting with the this release, release identifiers are given
as "YYYY.MM" instead of "YYYY-MM" (dot instead of hyphen).
This is intended to simplify building and packaging for other
distribution systems.
The development team thanks all of our contributors and sponsors for
making Rakudo Perl possible. If you would like to contribute,
see http://rakudo.org/how-to-help , ask on the perl6-compiler@perl.org
mailing list, or ask on IRC #perl6 on freenode.
The next release of Rakudo (#27) is scheduled for March 18, 2010.
A list of the other planned release dates and codenames for 2010 is
available in the "docs/release_guide.pod" file. In general, Rakudo
development releases are scheduled to occur two days after each
Parrot monthly release. Parrot releases the third Tuesday of each month.
Have fun!
[1] http://www.frozen-perl.org/
[2] http://use.perl.org/~pmichaud/journal/39779
[3] http://use.perl.org/~pmichaud/journal/39874
February 19, 2010 09:57
Wiseman: When you removed the book from the cradle,
did you speak the words?
Ash: Yeah, basically.
Wiseman: Did you speak the exact words?
Ash: Look, maybe I didn't say every single little
tiny syllable, no. But basically I said them, yeah.
-- Army of Darkness
On behalf of the Parrot team, I'm happy to announce Parrot 2.1.1.
Parrot [1] is a virtual machine aimed at running all dynamic languages.
Parrot 2.1.1 is available on Parrot's FTP site [2], or follow the download
instructions [3]. For those who would like to develop on Parrot, or help
develop Parrot itself, we recommend using Subversion [4] on
our source code repository [5] to get the latest and best Parrot code.
Parrot 2.1.1 is a maintenance release which fixes a memory leak identified
in Parrot 2.1.0
Thanks to all our contributors for making this possible, and our sponsors
for supporting this project. Our next scheduled release is 16 March 2010.
Enjoy!
--
[1] http://parrot.org/
[2] ftp://ftp.parrot.org/pub/parrot/releases/devel/2.1.1/
[3] http://parrot.org/download
[4] http://subversion.apache.org/
[5] https://svn.parrot.org/parrot/trunk/
--
Will "Coke" Coleda
February 19, 2010 09:56
The Perl 6 design team met by phone on 10 February 2010. Larry, Patrick, Will, Jerry, and chromatic attended.
Will:
- working on simplifying Parrot's build process
- trying to remove an invocation of Perl 5 for every compilation
- it's old and a waste of many things
- hope to have that removed by the end of the week
Jerry:
- the new #ps time should help me to attend
- looking forward to a Parrot/Rakudo workshop, possibly at YAPC::NA
- already working on artwork
- would like to get the command-line done for Rakudo *
- lacking tuits
- need some time with Patrick over the next few days
- weekends should free up after next week
Larry:
- refined the specified semantics of bitwise operators
- changed ugly
**() special form to prefix:<||> by analogy to prefix:<|>, and relationship of ** to *. - STD now accepts prefix
|| for slice interpolation - deleted old p5=> that masak++ noticed
- added explicit copyright notices to STD files
- spruced up error message on -> in postfix position (either pointy block or Perl 5 method dereference)
- mostly just served as Chief Resident Oracle on IRC
Patrick:
- had a nice vacation in Florida
- didn't have as much hacking time, due to plane delays
- should get back to coding later today
- working on the Rakudo hackathon in Copenhagen on March 6 and 7
- core hackers session on 8th and 9th there
- looking forward to that
c:
- fixed a couple of bugs
- did a bit of optimization
- wrote out a GC optimization plan
- wrote plan for a sweep free GC
- think we can get those both going in the next week
Jerry:
- noticing a lot of new branches and removals and new things in Parrot recently
- are these following the roadmap?
- are people going off on their own?
Will:
- the deprecation stuff is all documented and seems reasonable
- Andrew's discussion today is new stuff, but a reasonable discussion to have
- I'm working on cleanup stuff
- having a roadmap and trying to force people to stick to it is always... impossible
- people will work on what they find shiny or what blocks them
- if it's not on the roadmap, it's okay if it's not hurting the project
Jerry:
- we've changed our deprecation cycle
- was that change enough to unstick people to do something?
- was it beneficial to our users and our core developers?
Will:
Jerry:
- still not a lot of mailing list discussion
- how is Parrot meeting Rakudo's goals for the Rakudo * release?
Patrick:
- as it stands today, it's adequate for what we need
- if it weren't, you'd be hearing about it
- the next thing for us is performance
- any performance improvements are welcome
- the biggest thing there is GC, and that's an area of focus
- no big pushes I need to make lately
- have noticed Andrew's desire to remove some Parrot features
- they're useful from an HLL perspective
- I do worry about changes to core Parrot divorced from HLL concerns
- I don't know who's going to be the traffic cop for those changes
- I don't have time to do it
Will:
- based on the discussion in channel today
- making Parrot leaner, faster, smaller may not necessarily jive with keeping the features as they exist now
- he's not trying to remove features
- he's trying to get the same effect with a faster Parrot
Patrick:
- I agree with those motives
Will:
- even if we do rewrite things, they have to work more or less as they do right now
Patrick:
- reviewing the roadmap from December....
- GC work is happening
- no one seems to work on subroutine leave semantics
- Stephen Weeks is the best one to look at that
- performance is our biggest need right now
- but the -ng branch performs better for various reasons
- has anyone built -ng against the latest Parrot?
Will:
- I think Vasily has checked his branches against Rakudo
- not sure if that was against -ng
Patrick:
- master and -ng are pretty close together in terms of the Parrot core
- we'll make -ng the master branch very soon
- unless I get bogged down on iterators again
February 19, 2010 03:31
February 18, 2010
The Perl 6 design team met by phone on 03 February 2010. Larry, Patrick,
and chromatic attended.
Larry:
- more cleanup of iteration semantics
- no longer signal end with
Nil, but with special EMPTY failure - this can support either unthrown or thrown exception styles
- added in batching iterator interface
- proposed new
E operator for efficient list end detection; gathering feedback - detangling of sigils from contexts; for example,
@ no longer implies flattening - coercions all defined to take parcels so they don't flatten accidentally
- more cleanup of various types (captures,lists) that should be considered parcels
- forcibly amputated the
@@ sigil; have fixed up most of the bloody stumps - instead of *@@ parameters, we now have a
** slice marker on parameters - removed references to
[;] reduction since it wouldn't work (because of return parcel embedding) - new
**() interpolator instead - clarified that function calls in a list are called eagerly, but their results are potentially lazy
- (also mentioned ways to make the call lazy too)
- renamed iterator methods for more clarity, removing contradictory usages of "item"
- iterators now iterated with
get, getobj, batch, and batchobj - specced that a missing maximum allows the iterator to decide batch size.
-
get and getobj must be atomic under multi-threading so message queues work (but maybe that's backwards, and push should be atomic) - slice now defined to turn subparcels into
Seq objects - spec that most of the work of
flat and slice are done by binding to *@ or **@ - new
flat operator detangles flattening semantics from normal unmarked list semantics - for all specced functions,
*@@ parameters changed to **@ - multiple dimensions now defined in terms of nested parcels, not feeds, to avoid implying multithreading on every subscript
- either range or series iterator now autotruncates in a subscript
- no autotruncation on left end of a subscript anymore
- did some cleanup of feeds; more is needed to have clearer target semantics
- feeds no longer take a whatever target with implicit semantics; just use an explicit target
- not much hacking, but edited tests to change
@@ to something else appropriate - tracked name changes in CORE
- wrote a long screed on why Perl 6 has one-pass parsing and why typenames must be pre-declared
Patrick:
- working on interators and lists in the -ng branch
- brought up a few issues with Larry as appropriate
- took issue with others, as appropriate
- happy with our progress there
- expect to make this branch the new master in the next day or so
- will be some regressions, but it's time to do it
- there's no development taking place on other branches, so let's commit and do it
- people will be comfortable about doing their own work and not having it lost on some other branch
c:
- looking into GC tuning and ideas
- still working on getting methods out of namespaces
- need four uninterrupted hours
February 18, 2010 04:58
Tomorrow's regularly scheduled Rakudo release is the first one since the long-running "ng" branch became master. It represents both a huge step forward and at the same time a fairly major regression. Internally, the changes are enormous; some of the biggest include:
- We're parsing using a new implementation of Perl 6 regexes by pmichaud++. It is a huge improvement, supporting amongst other things protoregexes, a basic form of LTM, variable declarations - including contextuals - inside regexes and more. The AST it generates is part of the PAST tree rather than having a distinct AST, which is a neater, more hackable approach. The issues with lexical scopes and regexes are resolved. Closures in regexes work.
- NQP is also re-built atop of this. It incorporates regex and grammar support, so now we run both grammar and actions through the one compiler. It's bootstrapped.
- In light of those major changes, we started putting the grammar back together from scratch. A large part of this was copy and paste - from STD.pm. The grammar we have now is far, far closer to STD than what we had before. Operator precedence parsing is handled in the same kind of way. We've started to incorporate some of the nice STD error detection bits, and catch and nicely report some Perl 5-isms.
- Since the grammar got re-done, we've been taking the same approach with the actions (the methods that take parse tree nodes and make AST nodes). Thanks to contextual variable support and other improvements, a lot of stuff got WAY cleaner.
- The list/array implementation has been done over, and this time it's lazy. There's certainly rough edges, but it's getting better every day. The work to implement laziness has led to many areas of the spec getting fleshed out, too - a consequence of being the first implementation on the scene I guess.
- All class and role construction is done through a meta-model rather than "magic". The Parrot role composition algorithm is no longer relied upon, instead we have our own implementation mostly written in NQP.
- The assignment model was improved to do much less copying, so we should potentially perform a bit better there.
- Lexical handling was refactored somewhat, and the changes should eliminate a common source of those pesky Null PMC Access errors.
Every one of these - and some others I didn't mention - are important for getting us towards the Rakudo * release. The downside is that since we've essentially taken Rakudo apart and put it back together again - albeit on far, far better foundations - we're still some way from getting all of the language constructs, built-in types and functions back in place that we had before. It's often not just a case of copy-paste; many of the list related things now have to be written with laziness in mind, for example.
So anyway, if you download tomorrow's release and your code doesn't compile or run, this post should explain - at least at a higher level - why. After a slower December and January, Rakudo development has now once again picked up an incredible pace, and the last couple of week's efforts by many Rakudo hackers have made this release far better than I had feared it was going to be. If we can keep this up, the March release should be a very exciting one.
February 18, 2010 01:18
February 17, 2010
By that i don't mean environment-friendly, but something Bruce Banner would understand.
In the next days I want to rage through the dormant
TPF wiki and especially clean up the frontpages a bit, that easier navigation will be possible and some crucial infos are updated.
I warn now and beforehand, so that anyone willing can participate or complain now.
P.S.: After Andy Lester answered me, I'm still looking for the admit of this wiki.
February 17, 2010 00:52
February 16, 2010
"One must command from each what each can perform, the king went
on. "Authority is based first of all upon reason. If you command your
subjects to jump into the ocean, there will be a revolution. I am
entitled to command obedience because my orders are reasonable."
"Then my sunset?" insisted the little prince, who never let go of
a question once he had asked it.
"You shall have your sunset. I shall command it. But I shall wait,
according to my science of government, until conditions are
favorable."
— Antoine de Saint-Exupéry, The Little Prince
On behalf of the Parrot team, I'm proud to announce Parrot 2.1.0 "As
Scheduled." Parrot is a virtual machine aimed at running all dynamic
languages.
Parrot 2.1.0 is available on Parrot's FTP site, or follow the download
instructions. For those who would like to develop on Parrot, or help
develop Parrot itself, we recommend using Subversion on our source
code repository to get the latest and best Parrot code.
Parrot 2.1.0 News:
- Core changes
+ GC performance and encapsulation were greatly improved.
+ PMC freeze refactored.
+ More Makefile and build improvements.
- API Changes
+ The Array PMC was removed.
+ Several deprecated vtables were removed.
+ The OrderedHash PMC was substantialy improved.
- Platforms
+ Packaging improvements on some operating systems.
- Tools
+ Some cases in pbc_merge are now handled.
+ Improvements were made to the dependency checker.
+ New tool nativecall.pir added.
Thanks to all our contributors for making this possible, and our
sponsors for supporting this project. Our next release is 16 March
2010.
Enjoy!
February 16, 2010 11:29
February 15, 2010
So, apparently my challenge on IRC and on SF's blog got at least SF interested. Which means now there's even a challenge. I'm hoping others will jump on as well. It's simple: just blog your modern Perl 6 version of E03 on Friday.
Will E03 be hard? I don't know, maybe. But we're just trying things out. We're exploring a piece of Perl 6 archaeology, and how old documented intents interact with new actual practices. There's no way to lose the contest, but plenty of ways to win it. And remember, while the official price is One Internet (method of delivery unspecified), your contribution might very well end up in a revised modern-day E03. Or something.
Since there's a Rakudo release on Thursday, and since there's no shortage of rakudobugs to report and features to implement till then you should see the activity only this morning! — I suspect I won't have time to actually start porting E03 until Friday morning. But that should be plenty of time.
February 15, 2010 13:40