Camelia, the Perl 6 bug

IRC log for #parrot, 2010-06-28

Parrot | source cross referenced

| Channels | #parrot index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
00:09 whiteknight bacek: you're going to replace Parrot's POST with PIRATE's POST?
00:09 bacek_at_work whiteknight, yes.
00:10 whiteknight bacek_at_work: you duplicate all the necessary functionality?
00:10 bacek_at_work whiteknight, what do you mean? At the end of the day we will emit PBC from POST without IMCC
00:10 bacek_at_work And I (and cotto++) _implementing_ new functionality.
00:10 whiteknight nice
00:11 whiteknight your POST will be able to do all that current POST can do, and more?
00:11 bacek_at_work It's extension of current POST. Less stringish, more semantic.
00:11 hercynium joined #parrot
00:12 whiteknight okay
00:12 whiteknight nice
00:12 bacek_at_work So, workflow will be HLL->PAST->(optimizations)->​POST->(optimizations)->PBC.
00:12 bacek_at_work For PIRATE: PIR->POST->(optimizations)->PBC (without PAST phase)
00:13 whiteknight very nice
00:14 whiteknight what is speed like? Is the POST->PBC transformation as fast (or faster?) than current POST->PIR->IMCC->PBC?
00:14 bacek_at_work POST->PBC is fast. PIR parsing is really slow...
00:14 whiteknight fast fast?
00:15 bacek_at_work I don't know. It's orders of magnitude faster than parsing...
00:16 whiteknight is it faster than IMCC?
00:16 whiteknight (that's all that realy matters)
00:17 bacek_at_work no. It doesn't really matter if "pirate" can produce better PBC.
00:17 bacek_at_work bacek@illusion:~/src/pir$ cat t.pir
00:17 bacek_at_work .sub main
00:17 bacek_at_work say "Hello, World!"
00:17 bacek_at_work .end
00:17 bacek_at_work bacek@illusion:~/src/pir$ ./installable_pir --stagestats t.pir
00:17 purl .sub main is the entry right?
00:17 bacek_at_work Stage 'parse': 0.0551929473876953 sec
00:17 bacek_at_work Stage 'post': 2.19345092773438e-05 sec
00:17 bacek_at_work Stage 'pbc': 0.0018608570098877 sec
00:17 bacek_at_work Hello, World!
00:17 purl rm -fr /
00:17 bacek_at_work purl, forget .sub main
00:17 purl bacek_at_work: I forgot .sub main
00:18 bacek_at_work bacek@illusion:~/src/pir$ ./installable_pir --stagestats fib.pir
00:18 bacek_at_work Stage 'parse': 1.10337996482849 sec
00:18 bacek_at_work Stage 'post': 2.50339508056641e-05 sec
00:18 bacek_at_work Stage 'pbc': 0.00861501693725586 sec
00:18 bacek_at_work fib(28) = 317811 1.76277303695679s
00:19 bacek_at_work so, making PBC takes milliseconds. Parsing - seconds...
00:20 whiteknight okay, that's good
00:21 whiteknight Overall, will the new system be faster than the old system, if we skip PIR/IMCC?
00:22 bacek_at_work Unlikely. Parrot isn't fastest bird. And we fly on half wings.
00:26 whiteknight we need soooo much optimization
00:29 bacek_at_work indeed
00:30 bacek_at_work self-hosted pirate with even few enabled optimizations will be good start.
00:33 whiteknight yeah
00:34 whiteknight We need to optimize Parrot so PIRATE runs faster
00:37 bacek_at_work Most of it is algorithmic nqp optimizations...
00:51 whiteknight probably true
01:05 whiteknight okay, this kakapo error has eaten enough time today. I'm going to bed
01:05 whiteknight goodnight
01:06 abqar_ joined #parrot
01:09 patspam joined #parrot
01:15 Coke joined #parrot
01:27 dalek partcl-nqp: 74889b4 | mdiep++ |  (2 files):
01:27 dalek partcl-nqp: Fix the subroutine reference for [lsort -integer], passing 3 TODO tests
01:27 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/74889b4f710e3041a08bceefebab561a20a5ab49
01:27 sorear bacek_at_work: are you aware of the plan to move POST out of Parrot and into NQP-rx?
01:31 bacek_at_work sorear, nope... When it was decided?
01:31 sorear I don't know
01:32 bacek_at_work I don't know either...
01:32 bacek_at_work afk # meetings
01:32 sorear pmichaud told me, but I don't remember enough details to do a loggrep
01:33 dalek partcl-nqp: 770cdcb | mdiep++ |  (2 files):
01:33 dalek partcl-nqp: Implement [lsort -real]
01:33 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/770cdcb5d059c9c8d560912906bd1ee346f2f0d1
01:37 atrodo So, who or where do I report NQP bugs?
01:41 sorear github issue tracker
01:41 sorear perl6/nqp-rx
01:41 sorear alternatively pmichaud if he's on
01:52 atrodo cool.  I see if I can catch him tomorrow then.
01:56 dalek partcl-nqp: 66c822f | Coke++ | docs/overview.pod:
01:56 dalek partcl-nqp: slight improvement to docs.
01:56 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/66c822f7dbe367bb054b2d2fd7fa1caee63c87ba
01:56 dalek partcl-nqp: 9406010 | Coke++ |  (2 files):
01:56 dalek partcl-nqp: [array get] returns '' if called on a non-array.
01:56 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/9406010cf076dbda0f595314e11735df07014217
01:56 dalek partcl-nqp: e3a399e | Coke++ |  (2 files):
01:56 dalek partcl-nqp: handle last edge cases of [array names]
01:56 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/e3a399eccff8b7780bc89edf52c7c34b42a4be11
01:56 dalek partcl-nqp: 297e2ca | Coke++ |  (3 files):
01:56 dalek partcl-nqp: Add ^ and $ support to ARE
01:56 dalek partcl-nqp: (bring t/cmd_array to 100%)
01:56 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/297e2ca019eaadbc13536550c52f367fe7eef54e
01:56 dalek partcl-nqp: dd7abe2 | Coke++ | src/ (5 files):
01:56 dalek partcl-nqp: use more idiomatic nqp
01:56 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/dd7abe2810bc6e84bfde8b6dcc5e0c11bf085c9a
01:56 dalek partcl-nqp: dabdbaa | Coke++ | src/Partcl/commands/main.pm:
01:56 dalek partcl-nqp: make [puts] lookup channel ids instead of hardcoding them.
01:56 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/dabdbaa04d8ce4f9a18ba4f886625117c7daf81e
01:56 dalek partcl-nqp: ff91a97 | Coke++ |  (2 files):
01:56 dalek partcl-nqp: flesh out [gets]; handle arbitrary channels & varName param.
01:56 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/ff91a971a79a82a4824f8a016b08924087969676
01:56 dalek partcl-nqp: 8373f83 | Coke++ |  (2 files):
01:56 dalek partcl-nqp: Merge branch 'master' of github.com:partcl/partcl-nqp
01:56 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/8373f838a3259f0fe9204a44f8eb2bf4cabaa99c
01:56 dalek partcl-nqp: 2086b00 | Coke++ |  (2 files):
01:56 dalek partcl-nqp: Merge branch 'master' of github.com:partcl/partcl-nqp
01:56 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/2086b002c6a79a63b76372fb405fa6977530c0bb
01:56 sorear karma Coke
01:56 purl coke has karma of 4600
02:01 kid51 joined #parrot
02:16 kid51 msg Util Thanks for feedback on branch; will apply your suggestions Monday.
02:16 purl Message for util stored.
02:33 tcurtis joined #parrot
02:36 ash_ joined #parrot
02:41 dalek parrot: r47892 | jkeenan++ | branches/cfunctionsdocs/config/gen/platform (3 files):
02:41 dalek parrot: Documentation corrections suggested by Util++.
02:41 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47892/
02:57 Andy joined #parrot
02:57 dalek parrot: r47893 | petdance++ | trunk/t/tools/pbc_disassemble.t:
02:57 dalek parrot: remove unused IO::File use
02:57 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47893/
02:58 theory joined #parrot
03:04 dalek rakudo: 9993ee9 | pmichaud++ | src/builtins/Parcel.pir:
03:04 dalek rakudo: Refactor Parcel assignment to be lazier, use &infix:<=>.  Fixes RT #75950.
03:04 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/9​993ee94f21def7ddc198602b43202c494185b61
03:07 janus joined #parrot
03:09 dalek partcl-nqp: 5380b9b | Coke++ |  (3 files):
03:09 dalek partcl-nqp: stub out [binary] enough to run t/binary.t
03:09 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/5380b9b20eeb6fcc778a039c7512352a4c276e43
03:35 kthakore howdy hai
03:36 TiMBuS joined #parrot
03:42 LoganLK joined #parrot
03:49 dalek partcl-nqp: ab9b0d2 | Coke++ |  (3 files):
03:49 dalek partcl-nqp: Stub a little more [info] so we can run the test file to completion.
03:49 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/ab9b0d2cf16a04478c35db30d2af3e7562db54bd
03:50 tcurtis Hi, kthakore.
03:59 Austin joined #parrot
04:01 Austin So parrot 25 won't build for me at all - out of memory in pmc2c.pl even with 1gig of assigned ram.
04:01 Austin How badly did pmc2c get changed recently?
04:04 Coke Austin: what is "parrot 25"?
04:04 Austin The release 2_5_0 tag
04:04 Coke and welcome back!
04:04 purl it's good to be home again.
04:04 Austin Thanks.
04:04 Coke I don't think pmc2c has changed much at all.
04:05 Coke it was ops2c that got the big change.
04:05 Austin Now that the US is out of the world cup, I guess I can do some parrot...
04:05 Austin :)
04:05 Austin Well, that's frabjous.
04:15 Coke you can always just hack on partcl-nqp again!
04:15 Austin No I can't - I can't get parrot to build. :(
04:15 Austin I wonder if this is a path issue again... (installed vs built)
04:29 eternaleye joined #parrot
04:42 cotto What's all this about moving POST into nqp?
04:42 cotto I guess it makes sense if POST is produced by nqp-based compilers.
04:43 cotto wb Austin.  You may be glad to know that it's my job to work out a new more user-friendly deprecation policy.
04:54 NotFound And developer-friendly, I hope.
04:56 cotto A little less than the current one.  The basic idea is that no deprecation gets committed until there's a page on the wiki that describes how users can upgrade their code to accommodate it.
04:57 NotFound Looks a lot more friendly to me.
04:57 cotto by "developer" I mean "core Parrot hacker".  I consider anyone else to be a user.
04:57 cotto You get to wear both hats.
04:58 NotFound I consider myself a core parrot and I hate all last month deprecations.
04:59 NotFound Just last month because I don't want to make more memory right now ;)
05:01 plobsing wait, each deprecation item gets its own wiki page? that seems like only a slight improvement. What would be really good is a compendum of all deprecation changes between releases.
05:01 cotto not quite
05:02 cotto each version transition gets its own wiki page
05:03 plobsing ok. does that page contain a list of change descriptions or a list of change wiki pages?
05:05 cotto That's something I'll figure out.  The index page would probably have a short summary of all deprecations and a link to a page with more thorough descriptions.
05:12 fperrad joined #parrot
05:29 dalek rakudo: aea3bbc | pmichaud++ | src/Perl6/ (2 files):
05:29 dalek rakudo: Add statement_mod_cond:sym<when>.  Resolves RT #75916.
05:29 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/a​ea3bbcf9886acf4c8ba9fb233c908c27200bc88
05:32 cotto pmichaud, ping
05:58 dalek parrot: r47894 | NotFound++ | trunk/t/pmc/filehandle.t:
05:58 dalek parrot: test FileHandle is_closed
05:58 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47894/
06:26 dalek rakudo: 05684c0 | pmichaud++ | src/Perl6/Actions.pm:
06:26 dalek rakudo: Change handling of return value in empty statementlist.  Partially resolves RT
06:26 purl dalek: that doesn't look right
06:26 dalek rakudo: #75700.
06:26 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/0​5684c07ed4fbb9a44be98d213b06e0d92a41186
06:53 cotto I'd appreciate eyeballs on http://trac.parrot.org/parr​ot/wiki/ParrotDeprecations .  It's quite incomplete, but I'd like to know if the format is ok or if there's something I'm missing.
06:56 baest_ joined #parrot
07:03 moritz looks nice
07:05 dalek tracwiki: v1 | cotto++ | ParrotDeprecationsFor2.6
07:05 dalek tracwiki: initial version with a couple examples
07:05 dalek tracwiki: http://trac.parrot.org/parrot/wiki/ParrotDe​precationsFor2.6?version=1&amp;action=diff
07:05 dalek tracwiki: v1 | cotto++ | ParrotDeprecations
07:05 dalek tracwiki: initial version, appalingly incomplete
07:05 dalek tracwiki: http://trac.parrot.org/parrot/wiki/Parro​tDeprecations?version=1&amp;action=diff
07:05 dalek tracwiki: v2 | cotto++ | ParrotDeprecations
07:05 dalek tracwiki: make link more prominent
07:05 dalek tracwiki: http://trac.parrot.org/parrot/wiki/Parro​tDeprecations?version=2&amp;action=diff
07:38 dalek tracwiki: v3 | cotto++ | ParrotDeprecations
07:38 dalek tracwiki: http://trac.parrot.org/parrot/wiki/Parro​tDeprecations?version=3&amp;action=diff
07:38 dalek tracwiki: v1 | chromatic++ | LinearScanRegisterAllocation
07:38 dalek tracwiki: initial description of algorithm
07:38 dalek tracwiki: http://trac.parrot.org/parrot/wiki/LinearScan​RegisterAllocation?version=1&amp;action=diff
07:52 eternaleye joined #parrot
08:28 dalek tracwiki: v3 | cotto++ | HowToDeprecate
08:28 dalek tracwiki: rough outline, needs fleshing out
08:28 dalek tracwiki: http://trac.parrot.org/parrot/wiki/How​ToDeprecate?version=3&amp;action=diff
08:30 clinton joined #parrot
08:45 eternaleye joined #parrot
08:52 moritz tcurtis: Tree::Pattern::Match stores the original node in $!from...
08:52 moritz tcurtis: the Regex matches store the matching *position* in from
08:52 moritz tcurtis: and the matches string in $!orig
08:52 moritz tcurtis: it would be less confusing if you adapted the same terminology
08:58 dalek parrot: r47895 | plobsing++ | branches/dynop_mapping (3 files):
08:58 dalek parrot: fixup op_func_table hijacking in event handling
08:58 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47895/
08:59 tcurtis moritz: So, $!orig would be preferable for storing the node that matched?
08:59 moritz tcurtis: yes
09:00 moritz actually only the name of the accessor counts :-)
09:00 nopaste "moritz" at 192.168.1.3 pasted "I want to search for assignment ops with known "returns" type as second argument - reasonable?" (15 lines) at http://nopaste.snit.ch/21625
09:01 moritz tcurtis: does the code in the nopaste look sane?
09:03 tcurtis moritz: yes. Also, is there any other information about the match that you think might be useful to provide accessors for other than what node matched and whether the match succeeded?
09:04 moritz tcurtis: I don't know, maybe the a pointer to the parent node, if any?
09:04 moritz I don't think I need it for my purposes
09:04 moritz btw how do you debug PAST trees? with _dumper() ?
09:07 moritz I found that _dumper  prints to STDOUT by default, so the dumper output ends up in the .pir files, because rakudo's Makefile uses > shell redirection :/
09:09 bacek moritz, check http://github.com/bacek/pir/​blob/master/t/test_post.pir for "workaround idea"
09:10 bacek Starting from line 25
09:10 moritz oh, setstdout
09:10 purl setstdout is in src/io/io.ops
09:10 * moritz bookmarks
09:10 moritz bacek++ # thanks
09:10 bacek moritz, you welcome :)
09:16 tcurtis Data::Dumper is what I usually use, as well as --target=my_optimization_method_name, and often liberal  dose of other output statements. Downside being that the output does interfere with actually compiling the code. So far, all of the optimizations I've worked on have been simple enough that looking at the optimized PAST is easier than looking at the generated PIR and running it, though, so it hasn't been a big problem for me.
09:19 nopaste "moritz" at 192.168.1.3 pasted "dump to STDERR, inspired by bacek++" (12 lines) at http://nopaste.snit.ch/21626
09:19 moritz that's what I use now
09:19 * moritz -> gone
09:25 tcurtis I'm going to bed now(past 4 AM for me now). moritz, as always, if you have any more suggestions or questions or problems or whatever, let me know. I'll add a .orig accessor tomorrow(probably will keep the .from as an alias for now at least, since what documentation is available still mentions it, and someone else might be using Tree::Pattern without my knowing and thus might be aware of the change). bacek, I'm probably going to alternate between writing tes
09:25 tcurtis the newly generalized stuff and working on that optimization for PIRATE.
09:59 gbacon joined #parrot
10:05 cygx joined #parrot
10:12 mikehh msg whiteknight, I ran splint against src/hash.c in hash_allocator, there are some real nasties according to it including: src/hash.c:826:10: Variable old_bi used after being released
10:12 purl Sorry, I've never seen whiteknight, before.
10:15 mikehh msg whiteknight - I ran splint against src/hash.c in hash_allocator, there are some real nasties according to it including: src/hash.c:826:10: Variable old_bi used after being released
10:15 purl Message for whiteknight stored.
10:15 cygx what's the status of asynchronous sockets? do they work as advertised in socket.pmc?
10:20 mikehh cygx: I doubt it - we certainly don't have much in the way of tests for it
10:22 mmcleric joined #parrot
10:28 cygx mikehh: ok, thanks; I'll give it a try when I have some more free time later this week and see what I'll find
10:30 bacek cygx, they are not async. I know just because I've implemented them. And was too lazy/busy to fully implement AIO...
10:33 cygx bacek: any chance for async sockets before R*?
10:33 bacek cygx, unlikely. It's a big chunk of work.
10:33 bacek Especially for cross-platform AIO.
10:35 sorear cygx: just use blizkost already
10:39 cygx sorear: that's the most likely outcome; are you interested in writing some nice Perl6 wrappers for Perl5 async sockets? ;)
10:40 dalek tracwiki: v63 | sorear++ | ParrotQuotes
10:40 dalek tracwiki: renaming POST with NFG
10:40 dalek tracwiki: http://trac.parrot.org/parrot/wiki/Pa​rrotQuotes?version=63&amp;action=diff
10:41 sorear cygx: not at this time
10:51 lucian joined #parrot
11:06 moritz runtime/parrot/library/postgres.pir doesn't declare a .HLL
11:06 moritz is that intentional? or an accidental omission?
11:25 dalek parrot: r47896 | chromatic++ | branches/hash_allocator/src/hash.c:
11:25 dalek parrot: [src] Improved hash_value_to_number();
11:25 dalek parrot: As value can be NULL, it's important not to crash by trying to dereference NULL
11:25 dalek parrot: as a STRING or a PMC.  They numify to 0.0 now; we can throw an exception as
11:25 dalek parrot: necessary.
11:25 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47896/
11:25 dalek parrot: r47897 | chromatic++ | branches/hash_allocator/src/hash.c:
11:25 dalek parrot: [hash] Fixed uses of PARROT_DATA_TYPE enum.
11:25 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47897/
11:25 dalek parrot: r47898 | chromatic++ | branches/hash_allocator/src/hash.c:
11:25 dalek parrot: [hash] Tidied code and fixed compiler warnings.
11:25 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47898/
11:25 dalek parrot: r47899 | moritz++ | trunk/runtime/parrot/library/Pg.pir:
11:25 dalek parrot: [Pg] update documentation; connectdb is not a class method these days (and not tested as being one)
11:25 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47899/
11:33 bacek moritz, ping
11:33 moritz bacek: pong
11:34 bacek moritz, please reopen TT#1692 (pg). We _do_ want tests for everything shipped with Parrot.
11:35 moritz done.
11:35 bacek thanks!
11:37 dalek TT #1692 created by moritz++: postgres libraries don't work from foreign HLLs
11:37 dalek TT #1692: http://trac.parrot.org/parrot/ticket/1692
11:37 dalek TT #1692 closed by moritz++: postgres libraries don't work from foreign HLLs
11:37 dalek TT #1692: http://trac.parrot.org/parrot/ticket/1692
11:37 dalek TT #1692 reopened by moritz++: postgres libraries don't work from foreign HLLs
11:37 dalek TT #1692: http://trac.parrot.org/parrot/ticket/1692
11:38 moritz bacek: would adding a .HLL 'pg_test' to the start of the test file be enough?
11:38 moritz bacek: then all tests are run in a different HLL, and act as a test for TT#1692
11:39 bacek moritz, I have no idea. But I would like to have same policy for Parrot as Rakudo have (from testing perspective)
11:39 nopaste joined #parrot
11:41 moritz understandable
11:42 dalek parrot: r47900 | moritz++ | trunk/runtime/parrot/library/Pg.pir:
11:42 dalek parrot: [Pg] be in the parrot HLL
11:42 dalek parrot: Loading it from another HLL works now, didn't work before. Fixes TT#1692.
11:42 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47900/
11:55 ruoso joined #parrot
11:59 cygx I'm currently building parrot + rakudo on cygwin
11:59 cygx one minor problem: make install didn't install cygparrot*.dll, ie the rakudo build couldn't find it, so I moved it to usr/local/bin manually
12:00 moritz cygx: please submit a ticket for that
12:00 moritz cygx: by sending a mail to rakudobug@perl.org
12:00 cygx I now get another failure, though: cannot find -lparrot ; make: *** [src/pmc/perl6_group.dll] Error 1
12:01 cygx moritz: wouldn't that be a parrot bug?
12:02 moritz cygx: if it's parrot's 'make install' then yes
12:03 cygx moritz: yes, sorry I wasn't clear - parrot's make install works, but doesn't install a file necessary for building rakudo via --parrot-config=...
12:03 moritz cygx: then a parrot bug, yes
12:11 awhitworth joined #parrot
12:14 whiteknight Good morning, #parrot
12:16 bacek Good morning, awhitworth^W whiteknight
12:23 ruoso joined #parrot
12:26 dalek TT #1693 created by cygx++: `make install` doesn't install all files necessary to build Rakudo on ...
12:26 dalek TT #1693: http://trac.parrot.org/parrot/ticket/1693
12:27 whiteknight hello bacek, how are you?
12:31 ruoso joined #parrot
12:34 bacek whiteknight, I'm still aliv^W operational.
12:40 whiteknight rough weekend?
12:43 whiteknight joined #parrot
12:44 bacek whiteknight, rough Monday actually.
12:46 whiteknight oh. Mondays are the worst
12:46 whiteknight I just started mine. Not looking forward to it
12:46 mikehh hi there, whiteknight
12:48 whiteknight hello mikehh
12:48 whiteknight I got your messages.
12:49 mikehh whiteknight: yeah, I ebentually managed to install splint and get it running, it reports quite a few problems
12:50 mikehh eventually
12:50 purl it has been said that eventually is a big word.
12:50 whiteknight purl forget eventually
12:50 purl whiteknight: I forgot eventually
12:50 mikehh whiteknight: do you have a copy of it
12:50 * Coke attempts to be a bacek-style robot on partcl-nqp
12:50 whiteknight mikehh: splint? no
12:51 mikehh or any lint for that matter?
12:53 arnsholt whiteknight: I've found a quick fix for the next thing you found in NQP
12:54 arnsholt But I'm pretty sure it's not a very good fix =)
12:56 whiteknight arnsholt: yeah, I saw your comment
12:56 whiteknight I only noticed because Kakapo had a "next()" built-in to emulate that funcitonality before NQP-RX added it, so when I updated kakapo, all it's uses of next() now create evil failures
12:57 whiteknight mikehh: no lint either. I used to have it
13:02 nopaste "mikehh" at 192.168.1.3 pasted "splint output for hash_allocator for src/hash.c at r47898" (409 lines) at http://nopaste.snit.ch/21630
13:03 mikehh whiteknight: fun reading :-}
13:07 mikehh btw it reduced from 146 to 131 warnings after chromatic's patches
13:15 Coke hey, anyone want to write some regexp tests... (in tcl?)
13:16 Coke almost no actual tcl knowledge required. =-)
13:16 mikehh Coke: :-}
13:17 whiteknight chromatic patched the branch?
13:18 mmcleric joined #parrot
13:18 mikehh yeah, r48986-9
13:19 mikehh still fails though
13:19 mikehh whiteknight: I tried some changes, but it still failed to work
13:22 plobsing joined #parrot
13:23 mikehh sorry r48989 was morritz, r47986-8
13:25 mikehh too many r's, keep forgetting to use completion :-{
13:25 whiteknight I'm going to look at it again in a little bit. I'm taking one last look at kakapo before I give up in disgust
13:25 arnsholt whiteknight: Well, the next() thing should be mostly a matter of regex search and replace
13:26 Coke anyone using nqprx who has done their own HLL .annotations for error handling  on top?
13:28 arnsholt Rakudo perhaps?
13:32 moritz yes, rakudo does it
13:32 moritz http://github.com/rakudo/rakudo/blob/​master/src/Perl6/BacktracePrinter.pm for example
13:34 Coke moritz: \o/ rakudo did something I can steal. :P
13:34 Coke er, :)
13:36 JimmyZ joined #parrot
13:36 Coke moritz++ ; that definitely looks promising.
13:36 Coke must not look at it until after $DAYJOB.
13:37 moritz Coke: maybe it would be worth to generalize, and move into nqp
13:44 Coke moritz: maybe, but tcl's backtraces are unique, of course.
13:46 jnthn Coke: You implement a method 'backtrace' in your Compiler object (your subclass of HLL::Compiler)
13:46 jnthn Coke: Rakudo's one just calls the thingy moritz++ pointed to, since I didn't want to write something like that in PIR
13:51 Coke jnthn: just adding "sub backtrace" to the class doesn't seem to get it invoked when you error out.
13:51 jnthn Needs to be method, not sub
13:51 kid51 joined #parrot
13:52 Coke shiny!
13:52 cygx left #parrot
13:56 Coke jnthn++
13:56 bubaflub joined #parrot
13:57 Coke now I just need to figure out where to add in my own annotations, and how to ignore the PIR ones.
13:57 Coke ... and completely reformat the backtrace.
13:57 Coke but this would have been MUCH more difficult without pct. \o/
14:01 jnthn Coke: How are you doing code gen?
14:01 jnthn PCT?
14:01 purl hmmm... PCT is the Parrot Compiler Toolkit
14:01 jnthn stfu bot
14:01 Coke jnthn: with partcl-nqp, using nqp-rx and pct, yes.
14:02 jnthn Coke: In that case, I think provided you are setting :node($/) in your Actions.pm, then the .annotate 'line', 42 ones will already be being set for you.
14:02 Andy joined #parrot
14:05 kthakore jnthn: yeah that is it! Abuse that guy!
14:05 mmcleric_ joined #parrot
14:06 PacoLinux joined #parrot
14:06 mmcleric joined #parrot
14:08 nopaste "coke" at 192.168.1.3 pasted "tcl backtraces" (17 lines) at http://nopaste.snit.ch/21634
14:11 mikehh All tests PASS (pre/post-config, make corevm/make coretest, smoke (#34621), fulltest) at r47900 - Ubuntu 10.04 amd64 (g++ with --optimize)
14:12 dalek parrot: r47901 | plobsing++ | branches/dynop_mapping/t/native_pbc (6 files):
14:12 dalek parrot: native_pbc platform updates
14:12 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47901/
14:17 mikehh pir/PIRATE (feeef08) build ok/ test ok
14:23 mikehh partcl-nqp (ab9b0d2) builds with parrot r47900 - test PASS - Ubuntu 10.04 amd64 (g++ with --optimize)
14:51 dalek rakudo: c18d372 | pmichaud++ | src/binder/bind.c:
14:51 dalek rakudo: Fix @a is copy (and %h is copy) when passed a scalar array or hash. Fixes RT
14:51 dalek rakudo: #76242 (masak++).
14:51 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/c​18d37293e143522e2c2f3870ee0e9068b77e5a4
14:58 patspam joined #parrot
15:03 fperrad joined #parrot
15:04 mikehh rakudo (05684c0) builds on parrot r47900 - make test PASS, spectest_smolder -> #34622 (pugs r31481) PASS - Ubuntu 10.04 amd64 (g++ with --optimize)
15:04 mikehh 31 TODO PASSes in 8 files
15:11 lucian_ joined #parrot
15:34 atrodo Some time ago, when some of the core ops became dynops, there was an issue with changes to the op numbers.  How was that finally solved?
15:38 JimmyZ removed ops.num?
15:38 JimmyZ IIRC
15:43 Coke I don't think it was solved.
15:44 Coke if you dynload ops in one order in a pir library, save it out to PBC, then in your main pir, load the libs in a different order , then try to run your pbc, I think it still goes boom.
15:44 Coke which I'd really like to get solved before 2.6
15:48 JimmyZ left #parrot
15:48 davidfetter joined #parrot
15:48 davidfetter hello
16:04 Chandon joined #parrot
16:04 Chandon In ops, does :check_event actually do anything?
16:06 cotto_work good mroning
16:06 whiteknight Chandon: I thought it did
16:06 cotto_work istr that too
16:07 Chandon whiteknight: I'm pretty sure that local branches aren't calling check_events in scheduler.c.
16:07 whiteknight hmmm
16:08 Chandon What would :check_events actually be doing. Inserting code into the op definition in core_ops.c?
16:08 Chandon Err, :check_event
16:12 theory joined #parrot
16:13 whiteknight I think so
16:14 whiteknight can you name an op that has :check_events?
16:15 Chandon Only local_branch and end in core.ops.
16:15 ash_ joined #parrot
16:16 whiteknight hmm...that's interesting. Doesn't look like those call into the scheduler
16:16 whiteknight I could have sworn they did
16:16 Chandon As far as I can tell, the only thing that actually calls into the scheduler is the sleep op.
16:17 Chandon And that does it because sleep is implemented in the scheduler.
16:17 whiteknight There is a check_events op
16:17 whiteknight Maybe :check_events tells IMCC to insert the check_events op directly into the PBC
16:18 whiteknight have a debugger handy? Set a break point in Parrot_check_events and Parrot_check_events__, and see when (if ever) they get called
16:18 ash_ does parrot have a select? (the C one for synchronous I/O multiplexing)
16:19 Chandon I've got print statements in the two functions that should get called in scheduler.c. They definitely don't get called on local_branch.
16:20 whiteknight ash_: No, not yet
16:20 whiteknight Chandon: but they do get called?
16:20 ash_ alright, just wondering
16:21 whiteknight ash_: Plenty of plans for AIO with things like select/poll, but nothing implemented yet
16:21 ash_ yeah, someone was asking in #perl6 so i was just curious if any of it was implemented yet and maybe just not linked in rakudo
16:23 whiteknight cotto_work: where does the source code for opsc live?
16:23 cotto_work compilers/opsc
16:23 whiteknight ah, I was looking in runtime/
16:24 Chandon whiteknight: Parrot_cx_check_tasks never (except apparently by the check_tasks opcode); Parrot_cx_schedule_tasks once per run of Parrot, but then not again on my test cases.
16:24 whiteknight hmmm....
16:24 whiteknight we have tests for things like tasks and timers, so I know that they do work somehow
16:25 Chandon The timers test works by calling sleep explicitly, which will call Parrot_cx_schedule_tasks.
16:25 whiteknight ha. So it's an example of a bad test
16:27 whiteknight so we need to make check_events do what you need, if it doesn't yet
16:29 Chandon Yes. How do we do that?
16:30 whiteknight Step 1: Identify exactly what you need for your project
16:30 whiteknight Step 2: We figure out what the hell the software thinks it's doing currently
16:30 whiteknight Step 3: ???
16:30 whiteknight Step 4: Profit!!
16:32 whiteknight have you seen docs/dev/events.pod?
16:32 whiteknight (that just turned up in a search)(
16:33 whiteknight be back in a bit, going to lunch
16:40 hercynium joined #parrot
16:43 tcurtis joined #parrot
16:43 Coke does Compiler::evalfiles() add 'file' annotations by default?
16:46 Coke hurm. where is the default parrot backtrace code?
16:46 Coke that will help me figure out how it's getting any file names at all.
16:46 contingencyplan joined #parrot
16:50 jnthn Coke: It doesn't
16:50 jnthn Coke: But see Actions.pm in Rakudo
16:50 jnthn grep for iirc $?FILE
16:53 Coke jnthn: how do you skip levels that are not perl6?
16:54 Coke is that the p6type check?
17:01 fperrad joined #parrot
17:04 jnthn Coke: I don't as such - that is actually telling me what is just a nested block and what is not
17:04 jnthn It actually skips a bit too much
17:05 bkuhn joined #parrot
17:07 whiteknight Chandon: There is lots of interesting-looking code in src/runcore/main.c. Looks like it loads information about check_events opcode into a table, but I haven't traced through where that table is used
17:08 Chandon whiteknight: For the moment, I've just cheated and added explicit calls to Parrot_cx_check_tasks to a couple of opcode definitions.
17:08 whiteknight okay, that should work too
17:10 whiteknight hah, looks like evc_func_table is populated with information about check_events, but is never used anywhere
17:10 cotto_work welcome to Parrot
17:10 cotto_work ;)
17:10 cotto_work \
17:12 whiteknight Chandon: Okay, that's good for now. Going forward I think we're going to want a better solution
17:12 whiteknight we need to modify opsc to output the function calls you need in response to the :check_events flag. Then we need to add that flag to more ops
17:12 whiteknight just end and local_branch are no good
17:12 dalek parrot: r47902 | tcurtis++ | branches/gsoc_past_optimization/runtime​/parrot/library/Tree/Pattern/Match.nqp:
17:12 dalek parrot: Change .from to .orig for greater similarity with Perl 6 regexes. Keep .from as an alias for now.
17:12 purl dalek: that doesn't look right
17:12 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47902/
17:16 bubaflub joined #parrot
17:26 whiteknight pmichaud: ping
17:26 cotto_work ooh.  me too.
17:27 cotto_work seen pmichaud
17:27 purl pmichaud was last seen on #parrot 1 days, 1 hours, 12 minutes and 35 seconds ago, saying: whiteknight: alas, I have to run off for ~30 mins also  [Jun 27 16:14:44 2010]
17:36 Chandon whiteknight: What's the case where local_branch isn't good enough?
17:40 cotto_work Chandon, the discussion on python's "newthreading" proof of concept code at http://lwn.net/Articles/393822/ may be of interest to you.
17:42 Coke joined #parrot
17:45 dalek parrot: r47903 | khairul++ | branches/gsoc_instrument (3 files):
17:45 dalek parrot: Completed stubbing gc functions.
17:45 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47903/
17:47 cotto_work msg khairul Instead of a huge if/else if block, you can store pointers in a hash and use that.
17:47 purl Message for khairul stored.
17:51 cotto_work msg khairul You can use parrot_new_pointer_hash to get a hash that maps between strings and C pointers.
17:51 purl Message for khairul stored.
17:55 cotto_work whiteknight, PIRATE adds some methods to core PMCs.
17:56 cotto_work see the bottom of http://github.com/bacek/pir/blob/master/pir.pir
17:57 cotto_work Is that what your post to parrot-dev is talking about?
18:00 whiteknight cotto_work: Kakapo does too, but does it in a much larger-scale  and does it from NQP
18:00 whiteknight but that's only a small bit of what it's about. In short, what I really want is the ability to easily access the list of methods from the namespace
18:02 whiteknight what I really really want is just to figure out what was the motivation behind the design decision so that when I go in to make changes, I don't break something I don't understand
18:02 kthakore anyone got a simple ticket for a newb?
18:03 dalek parrot: r47904 | tcurtis++ | branches/gsoc_past_optimization/runt​ime/parrot/library/Tree/Pattern.nqp:
18:03 dalek parrot: Change a .from call to .orig.
18:03 purl dalek: that doesn't look right
18:03 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47904/
18:03 tcurtis whiteknight: is the "from the namespace" part necessarily required?
18:06 whiteknight tcurtis: what do you mean? The methods are in the namespace PMC
18:12 tcurtis whiteknight: So, you have a namespace PMC and you're trying to get at its methods? In that case, nevermind.
18:14 tcurtis whiteknight: I thought you were talking about something that could be done with "pir::get_class__PP(ResizablePMCArray).methods", for example(although I'm not sure how to do it in a way that works on both P6metaclass classes and normal Parrot classes without explicitly checking which the class is and acting appropriately).
18:18 tcurtis whiteknight: by the way, http://github.com/perl6/nqp-rx/issues/#issue/4 is confusing. The example of a generated sub name that is hellish for debugging and the example of what would be ideal appear to be the same(although there's probably some underscores or such accidentally being interpreted as markdown, given that most of the middle of it is randomly italicized).
18:21 whiteknight The current naming scheme of nested blocks in NQP is just "_block1234"
18:21 whiteknight multiple Parrot Subs could create 1 NQP sub
18:22 whiteknight so if multiple Parrot Subs are part of a single NQP sub, they should be named similarly
18:22 whiteknight <SubName>_block<ID>
18:22 particle your examples are still the same in that ticket
18:22 tcurtis The issue doesn't display like that, though.
18:22 whiteknight oh. Maybe github filtered out the <>
18:23 particle would you rather see block naming, or annotations, or both?
18:23 whiteknight fixedish
18:26 dalek winxed: r524 | NotFound++ | trunk/winxedst1.winxed:
18:26 dalek winxed: fix +, - and * operators for 'val op val' case
18:26 dalek winxed: review: http://code.google.com/p/w​inxed/source/detail?r=524
18:38 tcurtis joined #parrot
18:38 ash_ joined #parrot
18:52 dalek parrot: r47905 | tcurtis++ | branches/gsoc_past_optimizat​ion/t/library/pastpattern.t:
18:52 dalek parrot: Add tests for .orig, and replace .from with .orig where it's not actually testing .from.
18:52 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47905/
18:54 Coke whiteknight: do you care about those block names because of diagnostic output?
18:54 whiteknight Coke: yeah, diagnostics and debugging
18:54 Coke (in which case, you can override backtrace to get more HLL friendly output)
18:55 whiteknight if you look at issue #5 I added, There was a problem I found in generated PIR code
18:55 Coke as I am working on today for partcl. (cribbing from rakudo)
18:55 whiteknight and that's a huge pain to track down in that output soup
18:56 Coke I haven'd had that trouble in partcl - I search for the name of the sub, which is right next to the subid, which brings me to the code I need.
18:57 Coke So, it hasn't been a pain point for me yet.
18:57 whiteknight Sure, it's not impossible. But a little help would always be nice
18:57 whiteknight it would especially make things like back traces much nicer to understand
19:00 Coke ah, I take it as an encouragement to actually customize your backtrace. =-)
19:00 Coke but yah, nicer defaults ++
19:02 whiteknight I've never been a huge fan of the "this thing is so bad that I feel forced to fix it" encouragement
19:03 whiteknight I find it often leads to "this thing is so bad that I'm going to abandon it and work on something else"
19:14 atrodo whiteknight> That's what I do
19:15 kj joined #parrot
19:16 NotFound That's why PCC got unfixed so much time X-)
19:21 cotto_work tcurtis, good blog post.  It's nice to see what you're up to and even nicer that you're planning on some PIRATE hacking.
19:28 cotto_work I fixed up a bit of code that needed html escaping.
19:29 ash_ whiteknight: do you think it would be okay if tomorrow during the parrot sketch i asked if I could work on the llvm runcore for the remainder of my gsoc?
19:30 Coke whiteknight: it's a question of degree, I think. You're not going to make it perfect for everyone, you can only have a sane default. the default is sane enough for me. YMMV.
19:30 Coke or at least, i have enough other crap I'm trying to fix that I hadn't noticed so much.
19:31 simcop238 joined #parrot
19:32 whiteknight ash_: did you talk to plobsing about it?
19:32 tcurtis cotto_work: thanks.
19:33 whiteknight Coke: you're right. I'm not trying to make it perfect. But appending the name I give to the sub to all the parts of that sub is a very very small thing to make it easier for everybody
19:33 whiteknight it's not like those subs don't have names
19:33 whiteknight most of them, anyway
19:33 purl i heard most of them was because of the stupid 01_request failure
19:34 ash_ he said its alright, he just wants me to make sure the libffi stuff is rock solid before moving on
19:34 whiteknight is the libffi stuff rock-solid?
19:34 whiteknight (we may want to start merging that to trunk if so)
19:35 whiteknight at the very least, other work -> new branch
19:36 ash_ not 100% rock solid yet (a few failing tests still) but i am working on it, i just wanted to make sure others knew about my project
19:38 tcurtis If I want to unconditionally jump to a label, should I use branch or jump?
19:38 whiteknight jump, I think
19:39 * tcurtis answered his own question.
19:39 tcurtis Branch.
19:39 whiteknight what's the difference between the two?
19:39 particle branch === goto
19:40 whiteknight then what is jump?
19:41 tcurtis According to http://docs.parrot.org/parrot/la​test/html/src/ops/core.ops.html , branch is "Branch forward or backward by the amount in $1" and jump is "Jump to the address held in register $1."
19:41 particle and labels are offset from the branch
19:41 whiteknight oh, gotcha.
19:42 tcurtis particle: indeed, that's the thing I was uncertain about.
19:43 LoganLK joined #parrot
19:47 tcurtis bacek, cotto: about to push optimization of "if 1 < 2 goto some_label"(although it is suboptimal, replacing "if 2 < 1 goto some_label" with a noop instead of just removing the op altogether).
19:48 tcurtis correction: not optimization of that.
19:48 cotto_work do it naough
19:48 tcurtis the start of optimization of that: specifically, it only works for eq.
19:49 tcurtis on a related note, is there any way to do pir:: with a dynamically chosen op? Other than eval?
19:49 whiteknight I doubt it
19:52 tcurtis Does NQP have eval?
19:53 particle it doesn't have a runtime
19:53 particle you can call a pir compiler
19:54 cotto_work It doesn't have much of a runtime.
19:54 * whiteknight grumbles something about kakapo
19:54 cotto_work tcurtis: how do you want to use a runtime-chosen pir op?
19:55 tcurtis cotto_work: something like "pir::{$/<pirop>.orig)($/[0]<value>.orig, $/[1]<value>.orig)"
19:56 tcurtis So I don't have to write out each conditional op variant.
20:00 cotto_work that sounds very runtimey
20:01 NotFound tcurtis: that sounds like "How to compile at runtime?"
20:02 arnsholt tcurtis: Even if NQP doesn't provide it directly, you can get it through Parrot
20:02 arnsholt Get the compiler object and use that to evaluate arbitrary strings
20:03 NotFound arnsholt: that doesn't qualify as "Other than eval"
20:06 ambs joined #parrot
20:07 sorear opbots names
20:07 ambs Coke: finally I find you here, so I can thank you "personally" :)
20:07 sorear opbots trust arnsholt
20:07 slavorg Ok
20:07 slavorgn Ok
20:08 * tcurtis is going to attempt the NQP::Compiler.eval approach.
20:09 sorear opbots trust szabgab
20:09 slavorgn Ok
20:09 slavorg Ok
20:09 sorear opbots believe ttbot
20:09 slavorgn Ok
20:09 slavorg Ok
20:09 sorear opbots beleive ilbot2
20:09 sorear opbots believe ilbot2
20:09 slavorgn Ok
20:09 slavorg Ok
20:09 sorear opbots trust bubaflub
20:09 slavorgn Ok
20:09 slavorg Ok
20:10 sorear opbots trust atrodo
20:10 slavorgn Ok
20:10 slavorg Ok
20:10 tcurtis bacek: is there any particular reason why NQP isn't loaded in PIRATE?
20:11 atrodo Hurray!  I knew my day would come if I just waited long enough!
20:11 cotto_work clock?
20:11 purl cotto_work: LAX: Mon 1:11pm PDT / CHI: Mon 3:11pm CDT / NYC: Mon 4:11pm EDT / LON: Mon 9:11pm BST / BER: Mon 10:11pm CEST / IND: Tue 1:41am IST / TOK: Tue 5:11am JST / SYD: Tue 6:11am EST /
20:12 cotto_work bacek is in SYD.  He's probably not up yet.
20:12 tcurtis msg bacek is there any particular reason why NQP isn't loaded in PIRATE?
20:12 purl Message for bacek stored.
20:16 dalek TT #1694 created by NotFound++: load_bytecode semantic differs between .pir and .pbc loading
20:16 dalek TT #1694: http://trac.parrot.org/parrot/ticket/1694
20:24 GeJ Bonjour everyone.
20:26 tcurtis Hello, GeJ.
20:30 masak joined #parrot
20:31 masak what's the object returned from pir::open__PSS on this line http://github.com/rakudo/rakudo​/blob/master/src/core/IO.pm#L98 , and where can I read more about it?
20:31 dalek parrot: r47906 | darbelo++ | failed to fetch changeset:
20:31 dalek parrot: Sync with trunk.
20:32 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47906/
20:32 cotto_work masak, most likely a FileHandle
20:32 cotto_work src/pmc/filehandle.pmc in parrot
20:32 masak cotto_work: so, my ultimate goal is to use it to read binary, not-necessarily-utf8, data. is it at all possible?
20:34 masak there's an .encoding method four lines down. is there a value for that method which means 'no encoding, just raw bytes'? :)
20:34 * masak guesses "no"
20:34 cotto_work binary might be what you're after
20:35 masak \o/
20:35 masak so I just s/utf8/binary/ ?
20:35 cotto_work I'd guess that'd work.
20:35 * masak does a happy little dance
20:35 masak thank you, Parrot!
20:36 cotto_work parrot welcomes you
20:38 cotto_work I'm reasonably sure that that'll work.
20:38 GeJ Hi tcurtis
20:38 masak I'm about to try it.
20:38 GeJ Hej masak.
20:39 masak Hi GeJ! long time no see!
20:39 masak Australia, wasn't it?
20:39 GeJ Close, New Caledonia. 1 hour ahead of bacek.
20:40 masak le Caillou. nice.
20:40 GeJ been there?
20:40 masak no, only now reading the Wikipedia entry.
20:41 GeJ heh.
20:41 masak whoa -- http://en.wikipedia.org/wiki​/File:Hienghene_La_Poule.JPG
20:41 masak looks like a dreamy place.
20:41 atrodo Looks like an evil mad scientist's lair
20:42 GeJ If your not picky about Interwebs connectivity, it is.
20:42 GeJ atrodo: shhhhhh, It's a WIP.
20:42 * atrodo silence
20:44 GeJ Hum, under gcdebug runcore, regressions.t fails on FreeBSD 7 but not at home (FreeBSD 8).
20:44 GeJ what did I do wrong this time?
20:44 masak cotto_work: ok. preliminary results. using 'binary' works, but calling e.g. .slurp after that yields the same result as with 'utf8'. how do I get at the bytes?
20:45 cotto_work you could use a ByteBuffer
20:45 tcurtis cotto_work: support for {eq,ne,lt,le,gt,ge}_ic_ic_ic implemented in the post-optimizations branch. now just for the _num/_str variants.
20:46 masak cotto_work: I'd very much like that. how can I connect it with the filehandle?
20:46 NotFound binary isn't a encoding, is a charset.
20:47 darbelo Speaking of that, that distinction needs to die.
20:47 NotFound darbelo: fully agree
20:47 masak ok, but that's politics. I'm trying to program my way to a result. how do I do that?
20:48 cotto_work NotFound: you're correct.  I need to figure out a way to separate them in my head.
20:48 darbelo cotto_work: No, we need a way to make them not-separate in the code.
20:49 NotFound darbelo: but in the meantine we need to work with live parrots.
20:49 NotFound Or go to the some infamous pet shop X-)
20:49 cotto_work masak, create a bytebuffer, drop down to PIR and do bb = str to make sure that the set_string_native VTABLE function is called
20:50 cotto_work From there, the ByteBuffer will let you directly address the bytes
20:50 masak cotto_work: right. that's good.
20:51 masak cotto_work: and having the encoding set to 'binary' will prevent the .slurp from dying, yes?
20:51 masak cotto_work: see, the problem right now is that reading a non-utf8 file dies during the reading.
20:52 masak hm. 'binary' does seem to help against this. \o/
20:54 atrodo http://gist.github.com/450522 # I think this is NQP-rx bug, but haven't had a chance to file the bug report yet
20:54 cotto_work "fixed_8" might be the proper encoding.\
20:54 masak ok.
20:54 cotto_work That's my guess, at least.
20:54 masak that seems to work just as well.
20:55 bacek Good morning, humans
20:55 masak bacek! \o/
20:55 NotFound Looks like FileHandle uses only two encodings: "utf8" and whatever.
20:55 bacek masak, |o/
20:55 bacek tcurtis, why do you need "NQP" in pirate?
20:56 masak NotFound: I'm after the whatever right now, but I'm willing to call it 'fixed_8' if that makes people here happy :)
20:56 tcurtis bacek: I don't. NQP::Compiler.eval might have been a marginally more convenient way to deal with the plethora of conditional ops.
20:56 tcurtis But the way I'm doing it now is surprisingly manageable(although I haven't gotten to the _num and _str variants).
20:56 bacek tcurtis, erm. Explain more?
20:57 bacek (about .eval)
20:58 cotto_work Hmmm.  The 'encoding' value only seems to be significant in its equality to 'utf8'
20:58 dalek rakudo: 2acfad3 | moritz++ | src/Perl6/Grammar.pm:
20:58 dalek rakudo: complain about infix:<!%>. Closes RT #76170
20:58 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/2​acfad387e81f500f820ef8b687f490ffd711280
20:58 dalek rakudo: cccc121 | moritz++ |  (2 files):
20:58 dalek rakudo: re-enable Cool.rindex
20:58 dalek rakudo: requires rewriting the reverse_index opcode with the same method on the
20:58 dalek rakudo: parrot String. Also enable rindex.t
20:58 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/c​ccc121607afb2145c61101f7329cff247353598
20:58 dalek rakudo: 1734e43 | moritz++ | src/core/Signature.pm:
20:58 dalek rakudo: properly reflect capture/parcel binding in signature introspection
20:58 dalek rakudo: Closes RT #76116
20:58 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/1​734e43486afdec5ca2143b20f2b2c666f7d751c
20:58 darbelo In my experience, parrot's string and io subsystems alternate between knowing too much and too little about each other.
21:00 NotFound darbelo: given that until recently even the string subsystem doesn't knew much about itself, no wonder.
21:00 cotto_work That seems to be the case here.
21:00 tcurtis bacek: There are 18 different conditional comparison ops, each with an appropriate INTVAL-returning comparison op(with some overlap).
21:00 cotto_work $fh.encoding('asdfasdfsda') should fail more noisily than it does.
21:01 tcurtis When optimizing away constant conditionals, in determining whether to replace gt_ic_ic_ic, for example, with noop or a branch, one should use isgt.
21:01 bacek tcurtis, yes.
21:02 bacek tcurtis, no. Why "isgt"?
21:02 * bacek need coffee...
21:02 purl clowns'll eat me
21:02 tcurtis Because gt is the branching operator. You just want to whether the condition is true or not.
21:03 tcurtis s/want to/want to know/
21:03 NotFound Note that such conditionals can have secondary effects, as in: if ((i = j) > x) ...
21:03 bacek tcurtis, ah, "isgt" for folding. Yes.
21:03 bacek NotFound, there is no such op in pir.
21:04 tcurtis NotFound: even if there were, it wouldn't be a constant conditional(or at least not in the sense of having constant arguments..
21:05 bacek tcurtis, you can use POST::Constant.type for select proper comparison op.
21:05 NotFound I hope so, but pir sugar sometimes gives unexpected results.
21:06 tcurtis bacek: there's three way I know of to execute a pir:: op selected at runtime: if-elsif chain, a hash of subs, and eval.
21:06 bacek NotFound, POST is desugared already :)
21:07 NotFound Too much syntactic sugar gives to semantic cavities X-)
21:07 bacek tcurtis, choose from is-else of hash :)
21:07 bacek s/of/or/
21:07 GeJ G'Day bacek
21:07 tcurtis I've been using a hash. I thought it would be more unpleasant than it is.
21:08 bacek tcurtis, we can ask pmichaud for given/when in NQP :)
21:09 dalek rakudo: d18b5e7 | masak++ | src/core/Buf.pm:
21:09 dalek rakudo: [Buf] now does Positional and .[]
21:09 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/d​18b5e7035de1d137317e34539c5b9666a083eff
21:11 tcurtis One question, though: is it possible for pir::isgt__IPP to differ from pir::isgt__ISS, pir::isgt__III, or pir::isgt__INN when the arguments are already of the appropriate type?
21:14 bacek tcurtis, erm. All variables in nqp are pmcs. You have to explicitly "cast" them to proper type.
21:14 bacek Or I totally misunderstood question.
21:14 bacek Yes, I am...
21:15 tcurtis bacek: if you have PMCs that you know are Integers, and no HLL mapping is involved, isgt__IPP($a, $b) should be the same as isgt__III($a, $b), right?
21:15 bacek Yes, it should.
21:16 * tcurtis has just realized he doesn't have to worry about _str and _num variants of ops since they take PMC arguments.
21:16 dalek winxed: r525 | NotFound++ | trunk/examples/Mysql.winxed:
21:16 dalek winxed: read options from json file in example Mysql
21:16 dalek winxed: review: http://code.google.com/p/w​inxed/source/detail?r=525
21:17 bacek cotto_work, what about implementing LinearScanRegisterAllocator for pirate? It shouldn't be too hard.
21:18 cotto_work I was thinking about that.  It seems natural.
21:18 cotto_work Were you suggesting I do it or asking whether it seems like a good idea?
21:22 bacek cotto_work, look at POST::Compiler. line 24.
21:22 bacek We just need different allocator there :)
21:25 cotto_work sounds like fun
21:26 bacek cotto_work, -Ofun ftw! :)
21:27 cotto_work imma maka a new alligator
21:28 cotto_work s/ka/ke/
21:28 bacek tcurtis, (minor style rant) can you use .orig.value instead of .orig().value()? It's less noisy :)
21:29 tcurtis bacek: yes. I only recently realized NQP supports .foo
21:29 kid51 joined #parrot
21:30 masak cotto_work: I just put out a blog post. you're in it :) http://use.perl.org/~masak/journal/40422
21:32 bacek tcurtis, otherwise it looks pretty cool!
21:32 * cotto_work plans on using his newfound fame for profit
21:32 whiteknight joined #parrot
21:33 cotto_work speaking of fame, hi whiteknight
21:34 tcurtis whiteknight: Why not just declare your method as a normal sub and use ".param pmc self"?
21:37 dalek pir: c20b371 | bacek++ | src/POST/Compiler.pm:
21:37 dalek pir: Minor cleanups.
21:37 dalek pir: review: http://github.com/bacek/pir/commit/c20​b37110b988bb192d9ed46736d9154956ec752
21:40 wagle joined #parrot
21:43 GeJ Hi whiteknight.
21:43 whiteknight hello GeJ
21:44 whiteknight tcurtis: that's just part of the problem
21:48 cotto_work I'd appreciate feedback on HowToDeprecate and ParrotDeprecations on the wiki.
21:49 tcurtis bacek: How should I go about writing tests for it? Modify the POST testing to target my stage instead? Or create a copy of the POST testing stuff that targets my stage instead?
21:49 bacek tcurtis, I think separate set of tests will be better.
21:50 bacek tcurtis, you can pass optional "stages" parameter to sub test_post (in t/test_post.pir) to avoid code duplication.
21:51 tcurtis bacek: okay. Also, should I add my stage to the stages list in the PBC tests?
21:52 bacek tcurtis, hmm... Interesting question.
21:52 bacek I think so. Just because without optimizations we'll generate broken PBC.
21:53 bacek Or will not able to generate it at all.
21:53 whiteknight it bugs me that chromatic (and now allison) keep misreading my emails with an error bias towards me being more of a goober
21:54 whiteknight last time I got in an argument with those two on the list none of my problems were addressed, I eventually gave up in despair, and I still have the problems I had
21:56 whiteknight A little bit of "Andrew is not completely incompetent and might just be having a real problem" medicine would be nice, every once in a while
21:57 allison joined #parrot
21:57 darbelo whiteknight: You are not completely incompetent and might just be having a real problem.
21:57 * allison is going to knock some heads together
21:57 allison are chromatic and whiteknight here?
21:57 whiteknight i am
21:57 darbelo whiteknight is.
21:57 darbelo chromatic isn't
21:57 allison I'll knock him later
21:58 whiteknight I have to go actually. baby emergency
21:58 allison you two are at logger heads, pause and listen to eachother
21:58 allison (quick answer)
21:58 sorear bacek: how will --target=pir work after PCT's POST is replaced with PIRATE?
21:58 chromatic joined #parrot
21:58 bacek sorear, not yet. But I can add it.
21:58 chromatic I'm read for my head knocking.
21:59 darbelo sorear: EVEN BETAR!
21:59 sorear chromatic++ tireless notes backlogging
21:59 NotFound cotto_work: HowToDeprecate: In "if possible, maintain backwards-compatibility" I'd change "If possible" to "Unless absolutely impossible"
21:59 cotto_work bacek: it seems that turning PIRATE's POST into PIR will be relatively simple.
22:00 cotto_work NotFound: wfm
22:00 bacek cotto_work, it is. Just not current priority.
22:00 cotto_work so post->pir will just be an alternative to post->pbc
22:00 cotto_work oic
22:01 darbelo Nice and roundtrippy.
22:02 NotFound allison: Can you take a quick look at TT #1689 ?
22:06 allison NotFound: sure
22:15 tcurtis bacek: I don't think the test_post method does support a stages parameter.
22:16 bacek tcurtis, why?
22:16 bacek Ah, yes. It's hardcoded atm. But you can add it. ".param string stages :optional"
22:17 tcurtis Will do.
22:18 darbelo allison: I also have some questions I want to run past you, if you have the time.
22:18 allison NotFound: +1 on deprecating is_tty
22:18 allison darbelo: sure
22:20 darbelo I'm having some issues with the charset-encoding distinction and NFG. Mostly because I have to add new behaviour at both levels, but I'm starting to doubt the distinction is gaining us much.
22:20 bacek cotto_work, do you have "Remember the Milk" account?
22:20 bacek darbelo, +1 to have only "unicode" charset.
22:20 cotto_work no, but I can get one on the quickfast
22:21 allison darbelo: the best work there is Simon Cozen's unicode chapter in Advanced Perl Programming
22:21 cotto_work why?
22:21 allison darbelo: it is an important distinction, though, that doesn't necessarily mean that parrot's particular implementation of the distinction is the best way to handle it
22:21 bacek cotto_work, I want to try it for pirate's todo list.
22:24 NotFound cotto_work: HowToDeprecate should document how to choose the 'eligible' release.
22:25 darbelo My problem is that transcoding stuff into NFG is easy, but I can't really find a clean way to transcode it back to other formats, since part of the logic is hidden away in the chrset layer.
22:25 allison darbelo: transcoding it back should be a simple substitution
22:26 allison darbelo: that is, you should be able to use NFG on *any* variable-width encoding, not just unicode
22:27 NotFound On any unicode that is unicode?
22:27 darbelo Yes, but in order for NFG to deliver on it's promise of indexability it's iterators have to return negative codepoints, which confuses the hell out of all of the other encodings.
22:29 cotto_work bacek, cotto.rtm
22:29 allison darbelo: that's true, but then codepoints don't have any meaning across encodings anyway
22:30 darbelo Our various unicode encodings assume that iteration over a string will give them valid unicode codepoints for them to re-encode.
22:30 allison darbelo: so the transcoding will have to refer to the original encoding, which will refer back to the string for the actual meaning of the fake codepoint
22:30 cotto_work there you are
22:31 allison the fake codepoint is valid, but only in the context of the original string
22:31 bacek cotto_work, check it. Do you see "parrot" shared list?
22:31 allison and, because of various normalization forms, we should already have the expectation that a codepoint in one encoding may transcode to multiple codepoints in another
22:32 allison (if we don't, then that certainly is broken)
22:32 darbelo I'm looking at utf8.c's to_encoding() implementation right now, and I don't think it does.
22:33 cotto_work bacek: not so far
22:33 NotFound Looks like you are looking for the slower strings ever.
22:34 bacek cotto_work, it's "pending" on my side...
22:34 darbelo NotFound: Not what I was looking for, but what I found...
22:35 darbelo allison: our utf8 transcodeing simply calls "src_iter.get_and_advance(interp, &src_iter);" and utf8_encode()'s the result.
22:36 NotFound If string codepoint length can be changed by reencoding it, will be better to use StringBuilder or ByteBuffer for *any* string operation.
22:37 darbelo NotFound: With inmutable string reencoding is a 'copy'ish operation.
22:37 allison darbelo: it's not the string iteration that needs to change, we are dealing with only one fake codepoint
22:37 allison darbelo: it's the utf8_encode process that needs to respect the multiple real codepoints packed within that fake codepoint
22:37 darbelo My problem is, really, with the utf8_encode() call.
22:38 allison darbelo: aye
22:39 darbelo That's kind of the point I was trying to make, though I think I mis-stated it.
22:41 NotFound utf8 functions operates with codepoints. If you provide a encoding-normalization-whatever that doesn't use real codepoints, the iterators for that things should take care, IMO
22:42 japhb joined #parrot
22:43 darbelo NotFound: I have to return the 'faked' codepoint.  In a way, what I'm doing here is extend the Unicode charset.
22:43 whiteknight back
22:44 NotFound darbelo: Universal is not wide enough?
22:44 darbelo Universal is not regular enough.
22:44 kid51 whiteknight: Did you see that the Philadelphia perlmongers are planning a hackfest?
22:44 whiteknight kid5: yes
22:45 kid51 Would you be interested in attending?
22:45 darbelo NFG makes sure you can have 'random-access' strings with really weird symbols in them.
22:46 NotFound darbelo: At the cost of complicating and slowing down 99.999% of usages?
22:46 darbelo I surely hope not.
22:48 kid51 grrrr: Major verizon.net outage:  Can't get to my email.  www.verizon.net gets 503 error
22:48 NotFound If you need to change utf8_encode, that already is complicating a frequent usage.
22:49 darbelo Well... That's why I'm trying to avoid it.
22:50 darbelo allison: The way I see it, the underlying issue is that the various Unicode-related encodings assume they are getting something that's already unicode.
22:51 darbelo If we tried to support, say, GBK. We'd run into the same issues.
22:51 whiteknight kid51: not likely. I'm not much of a perl guy
22:52 kid51 whiteknight:  However, this group is pretty language-agnostic:  http://hackadelphia.org/
22:52 darbelo Which, incidentally, is what JimmyZ's problems wiht paths are all about.
22:52 whiteknight oh, I thought it was PHL
22:52 kid51 Well, I read about it first on the phl.pm mailing list.
22:52 NotFound darbelo: that's because all our charsets are unicode subsets, even if we ignore that fact.
22:53 kid51 But I just subscribed to the list which Chris Nehren described in the course of that thread.
22:53 kid51 So this may be capable of evolution :-)
22:53 NotFound ascii is an unicode subset. Latin-1 is an unicode subset. Binary, we don't transcode it.
22:54 darbelo NotFound: We'll have to stop assuming that at some point.
22:54 NotFound darbelo: fine, write an ebcdic charset for example.
22:54 whiteknight kid51: I'll see about it, but it's not likely I'll go
22:55 darbelo No need to, NFG is a Unicode superset. That's why I'm in trouble now ;)
22:56 NotFound darbelo: no wonder you are in trouble if you try to create an infinite charset in finite machines.
22:57 darbelo ;)
22:57 darbelo allison: Re-stating my case: "Our strings are less than graceful when we encounter anything that's not a unicode subset, and I think the way we split charsets and encodings is partly to blame there."
22:57 sorear on the plus side, it's countable
22:58 NotFound sorear: good point :D
23:02 NotFound pdd28 says: "Parrot will provide both grapheme-aware and codepoint-aware string operations, such as iterators for string traversal and calculations of string length."
23:03 darbelo NotFound: The pdd lies.
23:03 NotFound Then kill it.
23:04 NotFound We have enough problems with misdocumented current features, no need to add misdocumenting of inexistent ones.
23:05 darbelo allison: What do you think of, once I get NFG feature-complete, re-evaluating the boudaries of our charset-encoding split and see if we can make it better?
23:06 allison darbelo: sounds like a worthy task
23:06 darbelo I think it'll be a better stretch goal than what I originally planned.
23:07 allison darbelo: and yes, I do think there's some unicode bias in the current implementation
23:07 NotFound I think there is not enough unicode bias.
23:07 allison darbelo: that may be a task for after GSoC
23:08 allison NotFound: are you more of the "all and only unicode" perspective?
23:08 NotFound allison: yeah
23:09 tcurtis NotFound: what about things that aren't in Unicode?
23:09 darbelo That approach has to pay the 'Transcode on the way in.' tax, but is easier to implement.
23:09 Tene whiteknight: I'm having mail issues today... not sure if my mail is going to make it to the list or not.
23:09 NotFound darbelo: not at all.
23:09 darbelo tcurtis: As we were just discussing, we already suck at those ;)
23:09 allison the problem with is is that unicode can't actually represent all character sets
23:09 allison so, it's a lossy transcoding
23:10 allison losing data when handling strings is not good
23:10 Tene whiteknight: summary of my mail: why can't you just set :nsentry on the methods?  Isn't that flag designed specifically for that purpose, and added to provide a way to get the old semantics as part of the TT #389 work?
23:11 darbelo NotFound: Really? Then how do you manipulate them?
23:11 chromatic A canonical internal representation, enforced at the system boundaries, doesn't require a lossy representation.
23:11 NotFound darbelo: we do it right now.
23:11 allison chromatic: no existing encoding can represent all character sets
23:12 allison chromatic: so, we would have to invent our own, which is... excessive
23:12 allison NFG is just an optimization on an existing encoding
23:12 darbelo NotFound: No we don't. We fake it with the binary charset, which has limitations.
23:13 NotFound darbelo: binary data isn't a charset and isn't an encoding,.
23:13 chromatic Is it tractable to use the canonical representation wherever possible, and check for conversions where it isn't?
23:14 darbelo NotFound: I agree, but that's what we are doing with JimmyZ's GBK paths. We call it binary and hope nothing breaks.
23:14 allison Tene: yes, though I don't think we currently have a way to set :nsentry at runtime, which may be the complete solution to his problem
23:14 chromatic How often will we have to deal with unrepresentable encodings?
23:14 allison chromatic: never if Parrot is never used in the real world
23:15 NotFound darbelo: that is just working around the current filesystem names and env vars poor implementation.
23:16 allison chromatic: it's not a matter of unrepresentable encodings, but character sets that can't be transcoded to whatever encoding we pick as the one true encoding
23:16 chromatic How many character sets are these?  CJKV?  Hangul?  Pinyin?
23:16 NotFound What we have now are things called "ascii":"fixed_8" and "iso-..." that are perfectly workable as unicode encodings.
23:16 NotFound No need to transode, they are already unicode based.
23:17 darbelo NotFound: parrot has to take GBK from the system and give GBK abck to the system, how do we do that without transcoding?
23:17 allison chromatic: good support for multiple character sets is one of the original founding principles of Parrot, one of those competitive advantages
23:17 NotFound darbelo: adding encodings if needed, as we already do.
23:18 allison chromatic: and besides, the abstraction that makes multiple character sets possible is just plain good design
23:19 chromatic I favor good support for multiple character sets.
23:19 allison chromatic: (not necessarily saying that what we have now is the best possible implementation of the abstraction)
23:19 chromatic Our current abstraction is fairly lousy design.
23:19 allison it has definite weak points
23:19 chromatic Even so, variable width encodings are painful.
23:20 allison and, Simon wanted to completely replace it with NFG
23:20 allison or, at least completely replace it
23:20 allison it was too huge of a refactor step, though
23:20 allison so we took the strategy of adding NFG and then gradually refactoring
23:22 bluescreen joined #parrot
23:23 allison on the whole, weighing priorities, our character set refactors need to respond to customer needs
23:23 NotFound I think that using the phrase "character set" is a problem by itself.
23:23 allison NFG is a priority for speed in NQP
23:24 allison NotFound: again, I like Simon's terminology
23:24 allison http://books.google.com/books?id=WMmlodYkdNYC&​amp;printsec=frontcover&amp;dq=advanced+perl+p​rogramming+unicode&amp;source=bl&amp;ots=1lfrw​pmRu-&amp;sig=jwlbfB0-IGDYEJH5YqQ6JKNEkLI&amp;​hl=en&amp;ei=uiEpTNCOL4rtnQf2sciaAQ&amp;sa=X&a​mp;oi=book_result&amp;ct=result&amp;resnum=5&a​mp;ved=0CCgQ6AEwBA#v=onepage&amp;q=advanced%20​perl%20programming%20unicode&amp;f=false
23:24 allison ack, awful link
23:24 darbelo purl: shorten that
23:24 purl That URL is at http://xrl.us/bhp8af [books.google.com]
23:25 darbelo allison: I do worry that NFG won't really deliver that much speed until chrsets and encodings get some refactoring.
23:26 allison darbelo: the key thing is reducing combining characters to single entities
23:27 chromatic Remember when Infinoid sped up PGE's parsing speed some 40% by rearranging some code between charsets and encodings?
23:27 darbelo I've had to add quite a few charset-level special cases for the new encodings.
23:27 allison darbelo: that's all NFG provides, it won't give any other speed gains
23:28 NotFound allison: there is a lot of literature about that, but in spite of it people keeps talking and thinking about particular encodings when someone says "unicode"
23:28 allison darbelo: keep a list of those special cases, because they're going to be the biggest candidates for generalizations
23:28 darbelo allison: Exactly, I think we can gain more by adjusting the boundaries in a few places than by special-casing NFG all over.
23:29 Tene Oh, my mail did go through. :)
23:31 allison darbelo: sounds like a good next step after we have the first working NFG implementation (even though it does require some intermediate special casing for NFG)
23:35 davidfetter joined #parrot
23:36 * kid51 observes his verizon.net email has come back to life.
23:36 chromatic I'm still waiting for the head knocking before I respond to Austin's message.
23:37 darbelo allison: In a way, my future plan can be thought of as "Replace conditional with delegation." See if we can shift the places where NFG needs special handling onto the encoding, and shift the places where we duplicate code across encodings back to the charset.
23:37 NotFound I don't have a codepoint for a knocked head smiley-
23:38 darbelo NotFound: Use a regular smiley and add a 'COMPOSING KNOCK' char.
23:38 darbelo You can add more than one if you think it's needed :)
23:39 NotFound That reminds me the times of impact printers. a - backspace - apostrophe...
23:40 chromatic Is there a "PLEASE LET US SOLVE THE REAL PROBLEM" grapheme?
23:40 cotto_work darbelo knows all kinds of secret unicode characters
23:40 NotFound At least that thing was for real world usages.
23:41 Tene chromatic: head knocking?
23:41 chromatic Apparently "I will revert any commit which adds such a feature" sounds more aggressive than I intended.
23:41 darbelo Tene: http://irclog.perlgeek.de/p​arrot/2010-06-28#i_2491436
23:42 Tene darbelo: thanks
23:42 NotFound chromatic: I tought the chainsaw-commiting role was adjudicated to cotto.
23:43 chromatic Sometimes you shouldn't delegate matters of principle.
23:43 cotto_work That's only for deprecation policy violations.
23:43 cotto_work Though in those cases it will be enforced, once the policy is not-disagreed upon.
23:46 * darbelo not-disagrees with people who wield chainsaws.
23:47 * NotFound enters next room, looking for the rocket launcher
23:49 NotFound A parrot scriptable Doom engine will be great.
23:50 cotto_work fast nqp-generated parsers would be great
23:52 ruoso joined #parrot
23:53 Psyche^ joined #parrot
23:57 hercynium joined #parrot

| Channels | #parrot index | Today | | Search | Google Search | Plain-Text | summary

Parrot | source cross referenced