Camelia, the Perl 6 bug

IRC log for #parrot, 2010-06-29

Parrot | source cross referenced

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

All times shown according to UTC.

Time Nick Message
00:10 chromatic I wonder if PIRATE would be faster if it were self-hosted.
00:11 cotto_work It's getting there quickly.  I'd be surprised if there were much of an improvement without some beefy optimizations.
00:14 chromatic I'm curious to see how linear scan helps.
00:16 whiteknight longer time for code generation (slightly). Less memory allocated at runtime
00:16 chromatic We might mark fewer GCables too.
00:16 whiteknight how?
00:16 whiteknight by just not keeping registers filled with dead garbage?
00:16 cotto_work their references will get clobbered faster
00:16 chromatic Exactly.
00:17 chromatic I'm really curious to see how that new STRING API bacek and I talked about the other day helps Rakudo though.
00:17 whiteknight that could be big. I can't really estimate how many registers we're going to save
00:17 darbelo chromatic: What API?
00:17 purl API is abstra ct
00:19 NotFound I'm wondering if adding several ops to avoid the need of pir compilers sintesizing them with temporaries will not be a better solution to a noticeable part of that problem.
00:19 chromatic http://irclog.perlgeek.de/p​arrot/2010-06-26#i_2481038
00:19 chromatic http://irclog.perlgeek.de/p​arrot/2010-06-26#i_2481147
00:20 chromatic NotFound, darbelo, see those links.
00:21 ash_ does parrot have an alloca?
00:21 darbelo Sounds like a win to me.
00:21 NotFound Offsets and lengths will be bytes, codepoints, or graphemes?
00:22 darbelo I assumed graphemes, which we conflate with codepoints at the time.
00:22 chromatic Whichever's the most correct, so graphemes.
00:22 darbelo Bytes would be a byte idea to expose there.
00:22 dalek parrot: r47907 | NotFound++ | trunk (3 files):
00:22 dalek parrot: deprecation note and warnings for is_tty, TT #1689
00:22 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47907/
00:23 darbelo Eh, bad idea.
00:24 chromatic It seems like an easy enough thing to write, but every time I finish my other work, I have to leave the office.
00:28 darbelo ash_: If your libc has alloca() I don't see any reason parrot would be unable to use it
00:29 ash_ is it not recommended to use it? i just haven't seen any places where its used, or any code to make it cross platform (it exists in a lot of systems, but its (for instance) called _alloca in windows instead of alloca
00:30 NotFound Because of that: "If the allocation causes stack overflow, program behavior is undefined." "The  alloca() function is machine- and compiler-dependen"
00:30 darbelo Oh, you want to use alloca in parrot code. I'd argue against it.
00:30 chromatic It's apparently not in POSIX 2001 either.
00:30 ash_ so, i shouldn't use it then?
00:31 darbelo Too much of a portability headache.
00:31 chromatic Seems fragile to use correctly.
00:31 ash_ k
00:33 * darbelo now remembers how much he hates the packfile code.
00:33 NotFound And that: "There is no error indication if the stack  frame  cannot  be  extended. (However, after a failed allocation, the program is likely to receive a SIGSEGV signal if it attempts to access the unallocated space."
00:34 darbelo "likely to receive a SIGSEGV" As opposed to what? A puppy?
00:35 ash_ thats silly, i didn't realize it doesn't it wouldn't return an error...
00:35 ash_ t
00:35 NotFound darbelo: to silently corrupt interrupts vector if you are building parrot for ms-dos, for example X-)
00:35 nopaste "darbelo" at 192.168.1.3 pasted "OpenBSD alloca manpage" (32 lines) at http://nopaste.snit.ch/21647
00:36 chromatic +1 to a new .class directive
00:36 whiteknight bah. I'm done with this damned email thread. Next time I'll do the "better to ask for forgiveness instead of permission" approach
00:37 NotFound Remember that people are working in parrot for embedded systems, thus it can be used in systems without memory protection.
00:38 Tene whiteknight: did you read my email about :nsentry?
00:38 whiteknight Tene: yes
00:38 whiteknight Tene: I've been working on this problem for three days now. I've exhausted all the easy solutions
00:39 darbelo whiteknight: Have you seen allison latest reply? (The one to Austin)
00:39 whiteknight Combine that with several hundred lines of code to move functions around between namespaces and classes
00:39 whiteknight darbelo: yes.
00:41 NotFound chromatic: winxed already has diferentiated class and namespace, even if uses .namespace in the generated code for both. Will be fairly easy to change the generator to test that directive,
00:41 whiteknight I'm not rewriting a few hundred lines of code to work around a problem with a ~5 line solution. I'm a volunteer, my time is valuable, etc
00:42 darbelo whiteknight: That's going to have to happen anyway.
00:43 whiteknight darbelo: it's not going to happen. There likely isn't going to be any kakapo for 2.6.0 Parrot
00:44 darbelo The old way isn't going to work anymore. Your best shot is to help allison narrow down the behaviour you need supported so it can be added.
00:45 whiteknight I've been staring at this for days. I've narrowed down what I need. The answer is no. We move on to the next project. No big deal
00:46 darbelo The time when people ask for "specific code examples of what worked before that doesn't work now" is not the right time to do that if you ask me.
00:46 darbelo (which you haven't, but I'm telling you anyway :)
00:47 NotFound If the behaviour needed is to modify classes after being instantiated, I think the design forbids that.
00:47 whiteknight the design has never forbidden people from adding methods to classes
00:47 whiteknight for built-in types, it's (supposed to be) easy and quite common
00:48 darbelo If there's indeed a bug here (and I think there is a good chance of that). This is the time to find it.
00:49 whiteknight it's not a bug. There was a deprecation notice for TT #389. There was fair warning
00:49 NotFound darbelo: BTW "worked before" sometimes doesn't mean much. Supposedly dynops worked before.
00:50 darbelo I was wuoting allison's mail to Austin there.
00:50 NotFound Really they worked just because they weren't exercised enough.
00:50 mikehh All tests PASS (pre/post-config, make corevm/make coretest, smoke (#34627), fulltest) at r47907 - Ubuntu 10.04 amd64 (gcc with --optimize)
00:51 Austin joined #parrot
00:51 darbelo whiteknight: allison's mail states that (some of) the stuff kakapo was trying to do should work. If it doesn't then there must be a bug somewhere.
00:51 whiteknight darbelo: It's not just a matter of what kakapo does. Yes, there are workarounds
00:51 whiteknight the problem is how much of the code there is that does the old thing
00:52 allison whiteknight: I'm not trying to be difficult, I'm really just plain confused how the 6 line change could have had such a dramatic effect, and even more, I have no idea what's not working
00:52 whiteknight allison: I know nobody is trying to be difficult.
00:52 allison can you explain what's not working?
00:53 whiteknight let me get some links
00:53 whiteknight http://github.com/Whiteknight/kak​apo/blob/master/src/Pmc/Array.nqp
00:53 whiteknight The _pre_initload method there is what's failing
00:53 whiteknight http://github.com/Whiteknight/ka​kapo/blob/master/src/Global.nqp
00:54 whiteknight the export method there is what finally barfs
00:54 allison Is Kakapo written all in NQP?
00:54 whiteknight I've got methods in a NQP module (not a class). I am trying to move them from the source namespace to the destination one
00:54 whiteknight all NQP
00:54 whiteknight a small amount of bootstraping PIR, but 99% NQP
00:55 allison okay, that right there might be the source of my confusion, since I keep talking about things that are easily possible in PIR, but I don't know about NQP
00:55 allison I don't know how much NQP exposes
00:55 whiteknight so the problem is Array is a namespace, not a class. But the things I want imported are methods (without :method we don't have "self")
00:55 whiteknight Doing pir::get_namespace("Array").get_class() returns null
00:55 allison but Array has a Proxy
00:56 whiteknight no, only built-in types have proxies
00:56 whiteknight or, that I am aware of, only built-in types have proxies that work
00:56 allison oh, sorry, by Array, you don't mean parrot::Array (the built-in)
00:56 whiteknight we don't have a parrot::Array anymore
00:57 allison you mean kakapo::Pmc::Array
00:57 whiteknight yes
00:57 NotFound Have you looked at TT #1694? Maybe it plays a role here.
00:57 whiteknight Converting kakapo::Pmc::Array to a class gets passed that problem, but then exposes the problem that ordinary subs can't be exported between classes, since they aren't methods
00:58 allison why is Array a namespace into  a class?
00:58 allison okay
00:58 whiteknight so I need to rewrite all of kakapo to differentiate between subs and methods that I want to import/export all over the plac
00:58 allison so, in some ways it's going back to the Perl 6 submethods
00:58 whiteknight maybe. I might not know what those are
00:58 Austin It's worth pointing out that Array will BE a class later, but pre-initload generally runs before the P6object code that creates the Array class. So Array::foo() [:method] exists, but may or may not be registered, depending on how the user is loading Kakapo.
00:58 allison which is why class definition still uses .namespace (in PIR)
00:58 whiteknight ...and what Austin says
00:58 mikehh pir/PIRATE (c20b371) build ok/ test ok - parrot at r47907 - Ubuntu 10.04 amd64 (gcc with --optimize)
00:58 whiteknight allison: yes, but the nqp class definition also does a newclass
00:59 whiteknight by the way, I don't necessarily want Array to be a class. IT's abstract and I don't want people treating it like an instantiable class. It's a small nit
00:59 whiteknight basically, it's just a dumb storehouse for methods that I want to jam in other places
00:59 Austin Whiteknight: Did the same-last-name problem ever get fixed?
00:59 whiteknight Austin: to my knowledge, now
00:59 whiteknight no
01:00 whiteknight Austin: not for lack of trying. That code is dark and evil
01:00 allison this is where I get confused, because the dumb storehouse is still there
01:00 Austin Heh
01:00 whiteknight allison: yes, but the dumb storehouse is a namespace, and the things it is storing are methods
01:00 whiteknight can't get to them
01:00 whiteknight now if I had a method NameSpace.get_method(), my problems go away
01:01 allison they are still there, stored in a separate part of the namespace
01:01 whiteknight right. I only want to access them
01:01 NotFound Please take a look at TT #1694, that thing probably complicates attempts to diagnose and fix a lot of related problems.
01:01 Austin Hmm. How does the new version of p6object (P6metaclass::register) handle this?
01:01 abqar_ joined #parrot
01:02 whiteknight NotFound: I don't think kakapo uses an HLL
01:02 allison whiteknight: call 'inspect_str' with the argument 'methods' on the namespace object
01:02 whiteknight Austin: no idea
01:02 allison whiteknight: it'll give you the temporary hash where the methods are stored before the class is created
01:03 allison whiteknight: (and, apologies, but I don't know how to do that in NQP)
01:03 whiteknight it's okay. I'm not an NQP expert myself
01:03 NotFound whiteknight: no, but if that problem makes lots of tests to break in attempts to fix related problems, people will likely think the fix is wrong.
01:03 mikehh partcl-nqp (ab9b0d2) builds ok, test PASS - parrot at r47907 - Ubuntu 10.04 amd64 (gcc with --optimize)
01:03 whiteknight NotFound: Maybe, but there's no evidence that this issue is in my problem
01:04 whiteknight allison: I can give inspect_str a shot. That can probably do what I need
01:04 NotFound whiteknight: yeah, until a few hours ago there wasn't even evidence that this issue existed X-)
01:06 NotFound (other than people loading the .pir instead of the .pbc for no aparent reason)
01:08 Austin Whiteknight: $namespace.inspect('methods')
01:16 whiteknight Austin: yeah. I'll tackle it tomorrow
01:16 whiteknight (by the way, I'm sorry to disturb you from your long slumber)
01:18 whiteknight goddamn gitorious! Every couple hours it forgets my ssh keys
01:20 whiteknight or it remembers my ssh keys but denies me access anyway
01:20 whiteknight it's not like I changed my key since this morning, but now I can't push
01:25 Austin Heh.
01:26 Austin Are you sure that's gitorious and not your isp? (Some ISP's dynamically reassign IP#s to clients...)
01:26 whiteknight I don't know, but github never ever gives me those problems
01:26 Austin Whiteknight: Is 2.5 very much different from 2.4? (I can get 24 to build..)
01:26 whiteknight Austin: What kinds of build errors do you get? I'm intrigued that you can't get it to build
01:29 nopaste "Austin" at 192.168.1.3 pasted "make problems" (4 lines) at http://nopaste.snit.ch/21648
01:30 Austin out of memory error on the first somewhat-complex pmc file doing pmc2c
01:30 whiteknight thats....extremely weird
01:30 whiteknight like I said, my ubuntu vm has 386mb ram, and no issues like that whatsoever
01:30 dalek kakapo: 8b9fa42 | whiteknight++ | src/Pmc/Array.nqp:
01:30 dalek kakapo: re-fix my last re-fix of this Array class. I think I have it right this time, or at least better than it was. Subs are read from the Array namespace and injected into the appropriate Class objects.
01:31 dalek kakapo: review: http://gitorious.org/kakapo/kakapo/commit​/8b9fa4229e6d446ed1d0b03ec3e7eebce54f2794
01:31 whiteknight what rev are you on? Did you do the normal song-and-dance (realclean, fresh checkout, etc)?
01:31 dalek kakapo: a3281dc | whiteknight++ | src/Pmc/Array.nqp:
01:31 dalek kakapo: bump indentation for Array.nqp, since it's treated as a class now
01:31 dalek kakapo: review: http://gitorious.org/kakapo/kakapo/commit​/a3281dcdc8792d2113f403f2a49dfcd2b50dc3a4
01:31 Austin I did a fresh co of tags/2.5
01:31 cotto ~~
01:31 Austin Then ran my fixup script (dos2unix across non-binary files) then configure then make.
01:31 Austin SSDD, really.
01:32 Austin (It's not like this is the first time I've paid the tax...)
01:33 whiteknight Austin: which compiler, gcc?
01:33 Austin Yeah
01:33 whiteknight ...nevermind. It doesnt' matter at that point
01:33 Austin Also, yeah.
01:34 whiteknight which version of Ubuntu? Perl?
01:34 plobsing joined #parrot
01:37 Austin 2.6.22 (andLinux kernel) and perl 5.10.0
01:37 Austin (aka, the same ones I've used for months)
01:38 Austin FWIW, the 2.4 build works fine - I've got them in parallel directories.
01:39 whiteknight weird as hell
01:39 whiteknight can you try it with current HEAD?
01:39 Austin Sure.
01:39 Austin I wonder if someone added something that dos2unix is stripping out...
01:39 whiteknight Why are you doing dos2unix?
01:40 Austin andLinux is a kernel that runs inside windows
01:40 Austin My source and stuff are on Win, I use linux for the build and some command line stuff.
01:41 Austin (I can't get a Parrot build on windows alone, since I've got too much stuff loaded..)
01:41 kid51 http://www.andlinux.org/
01:43 whiteknight ah
01:43 Austin I'll try trunk, see what that brings.
01:46 mikehh rakudo (d18b5e7) builds on parrot r47907 - make test PASS, spectest_smolder -> #34628 (pugs r31494) FAIL - Ubuntu 10.04 amd64 (gcc with --optimize)
01:46 mikehh t/spec/S32-num/rat.rakudo - Failed test:  798
01:46 mikehh 19 TODO PASSes in 5 files
01:54 ash_ can you use cygwin to build parrot?
01:59 whiteknight Austin: I'm heading to bed now. msg the results
01:59 whiteknight goodnight
01:59 Austin ok
01:59 Austin niterz
02:04 dalek plparrot: 60962c5 | dukeleto++ | plparrot.c:
02:04 dalek plparrot: Remove unused variables
02:04 dalek plparrot: review: http://github.com/leto/plparrot/commit/6​0962c50bd755b151177adfc4e1e404dcac4e36b
02:04 dalek plparrot: f03ace1 | dukeleto++ | plparrot.c:
02:04 dalek plparrot: Check for a null proc_src before calling get_func_arg_info
02:04 dalek plparrot: review: http://github.com/leto/plparrot/commit/f​03ace176f6f9bd1b927b38643a5ba3401485633
02:04 dalek plparrot: 7b7e97e | dukeleto++ | plparrot.c:
02:04 dalek plparrot: Check for compilation errors in plperl6_run before Parrot_ext_call
02:04 dalek plparrot: review: http://github.com/leto/plparrot/commit/7​b7e97eff9629f16ba69e3db020ca09ec718e654
02:06 ash_ joined #parrot
02:21 atrodo NQP doesn't have the perl5 equivalent of local, correct?
02:21 kthakore atrodo: \o/
02:21 * kthakore hugs atrodo
02:22 * atrodo awkwardly hugs kthakore back
02:24 kthakore atrodo: \o/
02:24 * kthakore runs off to get his RC out the door
02:30 sorear atrodo: my $*FOO functions as a local, though the implementation is rather different
02:39 Austin msg whiteknight Dude! You rock! Moving to trunk works for me - at least it gets past FIA.pmc. Thanks for the suggestion.
02:39 purl Message for whiteknight stored.
02:40 cotto Austin, could you take a look at HowToDeprecate and ParrotDeprecations with your Kakapo hat on and tell me if you see any problems?
02:40 cotto also, let me borrow that Kakapo hat.  It sounds pretty awesome.
02:42 TiMBuS joined #parrot
02:42 Austin Just mind the claws... http://www.youtube.com/watch?v=9T1vfsHYiKY
02:46 atrodo Thanks sorear, that looks like what I want, but I think how I'm operating may not be right.
02:48 Austin cotto: I think you need to clarify what gets deprecated and what doesn't. IOW: Opcode/PMC functionality get it, while GC internals don't, etc. There's some kind of rule, but I don't know what it is...
02:49 cotto Anything externally facing is subject to the deprecatin policy.
02:50 cotto but yes, that could do with some clarification.  I just don't want to duplicate too much of our existing documentaiton.
02:50 cotto *docs
02:50 cotto ;)
02:55 cotto Austin, from the perspective of a crabby HLL or library maintainer settling down to pay the upgrade tax, how does it work?
02:55 cotto (just pretend)
02:55 Austin Poorly.
02:55 Austin Natch
02:56 Austin So some coder - Frank - makes a change in $rev + .1
02:57 Austin Now that change isn't permanent - he could re-change it, or something - so will he write up a deprecation notice for $rev + .3?
02:58 Austin The wiki page is to the good, IMO.
02:58 Austin For things like 389, a subpage may grow out of it if a bunch of issue balloon out.
02:58 Austin So wiki page is generally better than not.
02:58 cotto Deprecations require some planning and forethought.  If a backwards-incompatible deprecation goes in at $rev, it will have been in the works for a while and probably won't be reverted unless something really surprising happens.
03:00 janus joined #parrot
03:00 * cotto wonders if we'll ever see the end of 389
03:01 Austin Bacek's substr change is a good example. Here's this high-impact thing that every hll will maybe have to fix. I think one potential problem is how to write the synopsis. The descriptions can be pretty dry.
03:01 Austin # Remove in-place substr op variants. TT #1450
03:01 Austin That doesn't sound like "you're going to have to fix the code generator in your snobol compiler in eleventy-six places"
03:02 cotto It might work to add an expected impact to the summary page.
03:02 Austin Yeah. I'm thinking that's the right approach.
03:02 cotto It doesn't sound like that.
03:03 cotto poor SNOBOL compiler
03:03 cotto poorer INTERCAL compiler, but for other reasons
03:03 cotto such as existing
03:03 Austin Impact: Replace all occurrences of 'substr' with 'new_substr' in generated and hand-coded pir.
03:08 cotto The idea would be to communicate "here's how much this change will mess up your code."
03:08 cotto as efficiently as possible
03:08 Austin YEs.
03:08 Austin Yes
03:08 khairul joined #parrot
03:11 cotto I'll give some thought on how to do that.  Thanks Austin.
03:11 Austin I think your idea of an impact summary along with the synopsis will do nicely.
03:12 Austin In a real company, I'd suggest it be part of the Trac ticket, and generate the report. :)
03:12 cotto Yet here we are, in not a real company.
03:12 Austin Yeah. At least we get to use git.
03:12 Austin :-$
03:12 cotto That'll actually be happening in the forseeable future.
03:13 Austin Heh.
03:13 Austin That's actually cool for me, since git crosses the *nix/windows divide better than svn.
03:14 Austin (Since, basically, git utterly fails to cross the divide, thus requiring the tortoise-git folks to sneak mingw in the background...)
03:14 cotto Using git is so much nicer than svn.  It just feels modern, even with its warts.
03:14 cotto orly?
03:14 purl YA RLY.
03:14 Austin Think about it, dude. Git was written by and for Linux users.
03:14 cotto this is quite true
03:15 Austin Windows support for Git is about like Linux support for Team Foundation Server...
03:15 cotto At least git is oss.
03:15 Austin Heh.
03:15 Austin There is that.
03:15 cotto if only there were a legitimate libgit
03:15 cotto that didn't end in .a
03:15 dukeleto Austin: lulz :)
03:16 Austin Of course if you could talk your bosses into donating a few T/Architect licenses, I'd switch to developing under Windows...
03:16 Austin :)
03:16 cotto You must mean cotto_work. ;)
03:17 Austin Oh yeah, that guy.
03:17 purl yeah, that guy is obviously a freaked-out psychopath
03:17 Austin heh
03:17 Austin botsnack
03:17 purl :)
03:17 cotto doublebotsnack
03:17 purl :)
03:17 cotto hjwlkanlkdsjfalksjflkajflsd​botsnacklkasjfoiwjlklksdjld
03:17 purl :)
03:18 Austin Regexp: gotta catch 'em all
03:31 khairul cotto: ping
03:33 cotto hio khairul
03:33 khairul hi cotto
03:33 khairul see privmsg
03:37 dalek parrot: r47908 | khairul++ | branches/gsoc_instrument/sr​c/dynpmc/instrumentgc.pmc:
03:37 dalek parrot: Removed the huge if/else blocks and replaced it with hash.
03:37 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47908/
03:40 LoganLK joined #parrot
03:54 dalek parrot: r47909 | darbelo++ | branches/gsoc_nfg/t/op/string_nfg.t:
03:54 dalek parrot: Remove two overly optmistic tests.  Tables can't be made that lazy yet.
03:54 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47909/
04:13 dalek tracwiki: v4 | cotto++ | KhairulGSOC2010Schedule
04:13 dalek tracwiki: updates after meeting with khairul
04:13 dalek tracwiki: http://trac.parrot.org/parrot/wiki/Khairul​GSOC2010Schedule?version=4&action=diff
04:17 bacek_at_work aloha
04:17 bacek_at_work who asked for some newbie tickets?
04:17 cotto aloha, bacek_at_work
04:18 tcurtis bacek_at_work: kthakore did.
04:18 bacek_at_work tcurtis, thanks
04:19 bacek_at_work msg kthakore take a look at http://trac.parrot.org/parrot/ticket/1639 and http://trac.parrot.org/parrot/ticket/1650 They are mostly self-contained and not-so-hard to implement
04:19 purl Message for kthakore stored.
04:20 ash_ joined #parrot
04:20 bacek_at_work afk # next meeting...
04:20 ash_ joined #parrot
04:27 dalek parrot: r47910 | khairul++ | branches/gsoc_instrument/sr​c/dynpmc/instrumentgc.pmc:
04:27 dalek parrot: Clean up the hashes on destroy.
04:27 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47910/
04:49 cotto http://fearthecowboy.com/post/c​oapp-in-the-first-90-days.aspx - for people interested in sane package management on windows
04:54 bacek_at_work cotto, do you really use words "sane" and "windows" in same sentence?
04:59 cotto Ask me in a year.
04:59 cotto I'm excited about it.
05:05 chromatic joined #parrot
06:14 he joined #parrot
06:34 eternaleye joined #parrot
06:43 dukeleto 'ello
06:44 tcurtis Hello, dukeleto.
06:44 dukeleto tcurtis: how goes it? It looks like you have been busy with your GSoC work. That is good to see.
06:48 eternaleye joined #parrot
06:49 tcurtis dukeleto: It goes well. I have a user other than myself now(although I'm not sure if he's still blocking on something in NQP)! moritz++ for daring to brave the mostly uncharted waters of my GSoC project!
06:49 sorear What about bacek/
06:50 JimmyZ joined #parrot
06:55 tcurtis sorear: PIRATE will soon be using POST::Pattern. bacek himself hasn't written code using it(as far as I know).
06:56 moritz good morning
06:56 purl Lies!
06:56 moritz tcurtis: there's an interesting discussion on #perl6 I had yesterday, I'll find a link for you...
06:57 moritz tcurtis: http://irclog.perlgeek.de/​perl6/2010-06-28#i_2488432
06:58 moritz it boils down to: if I want to optimize stuff in Perl 6, I have to have information about the lexical environment for each PAST node
06:59 moritz so we have to find a way to gather this information during the optimization pass
06:59 moritz either as a separate pass
07:00 moritz or maybe by attaching some callback to tree walker that's always called
07:02 moritz and it's also something where we could think about how general this can be done, so that other languages with lexical variables can profit from it
07:02 sorear the catch is that 'my Int $x' means basically nothing
07:04 moritz well
07:04 moritz it means something in a lexical scope
07:10 tcurtis I suspect that a lot of optimizations will be hard to generalize to multiple languages.
07:10 moritz that's certainly true
07:11 tcurtis Even something as simple as addition is represented totally differently in partcl, in rakudo, in NQP.
07:11 moritz but all languages with lexical variables need compile time information about their lexicals for all non-trivial optimizations
07:12 moritz my current plan to get them is another stage that 1) promotes all outer lexicals to inner blocks
07:12 moritz and 2) adds a pointer to each PAST::Var that points to inner-most block
07:17 tcurtis That sounds like it would probably benefit from a .parent accessor on Tree::Pattern::Match(although I suppose even that might not deal with cases where the variable declaration isn't an immediate child of the containing block).
07:18 moritz right
07:19 moritz what I'll need is a non-greedy search for child nodes
07:19 moritz ie I search for PAST::Block objects
07:19 moritz and I then want all child PAST::Block nodes that aren't child nodes recursively (ie not a blocks' child node that's a block again)
07:20 moritz is that already possible?
07:23 tcurtis Not yet. Your options currently are search recursively for one match, search recursively for as many matches as exist, or check only this exact node. But I can work on it tomorrow. Any recommendations as to the interface? Is there anything like that in Perl 6 regexes that I could imitate?
07:24 bacek_at_work briefly here
07:25 moritz tcurtis: in Perl 6 (and Perl 5) regexes non-greedy searching is done by appending a ? to the quantifier, ie \w+? ... but that doesn't help you :-)
07:25 bacek_at_work If we can push "type coercion" down to POST we can optimize any language
07:25 moritz tcurtis: I can imagine a .search_shallow($pattern, $stopper?) might be nice
07:26 moritz tcurtis: where $stopper determines when not to search any deeper, and defaults to stopping after the first match down a given tree
07:27 moritz tcurtis: maybe I'll come up with a mock-up use case later, but I have to go to breakfast now :-)
07:27 bacek_at_work Control Exceptions ftw :)
07:28 tcurtis moritz: alright. I may have gone to bed by the time you get back.
07:29 moritz tcurtis: happens... I'll leave you a purl message or send an e-mail
07:48 mj41 joined #parrot
07:50 dalek plparrot: 925c734 | dukeleto++ | plperl6.pir:
07:50 dalek plparrot: Get rid of the try block for now
07:50 dalek plparrot: We pass two tests, and coredump Postgres, yay!
07:50 dalek plparrot: review: http://github.com/leto/plparrot/commit/9​25c7349ec60e91bc621cc717980bd05eb6ebaa1
07:50 dalek plparrot: 24459ff | dukeleto++ | plparrot.c:
07:50 dalek plparrot: Get rid of *perl6_src in plperl6_func_handler
07:50 dalek plparrot: review: http://github.com/leto/plparrot/commit/2​4459ff59fa64affea7fb50e27fb81ba3b65afd0
07:50 dalek plparrot: 69998ba | dukeleto++ |  (2 files):
07:50 dalek plparrot: Make returning floats from PL/Perl6 work
07:50 dalek plparrot: review: http://github.com/leto/plparrot/commit/6​9998ba3b6bc32b4ea26f16c19f9986d780812e6
07:50 dalek plparrot: 1dfc30a | dukeleto++ | plparrot.c:
07:50 dalek plparrot: Teach PL/Parrot to make Parcel-flavored sausage
07:50 dalek plparrot: review: http://github.com/leto/plparrot/commit/1​dfc30a7d196b013dd589e9907d62672c4f50515
07:50 dalek plparrot: 4e7500d | dukeleto++ | t/sql/plperl6.sql:
07:50 dalek plparrot: Add a test for returning strings from PL/Perl6
07:50 dalek plparrot: review: http://github.com/leto/plparrot/commit/4​e7500d5a967ddc946c2395f2a1a3e955943eecf
07:50 dalek plparrot: 049b799 | dukeleto++ |  (2 files):
07:50 dalek plparrot: Use Perl 6 heredocs and add a test for using single quotes in PL/Perl6
07:50 dalek plparrot: procedures
07:50 dalek plparrot: review: http://github.com/leto/plparrot/commit/0​49b7994db2a94c24409acbd7594435bc8e297fe
07:54 dukeleto PL/Parrot can now run basic Perl 6 code and do some data marshalling
08:01 chromatic joined #parrot
08:08 arnsholt I'm going to write a Set PMC for my HLL, is that something that might be interesting for Parrot in general?
08:12 lucian joined #parrot
08:14 dukeleto arnsholt: probably. what are you using your Set PMC for?
08:15 dukeleto arnsholt: you may want to add it to http://github.com/Whitekni​ght/parrot-data-structures
08:16 arnsholt I need the Set for my Prolog
08:17 arnsholt Certain operations need to calculate various sets of variables contained in a term, so a PMC that takes care of the comparisons and such is a natural thing to do
08:19 dukeleto arnsholt: sounds like a Set PMC would make a nice dynpmc
08:19 dalek kakapo: 5eda4dc | austin++ |  (54 files):
08:19 dalek kakapo: Bulk commit prior to June taxes.
08:19 dalek kakapo: Signed-off-by: Austin Hastings <Austin_Hastings@Yahoo.com>
08:19 dalek kakapo: review: http://gitorious.org/kakapo/kakapo/commit​/5eda4dc27430cd5944e3c4232a5b06d227a31277
08:20 arnsholt My initial plan is to just make it a linked list with the items in order
08:20 arnsholt But for a later version some kind of balanced binary tree would probably be the best solution
08:25 sorear what about using the Hash PMC?
08:30 arnsholt I thought about that too, but couldn't find anything on using non-strings for hash keys
08:33 bacek arnsholt, Hash.set_key_type()
08:33 Austin_away look at the set integer vtable of hash
08:33 Austin_away ^^ or that
08:33 bacek aloha, humans
08:35 sorear what is your variable type?  Int?
08:35 bacek arnsholt, + you probably want to override VTABLE_get_hashvalue for calculating more meaningful hasvalues.
08:35 bacek hashvalues
08:36 dalek TT #1695 created by moritz++: Segmentation fault when calling .finish on unopend postgres connection
08:36 dalek TT #1695: http://trac.parrot.org/parrot/ticket/1695
08:36 dalek plparrot: 5efe804 | dukeleto++ | .gitignore:
08:36 dalek plparrot: Add plperl6.h to .gitignore
08:36 dalek plparrot: review: http://github.com/leto/plparrot/commit/5​efe8041ba0897118f1591b60fff9a517ad97b6a
08:36 dalek plparrot: e56d120 | dukeleto++ | expected/test.out:
08:36 dalek plparrot: Fix 'make installcheck'
08:36 dalek plparrot: review: http://github.com/leto/plparrot/commit/e​56d120afb13a22efe32e659c1bc32f8a1811cb7
08:36 dalek plparrot: 2d116c7 | dukeleto++ | html/docs.html:
08:36 dalek plparrot: Add a link to docs.html
08:36 dalek plparrot: review: http://github.com/leto/plparrot/commit/2​d116c7f1b00117ab0d3b105ff25343fa331404a
08:45 arnsholt bacek: Ah, thanks. Now I might not have to do it after all =)
08:45 bacek arnsholt, you welcome :)
08:46 bacek arnsholt, if you can update documentation for Hashes it will be good trade :)
08:47 arnsholt Hehe
08:47 dalek plparrot: 6e63680 | dukeleto++ | t/sql/plperl6.sql:
08:47 dalek plparrot: Add test for summing Fibonacci numbers in PL/Perl6
08:47 dalek plparrot: review: http://github.com/leto/plparrot/commit/6​e636809ee3c04d387733598bd7f762fce382024
08:57 dalek rakudo: 68852e4 | tcurtis++ |  (5 files):
08:57 dalek rakudo: Implement $*ARGFILES, and make it the default handle for lines()
08:57 dalek rakudo: Signed-off-by: Moritz Lenz <moritz@faui2k3.org>
08:57 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/6​8852e4e7b0fa5c7845540ad261c14c449d9667b
09:22 nopaste "moritz" at 192.168.1.3 pasted "fantasy syntax for transforming blocks up to a given depth" (49 lines) at http://nopaste.snit.ch/21658
09:23 moritz purl: msg tcurtis http://nopaste.snit.ch/21658 is my idea for a depth limit extension for PAST::Pattern
09:23 purl Message for tcurtis stored.
09:24 dalek pir: 246d56b | bacek++ |  (3 files):
09:24 dalek pir: Add stub for POST::File for storing per-file stuff
09:24 dalek pir: review: http://github.com/bacek/pir/commit/246​d56b924be800fff34ace4f216c11eb0f5e7a3
09:24 dalek pir: ba18c64 | bacek++ | src/POST/Compiler.pm:
09:24 dalek pir: Comment out creating Debug segment to avoid pbc_disassemble crash.
09:24 dalek pir: review: http://github.com/bacek/pir/commit/ba1​8c64804cb82c47b93579652d9b84a256ee169
09:24 dalek pir: a0d16a1 | bacek++ | src/P (2 files):
09:24 dalek pir: Lazily create temporary PMC register used for find_sub
09:24 dalek pir: review: http://github.com/bacek/pir/commit/a0d​16a1613ec22955e6c371a0e5b9bf03e032ebe
09:24 dalek pir: 70796ab | bacek++ | src/P (2 files):
09:24 dalek pir: Revert "Lazily create temporary PMC register used for find_sub"
09:24 dalek pir: This reverts commit a0d16a1613ec22955e6c371a0e5b9bf03e032ebe.
09:24 dalek pir: review: http://github.com/bacek/pir/commit/707​96abac6d339a2583dfc46c4605f49e171e32c
09:41 dalek TT #1696 created by moritz++: Pg.pir should supply error messages
09:41 dalek TT #1696: http://trac.parrot.org/parrot/ticket/1696
09:42 * moritz rakes in karma for breaking Pg.pir
09:43 bacek moritz, hang on. I spent too much time with masak!
09:43 bacek shit...
09:43 bacek You spent
09:46 szbalint :D
09:54 moritz bacek: you should see cognominal++ going crazy on #perl6 and in RT
10:21 dalek pir: acc6a84 | bacek++ | src/POST/File.pm:
10:21 dalek pir: Add POST::File.sub method.
10:21 dalek pir: review: http://github.com/bacek/pir/commit/acc​6a848bc2b5bc9a99e288d71a2fad421ab3eec
10:21 dalek pir: 8e0f409 | bacek++ |  (11 files):
10:21 dalek pir: Start emitting POST::File as top-level node
10:21 dalek pir: review: http://github.com/bacek/pir/commit/8e0​f409814e89af78d82f747b11ff6e083dcf300
11:16 dalek rakudo: 6f66e96 | moritz++ | src/core/IO.pm:
11:16 dalek rakudo: $*ARGFILES as default for get()
11:16 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/6​f66e96d049227c3fe6049c50392b10fbfe8b5f2
11:16 dalek rakudo: 871e2fb | moritz++ | src/core/IO/ArgFiles.pm:
11:16 dalek rakudo: IO::ArgFiles is IO
11:16 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/8​71e2fb0b3f5346b9f900bdfd82bb1770bd00544
11:16 dalek rakudo: 1576d48 | moritz++ | tools/ (2 files):
11:16 dalek rakudo: [autounfudge] run perl6 process with time and memory limit; evil, unix-only hack
11:16 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/1​576d48ad5480c7dac2d71345a9e2118a31b4577
11:30 ambs joined #parrot
11:34 leprevost joined #parrot
11:50 kid51 joined #parrot
12:10 ruoso joined #parrot
12:11 whiteknight joined #parrot
12:21 whiteknight good morning, #parrot
12:22 daxim joined #parrot
12:22 daxim masak sent me over from freenode #perl6
12:22 daxim I managed to produce a crash:  http://stackoverflow.com/questions/3135673#3136410
12:23 daxim backtrace  http://paste.scsys.co.uk/45302
12:24 daxim parrot is trunk@47900
12:35 whiteknight nice backtrace
12:36 whiteknight looks fun
12:52 whiteknight I don't have rakudo set up here, it's going to take a long time to build it
12:57 bluescreen joined #parrot
12:58 moritz takes about 10 minutes to compile if you havve enough RAM (like, 1GB) and an optimized parrot
12:58 dalek rakudo: adf0342 | moritz++ | t (2 files):
12:58 dalek rakudo: run more test files
12:58 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/a​df03425b5bbc87497d43cdd6557e9013f36749b
13:07 * Coke realizes that parrot might actually be getting faster, he's just using a netbook most of the time now.
13:08 whiteknight moritz: I have neither of those things
13:10 Coke rant: configure.pl finds files missing, says it can't continue, then proceeds to continue, in such a way that ^C fails utterly to stop it.
13:11 davidfetter patch!
13:11 Coke davidfetter: was that to me?
13:12 davidfetter yes
13:12 * davidfetter is a big fan of failing early
13:13 Coke if i really wanted it fixed that bad, I'd open a ticket. I'm just ranting.
13:13 davidfetter heh
13:13 Coke that failure will only ever hit developers users SVN, never our end users. not worth the cycles to fix.
13:14 moritz Coke: on linux, when Ctrl+C fails, it often works to hit Ctrl + Z and then kill %1 # or whatever the number of the background job is
13:15 Coke moritz: ^\ is also helpful. yah, there's workarounds. =-)
13:15 purl okay, Coke.
13:15 * Coke tests partcl's current speed.
13:15 Coke t/cmd_array.t takes 2.1s for partcl, and only 0.013s for tclsh8.5
13:16 moritz that's roughly the rakudo/perl5 speed ratio too
13:16 Coke only 160X slower. =-)
13:17 Coke excellent. that means I can just ride coattails as people improve parrot for p6! =-)
13:18 mmcleric joined #parrot
13:27 dalek rakudo: f008ccd | (Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯)++ | Configure.pl:
13:27 dalek rakudo: clarify --parrot-config
13:27 dalek rakudo: http://use.perl.org/~lilstevey/journal/39804
13:27 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/f​008ccde043836cdf4dbf058a6213211181ab909
13:35 jsut_ joined #parrot
13:37 atrodo ^\?
13:37 purl ^\ is that one that dumps core right away. or helpful. yah, there's workarounds. =-)
13:54 dalek rakudo: 4e69c43 | moritz++ | src/core/IO/ArgFiles.pm:
13:54 dalek rakudo: avoid modifying @*ARGS in setting up $*ARGFILES; unbreaks USAGE subs
13:54 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/4​e69c431925b1488e7d9f8c1e4ade01b48c685e8
13:59 bubaflub joined #parrot
14:31 mmcleric_ joined #parrot
14:33 gbacon joined #parrot
14:34 ttbot joined #parrot
14:38 JimmyZ joined #parrot
14:39 dalek parrot: r47911 | khairul++ | branches/gsoc_instrument/src/dynpmc (2 files):
14:39 dalek parrot: Added documentation, additional information (address) + minor cleanup
14:39 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47911/
15:08 hercynium joined #parrot
15:08 AndyA joined #parrot
15:12 dalek parrot: r47912 | NotFound++ | trunk/t/pmc/filehandle.t:
15:12 dalek parrot: test some FileHandle open failing conditions
15:12 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47912/
15:28 Coke AndyA: afternoon!
15:28 purl afternoon is when we eat my lunch.
15:28 Coke purl, botsnark.
15:28 purl snark! snark! snark!
16:02 theory joined #parrot
16:13 whiteknight joined #parrot
16:16 kthakore left #parrot
16:24 dalek rakudo: 6ea4d0c | pmichaud++ | src/core/Block.pm:
16:24 dalek rakudo: Refactor Block.arity and Block.count; make .count return Inf.
16:24 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/6​ea4d0cc1a3f74917b569ec473141ff92e51e5bc
16:24 dalek rakudo: 451b409 | pmichaud++ | src/core/IO/ArgFiles.pm:
16:24 dalek rakudo: Merge branch 'master' of github.com:rakudo/rakudo
16:24 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/4​51b4097cb8be4f2e5879fa2a9a471caf3c07989
16:37 Andy joined #parrot
16:49 dukeleto 'ello
16:50 Chandon joined #parrot
16:54 dalek tracwiki: v4 | cotto++ | HowToDeprecate
16:54 dalek tracwiki: http://trac.parrot.org/parrot/wiki/How​ToDeprecate?version=4&amp;action=diff
16:54 dalek tracwiki: v4 | cotto++ | ParrotDeprecations
16:54 dalek tracwiki: add impact estimates as suggested by austin++
16:54 dalek tracwiki: http://trac.parrot.org/parrot/wiki/Parro​tDeprecations?version=4&amp;action=diff
16:55 ash_ joined #parrot
16:58 chromatic joined #parrot
17:07 ash_ chromatic: i saw your blog post on modern perl's rough draft, i was curious, is there a pdf version of it available yet?
17:08 chromatic Not yet; HTML is easier to generate.
17:08 chromatic PDF should be quick (I have the tools) but the first time I render a book I usually have to tweak things, and i haven't done that yet.
17:09 ash_ got ya, i saw the html pages (and downloaded them), i am still learning perl 5
17:09 chromatic Your feedback will be very valuable.
17:11 dalek tracwiki: v5 | cotto++ | ParrotDeprecations
17:11 dalek tracwiki: add some anchor links to specific deprecations
17:11 dalek tracwiki: http://trac.parrot.org/parrot/wiki/Parro​tDeprecations?version=5&amp;action=diff
17:12 Coke chromatic: ROODE thought mentioning strict sooner or with more forcefulness would be appropriate. (not sure if he'll be motivated to open an issue on github)
17:12 chromatic Noted, thanks.
17:18 ash_ chromatic: one thing i notice about chapter 7 (objects) you jump  right into moose, but never give an example of why its useful (comparing doing something without moose vs doing something with moose), so it almost comes across as "use moose or your doing it wrong" which may be what your trying to get across, but at the same time, from a technical perspective, moose is kinda a magic box that "does the right thing" for OO and you don't know
17:18 ash_ if you don't know much about moose (like i don't), i just hear that moose is how you should do OO
17:19 cotto_work good morning, humans and robots alike
17:19 ash_ most of the perl5 i have written has all been pretty minimal though, and has not reached into cpan for much, (mostly because they are things like transfer scripts, or database moving scripts, or things where there isn't a good generic solution that I could find)
17:21 chromatic The latter half of that chapter shows how to use blessed references.  I could add a short explanation that says "Moose may seem like a magic box, but ..." but I'm not sure how to phrase it.
17:23 ash_ a comparison of Moose vs the built in system would be kinda nice, maybe for one of your early simple examples, like when you talk about attributes, has 'name', is => 'ro', isa => 'Str'; might seem like a short one line to define an attribute, but i can tell its doing a lot under the hood
17:25 ash_ having some sort of basis for why to use moose is good because most other languages (except like Lisp) you don't have multiple OO systems, you have what they gave you
17:26 chromatic I'll think about the best way to do that.
17:26 gbacon joined #parrot
17:29 * PerlJam idly wonders if chapter 7 is all anyone reads.
17:29 atrodo When I read a book, I read Chapter 7 and stop
17:29 ash_ well, the other chapters i have read are more about built in functionality of perl, 7 talks a lot about moose, which isn't installed by default
17:32 chromatic Yes, I see the inconsistency.  That needs addressing in the text.
17:34 treed Chapter 7 is always the lucky chapter.
17:34 treed No need to read anything else.
17:35 chromatic It's my favorite.
17:36 ash_ oh, also, when you talk about hashes, it confused me when I have seen people doing my %hash = ( ); vs my $hash_ref = { }; (a lot of languages { } is a hash, i didn't understand the difference until i had to specific look up the difference), but that might be my influence from other languages creeping in
17:38 ash_ which leads to the difference of $hash{ 'key' }; vs $hash_ref->{ 'key' }; (another difference that i didn't realize until it had bitten me)
17:41 PerlJam chromatic: Here's a random thing I noticed about chap 7: the first several examples in chapter 7 have { package Cat; ... } but at some point you drop the curlies. I didn't see an explanation for why they were there or why there were dropped.
17:44 chromatic Noted, thanks.
17:44 ash_ he talks about scoping in chapter 5, which kinda follows along with that, but its not explicitly addressed in chapter 7
17:48 theory_ joined #parrot
17:50 PerlJam ash_: well, the first example is { package Cat; use Moose; } so, unless he talks about scoping of "use" then it wouldn't seem to make much sense in that (and other) examples.  (I'll wager he talks about scoping in terms of variables)
18:06 fperrad joined #parrot
18:12 cotto_work Would anyone be up for writing the policy for GPG-signed releases?
18:14 dalek TT #1697 created by dukeleto++: Remove the open and close opcodes
18:14 dalek TT #1697: http://trac.parrot.org/parrot/ticket/1697
18:19 Coke Are we going to have some generic ID to do the signing?
18:19 Coke (at this point, I'd be happy with just an md5sum)
18:29 dalek parrot: r47913 | fperrad++ | trunk (2 files):
18:29 dalek parrot: [GzipHandle] add isatty() by inheritance, see TT#1689
18:29 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47913/
18:29 dalek parrot: r47914 | dukeleto++ | trunk/DEPRECATED.pod:
18:29 dalek parrot: [doc][TT #1697] Add a deprecation notice for the open/close opcodes
18:29 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47914/
18:29 whiteknight GPG signed releases?
18:31 cotto_work something to ensure that the bits a user gets are the same as the ones we want them to get
18:31 cotto_work allison also suggested that we should have a way to verify the files in a release
18:34 whiteknight like per-file verification, or an md5 on the tarball?
18:37 bubaflub the later i think would be more useful
18:37 bubaflub some distros require a signed released
18:39 cotto_work I'm not entirely sure.  possibly both
18:44 tcurtis joined #parrot
18:53 hudnix joined #parrot
18:56 mmcleric_ joined #parrot
19:02 dalek parrot: r47915 | darbelo++ | branches/gsoc_nfg/src/packfile/pf_items.c:
19:02 dalek parrot: Lay down the foundations for grapheme table freezing.
19:02 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47915/
19:14 dalek website: darbelo++ | A report from the front lines
19:14 dalek website: http://www.parrot.org/content/report-front-lines
19:23 darbelo dukeleto: ping
19:32 cotto_work #ps in 59
19:32 cotto_work er, 58
19:34 darbelo_ joined #parrot
19:35 cotto_work darbelo, it looks like you've already got more than half of your todo list for this week done ;)
19:36 cotto_work seen pmichaud
19:36 purl pmichaud was last seen on #parrot 2 days, 3 hours, 21 minutes and 21 seconds ago, saying: whiteknight: alas, I have to run off for ~30 mins also  [Jun 27 16:14:44 2010]
19:36 LoganLK joined #parrot
19:36 darbelo_ By next week I'll hate packfiles more than I hate them now. It's a sure thing.
19:37 chromatic I won't mention the next packfile change then.
19:37 whiteknight next packfile change?
19:37 cotto_work PackfileAwesomeSegment
19:38 cotto_work it contains a single bit
19:38 cotto_work set to 0 by default
19:38 chromatic We need to store classes in there somehow.
19:38 darbelo_ Boy that's going to be fun.
19:39 NotFound PackFileFunSegment
19:40 darbelo opbots names
19:40 chromatic It doesn't have to be too bad.  All of that information is in memory somehow anyway, but we don't have to go through :init or :load to reconstitute it.
19:40 Coke opbotsnack names!
19:40 purl :)
19:43 whiteknight chromatic: do you think it's going to be any harder to store classes in there than to just freeze them and jam them in with the rest of the constants?
19:44 chromatic I'm not sure.
19:45 ash_ joined #parrot
19:46 whiteknight I imagine that the hardest part is creating those classes at compile-time, though we can simulate that with :immediate subs for now until we have reasonable syntax for it
19:46 whiteknight ...of course, I don't know if we want to be adding syntax to PIR, at least not to IMCC. PIRATE maybe
19:47 whiteknight we could have that prototyped in a few days if we wanted
19:47 cotto_work PIRATE's nice for prototyping.
19:47 chromatic Let's work on that after 2.6 comes out.
19:47 somebody_ joined #parrot
19:47 whiteknight chromatic: you have a syntax in mind?
19:47 chromatic I'd like to see the new GC merged, if possible, and get that STRING API in place.
19:47 chromatic I have some ideas.
19:48 cotto_work wasn't tuning the blocker for a gc_massacre merge?
19:48 chromatic Yeah, but performance looked on par or slightly better than trunk last time I looked.  bacek will know.
19:48 cotto_work Could it be merged and simply made non-default until it's ready?
19:49 chromatic I suppose, if we tested it rigorously.
19:50 bacek ~~
19:50 bacek Good morning, humans...
19:50 cotto_work speak of the robot
19:50 bacek clock?
19:50 purl bacek: LAX: Tue 12:50pm PDT / CHI: Tue 2:50pm CDT / NYC: Tue 3:50pm EDT / LON: Tue 8:50pm BST / BER: Tue 9:50pm CEST / IND: Wed 1:20am IST / TOK: Wed 4:50am JST / SYD: Wed 5:50am EST /
19:50 cotto_work you have 40 minutes until #ps
19:50 bacek gc_massacre can be merged now (without defaulting to ms2 gc)
19:50 cotto_work in case you want to go back to sleep or something
19:51 bacek I want to go some warm place. It's freaking cold here.
19:52 tcurtis bacek: it's probably approximately 90°F right now in Tennessee. Trade?
19:53 Chandon Are VTABLE functions in PMC files restricted to a specific set of names?
19:53 cotto_work Chandon: yes.  see src/vtable.tbl
19:53 cotto_work METHODs aren't
19:54 ash_ tcurtis: its almost 100°F here in alabama, so...
19:54 Chandon Excellent. That explains why my computer just exploded in a rain of fiery shrapnel.
19:55 bacek tcurtis, yes!
19:55 bacek chromatic, ping.
19:56 chromatic pong
19:57 dukeleto darbelo: pong
19:57 bacek chromatic, what do you think about this idea for GC triggering: calculate total amount of allocated memory (PMC/attributes/STRING/buffers)
19:57 bacek Trigger GC when we reached some amount.
19:57 chromatic I'm all for that.  That was the big tuning I did a few months ago.
19:58 whiteknight bacek: you can come to my house any time. It's 90F here
19:58 bacek chromatic, we can also have upper limit for GC.
19:58 chromatic I like that too.
19:58 bacek whiteknight, is it about 32C?
19:59 bacek purl, change 90F to celcius
19:59 purl bacek: that doesn't look right
19:59 bacek stupid girl...
19:59 whiteknight bacek: yes
19:59 whiteknight plenty hot
20:00 bacek whiteknight, I do like it! :)
20:00 khairul joined #parrot
20:00 * whiteknight is heading home now. Later
20:00 cotto_work good morning, khairul
20:01 khairul hello cotto
20:01 cotto_work Do you have a blog post cooking?
20:02 khairul not yet. fighting my event handling currently.
20:08 cotto_work bacek: what's your guess about how long until PIRATE is self-hosting?
20:09 bacek cotto_work, week or so.
20:11 bacek cotto_work, major challenge is to update PCT to use HLL->PAST->POST->PBC, instead of HLL->PAST->POST->PIR->(pirate)POST->PBC.
20:12 cotto_work it sounds hard
20:12 bacek Looks like we have to push some de-sugaring to POST level.
20:12 cotto_work especially since it'll be difficult to make that incremental
20:12 bacek cotto_work, no. If we implement emitting PIR from new POST we can make it incremental.
20:13 cotto_work we can make incremental changes to PCT's code that won't break the test suite?
20:13 cotto_work I guess that's true.
20:14 bacek it is
20:16 darbelo dukeleto: Do you have any plans to keep working on tapir?
20:20 darbelo I updated it to work with parrot HEAD as part of the plumage ressurection effort, but I don't know if it'll be workth it to keep updating it everytime parrot moves from under it, or I should just move plumage off it.
20:21 chromatic I might be a few minutes late to #ps
20:21 mikehh chromatic: going through the draft of your book, got to Chapter 3 - need a break, will continue later
20:22 chromatic thanks
20:26 ambs joined #parrot
20:29 cxreg any ideas about using NCI against symbols present in the embedding process, as opposed to a .so?
20:30 cxreg like, say, NCI_* in postgres
20:30 cxreg er make that SPI_*
20:30 chromatic POSIX suggests you can pass a NULL pointer to dlopen to access the current process's symbols, but Mac OS X 10.3 and earlier (I believe) didn't behave.
20:30 cxreg hm
20:31 Tene That *does* work on linux, though.
20:31 chromatic It's POSIX behavior.
20:31 NotFound And in other unix.
20:34 cxreg i guess plparrot can say "does not compute on old OSX" then
20:34 cxreg 10.4 is 5 years old
20:34 ash_ cxreg: whats the problem your trying to solve?
20:35 cxreg ash_: SPI bindings for plparrot
20:35 ash_ OS X dropped support of 10.3 a while ago, 10.4 isn't supported either technically
20:35 cxreg i'm mostly aiding others, more than writing it myself
20:35 chromatic Yeah, I can't imagine supporting anything older than 10.4.
20:35 cxreg ok thanks.  worth a shot :-)
20:36 dukeleto darbelo: i am not sure about tapir.
20:37 cxreg not that it's totally clear how loadlib is translated to dlopen, but i'll rtfs
20:38 Tene cxreg: If you could also submit a doc patch *making* it clear once you understand it, that would be great.
20:38 darbelo dukeleto: Okay. FWIW, I made it work and updated the copy in plumage. We can reevaluate whenever parrot changes break it again.
20:38 ash_ dlfunc and dlsym actually look at the symbol's
20:39 ash_ you'd have to add a special symbol or something if you want to pass NULL
20:39 cxreg ash_: yes, but they need an argument (filehandle?) returned from loadlib
20:39 cxreg hrm
20:40 cxreg ok
20:40 dukeleto cxreg: i am fine with not caring about OS X 10.3
20:42 GeJ Bonjour everyone.
20:44 Tene You could probably make a patch to detect PMCNULL passed to dlsym opcode and pass NULL instead.
20:44 darbelo I thought we had that at some point.
20:45 Tene Oh, I don't know if it's there or not.
20:45 darbelo dukeleto: On the GSoC front, is TPF/PaFo going to do/requre anything sppecial for the midterms?
20:48 ash_ darbelo: is right, it does do that already, if you pass a "" it passes NULL to the dlopen
20:48 dukeleto darbelo: I would like a stack of $50's and some beer delivered to my private residence
20:50 eggyknap joined #parrot
20:50 darbelo dukeleto: I have an empty stack of 50's I'm not using, does that work for you?
20:53 theory joined #parrot
20:54 NotFound dukeleto: sorry, I spent all my beer because of the Spain-Portugal match.
20:57 Coke (to clarify from -ps, how the actual conversion of a pod file to an html file is fired off. lib/parrot/Docs is a twisty maze of odd inheritance.
20:57 chromatic Yeah, that whole pile of code mystifies me.
20:58 cxreg ash_: sweet, thanks!
20:58 Coke chromatic: soon it will die in fire.
20:59 cotto_work coke++
20:59 cotto_work It needs to.
20:59 darbelo Coke++ ; fire++
20:59 Coke I've been distracted since sunday-before-yapc because diephouse showed up and we hacked on partcl.
21:00 nopaste "cotto_work" at 192.168.1.3 pasted "my #ps questions in case someone wants to adopt them" (7 lines) at http://nopaste.snit.ch/21678
21:02 chromatic TT #1694 looks like it needs discussion of the semantics.
21:04 NotFound The intended semantic is clear to me: it must work the same way when using the pir source than when using the pbc file.
21:04 NotFound The question is: Can we fix without breaking too many things?
21:04 chromatic If there's no HLL specified, right>
21:09 atrodo Since cotto_work mentioned github, I thought I'd point out what they announced today: http://github.com/blog/674​-introducing-organizations
21:10 ash_ neat atrodo
21:14 bacek github.com/parrot already taken...
21:16 dukeleto bacek: yeah, i was wondering about that
21:16 dukeleto anybody know who has the parrot github account?
21:16 bacek let's take PaFo?
21:16 dukeleto that or parrotvm
21:16 Coke decommute?
21:17 dalek TT #1698 created by petdance++: Investigate SAFECode
21:17 dalek TT #1698: http://trac.parrot.org/parrot/ticket/1698
21:17 dalek TT #1699 created by dukeleto++: Update release manager guide for signing releases and providing SHA sums
21:17 dalek TT #1699: http://trac.parrot.org/parrot/ticket/1699
21:17 Coke There's a parrot github account?
21:17 bacek Coke, it's "dead" account without any repos.
21:18 Coke probably someone squatted. maybe dukeleto?
21:19 Coke gotta run, later.
21:20 cosimo does anyone have any tips or help for me on #1686 ?
21:21 cosimo I'm trying to understand what's happening, but I'm missing a bit of background...
21:21 chromatic Hard to say without some PIR.
21:23 eggyknap left #parrot
21:23 cosimo chromatic: what pir exactly? I tried to put all the relevant code in the ticket
21:24 chromatic Yeah, that's the problem.  It desugars to lots of PIR which makes it difficult to find the culprit.
21:24 cosimo well, if that helps, I can attach a full .pir file too
21:25 cosimo I guess it doesn't :)
21:25 chromatic It might, but the less PIR the easier it is to debug.
21:27 cosimo does find_method('signature') ring some bell?
21:28 tcurtis cosimo: can you reproduce the problem in pure PIR? If so, it would make it a lot easier to debug.
21:29 cosimo tcurtis: the library's own test (t/library/md5.t) works fine. it only fails from rakudo
21:30 gbacon joined #parrot
21:30 Util chromatic: what changes are you considering to STRING API?
21:30 cosimo at least I have a counterexample. MIME::Base64 works fine in rakudo too.
21:31 bacek Util: str_compare(a, a_offset, a_length, b, b_offset, b_length)
21:31 chromatic It's an addition, not a change.
21:31 cosimo tcurtis: so I'll try to focus on what differs between Digest::MD5 and MIME::Base64
21:32 bacek Most generic comparison function to avoid creating temporary GCable.
21:32 ash_ if there is a parrot organization on github, can you say a repo belongs to that organization? (like my parrot fork of dukeleto's parrot mirrior)
21:34 NotFound First difference I see: Digest::MD5 load dynops
21:35 NotFound .loadlib 'bit_ops'
21:37 NotFound Possible workaround: change pir::load_bytecode('Digest/MD5.pbc'); to pir::load_bytecode('Digest/MD5.pir');
21:38 cosimo NotFound: i think I tried that, without success
21:39 cosimo NotFound: actually there's a slight difference, I get 'Null PMC access in invoke()' now, not 'Null PMC access in find_method(signature)'
21:41 NotFound cosimo: maybe that one is because of TT #1694... Try to add .HLL 'parrot' to Digest/MD5.pir
21:42 cotto_work wrt hosting Parrot on github needing a migration, I'd be willing to make sure that we had a plugin that made old ulrs to the svn repo browser redirect correctly.
21:43 cosimo NotFound: trying...
21:43 purl i guess trying is just as important as succeeding sometimes.  :)
21:43 cosimo sure :)
21:45 cosimo NotFound: cool, one step further, now I get 'Null PMC access in set_string_native()'
21:45 NotFound cosimo: nice, maybe it works after we reach all possible parrot error messages X-)
21:46 cotto_work I hope nobody understood me as advocating migrating anything other than version control over to github.
21:48 dalek partcl-nqp: f9c3d4a | mdiep++ |  (2 files):
21:48 dalek partcl-nqp: Get [string map] working
21:48 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/f9c3d4af03f6c60e4ac7d02cba227f1f59a4fcf5
21:49 NotFound cosimo: Do you have a backtrace for that last error?
21:53 cosimo NotFound: no
21:55 cosimo NotFound: how can I get one?
21:55 tcurtis moritz: ping
21:56 NotFound cosimo: I mean the '  in ....' lines after the error message.
21:56 Coke hey, mdiep is BACK!
21:57 * Andy is building LLVM again
21:57 NotFound cosimo: other thing you can test: put the class and the test together in one file.
21:58 tcurtis Anyone, especially HLL devs, care to comment on the new functionality for Tree::Pattern moritz suggests in http://nopaste.snit.ch/21658
21:59 moritz tcurtis: pong
21:59 tcurtis I'm going to implement it soon, and was just looking for feedback on interface.
22:00 * moritz lost his touchpad
22:01 tcurtis moritz: I'm going to implement :depth_limited_by soon(once I decide on the name for the option), and wanted to check if you had any other name ideas that might be preferable for the option?
22:02 nopaste "cosimo" at 192.168.1.3 pasted "Digest::MD5 problems: Null PMC access in set_string_native" (31 lines) at http://nopaste.snit.ch/21680
22:02 cosimo NotFound: tried that too, no difference
22:03 chromatic Which one is the Null PMC?
22:03 NotFound cosimo: This is with the .HLL 'parrot' addition in MD5.pir ?
22:04 cosimo NotFound: yes
22:04 cosimo chromatic: it's "$P1 = f(str)"
22:04 tcurtis Also, do you think allowing Sub(or other invokable) arguments would be useful?
22:05 chromatic It can't find md5sum then.
22:05 NotFound cosimo: the namespace seems to be just 'Digest', without the 'MD5' part
22:06 cosimo NotFound: that's a change I made
22:06 NotFound Try: f = get_root_global ['parrot'; 'Digest'], 'md5sum'
22:07 cosimo chromatic: I double checked just now
22:07 cosimo it seems to go through all the function now, the problem seems to be in the '%r = ...' step
22:07 moritz tcurtis: :descend_to
22:08 NotFound Looking again, is _md5sum, not md5sum
22:08 moritz tcurtis: :down_to, :stop_at
22:10 nopaste "cosimo" at 192.168.1.3 pasted "Another update on the Digest::MD5 problem" (49 lines) at http://nopaste.snit.ch/21681
22:11 tcurtis moritz: :stop_at makes it sound like it stops all trees once it hits that. Maybe :descend_until? I think "until" might better communicate that the thing being descended to isn't a specific position but a pattern that should match the point at which we stop descending.
22:11 cosimo NotFound: chromatic: it's definitely crashing at '%r = $S0'
22:12 tcurtis cosimo: does 'my $foo = Q:PIR { %r = "foo" }' work?
22:13 moritz tcurtis: +1 to :descend_until
22:14 moritz :depth_stopper
22:14 cosimo tcurtis: AH!, no it doesn't
22:14 cosimo tcurtis: same 'Null PMC access in set_string_native()' error
22:15 cosimo NotFound: btw, changing back to load the .pbc bytecode makes the PIR crash at the md5sum call, so you're right
22:16 NotFound Yeah, the dynop problem again.
22:16 dukeleto oh, the lovely dynop problem
22:17 tcurtis moritz: I think I'll go with :descend_until(that way, if we later need something that immediately stops all matching as soon as it hits a node that matches something, it can be :until.
22:17 cosimo NotFound: works now! I replaced '%r = $S0' with '.return ($S0)'
22:18 moritz tcurtis: ok, good
22:18 cosimo but removing all residual perl6 code from the function, so it consists only of a single Q:PIR block
22:18 chromatic Let PCC box the string into a PMC rather than trying to assign to an uninitialized PMC.
22:19 moritz cosimo: returning String registers from Q:PIR block is going to blow up rakudo - you need to box it first
22:19 cosimo chromatic: sorry I don't understand. That means I should use '%r = $S0' ?
22:19 moritz %r = box $S0
22:21 cosimo chromatic: moritz: yay! it works! finally
22:21 cosimo thanks so much
22:22 NotFound I think that if we don't have a fix for the dynop issue or for TT #1694 we should add a .HLL 'parrot' directive to all pir libs.
22:22 cosimo it has been bugging me for a couple of weeks now... :)
22:22 chromatic I think I can fix #1694 easily.
22:23 NotFound chromatic: yes, but I'm not sure if we'll break a lot of other things by doing it.
22:23 chromatic I can argue they're broken anyway.
22:23 chromatic Without knowing what they are....
22:24 NotFound chromatic: well, we can try and let cotto use his new chainsaw if we fail
22:25 chromatic True.
22:25 * cotto_work heads to the store for some chainsaw grease
22:26 NotFound Grease lightnin'!
22:27 cosimo NotFound: should I file a ticket about the .HLL 'parrot' in Digest/MD5.pir, or?
22:28 NotFound cosimo: yes, to make sure we don't forget it.
22:29 NotFound cosimo: or just add a comment to TT #1686
22:33 rjbs joined #parrot
22:34 rjbs Hi!  I'm updating my public records of the results of TPF grants, and I have two ancient (2003) Parrot-related grants.
22:34 rjbs I wonder if anybody remembers whether the grant work was completed or not.
22:34 cotto_work what are they?
22:34 purl they are huge ants, here to bite our heads off
22:34 rjbs One is Leopold Tötsch grant to "rework Parrot packfile code"
22:35 rjbs The other was Daniel Grunblatt's grant to "port Parrot JIT to IA-64 and HPAA"
22:35 rjbs I realize these are ancient grants and not very relevant to modern Parrot, but I'm just trying to get the records of grants completed.
22:36 dukeleto rjbs: i started working on parrot much after those grants, but I am pretty sure that Parrot JIT never worked on ia64 or HPAA
22:36 dukeleto rjbs: i don't know much about the the packfile grant
22:36 moritz right; only i386 and PPC had JIT
22:36 cotto_work We had some kind of limited (probably broken) support though.
22:37 rjbs Okay, I will tentatively mark this one failed.
22:37 cotto_work maybe chromatic, coke or allison would know
22:38 chromatic I don't remember either one.
22:38 cosimo NotFound: and done
22:38 rjbs Both, incidentally, are listed here: http://www.perlfoundation.or​g/2003_grants_third_quarter
22:40 chromatic I remember we had a native runcore... what was it called?  I'm sure Daniel Grunblatt made that work.
22:41 chromatic Leo's grant there looks done.
22:41 sorear Is Leo still involved much with Parrot?
22:42 rjbs chromatic: So you think that Leo's grant work was likely successful?
22:42 chromatic Yes.
22:43 rjbs ARGH YAML
22:44 dukeleto sorear: i don't beleive leo has been involved for a while
22:45 rjbs Great, thanks!  I have marked those both with statuses and comments about the uncertainty.
22:45 rjbs now only one non-current grant remains without a status, and that's audrey's, and I've emailed her
22:46 chromatic I'm certain that Leo completed his.
22:46 chromatic I know that at one point Daniel had met his stretch goal
22:47 dalek rakudo: 36998b8 | jonathan++ | src/core/operators.pm:
22:47 dalek rakudo: Make [&&] and [and] work. Patch courtesy of (Alex Kapranoff)++.
22:47 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/3​6998b8bb9fda96d69adc5645bb43d5c8103f469
22:50 tcurtis moritz: descend_until should or should not apply the transformation to a node that matches bother the pattern to be matched and the descend_until pattern?
22:50 tcurtis s/bother/both/
22:50 moritz tcurtis: maybe that could be controlled with an :exclusive flag
22:51 moritz tcurtis: in my example I assumed that it would be included
22:52 jsut joined #parrot
22:52 moritz to search all the blocks within other blocks, but not recursively
22:52 moritz and in the other cases matcher and depth limiter are mutually exclusive
22:53 dalek parrot: r47916 | darbelo++ | branches/gsoc_nfg/t/native_pbc (4 files):
22:53 dalek parrot: Run mk_native_pbc.
22:53 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47916/
22:56 tcurtis moritz: I'm considering implementing a :no_recursion(or something similar) for now, since it both is sufficient(and even simpler) for your use case and has more obvious meaning. If descend_until is eventually needed, :no_recursion can probably be an alias for the inclusive version of descend_until(whether that's descend_until or descend_until_including or whatever).
22:57 moritz tcurtis: what would :no_recursion mean?
22:57 tcurtis "Don't match/transform recursively."
22:58 moritz "only consider direct child nodes"?
22:59 rjbs chromatic: Thanks again.  &
22:59 rjbs left #parrot
22:59 moritz that wouldn't be enough for my case
22:59 tcurtis "Once you hit a matching node, don't check to see if its children match."
22:59 tcurtis The name could use improvement.
23:00 whiteknight joined #parrot
23:00 moritz consider { my $x; { my $y } }
23:00 moritz when I'm currently at the PAST::BLock for the outer { ... }
23:00 moritz and want to find $x, but not $y
23:00 moritz then this mode won't help me
23:01 moritz because the inner block is not a child node of $x
23:02 moritz I'd have to work around by searching for either PAST::Var OR PAST::Block, and make a distinction inside the transformation routine
23:02 moritz which certainly feels clumsy
23:02 tcurtis Oh. I didn't see $find_direct_vars.
23:02 tcurtis Nevermind.
23:05 PerlJam joined #parrot
23:05 tcurtis I think descend_until triggering on the node that matches the limiter does make sense(after all, it's not descending anymore then).
23:06 dalek joined #parrot
23:07 kid51 joined #parrot
23:10 pmichaud joined #parrot
23:10 tcurtis moritz: also, I think I'll add a .transformChildren method that allow your example to descend past $/.orig without having to add further options.
23:11 ruoso joined #parrot
23:11 jsut_ joined #parrot
23:12 tcurtis Or would you like an option for that? :ignore_top?
23:13 * tcurtis isn't very good at coming up with names.
23:13 moritz :mindepth(1)
23:13 tcurtis moritz: that's better.
23:14 cotto_work it's good to mind those epths.
23:14 moritz or :min_depth(1) for cotto_work++ :-)
23:15 dukeleto joined #parrot
23:15 moritz anyway, time to sleep (we don't seem to have much shared uptime... :-)
23:15 tcurtis Good night. I'll hopefully have all that implemented by tomorrow.
23:17 ash_ :min-depth(1) ?
23:18 ash_ nqp: # this channel needs an evalbot :P
23:18 kid51 chromatic:  ping
23:19 sorear opbots names
23:19 sorear ash_: ask moritz
23:19 ash_ when he's not tired i will
23:20 cotto_work an nqp bot would be nice
23:20 Util joined #parrot
23:20 ash_ #perl6 on freenode has one
23:20 tcurtis ash_: hmm. didn't realize NQP supported hypens in named arguments.
23:20 cotto_work maybe bacek can teach aloha a new trick
23:21 ash_ tcurtis: it does, in all the same places perl6 allows them if i am not mistaken
23:21 tcurtis ash_: you seem to be correct.
23:25 tcurtis ash_: I think I'll go with min_depth because hyphens are unfortunately rather rare as a convention for separation of words. And foo_bar is what I'm mostly using already.
23:26 jsut joined #parrot
23:26 ash_ in perl6's built-in's they use - for almost everything (i think the only exceptions are for things in perl5)
23:27 dalek parrot: r47917 | jkeenan++ | failed to fetch changeset:
23:27 dalek parrot: Merge cfunctionsdocs branch into trunk.  All files now pass t/codingstd/c_functions_docs.t.  See �http://trac.parrot.org/parrot/ticket/324.
23:27 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47917/
23:27 dalek parrot: r47918 | jkeenan++ | branches/cfunctionsdocs:
23:27 dalek parrot: Branch has been merged into trunk and is no longer needed at HEAD.
23:27 purl i already had it that way, dalek.
23:27 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47918/
23:33 Coke (didn't I already post a solution to this md5sum issue on list?)
23:35 Coke (people got paid money for hacking on parrot? amazing. =-)
23:46 * tcurtis is getting paid for hacking on Parrot right now.
23:46 tcurtis Well, the getting paid isn't happening right now, but hacking on Parrot for which I am getting paid is happening right now.
23:51 Coke msg allison - does Pod::Simple::HTML have docs somewhere other than CPAN?
23:51 purl Message for allison stored.
23:52 Coke tcurtis: these people were not students, but wrote code that has probably been ripped out at least once by now.
23:53 gbacon joined #parrot
23:54 Psyche^ joined #parrot
23:54 tcurtis Coke: I hope to differ from them in at least two ways!

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

Parrot | source cross referenced