Index

Show enters and exits. Hide enters and exits.

00:01:07fbuilesvseydar: rubuildus 64 died running the specs but I couldnt see anything on OS 10.5/Ubuntu 32bits
00:01:27seydari'm on tiger/ppc, though
00:01:34seydarthe problem child
00:01:52fbuilesvseydar: any idea of what's rubuildus_ppc running? It seemed to finish the specs just fine
00:02:05seydar10.5, IIRC
00:02:45seydari think mine's about to finish (yay), but looks like its been failing >= 7 bajillion tests
00:03:11jnicklas enters the room.
00:03:53perdiy leaves the room.
00:04:17seydartake that back
00:05:14seydarits hanging
00:05:44seydarzomfg, i'll just wait untill they get fixed
00:05:53seydarnothing quite like being lazy to fix a problem
00:06:23fbuilesvseydar: would you mind resetting those changes to like 5883dd78a and see if it still happens? ;-)
00:06:34seydaruh, how?
00:07:25fbuilesvgit reset --soft 5883dd78a
00:07:59seydarthen a git pull or no?
00:08:17seydartoo late, running bin/mspec
00:08:21fbuilesvnope, just run the specs
00:09:42seydarugh. bajillionz of failures and errors. hanging atm
00:10:21fbuilesvseydar: after the reset?
00:10:35seydarafter the reset
00:10:48seydari ran the git cmd, then the tests, then cried to myself
00:10:51fbuilesvseydar: well, seems like my patches didn't break it after all, I wonder where's it hanging
00:11:12fbuilesvseydar: I cry in public a bit just to look interesting!
00:11:58seydaryoure a better person because of it
00:12:01seydarmust leave now
00:12:03seydaradiaux
00:12:08qwert666 leaves the room.
00:12:09fbuilesvsee ya
00:12:09seydar leaves the room.
00:13:53cored enters the room.
00:18:39dysinger leaves the room.
00:23:05srbaker leaves the room.
00:27:54hornbeck enters the room.
00:44:34anteaya_ enters the room.
00:48:14wmoxam enters the room.
00:51:06anteaya leaves the room.
00:53:42aotearoa enters the room.
00:54:52fbuilesv leaves the room.
01:01:38zimbatm_ leaves the room.
01:02:10stepheneb enters the room.
01:06:46stepheneb_ enters the room.
01:09:25AndrewO enters the room.
01:19:18stepheneb leaves the room.
01:27:52srbaker enters the room.
01:30:26jnicklas leaves the room.
01:33:20wmoxam leaves the room.
01:47:33srbaker leaves the room.
02:03:51srbaker enters the room.
02:06:39fbuilesv enters the room.
02:08:05d2dchat enters the room.
02:12:41srbaker leaves the room.
02:20:12lstoll leaves the room.
02:29:49KirinDav enters the room.
02:31:18tlockney_ enters the room.
02:31:36tlockney leaves the room.
02:31:54AndrewO leaves the room.
02:34:15KirinDav leaves the room.
02:37:28seydar enters the room.
02:37:49AndrewO enters the room.
02:43:27hornbeck leaves the room.
02:45:50_VVSiz_ enters the room.
02:46:40trythil enters the room.
02:47:51trythil_ enters the room.
02:48:02srbaker enters the room.
02:53:16VVSiz_ leaves the room.
02:55:12mkescher enters the room.
02:59:02srbaker leaves the room.
03:00:54hornbeck enters the room.
03:02:56hornbeck leaves the room.
03:04:57trythil leaves the room.
03:05:06RyanTM leaves the room.
03:05:24seydarrubinius has posix threads
03:05:30seydarbut why isn't rubinius parallel?
03:06:39RyanTM enters the room.
03:07:37djwhittyou can have parallel VMs
03:08:03djwhittthreads themselves are just green threads though
03:08:05seydarand how do you run multiple VMs?
03:08:13djwhittheh, no idea
03:08:16djwhittit can be done though
03:08:18seydarand whats stopping the threads from being POSIX or MPi?
03:08:43benny enters the room.
03:08:58djwhittMPI is just message passing mechanism as far as I know
03:09:17djwhittas far as why it doesn't use POSIX threads yet...
03:09:18djwhittnot sure
03:09:38benburkert leaves the room.
03:09:45djwhittprobably it's just more difficult to implement them
03:10:43benny leaves the room.
03:10:48seydarcuz parallel threads = teh 1337h4x
03:11:33djwhittI'm pretty sure they're going to be implemented at some point
03:13:31djwhittbut I don't think it's planned for 1.0
03:18:47benny enters the room.
03:19:35seydari completely forgot about 1.0!
03:19:42seydarwhen's it planned for release?
03:20:52djwhittI think they're trying to get preview release out before Railsconf
03:23:26d2dchat leaves the room.
03:26:39stepheneb enters the room.
03:27:01seydarthats cutting it close
03:27:16seydartiger/PPC has bajilionz of bugs after a recent release
03:27:58stepheneb_ leaves the room.
03:30:13headiusI don't think the railsconf milestone is intended to be a full 1.0 release
03:30:24headiusI think that would be pretty unlikely
03:30:37seydarah. PREVIEW release, djwhitt said
03:30:39seydari'm dumb
03:30:51seydaranyways, j'ai une questione pour vous
03:31:17headiusfire away, no guarantees
03:31:47seydarhow is code packaged up in C - threads?
03:32:00djwhittyeah, perhaps 1.0 preview is a bit strong. last I head they're going for something that can run rails at least a bit
03:32:01seydardoes using threads set up an enviroment thing?
03:32:25headiusis this a rubinius question?
03:32:37seydaryes
03:32:59seydarby C threads i meant normal threads, i guess
03:33:00seydarlike
03:33:06seydarGRR i cant describe it
03:33:18seydaroh wait
03:33:24seydari have boiled it down to a C question
03:33:52headiusI've never done pthreads before, but on other threading systems it's usually just passing a function pointer to a thread-starting function
03:34:04headiusthen that function begins executing in another thread
03:34:08seydargotcha
03:34:34seydarthen how would you get a function pointer from rubinius compiled method to say, POSIX threads
03:34:38seydarthread*
03:34:46djwhittseydar: little pthreads example: https://computing.llnl.gov/tutorials/pthreads/#Management
03:35:02headiusrubinius doesn't compile ruby into C functions or normal procedures it could pass a pointer to
03:35:35headiusrubinius's threads are virtual, and scheduled by a thread scheduler in Rubinius rather than the OS scheduler
03:35:38seydarheadius: thats what i thought. so how would one implement Pthreads
03:36:25headiusin rubinius's case, assuming you'd made sure the VM structures themselves were safely protected, it would be a matter of starting up another virtual CPU I suppose
03:36:46headiusbut that "assuming" is pretty big...hard to do on C/C++ which have little or no memory safeguards
03:37:11ezmobius leaves the room.
03:43:53seydarso..... little hope for pthreads?
03:44:08seydarpthreads run on multiple CPUs (when the can), right?
03:46:06srbaker enters the room.
03:46:29nicksieger leaves the room.
03:46:50KirinDav enters the room.
03:47:07seydarmy life seems.... empty now
03:49:09mkescher leaves the room.
03:49:30srbaker leaves the room.
03:52:11seydarheadius: method dispatch stuff now
03:52:28seydarruby doesn't really even *have* methods
03:52:44seydarthey're more like messages in synchronous Actors
03:52:56headiusinteresting thought
03:53:03seydarand when the actor gets a message it doesn't know, it calls method missing
03:53:16seydarthe matrix deal is sweet for jarva, tho
03:53:25seydarbut it just wont work with ruby
03:53:35seydarpossibly nothing will
03:54:16seydarthe most you can do is like cache the messages or something, and try to determine them ahead of time
03:54:55seydarbut i'm speaking out of my ass here
03:55:40seydarso headius what are your thoughts?
03:56:04headiusare you thinking of ways to speed up dispatch?
03:56:09headiusor parallelizing?
03:57:03seydardispatch, although parallelization came into my head for a bit
03:57:24headiuswell both rubinius and jruby employ inline caching to speed up dispatch
03:57:38headiusso if the target of a call is the same as the previous time, it doesn't bother to look up the method again
03:57:57seydarcool
03:58:27seydarshould i even bother to interview some professors at dartmouth about method dispatching and report my findings? can it possibly help?
04:00:09headiuswell I think actually there are some good papers you should look into
04:00:26headiuslook for papers on a language called "self" and also on "polymorphic inline caching"
04:00:38headiusneither rubinius nor jruby are using a PIC yet, but we're considering it
04:00:48seydarcool
04:00:53seydari'll read up on them
04:01:04seydaralso
04:01:11headiusother options for speeding up dispatch include generating vtables at runtime, after you've decided that there will be few additional changes
04:01:27seydarwhat if we modeled the base after strongtalk?
04:02:20seydarlike the base shogun, or if we produced strongtalk bytecode?
04:05:09seydarnah, docs are too sparse
04:11:49seydarheadius: can you tell me something cool about rubinius?
04:12:03headiuswhen it starts up, the lights dim a little
04:12:16headiusmodeling after strongtalk is a pretty good though
04:12:23headiusthat's kinda what I'm trying to do on JRuby too
04:14:12seydaryou work at sun now, don't you?
04:14:19headiusthat I do
04:14:31seydarso you have access to their developers' brains, right?
04:15:06djwhittyeah, there's this cabinet where they keep them...
04:15:36headiusI only get the keys on alternate thursdays
04:15:55seydarthe developer got hired by sun, didn't he?
04:18:30seydarand what would it take to include libjit in rubinius?
04:22:05ezmobius enters the room.
04:23:38seydaris libjit even the preferred jitting system ti yse?
04:23:45seydarto use*
04:24:35GMFlash leaves the room.
04:24:42GMFlash enters the room.
04:25:13seydarits ok. dont be shy people
04:26:16srbaker enters the room.
04:27:32seydarand for those of you going to GoRuCo, please wear your nametags around the city so I may recognize someone
04:27:46ezmobiusi'll be there
04:27:54seydarawesome
04:28:09seydari'm there viewing my cousin's movie, but no guarentees about me popping into goruco
04:29:26seydarezmobius: nametag around the city, remember
04:30:23ezmobiuswill do
04:33:31benburkert enters the room.
04:33:33seydarso ezmobius, lets talk parallelism
04:33:43ezmobiusone sec.. brb
04:34:28headiusI'm not sure any of the standard jit libraries are going to work easily with rubinius since it's stackless
04:35:04seydarheadius: it is?
04:35:20headiusyes
04:35:39seydarso what does this mean, besides its lackage of stackage?
04:36:34headiuswell, I think it will complicate generating callable native procedures since you can't actually deepen a standard call stack
04:36:52headiusbut I don't know much about such things
04:37:32seydarnot a problem if you dont know it. make some guess.
04:38:21headiusheh
04:39:01seydarits computers. everything is based off logic. guessing is my first resort
04:41:13seydarheadius: couldn't you just jit each faux-stack?
04:43:35cored leaves the room.
04:43:35ezmobius leaves the room.
04:44:04wmoxam enters the room.
04:44:56seydarheadius: does rubinius use multiple stacks of its own, like pypy?
04:45:10headiusI believe so
04:45:20headiusthings are always in flux
04:45:22MenTaLguY enters the room.
04:45:27MenTaLguYhello
04:46:11seydarhowdy
04:47:34seydaris it even possible for the individual stacks to have a separate jitter?
04:51:16antares enters the room.
04:54:07KirinDav leaves the room.
04:56:27jlindley leaves the room.
04:56:48srbaker leaves the room.
04:56:50benburkert leaves the room.
04:57:52benburkert enters the room.
05:01:58be9 enters the room.
05:06:16antares leaves the room.
05:07:00trythil_ leaves the room.
05:08:40antares enters the room.
05:13:23antares leaves the room.
05:15:40headius leaves the room.
05:18:07stepheneb_ enters the room.
05:19:36KirinDav enters the room.
05:21:45anteaya_ leaves the room.
05:21:47stepheneb leaves the room.
05:23:34KirinDav leaves the room.
05:25:41trythil enters the room.
05:26:21KirinDav enters the room.
05:29:06antares enters the room.
05:32:51KirinDav leaves the room.
05:32:55seydar leaves the room.
05:38:03benny leaves the room.
06:05:03RyanTM leaves the room.
06:05:49RyanTM enters the room.
06:06:48wycats enters the room.
06:11:39wmoxam leaves the room.
06:16:08mernen enters the room.
06:20:49antares leaves the room.
06:22:24madsimian leaves the room.
06:22:40antares enters the room.
06:24:33rby enters the room.
06:37:16RyanTM leaves the room.
06:37:54benburkert leaves the room.
06:38:33benburkert enters the room.
06:39:04jtoy enters the room.
06:43:19trythil leaves the room.
06:46:34mernen leaves the room.
06:49:52antares leaves the room.
06:51:51KirinDav enters the room.
06:54:45smparkes leaves the room.
07:22:34KirinDav leaves the room.
07:55:42ezmobius enters the room.
08:02:29AndrewO leaves the room.
08:02:58smparkes enters the room.
08:03:13smparke1 leaves the room.
08:07:14trythil enters the room.
08:17:56benburkert leaves the room.
08:18:31benburkert enters the room.
08:21:33dlee enters the room.
08:22:30stepheneb_ leaves the room.
08:29:39wycats_ enters the room.
08:37:52wycats leaves the room.
08:38:03trythil leaves the room.
08:55:24trythil enters the room.
08:55:28benburkert leaves the room.
08:56:29benburkert enters the room.
08:56:38benburkert leaves the room.
08:59:21benburkert enters the room.
08:59:39benburkert leaves the room.
09:00:17benburkert enters the room.
09:17:39benburkert leaves the room.
09:17:46Maledictus enters the room.
09:18:55benburkert enters the room.
09:25:55ezmobius leaves the room.
09:26:21cypher23 enters the room.
09:35:10gnufied leaves the room.
09:45:02qwert666 enters the room.
09:51:03jnicklas enters the room.
09:57:58Skip enters the room.
10:19:36benny enters the room.
10:41:36JimRoepcke_ leaves the room.
11:20:42olabini enters the room.
11:25:43trythil leaves the room.
11:29:31chris2 enters the room.
11:35:58benburkert leaves the room.
11:37:01benburkert enters the room.
11:37:45bovi enters the room.
11:44:27brennanc enters the room.
11:45:53brennanchello, I'm trying to learn rubinius and play around with it
11:46:02brennancrbx is the equivalent of irb correct?
11:46:49brennancrequire 'ruby2ruby' doesn't work in rbx but it does in irb
11:46:59brennancdo I have more configuring to do or something?
11:49:18benburkert leaves the room.
11:50:52benny leaves the room.
11:57:04imajes enters the room.
12:01:22mentz enters the room.
12:05:04mentz leaves the room.
12:05:20mentz enters the room.
12:10:20womble enters the room.
12:47:26brennanc leaves the room.
13:03:16RyanTM enters the room.
13:29:48yugui enters the room.
13:30:20hornbeck enters the room.
13:34:05yugui leaves the room.
13:53:24rby leaves the room.
13:54:38yaroslav enters the room.
13:59:13EugZol leaves the room.
14:00:48rby enters the room.
14:00:55jtoy enters the room.
14:02:29zimbatm_ enters the room.
14:08:57RyanTM_ enters the room.
14:09:24aotearoa leaves the room.
14:09:55smparke1 enters the room.
14:15:42RyanTM leaves the room.
14:21:47hornbeck leaves the room.
14:26:02srbaker enters the room.
14:26:22Fullmoon leaves the room.
14:26:50Fullmoon_ enters the room.
14:48:57smparke1 leaves the room.
14:48:57context leaves the room.
14:49:22headius enters the room.
14:50:46zimbatm_ leaves the room.
14:55:42yaroslav leaves the room.
14:56:27enebo enters the room.
15:00:06rby leaves the room.
15:06:20benny enters the room.
15:18:05rby enters the room.
15:26:59jtoy leaves the room.
15:36:38fbuilesv_ enters the room.
15:37:11mentz leaves the room.
15:45:42mentz enters the room.
15:50:44Cosmos95 enters the room.
15:53:35fbuilesv_ leaves the room.
15:53:55RyanTM_ leaves the room.
15:54:05fbuilesv leaves the room.
15:55:11fbuilesv enters the room.
15:56:32obvio leaves the room.
15:57:13jtoy enters the room.
15:59:05benny leaves the room.
15:59:35benny enters the room.
16:00:05smparke1 enters the room.
16:04:42mentz leaves the room.
16:06:59obvio enters the room.
16:07:18bovi leaves the room.
16:07:59mentz enters the room.
16:11:09dewd enters the room.
16:13:39jtoy leaves the room.
16:23:51anteaya enters the room.
16:24:38GMFlash leaves the room.
16:24:46GMFlash enters the room.
16:32:11ttmrichter leaves the room.
16:45:03obvio leaves the room.
16:48:31antares enters the room.
16:50:42KirinDav enters the room.
16:56:15octopod enters the room.
16:57:22obvio enters the room.
16:58:02antares leaves the room.
17:07:10stepheneb enters the room.
17:07:12rype leaves the room.
17:13:45brainopia enters the room.
17:16:33thehcdreamer leaves the room.
17:19:20seydar enters the room.
17:19:31seydara/join #squeak
17:19:32Skip leaves the room.
17:19:33seydarwhoops
17:25:30brainopia enters the room.
17:32:20anteaya leaves the room.
17:40:16Skip enters the room.
17:53:01stepheneb leaves the room.
17:57:39Cosmos95 leaves the room.
18:11:47valdo enters the room.
18:12:24seydar leaves the room.
18:24:59qwert666 leaves the room.
18:29:21benny leaves the room.
18:29:49KirinDav leaves the room.
18:32:33acm enters the room.
18:35:14dewd leaves the room.
18:41:43qwert666 enters the room.
18:42:00brainopia leaves the room.
18:42:47brainopia enters the room.
18:47:53MenTaLguY enters the room.
18:55:43RyanTM_ enters the room.
19:04:22madsimian enters the room.
19:11:18brainopia_ enters the room.
19:13:00brainopia_ leaves the room.
19:13:23benny enters the room.
19:13:47brainopia_ enters the room.
19:25:48benburkert enters the room.
19:27:49brainopia leaves the room.
19:44:25peeja_ enters the room.
19:56:56benburkert_ enters the room.
19:56:56benburkert leaves the room.
19:59:32peeja leaves the room.
20:05:04wycats_ leaves the room.
20:14:47trythil enters the room.
20:20:26GMFlash leaves the room.
20:43:47valdo leaves the room.
20:46:33tokengeek enters the room.
20:47:43olabini leaves the room.
20:53:42trythil leaves the room.
20:56:16rubuildius_ppc leaves the room.
20:57:26benny leaves the room.
20:58:11benny enters the room.
21:04:05acm leaves the room.
21:08:02RyanTM_ leaves the room.
21:09:26RyanTM_ enters the room.
21:09:50context enters the room.
21:09:51octopod leaves the room.
21:10:20context leaves the room.
21:10:29context enters the room.
21:13:19olabini enters the room.
21:14:08GMFlash enters the room.
21:14:59boyscout1 commit by MenTaLguY
21:15:00boyscout * elminate Mailbox#clear; difficult to implement with sane semanitics; ae738f2
21:15:11EugZol enters the room.
21:18:25tarcieriheh
21:19:05MenTaLguYI'm really not a fan of this guy's code at this point
21:19:13MenTaLguYhe put timeouts on filter rather than maibox#receive
21:19:36MenTaLguYand then I've already been whinging about all the other serious concurrency problems
21:19:40tarcierithat's what I did...
21:19:51MenTaLguYhm, why?
21:20:19tarcieribecause #after takes a proc, just like #when
21:21:46MenTaLguYI was looking for a conceptual reason, not one that's an accident of the API
21:22:09MenTaLguYyou could, for example, have a receive_timeout which takes a block
21:22:20MenTaLguYor simply raises an exception on timeout
21:22:28VVSiz_ enters the room.
21:23:04tarcierihow would the filter object work with receive_timeout?
21:23:17MenTaLguYjust like regular recieve
21:23:28tarcieribut then you'd need two blocks
21:23:38tarcierione for the filter object and one for the timeout action
21:23:58tarcieriboth on receive_timeout?
21:24:18MenTaLguYhm, good point; you could do it, but it wouldn't look nice
21:25:01MenTaLguYI guess my main concern is that filter is for extracting messages from the main message stream
21:25:22MenTaLguYtimeouts aren't really part of that stream; they're part of a "private" stream, local to an individual receive, which is multiplexed with that main stream
21:25:45Cosmos95 enters the room.
21:26:19tarcieritrue enough, it's uglier internally that way
21:26:38MenTaLguYthe internals don't necessarily need to dictate the API in this case though
21:26:43tarcieriyep
21:27:02tarcierithe API is a lot cleaner that way, imo
21:30:56MenTaLguYlet's keep this API then
21:31:54tarcieriok
21:32:00RyanTM_ leaves the room.
21:32:04tarcieriMailbox#clear on the other hand :)
21:32:21oGMo enters the room.
21:32:44MenTaLguYI was going to leave it since it wasn't part of the exposed actor API, but ... yeah
21:32:54MenTaLguYthen I started thinking about what it meant, sanely
21:33:17RyanTM_ enters the room.
21:37:13oGMoso i need to interrupt a thread and make a call in a new stack frame. plain ruby can't, and i'm hoping rubinius can
21:37:56oGMointerrupt the execution, that is, much like a signal, except actual signals are always iffy
21:38:19wycats_ enters the room.
21:38:30benburkert_ leaves the room.
21:39:07MenTaLguYthat's an insane idea, from a concurrency standpoint
21:39:12_VVSiz_ leaves the room.
21:39:15oGMo?
21:39:36MenTaLguYinterrupting a thread at an arbitrary point and running code in its context
21:40:01MenTaLguYthere's no way to (in the general case) make the code correct under such circumstances
21:40:32MenTaLguYa lot of people ask for it, they just haven't thought through the consequences
21:40:53oGMoheh
21:40:56oGMocommon lisp does it :p
21:41:00MenTaLguYis there a reason that the thread you want to interrupt can't poll periodically to see if there are any requests waiting, and service them if so?
21:41:08MenTaLguY(assuming the thread is actively running)
21:41:17MenTaLguY(if it is blocked on something you should be able to handle that as part of the blocking)
21:41:34benburkert enters the room.
21:41:42oGMoyes, because manual polling defeats the point of automating concurrency
21:41:44oGMo;)
21:42:11MenTaLguYarbitrary interruption defeats the point of writing robust concurrent programs
21:42:41tarcierioGMo: you might consider using Actors instead of threads...
21:42:47tarcieriand rather than interrupting it, send it a message
21:42:50MenTaLguYit's essential that threads communicate at mutually agreed-upon points
21:42:52oGMo...your idea of concurrent programming is almost certainly wrong
21:42:58tarcieri*boggle*
21:42:58oGMoah. yes, it is.
21:43:10oGMotarcieri: mm.
21:43:20MenTaLguYany unilateral attempts at communication by one thread "into" another introduce non-determinism and (usually) intractable problems
21:43:24oGMothe idea is actually to eliminate concurrency and write single-threaded code
21:43:37oGMowell, eliminate *threads* as the mechanism for concurrency
21:43:50tarcierieliminating threads is good
21:44:39oGMohowever the ability to fork at a given point without having to retry a whole call is important
21:45:07tarcierifork?
21:45:09MenTaLguYunless you make those points explicit, you won't be able to make things work reliably
21:45:15tarcierilike Kernel.fork?
21:45:29oGMoah the debugger is not implemented the CL way i suppose
21:45:34oGMotarcieri: right
21:45:46oGMoMenTaLguY: that assumes a lot of things you shouldn't
21:45:53tarcierisounds like you're writing something pretty crazy
21:46:04oGMothere are a lot of ways to do concurrency other than manually creating threads and locking between them
21:46:10oGMotarcieri: actually, it's really, really simple
21:46:16MenTaLguYoGMo: believe me, I know that
21:46:38MenTaLguYand in fact I've been trying to promote that as much as possible in the Ruby community
21:46:41oGMosingle threaded event processor. run each event. if an event takes too long, fork it and continue.
21:46:55MenTaLguYaha.
21:46:59oGMo(functions that do global updates can be marked to avoid forks)
21:47:22KirinDav enters the room.
21:47:38oGMosadly there are one or two critical pieces missing from vanilla ruby to really make it work
21:48:05tarcierioGMo: sounds like you want the deferrable pattern, not that I really think it's that great of a solution
21:48:21oGMotarcieri: sortof
21:48:29tarcieriReactor frameworks are annoying to program in
21:48:38tarcieriI really dislike IoC
21:48:41oGMoIoC?
21:48:45MenTaLguYrather than migrating tasks across threads, I'd recommend keeping a pool of worker threads
21:48:45tarcieriinversion of control
21:49:03MenTaLguYtarcieri: he's trying to do it by migrating contexts across threads
21:49:16MenTaLguYtarcieri: to avoid IoC
21:49:38oGMoMenTaLguY: *no threads*
21:49:44oGMothis is important.
21:49:48oGMoit's all about what fork() does for you
21:50:14oGMoif you do threads, you immediately have to worry about locking; with fork(), you get a snapshot and you never have to lock
21:50:15MenTaLguYah, so you're actually spinning off these events into separate processes, then?
21:50:19oGMoright
21:50:31chris2 leaves the room.
21:50:53MenTaLguYyikes
21:51:33MenTaLguYyou're definitely going to need to explicitly place "checkpoints" at which forks can happen in the event handlers
21:51:39oGMoer no
21:51:41MenTaLguYfork is not really safe in a lot of contexts
21:52:23tarcierior have a worker pool... collect the state you want the workers to operate on, and send it as a message
21:52:38tarcierithen only fork immediately at the start of your program
21:53:21oGMothe idea is to minimize forks and to not do manually do them
21:54:16MenTaLguYif you can't re-use processes, that actually becomes pretty heavyweight then
21:54:27oGMoyou find an event-processing-limit such that it's less than a "too long" threshold, yet most events get processed within the limit, and you don't have "really fast exits" from any forks
21:54:39MenTaLguYeven not pooling threads can hurt badly performance-wise; I wouldn't want to think about the implications of not pooling processes
21:54:45oGMoMenTaLguY: the idea is that anytime you fork, it was a really long process anyway
21:54:57oGMoyou can pool processes, too, but that doesn't always work
21:55:13oGMopooled processes require you determine ahead of time something is going to take awhile
21:55:56MenTaLguYI don't think, loosely speaking, that the principle you're going for is bad.
21:55:59oGMosometimes that's possible, sometimes you're not sure, especially if you're adjusting the schedule dynamically
21:56:11MenTaLguYBut it's badly mismatched with Ruby's semantics, to the point where there's not a sane way to implement it in Ruby.
21:56:43MenTaLguYIn the specific way you're going for.
21:56:44oGMosortof. vanilla ruby is like one function short of being able to accomplish it
21:57:23MenTaLguYimplementing that one function would involve a lot of changes to the language semantics
21:57:26oGMosadly there doesn't seem to be any sort of timer mechanism.. exceptions don't work becuase they unwind the stack... so hrm
21:57:33oGMoMenTaLguY: um, how? :p
21:57:46oGMoyou can already catch SIGALRM, there's just no setitimer
21:58:09oGMo(yes, setitimer in vanilla is used for thread scheduling with SIGVTALRM)
21:58:16tarcierithere's no interface to alarm() in Ruby
21:58:28oGMothat too
21:58:35MenTaLguYwell, in that case we're moving outside Ruby semantics and into POSIX stuff as well
21:58:55oGMothis is actually really simple to do in C, but i want to write ruby ;)
21:59:00MenTaLguYPOSIX signals are something that sort of happens to work rather than being well-integrated with Ruby language semantics
21:59:21oGMoheh
21:59:33MenTaLguYobviously they integrate with C's semantics a little better :)
21:59:34oGMoi think they're that way even in C ;)
21:59:42MenTaLguYyes, actually
21:59:48MenTaLguYbut there's less of an impedence mismatch
21:59:50oGMoMenTaLguY: sortof, but they're still a kludge
22:00:01MenTaLguYyes
22:00:03oGMoheh
22:00:12tarcieriI prefer them in Ruby, if only because you don't need to shuffle data out of them with a commonly coupled volatile
22:00:13tarcieriugh
22:00:27oGMorubinius is 64-bit clean no?
22:00:33headius leaves the room.
22:00:35tarcieriin theory!
22:00:37oGMoheh
22:00:40MenTaLguYtarcieri: there are a lot of gotchas around that ... yeah
22:00:48MenTaLguYer, signals in Ruby I mean
22:00:58tarcieriyeah
22:01:18oGModaily failed to build with some odd errors, so hm
22:01:46oGMoer wait maybe it's another reason
22:02:07MenTaLguYtarcieri: I'm thinking about reverting the timeout stuff altogether actually ... the way it is right now, timeouts can "leak" from one receive to another
22:02:20tarcierihow are they implemented?
22:02:34MenTaLguYtarcieri: using Scheduler.send_in_milliseconds to the mailbox channel
22:02:51tarcierihmmm
22:02:54MenTaLguYtarcieri: and it doesn't even cancel the timeout
22:03:05MenTaLguYtarcieri: so there is guaranteed to be a "stale" nil sitting in the channel
22:03:18MenTaLguYif you get an existing message from @skipped rather than timing out
22:03:23tarcieriawesome
22:03:25tarcieriheh
22:03:27MenTaLguYwell, or even get one from the channel
22:03:58tarcieriyeah, at least in Revactor I wrote the scheduler so I didn't have to deal with implementing timeouts using message passing
22:04:17tarcieriit just sets a flag in the Actor and resumes it
22:04:27tarcierithat flag gets cleared when it starts the next Actor.receive
22:04:36tarcieriso there's no potential for timeouts to leak like that
22:05:02MenTaLguYthere's also the problem that if you have a sequence of successul receives, you'll accumulate a lot of pending timeout events in the Rubinius scheduler itself
22:05:19MenTaLguYand a minor problem that nil can no longer be a valid actor message
22:05:21tarcieriyeah
22:08:05MenTaLguYoGMo: anyway, I think the biggest problem you'll find with the approach you're looking at (even in C), is that it isn't easily to guarantee that a third-party library used by an event handler doesn't manipulate global state or perform IO in a way that could be damaged by a fork()
22:08:26MenTaLguYs/easily/easy/
22:09:00MenTaLguYthat state or IO is not necessarily going to be part of that library's published interface
22:09:35oGMowell, this isn't meant to be a catchall
22:09:51diegal enters the room.
22:11:06MenTaLguYtarcieri: actually the reason why I hadn't implemented timeout yet was that I'd wanted to add the ability to send a specific object via send_in_milliseconds
22:11:30MenTaLguYtarcieri: things get much simpler if a particular timeout can be represented by a unique object
22:12:34tarcieriyeah, I need that to implement a Reactor too :/
22:12:41brainopia_ leaves the room.
22:12:48MenTaLguYmaybe we should work on that
22:13:05tarcieriI looked at what was involved a little... it seemed... non-trivial
22:13:06MenTaLguYI'd really prefer to fix the timeout stuff rather than revert it
22:13:08brainopia enters the room.
22:14:09diegalhey. I'm fairly new here. Just saw Evan's presentation on MW conf. I'm reading the site now and I think I found a problem with the instructions on the git workflow on http://rubinius.lighthouseapp.com/projects/5089/using-git . Step 3 seems incomplete.
22:14:17diegalanybody can confirm?
22:14:53fbuilesvdiegal: Why does it seem incomplete?
22:15:26diegalwell... I'm not a native english speaker, but this phrase seems incomplete: "Create a branch for your work. What happens is that your working directory"
22:15:47fbuilesvdiegal: Oh, the description, yes, it's bad.
22:15:55diegal:)
22:15:55benburkert leaves the room.
22:16:26diegalfbuilesv: do you have the knowledge and access to fix it?
22:16:31benburkert enters the room.
22:17:21zimbatm_ enters the room.
22:17:47fbuilesvdiegal: yup, just say that the command will create a new branch for you to work in
22:18:16aotearoa enters the room.
22:18:25diegalfbuilesv: I thought so. But it would be nice to fix it on the page for others.
22:18:32fbuilesvdiegal: on it
22:18:39diegalfbuilesv: cool.
22:19:22diegalfbuilesv: I see on http://rubinius.lighthouseapp.com/projects/5089/irc-info-and-who-s-who that your mother thonge is not english too. :) I'm from Uruguay.
22:19:37fbuilesvdiegal: Yup, Colombian here :)
22:21:31fbuilesvdiegal: Check it out and tell me if that makes more sense to you
22:22:07jlindley enters the room.
22:22:28diegalfbuilesv: much better.
22:25:20imajes_ enters the room.
22:26:26imajes leaves the room.
22:33:01jlindley leaves the room.
22:42:18jlindley enters the room.
22:42:32KirinDav leaves the room.
22:43:29diegalfbuilesv: hey. I think I found another MINIMAL error. :) on http://rubinius.lighthouseapp.com/projects/5089/specs-continuous-integration it says "The rake spec:ci task prints our the revision of the VM build" and I think you should s/our/out/ .
22:44:51fbuilesvdiegal: Fixed!
22:45:21diegalfbuilesv: cool. :) (sent you a private message too)
22:46:22Maledictus leaves the room.
22:46:24fbuilesvdiegal: Through where?
22:46:58diegalfbuilesv: through here, IRC. if you didn't get it, I'll email you.
22:47:12fbuilesvdiegal: federico.builes@gmail.com, it never got here :)
22:47:25diegalfbuilesv: cool.
22:49:00mentz leaves the room.
22:54:08dlee enters the room.
23:04:00probablycorey enters the room.
23:14:12dbussink leaves the room.
23:15:32trythil enters the room.
23:18:06rby leaves the room.
23:19:27jnicklas leaves the room.
23:19:32MenTaLguY leaves the room.
23:25:17enebo leaves the room.
23:28:02jlindley leaves the room.
23:47:33agardiner enters the room.
23:51:51diegal leaves the room.
23:52:54zimbatm_ leaves the room.