|
Parrot 2.8.0 will be released at "2010-09-21 08:00 UTC" | parrot.org Log: irclog.perlgeek.de/parrot/today | Nopaste: nopaste.snit.ch:8001 | close 25 tickets; remove deprecated items (especially CodeString); record deprecations; polish for 2.8 release Set by moderator on 20 September 2010. |
|||
| whiteknight | NotFound: :) | 00:01 | |
| the word isn't bad. My use of the word was bad. You can call Winxed anything you want to call it | 00:02 | ||
|
00:03
hercynium joined
|
|||
| whiteknight has to go. Goodnight | 00:07 | ||
|
00:07
whiteknight left,
muixirt_ joined
|
|||
| dalek | website: jkeenan++ | Parrot Design Documents in Need of Overhaul | 00:08 | |
| website: www.parrot.org/content/parrot-desig...d-overhaul | |||
|
00:10
patspam joined,
patspam left
00:11
muixirt left,
muixirt_ is now known as muixirt
00:23
kid51 is now known as kid51_at_dinner
00:37
jsut joined
00:42
jsut_ left
00:46
muixirt left
|
|||
| dukeleto | aloha, msg chromatic according to my data, the stress_strings.pir slowdown happened in r48585 | 00:47 | |
| aloha | dukeleto: OK. I'll deliver the message. | ||
| davidfetter waves to dukeleto from the caltrain | 00:50 | ||
| dukeleto | davidfetter: werd | 01:04 | |
|
01:06
davidfetter left
01:33
kid51_at_dinner is now known as kid51
|
|||
| dalek | TT #1231 closed by jkeenan++: src/pmc/hash.pmc: Use freeze in get_repr() (for hashes) | 01:59 | |
| TT #1231: trac.parrot.org/parrot/ticket/1231 | |||
| ash_ | is there a specific person thats sorta the 'goto person' for os x issues for parrot? | 02:13 | |
|
02:34
s1n joined
02:35
davidfetter joined,
janus left
|
|||
| dukeleto | ash_: i used to be one of them, but went back to linux | 02:40 | |
| ash_: bubaflub and brianwisti are os x peeps, methinks | 02:41 | ||
| ash_ | alright, well, i was thinking of looking into getting parrot to properly build as 32 bit on 64 bit OS X, as well as maybe making a proper fat binary | ||
| dukeleto | ash_: that would be appreciated | 02:42 | |
|
02:42
betterworld left
|
|||
| dukeleto goes afk | 02:43 | ||
| kid51 | ash_: You're more than welcome to take a whack at all the 'Darwin' platform Trac tickets :-) | ||
|
02:43
x3nU_ left
|
|||
| ash_ | i'll look at them and see if i can find anything i'd be able to tackle, i still need to get my GSoC changes merged into the trunk :-x | 02:44 | |
| what other darwin issues are there? | 02:47 | ||
| kid51 | You can do a query in Trac for that | 02:48 | |
|
02:48
janus joined
|
|||
| kid51 must sleep | 02:48 | ||
| purl | Sleep is for the weak. | ||
|
02:53
x3nU joined
02:59
betterworld joined
03:19
kid51 left
03:23
Andy joined
03:45
silug left
03:48
sjn_ left
03:50
s1n left
|
|||
| sorear | <echosystm> python is a lie | 03:59 | |
| classic | |||
|
04:03
ash_ left
|
|||
| plobsing | oh noes. the snake is a lie! | 04:03 | |
|
04:04
ash_ joined
04:26
ash_ left
04:56
hercynium left
04:57
necrolyte joined
04:58
lucian joined
05:02
necrolyte left
05:12
lucian left
05:21
Andy left
05:53
theory left
|
|||
| dukeleto | blarg | 05:53 | |
|
06:58
fperrad joined
07:36
tadzik joined
07:40
gerd joined
|
|||
| gerd | I want to start the checkout for release 2.8.0. Can I start with it now? | 07:45 | |
| Nobody is again it - so I will start the update to version 2.8.0 | 07:48 | ||
| "make world docs html" is still running | 07:55 | ||
| "make fulltest" is still running ... | 07:57 | ||
| "make fulltest" finished successful - so I do the commit now | 08:04 | ||
| The commit is done, I will run the tests now again with the sources from the 2.8.0 tarfile | 08:07 | ||
| dalek | rrot: r49192 | gerd++ | trunk (10 files): switch the version to 2.8.0 |
||
|
08:17
Tene left
08:20
mikehh left
|
|||
| gerd | tests from the tarfile finished, I tagged the release | 08:22 | |
| dalek | rrot: r49193 | gerd++ | tags/RELEASE_2_8_0: tagged release 2.8.0 |
08:24 | |
| gerd | ftp server is triggered; I will start writing the HTML page | 08:27 | |
| cotto | nice | 08:31 | |
| gerd++ | |||
| It's barely Tuesday for me and we've already got a release. | 08:32 | ||
|
08:35
mikehh joined
08:42
Tanami left
08:47
Tanami joined
08:58
dalek left,
dalek joined
09:00
dalek left
09:01
dalek joined
09:25
dip joined
09:30
muixirt joined
|
|||
| muixirt | is someone working on cardinal? | 09:33 | |
| cotto | github.com/cardinal/cardinal/ | 09:41 | |
| looks like nothing recent | |||
| mikehh | All tests PASS (pre/post-config, make corevm/make coretest, smoke (#141) fulltest) at r49194 - Ubuntu 10.10 beta amd64 (g++-4.5 with --optimize) | 09:42 | |
| dalek | website: gerd++ | Parrot 2.8.0 "Tui Parakeet" Released! | 09:44 | |
| website: www.parrot.org/news/2020/Parrot-2.8.0 | |||
| Tanami | :D | 09:47 | |
| hooray | |||
| cotto | no quote? | 09:49 | |
| we'll let it go this time | |||
| gerd | I changed the website to: www.parrot.org/news/2010/Parrot-2.8.0 | 09:58 | |
| I will send the e-mail after lunch | 09:59 | ||
| cotto | clock? | ||
| purl | cotto: LAX: Tue 2:59am PDT / CHI: Tue 4:59am CDT / NYC: Tue 5:59am EDT / LON: Tue 10:59am BST / BER: Tue 11:59am CEST / IND: Tue 3:29pm IST / TOK: Tue 6:59pm JST / SYD: Tue 7:59pm EST / | ||
| gerd | Happy hacking, bye! | 10:00 | |
| cotto | Mmmm. Future parrot. | ||
| bacek | aloha, humans | 10:01 | |
|
10:01
gerd left
|
|||
| cotto | aloha, bacek | 10:01 | |
| bacek | cotto, hi | ||
| I would like to declare gc_massacre mergeable back to trunk. | |||
| cotto | ship it | ||
| jnthn | bacek: What GC improvements does the branch bring? | 10:02 | |
| jnthn wonders if it fixes the recursion problem... | 10:03 | ||
| moderator | Parrot 2.8.0 released | parrot.org Log: irclog.perlgeek.de/parrot/today | Nopaste: nopaste.snit.ch:8001 | test gc_massacre branch | close 25 tickets; remove deprecated items (especially CodeString); | 10:03 | |
| bacek | jnthn, nope. I reduced initial scope for branch. | 10:03 | |
| Basically - it's revamp of current Fixed_Pool/Variable_Pool nonsense which will allow to implement more sophisticated GCs little bit more easy. | 10:04 | ||
| E.g. GenGC | |||
| OTOH, I can fix recursion problem straight after merging back. | |||
| In new branch. | |||
| jnthn | It'd be wonderful to have that fixed. | 10:06 | |
| bacek++ | |||
| cotto | what's the recursion problem? | 10:07 | |
| jnthn | cotto: If you mark a long linked list or a deep tree, the marker recurses on the C stack, and then stack overflows. | 10:08 | |
| (We actually do hit it in Rakudo...) | |||
| cotto | I remember that one. | ||
|
10:08
tadzik left
|
|||
| bacek | cotto, trac.parrot.org/parrot/ticket/1723 | 10:10 | |
| jnthn, however trac.parrot.org/parrot/ticket/1789#comment:9 :) | 10:11 | ||
| afk # dinner | |||
| dalek | rrot: r49195 | bacek++ | branches/gc_massacre/t/op/string_cs.t: Sync test with trunk |
10:12 | |
| rrot: r49196 | bacek++ | branches/gc_massacre/t/op/string_mem.t: Fix string_mem test to use C<skip> instead of C<todo> |
|||
| jnthn | bacek: ooh! :-) | 10:14 | |
| muixirt | there is 2 arg version of the function Parrot_str_new_noinit in api.c and a 3 arg version in parrot/2.7.0/parrot/string_funcs.h | 10:20 | |
| (i get an error build lua because of this (?)) | |||
| erm, mixed up the versions | 10:27 | ||
| so that function has changed and lua didn't keep up | |||
| muixirt confused | 10:28 | ||
| purl | You won't be after this episode of Soap! | ||
|
10:36
kid51 joined
|
|||
| kid51 | r49191: Darwin/PPC: make fulltest PASS | 10:36 | |
| muixirt | for the record: lua builds fine with parrot 2.8.0 | 10:37 | |
|
10:54
sjn_ joined
10:58
ruoso left
11:00
whiteknight joined
|
|||
| dalek | rrot: r49197 | mikehh++ | branches/gc_massacre/src/gc/gc_ms2.c: [gc_massacre] fix codetest failures - replace ms with ms2 in ASSERT_ARGS and documentation |
11:03 | |
| rrot: r49198 | jkeenan++ | trunk/config/gen/makefiles/root.in: Eliminate LIBPARROT dependency in LIBNCI_TEST_SO. See ļæ½trac.parrot.org/parrot/ticket/1130. (make reconfigure) |
|||
| rrot: r49199 | mikehh++ | branches/gc_massacre/src/gc/fixed_allocator.c: [gc_massacre] add ASSERT_ARGS |
|||
| nopaste | "kid51" at 192.168.1.3 pasted "gc_massacre branch: failure in t/pmc/filehandle.t" (55 lines) at nopaste.snit.ch/23504 | 11:11 | |
| whiteknight | good morning, #parrot | 11:12 | |
| my amd64 laptop is broken into dozens of little pieces, otherwise I would run some tests for the gc_massacre branch | |||
| kid51 | That gc_massacre failure was at r 49196 | 11:13 | |
| Linux/i386 | |||
| whiteknight | kid51 # nice blog post! | 11:16 | |
| kid51 | whiteknight thx | 11:29 | |
| mikehh | bacek: ping | 11:31 | |
| ttbot | Parrot trunk/ r49179 i386-linux-thread-multi make error tt.taptinder.org/file/cmdout/396135.txt ( tt.taptinder.org//buildstatus/pr-Pa.../rp-trunk/ ) | 11:37 | |
|
11:55
bkuhn joined
|
|||
| mikehh | gc_ massacre - apart from c++ comments in src/gc/gc_ms2.c all tests PASS (coretest/test/fulltest) at r49199 - Ubuntu 10.10 beta amd64 (gcc-4,5) | 11:56 | |
| kid51: the t/pmc/filehandle.t test passes for me in gc_massacre (on amd64 though) | 11:59 | ||
| kid51 | mikehh: I've tried it twice. Same results both times. | 12:02 | |
| That most recent ttbot report is nearly 20 hours old and no longer relevant | 12:06 | ||
|
12:07
gerd joined,
gerd left
|
|||
| mikehh | kid51: did a prove on it a couple of times - also passed in all 3 core tests in fulltest - but again I haven't tried it on i386 | 12:08 | |
|
12:08
bkuhn left
|
|||
| kid51 | 3rd time fail on linux/i386 -- and I worked from make realclean up | 12:17 | |
| kid51 to $job | |||
|
12:17
kid51 left
12:19
kid51 joined
12:20
kid51 left
12:30
ruoso joined
12:36
bkuhn joined
|
|||
| whiteknight | I'll give it a look on linux/i386 in a little while | 12:38 | |
|
12:50
ash_ joined
12:56
tadzik joined
13:02
patspam joined
13:16
davidfetter left
13:18
Psyche^ joined,
Patterner left,
Psyche^ is now known as Patterner
|
|||
| Coke | Docs on parrot.org are showing 2.7.0-devel, WHOOPS. | 13:31 | |
| (those have traditionally been release-only versions of the docs.) | |||
|
13:43
tadzik1 joined
13:44
tadzik left,
lucian joined
13:49
tadzik1 is now known as tadzik
14:02
davidfetter joined
|
|||
| dalek | TT #1130 closed by jkeenan++: dependency problem for libnci_test | 14:16 | |
| TT #1130: trac.parrot.org/parrot/ticket/1130 | |||
|
14:22
ash_ left
14:30
ash_ joined
|
|||
| whiteknight | dukeleto: ping | 14:30 | |
|
14:30
Andy joined
|
|||
| whiteknight | msg dukeleto you said we had a stand-alone tool that can upload smolder reports? we need to add reporting capability to plumage and I would prefer to use some kind of existing solution as opposed to completely rewriting things | 14:33 | |
| purl | Message for dukeleto stored. | ||
| aloha | OK. I'll deliver the message. | ||
| moritz | whiteknight: you can look at rakudo's build/Makefile.in. It uses curl for uploading the reports | 14:34 | |
| whiteknight | yeah, I was thinking about that. That's Plan B | 14:35 | |
| systems don't always have curl | |||
| but if you're running plumage, you do have parrot | |||
| moritz | well, there's an HTTP client in parrot somewhere, no? | ||
| I'm sure it could be made to accept similar options as curl | 14:36 | ||
| whiteknight | yeah, dukeleto mentioned that there was a smolder upload tool in parrot somewhere that already exists | ||
| Coke | added by leo about 8 years ago. | ||
| (the http stuff) no clue if it's maintained. | |||
| NotFound | The HTTP client code is incomplete, it can't handle chunked responses. | 14:39 | |
| moritz | didn't fperrad write a more complete one recently? | ||
|
14:39
Andy left
|
|||
| NotFound | runtime/parrot/library/LWP/ ? | 14:40 | |
| whiteknight | fperrad has written a whole ton of stuff | 14:41 | |
| NotFound | Yeah, the problem is that a ton of stuff written in pir is a hard to maintain ton. | ||
| whiteknight | there's no good alternative though, if we're looking for decent performance | 14:44 | |
| NQP is much easier to maintain, but obviously slower because of some of the lexicals issues that we've talked about, among other things | |||
| NotFound | winxed can be an alternative | 14:45 | |
| Or Close, if someone finishes it. | |||
| moritz would expect network performance to be the bottleneck for LWP | |||
| dalek | rrot: r49200 | coke++ | trunk/config/gen/makefiles/root.in: [build] fix a dep reported missing by tools/dev/checkdepend.pl |
||
| Coke | or, call me crazy, we could make nqp faster. ;) | 14:46 | |
| rather than finding YA workaround. | |||
| NotFound | Not a bad idea, | ||
| moritz would love to see tcurtis' optimization framework in ext/ | 14:47 | ||
| then it would be much easier to use for nqp and rakudo | |||
| NotFound | If winxed is a workaround for pir, then C is a workaround for assembler ;) | 14:48 | |
| Coke wasted a lot of time on partcl avoiding the known slow paths rather than using them and getting them fixed. | |||
| moritz | NotFound: C really is a workaround for assembler. | 14:49 | |
| NotFound | And assembler a workaround for 001101010.... | 14:50 | |
| atrodo | Not sure about that. At least in assembler, you don't fool youself into thinking it's portable... | ||
| Coke | atrodo: that's pretty much parrot in a nutshell. ;) | 14:51 | |
| NotFound | Anyway, I would prefer a slow LWP that works rather than a fast one that works.... sometimes. | 14:53 | |
| whiteknight | getting NQP performance fixed is in no small way tied to the lvalue assignment problems that Parrot has | 14:54 | |
| and fixing that is going to require somebody who's knowledgable about the issue to put down a concrete design for it | |||
| jnthn | We should also be less stupid about lexicals generally | 14:55 | |
| Why on earth do we look them up by name? | |||
| pmichaud | I'm not sure I agree with that assessment. | ||
| jnthn | That should be a last resort, not a first one. | ||
| NotFound | We do? | ||
| jnthn | (For the case where they're all statically known at compile time.) | ||
| $P0 = find_lex '$lol' | |||
| pmichaud | since NQP doesn't have assignment, I don't see why it's a significant performance penalty. | ||
| find_lex isn't *that* expensive. | 14:56 | ||
| jnthn | pmichaud: Individually, no... | ||
| whiteknight | pmichaud: I may be mistakenly remembering old discussions | ||
| jnthn | pmichaud: When you do enough of them, though... | ||
| pmichaud | jnthn: even cumulatively I don't think it's that expensive. | ||
| I'd be very happy to be proven wrong. | 14:57 | ||
| jnthn | pmichaud: Maybe .Net dictionary lookups are slow, or maybe eveyrthing else in Parrot is so slow it swamps in. In 6model, it was a notable win. | ||
| *swamps it | |||
| pmichaud | jnthn: I'm thinking it's likely "everything else in Parrot..." | ||
| whiteknight | pmichaud: what do you see as the major performance bottleneck in NQP? | ||
| NotFound | I've started to use lexicals for implementing Closures in winxed and haven't noticed speed impacts in the few tests I've do. | ||
| jnthn | Yeah, but if we keep not optimizing stuff because the problem is "everything else"... :/ | ||
| pmichaud | for typical NQP programs, the major performance cost is in method call overhead and return exception handling, iirc. | 14:58 | |
| whiteknight | hmm...those are a little bit less straight-forward to fix | 14:59 | |
| pmichaud | ...and GC, of course. | ||
| muixirt | pmichaud: method call overhead? Can explain that a bit more? | 15:05 | |
|
15:06
theory joined
|
|||
| pmichaud | muixirt: method calls have traditionally been somewhat slow in Parrot | 15:06 | |
| atrodo | Is it a large cost in context initialization? | 15:07 | |
| muixirt | why? | ||
| jnthn | Trouble is, while I can in the meta-model help on method *lookup*, if the context creation overhead is the bigger part it can only help so much. | ||
| muixirt wonders what steps are necessary in parrot for a method call | 15:12 | ||
|
15:13
lucian left
15:19
muixirt left
|
|||
| pmichaud | using a simple recursive fibonacci program as a benchmark.... lexical lookup is a bit more costly than I remember from last looking at it. about 10%. (more) | 15:20 | |
| creating exception handlers to handle return exceptions is about 60% | 15:21 | ||
| jnthn | omg | ||
| *60*? | |||
| pmichaud | I go from 5.1sec to 2.2sec when I take out the return exception handler creation | ||
| whiteknight | oi | ||
| atrodo | That seems quite excessive | ||
| pmichaud | that does seem excessive, now that I think about it. | 15:22 | |
| jnthn | pmichaud: Is that just creating the handlers? | ||
| moritz | so an optimization that simply removes the return() where possible would be quite welcome | ||
| pmichaud | moritz: I'm not making a return() | ||
| jnthn | pmichaud: Or also throwing the return exception and catching it? | ||
| Wow! | |||
| pmichaud | I'm simply creating the handler -- not throwing the exception. | ||
| just a sec. | |||
| NotFound | pmichaud: what is the code that creates control exception handlers in nqp? | 15:23 | |
| pmichaud | new $P15, 'ExceptionHandler' | ||
| set_addr $P15, control_14 | |||
| $P15."handle_types"(.CONTROL_RETURN) | |||
| push_eh $P15 | |||
| atrodo | So, as the new guy, this would be like installing a try block? | 15:24 | |
| pmichaud | the handle_types calls accounts for 40% | ||
| jnthn | Youch, that's a method call and what looks like a slurpy taking METHOD. | ||
| NotFound | handle_types is a method with slurpy param, that may be a noticeable part of the cost. | ||
| pmichaud | (5.1sec to 3.1sec) | 15:25 | |
| jnthn | I'm not sure I follow why the Parrot way of setting these up is once per block invocation rather than once per block. | ||
| pmichaud | jnthn: because each closure needs its own continuation. | ||
| I tried sharing exception handlers and that didn't work out so well. | 15:26 | ||
| jnthn | Right, but I'd have hoped we could set *some* of it up statically even if we have to do some stuff per invocation too. | ||
| NotFound | A lot of handlers handle only one type. A way to set it using a vtable instead of a method can be helpful. | ||
|
15:26
arnsholt left
|
|||
| pmichaud | yes, method calls are expensive :-) | 15:26 | |
| at least for NQP and Rakudo, I think this is the only exception handler that is looking for just one type, though. | 15:27 | ||
| all of the others look for a subset of types. | 15:28 | ||
| afk for a few minutes | |||
|
15:29
JimmyZ joined
|
|||
| ash_ | why are the handler's needed? to create continuations? | 15:29 | |
| NotFound | Not so easy, event if we provide a shorter way to set the types handled, it still needs to initialize the handled_types atribute. | 15:30 | |
| JimmyZ remembers trac.parrot.org/parrot/wiki/WhyDoes...icientCode | 15:32 | ||
| NotFound | ack '.CONTROL_RETURN' in ext/nqp-rx shows a lot of usages | 15:37 | |
| jnthn | NotFound: Every sub | 15:38 | |
| (in the Perl 6 sense of sub, not the Parrot one) | |||
| NotFound | I can try a hack for ExceptionHandler but don't how to do a quick speed test of it. | 15:40 | |
|
15:41
ruoso left
|
|||
| NotFound | s/don't/don't know | 15:41 | |
| Coke | create a branch, let pmichaud test it. ;) | 15:42 | |
| NotFound | Coke: a branch ow what? parrot? nqp? both? | ||
| Coke | if you're changing exceptionhandler, parrot, no? | 15:43 | |
| jnthn | NotFound: pmichaud++ can probably give you the PIR to try it on when we returns too :-) | ||
| *he | |||
| Coke | I don't know what you're changing, but if it's nqp source, there, and if it's parrot source, here? | ||
| or just wait. ;) | |||
| NotFound | jnthn: I can also write some test cases in pir, but specially written pir test don't show anything about the measurabe impact in real usages of nqp. | 15:44 | |
| Coke: the idea is simple: add init_int vtable to ExceptionHandler and use the int value as type handled. | 15:45 | ||
| Easy to write, hard to test for me. | 15:46 | ||
| Coke | that will only work when you're trying to handle a single type, yes? | 15:47 | |
| (might also need an init_pmc that takes an RPA/List/something) | 15:48 | ||
| but that's a good first step, I bet. | |||
| NotFound++ | |||
| NotFound | Coke: the idea is to evaluate the impact of a change like that in the .CONTROL_RETURN case. If it pays, we can think about similar approaches for other cases. | ||
| pmichaud | handling a single type (.CONTROL_RETURN) is useful. | ||
| we have a lot of return handlers. | |||
| (one per logical subroutine) | |||
| github.com/perl6/nqp-rx/blob/master...es/fib.nqp # my fib.nqp test program | 15:49 | ||
| you can use --target=pir to convert it to PIR, then hand-edit the PIR to see the effect of various changes on the resulting time | |||
| for example, to test the cost of the exception handler, I simply commented it out. | 15:50 | ||
| NotFound | Where is the code that generates the handler creation? nqp? pct? ... | ||
| pmichaud | pct generates the handler creation | ||
| look for control_pir, iirc | |||
| NotFound | Maybe I can test it, then. | ||
| dalek | p-rx/master: f59925c | pmichaud++ | examples/fib.nqp: Add fib.nqp as a recursion benchmark example. |
||
| pmichaud | I'll be happy to run tests here. | ||
| NotFound | src/PAST/Node.pir | 15:51 | |
| 524:value "return_pir" generates code to handle C<CONTROL_RETURN> exceptions. | |||
| This one? | |||
| purl | it has been said that This one is pretty good, I hope. the Catalyst update made it straightforward. When you get time there's that and also jnap's plack updates got merged in and we can look at the psgi engine branch, which seems good to me (but maybe bad code, still passes all tests) | ||
| pmichaud | that's it... "return_pir" | ||
| NotFound | src/PAST/Compiler.pir ? | 15:52 | |
| pmichaud | line 970 | ||
| NotFound | Looks easy to change. I'll give it a try. | 15:53 | |
|
15:53
davidfetter left
|
|||
| pmichaud | oh, wait | 15:53 | |
| lines 934-937 | 15:54 | ||
| that's the part that generates the handler | |||
| the other part is the handler itself (probably doesn't need modification) | |||
| Coke | which file is this? | ||
| NotFound | bpost.'push_pirop'('new', $S0, "'ExceptionHandler'") and following, isn't it? | ||
| pmichaud | compilers/pct/src/PAST/Compiler.pir | ||
| Coke | oh, PAST, not PCT. | ||
| danke. | |||
|
15:55
davidfetter joined
|
|||
| pmichaud | hmmm | 15:58 | |
|
15:58
davidfetter left
|
|||
| pmichaud | commenting out the push_eh step runs 14% faster | 15:58 | |
| that's.... weird also. | |||
| maybe we're seeing gc interactions here. | 15:59 | ||
| jnthn | pmichaud: That's kinda scary. We have a *lot* of very short subs/methods. | ||
| pmichaud | I wonder if push_eh is forcing the generation of additional RPA's (one per context) | ||
| I think that already got optimized, though, to generate a RPA only when there's more than one handler active in a given context | 16:00 | ||
| NotFound | First uglyness: I changed that file without patching ExceptionHandler and parrot builds and pass tests. | ||
|
16:00
JimmyZ left
|
|||
| pmichaud | gist.github.com/589930 # cost of push_eh step | 16:01 | |
| feels like push_eh ought to be a lot faster than that. | 16:02 | ||
| NotFound | Parrot_cx_add_handler_local creates a RPA when the first handler is added. | 16:04 | |
|
16:05
JimmyZ joined
16:06
davidfetter joined
16:08
ruoso joined
|
|||
| ash_ | atrodo: is lorito's 90_fib.t test supposed to end with a single ok followed by 6765? it says 1..4, so i am just checking | 16:08 | |
| atrodo | ash_> Nope, it's not suppose to. I just never finished it :D | 16:10 | |
| ash_ | ah, got ya | ||
| nopaste | "NotFound" at 192.168.1.3 pasted "patch: testing a shortcut for handlers of .CONTROL_RETURN" (44 lines) at nopaste.snit.ch/23508 | 16:18 | |
|
16:19
wow left
16:22
JimmyZ left
|
|||
| whiteknight | I suggest that maybe the first handler pushed should not create an RPA, but just be used by itself | 16:33 | |
| additional handlers can create an RPA when/if they are pushed | |||
| NotFound | With this t/compilers/opsc/02-parse-all-ops.t looks a bit faster, but the difference seems to be less than 0.5% | 16:34 | |
|
16:41
chromatic joined
16:43
davidfetter left,
davidfetter joined
|
|||
| whiteknight | good morning, chromatic | 16:44 | |
| chromatic | aloha | 16:45 | |
| dukeleto | howdy, folks | ||
| whiteknight | I had an idea this morning about creating NCI method PMCs lazily | ||
| dalek | rrot: r49201 | nwellnhof++ | trunk (2 files): [io] Fix Parrot_io_read_utf8 with 3-byte chars |
||
| dukeleto | chromatic: did you see my msg about the stress_strings.pir slowdown ? | ||
| chromatic | That'd be handy. | ||
| whiteknight | it seems to me like initializing and installing all those PMCs is quirte expensive | ||
| chromatic | dukeleto, I did. | ||
| The MultiSubs for PMCs are spendy. | 16:46 | ||
| dukeleto | chromatic: i have a tool to run code for every git commit in a commitish, which will come in handy | 16:47 | |
| chromatic | I'll look at that tuning commit and see what I can see. | ||
| dukeleto | chromatic: that commit fixed some bugs, so it could be that doing things correctly is slower, but perhaps you can find a way to keep those bugs fixed and not be so slow | 16:48 | |
| chromatic: i am also interested to see how stress_strings.pir does on gc_massacre | |||
| purl | okay, dukeleto. | ||
| dukeleto | whiteknight: just saw your mesage. examples/io/post.pir | 16:49 | |
| chromatic | I thought that example only changed a threshold. | ||
| whiteknight | dukeleto: ah, okay. so it's not really a stand-alone utility so much as an example. I'll probably pull the guts into a separate tool | 16:51 | |
| chromatic: I think we can avoid installing the NCI PMCs at class_init time. Instead, we can build an array of name/func_ptr pairs at compile time, and have Pmc2c implement a custom find_method that looks up the first instance of a method in the array first | 16:53 | ||
| I would wager that no program ever written would require the existance of all NCI methods in all built-in classes | 16:54 | ||
| chromatic | Exactly. | ||
| dukeleto | whiteknight: i think turning post.pir into an actually useful tool would be nice. currently you can't tell it which file you want to post, it just hardcodes it | ||
| whiteknight | dukeleto: This is sounding more and more like the grand test framework project I want to implement | ||
| dukeleto | whiteknight: have you given any more thought to including kakapo in PLA? | 16:55 | |
| whiteknight | what do you mean? | ||
| dukeleto | whiteknight: just wondering if PLA would inclue it's own copy of Kakapo, i.e. a version that is know to work with PLA | 16:56 | |
| whiteknight | I did create a tag on my github mirror | ||
| PLA only uses the unit test portions of kakapo, nothing else. I'm thinking about forking that portion, or writing something like it | |||
| dukeleto | whiteknight: i was running into issues running the PLA test suite a while ago, haven't tried since then, but I would really like to help hack on PLA | ||
| whiteknight | yeah, I've gotten those issues sorted out. I'm preparing a release now and will probably have it out after I am done work | 16:57 | |
| I've got instructions for how to get the correct version of kakapo and everything | |||
| that examples/io/post.pir looks extremely similar to the smolder upload code in distutils | 16:59 | ||
| dukeleto | whiteknight: good to hear, i will try your new release when it hits the interwebs | 17:02 | |
| dalek | rrot: r49202 | fperrad++ | trunk/runtime/parrot/library/LWP/Protocol.pir: [LWP] handles an IO error |
||
| dukeleto | whiteknight: yes, post.pir is basically the same code that is in distutils | ||
|
17:07
Andy joined
17:16
sjn is now known as _sjn
|
|||
| NotFound | whiteknight: the idea about the first handler has a problem: the handlers list is managed by direct access from several places. | 17:17 | |
| whiteknight | ha, doesn't surprise me | 17:18 | |
|
17:18
sjn_ is now known as sjn
|
|||
| pmichaud | gist.github.com/590074 # effect of NotFound++'s init_int patch on fib.nqp | 17:20 | |
| Coke | 4.85194206237793 / 3.39949893951416 | 17:21 | |
| purl | 1.4272521182405 | ||
| aloha | 1.4272521182405 | ||
| pmichaud | rakudo: (4.85-3.40)/4.85 | ||
| purl | 0.298969072164948 | ||
| Coke | purl, play in traffic. | ||
| purl | Coke: huh? | ||
| p6eval | rakudo be80e9: ( no output ) | ||
| pmichaud | hard to argue with a 30% speedup. :) | ||
| Coke | I'd say ship it. ;) | 17:22 | |
| pmichaud | too bad we didn't do this before the release :-| | ||
| NotFound | 30% ? I'm amazed | ||
| Coke | pmichaud: next release is always better. :| | ||
| pmichaud | I'm not. we avoid a method call. | ||
| ash_ | is that only 1 method call's difference between the two? | 17:23 | |
| pmichaud | basically, yes. | ||
| Coke | that one call is repeated many times. | ||
| (yes?) | |||
| pmichaud | it's one call per invocation, yes. | ||
| NotFound | And some less bytes for sub implied. | ||
| PerlJam | pmichaud: there's always another release 1 month away or so | 17:24 | |
| pmichaud | essentially, that subroutine is 30% faster without that method call present. | ||
| NotFound | Commit it, then? | ||
| pmichaud | I'll commit, yes. | ||
| I'm reworking the PAST::Compiler change slightly, and need to do a full test. | |||
| (need to make sure nqp still works with the change) | 17:25 | ||
| NotFound | pmichaud: ok | ||
| pmichaud | can I get rid of the ** TESTING ** note? | ||
| (in init_int() ?) | |||
| NotFound | pmichaud: sure | ||
| dukeleto | whiteknight: nice work on the github pages for PLA. very sexy | ||
| ash_ | how hard/long are method lookups? | ||
| whiteknight | dukeleto: Ha! kid51 complained about them | 17:26 | |
| pmichaud | it's not just the fact of being a method call... it's a PCCMETHOD call | ||
| Coke | url? | ||
| whiteknight | Coke: whiteknight.github.com/parrot-linear-algebra/ | ||
| I'm not colorblind, I'm just extremely non-artistic | |||
| NotFound | pmichaud: and even better, with slurpy param | 17:27 | |
| Coke | aside from dark, looks good to me. I have the same problem you do. ;) | ||
|
17:27
_sjn is now known as sjn_
|
|||
| Coke | any other places in compilers/ that can benefit from this update? | 17:27 | |
| oh, needs tests, too. :| | |||
| pmichaud | well, the slurpy param got used immediately within the method (and retained), so not much additional savings from that. | 17:28 | |
| Coke | if only types were maskable. | ||
| pmichaud | i.e., the slurpy param simply became the new bound value for the attribute. w/o the slurpy param, we'd just have to create a resizable array :) | ||
| NotFound | pmichaud: but creates an array pmc during the call | ||
| ash_ | whiteknight: you have an error in your html, <h1>Parrot-Linear-Algebra</h2> is probably not what you meant to do | ||
| NotFound | Ah, yes, the array is reused. | ||
| pmichaud | although the fixedintegerarray is probably more efficient | 17:29 | |
| whiteknight | ash_: damnit! Thanks for pointing out my fail | ||
| ash_ | whiteknight: in my browser, the entire site is in H1 STYLE BIG FONT | ||
| pmichaud | Coke: I don't know that anything uses .CONTROL_RETURN other than things generated via pct and/or nqp. | ||
| NotFound likes w3c validator | |||
| ash_ | no problem | ||
| dukeleto | ash_: are you using lynx ? | ||
| ash_ | nope, chrome | 17:30 | |
| but if you curl the page | |||
| the html tag was kinda obviously the cause </h2> should of been </h1> | |||
| Coke | pmichaud: I mean handle_types with a single arg. | 17:31 | |
| pmichaud | Coke: I don't think there are many cases of handle_types with a single arg. | ||
| (other than .CONTROL_RETURN) | |||
| Coke | worth a simple ack. ;) | 17:32 | |
| pmichaud | simple ack doesn't come up with any single-argument handle_types calls that aren't .CONTROL_RETURN | 17:34 | |
| (well, there are some, but none significant) | 17:35 | ||
| (mostly in t/) | |||
| NotFound | pmichaud: In tests I use single arg a lot, but just for checking that throws the expected type. | 17:37 | |
| Coke | in git, can you checkout a tag? | 17:39 | |
| whiteknight | git checkout <tag_name> | ||
| Coke | (instead of a branch) | ||
| ok. how can I tell if I've done that already? ;) | |||
| whiteknight | "git tag"? | 17:40 | |
| Coke | git tag shows a list of tags. | ||
| pmichaud | git status? | ||
| purl | git status is probably porcelain | ||
| Coke | (I don't see any special annotations) | ||
| in tag or status. | |||
| pmichaud | iirc, if it says you're on a branch, then you haven't done that. | 17:41 | |
| (e.g., if it says you're on branch master, then you are really on master and not a tag) | |||
| Coke | danke. | ||
| ugh. now to re-re-fix git through corporate firewall. | 17:42 | ||
| jnthn | Wow, we get 30% win?! :-) | 17:44 | |
| pmichaud | in that example, yes. | ||
| it would obviously be less of a win if the sub were more complex. | |||
| jnthn | pmichaud++, NotFound++ | ||
| Right, but we have quite a lot of short subs/methods too. | |||
| pmichaud | correct. | 17:45 | |
| no matter how you slice it, we made an expensive+common operation much less expensive. | |||
| jnthn | That's what we need. :-) | ||
| pmichaud | next is to see if we can improve push_eh | ||
| jnthn | *nod* | ||
| And when you improve them, what % of the time *then* is messing with lexicals. :-) | 17:46 | ||
| s/them/that/ | |||
| Coke | hurm. "git checkout <tag name> ;git status" - "not currently on any branch" ... no mention of the tag itself. | ||
| pmichaud | oddly, it was still 10% in my preliminary test | ||
| jnthn | Oddness. | ||
| pmichaud | i.e., instead of saving 0.5 seconds, it only saved 0.3 | ||
| (okay, 15%.) | |||
| ish. | |||
| Coke: it only knows the commit your on, not the tag. | |||
| *you're | |||
| although git-describe might indicate the tag. | 17:47 | ||
| dukeleto | you may need "git describe --tags" | 17:49 | |
| gerd++ # another solid release | 17:52 | ||
| NotFound | gerd++ | 17:53 | |
| Coke | dukeleto++ #that's what I'm looking for, thanks. | ||
| dukeleto | pmichaud: do you have an example of code that parses the output of "git describe" to determine if the necessary version of something is present? | 17:58 | |
| pmichaud | dukeleto: not yet. | 17:59 | |
| I wasn't planning to use | |||
| I wasn't planning to use "git describe" for that, necessarily. | |||
| gist.github.com/590149 # effect of additional (and possibly unneeded) find_lex opcodes on fib.nqp | 18:04 | ||
| chromatic | 10% there | 18:05 | |
| pmichaud | but it takes a lot of analysis to determine that the find_lex is in fact unnecessary | 18:06 | |
| (and in the general case might not be knowable) | |||
| jnthn | pmichaud: My point is more than we know how many call frames out the lexical will be statically most of the time. We could also do a compile-time name => slot mapping. | 18:08 | |
| pmichaud | jnthn: yes, agreed. | ||
| jnthn | pmichaud: So you can get it down to a few pointer follows, rather than a bunch of hash lookups. | ||
| pmichaud: That's what I've (partially) done in 6model. | |||
| chromatic | That's what Perl 5 does. | ||
| pmichaud | in this case it'd be an upper-bound improvement of 10%, though. | ||
| davidfetter | it's all it ever does! | ||
| pmichaud | (in the case of nested blocks, it'd probably be greater) | ||
| davidfetter | oh, wait. wrong movie | ||
| dukeleto | pmichaud: in the conversion of mk_language_shell/create_language to be git-aware, I need to parse the output of "git describe" | 18:09 | |
| pmichaud | dukeleto: or you can have git-describe output in whatever format is easy to parse :) | ||
| gist.github.com/590171 # cost of push_eh opcode | 18:10 | ||
| rakudo: (3.40-2.84)/3.40 | |||
| purl | 0.164705882352941 | ||
| p6eval | rakudo be80e9: ( no output ) | ||
| dukeleto | pmichaud: sure, but parsing git describe output seems more fragile that comparing integers. If someone makes a local tag, i think it will throw a wrench in our plans | ||
| pmichaud | dukeleto: you can tell git-describe to only report specific tags or tags matching a pattern | 18:11 | |
| dalek | rrot: r49203 | pmichaud++ | trunk/src/pmc/exceptionhandler.pmc: Patch to add init_int() VTABLE function for ExceptionHandler. Courtesy NotFound++ . |
||
| rrot: r49204 | pmichaud++ | trunk/compilers/pct/src/PAST/Compiler.pir: [pct]: Update PCT 'return_pir' generation to use newp_s_ic opcode instead of "handle_types" methodcall. |
|||
| rrot: r49205 | pmichaud++ | trunk/t/pmc/exceptionhandler.t: [core]: Add test for init_int initialization of ExceptionHandler PMC. |
|||
| dukeleto | pmichaud: that sounds useful. Time to go read the man page again | ||
| chromatic | 16.48% there. | 18:12 | |
| pmichaud | dukeleto: I was thinking that simpler might be to make sure that a given commit appears in the history. | 18:14 | |
| as opposed to worrying about tags. | |||
| (one could also check that a given tag appears in the history.) | |||
| dukeleto | pmichaud: that is interesting, but requires the git repo. Currently, the way create_language/mk_lang_shell work, the repo is not needed | 18:15 | |
| pmichaud: perhaps that should change | 18:16 | ||
| Coke | dukeleto: if it simplifies the conversion, go fo rit. | ||
| pmichaud | oh yes, it would require the repo. | ||
| dukeleto | pmichaud: i have some plans to make a web interface to create_lang/mk_lang_shell, and I suspect most people will want to use that, but for now, we can't convert to git until those 2 scripts are ported over | ||
| Coke | if someone is strongly opposed, they can do something post-git | ||
| pmichaud | anyway, my preference would be to do things similar to how rakudo manages it now | 18:18 | |
| i.e., it gets its version number from the output of git-describe with a --match option. | |||
| and records that. | |||
| git describe --match '2*' # what rakudo currently uses to embed a revision number | 18:19 | ||
| dukeleto | pmichaud: where does that code live? | ||
| pmichaud | build/gen_version.pl | ||
| so then we end up with: | |||
| pmichaud@plum:~/rakudo$ ./perl6 --version | 18:20 | ||
| This is Rakudo Perl 6, version 2010.08-119-gccde8dc built on parrot 2.7.0 r49091 | |||
| and it'd be trivially simple for build/PARROT_REVISION to contain something like "2010.08-50" which means "at least 50 commits after the 2010.08 tag" | |||
| and we'd assume that a parrot reporting "2010.09" would always be after "2010.08" | 18:21 | ||
| chromatic | That's doable. | ||
| pmichaud | since parrot uses n.x.y tags, though, it'd probably need to be "2.8.0-50" | 18:22 | |
| which would be fine also | |||
| it gets very nasty/tricky though with things like 2.8.1 | |||
| dukeleto | pmichaud: should we care about backcompat? what about all the parrot projects that currently expect PARROT_REVISION to be an int? I am thinking of using something like PARROT_VERSION going forward | ||
| pmichaud: yes, version numbers suck. | |||
| pmichaud | I guess we'd assume that a 2.8.1 revision is automatically greater than any 2.8.0 request. | 18:23 | |
| Coke | that's not a reasonable assumption, depending on what you mean by greater. ;) | ||
| since 2.8.1 could be a single bug fix over 2.8.1, and missing all of 2.8.0-100 | |||
| (assuming a linear flow seems LTA.) | 18:24 | ||
| pmichaud | Coke: would 2.8.1 be tagged in master? | ||
| Coke | I don't know what "in master" means in this context. | ||
| it would be tagged, sure. | |||
| pmichaud | the master branch of the parrot repo. | ||
| currently gen_parrot.pl always grabs from the trunk/master branch | 18:25 | ||
| Coke | I've said before that's not a sustainable thing. ;) | ||
| pmichaud | so if there's a 2.8.1 tag in the master branch, it wouldn't be possible for a 2.8.0-100 to refer to something that comes after it that isn't tagged by 2.8.1 | 18:26 | |
| "sustainable" shows up when we're able to restrict development to parrot releases. | |||
| Coke | I don't know enough git to respond here. if this were SVN, I would say I wouldn't expect trunk to contain a snapshot of every tag. | ||
| pmichaud | I don't see that happening before 4.0.0 | ||
| Coke: correct... so if the 2.8.1 tag isn't on the master branch, it doesn't pose a problem. | 18:27 | ||
| Coke | except that you can't sync to it. right? | ||
| s/sync to/require/ | |||
| which is unchanged from today. | |||
| pmichaud | PARROT_REVISION curre.... right | ||
| Coke | so we're not losing any functionality, so <shrug> | 18:28 | |
| pmichaud | so, why is push_eh so expensive? | ||
| chromatic | Besides the method call to set its type? | 18:30 | |
| pmichaud | ...method call? | ||
| jnthn | pmichaud: push_eh $P0 | 18:31 | |
| (the pmc variant) | |||
| ? | |||
| pmichaud | jnthn: yes. | ||
| ash_ | can we profile it? | ||
| pmichaud | it appears to always need a ResizablePMCArray for the context. | 18:32 | |
| NotFound | pmichaud: yes, I took a look at it a few minutes ago. | 18:33 | |
| jnthn | Parrot_cx_add_handler_local could be a tiny bit less silly | ||
| pmichaud | if we could set it so that the first handler pushed doesn't require an RPA, that'd be a win. | ||
| jnthn | e.g. it does multiple gets on the same thing. | ||
| pmichaud | I thought that had been done already... but apparently not. | ||
| ...multiple gets on the same thing? | 18:34 | ||
| NotFound | pmichaud: is a bit complicated, the array is accessed from several places. | ||
| whiteknight | what would it take to clean it up so it wasn't accessed from several places? | ||
| jnthn | oh, it only reads from a struct | 18:35 | |
| pmichaud: It does Parrot_pcc_get_handlers twice | |||
| NotFound | scheduler.c and the Scheduler pmc are the ones I've positively found. Maybe more. | ||
| jnthn | pmichaud: I thought maybe that was costly but it's not | ||
| pmichaud: It's a macro encapsulating a struct access by the looks of it. | |||
| So yeah, the most expensive thing I can see it doing is making the RPA. | 18:36 | ||
| pmichaud | is making an RPA that expensive? | ||
| chromatic | It's not cheap. | ||
| pmichaud | yes, that appears to be the cost. | 18:37 | |
| jnthn | :S | 18:38 | |
| jnthn is a bit surprised it's that costly. | |||
| pmichaud | (I replaced push_eh with $P0 = new ['ResizablePMCArray'] and got essentially the same time. | ||
| NotFound | unshift is not cheap. Let me try a tiny change... | ||
| pmichaud | unshift onto an empty RPA ought to be relatively cheap. | ||
| chromatic | What's the benchmark code? | 18:39 | |
| pmichaud | chromatic: fib.nqp compiled to .pir | ||
| nopasting | |||
| gist.github.com/590253 # benchmark code | 18:40 | ||
| chromatic | Thanks. | ||
| pmichaud | when we started, that was taking 5.0 sec | ||
| jnthn | Why does it unshift rather than push? | ||
| The order doesn't matter at all, no? | |||
| pmichaud | jnthn: because you add new handlers to the top of the stack | 18:41 | |
| jnthn | oh...OK | ||
| pmichaud | it doesn't matter if there's not already a list. | ||
| jnthn | So it does matter | ||
| dalek | tracwiki: v144 | fperrad++ | Languages | ||
| tracwiki: update Parrot version 2.8.0 | |||
| tracwiki: trac.parrot.org/parrot/wiki/Languag...ction=diff | |||
| jnthn | pmichaud: Not in this case, no | ||
| oh, it looks like it unconditionally calls memmove | 18:43 | ||
| unshift_pmc calls do_unshift(INTERP, SELF, value); | |||
| And there's no "need we memmove" check in there | 18:44 | ||
| NotFound | jnthn: memmove should be smart enough in all C compilers in this world to handle it. | ||
| pmichaud | it'd be trivial to add an "if (size)" check, though. | 18:46 | |
| or "if (size > 0)" | |||
| still, I agree that's not likely an expense. | |||
| the real cost is in creating the RPA | |||
| chromatic | I'm getting a real profile here. | ||
| Hm, looks like the deps for parrot-nqp aren't all there. | 18:47 | ||
| pmichaud | NotFound: it looks to me like the "handlers" in Scheduler.pmc aren't directly related to exception handlers? Where am I missing the link? | 18:49 | |
| NotFound | pmichaud: not sure about the sanity of that code, but if I change things in scheduler.c it breaks in Scheduler PMC | 18:50 | |
| pmichaud | NotFound: okay. | ||
| chromatic | 5.24% of runtime is creating the RPA in Parrot_cx_add_handler_local and the other 3.82% of runtime is unshifting onto it. | 18:53 | |
| pmichaud | chromatic: is that from the .nqp or from the .pir? | ||
| chromatic | the NQP | ||
| pmichaud | ah | 18:54 | |
| so that includes the cost of compilation | |||
| chromatic | 9.5% of runtime. | ||
| I'm sorry. I mean the NQP compiled to PIR. | |||
| pmichaud | okay | ||
| chromatic | Running the generated .pir directly. | ||
| pmichaud | and that's the cost of running the entire .pir directly | ||
| as opposed to just the cost of the fib() subroutine | |||
| chromatic | Right. | ||
| pmichaud | okay. | ||
| ooc, what's the cost of the push_eh instruction? | 18:55 | ||
| chromatic | 0.3% of runtim | ||
| e | |||
| pmichaud | how about including the things it calls? | ||
| chromatic | 9.8% of runtime | 18:56 | |
| pmichaud | okay. | ||
| push_eh gets called a *lot*, and generally there's one per context. | |||
| optimizing that would seem to be a really nice win. | |||
| chromatic | We should rethink how this works. | 18:57 | |
| There's basically an exception handler active for the entire sub. | |||
| Seems like we could know that at compilation time. | 18:58 | ||
| It's a Sub property, isn't it? | |||
| pmichaud | I don't quite understand the question. | 18:59 | |
| chromatic | In the sense that it's a property of the Sub, not any particular implementation detail. | ||
| pmichaud | But yes, we know at compile time if this Sub wants a return exception handler. | ||
| chromatic | So we shouldn't have to fiddle with all of this mess at runtime. | ||
| pmichaud | we still have to create the continuation | ||
| (which is what the handler is) | |||
| chromatic | Is there no way we can avoid it? | 19:00 | |
| whiteknight | I'm sure there's something | ||
| pmichaud | not from my tests.... continuations are tied to the context that created them | ||
| whiteknight | because this is absud | ||
| absurd | |||
| chromatic | Ultimately, doesn't this code essentially specify a single "Before you return, run this code"? | 19:01 | |
| pmichaud | as well as capturing the return itself, yes. | ||
| jnthn | chromatic: It needs to catch exceptions thrown from nested scopes too. | ||
| That is, return exceptions. | |||
| whiteknight | right That's the rub right there. Nested subroutines | ||
| pmichaud | nested *blocks* | ||
| (in the HLL sense) | 19:02 | ||
| chromatic | The exception handling properties active for any given context are properties of the dynamic scope of the blocks (essentially Subs, as Parrot sees them). Right? | 19:03 | |
| pmichaud | that sounds right, but I'm not sure I followed every clause correctly there. | ||
| chromatic | Maybe we should store these exception handlers with Subs, not Contexts. | 19:04 | |
| pmichaud | we still need to create the continuation, though. | ||
| chromatic | Why? | ||
| pmichaud | so we know what context to return to when it's invoked? | 19:05 | |
| (when the exception is thrown and the handler is invoked?) | |||
| chromatic | Why does that need to be a property of the exception handler? | ||
| pmichaud | let me clarify slightly, then. | 19:06 | |
| are we limiting our discussion to handlers for return exceptions? | |||
| as opposed to other exception handlers that might exist? | |||
| chromatic | Sure, if that helps. | ||
| pmichaud | or, phrased differently | 19:07 | |
| are we only talking about handlers that are tied to an entire Parrot sub dynamic scope? | |||
| chromatic | Yes. | ||
| tadzik | trac.parrot.org/parrot/wiki/Languages -- where are the svn links here? I cannot find the LOLCODE repo url, is it even written anywhere? | ||
| pmichaud | because we definitely have handlers that are not so tied, and they still have to be accommodated | ||
| dalek | TT #502 closed by cotto++: [PATCH] build on OpenBSD/ppc | 19:09 | |
| TT #502: trac.parrot.org/parrot/ticket/502 | |||
| pmichaud | I suppose it'd be possible to create a single exception handler and tie it to a Sub PMC | 19:10 | |
| to be shared across all of that Sub PMC's clones/contexts | |||
| when I tried it before, it failed (more) | |||
| the problem was that the shared ExceptionHandler was always tied to the (original) Sub PMC that created it. | 19:11 | ||
| rephrase | |||
| the shared ExceptionHandler was always tied to the original context that created it | |||
| chromatic | I know how it works now. | 19:12 | |
| pmichaud | because ExceptionHandler currently isa Continuation, and the way to invoke a handler is to invoke the continuation. | ||
| chromatic | Sure, and that's the source of a lot of these problems. | ||
| Seems to me that finding the right EH means unwinding all of your contexts. | 19:13 | ||
| When you've found the EH, you've found a context. | |||
| You even know the opcode where you want to start executing the handler. | |||
| pmichaud | where's the "find the right EH" code? | 19:14 | |
| chromatic | Right now, I don't remember. | ||
| Parrot_ex_find_handler_local() or something. | |||
| pmichaud | if we can extend that... | ||
|
19:15
preflex left
|
|||
| pmichaud | i.e., every context has a set of local handlers, and also checks its (static) sub for additional local handlers | 19:15 | |
| chromatic | Right, we create a subclass of Sub which can have local handlers. | ||
| pmichaud | i.e., we can attach handlers to subs that are assumed to be in force from the invocation of the sub | ||
| subclass of Sub gets nasty, in general. | |||
| chromatic | It shouldn't have to. | ||
| It won't need any additional code as i see it. | 19:16 | ||
| pmichaud | how would I (compile-time) distinguish a Sub-with-handler from ordinary Sub? | ||
| chromatic | type check | ||
| pmichaud | I'd prefer to have handler as a property of all subs, in general. | ||
| no, I mean when I'm generating code | |||
| chromatic | I don't; I think that's one of the pervasive problems with Parrot. | 19:17 | |
| pmichaud | how do I tell Parrot "I need a sub with handlers" instead of "sub without handlers" (in PIR) | ||
| chromatic | Ultimately the PIR/PBC generator should handle that. | ||
|
19:17
preflex joined
|
|||
| chromatic | Yes, my hands waved a little. | 19:17 | |
| pmichaud | the problem with subclasses is when they need to be mixed | ||
| for example, how do I get Coroutine with handler? | |||
| chromatic | Parametric role... okay, good point. | 19:18 | |
| pmichaud | this was one of the early problems with lexicals -- a sub with lexicals was always a Closure PMC, which meant that Coroutine's couldn't have lexicals. | ||
| whiteknight | there was, at one point, an :instance_of() modifier for subs | ||
| I don't know if it was ever implemented, or if it's just a figment of documentation | |||
| pmichaud | whiteknight: yes, that was an early attempt to differentiate subs in Rakudo and it didn't go well | ||
| because it requires compile-time knowledge of all of the possible Sub PMCs | |||
| chromatic | Until we get a better metamodel for PMCs, I guess we fatten up Sub some then. | ||
| whiteknight | it seems like we could either pass it in as an argument, or as a parameter | 19:19 | |
| foo(:needs_handler) | |||
| pmichaud | well, the other problem is that the handler itself likely doesn't exist until runtime, unless you *really* want to extend pir | 19:20 | |
| chromatic | That's the biggest problem. | ||
| We have to fix that first. | |||
| That's why I'm trying to figure out *why* EH has to extend Continuation. | |||
| whiteknight | IT's too bad I wasn't able to find a good, comprehensive way to add in exit handlers to sbs | 19:21 | |
| subs | |||
| pmichaud | not all eh's are static. | ||
| whiteknight | There are just too many ways for control to leave a sub, and no good way to walk the contexts graph from one point to another | ||
| pmichaud | or, more precisely, an eh doesn't have to be static. | 19:22 | |
| chromatic | I agree, but even still why does EH has to extend Continuation? | ||
| s/has/have/ | 19:23 | ||
| atrodo | chromatic> as opposed to? | ||
| whiteknight | chromatic: That's as good a question as any. It does need to jump to a point in code which may be somewhere weird | ||
| NotFound | It can contains a continuation instead. | ||
| chromatic | What does an EH *need* to encapsulate? The type of exceptions it handles and the opcode at which to begin its work. | ||
| pmichaud | if we assume that eh's are always tied to the sub in which they are created, it doesn't have to be a continuation | ||
| also, if we assume that the only way an eh might be invoked is by an exception | 19:24 | ||
| i.e., one cannot invoke an eh directly | |||
| chromatic | My assumption is that we can create read-only EHs. | ||
| Not all EHs have to be read-only, but many can be. | |||
| pmichaud | so, we really want a special class of EH | ||
| or, we want EH's that are continuation-based and EH's that aren't continuation based. | 19:25 | ||
| whiteknight | EHs can be instantiated with a continuation or a sub, not just a label, right? | ||
| I can't remember if that feature was ever added, or if it got removed, or whatever | 19:26 | ||
| pmichaud | I've never found a good use case for it. | ||
| I'm sure there is one.... but I haven't come up with it yet. | |||
| NotFound | whiteknight: I think it was just an idea we talked about. | ||
| whiteknight | ok | ||
| pmichaud | nor have I yet come up with a case where I need to invoke an EH directly. That might change if we try to optimize HLL 'return' to not use exceptions, though. | 19:28 | |
| ...which is entirely possible, given perl6's need for lexotic return. | |||
| oh | 19:30 | ||
| another possible reason for needing a continuation-based eh is the possibility of resuming from the handler. | |||
| although in the case of 'return', there's generally no resume taking place. | |||
| clearly in the case of gather/take we need to be able to do that resume. | 19:31 | ||
| betterworld | I'm writing a dynpmc, and I have a method return a ResizablePMCArray with a bunch of newly created PMCs. My test program shows erratic behaviour, indicating that memory is being reused too early | ||
| Do I need to tell the garbage collector that the memory shouldn't be reused or something? | |||
| chromatic | Do you have a mark() and did you set the mark flag? | ||
| betterworld | Unfortunately I couldn't get any hints from the docs or from looking at other source code | 19:32 | |
| No.. well, I've read in the docs that most PMCs do not need a special mark method | 19:33 | ||
| chromatic | Can you show us your code? | ||
| moritz | maybe nopaste the co... /me too slow :-) | ||
| nopaste | "betterworld" at 192.168.1.3 pasted "source code" (43 lines) at nopaste.snit.ch/23513 | ||
| betterworld | ah | ||
| I forgot to tell nopaste the channel the first time | 19:34 | ||
| jnthn | Yes, you need to mark that STRING * | ||
| That'll be the problem. | |||
| pmichaud | ummmmm | ||
| nopaste | "betterworld" at 192.168.1.3 pasted "example output" (47 lines) at nopaste.snit.ch/23514 | ||
| pmichaud | yeah. | 19:35 | |
| auto_attrs doesn't take care of mark()? | |||
| jnthn | No, just alloc/dealloc | ||
| chromatic | It should, but it doesn't yet. | ||
| betterworld | So I need to mark it right after I create it? | ||
| pmichaud | you need a mark() vtable in Golf. | 19:36 | |
| jnthn | betterworld: YOu need to 1) have an init method that sets the flag saying it needs a custom mark, and then 2) what pmichaud just said | ||
| pmichaud | afk, kid pickup | ||
| betterworld | ah, and that mark vtable needs to flag my attrs | ||
| jnthn | Correct | ||
| betterworld | ok, thanks | ||
| NotFound | pmichaud: an auto_attrs generated mark will be too risky giving the strange values people sometimes store in PMC *, like (PMC *)1 | 19:39 | |
| whiteknight | who does (PMC *)1? | 19:41 | |
| NotFound | whiteknight: a sort of flag. | ||
| jnthn | whiteknight: ;-) | 19:42 | |
| Actually I don't think I have done that one... | |||
| :-) | |||
| I'd probably use a union. :-) | |||
| NotFound | Maybe is no more in current codebase, but I have seen it. | 19:43 | |
|
19:44
kid51 joined
|
|||
| NotFound | We live in a world when there are functions that declare BOOL return type and can return 0, 1, 2 and -1 X-) | 19:45 | |
| (windows api) | |||
| ash_ | thats scary | ||
| NotFound | "I've seen things you people wouldn't believe..." | 19:48 | |
|
19:52
patspam left
19:53
allison joined
|
|||
| pmichaud | anyway, all of my comments regarding slowness in nqp were meant to respond to the earlier assertion that nqp might be too slow for a parrot LWP implementation. I think nqp would be speedy enough. | 19:53 | |
| dalek | kudo: 1222485 | moritz++ | t/spectest.data: run two more test files |
||
| kudo: acc8fcb | moritz++ | build/PARROT_REVISION: bump PARROT_REVISION to 2.8.0 release |
|||
| kudo: ac9fdb9 | moritz++ | t/spectest.data: fix test nmae, moritz-- |
19:54 | ||
| betterworld | If those pmclasses that make use of (PMC*)1 have custom mark methods, I guess it would not be risky to have the default mark method mark all attributes :) | 19:55 | |
| NotFound | betterworld: maybe, but I doubt the possible benefit (not having to write a mark function) pays the cost of implementing and testing that feature. | 19:58 | |
| whiteknight | pmichaud: NQP probably wouldn't be too slow for a networking library. I am glad we did get to talking about performance issues though. Seems to have borne some fruit | 20:01 | |
| where NQP does have performance issues, they are very typically the result of problems in Parrot, and we want to identify those and fix the hell out of them | 20:02 | ||
|
20:05
nwellnhof joined
|
|||
| NotFound | In NQP they are issues but in parrot are problems? ;) | 20:05 | |
| PerlJam | NotFound: It's a problem for the underliying VM to be slowish, but just an issue for the HLL to be slowish because of its underlying VM. :) | 20:07 | |
| atrodo | NotFound> I prefer to call them "opportunities" </phb> | 20:09 | |
|
20:10
ash_ left
|
|||
| nwellnhof | r49204 broke the Rakudo build for me | 20:11 | |
| dalek | kudo: 750a024 | moritz++ | docs/announce/2010.09: [release] initial 2010.09 announcement |
20:12 | |
| pmichaud | nwellnhof: that's possible. | ||
| nwellnhof: right now we're sticking with 49193 until after the rakudo release. | 20:13 | ||
| nwellnhof | yeah, it's just that i like to test some code against rakudo, and i allways rebase to parrot trunk. | ||
| pmichaud | I'll see if I can figure out why rakudo is failing. | 20:14 | |
| moritz | is it bad that I used r49192 for build/PARROT_REVSION instead? (it's the last commit to trunk before the tag) | ||
| dukeleto | nwellnhof: i've pinpointed the stress_strings.pir slowdown to r48585, which was your commit. Any ideas? | ||
| nwellnhof | dukeleto: yes, it's because of the GC threshold changes. i think i mentioned it on IRC. | ||
| you should get the old results if you run with --gc-threshold=50 | 20:15 | ||
| pmichaud | nwellnhof: feel free to revert 49204 for now if you need to, though. | 20:16 | |
| it's easy to put it back again later after I have more time to test it with rakudo. | |||
| I tested it with nqp-rx, and it worked fine there. | |||
| nwellnhof | pmichaud: i can simply revert it my local branch, no problem | ||
| pmichaud: fyi, i get a segfault in Parrot_Continuation_init_pmc when building core.pir | 20:17 | ||
| pmichaud | oh, that's weird. | 20:18 | |
| nwellnhof | shall i post a backtrace? | ||
| pmichaud | I get the same error. | ||
| yes, post backtrace please | 20:19 | ||
|
20:19
pjcj left
|
|||
| nopaste | "nwellnhof" at 192.168.1.3 pasted "Backtrace of segfault during build of core.pir" (28 lines) at nopaste.snit.ch/23515 | 20:20 | |
| chromatic | Nothing obvious there. | 20:21 | |
|
20:21
Paul_the_Greek joined
|
|||
| pmichaud | well, it's being called from Parrot_new_p_sc_ic | 20:21 | |
| which is the new code | |||
| dukeleto | nwellnhof: that commit didn't change the THRESHOLD, at least not that I can see | 20:22 | |
| nwellnhof | dukeleto: yes, it did. back then it was hidden in a right shift (>>). | 20:23 | |
|
20:24
pjcj joined
|
|||
| NotFound | pmichaud: maybe using ['ExceptionHandler'] instead of the plain string name is safer. | 20:25 | |
| dukeleto | nwellnhof: so the shift that changed from >> 1 to >> 2 is what you are talking about? | 20:26 | |
| pmichaud | NotFound: makes sense | 20:27 | |
| it's likely trying to convert the string into a class object and perhaps getting confused there? | |||
| NotFound | pmichaud: not sure, there are some ugliness in the get_class functions | 20:28 | |
| pmichaud | the backtrace shows it's trying to build a Proxy PMC, which often indicates a get_class somewhere. | 20:29 | |
| NotFound | I think sometimes it gets a proxy when it should get the PMC. | 20:30 | |
| mikehh | #ps time | ||
| dukeleto | nwellnhof: what was the reasoning for changing the threshold? Am I to understand that changing the threshold will not effect the bugs that got fixed in that commit? | ||
| NotFound | Anyway, Continuation init_pmc need some check, it can just assume it's always called with a right type. | 20:32 | |
| nwellnhof | dukeleto: it's a speed/memory tradeoff. see here for some numbers: lists.parrot.org/pipermail/parrot-d...04792.html | ||
| NotFound | s/can/can't | 20:33 | |
| nwellnhof | dukeleto: and it doesn't affect the bug fixes. | 20:34 | |
| dukeleto | nwellnhof: i understand now. thanks. I am not sure what we want more: 30% speedup or 30% less memory use. | 20:40 | |
| nwellnhof | dukeleto: i think the 30% speedup is only for stress_strings. for the rakudo build it's about 10% speedup. | 20:41 | |
| Andy | I'm gonna get all up in the gc_massacre branch tonight | 21:02 | |
| CONSTING I WILL GO | |||
|
21:07
theory left
21:13
ruoso left
21:14
estrabd left
21:16
estrabd joined
21:23
fperrad left
21:29
kid51 left
21:37
theory joined
|
|||
| mikehh | Andy: try to make sure that any const-ing also works with g++ | 21:37 | |
| Andy | mikehh: g++ is my go-to compiler. | 21:39 | |
| Because it is pickier than gcc | 21:40 | ||
| mikehh | Andy: exactly :-} | ||
|
21:48
NordQ joined
21:50
NordQ left,
NordQ joined
21:52
NordQ left,
NordQ joined,
tadzik left
21:54
NordQ left,
NordQ joined
21:55
NordQ left
22:02
bkuhn left
|
|||
| dalek | rrot: r49206 | nwellnhof++ | trunk/src/pmc/nci.pmc: [pmc] Off-by-one error in NCI PMC |
22:10 | |
| rrot: r49207 | chromatic++ | trunk/src/gc/system.c: [GC] Fixed a compiler warning. |
|||
| rrot: r49208 | chromatic++ | trunk/src/runcore/main.c: [runcore] Fixed two compilation warnings. |
|||
| rrot: r49209 | chromatic++ | trunk/src/runcore/trace.c: [runcore] Fixed a compiler warning. |
|||
| rrot: r49210 | chromatic++ | trunk/src/packfile/pf_items.c: [pf] Fixed a compiler warning. |
|||
| rrot: r49211 | chromatic++ | trunk/compilers/imcc/symreg.c: [IMCC] Fixed a compilation warning. |
|||
| rrot: r49212 | chromatic++ | trunk (4 files): [ops] Fixed a compilation warning. |
|||
| TT #1796 created by nwellnhof++: PIR heredocs and encodings | 22:18 | ||
| TT #1796: trac.parrot.org/parrot/ticket/1796 | |||
|
22:21
whiteknight left
22:33
Paul_the_Greek left
|
|||
| dalek | rrot: r49213 | Paul C. Anagnostopoulos++ | trunk/t/dynoplibs/trans-infnan.t: Clarify messages in test |
22:44 | |
|
22:45
whiteknight joined
|
|||
| whiteknight | my internet connection is T3H FAILZ | 23:07 | |
| chromatic | We call it "little rat" | 23:12 | |
|
23:12
ash_ joined
23:15
kid51 joined
|
|||
| dalek | rrot: r49214 | bacek++ | branches/gc_massacre/src/gc/gc_ms2.c: Remove commented out code. |
23:18 | |
| rrot: r49215 | bacek++ | branches/gc_massacre/src/gc/gc_ms2.c: Use self->gc_threshold for triggering m&s. |
|||
| whiteknight | okay, for TT #254, is there objection to me merging in the method changes? | 23:23 | |
| I would like to, I don't think anybody really expressed much of a negative opinion towards it | |||
| cotto | 254 was closed 17 months ago | 23:26 | |
| whiteknight | #264. sorry | 23:27 | |
|
23:31
Andy left
|
|||
| cotto | The names are a bit unwieldy (I don't see why "_handle" is in there, given that stdin et al are handles), but it's an improvement. | 23:32 | |
| whiteknight++ | 23:34 | ||
|
23:39
s1n joined
|
|||
| whiteknight | cotto: what names would you prefer? | 23:47 | |
|
23:49
kid51 left
|
|||
| cotto | s/_handle// | 23:49 | |
|
23:53
kid51 joined
23:54
s1n left
|
|||