
Planet Parrot is an aggregation of select Parrot related blogs. You won't find anything about birdseed or molting here. The list of contributors changes periodically. You might also like to visit Planet Perl or Planet Perl Six for more focus on their respective topics.
Planet Parrot provides its aggregated feeds in Atom, RSS 2.0, and RSS 1.0, and its blogroll in FOAF and OPML
There is life on other planets. A heck of a lot, considering the community of Planet sites forming. It's the Big Bang all over again!
This site is powered by Python (via planetplanet) and maintained by Robert and Ask.

Planet Parrot is licensed under
a Creative
Commons Attribution-Noncommercial-Share Alike 3.0 United States
License. Individual blog posts and source feeds are the
property of their respsective authors, and licensed
indepdently.
interrupt void ThreadScheduler() {
ExecutionContext lastctx = SaveCurrentContext();
ExecutionContext nextctx = GetNextContext();
Schedule(lastctx);
LoadContext(nextctx);
}
modify_data(my_struct* s, int newvalue) {
s->data1 = newvalue
s->data2 = newvalue;
}
modify_data(my_struct* s, int newvalue) {
lock (lock_object) {
s->data1 = newvalue;
s->data2 = newvalue;
}
}
Today plenty happened in Rakudo land - in fact, it was my most active day's Rakudo hacking in quite a while. colomon++ also made some great commits, and between us a lot of things moved forward today. For my part, hashes and pairs are in much better shape.
I wrote before that I'd got some Rakudo days left to write up; there are two of them, but I'll cover them both in this post, since some of the work crossed the two of them anyway. Here's what I got up to between them.
Thanks to Vienna.pm for sponsoring me to hack on Rakudo, not only for these two days, but also throughout 2009!
(FixedPMCStack) Time to push 1000000: 0.0456011295318604
(FixedPMCStack) Time to pop 1000000: 0.0357608795166016
(FixedPMCStack) Time to total 1000000: 0.0813620090484619
(ResizablePMCStack) Time to push 1000000: 0.0498058795928955
(ResizablePMCStack) Time to pop 1000000: 0.0467569828033447
(ResizablePMCStack) Time to total 1000000: 0.0965628623962402
(ResizablePMCStack2) Time to push 1000000: 0.0470800399780273
(ResizablePMCStack2) Time to pop 1000000: 0.0364069938659668
(ResizablePMCStack2) Time to total 1000000: 0.0834870338439941
(ResizablePMCArray) Time to push 1000000: 0.0531971454620361
(ResizablePMCArray) Time to pop 1000000: 0.0347628593444824
(ResizablePMCArray) Time to total 1000000: 0.0879600048065186
(FixedPMCQueue) Time to push 100000: 0.00739598274230957
(FixedPMCQueue) Time to shift 100000: 0.00774002075195312
(FixedPMCQueue) Time to total 100000: 0.0151360034942627
(ResizablePMCQueue) Time to push 100000: 0.0121519565582275
(ResizablePMCQueue) Time to shift 100000: 0.00611591339111328
(ResizablePMCQueue) Time to total 100000: 0.0182678699493408
(ResizablePMCArray) Time to push 100000: 0.00558805465698242
(ResizablePMCArray) Time to shift 100000: 5.47745704650879
(ResizablePMCArray) Time to total 100000: 5.48304510116577
Several days before Christmas, encouraged by my mum asking, "when you're going to start your Christmas break", I stopped working and hacking on stuff and started relaxing. Until then, I hadn't realized just how tired I was. I slept quite a few ten hour nights in the following week, and had an enjoyable Christmas break. I'd figured I'd maybe take a week or so's break, and then get straight back to things, but a week on I had no motivation or energy to dig in again whatsoever. So, I decided my break would go on through New Years. New Year's celebrations this year involved curry - something I certainly wouldn't mind it involving again.
Early January brought several days in Sweden, part of planning for an upcoming refactoring of my work/location - there's details on my personal blog, but the short version is that I've accepted a job at a Swedish startup and will be moving there in March. It's not full time, so I'll continue to have time for Perl 6 development. They know about and, happily, are supportive of my involvement in Perl 6 and my continued attendance of Perl conferences.
I spent a weekend in Prague on the way home. I did it by train rather than flying, which was enjoyable. It snowed almost my entire time in Prague, and I caught a cold in the following week, but it was kinda worth it to wander around this beautiful city. Didn't bother studying Czech at all, and sorta got by with speaking Slovak, though some folks heard me speak and immediately concluded English would be easier. :-) Somehow it kinda felt like I was back somewhere I belonged, even though I'd never been there before. I love central Europe, and excited as I am about Sweden, I know I'll miss this part of the world a lot.
Anyway, I eased back into some work in January, but mostly took it quite easy. The happy result is that, come February, I'm finding myself recharged and ready to dig back into things again. I got some nice commits done to Rakudo yesterday, and today I meant to, but instead participated on an interesting thread on p6l and did some other useful meta stuff (like this post). Tomorrow should have plenty of hacking time though, and I'm looking forward to it. I also have a couple of blog posts to do about Vienna.pm-funded Rakudo Days I did in December, but never got around to writing up; thankfully I did make notes on what I did on them. :-) My main focuses from here on will be on:
Anyway, that's what's been up with me. If you take away anything, it's that you may not realize how much you need a break from something until you take it, and if it's not the only thing putting food on the table, then it's probably better to take the needed amount of break and come back revitalized. I guess the other option is to dig back in regardless, but I suspect that's the path to burnout, something I'm quite keen to avoid.
More technical blabbering here soon. :-)
The Perl 6 design team met by phone on 27 January 2010. Larry, Allison, Patrick, and chromatic attended.
Larry:
($a, $b, @a) = 1..* worksKeyWeight deletion criterion kept consistent with other KeyHash typesList, Seq, Parcel, Capture, Iterator, Nil etc.List is now simply the iterator role, and doesn't do Positional Seq takes over Positional duties for reified (or reifiable) value listsSeq now as a constant Array (but also lazy like Array)Iterable now means you can ask for an iterator, but doesn't do List Array, Seq, etc do Iterable, but not List List Nil is defined as a suitable sentinel for both list and slice iteratorsEMPTY special exception object to be the iterator sentinalE operator to go with it to make testing for EMPTY across multiple iterators very fastCursor's fnum->fate translations for shorter LTM candidates in preparation for smarter LTMPatrick:
List, Parcel, Itertor, and arraymap iterator that workszip operator was nice.iterator() method.list() returns a flat Parcel for that iteratorParcels know how to generate IteratorsIterators of IteratorsParcels to understand thatAllison:
c:
Allison:
c:
Patrick:
Allison:
Patrick:
print "Hello World\n"
request = print "Hello World\n", callback
The Perl 6 design team meet by phone on 20 January 2010. Allison, Patrick, Will, and chromatic attended.
Allison:
c:
Allison:
Patrick:
c:
Patrick:
Will:
Patrick:
Will:
c:
The Perl 6 design team met by phone on 13 January 2010. Larry, Patrick, and chromatic attended.
Larry:
:by modifierKeyHash docs to make the semantics clearer:!foo(0) and :5bar[42] that supply unexpected argsPatrick:
c:
:method should not add entries to NameSpace
<label>: <mneumonic> <arg>, <arg>, <arg> ...
Statement * stmt;
while(! file.end_of_file()) {
char * line = file.readline();
byte[INSTR_LENGTH] machinecode;
stmt = parse(line);
if(stmt.has_label)
save_label_address(stmt.label);
machinecode[0] = mneumonic_to_machine_instr(stmt.mneumonic)
for (int i = 0; i < stmt.args.length; i++)
machinecode[i+1] = convert_to_machine_addr(stmt.args[i]);
}
update_jump_addresses();
perl Configure.pl --cc=gcc --link=gcc --ld=gcc
perl Configure.pl --cc=g++ --cxx=g++ --link=g++ --ld=g++
perl Configure.pl --cc=icc --link=icc --ld=icc
perl Configure.pl --cc=clang --link=clang --ld=clang
Targeting Parrot requires you to learn another language which is more complex that Neko itself, with different possibilties at different levels (low level PASM, medium level PIR, high level NQP).
It is also difficult to differenciate beetween the language and the standard library because of the numerous cores apis (PMC) whereas NekoVM has a single builtins core api which a single highlevel language with minimal syntax and core types.
Parrot is written in C while Neko compiler is written... in Neko. The language is fully bootstrapped right now. Also, Neko is lightweight and the Virtual Machine is only 68 KB on Linux and 40 KB on Windows, while still offering a very good speed.
The Perl 6 design team met by phone on 06 January 2010. Larry, Allison, Patrick, Will, and chromatic attended.
Larry:
p{} to qp{} to avoid using up another common single lettersay/print is now just a warningbreak/continue to succeed/proceed succeed returns the value of the whole when blocktrue to so to avoid confusion of the predicate with the True enum valueAny up into Any and Cool typesCool stands for Convenient OO Loopbacks, or any other acronym you'd likeCool are the ones that do Perlish dwimmy coercionsAny by default, so aren't born with gazillions of methodsCool package:p (aka :path) so we can form the qp{} path literalsay/print say/print warning to anything a p5er might try that might be in p6 without the defaultingso, succeed, and proceed /\b/ and advises to use an appropriate p6 word boundary assertion insteadPatrick:
Larry:
Will:
Patrick:
Allison:
c:
Patrick:
The Perl 6 design team met by phone on 16 December 2009. Allison, Patrick, Jerry, and chromatic attended.
Patrick:
use and import Allison:
Patrick:
.DEBUG rulepanic statementsAllison:
Patrick:
Allison:
Jerry:
Allison:
c:
The Perl 6 design team met by phone on 09 December 2009. Larry, Allison, Patrick, Will, and chromatic attended.
Will:
Allison:
Patrick:
Larry:
PairValSet, renamed it EnumMap PairSet is now PairMap, and PairVal is just Enum .enums on hashes and arrays as well as enumerations.pairs, which give reference semantics into the values of the original data structure.enums gives you a constant snapshotEnum.name to Enum.key, and he was right, since they're constant pairsenum enum is compile-time evaluated as an anonymous list of constantsEnumMap at run time for the other behaviorWHENCE closure as part of the typename, rather than relying on subscript parsec:
Patrick:
push_eh an ExceptionHandler onto an array in a context, it creates an RPAAllison:
pushmark/popmark stuff to do actions used that same global arrayPatrick:
pushaction and popaction before they go awayLEAVE semantics, we want to avoid generating an exception to leave that scope for cachingAllison:
FAIL and RETURN local_branch and local_return uses that arrayPatrick:
bsr and ret may haveAllison:
Patrick:
local_branch or local_return The Beyond and below are like a deep of ocean, and we the creatures that swim in the abyss. We're so far down that the beings on the surface superior though they are can't effectively reach us. Oh, they fish, and they sometimes blight the upper levels with points we don't even understand. But the abyss remains a relatively safe place.
Vernor Vinge, A Fire Upon the Deep
On behalf of the Parrot team, I'm proud to announce Parrot 2.0.0 "Inevitable." Parrot is a virtual machine aimed at running all dynamic languages.
Parrot 2.0.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.0.0 News:
Features
Platforms
Performance
New deprecations
Tests
Tools
Miscellaneous
Thanks to all our contributors for making this possible, and our sponsors for supporting this project. Our next release is 16 February 2010.
Enjoy!
|
When you need perl, think perl.org
|
|