Index

Show enters and exits. Hide enters and exits.

00:00:47boyscoutCleanup Globals.set_hook API - dc19420 - Evan Phoenix
00:05:06boyscoutCI: rubinius: dc19420 successful: 3041 files, 11850 examples, 36139 expectations, 0 failures, 0 errors
00:57:21slavaevan: ping
00:57:25evanpong
00:57:41slavacheck privmsg
01:02:10slavaevan: I'm not sure per-thread OnStack<> lists is fine-grained enough
01:02:15slavaevan: it should really be per-fiber / per-continuation?
01:02:26evanyes
01:02:49evani'm morphing STATE (VM* state) into something that is per-callstack
01:03:10slavamaybe it would make sense to s/VM/Context/
01:03:12evanie, you allocate it at the very beginning on the call stack and pass down a pointer to it
01:03:16evanit would make sense
01:03:19evanthe name sucks now.
01:03:28slavaI would've thought VM would be like a global thing
01:03:29evanso i'll have to go through and rename it.
01:03:31evanyeah
01:03:33evanit used to be!
01:03:38evanit's slowly been loosing that.
01:03:41slavawhat's your global thing now?
01:03:41evanTHANKFULLY
01:03:45evanI used the STATE macro
01:03:50evanand called it state
01:03:57evannot vm or whatever.
01:04:12evanthe global thing is SharedState now
01:04:16evanpretty clear.
01:06:08evannice, String#captitalize from 13% MRI to 86%
01:07:58slavais it written in C in MRI?
01:08:47evancourse
01:08:52evaneverything is written in C in MRI
01:08:54evani cheated though.
01:09:02evani wrote a transform() primitive in C++
01:09:16evanthat does a table transform on the string
01:09:23slavaaha
01:09:45evani want to remove transform eventually
01:09:49evanbut i need to push on
01:09:55evanremove the C++ for it, rather.
01:10:10slavado you have any plans to get the IO stuff to use FFI?
01:10:17slavait might be nicer to do it in pure ruby + ffi than C++.
01:10:20evannot at present, no.
01:10:27slavatechnical limitation or just not important?
01:10:30evannot unless I remove the GIL.
01:10:39slavaI thought your IO was non-blocking?
01:10:43evannope
01:10:52slavaso you can't release the GIL in FFI calls yet?
01:11:02evani could
01:11:09evani'd rather not have the GIL.
01:11:17evanso i've put that on the back burner
01:11:23slavaone step at a time I guess :)
01:11:38slavais having native threads with a GIL equivalent to green threads with a native thread pool for 'async' FFI?
01:12:04evanprobably, yes.
01:16:10evando you use a native thread pool for async FFI?
01:16:15slavaI don't have async FFI yet
01:16:17slavabut that's the plan
01:16:33slavaright now all I/O is non-blocking, with a few annoying exceptions (like the windows stdin/stdout)
01:19:01slavathe only downside I can see to async FFI -vs- having a GIL is that it won't work for APIs that have to be called from one specific thread
01:19:12slavaof course real native threads without a GIL beats both approaches
01:21:48evanyeah
01:21:55evanreal native threads is where we'll get.
01:28:41slavaevan: why does OnStack refer to VariableRootBuffer by value?
01:29:05evanbecause thats the thing the GC actually reads
01:29:17slavaand they're linked in a list?
01:29:21evanthats (VariableRoot)Buffer
01:29:28evannot Variable(Root)Buffer
01:29:30slavaheh
01:29:31evanbtw
01:29:47evanyeah, VRBs are referenced by the GC in a list
01:29:49evanas I recall
01:30:28evani don't recall if data_root<> does this
01:30:42slavaI put them in an std::vector, but now that I think about it linking them together would be better
01:30:43evanbut you'll notice that OnStack<> actually registers the address of the C++ local
01:30:49evanso that you can use it once at the top
01:30:55evanand reassign the local even
01:30:57evanand they're seen
01:31:09evanthe idea was to use OnStack<> at the top only
01:31:34evanthats why there is the whole multiple arguments thing
01:32:37slavayeah, I get it now
01:33:07slavalinking them together is a nice idea. I've observed some overhead from the std::vector, seems linking would be cheaper since it keeps all the data on the C stack
01:33:22slavahmm, doesn't this solve your per-thread OnStack problem already then?
01:33:34slavasince your roots are just a linked list on the stack, and each fiber / thread has its own stack
01:33:52evanwell
01:33:59evanwhat i'm going to do is have a root VBR
01:34:05evanand that is per call stack
01:34:10evanand have them form a linked list on the stack only
01:34:15slavaaha
01:34:35evanthat removes any threading issues entirely
01:34:44evanthe GC just needs to know all the root VBRs
04:24:12jvoorhisis there some way to access thread-local variables across fibers?
04:24:52jvoorhisi haven't rifled through ruby-specs yet, but maybe someone who's recently implemented Fiber could help ;)
04:41:07evanjvoorhis: Thread.local[] you mean?
05:45:27jvoorhisevan: yeah, that's it
05:45:57jvoorhisit seems in MRI, Thread.local[] is also Fiber-local
18:22:37BrianRice-workpoll-style Q: what does/should File exists? return if the path specifies what turns out to be a directory?
18:23:32evanBrianRice-work: true
18:23:35BrianRice-workok
18:23:41evanthats why File.file? is also there
18:23:44evanand File.directory?
18:23:54BrianRice-workyeah we have those
18:25:57BrianRice-workthat's the kind of response I was looking for, thanks.
18:28:03evanman
18:28:11evanthe superiority of the rubinius backtrace is unmatched.
18:29:11evana matching one?
18:29:43Zoxcdoes it print arguments yet?
18:30:49evanno, no arguments yet.
18:30:52evanwe'll get there though.
18:31:26BrianRice-workI found that writing an emacs mode for my debugger backtrace helped
18:31:44BrianRice-workI made the frame info clickable-to-navigate (drill into frame or visit source)
18:32:10BrianRice-workexample backtrace: http://paste.lisp.org/display/89265
18:32:53evannice
18:33:58evanhttp://gist.github.com/300681
18:34:06evanthats what the an rbx one looks like
18:34:18evanyou'll notice that self recursion is automatically collapsed
19:15:53brixenno cavities!
19:16:03brixenbut also, no food for 4-6 hours and I'm starving
19:20:38brixenI guess I could pour stuff straight down my throat
19:20:49brixenlike with a funnel or something
19:28:23Zoxceat before you go to the dentist? :)
19:29:15brixentoo late now :P
19:55:18boyscoutMove ucontext detection to vm/detection.hpp - 8a2b374 - Dirkjan Bussink
19:55:18boyscoutFix ucontext for freebsd - 8700216 - Dirkjan Bussink
20:13:49boyscoutCI: rubinius: 8700216 successful: 3041 files, 11850 examples, 36139 expectations, 0 failures, 0 errors
23:55:01kronos_vanoIs it ok? http://gist.github.com/301010
23:56:33evani think so
23:56:41brixendefine_method is already a module method
23:56:44evanthough you missed the define_method(:name) { |*blah| }
23:56:45brixenwhy is class_eval needed?
23:56:46evancase
23:57:02kronos_vanohm
23:57:12kronos_vanobrixen, yes, my fault
23:58:34kronos_vanoOne more bug is defined_method should be private, but in rubinius it is not ) I'll fixed it a bit later