Parrot 1.8.0 Zygodactyly released | Priority: trac.parrot.org/parrot/wiki/ClassV...eOverrides | Latest modified TT's: icanhaz.com/parrotbugs | Parrot Languages: icanhaz.com/parrotlang
Set by moderator on 5 December 2009.
00:12 theory joined
cotto chromatic, ping 00:31
00:36 mikehh joined
cotto chromatic, unping. I'll catch you later. 00:37
chromatic Okay. 00:38
dalek rrot: r42903 | pmichaud++ | trunk/compilers/pct/src/PAST/Compiler.pir:
[pct]: Allow PAST::Val int constants to auto-promote to num constants
00:43
01:28 chromatic joined 01:46 patspam joined
dalek TT #1360 created by jpaton++: "smoke_languages.pl" doesn't deal with spaces in paths 02:30
dukeleto is benching oofib.pir across all parrot releases and trunk 02:31
dalek pir: f72cd79 | dukeleto++ | TODO:
Update TODO with info about tests
02:32
dukeleto prepare for hard truths
02:36 mikehh joined
dukeleto mikehh: what is the fastest "make fulltest" that you can get with only one core? what is the fastest with however many cores you have? 02:37
02:37 kid51 joined 02:43 mikehh joined 02:48 mikehh joined 02:55 mikehh joined
dalek TT #1353 closed by dukeleto++: svn:ignore-ing too many things in t/ 03:03
dukeleto msg chromatic oofib.pir bechmark: gist.github.com/250024 03:14
purl Message for chromatic stored.
dukeleto looks like parrot trunk is faster than 1.4,1.6-1.8, but older parrots are all faster. trunk is 35% slower than 0.8.1 03:16
dukeleto is running the gc_waves_sizeable_data.pasm benchmark now 03:24
kid51 What figure do you have for trunk now? 03:26
Oh, I see. I was misreading chart. 03:27
dukeleto kid51: just about as fast as 1.5.0 03:31
kid51: for oofib.pir
kid51 Do we have any idea why our speed went down (say, after 0.8)?
dukeleto kid51: i haven't benched anything before 0.8.1 . where are they? 03:32
kid51 I don't know. 03:33
dukeleto kid51: i think they are on the backpan 03:34
here are some oldies: backpan.perl.org/authors/id/P/PM/PMIC/ 03:36
and here are the real oldies: backpan.cpan.org/authors/id/L/LT/LTOETSCH/ 03:41
my benchmarks are going to get a lot more interesting :)
there were so many releases in 0.4.x !
msg chromatic gc_waves_sizeable_data.pasm bechmark gist.github.com/250034 03:44
purl Message for chromatic stored.
kid51 dukeleto: Yes, we had a different release number philosophy up until last year. 03:47
The fact that there were so many release in 0.4 means that we had a lot of trouble getting to 0.5 ;-) 03:48
dukeleto kid51: i am wondering if i should benchmark against all of them, or just pick a few ? 03:50
kid51 dukeleto: I think the ones you've already done are sufficient. 03:55
What I think is more important than looking at older releases is to figure out why we are slower now than, say, at 0.5. 03:56
Does anyone know how to use 'xargs' in conjunction with 'scp' on Darwin? 03:57
On Linux, I would say something like: find . -type f -name '*.patch' | xargs -i scp me@myserver.com 03:58
Correction: On Linux I would say: find . -type f -name '*.patch' | xargs -i scp {} me@myserver.com 03:59
But you don't have '-i' on Darwin 04:01
dukeleto kid51: yeah, i will just take 1 or 2 representatives from 0.4.x, but i do want to go back as far as i can 04:05
perspective is good 04:06
i imagine i will go back far enough and our current benchmarks won't compile, so that will be my event horizon :)
Tene kid51: maybe the 'find' there has '+' as a -exec terminator? find . -type f -name '*.patch' -exec rsync -Pav {} me@server + 04:16
dukeleto /home/leto/src/parrot/parrot-0.8.1/parrot /home/leto/svn/parrot-trunk/examples/benchmarks/primes.pasm 05:06
Segmentation fault
purl (Core dumped)
dukeleto that is no good
looks like --optimize wasn't around until 0.1.0 05:38
actually 0.0.13 had it 05:39
parrot 0.0.1 doesn't compile on linux for me 06:01
cotto Did they even have Linux back then? 06:07
dukeleto cotto: evidently dinosaurs used OS/2 back then 06:09
cotto d'oh. chromatic's gone 06:12
japhb Interesting that 0.8 is fastest for oofib, and slowest (by a long shot) for gc_waves 06:13
dukeleto is compiling parrot 0.2.0 - 0.8.0 now 06:14
pmichaud dukeleto: your benchmark results are interesting. :-)
cotto dukeleto, are you doing optimized and non-optimized?
pmichaud today I've been playing around with benchmarks as well
dukeleto pmichaud: i will be making some more, on more versions of parrot
pmichaud dukeleto: fwiw, I'm not sure that benchmarking the older versions of parrot is all that useful. 06:15
interesting, yes, but I don't think it tells us much.
dukeleto pmichaud: not very useful, but i would like to know the perspective. are we slower then back then? only one way to find out 06:16
pmichaud oh.
I know we're slower than back then :)
w/o question. :)
japhb pmichaud: seeing the whole lifetime gives us an idea of the high water mark and how far we are from it.
dukeleto 0.7.0 segfaults when building nqp for me
pmichaud: i am going to make pretty graphs
pmichaud: are you trying to use euler_bench? 06:17
pmichaud no, I've just been using variations of fib.pir for now. 06:18
I find that particular benchmark very.... illuminating
dukeleto pmichaud: oofib.pir is good too
cotto dukeleto, building nqp's Actions.pm with --target=pir would probably be a worthwhile benchmark 06:21
that'd basically do what I was talking about Friday.
pmichaud I found a place where I can speed up nqp speed a fair bit
cotto pmichaud++
dukeleto cotto: that is a good idea. you are saying run that against each version of parrot? 06:22
pmichaud building Actions.pm will only work with very recent versions of Parrot, though.
I bet it requires 1.8.0 or later 06:23
dukeleto pmichaud: yeah, that is what i am thinking
purl Oooh he is soooo fine!!!
dukeleto can anyone get this to compile? backpan.cpan.org/authors/id/S/SI/SI...0.1.tar.gz 06:24
cotto oh boy
pmichaud here's the statistic I find troubling at the moment....
(nopasting)
fib(28) = 317811 1.52681708335876s # fib benchmark using native registers 06:25
fib(28) = 317811 2.56401109695435s # fib benchmark using PMCs (next one is bad one) 06:26
fib(28) = 317811 23.2272439002991s # fib benchmark using hll-mapped types
dukeleto pmichaud: that is from unoptimized vtables, probably. and an inefficient gc 06:27
parrot 0.0.1 probably doesn't compile because gcc 4.3.x is too new for it 06:28
pmichaud currently I can get nqp to generate code that is 5.1s for the fib benchmark 06:36
if I had a fast mechanism for caching PMCs across subroutine calls I could get it down to 4.4s
(...noting that set_root_global is apparently not very fast.) 06:37
dukeleto very few script can be run against really old parrot versions 06:41
"hello world" in PIR across Parrot 0.2.0 - trunk gist.github.com/250103 06:57
dalek rrot: r42904 | dukeleto++ | trunk (2 files):
[examples] Add a 'hello world' benchmark that can run on Parrots as old as 0.2.0
07:31
dukeleto what is the search path of .include in PIR? 07:37
07:45 iblechbot joined 07:51 mikehh joined, bacek joined
dukeleto bacek: o hai 07:52
euler project #2 from euler_bench on parrot 0.2.0 - trunk gist.github.com/250129 08:17
bacek aloha dukeleto 08:18
dukeleto bacek: hola 08:19
purl bonjour, dukeleto.
dukeleto bacek: i am on a benchmark spree
bacek: i have parrot 0.2.0 - trunk compiled and setup with euler_bench
bacek cotto: CONTEXT is old macro to fetch underlying "Parrot_Context" structure. Deprecated and shouldn't be used in new code. CURRENT_CONTEXT fetches Context PMC from interpreter. 08:20
dukeleto so CONTEXT() should be killed. cotto, go forth and kill 08:27
cotto thanks 08:30
dalek rrot: r42905 | bacek++ | branches/cs_csr_cleanup:
Branch for cleanin up code after cs_csr_merge
08:36
08:37 iblechbot joined
dukeleto another euler project #2 benchmark: gist.github.com/250132 08:41
08:45 fperrad joined 08:50 fperrad_ joined 08:52 mikehh joined
mikehh dukeleto: ping 08:53
All tests PASS (pre/post-config, smoke (#30633), fulltest) at r42904 - Ubuntu 9.04 amd64 (g++ with --optimize) 08:54
09:04 mikehh_ joined
dalek rrot: r42906 | bacek++ | branches/cs_csr_cleanup/src/call/args.c:
Rename csr_elements and csr_set_integer to semantically correct csr_returns_count and csr_reallocate_return_values.
09:09
09:11 mikehh joined
dukeleto mikehh: pong 09:13
mikehh dukeleto: regarding your question a few hours ago - my test run(s) usually take about 20+ minutes, but that starts from a make realclean, and a smolder test as well as fulltest 09:15
dukeleto: I always run fulltest with logging and TEST_JOBs=5 09:16
dukeleto mikehh: do you ever time just the test run and not the compile? 09:18
09:18 JimmyZ joined
mikehh dukeleto: and I don't start fulltest until make smoke has got to the p's in t/pmc as t/pmc/threads.t and t/pmc/timer.t fail if run in both smoke and fulltest 09:18
dukeleto: i usually run date before each step 09:19
dukeleto: I am about to do a run - I will nopaste the times in about 30 minutes 09:21
dukeleto mikehh: yes, i would just like to know about test runtimes
mikehh: i.e. how long "make test" takes on your box 09:22
"make fulltest" is fine too
mikehh dukeleto: I of course have the timings for each test run in the logs i.e. from testb, testC, testf, testg, testr and testS etc 09:23
dukeleto mikehh: i just need "make test" or "make fulltest", knowing each core isn't that important 09:25
mikehh: for instance, on one of my machines, make -j 3 fulltest is 90 seconds 09:26
dalek rrot: r42907 | bacek++ | branches/cs_csr_cleanup/src/call/args.c:
Rename csr_set_foo_keyed_int to csr_fill_foo
rrot: r42908 | bacek++ | branches/cs_csr_cleanup/src/call/args.c:
Rerun headerizer
rrot: r42909 | bacek++ | branches/cs_csr_cleanup/src/call/args.c:
Merge csr_set_pointer_keyed_int and csr_push_integer into single function. We are not limitied by very narrow VTABLE functions anymore.
rrot: r42910 | bacek++ | branches/cs_csr_cleanup/src/call/args.c:
Made csr_reallocate_return_values to return reallocated values.
09:43
rrot: r42911 | bacek++ | branches/cs_csr_cleanup/src/call/args.c:
Change semantic of csr_set_pointer to csr_push_pointer. It simplified it a lot.
purl dalek: that doesn't look right
rrot: r42912 | bacek++ | branches/cs_csr_cleanup/src/call/args.c:
Merge csr_allocate_initial_values and csr_reallocate_return_values.
bacek Ok, branch is ready. 09:50
mikehh dukeleto: got to go out for a bit - bbl 09:52
dukeleto bacek: you need testing? 09:56
bacek dukeleto, it will be helpful. But there is not so many changes. 09:57
dalek nxed: r243 | julian.notfound++ | trunk/winxedst1.winxed:
unary - in stage 1
09:58
dukeleto bacek: what about benchmarking?
dalek rrot: r42913 | bacek++ | branches/cs_csr_cleanup/src/call/args.c:
Remove copypasta error.
bacek dukeleto, there is no performance changes. It's just cleanup - mostly renaming functions. Merge few of them into single one.
dukeleto bacek: gotcha 10:00
dalek nxed: r244 | julian.notfound++ | trunk/Makefile:
tests for sub operator
10:03
bacek dukeleto, what version of trunk in your benchmarks? Before or after cs_csr_merge? 10:04
dukeleto bacek: r42903, after 10:12
dalek nxed: r245 | julian.notfound++ | trunk/t/sub.t:
forgot to add t/sub.t in last commit
10:18
10:20 mikehh_ joined
bacek dukeleto, any luck with testing? I'm going to merge branch back to trunk. 10:37
10:51 mikehh joined
dalek rrot: r42914 | bacek++ | trunk/src/call/args.c:
Merge cs_csr_cleanup branch back to trunk.
11:05
mikehh dukeleto: make -j test TEST_JOBS=20 runs in 65 seconds for me 11:36
that's just the tests - built already 11:37
Files=340, Tests=12150, 30 wallclock secs ( 2.55 usr 0.86 sys + 50.29 cusr 18.11 csys = 71.81 CPU) 11:39
dukeleto: make- j fulltest TEST_JOBS=20 FAILS - a lot of tests don't like being run in parallel 11:48
11:52 JimmyZ joined 12:01 bacek joined
bacek o hai 12:01
mikehh hi bacek 12:02
bacek moritz, looks like irclog.perlgeek.de is slightly broken
aloha mikehh
mikehh All tests PASS (pre/post-config, smoke (#30638), fulltest) at r42914 - Ubuntu 9.10 amd64 (g++ with --optimize) 12:03
bacek: everything seems ok after the latest merge
bacek mikehh, it was pretty small branch. No big functional changes, just functions renames and merging. 12:04
mikehh dukeleto: even less time if I use TEST_JOBS=40 - elapsed 37 seconds and 12:09
dukeleto: Files=340, Tests=12150, 23 wallclock secs ( 2.61 usr 0.90 sys + 46.93 cusr 16.23 csys = 66.67 CPU) 12:10
dukeleto: the rest of the time is spent building nqp 12:11
dukeleto: that's for make -j test TEST_JOBS=40 12:13
dukeleto: elapsed also includes my typing time 12:14
12:45 iblechbot joined
JimmyZ smolder.plusthree.com was down? 12:52
mikehh jimmyZ: it worked for me about an hour ago - haven't tried since - let me see 12:56
JimmyZ: I can connect to it now 12:57
12:59 joeri joined
JimmyZ mikehh: still down here :) 13:00
mikehh JimmyZ: I sometimes fail to connect after a smolder test - you can resend with the following (from parrot) 13:05
JimmyZ: perl -Ilib -MParrot::Harness::Smoke -e'Parrot::Harness::Smoke::send_archive_to_smolder(Parrot::Harness::Smoke::collect_test_environment_data())' 13:06
JimmyZ: if that was the problem? 13:08
JimmyZ mikehh: I think it may be blocked by the Chinese Great Fire Wall. 13:09
though I hate it. :) 13:10
yes, It is blocked 13:12
mikehh you should get an acc on feather.perl6.nl and work through that 13:13
why on earth would they block smolder.plusthree.com 13:14
JimmyZ the Great Fire Wall blocks many sites, such as twitter, blogspot, facebook. 13:17
the gov doesn't like them. :)
mikehh I can understand their reasoning with social networking sites - though I think they are totally wrong - ostrich mentality (head in sand maybe) 13:19
13:19 kid51 joined
JimmyZ hello, kid51 13:26
kid51 Hi JimmyZ 13:27
JimmyZ I had post comment to the patch ticket. :)
kid51 Yes, I saw that. 13:29
I knew of only 8 patches; I didn't see the other 3.
The actual subject matter of the patches is beyond my scope. 13:30
You'll need other people to evaluate whether they *should* be applied.
I was simply trying to see whether they compiled or not.
You ask in TT: "Could you applied which maked succeeded?" 13:31
Do you mean: "On which individual patches did make succeed?" 13:32
dalek tpfwiki: Garry Wertu | Parrot 13:53
tpfwiki: www.perlfoundation.org/parrot/index.cgi?parrot
14:04 JimmyZ joined
JimmyZ kid51: yes 14:05
it's non-english, but I could edit it again. ;)
s/could/couldn't/
kid51 JimmyZ: If we should no longer be looking at this patch, you can remove it from the TT: trac.parrot.org/parrot/attachment/t...cage.patch 14:12
JimmyZ kid51: I have no access. :( 14:14
kid51: I can add it but I can't edit :)
kid51 okay; deleted 14:17
JimmyZ kid51: So could you create a branch for testing my patches? 14:26
I will continue to work for these pmcs to provide new patches. 14:27
kid51: there is a problem for me to test them between two different places. 14:29
nopaste "kid51" at 70.85.31.226 pasted "3 test failures after applying 7 patches" (987 lines) at nopaste.snit.ch/18980 14:32
kid51 JimmyZ: Please take a look at those test failures first.
JimmyZ kid51: well, I will take a look 14:36
kid51 Try to identify which patches might be generating those failures. Once you get them passing, we can have someone who knows more about the substance of your changes (which are deep in core) to review them. 14:41
JimmyZ kid51: thanks 14:51
kid51: I will do it tomorrow, good night ;) 14:52
kid51 The Vtable.pm patch passes make test when applied by itself.
afk 14:53
JimmyZ yes, kid51 just removed some unused macros 14:54
14:54 Essobi joined
JimmyZ s/kid51/it/ 14:54
dalek rrot: r42915 | fperrad++ | trunk/src/pmc (18 files):
[cage] improve C indentation, see TT #1329
14:57
rrot: r42916 | fperrad++ | trunk/src (13 files):
[cage] improve C indentation, see TT #1329
rrot: r42917 | fperrad++ | trunk/src (31 files):
[cage] improve C indentation, see TT #1329
14:59 flh joined
flh hi! 15:01
I had a little question: why has CallSignatureReturns been removed? is it only because now Parrot creates one PMC less than before on each Sub call, so the GC runs faster? 15:03
or was there a deeper reason?
naypalm is there a function that does similar? 15:04
dalek rrot: r42918 | fperrad++ | trunk (30 files):
[cage] improve C indentation, see TT #1329
15:15
pmichaud good morning, #parrot 15:29
15:34 jan joined
moritz the IRC logs seem to have lost some data today, sorry for the inconvenience 15:49
15:49 Psyche^ joined
kid51 msg Coke Someone spammed your last post on perlfoundation blog 15:51
purl Message for coke stored.
15:54 tetragon joined 16:09 payload joined 16:10 Zak joined 16:14 Zak joined
mikehh All tests PASS (pre/post-config, smoke (#30656), fulltest) at r42918 - Ubuntu 9.10 amd64 (gcc with --optimize) 16:16
kid51 purl coverage 16:43
purl i heard coverage was cv.perl6.cz
plobsing_ hmm looks like src/ops/*.ops aren't getting their coverage attributed correctly. 16:52
is there an easy way to fix that?
kid51 I don't know -- but ISTR a Trac ticket on that subjet. 16:58
s/subjet/subject/
TT #1181 17:00
trac.parrot.org/parrot/ticket/1181
plobsing_: I guess if it were easy we would have done it already :-) 17:01
plobsing_ its weird because the coverage seems to work for dynopslibs/*.ops
s/dynopslibs/dynoplibs/ 17:02
kid51 Here is a pure guess: 'make' runs two programs: tools/build/ops2pm.pl and ops2c.pl. Might it be the case that by the point coverage stats start getting collected, only the resulting .pm and .c files are visible? 17:03
Would gcov (which is what I think we're using under the hood) be able to detect source code *antecedent* to C-code? 17:05
plobsing_ it does with pmcs
and dynops
I think it works using #line preprocessor statements 17:06
kid51 In the 'make cover' target, I see that 'gcov *.c' is called in each directory in $(COVER_DIRS) -- but there are no .c files in src/ops/ 17:14
Could we say 'gcov *.c *.ops'? 17:16
plobsing_ I've got it 17:18
dynops run ops2c in the $(ROOT)/src/dynops directory 17:19
ops run ops2c in the $(ROOT) directory
thats the only diff I can see
it affects the #line statements, which might in turn affect gcov
17:23 theory joined, brrant joined, mikehh joined
dalek rrot: r42919 | jkeenan++ | trunk/include/parrot/pobj.h:
Applying part of patch submitted by jimmy++ in ļæ½trac.parrot.org/parrot/ticket/1346.
17:26
17:26 Zak joined
fperrad japhb, see github.com/TiMBuS/fun/blob/master/p...e/fun.json 17:31
flh is there an easy way to run some benchmark for Parrot? I think I have an improvement for the calling conventions, yet I'd like to test if it is significant or not 18:02
dukeleto flh: yes
flh: you ask me. that is the easy way. I can also tell you how to recreate my benchmarking setup. That is not as easy 18:03
flh: do you have a branch somewhere? 18:07
flh only my local copy of parrot's trunk 18:10
dukeleto flh: svn or git branch ?
18:11 colomon joined
flh svn: the only thing I've done for the moment is a checkout of the trunk 18:11
colomon Pardon me, can someone quickly give me a pointer in getting a debug build of parrot? Is it simply a matter of running Configure.pl with --debugging=1 and no --optimize? 18:14
dukeleto colomon: --debugging=1 is default 18:15
colomon My Makefile contains -DDISABLE_GC_DEBUG=1 -DNDEBUG -O3 in CFLAGS, so I'm assuming --debugging=0 is being set by Rakudo's --gen-parrot, as well as --optimize? Or something like that? 18:17
dukeleto colomon: looks like, you probably want to add -g in there and get rid of -DDISABLE_GC_DEBUG=1 -DNDEBUG
colomon Is this most easily done by hacking the top-level Makefile? 18:18
dukeleto colomon: yes 18:19
colomon Groovy. Thanks!
dukeleto flh: you can try to get github.com/notbenh/euler_bench on your system, or you can push a public branch somewhere and i can benchmark it. your call.
colomon: no worries
18:20 ttbot joined
flh dukeleto, git complains about your URI, I'm trying to find why 18:21
18:21 Zak joined
flh ok, my mistake, I found the clone URI 18:22
dukeleto flh: :) 18:25
plobsing_ config/gen/platform/ansi/exec.c Parrot_Exec_OS_Comman() 18:29
shouldn't that be Parrot_Exec_OS_Comman*d*()
? 18:30
flh dukeleto, ok, git cloned euler_bench, and installed dependencies: what's my next move?
18:31 mikehh joined
dalek rrot: r42920 | fperrad++ | trunk/runtime/parrot/library/distutils.pir:
[distutils] throws an exception when a command system fails
18:32
dukeleto flh: write a yaml file 18:34
flh: there is an example in examples/ 18:35
flh: then run it like so: BENCH_CONFIG=bench.yaml ~/git/euler_bench/bin/bench ~/svn/parrot/examples/benchmarks/primes2.pir parrot --count=10 --order=avg 18:36
flh: if you just want to bench a branch against trunk, delete all the parrot interpreter but 2, and add the directory where your branch is compiled and make sure the directory for your parrot trunk is correct
dalek tpfwiki: unregisteredlewis@gmail.com | Parrot
tpfwiki: www.perlfoundation.org/parrot/index.cgi?parrot
dukeleto flh: then you should be good to go 18:37
flh: i would recommend at least --count=100 to get good results
flh: and look out for outliers
fucking spammers 18:39
18:41 mikehh joined
dukeleto can we just delete www.perlfoundation.org/parrot/ ? 18:42
or make it read only?
moritz deletion +1
dukeleto dealing with spammers on wiki we don't care about anymore is just fucking insane
moritz making it RO seems like a bad idea, because it will be outdated very soon
(or is already, dunno)
dalek tpfwiki: jonathan@leto.net | Parrot 18:43
tpfwiki: www.perlfoundation.org/parrot/index.cgi?parrot
dukeleto moritz: it consists of a single page with no content linking to our current wiki
moritz: which can be vandalized 18:44
like it just was, by Zend people
dalek rrot-plumage: 5313c87 | japhb++ | metadata/fun.json:
[METADATA] add fun, care of fperrad++
japhb It should be RO, since it's just a pointer -- and we don't want people who've gotten old links from some google search to be lost.
moritz ok, RO then 18:45
18:46 mikehh joined
dukeleto japhb: redirect would be better 18:47
japhb: i just sent an email to tpf-steering. we shall see 18:48
japhb dukeleto, if that works in that particular system, great
I just assumed it would be easier to set RO than 302
(or actually, 301, come to think of it)
19:38 colomon__ joined 19:42 integral joined 19:43 Zak joined 20:12 cognominal joined 20:29 Whiteknight joined
Whiteknight good afternoon #parrot 20:35
pmichaud good afternoon, whiteknight 20:36
Whiteknight I'm looking through your email now, pmichaud 20:37
pmichaud thanks :)
Whiteknight my problem is that I don't know enough about Perl6 semantics. I could probably come up with a few naive "why don't you just do X" suggestions that are going to fall flat 20:38
pmichaud note that my example isn't Perl 6.
Whiteknight True, but you still have semantics beyond what little you've shown that need to be satisfied
pmichaud it's any language that needs to be able to have loop "continue" or "break" from within a nested lexical block.
so my example applies at least to PHP, Perl 5, and Perl 6 20:39
I suspect to python also, but I'm not familiar enough with python to say for sure.
Whiteknight And I'll save time by presuming that non-exception-based solutions probably won't hack it? 20:41
pmichaud if you can come up with a non-exception based solution, I'd consider it. But I suspect it still involves continuations of some sort, which are effectively exceptions.
Whiteknight this is the best argument I've seen so far for keeping the label-based handlers 20:44
pmichaud fwiw, 'return' has the same issue.
I just figured that the loop control breaks illustrated the problem more directly. 20:45
20:46 bacek joined
Whiteknight in Perl6, can people define custom handlers for last/next? 20:47
pmichaud yes.
and next/last are indeed functions, not keywords. 20:48
Whiteknight see, all my ideas heretofore don't satisfy that
pmichaud tcl has the same issue as well, I believe. 20:50
20:50 lucian joined
Whiteknight Let me recap really quick: 20:50
1) There are very big problems with the current system of nested runloops + label-based exception handlers 20:51
pmichaud (I disagree with the items in #1 being connected, fwiw)
Whiteknight pmichaud: whether you agree or not, those two factors together are the "inferior runloop problem"
pmichaud no, I think the inferior runloop is independent of label-based exception handlers.
i.e., I think a sub-based exception handler has exactly the same inferior runloop issue. 20:52
Whiteknight technically, yes. But this is a very easy and obvious way to manifest it
no, sub-based handlers will be immune from those problems. They were conceived as being a solution
pmichaud I'd like to see how a sub-based exception handler resolves the inferior runloop problem.
I don't think it does.
Whiteknight I've done plenty of analysis on it in the past. I will see if I can dig some of that up 20:53
but in short, I have no doubt about it
pmichaud as I said, an example would really help.
we already have a very short pir example to demonstrate inferior runloop. I'd like to see a sub-based version of that example. 20:54
Whiteknight where's the PIR version?
purl the PIR version is probably gone i think
Whiteknight purl forget the PIR version
purl Whiteknight: I forgot pir version
pmichaud TT #833 20:55
moritz groups.google.com/group/parrot-dev/...15c6?pli=1
pmichaud I can come up with an even smaller example. 20:56
nopaste "pmichaud" at 66.25.4.52 pasted "smaller inferior runloop example (for whiteknight++)" (28 lines) at nopaste.snit.ch/18981 21:01
pmichaud actually, let me revise that a bit. 21:03
nopaste "pmichaud" at 66.25.4.52 pasted "smaller inferior runloop example #2 (for whiteknight++)" (31 lines) at nopaste.snit.ch/18982 21:05
Whiteknight yes, that's a very concise example 21:06
pmichaud let me add a small complicating factor
nopaste "pmichaud" at 66.25.4.52 pasted "smaller inferior runloop example #3 (for whiteknight++)" (36 lines) at nopaste.snit.ch/18983 21:08
pmichaud the "tricky" part that I haven't figured out yet is how a sub-based exception handler would be able to set the value of "result". 21:09
21:09 kurahaupo joined
Whiteknight result would have to be a lexical 21:10
and take my word for it that the final implementation of sub-based handlers would be (or would be able to be) lexically nested within the calling context 21:11
or, within the context where they are defined, I mean
pmichaud even assuming it's a lexical, I don't see how control returns to 'main' when an exception occurs.
Whiteknight a continuation 21:12
purl a continuation is probably builded inside the opcode, there is no way to pass a differente location.
Whiteknight purl forget a continuation
purl Whiteknight: I forgot continuation
pmichaud isn't that what we have now... a continuation?
Whiteknight okay, let me rephrase a little 21:14
pmichaud a complete example of the above would be far more illustrative :)
Whiteknight something has to give. What we have now is broken, so we need to change *something*
pmichaud I understand that something is broken. I don't believe it's the label-based continuations that are the source of the inferior runloop problem.
or, if they are, I don't see how sub-based continuations resolve that.
Whiteknight we could prohibit that exceptions thrown in a nested runloop cannot be handled by a handler defined in an external runloop
but you've already said that option is unacceptable
pmichaud correct, we always have to be able to trap exceptions. 21:15
Whiteknight We could resolve this if we completely refactored runloops, but that's months away if it ever happens
I'm talking about 3.0, and there's no guarantee we would even completely solve it
pmichaud I believe that the correct solution is to have proper "rollup" functionality available for subs and exceptions. 21:16
Whiteknight So if we have sub-based handlers, and if every handler must end with an explicit "rethrow" or "continue-at" command, we can keep the C execution context and PIR executin contexts more closely alighned
aligned 21:17
here's what we need: (more)
21:17 mikehh joined
pmichaud having every handler end with explicit rethrow or continue-at isn't exclusive to label-based exception handlers, though. 21:17
i.e., requiring an explicit rethrow or continue-at can work for label-based handlers the same as sub-based ones. 21:18
Whiteknight there's no way to enforce the "every handler must explicitly end" rule with label-based handlers
you find a way, we;ll do it
pmichaud we don't have to enforce it (more)
the enforcement is "if you don't do this, then you get inferior runloops"
Whiteknight we need to enforce it. That's the problem in a nutshell
pmichaud there are lots of things that occur in Parrot that we don't enforce 21:19
Whiteknight "do it wrong and there be segfaults" is a bad strategy
pmichaud ...note that I didn't get a segfault, I got an exception.
getting an exception is valid.
Whiteknight then you won the crapshoot
because more often than not segfaults happen in these cases
pmichaud I'm not sure that's true anymore. 21:20
Whiteknight maybe somebody wallpapered over that nasty effect
pmichaud all of the inferior runloops we've been getting lately are exceptions, not segfaults.
anyway, all I'm saying is that the solution (require rethrow or continue-at semantics) doesn't absolutely require sub-based exceptions to work
beyond that, this problem exists for more than just exceptions -- it exists for any form of continuation 21:21
i.e., anytime an inferior runloop invokes a continuation from a superior runloop
Whiteknight to finish what I was saying earlier, the solution is to find all cases where we jump between runloops and perform the necessary fixes
and what we need to do is limit the number of cases where we even need to check 21:22
otherwise the fix is intractably complicated
pmichaud I think that goes against parrot's underlying model.
(limit the number of cases where we check)
but you'd have to discuss that part with allison.
Whiteknight parrot's underlying model is broke
pmichaud no, I mean the model of having continuation-based control.
if you're saying we need to get rid of continuations altogether... that would seem to go against everything we've worked towards. 21:23
if you're saying we need to limit the ways in which continuations can be used... that also seems to go against Parrot's design
Whiteknight no, not get rid of continuations
pmichaud anyway, I have to head off to my soccer playoffs 21:25
21:27 Andy joined
pmichaud I've provided two PIR examples currently being handled with label-based continuations, before we deprecate the existing mechanism we really need to know what the replacement will be (because it affects PCT and several other tools pretty heavily) 21:27
dukeleto pmichaud: i hear what you are saying about benchmarks. i am working with a the few benchmark scripts that I have. i can start to do similar benchmarks with HLL's 21:29
pmichaud: but i also feel that it is informative to know how our performance is a function of version number. i was not trying to imply anything about dev priorities or anything like that 21:30
pmichaud dukeleto: perhaps you weren't, but japhb did. 21:31
21:32 bacek joined
pmichaud my fear is mainly that it gets people to look at the wrong things and draw the wrong conclusions. 21:34
Whiteknight build with --maintainer is broken 21:41
at least on my system
hmmm...nevermind It seems to work now 21:44
NotFound Winxed also uses label based exception handlers. 21:45
Whiteknight everybody uses them right now 21:47
it's the only real option
21:52 chromatic joined
mikehh All tests PASS (pre/post-config, smoke (#30663), fulltest) at r42920 - Ubuntu 9.10 amd64 (g++ with --optimize) 21:52
cotto chromatic, ping 22:08
dalek rrot-linear-algebra: 4c9c5dc | Whiteknight++ | (3 files):
Merge branch 'master' of git@github.com:Whiteknight/parrot-linear-algebra
22:15
rrot-linear-algebra: c8a29fd | Whiteknight++ | t/harness:
harness now exits with non-zero status on failure. This makes the sanity test chaining do the right thing
rrot-linear-algebra: 30ff9cc | Whiteknight++ | t/00-sanity.t:
fix the sanity test so that things are sane on failure
rrot-linear-algebra: 201b7b2 | Whiteknight++ | t/ (2 files):
rename 00-sanity to just sanity
chromatic pong 22:29
dalek nxed: r246 | julian.notfound++ | trunk/ (3 files):
return in stage 1
22:31
cotto chromatic, I need a quick sanity check on a change to the profiling runcore. Currently I write output to the pprof directly through fprintf, which isn't terribly extensible.
Does this sound like a good idea: for all output to the pprof, there's a single Parrot_Hash* in the runcore struct. When I want to print a value to the pprof, I add a key/value to the hash (e.g. parrot_hash_put(interp, runcore->hash, "time", "1324"), possibly using a #define'd constant for the keys. To record data (i.e. to a pprof), I just iterate the hash and clear it when I'm done.
This would make it easier to have multiple output formats and would minimize the amount of code that needed to care about the output format. The main concern is that this could negatively impact speed.
chromatic As long as you don't cause allocations from Parrot's GC, that should be okay. 22:32
cotto ok 22:33
chromatic We do have to gyrate to avoid measuring the time spent in the profiling core versus the code profiled, but we have to do that anyway.
cotto yes
chromatic There'll be some hash reallocations, but those amortize out. 22:34
cotto I'd be using a Hash* directly to avoid the unnecessary PMC overhead. It might also make sense to add a Parrot_hash_clear function to reuse the Hash to avoid a per-op allocation. 22:36
22:37 colomon_ joined
chromatic Makes sense. 22:37
naypalm can't we just have an extremely slow language with an awesome data type?! 22:38
cotto naypalm, atm we call that "Rakudo" ;)
naypalm well maybe! I do love the pmc though 22:39
22:39 Zak joined
cotto chromatic, thanks. 22:42
dalek trixy: c3c9dc8 | Whiteknight++ | t/ (2 files):
move the operators test to the syntax folder
22:46
trixy: d8fc170 | Whiteknight++ | (8 files):
start breaking the 303-matrix-operations test file into individual files for different operations
trixy: db4b1db | Whiteknight++ | t/ (7 files):
break the remaining function tests out of the matrix-operations conglomerate file
trixy: abf0b10 | Whiteknight++ | t/functions/mtimes.t:
fix the mtimes function tests
23:30 Zak joined 23:34 jan joined 23:39 mikehh joined
cotto headerizer's error messages leave much to be desired 23:45
23:46 payload joined
dukeleto cotto: patches welcome! 23:49
purl somebody said patches welcome was ponies welcome or Set Objectives, Achieve Results! or swahili for "Put up or shut up."
Whiteknight cotto: in other news, headerizer has error messages? 23:50
I thought it failed silently 23:51
23:51 mikehh joined
cotto it are dum 23:53
23:53 davidfetter joined
cotto It gives error messages about things that aren't there 23:55