Parrot 3.3.0 released | parrot.org | Log: irclog.perlgeek.de/parrot/today” | Accepted GSoC Students announced! | GSoC student information emails coming out soon
Set by moderator on 26 April 2011.
00:29 GodFather left
plobsing ping cotto, bacek 00:45
cotto plobsing, pong 00:47
plobsing can we eliminiate TT #1654? I don't see ops.num anywhere and I suspect recent changes to opsc have eliminated it. 00:48
cotto It's definitely gone.
plobsing and now, so is the ticket 00:49
cotto It was one of those things where when I asked "Why do we have this?", nobody had a good answer.
thanks
plobsing++ 00:50
dalek TT #1654 closed by plobsing++: ops2c should complain about ops numbering in ranges 00:52
TT #1654: trac.parrot.org/parrot/ticket/1654
00:56 kid51 joined
tcurtis Is plumage broken again? 00:58
whiteknight is it? 01:02
git you update?
did you update? 01:03
nopaste "tcurtis" at 192.168.1.3 pasted "parrot-nqp Configure.nqp # parrot 3.3" (8 lines) at nopaste.snit.ch/42666 01:05
tcurtis whiteknight: it appears to fail to configure for me. I haven't yet looked into the details of the problem. 01:06
whiteknight did you update plumage? That looks like an old error message
and you're getting the new plumage from github? 01:07
tcurtis Github?
cotto yup
tcurtis Nevermind. That's likely my problem. 01:08
cotto We need to take the gitorious version down.
That caught me earlier too.
tcurtis Plumage from github appears to work. 01:12
cotto good news there
whiteknight yay
01:24 mtk left 01:31 mtk joined 01:40 whiteknight left
dalek rrot: a67bfbf | plobsing++ | / (12 files):
remove remaining ops.num support infrastructure
01:45
cotto conf time 01:49
01:55 cotto left, nopaste left 02:02 nopaste joined 02:10 kid51 left
dukeleto ~~ 02:19
02:42 soh_cah_toa joined, woosley joined
soh_cah_toa anyone familiar w/ rosella? i was wondering if you can use it w/ nqp. it looks like you can 02:43
dukeleto soh_cah_toa: yes, i think it is written in NQP 02:46
soh_cah_toa okay 02:47
dukeleto soh_cah_toa: it is very much designed to be used with NQP
soh_cah_toa hmmm...i am having THE hardest time deciding which language to use for my gsoc project
for a while, i was leaning towards nqp but now winxed is looking a little better 02:48
but a BIG disadvantage is that winxed isn't include w/ parrot. anyone wishing to use the debugger would need winxed and i don't like dependencies
i was kinda hoping i could package the debugger w/ parrot like it is now. but if i use winxed, that's not possible 02:49
dukeleto soh_cah_toa: yeah, that is why using NQP is probably a better idea, but talk with your mentor 02:50
soh_cah_toa yeah we have. he's the one who turned me onto winxed
bubaflub soh_cah_toa: you could include the PBCs 02:56
soh_cah_toa: then you wouldn't require winxed to run, just to build the debugger
soh_cah_toa hmmm...that's an idea
but how could someone run the tests then? 02:57
well, the average user probably won't be needing that anyway. only developers who probably have winxed installed 02:58
dukeleto soh_cah_toa: you could just generate the PIR from the winxed source, and distribute that with Parrot, i guess 02:59
soh_cah_toa ah....that's not a bad idea
dukeleto soh_cah_toa: any parrot language can generate the corresponding PIR or PBC and you can just store that 03:00
soh_cah_toa right
dukeleto soh_cah_toa: you don't pay the cost of parsing it every time you run it if you store PBC
soh_cah_toa: something to keep in mind
03:01 woosley left
soh_cah_toa that's true 03:01
03:07 dafrito joined
atrodo coke++ 03:08
03:12 hudnix left 03:24 soh_cah_toa left 03:42 particle1 joined, AzureStone left, plobsing left 03:43 plobsing joined 03:44 particle left 03:47 AzureStone joined 03:50 AzureSto_ joined 03:54 AzureStone left 03:55 bubaflub left 03:56 TonyC left, nopaste left, TonyC joined 04:02 nopaste joined 04:06 nopaste left 04:12 nopaste joined 05:05 theory left 05:09 rohit_nsit08 joined 05:55 plobsing left, rohit_nsit08 left 05:56 cotto joined
cotto ~~ 05:56
06:05 ShaneC joined
dukeleto ~~ 06:06
dukeleto just had a nice dinner with cotto++ and now we are planning to take over the world
06:52 benabik_ joined, benabik left, benabik_ is now known as benabik
dukeleto benabik: howdy 06:55
benabik dukeleto: Very sleepy but here. What's up? 06:56
dukeleto benabik: sleepy as well. Last minute hacking on my presentation for the morning 06:58
benabik likes Colloquy's push notifications. Very handy.
cotto 'night 07:02
benabik dukeleto: Presentations are awesome. Looking back, I guess the howdy was from my login? I think the network hiccuped and my laptop relogged... 07:03
dukeleto benabik: yep. saw you jump back in the channel :) 07:10
07:11 fperrad joined
benabik dukeleto: Nice to feel welcome, even if I'm not actually there. :-D I'm going to hit the sack. Break a leg with the presentation. :-) 07:12
07:18 dafrito left 07:34 dafrito joined 08:47 ShaneC left 08:52 benabik_ joined, benabik left, benabik_ is now known as benabik 09:39 jrt4__ left
dalek rrot: 75c90bf | allison++ | ports/debian/ (13 files):
Updating Debian packaging files for Parrot 3.3.0 release.
09:50
rrot: 1bafbdb | allison++ | / (12 files):
Merge branch 'master' of github.com:parrot/parrot
10:12 mj41 joined 10:23 luben joined 10:27 whiteknight joined
whiteknight good morning, #parrot 10:37
luben msg pmichaud I think I know what causes the performance differences that you have observed regarding GC and execution of rakudo testsuite. Improved tri-colour MS2 GC has landed in parrot 3.0. It does not have adaptive triggering - it kicked out every 1/8 of system memory allocated. It wasted a lot of memory and had long pauses. For example, on my system compiling rakudo used 700+ M. In parrot 3.1 Nick Wellnhofer have ported GC adaptive triggeri 10:51
aloha OK. I'll deliver the message.
luben ng system from MS to MS2 GC core. It compiled rakudo in in 400M but somewhat slower because it kicked more frequently. It also had improved on interactive loads - there were no long pauses. GMS also landed at the same time in master - it does not have adaptive triggering - it kicks minor collection on every 1/100 of system memory allocated. Older generation GC is started on 10 younger generation collection. It has 8 generations. So it wastes a l
ot less memory - it could compile rakudo in 256M of RAM and have further improved interactive behaviour. It does so with the performance of 1/8 bounded MS2 GC. My preliminary experiments show that 3-4 generations are enough and there also a lot other variables to tune - I have not done the extensive test in order to change the current defaults. This is my account of the performance differences that you have ovserved
shit...
msg pmichaud I think I know what causes the performance differences that you have observed regarding GC and execution of rakudo testsuite. Improved tri-colour MS2 GC has landed in parrot 3.0. It does not have adaptive triggering - it kicked out every 1/8 of system memory allocated. It wasted a lot of memory and had long pauses. For example, on my system compiling rakudo used 700+ M. (continued) 10:53
aloha OK. I'll deliver the message.
luben msg pmichaud In parrot 3.1 Nick Wellnhofer have ported GC adaptive triggering system from MS to MS2 GC core. It compiled rakudo in in 400M but somewhat slower because it kicked more frequently. It also had improved on interactive loads - there were no long pauses. GMS also landed at the same time in master - it does not have adaptive triggering - it kicks minor collection on every 1/100 of system memory allocated. Older generation GC is started
on 10 younger generation collection. (continued)
aloha OK. I'll deliver the message.
luben msg pmichaud It has 8 generations. So it wastes a lot less memory - it could compile rakudo in 256M of RAM and have further improved interactive behaviour. It does so with the performance of 1/8 bounded MS2 GC. My preliminary experiments show that 3-4 generations are enough and there also a lot other variables to tune - I have not done the extensive test in order to change the current defaults. This is my account of the performance differences t 10:54
hat you have ovserved
aloha OK. I'll deliver the message.
10:56 estrabd left 10:57 estrabd joined
whiteknight luben: At that point, an email might have been easier :) 11:02
luben: although the results look very interesting
luben: so GMS doesn't have adaptive triggering? How hard would that be to implement? 11:03
bacek ~~ 11:23
whiteknight, trac.parrot.org/parrot/ticket/2023
11:23 mj41 left
whiteknight bacek: ah, okay 11:23
dalek rrot/jit_prototype: 9d5bd6c | bacek++ | / (2 files):
Add fetching of ElementType from pointer type
11:53
11:53 kid51 joined
rrot/jit_prototype: 0fea15f | bacek++ | / (3 files):
Implement fetching of TypeKind
11:57 Patterner left, Psyche^ joined, Psyche^ is now known as Patterner
kid51 msg luben Can you put your GC findings in a post to parrot-dev? Thanks. 11:59
aloha OK. I'll deliver the message.
12:07 jsut joined 12:12 jsut_ left 12:14 lucian joined 12:29 hudnix joined
nopaste "kid51" at 192.168.1.3 pasted "debug parrot_nci_thunk_gen on darwin/ppc" (13 lines) at nopaste.snit.ch/42718 12:33
kid51 msg plobsing nopaste 42718 is what I get on your branch 12:34
aloha OK. I'll deliver the message.
12:41 sjn left 12:49 sjn joined
nopaste "kid51" at 192.168.1.3 pasted "more debugging output" (31 lines) at nopaste.snit.ch/42719 12:53
"kid51" at 192.168.1.3 pasted "still more debugging output" (85 lines) at nopaste.snit.ch/42720 12:57
whiteknight apparently I had a copy of libparrot2.6.0 in my /usr/lib folder that I wasn't aware of. All programs were using 3.3.0 *except* winxed, which was using the old versions 13:02
moritz rakudo has some test failures on newest parrot HEAD 13:11
./perl6 t/spec/S03-metaops/hyper.rakudo 13:12
... 13:13
ok 141 - hash - correct result from >>!
Too many positional parameters passed; got 3 but expected 2 in 'hyper' at line 269:CORE.setting in main program body at line 1
now rakudo changes involved
whiteknight that's an extremely strange failure 13:31
can you get a backtrace?
moritz a PIR level backtrace, if that helps you... 13:35
nopaste "moritz" at 192.168.1.3 pasted "PIR backtrace from hyper.t" (12 lines) at nopaste.snit.ch/42722 13:36
moritz I can try to bisect
whiteknight that's a very weird failure. I don't think anything has changed in parrot with regards to compiling or argument parsing 13:40
13:53 JimmyZ joined 14:03 JimmyZ_ joined 14:07 autark left, JimmyZ left 14:08 JimmyZ_ is now known as JimmyZ
dalek rrot: 16933ea | fperrad++ | src/pmc/boolean.pmc:
[PMC] add is_equal for Boolean PMC

needed by LOLCODE
14:09
tadzik LOL 14:11
whiteknight I wonder how hard it would be to write a bootstrapping LOLCODE compiler 14:17
dalek sella/path_refactor: f7fa5f8 | Whiteknight++ | src/core/Rosella.winxed:
Add in a prototype build_r function to build, calling BUILD in parent classes as well
14:18
sella/path_refactor: 7a057b6 | Whiteknight++ | s (6 files):
start fleshing out what the new system is goin to look like for Path. Breaking the search algorithm up into searcher classes
14:24 JimmyZ left 14:37 bubaflub joined
bubaflub ~ 14:37
cotto ~~
dukeleto bubaflub: mornin' 14:44
bubaflub mornin' dukeleto 14:50
14:51 ambs joined 14:54 lucian_ joined 14:55 fperrad_ joined
dukeleto is getting ready for LinuxFestNW with cotto++ 14:56
bubaflub: i am giving a talk in 2 hours
bubaflub dukeleto: nice. is it the one on Jitterbug? 14:57
14:58 fperrad left, fperrad_ is now known as fperrad, lucian__ joined, kid51 left 14:59 lucian left
dalek sella: f7fa5f8 | Whiteknight++ | src/core/Rosella.winxed:
Add in a prototype build_r function to build, calling BUILD in parent classes as well
15:02
sella: 25c805a | Whiteknight++ | s (5 files):
first draft of a new Lazy library. Allows creating lazy proxies, which only instantiate their target objects on demand
sella: 5c3a13a | Whiteknight++ | src/lazy/ (2 files):
fix lazy library so it builds and passes a few ad hoc tests
sella/gh-pages: 56a73af | Whiteknight++ | libraries/future.md:
add short blurb about lazy library
15:02 lucian_ left 15:04 utsl left 15:05 utsl joined
cotto bubaflub, yup 15:05
and he just added a slide
bubaflub cotto: cool
cotto though I'm still editing and polishing, so I'm hardly one to talk
15:06 autark joined
whiteknight cotto: you giving a talk? 15:07
cotto whiteknight, yup 15:08
at 1:30 15:09
whiteknight cotto: what about? Parrot
?
cotto of course
www.linuxfestnorthwest.org/sessions...t-state-vm
whiteknight is it going to be videotaped?
I would love to see that
cotto no idea 15:10
I'll try to find out though
whiteknight okay, awesome
15:19 utsl left, utsl joined 15:24 lucian__ left 15:30 jsut_ joined 15:31 lucian joined 15:32 JimmyZ joined 15:35 jsut left 15:37 mtk left, cotto left
benabik ~~ 15:41
15:41 lucian left 15:42 lucian joined 15:44 mtk joined
luben whiteknight, kid51, I have send extended post with my GC observations to parrot-dev 15:45
whiteknight luben++
luben I will have some time these weeks to benchmark GMS and try to tune it for general case. Also I could expose some of its parameters as parrot runtime options 15:47
15:54 jsut joined 15:59 jsut_ left 16:07 Coke left, Coke joined 16:12 Coke__ joined 16:13 Coke left 16:15 kid51 joined
kid51 luben, thanks for that post 16:15
16:16 JimmyZ left 16:23 theory joined
whiteknight yes, luben++ 16:23
luben: tunings and exposing some parameters would be awesome
or, just exposing parameters and teaching people how to tune would be fine too 16:24
luben I will work in that direction
some of parameters are hard to expose, e.g. number of generations
whiteknight yes, I imagine that is tricky 16:25
don't kill yourself over it.
16:30 plobsing joined
plobsing ~~ 16:34
whiteknight hello plobsing 16:35
plobsing: I want to set aside some time to chat with you in the coming weeks about packfiles
plobsing: I want to do everything I can to push forward the things Rakudo needs, but I also need to understand them all a little better first 16:36
my current strategy of praying every day that you don't get hit by a bus is unreliable 16:37
:)
plobsing kid51: can you get the output of Parrot_dlerror()? You can do that either by turning on PARROT_WARNINGS_UNDEF_FLAG (don't ask me how, I don't know), or by printing out the value of 'const char * const err = Parrot_dlerror();' in Parrot_dlfunc_p_p_sc_sc(). 16:38
whiteknight: I beleive I've expressed in the past my belief that the size of our packfiles does not significantly contribute to any runtime costs. I have yet to see benchmarks (on a recent parrot, we used to have issues) that contradict this view. 16:40
whiteknight plobsing: no, not those issues. The other things Rakudo wants about partial serialization 16:42
plobsing also, I know about packfiles by having read through and understood the code and having hex edited PBCs a sufficient number of times. I do not know of any quicker way of comming to this level of understanding.
whiteknight I don't expect to have the same level of understanding, at east not any time soon 16:43
Im trying to understand better what Rakudo needs, what effort that will take, and what (if anything) I can do to help
plobsing ah, if it is simply delimited serialization you're looking for, that is simpler 16:44
whiteknight that may be it 16:45
see, I don't even know what it is that I don't know about
I'm in a bad place :)
plobsing do you understand what delimited serialization is and how parrot isn't meeting that need? 16:46
whiteknight very very vaguely
plobsing OK, I'll try to give you the coles notes
whiteknight they want to be able to partially serialize without following all pointers, then reassemble when we thaw?
plobsing they want to avoid duplicates in their deserialized object graphs 16:47
whiteknight do they have lots of duplicates now?
plobsing whiteknight: less so now that we de-dup within a single constant table, but issues arise when working with multiple PBCs. 16:48
16:49 cotto joined
plobsing for example, rakudo always has the default perl 6 object metaclass loaded. so when I freeze a perl 6 object, I shouldn't store that bit. 16:49
in fact, the class probably also lives in a separate packfile, so that should also not be stored with the object
cotto ~~ 16:50
plobsing we want to maintain those object graph edges, but also maintain the uniqueness of the nodes.
the proposed solution is to store a reference into a different PBC as a placeholder in such situations 16:52
whiteknight ok
cotto is about to watch dukeleto give his jitterbug talk 16:53
plobsing there are a few distinct things we need for this to work
1) we need a way of signaling the serializer that an object should be stored as a reference and indicating what that reference should be
2) we need the serializer to act on these indications, storing references 16:54
3) we need the deserializer to follow the references appropriately
kid51 plobsing: I don't know how to do any of what you're requesting. My knowledge of gdb is minimal and general and less re parrot.
plobsing 4) we need rakudo/PCT/whatever to generate these hints where it is appropriate
kid51: one of your debug lines shows '14143 const char * const err = Parrot_dlerror();'. Please run one step beyond that line and print the "err" variable with "p err\\n" 16:56
kid51 (gdb) p err 17:00
$1 = 0x507284 "invalid handle passed to dlsym()"
plobsing well, then I suspect OSX here isn't respecting the SUS spec on dlsym 17:01
which we can work around
kid51 FYI, I'm failing to build on this branch regardless of whether I use cc=gcc or cc=g++. Right now, I have cc=gcc (but g++ for ld and link). 17:03
But master is building and testing satisfactorily on this machine right now, compiled with gcc 17:04
17:05 cotto left
nopaste "plobsing" at 192.168.1.3 pasted "[PATCH] OSX PPC dlsym patch" (31 lines) at nopaste.snit.ch/42765 17:06
plobsing kid51: try this ^^^^ 17:07
whiteknight: point (4) will most likely be handled by jnthn/rakudodevs, leaving the first 3 to parrot 17:09
but I'm not sure how immediate that need is going to be. Before they need this, they need to be able to store arbitrary constants to bytecode. PIR is not going to cut it there, so they'll need HLL generation of PBC, most likely POST->PBC. POST->PBC and NQP generation of arbitrary constants in bytecode are not even close, SFAIK. So the delimited serialization is not a pressing concern. 17:11
benabik plobsing: Hopefully by the end of summer generation of PBC will be much better. 17:13
plobsing the end of the summer is a long ways away. I'll work on things closer to when they stand a chance of being used as opposed to bitrotting. 17:15
oops, that patch does nothing. sorry 17:23
give me a minute to bootstrap the ops 17:24
whiteknight plobsing: benabik is doing the newPOST conversion for GSoC, so we will be generating bytecode directly from PAST/POST
that's what he means by end of the summer.
we don't need to wait for that, but it is a fixed deadline for the particular deliverable 17:26
so it's something we can plan around 17:27
kid51 plobsing: 'make' failed at same point
plobsing whiteknight: I understand that. My point remains that rakudo/nqp-nom cannot make use of the feature until that (and a few other related things) happen. If that's not happening until July/August, efforts in April/May seem premature. 17:28
whiteknight plobsing: right. So is there anything we can do beforehand? Any other cleanups/refactors in packfile-land that we can do to make life easier in september?
plobsing not really. we already have intra-PBC backreferences. inter-PBC crossreferences should follow that pattern fairly closely. 17:29
whiteknight I've been doing a little bit of aimless cleanup following the packfile_wrap branch, but nothing substantial 17:31
if packfiles are going to wait until the end of the summer, maybe I rearrange my priorities list and start working on 6model now instead 17:32
I'm very keen on that 17:33
nopaste "plobsing" at 192.168.1.3 pasted "[PATCH] OSX PPC dlsym patch v2" (107 lines) at nopaste.snit.ch/42766
plobsing kid51: please apply ^^this^^ to the clean HEAD (remove previous patch) and retry
whiteknight: that is probably the best course of action 17:35
afk # run
whiteknight plobsing: later
I bet we can get 6model in place and working well, at least in parallel with our current MOP, by the end of the summer 17:36
that should be a nice benefit for the JS and Python3 projects, if they both want to use it
should be nice for Cardinal to
too
PerlJam whiteknight: +1 on 6model 17:43
whiteknight PerlJam: you interested in joining the crusade?
PerlJam interested, yes. Lacking in time and knowledge and such though. 17:44
whiteknight blah, if time and knowledge were necessities, you'd never see me around here again 17:49
actually, before 6model I might want to play around with some of my PCC refactor ideas 17:53
17:54 cotto joined
cotto looks like lfnw isn't big on cameras 17:57
whiteknight damnit 18:03
cotto: I'm signing off. I'll talk to you about it later 18:11
18:11 whiteknight left
dukeleto ~~ 18:14
tcurtis ~~ 18:15
dukeleto tcurtis: how is your GSoC stuff going? 18:17
tcurtis dukeleto: I've started reading "Efficient Translators for LR(k) Languages", but haven't done much else yet. 18:20
18:20 theory left
dukeleto tcurtis: ok, good to know. Just checking on you :) 18:23
nopaste "kid51" at 192.168.1.3 pasted "2nd patch problematic" (342 lines) at nopaste.snit.ch/42768 18:26
kid51 plobsing: perhaps missing an include ? 18:27
I have to go afk soo
dukeleto is sitting in a "Life Changing Vim Plugins" talk with cotto++ 18:37
davidfetter which vim plugins have changed your life, dukeleto ? 18:38
kid51 The most *useful* talk I ever heard Damian give was "Everyday Vi" 18:39
18:39 kid51 left
cotto It's living up to its name. 18:40
adammonsen.com/wp-content/uploads/2.../notes.txt
davidfetter not quite enough of a vim devotee to use the irc plugin 18:43
benabik I wouldn't want to use Vim for anything other than editing. If I wanted everything and the kitchen sink, I'd use emacs. 18:44
cotto It's very fancy editing. 18:45
dukeleto++'s talk went well. I'm excited for him to get tuits to work on jitterbug some more. 18:52
bubaflub there is a nice program called vimana - it's basically cpanm for vim plugins 18:54
and it's perl based, hosted on github
cotto the speaker talked about three of those 18:55
time for noms
18:57 mj41 joined 19:01 cotto left
lucian bubaflub: that thing looks awesome 19:09
there was another one, working from the vim command line. sort of crap, though
i really need to fix my vim install, komodo edit's vi emulation has some sharp corners (although it is awesome) 19:10
tcurtis Typographical errors in the statements of theorems about parsing can be somewhat confusing.
19:18 dodathome joined
nopaste "plobsing" at 192.168.1.3 pasted "[PATCH] OSX PPC dlsym patch v3" (17 lines) at nopaste.snit.ch/42769 19:25
plobsing msg kid51 please try this patch on a clean HEAD nopaste.snit.ch/42769 19:26
aloha OK. I'll deliver the message.
19:28 theory joined 19:43 pjcj left 19:49 ambs_ joined 19:50 ambs left, ambs_ is now known as ambs 19:57 bluescreen joined 20:04 jrt4__ joined 20:33 dodathome left 20:34 Andy joined 20:38 pjcj joined 20:53 theory left 20:57 mj41 left 21:16 fperrad left 21:18 benabik left 21:22 ShaneC joined 21:23 benabik joined 21:33 theory joined 21:41 ambs left
dukeleto ~~ 21:49
cotto_work: you lie. You are not at work.
dalek TT #542 closed by plobsing++: Setting stdin to unbuffered doesn't seem to work. 21:50
TT #542: trac.parrot.org/parrot/ticket/542
dukeleto yay for closing TT's with 3 digit numbers 21:56
dalek rrot: 2cbb156 | plobsing++ | / (2 files):
eliminate PASM library that has been superceded by PIR equivalent
22:02
rrot: 23f3d6a | plobsing++ | examples/library/ncurses_life.pir:
update references to point to files that *exist*
22:05 lucian_ joined 22:09 lucian left 22:20 Andy left 22:29 lucian joined 22:33 lucian_ left 22:48 sjn left 22:53 soh_cah_toa joined 22:54 cotto joined
cotto ~~ 22:55
23:06 lucian_ joined 23:11 lucian left 23:13 whiteknight joined
whiteknight good evening, #parrot 23:18
lucian_ whiteknight: i commented on one of your blog posts 23:20
whiteknight lucian_: yes, I just replied
thanks!
lucian_ whiteknight: what i didn't say is that i have high hopes for async IO for cooperative systems 23:24
23:24 lucian_ is now known as lucian
whiteknight yes, async IO is a big ticket item that I think falls out of the proposed architecture quite nicely 23:24
lucian eventlet and gevent are interesting in python-land 23:25
whiteknight because if all Tasks are basically just Continuations, they become extremely cheap to churn through
23:25 mtk left
lucian with explicit continuations (greenlets/stackless) you can re-compose the control flow around the async IO 23:25
whiteknight so async IO means basically "fire off an IO request, take a continuation, abandon the current task"
lucian nods
for most applications, you might not even need explicit posix thread support 23:26
whiteknight all synchronous operations can be defined in terms of async operations and continuations
we can just keep stringing them together
lucian of course, you'll hit OS limitations pretty soon
whiteknight that's what I'm saying. For the first round of implementation, we can get tasks pretty easily and that will be enough for a whole class of programs
lucian the only solution for general async IO that really works is what gio does, thread pool
whiteknight then when we open up to threads, we take all those same tasks and simply say "spread out on multiple threads", and a lot of programs will get that essentially for free 23:27
callbacks, including library callbacks become trivial
callback function creates a task continuation and inserts it into the stream
lucian yes, and greenlet can be implemented trivially for pynie :)
whiteknight and it can happen on the thread where the call was originated, or on a different thread 23:28
lucian yes, it would be interesting
especially since you can safely deschedule at IO boundaries
the next scheduling might be on a different thread
that brings problems too though, especially on NUMA
whiteknight that's why I stress that data updates are not immediately visible 23:29
lucian i meant about cache locality 23:30
whiteknight how so?
lucian on NUMA, cpus get their own big cache and memory
if a task gets scheduled on a different CPU, it'll get huge costs by losing the cache on the previous cpu and accessing memory slowly 23:31
meh, that bridge is likely to be crossed later
but there are indeed many things that can happen with schedulers interacting (OS and parrot schedulers)
23:31 mtk joined
whiteknight well that's true with all sharing systems 23:32
we get around that by having several tasks operating on a single core, which makes data sharing between them cheap, and passing fewer messages betwen threads
if you want the most out of any particular architecture, you have to tailor your software to it
A big boon is keeping bytecode immutable so we don't need to worry about that 23:33
lucian yes, i vow to never pull&checkout parrot again if it embraces mutable bytecode :)
if i had my way, all of parrot's data structures would be persistent (in the immutable sense) 23:34
whiteknight PyPy 1.5 is looking pretty impressive 23:35
lucian: there's no way we can go all-immutable data with some of the languages we want to support 23:36
immutable strings is enough of a stretch for some applications that expect them to be easily mutable
lucian persistent data structures can very easily appear mutable
they just use structural sharing instead of cloning 23:38
the biggest benefit is again with concurrency
clojure is a great success story
the one big problem is GC 23:39
if you introduce OS-scheduled threads, GC gets complicated 23:40
whiteknight with GC, we have two options: Either we move to a concurrent algorithm, or we give each thread its own GC and disable direct sharing entirely
if all data sharing happens through local read-only proxies and message passing, we can give each thread its own mini-GC core 23:41
lucian you can't do a stop-the-world realistically, so each thread would have to have its own gc
whiteknight in the degenerate case with only one thread, we can go GMS like normal. If we can spread out to multiple threads, we can devote one to a concurrent GC
lucian but even then and even with just reads, it's quite complicated 23:42
whiteknight I have found a handful of concurrent GC algorithms that are very attractive
I don't think it will be so complicated
I suspect that a good tricolor algorithm could be used with multiple threads. 23:43
lucian perhaps i'm being pessimistic, but i'm not sure
but yeah, explicit sharing is a must i think
whiteknight instead of stopping the world, we stop each thread in turn with tricolor state
lucian w/e else happens
and other threads block if they try to access this thread through the explicit sharing channels?
whiteknight if the only sharing channels are messages, the blocked thread won't check messages during GC. They just sit in the mailbox 23:44
if the message is synchronous, the sender thread blocks. Otherwise, it doesn't
actually, only the sender Task blocks. Other tasks on that thread can still run 23:45
lucian true
if you guarantee soft real-time for the gc, you shouldn't get deadlocks because of this
i do think canonical did make a serious mistake with unity, though 23:47
they used Qt for the 2d version, totally ignoring kde's plasma 23:48
seems a waste
wrong channel
whiteknight heh 23:49
lucian anyway, this was a bit of a long break
i might just go straight to bed
whiteknight if we have a concurrent collector, there are no explicit pauses. If we go the tricolor route, we can keep pauses low with generations and dynamic triggering
lucian i've looked at concurrent collectors, they seem like dark magic 23:52
whiteknight no, that's only because they are deceptively simple
it's a tradeoff. algorithmic simplicity at the cost of a dedicated thread 23:53
also, most algorithms end up having "checkpoints" where other threads need to pause shortly
so they aren't perfect, but they do tend to be simple 23:54
lucian hmm
one paper i looked at did concurrent gc in the same thread
whiteknight I don't think I've seen a paper like that 23:57
I have too many papers, I need to go dig back through them
lucian: I'm thinking about pushing forward my plans for 6model. I bet I can get it integrated into Parrot, at least in parallel to the current MOP, by midsummer 23:58
if that happened, would it influence your decision about whether or not to use it for Pynie?