www.parrotcode.org | Last Release: 0.7.0 "Severe Macaw"
Set by moderator on 19 August 2008.
00:01 particle joined 00:03 bacek joined 00:09 AndyA joined 00:20 Theory joined
dalek r30363 | Whiteknight++ | pdd09gc: 00:37
: [GC] some major changes:
: * Move MS collector from src/gc/dod.c and src/gc/smallobject.c into the new src/gc/gc_ms.c
: * Merged Parrot_dod_clear_live_bits and clear_live_bits into Parrot_clear_live_bits.
: * Moved some macros and constants from src/gc/smallobject.c to include/parrot/smallobject.h
diff: www.parrotvm.org/svn/parrot/revision?rev=30363
Andrew Whitworth | pdd09gc_tasklist: 00:40
link: www.perlfoundation.org/parrot/index...c_tasklist
Andrew Whitworth | pdd09gc_tasklist: 00:45
link: www.perlfoundation.org/parrot/index...c_tasklist
00:53 particle joined
dalek r30364 | Whiteknight++ | pdd09gc: 00:54
: [GC] remove now-defunct static function declarations form src/gc/smallobject.c
diff: www.parrotvm.org/svn/parrot/revision?rev=30364
Andrew Whitworth | pdd09gc_tasklist: 00:55
link: www.perlfoundation.org/parrot/index...c_tasklist
01:11 rurban_ joined 01:30 kid51 joined
dalek r30365 | pmichaud++ | trunk: 01:39
: [rakudo]: Typo corrections
diff: www.parrotvm.org/svn/parrot/revision?rev=30365
r30366 | jkeenan++ | trunk: 01:48
: Applying patch submitted in
: rt.perl.org/rt3/Ticket/Display.html?id=57956. Convert one system probe
: in auto::sizes to a more standard format (test3_c.in as template file) so that
: the config step leaves not 'test*' file behind in top-level directory after
: configuration.
diff: www.parrotvm.org/svn/parrot/revision?rev=30366
02:09 rurban_ joined 02:14 rurban__ joined 02:15 particle joined 02:18 Zaba joined 02:22 particle1 joined
dalek r30367 | jkeenan++ | trunk: 02:23
: Applying patch submitted in
: rt.perl.org/rt3/Ticket/Display.html?id=57780; merge stepconfigure
: branch into trunk. Individual config steps now listed in Configure.pl output;
: step descriptions trimmed. '--verbose-step' option may now take multiple
: steps as values. Tests files that covered superseded features have been
: deleted.
diff: www.parrotvm.org/svn/parrot/revision?rev=30367
r30368 | jkeenan++ | stepdescription: 02:24
: Branch has been merged into trunk and is no longer needed at HEAD.
diff: www.parrotvm.org/svn/parrot/revision?rev=30368
02:41 particle joined
dalek r30369 | rgrjr++ | trunk: 02:53
: [DOCS] Update release publicity instructions:
: * docs/project/release_manager_guide.pod:
: + Split item 9 into three: (9) compose the announcement; (10) add it
: to parrotcode.org; and (11) publicize it everywhere else. This
: gives updating parrotcode.org more priority, and makes its subtasks
: harder to ignore (I almost didn't see the /.htredirects bit, even
: though I should have remembered it was there).
: + In the process, say that LWN.net just needs a text/plain mailing.
: + Add an Emacs "Local Variables:" section.
: + "Saturday" is capitalized.
diff: www.parrotvm.org/svn/parrot/revision?rev=30369
03:00 rurban__ joined 03:08 Zaba_ joined
dalek r30370 | coke++ | trunk: 03:15
: [docs] point to the mailing list instead of individuals for web updates.
diff: www.parrotvm.org/svn/parrot/revision?rev=30370
03:19 Zaba joined
kid51 must sleep 03:23
purl $kid51->sleep(8 * 3600);
03:28 particle joined 03:29 Andy joined 04:13 Zaba_ joined 04:31 tetragon joined 04:41 Theory joined 04:46 contingencyplan joined 05:09 tetragon joined 05:33 Psyche^ joined 05:51 Zaba joined
dalek r30371 | pmichaud++ | trunk: 06:02
: [rakudo]: enable precompiled Test.pm
: * Add @*INC and %*INC
: * Update 'evalfile', 'require', and 'use' 06:03
: * On my system, speeds spectest_regression by about 67%
diff: www.parrotvm.org/svn/parrot/revision?rev=30371
bacek pmichaud++ # precompiled modues!!! 06:05
moritz runs the tests 06:07
spectest_regression down to real 2m39.740s 06:10
pmichaud++ indeed
previously it took real 8m13.658s 06:20
that's an 68% speed up 06:21
06:25 uniejo joined
particle pmichaud++ # now i need to update it to work with PERL6LIB on windows 06:52
now += 6hrs sleep, that is
07:01 Zaba_ joined 07:06 masak joined 07:10 allison joined 07:29 allison joined
masak rakudo: method x { say self }; x(1) 07:38
polyglotbot OUTPUT[1␤]
masak question: should methods be allowed outside class declarations? :)
moritz don't think so ;-) 07:40
masak files rakudobug 07:41
moritz somebody just asked on perlmonks (via private message) how to get involved with Perl 6/rakudo testing ;) 07:43
masak cool! 07:44
apart from just diving into the test suite and cleaning things up, I'd recommend writing an application in Rakudo Perl 6 :) 07:54
that tends to shake out a few testable items 07:55
moritz aye
I also started a wiki two weeks ago
(and gave up on the way)
and ran into quite some bugs
masak :) 07:56
moritz masak: speaking of a wiki... in "november", do you compile the perl 6 files and let apache run the commpiled ones?
masak no, although that would probably be a speedup 07:57
I currently don't have the expertise to attempt that
is there a tutorial somewhere? :)
moritz masak: usually it boils down to call parrot perl6.pbc --target=pbc and adding the load_pbc 'perl6.pbc' line, or whateve it's called 07:58
but I don't know a tutorial, though
(perhaps you can even compile the pir to pbc after adding that line)
masak I'll try your recipe
07:59 cognominal joined
moritz or alternatively just move nearly everything to a module, and use rakudo's shiny precompiled module feature ;) 07:59
08:08 Zaba joined 08:32 Debolaz joined 08:34 allison joined 08:42 skv joined 09:01 iblechbot joined 09:02 Zaba joined 09:12 rurban__ joined 09:14 tetragon joined 09:18 allison joined
moritz PHP? 09:21
purl PHP is probably really badly designed or swahili for "child molestor" or Philippine pesos or PHP: Hardly Programming or brought to you by the teletubbies or proof there is no god or the worse-is-better approach taken to to dazzling new depths or Pathologically Helpful People
dalek r30372 | allison++ | pdd27mmd: 09:25
: [pdd25cx] Bringing the pdd27mmd branch up-to-date with trunk r30371.
diff: www.parrotvm.org/svn/parrot/revision?rev=30372
masak moritz: did you mean --target=pir in your explanation above? 09:29
moritz masak: yes
masak using --target=pbc produces the terse output '"pbc" => PMC 'Eval' { ... }'
moritz and it's load_bytecode, not load_pbc
masak hm, so all I know so far is how to compile down to PIR
at least that eliminates the parsing time 09:30
moritz I'm quite sure that parrot can compile pir to pbc
parrot -o foo.pbc foo.pir perhaps? 09:31
masak will try various approaches
moritz but I think the easiest is to move most code to a module 09:32
and then use the compiled module, which pmichaud++ enabled a few hours ago
masak ah, so that works now? great! 09:33
pmichaud++
moritz yes
reduced make spectest_regression time from 8min 13s to 2min 40s or something
masak impressive.
moritz aye 09:34
masak we'll have a november hacking session tonight. we'll measure the impact on our running time then.
moritz and make sure to tell me the results ;) 09:35
09:35 AndyA joined 09:52 allison joined
dalek r30373 | allison++ | pdd27mmd: 09:54
: [pdd27mmd] Fixing file metadata after file rename.
diff: www.parrotvm.org/svn/parrot/revision?rev=30373
jonathan OH HAI 10:04
moritz hi ;) 10:05
jonathan is doing some weird sleep times these days 10:07
Wow! pmichaud++ # make spectest_regression is teh faster! 10:23
Down to 151 seconds here for me. :-) 10:27
moritz yeah, same order of magnitude here
jonathan Awesome. 10:28
moritz before it was 8min
dalek r30374 | jonathan++ | lazyrakudo: 10:31
: [rakudo] Creating branch to start work on lazy lists for Rakudo.
diff: www.parrotvm.org/svn/parrot/revision?rev=30374
10:32 Whiteknight joined
masak waves at jonathan 10:49
jonathan hi masak :-) 10:50
masak jonathan: looking forward to playing with those lazy lists 10:51
yesterday, I tried my hand at getting rudimentary gather/take to work
didn't get very far, but it was an interesting thought exercise 10:52
jonathan masak: Well, plenty of work to do in order to implement them!
Working in a branch so I can break stuff along the way. 10:53
masak jonathan: IMHO, they (gather/take) come in three stages
1. the-simplest-possible 2. lazy 3. dynamic/lazy
although steps 2 and 3 could possibly be reversed
I'm only interested in implementing (1) right now 10:54
so that I can play around with gather/take in my own code :)
jonathan Makes sense. :-)
masak but even that is a bit beyond my current PIR-fu right now, it seems
jonathan Plus I'm not sure how well resumable exceptions work so far. 10:55
moritz it's been mentioned on yesterday's #ps
basically allison said "give me a test case, and I'll make it work"
jonathan Ah, nice. :-) 10:56
masak what I need, I think, is some sort of variable declaration of a variable connected to a gather block. so that the take subroutine has something to push its values to. I'm currently studying how to introduce such a variable, and how to get take to know about it. 10:57
moritz masak: basically you need such a variable at the PIR level which is not visible in Perl 6 10:59
masak moritz: aye. 11:00
that would be the best solution
moritz and if PIR supports something like local() in perl 5, you can use just one variable, and implicitly get dynamicality
masak ooh
and here I thought this would be difficult :)
PIR++ 11:01
moritz if there's nothing like local(), you can still use a stack instead
masak that was my plan, actually
however, I'm facing much simpler problems right now :) 11:02
11:15 uniejo joined 11:26 kj joined 11:29 tetragon joined 11:31 Whiteknight joined
pmichaud good localtime(), #parrot 11:50
masak hi, pmichaud 11:51
moritz ! 11:52
masak I heard you got compiled modules working 11:53
pmichaud++
how to use them? just --target=pbc?
pmichaud --target=pir
the "use Foo" statement looks for Foo.pbc, Foo.pir, and Foo.pm (in that order) 11:54
moritz will it be automatically compiled when I use it the first time?
pmichaud you mean automatically generate the .pir file? no.
masak still, great news
pmichaud I suspect in the general case that permissions on unix systems will be too restrictive for auto-generation 11:55
11:55 tetragon joined
moritz but you can still try 11:55
python does it with some success
pmichaud hmmm
I'll save it for a later optimization :-)
moritz ;) 11:56
cognominal rule all( $nl ) { .+? } # pmichaud, how can modify this rule to match \\V+? if $nl is false? 12:00
pmichaud at the moment rakudo/pge doesn't support parameterized rules
cognominal ok 12:01
pmichaud in the general case I suppose one could do something like
cognominal and suppose it did
jonathan pmichaud: Hmm, fun. :-) List is meant to be immutable, but in a few places we are relying on the ability to push onto them. I'm thinking that in these cases we should either use a ResizablePMCArray (which List is using internally for storage) and push onto that, and then call 'list' to get a list - or just call that in the first place. 12:02
Either way, I'm thinking we probably shouldn't be implemented push_pmc on List.
*implementing 12:03
pmichaud rule all( $nl ) { <?{ $nl }> .+? || \\V+? }
jonathan: List is immutable in the abstract -- that doesn't meant the compiler can't do mutable things on it internally
s/meant/mean/ 12:04
jonathan pmichaud: So we implement push_pmc so stuff in the compiler can twiddle with it, but not the push method so you can't do stuff to it like that from within Perl 6? 12:05
pmichaud jonathan: yes. But better is to figure out why we're needing push on List in the first place
jonathan Because we have code that does stuff like, $P0 = new 'List'\\npush $P0, ...
To construct lists.
pmichaud then we should probably be doing $P0 = 'list'(...) 12:06
jonathan Right.
So, need to track down those cases. :-)
pmichaud there's a _lot_ of that floating about in the runtime right now, which we need to eliminate
for example, 'require' was directly calling the 'Env' object instead of using the '%*ENV' array
and it was using 'PERL6LIB' directly instead of '@*INC' 12:07
12:09 tetragon joined
dalek r30375 | pmichaud++ | trunk: 12:13
: [rakudo]: spectest-progress.csv update: 123 files, 2249 passing tests
diff: www.parrotvm.org/svn/parrot/revision?rev=30375
pmichaud jonathan: what's the trick you're using in .net to make .pbc files directly from PIR? 12:15
s/'.net'/dotnet/
jonathan pmichaud: Get an eval PMC, then write it to a file handle 12:16
pmichaud literally write it?
as opposed to freeze?
moritz and as usual, updated charts on rakudo.de
jonathan pir_comp = compreg "PIR" 12:17
pbc_out = pir_comp(gen_pir)
fh = open output
print fh, pbc_out
close fh
pmichaud aha
that sounds doable for PCT :-)
jonathan Aye man. :-)
pmichaud I suppose that would also preserve the result of any :immediate calls?
right now I can't convert Test.pir into Test.pbc because of the :immediate's
jonathan I'd guess so. 12:18
Oh, we're just going to PIR now for Test.pm rather than PBC?
pmichaud yes.
jonathan I hadn't realized that. :-)
pmichaud that's why I mentioned it. :-)
jonathan More speed win!
pmichaud I'd like to go to .pbc, but the :immediates are a blocker 12:19
jonathan OK, I guess that means what's in :immediate now needs migrating to be attached to the initload attribute.
pmichaud that's my initial thought, yes
but getting --target=pbc to work would also be a nice win 12:20
for that I think I need to also do my targets refactor, though
dalek r30376 | pmichaud++ | trunk:
: [rakudo]: Remove obsolete '!find_file_in_path' guts function.
diff: www.parrotvm.org/svn/parrot/revision?rev=30376
jonathan Is migrating to using initload rather than immediate something you'd prefer I looked at/did? 12:21
pmichaud it's entirely up to you. I can do it, just don't know when I'll do it :-) 12:22
jonathan Ah, OK.
I will probably do it when I start getting Rakudo onto the new MMD and need to sort out signatures.
If you haven't beaten me to it by then. 12:23
pmichaud that works.
jonathan That will either be this week, if I get some good time/brain cycles to hack on the MMD stuff, or first week in September (next week is non-geek vacation in Romania). 12:25
12:26 Zaba_ joined
dalek r30377 | julianalbo++ | trunk: 12:29
: added gcdebug mode to debugger, to run GC cycles like the gcdebug core, and 'gcdebug' command to toggle this mode
diff: www.parrotvm.org/svn/parrot/revision?rev=30377
12:34 tetragon joined
jonathan pmichaud: We are also doing: 12:39
purl okay, jonathan.
jonathan ## create a list for holding the stack of nested blocks
$P0 = new 'List'
set_hll_global ['Perl6';'Grammar';'Actions'], '@?BLOCK', $P0
purl: er, wtf?
purl jonathan: wish i knew
jonathan I'm pretty sure that is wrong, since those are certainly meant to be mutable. 12:40
pmichaud so make it 'Perl6Array' instead of 'List'. :-)
jonathan Aye.
jonathan now needs to implement the set_* on Perl6Array :-) 12:41
If you "push @foo, $x" that just adds $x to the end of the unevaluated portion, right?
pmichaud you mean perl 6?
jonathan Yes. 12:42
pmichaud seems reasonable.
moritz I think it's ok to completely evaluate it before pushing
because it's an operation that works at the end of the list
pmichaud moritz: but that wouldn't be very lazy
jonathan my @a = 1..Inf; push @a, 42;
pmichaud what if $x is a filehandle reading from $*IN ?
moritz pmichaud: you can't expect anything that works with the end of a lazy list to be lazy 12:43
jonathan: it's pretty useless to push something onto an infinite list
pmichaud I can expect to be able to push it on the end of the list and then evaluate it only when I get to it
as opposed to having to evaluate it first
jonathan: it might be a good idea to think of push/pop/unshift/shift/etc in terms of splice
and then make sure splice is appropriately lazy
moritz so you'd store some kind of linked list of evaluated junks?
pmichaud moritz: a List has an evaluated portion (head) and unevaluated portion (tail) 12:44
moritz pmichaud: and if you push to it, and place it after the evaluated portion without evaluating the rest, you get a wrong order
pmichaud anything in the unevaluated portion can be lazy
a push always go to the unevaluated portion 12:45
the unevaluated portion can contain both lazy and eager elements
moritz ok
that was the piece that I was missing
so you can actually have something like (eager, lazy, eager, lazy) and both lazy blocks being actually lazy? 12:46
pmichaud yes
jonathan I guess calling elements() forces evaluation of the whole thing...
Since you gotta know how many there are.
pmichaud jonathan: not necessarily
jonathan: if each of the parts can respond to .elements
jonathan Oh, hmm, yes.
I guess a range always knows its length. 12:47
File handles are the tricky part.
pmichaud they may need to evaluate themselves to determine .elements
(which is why they may mutate themselves internally)
so, if I call .elements on a filehandle, then yes, I would expect it to become evaluated at that point
sorry, .elems 12:48
jonathan Is a file itself an eterator?
*iterator
Or do you have to do =$fh to get the iterator?
erm, file handle
pmichaud I don't know -- that part hasn't been entirely clear to me
jonathan Also, it's not spec'd. ;-) 12:49
moritz I think you can't write 'for $fh -> {...}', if that's what you ask
jonathan Well, you can, but you'd not be doing what you wanted. :-)
moritz that would just run the block once, with $fh as the topic
jonathan Right.
That's what I was expecting.
moritz so $fh itself isn't an iterator
jonathan OK, that's a logical conclusion. :-) 12:50
pmichaud so what happens if we create two iterators on the same filehandle? 12:51
I guess an iterator in that case is just a way to map 'shift' onto 'read'
jonathan I think so. 12:52
And in that case you'd just end up reading a line when you consumed each iterator.
pmichaud does it then become $fh.elems or =$fh.elems ?
masak will `say (1..Inf).elems` terminate in Perl 6.0.0?
pmichaud I suspect that Rakudo will terminate, yes. 12:53
moritz masak: I guess that's implementation specific
jonathan for =$fh -> $x { say $x; say =$fh } # prints two lines from the file per iteration
masak oki
jonathan masak: I expect once we have Inf, that can just return Inf.
Somehow...
purl somehow is exactly right
moritz I suspect that there are cases where it could return Inf
pmichaud Actually, I suspect that every implementation will terminate -- the only question is whether it does so with an oom exception or with a result :-)
masak pmichaud: :)
jonathan ;-)
moritz but in general that problem is very hard, because you could have stuff like my @a = (1..*).grep{ is_prime($_) } (or something more evil than is_prime) 12:54
pmichaud grep is lazy 12:55
moritz yes
pmichaud so that's no problem either :-)
moritz but when you call @a.elems...
pmichaud I don't have to call @a.elems for grep
moritz yes, but that's what masak was asking for
pmichaud I don't (necessarily) have to evaluate a range to determine how many .elems it has 12:56
moritz aye
pmichaud yes, we can come up with lots of cases that result in silences or an earth-shattering kaboom. But there are lots of cases that "just work" :-)
moritz but there are cases where you can't know the number of elems without evaluating them all, which in turn could loop
I think looping is fine if you ask it to return an infinite number ;) 12:57
pmichaud yes
and sometimes that's even correct.
moritz and earth shattering kaboom... we should avoid that ;-) parrot-shattering might be allowed, though ;)
jonathan Oooh, lunch! 13:06
masak databases and Parrot: could I use NCI to wrap mySQL? maybe someone has done/attempted this already? 13:19
13:20 Andy joined 13:23 gryphon joined 13:25 cognominal joined
NotFound t/spec/S02-builtin_data_types/num..............................error:imcc:syntax error, unexpected IDENTIFIER, expecting '\\n' ('_2') 13:25
in file 'EVAL_13' line 69
moritz NotFound: this is from a TODO test, and caught by rakudo 13:26
I wonder why it prints it to STDERR, though
13:26 smash joined
smash hello everyone 13:26
moritz hi smash 13:27
NotFound t/spec/S06-signature/named-parameters.rakudo (Wstat: 11 Tests: 43 Failed: 0) 13:34
Parse errors: Bad plan. You planned 67 tests but ran 43.
moritz works here 13:35
do you have a clean build?
NotFound t/spec/S06-signature/named-parameters. Failed 24/67 subtests (less 19 skipped subtests: 24 okay)
moritz NotFound: could you try to remove the .rakudo file end then echo S06-signature/named-parameters.t > t/localtest.data; make localtest
NotFound I'm trying in other machine with a clean parrot. 13:37
moritz I get the Bad plan-error for t/spec/S02-names_and_variables/perl 13:38
13:38 rdice joined
moritz blames himself 13:39
particle blames society 13:40
moritz it's one of the rare cases where society isn't the cause ;)
NotFound moritz: same fail in original machine with localtest 13:41
jonathan returns from nom nom nom
NotFound In the other machine, all pass, 1 TODO succesful 13:42
moritz yea, in basic-open.t
NotFound realcleaning for retesting 13:43
pmichaud I think that Test.pir is tickling a GC bug 13:44
moritz I just reverted a few unfudges in perl.t which caused some failures for me
pmichaud either that or it's whatever causes 'make test' to act differently from a normal run
when I run spectest_regression using test_summary.pl, I get no failures.
also note that make t/spec/S06-signature/named-parameters.t works 13:45
(instead of having to create t/localtest.data for a single file)
moritz shiny, I didn't know that 13:46
pmichaud schwern++ for that one (at oscon hackathon)
jonathan pmichaud: Should @*ARGS be modifiable? 13:48
As in, an Array rather than a List?
13:48 davidfetter joined 13:49 jkva joined
moritz why should ti be a list? 13:50
I don't recall that it's specced as immutable somewhere, and usually @ implies Array, not List
jonathan moritz: I agree it should be - just checking.
pmichaud yes, it's modifiable. yes, it can be an Array. 13:51
jonathan OK, will do so. :-)
pmichaud I'm also planning to refactor .iterator, .values, .keys, etc. soon -- will that intefere with what you're doing?
jonathan Most likely yes.
pmichaud ouch.
jonathan You already started changes? 13:52
pmichaud at least for Hash, all of .values, .keys, .kv, .pairs, etc. have to be defined in terms of .iterator
I suspect a similar situation exists for List
and other things being treated as lists
jonathan Makes sense, yes.
pmichaud I didn't start changes yet, no
jonathan Is it blocking you now?
I've got changes to .iterator... 13:53
pmichaud it's not blocking but it's somewhat high priority. I just don't want to be blocked for days while you're on non-geek vacation
jonathan Well, you can surely take on the branch. :-)
pmichaud or have to worry about coordinating between a branch and trunk :-|
okay, I'll take on the branch if that's the case.
NotFound Same error after realclean
pmichaud NotFound: try running the .rakudo file directly 13:54
also with the -G option to parrot
jonathan I'm expecting you'll want to corret/change what I'm doing anyway, so I've been working on this under the assumption that I'll get the first cut of it in, then hand it off to you.
pmichaud okay, that works for me.
kj jonathan: ping 13:55
jonathan kj: pong
kj hi
ISTR you added the :instanceof flag in imcc
pmichaud fwiw, I'm now thinking we should do some sort of rebless operation instead of :instanceof 13:56
NotFound pmichaud: all not ok are TODO
pmichaud NotFound: okay, I suspect it's a test harness or -G issue then
jonathan kj: Yes.
kj could you explain to me what it does? I'd like to document it
jonathan kj: Though haven't ended up using it yet...
kj yes I saw :-)
NotFound Same with -G
kj I ack'd for it but couldn't find anything using it
jonathan Rakudo was, but it got pulled. The point was to specify to create a particular type rather than just a Sub PMC. 13:57
Because in Perl 6 you have different types of sub: Regex, Method, Sub, Block, etc.
kj so to indicate that the sub should be a Coroutine?
or antoher type of sub
jonathan The second of those.
The problem was that, I hadn't realized before doing this that if there was a :outer you got a Closure instead. :-| 13:58
Which created a whole bunch of un-fun problems.
pmichaud ...and I'm thinking we may be able to eliminate Closure :-)
jonathan Right. Which is why I'm planning to wait and see.
Rather than saying :instanceof won't work, so rip it out. 13:59
pmichaud correct.
jonathan I think we need to use it, though. Because trying to fake .WHAT and especially .isa (which we fail to do now) is messy.
pmichaud I would say that ":instanceof" is an experimental feature that may or may not make it into production
jonathan Right, agree.
kj ok. so at this point no need to document it...
pmichaud I agree we want to change the type of Subs, I'm just thinking that rebless operation might be cleaner than :instanceof declaration
jonathan Documenting it may encourage its use. ;-)
pmichaud: You may well be right. 14:00
We could do this in loadinit
pmichaud exactly
jonathan I think that would probably work.
pmichaud I'm slowly coming to an awareness that IMCC may be a bit too static to work with dynamic languages. Or at least Perl 6. 1/2 :-)
jonathan If it does, then we may find that Rakudo doesn't need :instanceof. 14:01
pmichaud right. (more)
jonathan In which case, I see it becoming an ex-feature, unless someone else uses it/expresses a need.
pmichaud over time I had been hoping to avoid lots of :load :init code to initialize subs and data structures, but I'm quickly coming to realize that there are too many things that need to be done at initialization time to be succinctly expressed via pragmas in PIR 14:02
examples:
(1) blessing Subs into a (non-PMC) class
(2) attaching methods to anonymous classes
(3) attaching signatures
14:02 Andy joined
pmichaud (4) binding subs into multiple namespaces 14:02
(5) HLL type mapping
particle please don't fail to document something because it's experimental 14:03
kj pmichaud: aren't/can't these (be) done through instructions?
particle that's just wrong.
purl Fire and brimstone coming down from the skies. Rivers and seas boiling! Forty years of darkness, earthquakes, volcanos. The dead rising from the grave! Human sacrifice, dogs and cats living together... mass hysteria!
pmichaud kj: AFAIK, HLL type mapping can't be done via instructions yet (more)
particle document what it is, and that it is experimental.
pmichaud kj: but in the general case -- yes, they can be doable through instructions, but the point is that we had been trying to do many of them with compiler directives. I'm starting to think there are too many such items for IMCC to reasonably cope with at compile time, because some of them are "more dynamic" than that. 14:04
kj pmichaud: right, I'm sure some things can't be done yet in instructions. but that can be fixed..
pmichaud documentation for :instanceof : The :instanceof pragma is an experimental pragma that creates a sub as a PMC type other than 'Sub'. However, as currently implemented it doesn't work well with C<:outer> or existing PMC types such as C<Closure>, C<Coroutine>, etc. 14:09
Personally, I think that having some sort of a mixin or rebless will be the way we end up, though. 14:10
jonathan Provided we're happy doing it at load time, it'll be fine. 14:12
pmichaud so far I'm happy with load time 14:13
we may still need :immediate at some point, but then we need to figure out how to preserve that into :load
(for when we're loading something that has been compiled)
if writing the Eval PMC as a .pbc preserves :immediate, then that may work also.
dalek r30378 | kjs++ | trunk: 14:14
: [pdd19] document :instanceof pragma. pmichaud++ for writing it
diff: www.parrotvm.org/svn/parrot/revision?rev=30378
kj pmichaud: can you explain to me what the :scope value of 'register' means in PIR::Var? (My guess it is to have temporary registers...) 14:21
particle pmichaud: will morph work for rebless? 14:22
dalek r30379 | julianalbo++ | trunk: 14:25
: link parrot_debugger to parrot_config and some debugger fixes
diff: www.parrotvm.org/svn/parrot/revision?rev=30379
NotFound parrot_debugger now can run rakudo :) 14:26
pmichaud kj: 'register' scope declares a register inside of a Block (Parrot Sub) 14:27
eventually it will be a re-usable node, so that one PAST::Var node can be referenced from several places in a tree
but at present it's not
the primary reason for 'register' is to get access to 'self' and to other predefined registers in PIR 14:28
(without having to use :inline)
kj I see, I think. The re-usable part means that some AST subtree is not reevaluated each time 14:29
pmichaud correct
so, if we want to use the result of a subtree several times, we just create a register PAST::Var for that result
so
my $result := PAST::Var.new( $past, :scope('register') ); 14:30
kj right. I get it. Very useful for instance for a 'with' statement (don't think Perl 5/6 has that)
pmichaud and then re-use $result whenever you want to refer to the value that came back from $past
but it only works within a block
i.e., it's not lexically scopped
er, lexically scoped
kj you mean it's not stored as a lexical?
particle no, it's a register. 14:31
kj within a block -> within one block ?
pmichaud it's only valid within the current PAST::Block node
particle rakudo blocks are subs.
pmichaud it's not valid in any sub-blocks
particle *parrot subs
pmichaud if it's to be available in sub-blocks, then one has to use a lexical for that.
kj right
pmichaud I'm also wanting to add a :volatile flag to PAST::Var nodes, so that we can re-use registers instead of having to re-fetch all of the time 14:32
i.e., we refetch variables marked :volatile, otherwise we re-use the register we already established for a given lexical/package var 14:33
particle you want full control of register allocation, it seems
pmichaud not that so much -- I just want to avoid unnecessary fetch ops 14:34
rather, to make it easy to avoid unnecessary fetch ops. If we know that a given variable cannot be re-bound by a called sub, then we don't need to refetch on every access.
this also means we don't have to constantly check for null and vivify 14:35
so there's a big win there in terms of code generation 14:36
kj can't such thing being done by some analysis during compile time? I mean, if you see duplicates of the instruction $P0 = find_global "foo", then bells should be ringing 14:37
in other words, instead of letting the compiler writer figure it out by adding flags such as :volatile, the compiler can do it for you. Of course, that makes compilation slower. 14:39
particle this is something that static analysis can solve 14:42
which is why i want tree-ssa
kj Maybe, but not sure, there could be side effects through an operation or the other, in which case you might want to NOT do such optimizations. Not sure if that could happen. 14:43
jonathan In Perl 6, you probably can't do this optimization ever if you have context variables. 14:44
(as in, can't do it on those variables)
Or at least you have to be an awful lot more careful.
particle static analysis can't fix every problem, but it can fix some :) 14:45
kj: making compilation slower isn't a bad thing if you plan on reusing bytecode 14:46
the compiler should be able to determine (or the user to specify) whether something is to be optimized for compile speed or execution speed 14:47
kj particle: yes, right in that. I can imagine an option to switch it of
off
pmichaud in PIR/Parrot, it's almost impossible to determine if it's safe to re-use a register in the general case 14:52
because any opcode could invoke a vtable method that in turn rebinds a symbol 14:53
and that can't be determined with static analysis
kj pmichaud: I was afraid so.
pmichaud I'm thinking the optimization makes the most sense for lexicals at the moment
jonathan We need langauge-specific analysis to really be able to do such things. 14:54
pmichaud jonathan is correct that if a given lexical is marked as contextual, then we need a way to turn it off (thus :volatile)
global variables are much more likely to be rebound, so they may be :volatile by default 14:55
jonathan Anyone know how to set "does array" from PIR? 15:07
particle as in, the pmclass declaration?
jonathan Yes. 15:08
But on a PDD15 object type. :-)
Previously we got away with it by inheriting from ResizablePMCArray, which had that.
particle you can add a role 15:09
or do you mean 'provides' (the old 'does'). if so, there's no way to do that
jonathan Yeah, actually I mean provides.
:-|
particle i suspected as much :( 15:10
there should be a way, however
jonathan Aye, I ain't sure what/how though. 15:11
particle seems to me it should only be possible in init 15:12
jonathan Well, it's per-class, not per-PMC
particle er, right.
i mean, upon class creation
it's not dynamic 15:13
pmichaud one should be able to add a "provides" dynamically, though
we can add methods, add parents, add ....
particle ok, so why use it at all, if we have roles?
actually, roles provide provides
15:13 sjansen joined
pmichaud I think it's just a variation of 'add role' 15:13
or, at least, it should be
particle Roles composed with C<does> may also define C<provides> for one or more
interfaces. (They generally define at least a C<provides> corresponding
to their own name.)
pmichaud jonathan: it's okay with me if we eliminate the does $P0, 'array' from rakudo stuff 15:14
particle pdd17_pmc.pod:184-6
pmichaud and replace it with some other way of testing for array-ness
jonathan pmichaud: The problem is when you use one as :flat
And then Parrot checks if it does array
particle well, that's why parrot has roles 15:15
too bad they're unimplemented
jonathan Well, PMC-level ones are. :-)
particle prole Enumerable etc
jonathan PDD15 ones are implemetned and work nicely...it's just proles, as you mention.
particle yep. 15:16
i suppose that's not a huge problem now
since you can add pdd15 roles in to core pmcs
jonathan Grr. Creating a role named array and making the class do it doesn't work. :-| 15:24
oh, I take that back. It does work. I was doing it wrong. (n00b) 15:26
particle sweet!
dalek allison@perl.org | pdd27mmd_tasklist: 15:30
link: www.perlfoundation.org/parrot/index...d_tasklist
jonathan gets things fixed enough that you can actually enter interactive mode now 15:37
You can't *do* anything, but...
At least this means the use that HLLCompiler makes of @*ARGS in terms of its being a Perl6Array are now in place.
particle you mean in your lazy-list-enabled working copy ? 15:38
ah list->array working copy
jonathan Yes
I made a branch
particle commit early and often :) 15:39
jonathan So I can commit bits at a time and have it as broken as I want without it annoying folks using Rakudo.
Going to commit now that I've reached this "milestone".
dalek r30380 | jonathan++ | lazyrakudo: 15:43
: [rakudo] Start to implement the new lazy list classes. This means anything that uses Array and List is majorly broken with this commit (which, fortunately, is in a branch!) This includes the compiler itself, though we are now fixed up enough to be able to actually enter interactive mode. From here, will start making things work again, starting with what we need to be able to compile things so we can start passing some of the tests.
diff: www.parrotvm.org/svn/parrot/revision?rev=30380
particle jonathan++ # easier code reviews 15:44
jonathan accepts no responsibility for sick feelings as a result of code-reviewing this 15:45
dalek r30381 | jonathan++ | lazyrakudo:
: [rakudo] Add new Iterator.pir (lazy list iterator), which I forgot to add in the last ci.
diff: www.parrotvm.org/svn/parrot/revision?rev=30381
jonathan I'm trying to keep it neat, though no doubt there will be clean-ups to do before any kind of merge.
That feels a little way off right now, though. 15:46
pmichaud I still don't quite understand why we need a separate Iterator class, but okay. 15:47
jonathan The spec suggests there is one, IIRC. 15:48
pmichaud actually, it doesn't. :-)
er, it didn't. :-)
(last time I checked)
moritz what would you use instead? Just a lazy list? or a role?
pmichaud just a lazy list 15:49
moritz but a lazy list has to keep "old" items, an iterator doesn't
jonathan That would suggest you can only iterate it once, rather than many times.
pmichaud ..."old" items?
particle evaluated
moritz so if you do 'for =$handle { ... }' a lazy list would keep everything in memory
while an iterator would just keep one line 15:50
pmichaud in the case of =$handle, the iterator simply grabs the next item from the filehandle
that *does* consume the item, however.
but I'm talking about List, not filehandles
moritz ok
pmichaud (we already have IOIterator in Rakudo for iterating filehandles) 15:51
(can only iterate it once).... I definitely don't understand.
15:51 Zaba joined
particle which could be a single item lazy list 15:51
dalek r30382 | jonathan++ | lazyrakudo: 15:58
: [rakudo] Update unshift on Array. We can now compile and run some very simple programs again and pass a few of the sanity tests.
diff: www.parrotvm.org/svn/parrot/revision?rev=30382
pmichaud jonathan: unshift looks wrong to me 16:00
we can't just prepend to @!evaluated, because the thing we're prepending might be lazy
jonathan Hmm. Good point. 16:01
pmichaud the solution is to move @!evaluated into @!unevaluated, then prepend to @!unevaluated 16:02
(leaving @!evaluated empty)
jonathan Yeah, you're right.
particle yep
pmichaud ...which is why I was saying that defining these in terms of 'splice' might be better :-)
but, perhaps not now that I think about it. :-) 16:03
jonathan Lazy splice felt a little scary...though I don't think it *really* is. It just felt like one of the more advanced list operations and, in theory, harder to get right. :-) 16:04
pmichaud also, for lazy lists it shouldn't be necessary to !flatten args all of the time, either.
i.e., flattening can occur lazily as well
jonathan Yes, good point. 16:05
particle you're rather eager to get lazy working correctly aren't you
pmichaud there's not much point doing it if it's not doing it correctly :-) 16:06
for lists, that is.
moritz I don't think it's specced how lazy exactly lists must be
pmichaud for other features I think cheats are reasonable. but lazy lists are worth getting right
moritz: I agree, but in the case of !flatten, we're actually *complicating* the implementation if we leave it there 16:07
particle if it's working, we can make it good later
jonathan I'm not exactly aiming to write a wrong implementation. :-P
16:07 Theory joined, Auzon joined
particle waits to see .elems 16:08
pmichaud for .elems all a lazy list has to do is add up the .elems of its unevaluated part
particle *parts
jonathan Plus its evaluated part.
pmichaud (plus the number of items in its evaluated part)
particle the head is evaluated, but there may be a partially evaluated tail 16:09
pmichaud yes, but partially evaluated tail still works
i.e., that's not an issue
particle how do you know if something has been evaluated in the tail? 16:10
pmichaud I don't have to know that
I just have to ask it for its .elems
particle yes, i know
let's say you want to skip calls to .elems where possible 16:13
"i know this item has been evaluated, so i just +1"
or can we not make that optimization, because some item may have overridden .elems
pmichaud I can check to see if an item is something that flattens, yes
but at some point it's just easier to go ahead and call .elems :-)
(yes, Array.elems might be a trickier case) 16:14
dalek r30383 | jonathan++ | lazyrakudo:
: [rakudo] Fix dumb pre-coffee brain-o's in Perl6Iterator. Now we get through make, and pass all but one of the 00-parrot sanity tests.
diff: www.parrotvm.org/svn/parrot/revision?rev=30383
pmichaud I *still* don't understand why we need Perl6Iterator :-)
jonathan What do you want me to do? Stick those methods and the $!position into the List class? 16:16
pmichaud ...$!position?
moritz I think that 'for' needs to store a position
pmichaud does Perl6Iterator contain a reference to its List ?
16:17 iblechbot joined
moritz and then check with @list.exists($position) if its exhausted 16:17
jonathan If we iterate a partially evaluated list, we need to know where in the evaluated part we are, before we start going through the unevaluated part
Yes
pmichaud oh, that seems... wrong, at least the way I was envisioning ig
it
consider
my @a = 1..3; for 0, @a { say $_; @a = (); }
kj nopaste? 16:18
clunker3 pasta.test-smoke.org/ or paste.husk.org/ or nopaste.snit.ch:8001/ or rafb.net/paste or poundperl.pastebin.com/ or paste.scsys.co.uk/
purl nopaste is at nopaste.snit.ch/ (ask TonyC for new channels) or rafb.net/paste or poundperl.pastebin.com/ or paste.scsys.co.uk/ or App::Nopaste or tools/dev/nopaste.pl
moritz jonathan: List doesn't need to know how to iterate over itself. List just responds to calls to .[] and evaluates things as needed up to the index
nopaste "kjs" at 86.95.212.32 pasted "description for "register" scope for pdd26" (10 lines) at nopaste.snit.ch/13850
pmichaud to me, iterator on List just returns a clone
jonathan And then it destructively removes elements from itself? 16:19
kj pmichaud: could you check my nopasted snippet, it's my understanding of register scope. I'd like to add this to pdd26
pmichaud otherwise modifications to the List would be reflected in the iterator
jonathan That would allow us to eliminate $!position
And the need for Perl6Iterator
I can do it that way, if you like. :-)
pmichaud I'm presuming that even though lists are lazy, they aren't lazy references 16:20
jonathan *nod*
OK, I will do what you suggest.
pmichaud so that my @b = 1,2,3; my @a = (0, @b); @b[0] = 4; # @a still has 0, 1, 2, 3
jonathan Oh. Hmm. 16:21
Ah. Do we call .list on @b?
pmichaud we may need to, yes.
jonathan OK. 16:22
If we are doing that, it makes sense.
pmichaud kj: might add a blurb that the :name() for register variables has to conform to PIR identifiers 16:25
(this might be relaxed in the future, but currently that's the case)
other than that it looks good 16:26
16:28 Debolaz joined 16:30 Auzon joined
pmichaud ('for' store a position) -- 'for' doesn't need to store a position -- it just grabs elements from the iterator until the iterator is empty 16:34
moritz is confused - I thought we didn't need an iterator? 16:35
pmichaud I don't need a separate Iterator class
List.iterator can just return me another list-like object that I can destroy
we have iterators -- I just don't need an Iterator class 16:36
actually, Iterator sounds like a role
and the List.iterator does { self but Iterator } 16:37
er, List.iterator "is effectively the same as" { self but Iterator }
that would keep things like 'shift' out of the List class
or, we could just have List.iterator return itself as an Array 16:38
(since Array has a shift method)
jonathan Am just having it implement the shift_pmc interface for now, but not unshift method 16:39
But yes, role sounds good.
pmichaud depends on how strictly we feel we need to keep the mutable/immutable distinction internally in List
yes, using vtable_method is good for now
jonathan Iterator is gone. Stuff is broken. Fixing... :-) 16:40
pmichaud of course, it's pretty easy to implement them even as immutables
.sub 'push' :method
.param pmc args
.return 'list'(self, args)
.end
.sub 'unshift' :method 16:41
.param pmc args
.return 'list'(args, self)
.end
(put some :slurpy in there :-)
although I suppose that technicaly isn't 'push' or 'unshift' :-) 16:42
16:42 masak joined
kj pmichaud: (about "register" scope): I was thinking, maybe it'd be handy to have anonymous register variables, that map to $Px. For these, you don't need to have a PAST::Var( :isdecl(1)), obviously. Creating them is done by not-specifying the :name. 16:43
pmichaud kj: yes, I was planning that. Just haven't implemented it yet.
kj: I'm also thinking of potentially supporting int/string/num registers at some point 16:44
I'll go ahead and add the $P support, though, that's pretty straightforward
...oh, but I guess that's not terribly useful until I have the ability for PAST::Var node re-use 16:47
kj Names given to the C<name> attribute must conform to rules for
PIR identifiers. If no C<name> atribute is set, Parrot registers
are used. In this case, the C<isdecl> must not be used.
pmichaud it's okay if isdecl is used
kj what about this for addition?
pmichaud I won't make isdecl prohibitive
kj well, that wouldn't make sense
it's useless 16:48
pmichaud yes, but I don't want to make it an exception
kj ok.
i'll loosen it up to "no need to use"
pmichaud isdecl on a auto-generated register will effectively be a no-op
kj ok
In this case, setting the C<isdecl> does not have any 16:49
effect.
?
pmichaud sure, that works.
16:51 jhorwitz joined
dalek r30384 | kjs++ | trunk: 16:52
: [pdd26] add description for "register" scope
: + add missing ')'
: + mention :vtable subs have 'self' too (in attribute scope description).
diff: www.parrotvm.org/svn/parrot/revision?rev=30384
kj pmichaud: I also emailed you a piece for parrotblog on register scope. 16:54
16:55 particle joined
particle irc log? 16:56
purl irc log is irclog.perlgeek.de/parrot/
pmichaud kj: update to pdd26 looks great, thanks! 16:58
kj thanks for reviewing :-) 16:59
dalek r30385 | jonathan++ | lazyrakudo: 17:00
: [rakudo] Get rid of Iterator class - just return a clone of the list, and put the iterators there. Also gets rid of $!position.
diff: www.parrotvm.org/svn/parrot/revision?rev=30385
r30386 | kjs++ | trunk: 17:04
: [pct] update documentation on :scope attribute.
diff: www.parrotvm.org/svn/parrot/revision?rev=30386
17:10 pako joined
pako hi all 17:10
masak hello pako 17:11
pako I'm embedding parrot in my C++ application and want interpreter to be stopped and "hibernated" to disk at some point
what docs cover this topic?
17:14 rurban__ joined
particle 'freeze' and 'thaw' vtable methods 17:14
masak pmichaud: was it "load_bytecode 'perl6.pbc'" I should add at the top of a standalone PIR file?
pmichaud masak: yes
masak what if the PIR file is in another directory?
pmichaud that becomes trickier. load_bytecode will search several directories, actually 17:15
so perhaps copy perl6.pbc into runtime/parrot/library
moritz or use an absolute path
pmichaud yes, absolute path works also
I'm still considering how I want that to happen automagically 17:16
masak hm, the thing is that I want something that I can put in installation instructions
so it should work for as many people as possible
pmichaud rsn the --target=pir option should also generate the loading of perl6.pbc
masak maybe just ask them to ln -s the perl6.pbc into the current directory :)
hm, when I run the PIR, I get a Null PMC access... 17:19
(one that I don't get when running the Perl 6 source) 17:20
pmichaud it's possible that perl6.pbc isn't being load "soon" enough.
hmmm... what's a good way to determine if Rakudo is already loaded? 17:21
masak is it always into the topmost .sub I should inject the "load_bytecode"?
the second one has :init in this PIR file, whereas the first one doesn't 17:22
moritz you can always add another .sub (with :anon :load) that does it on top
pako particle: but they are serializing a PMC argument. and I need something that will traverse the local and global scopes, stack, and 'freeze' each of them.
pmichaud oh. 17:23
there's a problem in that the generated code now has :immediate, which expects that Perl 6 is already loaded.
hrm.
so :load and :init aren't early enough
masak ouch
moritz can you just s/init/immediate/? 17:24
pmichaud probably not 17:25
:immediate is a very tricky beast
might be able to s/:immediate/:load :init/ though
masak s/init/immediate/ resulted in a Bus error 17:26
now trying s/:immediate/:load :init/
...back to the Null PMC access
particle pako: parrot interpreters are PMCs 17:29
sjansen icanhascheezburger.files.wordpress....ted-it.jpg
masak pmichaud: is there some way to bundle the PIR and perl6.pbc into a single .pbc file?
pmichaud masak: hmmm.... not easily. And load_bytecode is really the way we want to go. 17:30
Let me see if I can resolve it quickly... just a min
masak nice.
sjansen graphjam.files.wordpress.com/2008/08/cat.png 17:31
graphjam.files.wordpress.com/2008/08/125.png
pako particle: oh, then I have a direction to investigate. thanks for your help
sjansen graphjam.com/
particle pako: also see the 'getinterp' op
pmichaud stuff like 17:32
sub set_block_proto($block, $type) { my $setup_sub := get_block_setup_sub($block); $setup_sub[0][0][0].name($type);
}
makes me cry.
what in the world does $setup_sub[0][0][0] refer to?!?
particle O_o
masak the first great-grandson of $setup_sub, inheritor of the throne! 17:33
particle $setup_sub is dead! long live $setup_sub!
dalek r30387 | jonathan++ | lazyrakudo:
: [rakudo] Various bug fixes to assignment and list creation, which gets us able to run through make test without any hangs.
diff: www.parrotvm.org/svn/parrot/revision?rev=30387
sjansen Err... whoops.. wrong window.
jonathan pmichaud: See the structure built in get_block_setup_sub
sjansen Oh well, those are some fun links anyway. ;-) 17:34
masak sjansen # stirring up S/N equilibria 17:35
sjansen++
pmichaud jonathan: I can't quite envision the structure 17:37
jonathan: see if I'm stating this correct: 17:38
Tene purl: allison?
purl rumour has it allison is Allison Randal <mailto:allison@perl.org>
Tene purl: parrotbug?
purl somebody said parrotbug was mailto:parrotbug@parrotcode.org or svn.perl.org/parrot/trunk/docs/submissions.pod or see also "rakudobug"
jonathan pmichaud: You have a PAST::Block. It contains two statement nodes, the 0th for setting up the block type proto, the 1st for setting the signature
pmichaud okay
I can get rid of the PAST::Block and use loadinit then, yes?
jonathan Yes.
But basically you're just chasing down the children to the PAST::Var nodes.
pmichaud is there ever the case where set_block_proto gets called more than once on a given block? 17:39
jonathan Note that we only touch these and build this structure inside the subs.
smash later &
jonathan Can't think of one off hand, it's the way it is because we don't know which proto to attach until later on. 17:40
pmichaud same question for protos -- any chance a block would have a given proto more than once? 17:41
I'm thinking that set_block_proto and set_block_sig could simply add the appropriate past structure to the :loadinit structure
instead of pre-initializing it
jonathan I can't think of any reason right now, why that wouldn't work.
17:41 pako left
jonathan The defined order felt nice for knowing we could change it later if needed. 17:42
pmichaud agreed.
jonathan Thing is that we need to know that it's not a sub and not a method in block action.
pmichaud I _think_ I'm going to switch it around for now, though
17:42 cotto_work joined
jonathan So we know whether to stick the Block proto in. 17:42
I think that was the problem I ran into.
17:42 Zaba_ joined
pmichaud do we _have_ to have the Block proto? 17:42
jonathan Well, that's going to turn into the re-bless code, so it's basically the same question as, do we have to rebless it. :-) 17:43
pmichaud can the dispatcher assume Block if not set?
jonathan I think we can use p6meta to map Sub/Closure to Block.
pmichaud oh yes, that would work 17:44
jonathan And then we don't need to attach anything to blocks.
pmichaud that would be *much* better
jonathan Yes.
pmichaud I don't know that I want every immediate block to have to have signature properties
jonathan Ah, damm. I forgot about handling negative indices!
Oh, I don't think immediate blocks do have signatures.
I've not seen that in the spec, anyway.
Though I may be wrong. 17:45
pmichaud masak: It's going to take a bit of refactoring before I can get the load_bytecode "perl6.pbc" to work, in any form. 17:48
masak pmichaud: oki
no worries
pmichaud it's not a quick fix, unfortunately, and I have tons of reports (both perl and non-perl) that I need to get written today
Tene There, I filed a ticket about exception handler behavior that we need for resumable exceptions. 17:49
rt.perl.org/rt3/Ticket/Display.html?id=58170 17:50
pmichaud afk, lunch 17:52
Tene pmichaud: I'm gonna steal your slides for my parrot presentation tomorrow, 'kay? 17:53
17:54 pako joined
dalek r30388 | jonathan++ | lazyrakudo: 17:57
: [rakudo] Fixes for negative index handling and as yet undefiend elements. This means we now pass all of 00-parrot again; failing 5 of 01-sanity.
diff: www.parrotvm.org/svn/parrot/revision?rev=30388 17:58
jonathan OK, time for some shopping, then dinner, then some hacking later. 18:06
18:07 Zaba joined 18:10 pako left
masak rakudo: if "yo" ~~ /yo/ { say $/ } 18:14
polyglotbot OUTPUT[Null PMC access in get_string()␤current instr.: 'print' pc 12928 (src/gen_builtins.pir:8213)␤called from Sub 'say' pc 12950 (src/gen_builtins.pir:8223)␤called from Sub '_block21' pc 248 (EVAL_14:94)␤called from Sub '_block11' pc 46 (EVAL_14:20)␤called from Sub 'parrot;PCT::HLLCompiler;eval'
..pc 806 (src/PCT/HLLCompiler.pir:481)␤called from...
18:15 Zaba_ joined 18:17 donaldh joined
masak rakudo: "yo" ~~ /yo/; say $/ 18:19
polyglotbot OUTPUT[yo␤]
masak strange, I can not find the crucial difference between these two.
since the if creates a separate .sub in PIR code, the $/ is funneled through an "!OUTER" call 18:20
but besides that, there's no difference
18:42 paco joined
jonathan masak: I'd expect that to work...certainly a bug. Oddness. 18:48
masak jonathan: indeed. 18:49
I've already filed a bug for it.
#57858 18:50
I cannot reach any conclusion other than that "!OUTER" does the wrong thing with $/ 18:55
rurban dotnet fails with dotnetassembly.pmc:1851: error: `E_IOError'
is this known? 18:56
dalek r30389 | fperrad++ | trunk: 18:57
: [RELEASE]
: update LANGUAGES_STATUS.pod (17) from languages-smoke results
diff: www.parrotvm.org/svn/parrot/revision?rev=30389
rurban Is E_IOError now EXCEPTION_PIO_ERROR? 18:59
NotFound $ ../../parrot --runcore=gcdebug perl6.pbc -e 'say "Hello";' 19:02
src/string.c:521: failed assertion '!PObj_on_free_list_TEST(a)'
(you need a lot of patience to test this)
19:04 Zaba joined
jonathan rurban: Yes, most probably. 19:04
rurban: .Net hasn't had any real attention of late, due to lack of time. 19:05
rdice Hi, Parroters. Is anyone out there particularly involved with unicode issues in parrot? 19:07
rurban I just found the fix. I'll make a new ticket then. 19:08
NotFound rdice: I'm interested in it.
rurban Allison forgot one tiny thing
rdice TPF is renewing our unicode consortium membership and
this involves hooking people into the u.c. membership machinery. 19:09
We want to make sure that someone on p5p and someone in the p6 world is tied in. 19:10
NotFound rdice: Did you mean adminisrative tasks or something? 19:11
rdice No, it mainly involves being on their mailing list for upcoming technical changes and issues. 19:12
NotFound rdice: I think I can help with that.
dalek r30390 | fperrad++ | trunk:
: [RELEASE]
: update LANGUAGES_STATUS.pod (9) from manual tests 19:13
diff: www.parrotvm.org/svn/parrot/revision?rev=30390
19:14 Ron joined
rurban rdice: juerd waalboer would be my tip. 19:14
(for p5p) 19:15
rdice How actually is unicode handled in parrot? is there a pdd that talks about this specifically? 19:19
or is it just kind of baked in all over the page?
er, place?
NotFound rdice: the strings pdd talks about it, but is pending of reviewing and reimplementing several thigs. 19:20
pmichaud rdice: unicode is built into Parrot's string implementation 19:33
jhorwitz donaldh: ping 19:34
pmichaud there's plans to revamp that a bit (for optimization purposes), but essentially it's all nicely compartmentalized
donaldh jhorwitz: pong
pmichaud the pdd that describes the plans is pdd28_strings.pod
jhorwitz donaldh: did you get mod_perl6 working the other day?
donaldh yes I did, thanks.
You'd logged off before I got there. 19:35
particle provides a link for management: svn.perl.org/parrot/trunk/docs/pdds...trings.pod
pmichaud jhorwitz: I haven't forgotten you in everything going on -- interpolated namespaces is high on my list
jhorwitz donaldh++ you're only the third person i know who's done it!
donaldh :D
jhorwitz pmichaud: yes, that's been lurking in the back of my mind. thanks. :) 19:36
pmichaud jhorwitz: I'm eager to see if precompiled modules will be of any help to mod_parrot
donaldh jhorwitz: sealgair.no-ip.com/sqlite
jhorwitz pmichaud: it will help startup time, which can be a few seconds. registry scripts in particular will see a big benefit in startup time. 19:37
after that it's all cached
donaldh: that's mod_perl6 on the backend? 19:38
pmichaud we're also about ->this<- close to being able to import modules from other parts of Parrot
(i.e., those not written in Perl 6)
jhorwitz wow, that's pretty darn close. ;-)
donaldh jhorwitz: Not yet. That's mod_parrot running a pir script that uses sqlite via nci. 19:39
pmichaud actually.... now that I think about it....
jhorwitz even better! donaldh++ :)
donaldh pmichaud: I want some of that ;-)
pmichaud I wonder if I get could C< use SDL; > working
jhorwitz raises an eyebrow 19:40
purl sees that eyebrow and raises a nose
donaldh pmichaud: I was getting around to hacking with 'use' so that it would look further than just x.pm
pmichaud donaldh: as of this morning it does that now 19:41
donaldh Oh, cool.
pmichaud it also understands x.pir and x.pbc
(assuming they're in the @INC path)
the tricky part is registering the protoobjects
so we might end up with a wrapper SDL.pm that builds the protoobjects 19:42
donaldh okay.
jhorwitz that's essentially what i had to do w/ mod_parrot objects
Tene Hmm. That seems less than ideal. 19:43
donaldh pmichaud: I've just started writing an oo wrapper around sqlite so any pointers would be appreciated.
jhorwitz mod_perl6 is responsible for registering the protoobjects
pmichaud Tene: what part seems less than ideal?
donaldh pmichaud: having to write boilerplate.
Tene pmichaud: having to wrap every parrot library you want to use.
particle donaldh: i suggest you svn co branches/gsoc_nci_001 and exercise the branch 19:44
having a real-world report on how it works would make merging to trunk happen sooner
Tene Oh, that's far enough along to be useful now 19:45
?
pmichaud Tene: well, I don't know that we'll wrap every parrot library. But at present I don't know of a good way to say "what are all of the classes and symbols that came from foo.pbc"
donaldh particle: yes, I can do that. What's new on the branch?
pmichaud if a library uses p6object to build its classes, then of course it becomes much easier
Tene pmichaud: so this goes back to the export list issue?
particle jitted nci bindings
no more call_list
automated .h parsing
pmichaud Tene: yes, it's all about exporting. But I see now how Perl 6 handles export/import, so that will of course be the model for PCT 19:46
Tene Okay.
donaldh particle: sweet, I was about to manually parse the .h
pmichaud of course, modules that don't use PCT or P6object (such as SDL) are the ones that we have to figure out how to either wrap or automatically introspect to determine what symbols we want
jonathan returns
jhorwitz if we can't introspect, i don't think wrapping is a big deal 19:47
donaldh pmichaud: if a library can export once and any language can import, that should suffice, no?
pmichaud donaldh: sure, but then we have to make sure all of the libraries follow a common export convention 19:48
the "common export convention" is the part that isn't common yet :-)
Tene donaldh: we've needed a convention/spec for export lists for a while now.
donaldh :D
Tene Nobody has stepped up to write it yet.
particle that's common when it comes to parrot
jhorwitz libraries shouldn't have to care what languages use them
particle libraries don't have a care in the world.
pmichaud Perl 6 has specialized sub-namespaces for exporting
particle damned hippies.
jhorwitz LOL
donaldh jhorwitz: equally, a poor user shouldn't have to wrap a library to use it. 19:49
jhorwitz ah, define "user"
pmichaud I figure that most libraries will come with their wrappers already in place, once we get a standard in place
jhorwitz concurs
Tene My ideal state is that as long as any language implements 'use', it can use every library that every other language can use. If each language has to ship bindings for every library, that's a problem. 19:50
donaldh I feel very nervous about the idea of a library with, say, 10 wrappers. Who maintains the wrappers as the library evolves?
pmichaud Tene/donaldh: I totally agree that N language wrappers isn't going to be the right approach. 19:51
I'm just saying that Parrot libraries will eventually have a common export interface available
but if I want to "use SDL;" today, my choices are to update the SDL libraries or write a wrapper
jhorwitz travels to the future and sees that the common export interface is good.
pmichaud yes, I should visit Australia as well. :-) 19:52
jhorwitz the stories alias told me...
particle well, the exporter pmc gives you an api, and it's subclassible to handle conversions like prepending & to function names etc 19:53
jhorwitz my main problem wasn't with function exports -- it was objects
pmichaud particle: afaict, the exporter pmc doesn't specify an interface for how a module indicates what symbols it thinks are exportable
particle but the list of methods/functions/etc is not yet defined
right
do you think that belongs in Exporter? 19:54
pmichaud no.
particle nor do i
pmichaud the Perl 6 interface is that there's a EXPORT subnamespace for every namespace
dalek r30391 | allison++ | pdd27mmd:
: [pdd27mmd] Parse and compile MULTI declarations in .pmc files.
diff: www.parrotvm.org/svn/parrot/revision?rev=30391
particle ah, right.
pmichaud so, for "module Foo;" the exported symbols will be in subnamespaces of Foo::EXPORT
particle i wonder if EXPORT should exist in the hll-private namespace 19:55
pmichaud that could work, although in Perl 6's case it's in the hll-public namespace
particle sure, but that's the perl 6 api, and easily codeable
in fact, it seems PCT-able
pmichaud it is, but there's still a challenge in finding the correct namespace 19:56
particle ...if it's made standard to use hll-private namespaces for exported symbols.
pmichaud given a statement like "use SDL;" -- how do we know what HLL contains SDL::EXPORT ?
dalek allison@perl.org | pdd27mmd_tasklist:
link: www.perlfoundation.org/parrot/index...d_tasklist
particle use SDL implies it's perl 6 19:57
pmichaud so, use SDL:lang<Parrot>; then
particle use SDL:lang<parrot>; #look in ...right
that would call up the parrot compiler
and ask it for SDL exports 19:58
19:58 Debolaz joined
pmichaud okay, that can work. 19:58
so, it needs to be implemented in HLLCompiler
and we need to see about creating a 'Parrot' compiler
no problem.
particle yep
donaldh So each HLL would define it's own syntax
particle yes, that gives the hlls whatever syntax they want
dalek r30392 | jonathan++ | lazyrakudo:
: [rakudo] Confused my unshift with my shift somehow; resolving this fixes for.t.
diff: www.parrotvm.org/svn/parrot/revision?rev=30392
rurban rdice: since we use icu do we have to care about unicode at all?
donaldh that seems reasonable.
rurban rdice: icu should handle all. 19:59
pmichaud not every system has icu
particle rurban: icu is a stopgap
rurban ok
pmichaud phone in 1
donaldh particle: is there a pdd for gsoc_nci ? 20:03
20:04 pim joined
particle donaldh: yes, pdd09_gc 20:05
pim Hello, i compiled parrot on debian Sarge but get this error when installing :
src/parrot_debugger.o: dans la fonction ļæ½ main ļæ½: 20:06
src/parrot_debugger.c:147: rļæ½fļæ½rence indļæ½finie vers ļæ½ Parrot_set_config_hash ļæ½
rurban pim: the order of obj and libs is wrong
dalek r30393 | julianalbo++ | trunk:
: fixing again 'script' debugger command
diff: www.parrotvm.org/svn/parrot/revision?rev=30393
rurban for most exe's 20:07
dalek allison@perl.org | pdd27mmd_tasklist:
link: www.perlfoundation.org/parrot/index...d_tasklist
NotFound pim: let me see, I changed that part today, and may have forgotten the installed part, 20:08
pim I must wait? 20:09
NotFound Just one moment...
Yes, that is. I will fix in a few moments, thanks for the report. 20:10
pim It's not a problem, i can test for you , thank you so mutch.
NotFound If you can wait a moment, I commit the fix so you can test it. 20:11
pim NotFound: i can wait all the time you need... 20:12
Tene purl: coke? 20:13
purl rumour has it coke is mailto:will@coleda.com or just a figurehead. or coke-floats.blogspot.com/ or DietCoke or a pest
donaldh pim asks for a long stand
dalek r30394 | jonathan++ | lazyrakudo: 20:16
: [rakudo] Get the lazy lists implementation to now pass all of the sanity tests, with a variety of small fixes.
diff: www.parrotvm.org/svn/parrot/revision?rev=30394
r30395 | julianalbo++ | trunk:
: fix installable parrot_debugger build
diff: www.parrotvm.org/svn/parrot/revision?rev=30395
donaldh particle: I have checked out branches/gsoc_nci_001, where should I start?
NotFound Done.
20:17 jhorwitz joined
dalek r30396 | jonathan++ | lazyrakudo: 20:21
: [rakudo] Coding standards. I meets them.
diff: www.parrotvm.org/svn/parrot/revision?rev=30396
particle donaldh: build it :) 20:25
donaldh done
particle then try to get sqlite working
see compilers/ncigen 20:26
20:28 coke joined
coke ok, tene pinged me, I hit him privately, but he's not responding. anyone know what he wanted? 20:28
donaldh particle: thanks, I'll explore 20:29
particle coke: phone. any report? 20:30
that's not what tene wanted, i'm sure
purl But are you sure you're sure?
coke "removed some parrot deprecations; 0.7.0 was released; going to investigate adding in some callgrind output for parrot sub invocations" 20:31
I figured after 30m it was pointless to call in.
GAH STARVING brb.
dalek r30397 | jonathan++ | lazyrakudo: 20:32
: [rakudo] Make us able to actually run spectest_regression. Lots of issues to address, since we currently have massive fail: Failed 74/123 test scripts. 1447/2839 subtests failed.
diff: www.parrotvm.org/svn/parrot/revision?rev=30397
20:32 cotto_w0rk joined
coke I CAN HAZ OATMEAL? 20:34
davidfetter HANDZ COKE SUM CHEEZBURGRZ
coke sadly, no. 20:38
20:40 cjfields joined 20:42 Whiteknight joined
davidfetter HAPPY CHEEZBURGRZ ARE OUT OF HAPPY :( 20:43
dalek r30398 | Whiteknight++ | trunk: 20:49
: [DOD] remove mention of DOD_no_trace_volatile_roots, a GC flag that isn't used anywhere and has never been well documented.
diff: www.parrotvm.org/svn/parrot/revision?rev=30398
pim hum 21:03
21:06 pim joined
pim sorry, i made a wrong command :O( 21:07
NotFound pim: Have you tried the fix?
pim NotFound: i lost irc and have lost the url, sorry 21:08
NotFound pim: I commited it to svn.
pim what does that mean? how can i proceed? 21:09
NotFound How do you downloaded parrot? 21:10
pim svn , etc ...
NotFound Then just: svn up
21:10 Psyche^ joined
Auzon pim: irclog.perlgeek.de/parrot/ 21:10
NotFound And configure again
pim svn up will upgrade automatically? 21:11
Auzon That's a realtime log of this channel
moritz pim: it will update the source files. Then you have to build again
NotFound pim: up is short for update
dalek r30399 | jonathan++ | lazyrakudo:
: [rakudo] A range of bug fixes and re-workings of a couple of bits. This means we now run through spectest_regression without hanging anywhere (had to manually kill stuff to get through before this). Status: Failed 55/123 test scripts. 873/2839 subtests failed.
diff: www.parrotvm.org/svn/parrot/revision?rev=30399 21:12
pim Okaiiiiiyy, let me do it...
NotFound: returned, Actualisļæ½ ļæ½ la rļæ½vision 30399, is it good? 21:13
moritz very good
pim I suppose i muste re-compile 21:14
moritz yes
pim okay, let me do it...
21:15 smash joined
smash hello everyone 21:15
NotFound pim: configure first, the Makefile generation has changed
pim That's what i made , perl Makefile.PL 21:16
NotFound Ok
pim it's rebuilding, a little bit long...
done, i try to install 21:17
...
davidfetter oi, smash
21:20 particle joined
pim installation is Okaiiy 21:20
NotFound pim: good, thanks.
pim but i must test and continue to see if there's not other problems.
coke smolder.plusthree.com/app/public_pr...st_failure 21:25
pim Failed Test Stat Wstat Total Fail Failed List of Failed 21:27
-------------------------------------------------------------------------------
t/codingstd/tabs.t 1 256 1 1 100.00% 1
18 tests and 665 subtests skipped.
Failed 1/432 test scripts, 99.77% okay. 1/10644 subtests failed, 99.99% okay.
particle which file? 21:28
purl which file is that error in
NotFound coke: my fault, sorry.
Fixing...
purl fixing is good, definitely.
pim t/codingstd/tabs.t i suppose
NotFound Is the same coke reported. 21:29
pim yet fixed ?
i must rebuild? 21:30
smash pim: nope, just run test again
pim make test? 21:31
purl make test is, like, churning... warned that it needed PadWalker
NotFound pim: is not important, you can let it be until other update.
smash pim: yes
purl: forget make test
purl smash: I forgot make test
dalek r30400 | Whiteknight++ | pdd09gc:
: [merge] update pdd09gc branch to trunk from r30356
diff: www.parrotvm.org/svn/parrot/revision?rev=30400
r30401 | allison++ | trunk:
: [cage] Include parameter type in docs for 'local_return'.
diff: www.parrotvm.org/svn/parrot/revision?rev=30401
r30402 | julianalbo++ | trunk:
: fix codingstd in src/debug.c
diff: www.parrotvm.org/svn/parrot/revision?rev=30402
donaldh how do I go about debugging a PGE grammar?
pim NotFound: just for information, I did not get this error on before version. 21:32
particle donaldh: use <panic: ...> statements
donaldh k 21:33
NotFound pim: is just a tab instead of spaces that I intoduced accidentally in a recent commit,
Is fixed now. 21:34
donaldh ncigen barfs on "typedef int (*sqlite3_callback)(void*,int,char**, char**);" stylee statements, but it looks like they should be supported.
s/statements/declarations/
pim make test is running background. 21:35
2>&1 &
and result in a file
21:36 particle1 joined
pim hum, how can i suppress this tab? 21:41
21:41 particle joined
pim NotFound: May be you dit it yet? upgrading by svn up? 21:42
NotFound pim: is already fixed, svn update to get ridof it.
pim Okay thanks
dalek r30403 | smash++ | pdd27mmd: 21:45
: [branches/pdd27mmd]
: * 'Parrot_mmd_search_cur_namespace' changed to 'Parrot_mmd_search_local'
: * 'Parrot_mmd_search_builtin' changed to 'Parrot_mmd_search_global'
diff: www.parrotvm.org/svn/parrot/revision?rev=30403
mestre.smash@gmail.com | pdd27mmd_tasklist: 21:46
link: www.perlfoundation.org/parrot/index...d_tasklist
r30404 | julianalbo++ | trunk: 21:47
: change tracing control in debugger runloop, completing change accidentally introduced in 30402
diff: www.parrotvm.org/svn/parrot/revision?rev=30404
21:55 particle joined
dalek r30405 | allison++ | trunk: 21:56
: [exceptions] Renaming the new attribute for a resume continuation in the
: Exception PMC to 'resume' instead of 'retcont', for clarity.
diff: www.parrotvm.org/svn/parrot/revision?rev=30405
pim Ok: perl6 seams to work 21:58
what's to do again? 21:59
performing?
purl performing is just so they arent bored :O) haha
Auzon pim: Did you run spectest_regression? 22:01
Tene pim: what sort of work are you interested in?
pim Tene: hum, many i'll work for a bank after hollidays. 22:02
Whiteknight purl forget performing
purl Whiteknight: I forgot performing
pim Auzon: no i forgot :O(
dalek r30406 | jonathan++ | lazyrakudo:
: [rakudo] More fixes, more bad assumptions removed, more things switched over to understand lazy lists. No great breakthrough in spectest_regression, though we move a few tests in the right direction.
diff: www.parrotvm.org/svn/parrot/revision?rev=30406
donaldh particle: ncigen doesn't support out parameters, i.e. func(char** out), so I'll work on a patch for that.
Auzon Whiteknight++ # removing the less amusing purl quips
particle donaldh++
Auzon pim: from the languages/perl6 directory, just 'make spectest_regression'. It should do the rest.
pim What is this command doing? 22:04
Auzon It loads the t/spec/ directory from the Pugs repo, and runs the known-good tests to ensure that Rakudo is hasn't made any regressions
pim Okaii interesting.... 22:05
Auzon rakudo.de has a graph of the daily progress made on that target. It's a rough progress indicator of Rakudo's development 22:06
22:12 pim joined
pim hoops 22:12
@Tene: it's a test. 22:13
how can we talk to just one person?
particle /msg person message here
moritz /msg $nick $message
moritz is too slow 22:14
particle considers changing the kb map so the number row defaults to <shift>+ 22:15
pim i cannot see the message.
donaldh pim: what irc client?
purl hmmm... irc client is irssi or nothing
smash purl: agree 22:16
purl smash: what?
pim donaldh: irssi
text version
purl text version is on macminute though
Auzon purl, forget text version
purl Auzon: I forgot text version
particle msg particle is trying to confuse purl 22:17
purl Message for particle stored.
particle msg particle?
purl Message for particle stored.
particle hee
donaldh that's cruel ;-)
donaldh goes to bed 22:18
purl grabs the lube and follows donaldh
donaldh ohno
pim i do not have 'msg' in irssi.
moritz pim: in irssi a /msg opens a new "window" 22:19
pim exit
moritz pim: you can use Ctrl+n and Ctrl+p to cycle through the windows
22:20 pim joined
pim hum 22:20
22:34 pim joined
dalek r30407 | Whiteknight++ | trunk: 22:41
: [core] Add function-level documentation to src/byteorder.c
diff: www.parrotvm.org/svn/parrot/revision?rev=30407
22:43 pim left
dalek r30408 | julianalbo++ | trunk: 22:52
: debugger 'next' command uses the debugger runloop
diff: www.parrotvm.org/svn/parrot/revision?rev=30408
r30409 | jonathan++ | lazyrakudo: 22:56
: [rakudo] Another range of assorted fixes, getting us passing a little more of spectest_regression in the lazy branch.
diff: www.parrotvm.org/svn/parrot/revision?rev=30409
Whiteknight damn lazy rakudo, needs to go out and get a job 22:57
dalek r30410 | jonathan++ | lazyrakudo: 23:01
: [rakudo] Get reverse test to pass again.
diff: www.parrotvm.org/svn/parrot/revision?rev=30410
r30411 | Whiteknight++ | trunk: 23:04
: [core] Add function-level documentation to src/charset.c
diff: www.parrotvm.org/svn/parrot/revision?rev=30411
23:05 tetragon joined 23:10 AndyA joined
smash later & 23:13
dalek r30412 | Whiteknight++ | trunk:
: [cage] Added RT#48260 documentation stubs for functions that didn't have them, but that I didn't understand enough to document myself.
diff: www.parrotvm.org/svn/parrot/revision?rev=30412
23:19 rba joined
dalek r30413 | jonathan++ | lazyrakudo: 23:44
: [rakudo] Get some more of the built-ins working with lazy lists, albeit not lazily yet (depends on gather/take to do that - can be done in the future).
diff: www.parrotvm.org/svn/parrot/revision?rev=30413
jonathan msg pmichaud OK, I've done as much as I can today. There's still quite a lot of spectests failing in the branch - then, when I started changing things we didn't even get through make and build Test.pm, so progress. :-) Basically, I've just run out of time rather than run into problems. Feel free to review, take this branch on and finish it, etc; I likely won't have any more time for it this week and am away next week. Thanks! 23:45
purl Message for pmichaud stored.
23:46 Limbic_Region joined