Show enters and exits. Hide enters and exits.
| 01:11:31 | dwaite | sigh |
| 01:12:47 | dwaite | I think brixen has ragel rage |
| 01:13:09 | brixen | what's that? |
| 01:13:16 | brixen | do I need to see a doctor? |
| 01:16:06 | dwaite | maybe a therapist |
| 01:16:18 | dwaite | or if you don't get to move away from pack/unpack soon, a priest |
| 01:16:52 | dwaite | I was trying to send you an IM earlier asking if you had put your slides up |
| 01:17:05 | dwaite | but apparently google broke google talk for a good % of external users :-/ |
| 01:17:10 | brixen | gchat probably doesn't like you |
| 01:17:19 | brixen | it didn't like me week before last |
| 01:17:23 | brixen | sharing the wealth and all |
| 01:17:38 | brixen | I'll put the slides up in a bit |
| 01:17:47 | dwaite | when you say gchat, do you not mean the gtk irc client? |
| 01:18:02 | dwaite | it appears to be a race condition in the jabber dialback protocol |
| 01:18:13 | dwaite | which is basically a distributed asyncronous state machine |
| 01:18:23 | brixen | oh, I mean running google talk from inside the email browser window |
| 01:19:16 | dwaite | but if you tried to write it out that way, you'd either go mad or start to be able to visualize in a fourth perpendicular dimension |
| 01:20:58 | dwaite | shakes his fist at jer for not only creating dialback, but being able to comprehend it |
| 01:21:49 | dwaite | but basically it means - you can probably send me a message right now, but I cannot respond, including sending you presence to say I'm online |
| 01:23:22 | boyscout | A bunch of cleanup - 83feb62 - Evan Phoenix |
| 01:24:48 | brixen | dwaite: good thing there is IRC :) |
| 01:55:51 | evan | :/ |
| 01:56:00 | evan | so, our benchmarking results have been inflated. |
| 01:56:18 | evan | because Process.times on MRI is NOT wallclock at all. |
| 01:56:20 | evan | and ours was. |
| 02:00:54 | jakedouglas | remind me to discuss some profiler strangeness with you when my brain recovers |
| 02:00:58 | brixen | inflated == we are slower or faster than we though? |
| 02:01:02 | brixen | thought? |
| 02:02:07 | evan | we are faster than we thought. |
| 02:02:53 | evan | off for a jog, will look into it a bit more |
| 02:55:30 | boyscout | Style fix of benchmark.rb - 9689249 - Evan Phoenix |
| 02:55:30 | boyscout | Use getrusage for Process.times - 27928fe - Evan Phoenix |
| 03:37:51 | Asher- | i have put together a c extension that relies on the call stack - to what extent will rubinius support such calls out of the box? |
| 03:38:04 | Asher- | and is there an appropriate way to proceed in figuring out how to adapt the extension (if necessary) to work? |
| 03:44:23 | brixen | Asher-: your ext will not work with rbx if it depends on the MRI stack frames |
| 03:44:36 | brixen | whet does you ext do? and have you tried compiling it with rbx? |
| 03:47:21 | Asher- | i haven't tried yet - does rbx have ruby access to its own internal stack? |
| 03:47:28 | Asher- | i figured it wouldn't work so i hadn't tried |
| 03:47:57 | Asher- | it does an object oriented backtrace and gets sender/caller |
| 03:49:38 | Asher- | i would like to support rbx - happy to write whatever additional code needs to be done |
| 03:49:49 | Asher- | just not sure where to look - weren't any clear docs differentiating those internals that i saw |
| 03:49:52 | Asher- | although i imagine they exist somewhere? |
| 03:50:09 | brixen | we already have an object oriented backtrace |
| 03:50:27 | brixen | kernel/common/backtrace.rb :) |
| 03:50:28 | Asher- | is there a specific place documenting what rbx has that mri does not? |
| 03:50:34 | Asher- | b/c mri does not have one :) |
| 03:50:40 | brixen | no docs really, just the code |
| 03:50:47 | Asher- | ok |
| 03:50:47 | brixen | you should clone rbx and check it out |
| 03:51:04 | Asher- | yeah seems the next step |
| 03:52:04 | jakedouglas | what's the difference between a CompiledMethod and a VMMethod? (why are there two things to represent a method?) |
| 03:52:31 | brixen | a CM is an abstract set of opcodes, a VMM is something the VM actually runs |
| 03:54:12 | jakedouglas | what is 'abstract' about it? |
| 03:54:58 | brixen | the VM doesn't actually execute it :) |
| 03:55:14 | brixen | take a look at how a VMMethod is created |
| 03:55:27 | jakedouglas | i can tell |
| 03:55:50 | jakedouglas | but if you create a vmm from a cm, the point of the cm is just to be a bytecode container or what? |
| 03:56:02 | jakedouglas | why have both? just organizational? |
| 03:56:23 | brixen | the vmm has specializations for the platform |
| 03:56:52 | brixen | CMs are completely portable |
| 03:57:06 | jakedouglas | oh |
| 03:58:41 | boyscout | Specs for String#unpack IiNV. - 769a7fc - Brian Ford |
| 03:58:41 | boyscout | Specs for String#unpack LlQq. - a98c0fa - Brian Ford |
| 03:58:41 | boyscout | String#unpack IiLlNVQq. - d7d4469 - Brian Ford |
| 03:58:41 | boyscout | Remove removed files from load_order. - 9a9062d - Brian Ford |
| 03:59:32 | brixen | hm, CI seems hung and I'm soo hungry |
| 03:59:43 | brixen | I think I'm gonna grab some food and check back in a bit |
| 04:00:04 | jakedouglas | !!!! |
| 04:01:17 | brixen | jakedouglas: btw, better docs coming RSN |
| 04:01:23 | jakedouglas | niiiiiice |
| 04:01:36 | brixen | 1.1 is supposed to be all dev tools, and docs are an essential part of that |
| 04:01:39 | jakedouglas | all this crazy vm shit im learning at jvm summit has me digging around trying to figure everything out |
| 04:01:54 | brixen | I want to get a rbx doc command running that starts a local web server of browsable docs |
| 04:02:24 | brixen | ok, bbiab... |
| 04:02:27 | jakedouglas | k. |
| 04:09:26 | dwaite | I didn't really get the java io vs nio thing earlier today that was flying around |
| 04:09:34 | dwaite | wasn't it basically saying that the java nio implementation sucks? |
| 04:12:51 | dwaite | he also seemed to say that java's minimum per-thread size was 48K, but doesn't each thread get its own copy collector? |
| 04:14:35 | dwaite | ahh in 6 it looks like it is one per cpu |
| 04:18:24 | brixen | what we need are a cannonical set of apps that demonstrates each of these strategies in optimal context |
| 04:21:26 | brixen | so we have more to analyze than the sound bytes into which these discussions normally devolve |
| 04:21:44 | brixen | and it would serve to highlight assumptions |
| 04:22:03 | brixen | eg http://twitter.com/cscotta/status/19699128358 |
| 04:22:11 | brixen | and http://twitter.com/cscotta/status/19702967623 |
| 04:22:54 | brixen | the water may be sweet and warm, but it's hardly ever so idyllic you want to jump in without sticking a toe in first |
| 04:25:25 | Asher- | this is crazy… a channel where like… people are actually working on stuff? |
| 04:25:35 | Asher- | puts #ruby and #ruby-lang and #rubyonrails to shame :P |
| 04:26:34 | jakedouglas | dwaite: just forget about it, its a waste of time :) |
| 04:26:50 | jakedouglas | there are cooler things to care about |
| 04:28:35 | dwaite | jakedouglas: very true |
| 04:29:51 | dwaite | brixen: really a library that implements user-mode threading is really implementing async I/O and context switches, its not even like it is undocumented API :) |
| 04:30:51 | dwaite | so if you think you can handle something like OS thread affinity or eliminate stacks or what not, thats when you should start implementing your own I/O system :) |
| 04:31:22 | dwaite | I did the fiber to make evented IO systems look like synchronous systems thing last year, and in the end what I had really done was |
| 04:31:31 | dwaite | implement green threads inside ruby to get around the GIL |
| 04:32:17 | dwaite | but thats not to say that there couldn't be say memory efficiencies gained from doing that |
| 04:32:34 | dwaite | have ruby fibers use a spaghetti stack ;-) |
| 04:32:52 | dwaite | (since they can fall back on the calling thread's C stack) |
| 04:33:30 | jakedouglas | if you're talking about doing it in ruby then you also avoided (some) inevitable disaster of trying to use everyones gems with threads, which they certainly have not been designed for |
| 04:33:31 | dwaite | cooperative threading models also are way easier to comprehend, and its nice not to have to think about threads |
| 04:34:12 | jakedouglas | it doesnt really have anything to do with a gil |
| 04:34:37 | jakedouglas | MRI anyway does io-oriented thread scheduling |
| 04:34:47 | slava | not implementing pre-emptive threads from the start is my biggest regret with factor |
| 04:34:52 | jakedouglas | so you're getting the same thing as fibers really. fibers are just more simple. |
| 04:34:53 | dwaite | *nod* well threads are not exactly the peak of excellence anyway. I've had to debug way too many threading problems in C++ code |
| 04:35:00 | slava | it sounds like rbx is going to ditch the GIL pretty soon which is really good news |
| 04:35:11 | dwaite | it actually doesn't even matter if the problem is related to threading or locking or anything |
| 04:35:24 | dwaite | just every problem becomes 10x harder to cope with when you are trying to debug it under real threads |
| 04:35:38 | jakedouglas | well |
| 04:35:51 | jakedouglas | there are a lot more situations where you can reason about cooperatively scheduled execution |
| 04:36:27 | jakedouglas | not that it can't still be confusing sometimes |
| 04:36:49 | dwaite | yeah the ability to run threaded is nice |
| 04:37:00 | dwaite | its just one I wish I could find more ways around ;-) |
| 04:37:17 | dwaite | and the worst bugs are kernel drivers |
| 04:37:45 | dwaite | I was writing support for a video card and accidently added a floating point operation without thinking about it :) |
| 04:38:14 | dwaite | all of a sudden random applications had a corrupted FPU stack/registers |
| 04:38:38 | Defiler | They probably weren't using them optimally anyway; they probably deserved it. |
| 04:39:38 | dwaite | it didn't crash any apps |
| 04:39:46 | dwaite | it was more like their assumptions about space and time were challenged |
| 04:41:37 | dwaite | looks like the jabber issue with google talk is more busted on their end than I thought |
| 04:41:43 | dwaite | its not something that I think I can work around with software :) |
| 04:42:45 | dwaite | (thank goodness, I was already starting to learn how to read erlang, last thing I want is to know how to write it too) |
| 04:44:35 | jakedouglas | yay, im finally figuring out how this rubinius thing works |
| 04:46:46 | jakedouglas | seems so much easier after listening to everyone talk about forkjoin and fence instructions all day |
| 04:50:19 | brixen | jakedouglas: envious! :P |
| 04:50:52 | jakedouglas | its been pretty hard keeping up but i have without a doubt learned A LOT |
| 04:51:05 | jakedouglas | its been kind of shitty at times but i'm glad i came |
| 04:51:18 | slava | I think I changed more lines of code today than in the last two weeks |
| 04:52:23 | slava | time for a blog post! |
| 04:55:50 | brixen | slava: what have you been working on? |
| 04:56:16 | slava | brixen: I overhauled FFI callbacks. the body of the callback used to be compiled with the base compiler, and now its compiled with the optimizing compiler |
| 04:56:33 | brixen | ah cool |
| 04:56:33 | slava | brixen: so there's a theoretical performance improvement, but the main benefit is the static checking done on the body |
| 04:56:45 | brixen | I saw your tweet on that |
| 04:56:58 | slava | brixen: previously if your callback took two parameters but the code popped three values from the stack you'd get a runtime error |
| 04:57:27 | slava | which was really annoying because the default error handler at the top level of a callback kills the VM (there's no unwinding or throwing past C frames) |
| 04:57:43 | brixen | ah yeah |
| 04:57:49 | brixen | sounds like a good post! |
| 04:58:07 | slava | I'm going to do a write up of some other recent FFI changes which were more interesting |
| 04:58:34 | slava | FFI calls are broken down into several IR instructions now, and insetad of calling out to the VM to box and unbox arguments they share the rest of the codegen's boxing support |
| 04:58:50 | brixen | very cool |
| 04:59:02 | slava | so you can compute some floats and then call a C function inside a loop and you won't get any allocation, or at least less than before |
| 04:59:08 | dwaite | nice! |
| 05:00:14 | dwaite | haha |
| 05:00:15 | dwaite | ok |
| 05:00:23 | dwaite | I think I know how to 'fix' google chat |
| 05:02:27 | slava | brixen: ffi calls now compile without saving/restoring all live values to the operand stack |
| 05:02:42 | slava | brixen: instead the register allocator spills live registers and records a bitmap of which spill slots contain GC pointers |
| 05:02:55 | slava | brixen: the next step is to do this for all calls |
| 05:03:36 | brixen | awesome |
| 05:03:57 | slava | that was kind of my plan all along, get it working for ffi calls first since its a bit simpler |
| 05:05:01 | slava | its weird how over time the stack went from being an integral part of the implementation to just syntax that the compiler eliminates |
| 05:05:11 | slava | maybe its just a bad idea overall and I should've gone with a mainstream syntax |
| 05:05:43 | brixen | probably :) |
| 05:06:01 | brixen | I'm still planning on targeting your stack with my Poison syntax :) |
| 05:06:04 | slava | but you guys have a funny setup too. ruby syntax with named variables -> stack bytecode -> LLVM IR with named registers |
| 05:06:52 | slava | maybe the forth people have poisoned all VM implementors with their legacy 70's ideas |
| 05:06:57 | brixen | well, I spent a while studying the Jimple papers |
| 05:07:13 | evan | a busy evening I see. |
| 05:07:15 | brixen | I'm still curious about trying a register backend to the compiler |
| 05:08:06 | brixen | evan: could you please kick CI |
| 05:08:18 | evan | yep |
| 05:08:24 | evan | the agent is running on it too |
| 05:08:28 | evan | so I can see where it's hung. |
| 05:08:34 | brixen | yeah, that's nice |
| 05:09:08 | evan | hm, not connecting. |
| 05:09:13 | evan | can't find the tmp file. |
| 05:09:14 | evan | dang. |
| 05:09:16 | evan | oh well. |
| 05:09:20 | evan | gdb, here I come! |
| 05:09:23 | dwaite | :) |
| 05:09:23 | brixen | heh |
| 05:09:31 | brixen | this is interesting: http://skitch.com/timfelgentreff/dqcub/microsoft-excel-book1 |
| 05:09:40 | dwaite | brixen, you get my IMs? you are making me feel nervous that I didn't actually fix the prob ;-) |
| 05:10:04 | slava | brixen: regarding jimple, I'm not sure if constructing SSA in javac is worth it |
| 05:10:13 | slava | its probably better to do type feedback-based inlining first |
| 05:10:25 | slava | then build SSA and do fancy optimizations at runtime |
| 05:10:49 | brixen | slava: oh, kinda like evan is already doing? :) |
| 05:10:56 | slava | yeah |
| 05:11:13 | slava | you could still have a register-based bytecode, its just not worth computing phi function placement if you'll have to redo it all after inlining anyway |
| 05:11:44 | evan | slava: i think of all our data forms for the execution as being tailored to their duty |
| 05:11:52 | evan | stack bytecode is fast and easy to interprete |
| 05:12:06 | slava | its also easy to generate |
| 05:12:12 | evan | and it's got certain restrictions that allow it to be converted into named values within LLVM SSA easily |
| 05:12:16 | evan | best of both worlds. |
| 05:12:44 | brixen | the only thing missing is an academic paper on the subject :) |
| 05:12:53 | evan | virtual registers would have been easier converting to LLVM SAA |
| 05:12:54 | evan | SSA |
| 05:12:57 | evan | i won't deny that. |
| 05:13:06 | evan | since I could do it blindly. |
| 05:13:36 | slava | you guys should write a paper for DLS or VMIL |
| 05:13:47 | slava | there's still time for VMIL '10, deadline is aug 9th |
| 05:14:14 | slava | or there's always DLS '11 |
| 05:14:33 | evan | I think I'd prefer to aim for next year |
| 05:14:44 | slava | by then you'll be state of the art :) |
| 05:14:50 | evan | :) |
| 05:14:57 | evan | a few more bowling pins to knock down |
| 05:15:00 | evan | speaking of which |
| 05:15:10 | evan | tonight i'm starting a hydra branch |
| 05:15:17 | evan | which removes the GIL. |
| 05:15:18 | evan | :) |
| 05:15:28 | brixen | woot! |
| 05:15:38 | jakedouglas | where are the places that need finer locks? |
| 05:15:51 | evan | jakedouglas: thats what we're going to find out |
| 05:15:52 | evan | :D |
| 05:15:54 | brixen | jakedouglas: if we had all that, it be pretty easy |
| 05:15:55 | jakedouglas | heh. |
| 05:15:56 | brixen | heh |
| 05:15:59 | jakedouglas | :) |
| 05:16:06 | evan | I've got a few ideas |
| 05:16:12 | evan | and i'm going to go overboard with locks at first |
| 05:16:20 | evan | and then scale them back |
| 05:16:49 | evan | for instance, a lock in capi |
| 05:16:57 | evan | to keep only one native method running at a time |
| 05:17:13 | evan | since extensions are not accustom to running with true concurrency |
| 05:17:18 | evan | they might be fine, but I don't know |
| 05:17:24 | evan | so I'll put in a lock in for now. |
| 05:17:58 | jakedouglas | damn. im totally understanding this vm stuff way better now. i dont quite have the big picture down intuitively but i can follow most of the code except the llvm stuff. |
| 05:18:06 | evan | yay! |
| 05:18:11 | brixen | sweet |
| 05:18:19 | evan | I need to keep refactoring LLVM a bit |
| 05:18:21 | jakedouglas | jvm langs whipped me into shape heh |
| 05:18:31 | slava | jakedouglas: did you attend last year? |
| 05:18:31 | evan | it's still shotgunning data around |
| 05:18:37 | jakedouglas | slava: no. |
| 05:18:55 | slava | jakedouglas: I got an email about it but didn't go this year because I've been way too busy |
| 05:19:15 | jakedouglas | i've tried reading some llvm tutorials but i find it god awful confusing |
| 05:19:32 | slava | its a portable assembly language |
| 05:19:47 | slava | look at the textual form of LLVM IR before you dive into the API |
| 05:19:54 | jakedouglas | oh. is it easier? |
| 05:19:55 | evan | jakedouglas: at the level we use it, it's simply an AST |
| 05:19:59 | slava | and play around with the command-line LLVM IR compiler. it will make sense immediately |
| 05:20:03 | evan | you build a tree of what you want to execute |
| 05:20:14 | evan | so |
| 05:20:19 | evan | the way I learned llvm was using llvm-gcc |
| 05:20:21 | evan | write a C program |
| 05:20:29 | jakedouglas | compile to llvm ir? |
| 05:20:36 | evan | then use llvm-gcc -S to see the llvm ir in LL form |
| 05:20:40 | evan | LL is the text format |
| 05:20:42 | jakedouglas | i see. |
| 05:20:57 | evan | thats how I built up how to use LLVM |
| 05:21:05 | evan | i'd say "ok, i want a condition and then a call" |
| 05:21:10 | evan | so i'd do that in C, check out the LLVM IR |
| 05:21:15 | jakedouglas | right |
| 05:21:19 | evan | then you can do llc -arch=cpp |
| 05:21:32 | evan | to even have LLVM convert the IR to a C++ file that would reconstruct that IR |
| 05:21:37 | evan | so you can see how the C++ API works |
| 05:22:04 | dwaite | evan: they have a documentation directory now |
| 05:22:15 | evan | we use that to bootstrap part of our JIT actually |
| 05:22:27 | jakedouglas | i dont really understand what you mean by that you use it as an AST. i dont have an concrete understanding of what an AST really is though |
| 05:22:45 | evan | jakedouglas: just a tree of objects |
| 05:22:50 | evan | thats all. |
| 05:22:56 | jakedouglas | hmm. |
| 05:22:58 | evan | each object is an operation |
| 05:23:15 | dwaite | jakedouglas: compilers are about shifting the essence of the commands in your program around into different forms until it finally gets to a point where the CPU inside your machine understands it :) |
| 05:23:17 | evan | you can check out the AST for rubinius using -A |
| 05:23:20 | evan | bin/rbx compile -A <file> |
| 05:23:29 | jakedouglas | ok. |
| 05:23:34 | brixen | yes, quite helpful |
| 05:23:47 | evan | thats not the AST that LLVM uses, but it's helpful for understanding what an AST does. |
| 05:23:52 | dwaite | AST is kinda the first form; elements of the syntax represented as objects, where expressions and subexpressions wind up forming a tree |
| 05:24:24 | dwaite | at least thats how i've always understood it |
| 05:25:05 | slava | LLVM IR differs from a typical AST in that it is flat |
| 05:25:12 | slava | you don't say (x+y)*4 |
| 05:25:20 | brixen | jakedouglas: there are some really helpful books here: http://www.engineyard.com/blog/2009/rubinius-the-book-tour/ |
| 05:25:21 | slava | instead its more like z = x+y; w = z*4; |
| 05:25:22 | jakedouglas | IR is more similar to machine code, ya? |
| 05:25:25 | boyscout | CI: Commit 83feb62 failed. http://github.com/evanphx/rubinius/commit/83feb6254c474b29e7623985589dffab4a827557 |
| 05:25:30 | brixen | jakedouglas: in particular, engineering a compiler |
| 05:25:31 | evan | slava: well, yes and no |
| 05:25:40 | jakedouglas | brixen: tanks |
| 05:25:42 | jakedouglas | thanks |
| 05:25:43 | evan | slava: at the AST level, you do have (x+y)*4 |
| 05:25:47 | slava | oh |
| 05:25:52 | brixen | jakedouglas: IR is any intermediate representation |
| 05:26:00 | evan | the SSA form you see is it linearized and broken out for the text representation |
| 05:26:03 | brixen | jakedouglas: that book (EAC) has a great section on IRs |
| 05:26:10 | evan | because there is really no way to textualize an AST |
| 05:26:32 | evan | brixen: erm, fixing CI. |
| 05:26:46 | jakedouglas | yea the output of compile -A makes plenty of sense. |
| 05:26:49 | brixen | evan: I already pushed a fix |
| 05:26:56 | evan | ok, thanks |
| 05:26:58 | evan | i'll kick it again. |
| 05:26:58 | brixen | n/p |
| 05:27:18 | evan | jakedouglas: thats an AST |
| 05:27:21 | evan | pretty easy. |
| 05:27:36 | evan | slava: LLVM's SSA is oriented toward that text output because you can give each node a name |
| 05:27:36 | jakedouglas | right |
| 05:27:41 | evan | and than name is what's used in the text output |
| 05:27:49 | evan | but if they have no names, they get names like %3 |
| 05:27:59 | evan | ie, just an incremented number within that function |
| 05:28:28 | slava | I see |
| 05:45:36 | evan | sweet |
| 05:46:06 | evan | a little C++ class hierarchy + RIAA + macros means I can add locking to a C++ class very easily |
| 05:46:42 | evan | inherit from thread::Lockable |
| 05:46:52 | evan | put LOCK_ME in any method you want to lock |
| 05:53:42 | brixen | nice |
| 05:58:12 | evan | brixen: i'm also going to add a lock_object and unlock_object instructions |
| 05:58:22 | evan | and Object::lock()/unlock() in C++ |
| 05:58:28 | evan | that use a mutex in the inflated header |
| 05:59:18 | evan | we can get fancy with thin locks once it's working |
| 05:59:59 | slava | every object will have a lock? |
| 06:00:17 | evan | for this first experiment, yes. |
| 06:00:32 | slava | any thoughts on whether or not arrays and hashes should be thread-safe? |
| 06:00:39 | evan | probably not |
| 06:00:45 | evan | charlie and I have discussed that a bunch |
| 06:00:50 | evan | in jruby they're not. |
| 06:01:00 | slava | at least mutating an array from multiple threads should be memory-safe though right? |
| 06:01:05 | evan | yes |
| 06:01:10 | evan | memory-safe is aim 1 |
| 06:01:18 | slava | but something like pushing concurrently might overwrite the second element with the first |
| 06:01:22 | slava | because if you do that you suck |
| 06:01:25 | slava | but if you suck your VM shouldn't segfault |
| 06:01:27 | evan | which must be true even for misbehaving ruby programs |
| 06:01:49 | evan | yes |
| 06:01:53 | evan | ruby code can't segfault the VM. |
| 06:01:54 | evan | as a rule. |
| 06:02:20 | slava | perhaps factor should have something like D's safe/trusted/unsafe qualifiers |
| 06:02:30 | slava | safe code can only call safe and trusted code, trusted code can call unsafe code |
| 06:02:44 | evan | well, FFI is a bit like that |
| 06:02:51 | evan | sinec it's unsafe. |
| 06:03:12 | slava | but you don't enforce this kind of discipline right? |
| 06:03:20 | evan | no. |
| 06:03:21 | slava | so yeah, any FFI call would make your method unsafe |
| 06:03:30 | evan | well, "yes" if i say that all ruby code is trusted code |
| 06:03:31 | evan | :D |
| 06:03:33 | slava | and you'd have to wrap it in a trusted method to check stuff etc |
| 06:03:39 | slava | trust the ruby |
| 06:04:06 | slava | so there's this FFI issue that factor has, I'm not sure what a good solution is |
| 06:04:19 | slava | if you have a function declared to take a string, you can pass a string object or false |
| 06:04:26 | slava | if you pass false, its unboxed to a null pointer |
| 06:04:29 | slava | which can segfault |
| 06:04:35 | evan | yep. |
| 06:04:44 | evan | but it's the thing you called that segfaults, yes? |
| 06:05:01 | slava | yes, but the issue is that usually if you pass a boolean where a string is expected, you'd see some kind of type error or something |
| 06:05:13 | slava | but here the value can bubble down 10 layers and end up in an FFI call |
| 06:05:19 | slava | even though you called some nice high level API |
| 06:06:19 | evan | well |
| 06:06:25 | evan | you have to be able to pass NULL some way |
| 06:06:32 | evan | because thats a normal C API duty |
| 06:06:49 | slava | I was thinking of changing it so that in this case you have to declare the parameter as a pointer, and not a string |
| 06:07:00 | slava | and then if yo uwant to pass a string or null, convert the string to a byte array manually |
| 06:07:15 | slava | but yeah, FFI raises all kinds of safety issues |
| 06:07:30 | slava | there's no good solution. VM extensions are no better, they just force you to write boilerplate and think about everything |
| 06:07:36 | slava | its harder to fuck up |
| 06:07:46 | evan | enforcing a form of type safety by not allowing null is possible |
| 06:07:58 | evan | but you're just making your users go through hoops to call a C function that could crash anyway |
| 06:08:17 | slava | yeha |
| 06:08:23 | slava | clearly we need to get rid of C altogether :) |
| 06:08:28 | evan | :) |
| 06:08:48 | evan | devising a simple language that allows you to write VM extensions is an option |
| 06:10:24 | brixen | back |
| 06:10:30 | evan | welcome back b. |
| 06:10:34 | brixen | what's with a bar closing at 11pm |
| 06:10:38 | brixen | losers :) |
| 06:10:41 | evan | in portland?! |
| 06:10:43 | slava | brixen: while you were gone me and evan decided to eliminate C |
| 06:10:44 | evan | tell the cops |
| 06:10:46 | brixen | heh, yeah |
| 06:10:54 | brixen | slava: good plan |
| 06:11:00 | slava | brixen: littledan tells me that in irvine everything closes at 10pm because they're a bunch of suburban pansies |
| 06:11:03 | brixen | slava: can we all use Go now? |
| 06:11:03 | evan | brixen: that must be a union violation in portland. |
| 06:11:13 | evan | slava: that is totally true of irvine |
| 06:11:17 | evan | it's mega-burbia. |
| 06:11:32 | littledan | but they don't have bars in Irvine in the first place |
| 06:11:42 | littledan | you have to go to one of the beaches or santa ana |
| 06:12:14 | evan | hey littledan is in here! |
| 06:12:20 | littledan | yeah! |
| 06:12:24 | evan | welcome! |
| 06:12:29 | slava | littledan is the famous tracing JIT researcher at UC Irvine |
| 06:12:32 | evan | you should come hang up in LA sometime |
| 06:12:38 | evan | oh man |
| 06:12:39 | evan | we must meet |
| 06:12:41 | littledan | I'd love to |
| 06:12:42 | evan | i'd love to talk JITs |
| 06:12:47 | evan | I never get to. |
| 06:12:53 | littledan | you live in LA? |
| 06:12:56 | evan | yep! |
| 06:12:57 | evan | Hollywood. |
| 06:13:41 | evan | hey! bin/rbx -v booted without the GIL! |
| 06:13:46 | littledan | well I'm free this weekend |
| 06:13:50 | evan | I wonder if this will be like when we ran rails |
| 06:14:01 | evan | we thought it would be hard, I hacked for a few hours, and it worked. |
| 06:14:06 | evan | that would be hilarious. |
| 06:14:18 | evan | littledan: we weekend is looking full, going to the X games on saturday |
| 06:14:28 | evan | er. s/we/my/ |
| 06:14:58 | slava | but how many threads are actually running? |
| 06:15:03 | evan | 1! |
| 06:15:08 | evan | :) |
| 06:16:08 | evan | littledan: you free at all during the week? or are you hard at working at UC Irvine |
| 06:16:09 | brixen | heh |
| 06:16:21 | slava | evan: s/hard at/hardly/ |
| 06:16:32 | evan | COWORKER ZING ALERT |
| 06:17:08 | brixen | evan: hurry, run some benchmarks and write a blog post with a very tiny disclaimer at the end :) |
| 06:17:16 | evan | hah |
| 06:18:22 | littledan | evan, I can take weekdays off and work on the weekend in academia |
| 06:18:50 | brixen | who works in academia? |
| 06:18:55 | evan | we should definitely work something out. |
| 06:19:11 | littledan | does |
| 06:19:14 | evan | littledan: maybe somewhere between here and there? |
| 06:19:21 | littledan | why? |
| 06:19:28 | littledan | I'd rather go there |
| 06:19:32 | evan | ha! |
| 06:19:33 | evan | ok |
| 06:19:35 | evan | easy for me! |
| 06:20:03 | slava | I'm just sitting on the sidelines, watching this relationship blossom. |
| 06:20:17 | evan | we can talk shit about slava |
| 06:20:18 | evan | err.. |
| 06:20:20 | evan | i mean... |
| 06:20:21 | evan | um... |
| 06:20:25 | evan | talk about how awesome he is. |
| 06:22:04 | brixen | you guys can discuss slava's latent syntax envy :) |
| 06:22:12 | evan | hah |
| 06:38:50 | evan | slava: do you use FFI for the UI |
| 06:39:04 | slava | yes |
| 06:39:15 | slava | that was the original motivation, along with IO |
| 06:39:48 | evan | so you've got enough of the platform APIs mapped to open windows and draw I guess? |
| 06:40:08 | slava | basically yeah |
| 06:40:40 | brixen | slava: we should collaborate, rbx should have a killer GUI app |
| 06:41:51 | brixen | slava: also ☃ |
| 06:41:54 | slava | one day I'll start doing real-world shit |
| 06:42:10 | brixen | http://railssnowman.info/ :) |
| 06:42:43 | brixen | I really hope they rename that to _ewww and not just _e |
| 07:13:01 | evan | ok, off to bed. |
| 07:13:07 | evan | more fun with hydra tomorrow. |
| 16:19:19 | brixen | ahh, the smell of fresh spec failures in the crisp overcast morning |
| 16:19:26 | jakedouglas | :p |
| 16:20:09 | jakedouglas | you're making me miss the NW. |
| 16:20:51 | brixen | heh |
| 16:20:58 | brixen | I love sun and warm |
| 16:21:04 | evan | :D |
| 16:21:05 | brixen | no idea what I'm doing living in the NW |
| 16:21:07 | jakedouglas | i guess ill be home in about 13 hours though. |
| 16:21:19 | brixen | jakedouglas: what's on the schedule today? |
| 16:21:52 | jakedouglas | hmm. im sitting at the hotel waiting for them to take me over, slept in a bit today. lets see... |
| 16:21:58 | jakedouglas | oh, they are actually giving talks on languages today! |
| 16:22:02 | jakedouglas | amazing |
| 16:22:02 | brixen | slacker! |
| 16:22:17 | jakedouglas | yea i feel like im getting sick or something :/ |
| 16:22:22 | brixen | :( |
| 16:22:33 | brixen | sounds like a bunch of folks are getting summer colds |
| 16:22:36 | jakedouglas | i'm currently missing groovy |
| 16:22:36 | brixen | teh suck |
| 16:23:06 | jakedouglas | then php, kawa, workshop with rich hickey, someone from oracle talking about something, scala, fortress |
| 16:23:43 | brixen | jakedouglas: you said these are being recorded, right? |
| 16:23:56 | jakedouglas | yea. |
| 16:24:00 | brixen | excellent |
| 16:24:47 | jakedouglas | oh yea. workshop with cliff click is today too. that will be interesting |
| 16:25:03 | brixen | yeah |
| 16:25:46 | jakedouglas | hes going to talk about azul hardware stuff and/or jit details |
| 16:26:03 | evan | jakedouglas: quick! transport me in! |
| 16:26:11 | evan | i wanna hear cliff talk about that stuff! |
| 16:26:38 | brixen | jakedouglas: do you have an iphone 4? you could facetime with evan live from the talk |
| 16:26:44 | jakedouglas | heh |
| 16:26:48 | evan | YES |
| 16:26:53 | evan | YYYYYEEEEESSSSS |
| 16:26:57 | evan | :) |
| 16:26:57 | jakedouglas | i would be happy to broadcast with skype or something |
| 16:27:09 | evan | is Guy Steele there? |
| 16:27:12 | jakedouglas | the workshops are not recorded so…yea you would miss out on that one |
| 16:27:14 | jakedouglas | i don't know. |
| 16:27:21 | evan | he's the main fortress guy |
| 16:27:22 | evan | or was. |
| 16:27:32 | evan | before the Snoracle shakeup |
| 16:28:03 | jakedouglas | ah. i don't think so. christine flood is whos speaking about fortress today, she's been nice enough to give me rides every day too :) |
| 16:28:38 | evan | ah cool. |
| 16:28:50 | evan | i wonder if fortress is still using UTF-8 operators |
| 16:29:00 | jakedouglas | heh |
| 16:30:15 | jakedouglas | well, maybe i can do an incognito skype session later if you really want to hear click |
| 16:31:34 | evan | hehe |
| 16:31:37 | evan | nah, it's fine. |
| 16:31:46 | jakedouglas | ok :) |
| 16:31:53 | brixen | jakedouglas: take really good notes! |
| 16:31:59 | jakedouglas | heh ok. |
| 16:32:04 | brixen | vebatim |
| 16:32:07 | brixen | er ver |
| 16:32:32 | brixen | or HD recorder, whatever is easiest :) |
| 16:33:17 | jakedouglas | well i guess it depends on how he does it |
| 16:33:32 | jakedouglas | i think yesterday what was going to be a 'mini cliff workshop' ended up being kind of a talk, and i think that got recorded |
| 16:33:59 | jakedouglas | so there may be something for you to watch later. |
| 17:18:35 | evan | so, happily for me |
| 17:18:45 | evan | i wrote a bunch of code hydra needed when I was working on the JIT thread |
| 17:18:55 | evan | namely, the ability to request all other threads stop |
| 17:24:05 | brixen | yeah, seems like you've been planning for this day for some time :) |
| 17:24:15 | evan | rad, concurrent allocation and full stop GC seem to be working |
| 17:24:20 | brixen | woot! |
| 17:24:50 | evan | the slab work I did just a few weeks ago was critical. |
| 17:25:07 | brixen | yeah |
| 17:25:50 | jakedouglas | what did i miss? |
| 17:26:03 | brixen | jakedouglas: it's all working |
| 17:26:26 | jakedouglas | what is all working |
| 17:26:43 | brixen | heh, evan's experiments with concurrent allocation and full stop GC |
| 17:26:49 | evan | :) |
| 17:26:52 | evan | jakedouglas: removing the GIL. |
| 17:27:04 | jakedouglas | what is 'full stop gc'? you mean you're getting other threads to stop for your gc to run? |
| 17:27:15 | brixen | a very long time ago, before we ran rails the first time, rue would ask "what did I miss" and I would say, "we run rails now" |
| 17:27:25 | jakedouglas | heh. |
| 17:28:01 | brixen | jakedouglas: yeah, stop-the-world GC requires all the threads mutating objects to pause |
| 17:28:39 | jakedouglas | uh huh |
| 17:29:45 | brixen | man, I hate C printf |
| 17:29:50 | brixen | since when is %c type int |
| 17:29:53 | brixen | effen eff |
| 17:58:24 | evan | rad, it's working. |
| 17:58:44 | goyox86 | evan: woot! :] |
| 18:00:38 | brixen | very cool |
| 18:00:43 | goyox86 | evan: what does exactly means "concurrent allocation"? |
| 18:01:08 | evan | goyox86: means 2 or more threads running in true parallel allocating new objects |
| 18:01:35 | evan | and one deciding "I need to GC" and getting cooperation from all threads in the system to suspend so GC can happen |
| 18:03:55 | goyox86 | evan: each vm run on a OS thread? , and when you say "2 or more threads", you are talking about green ones?, correct me if i'm wrong |
| 18:04:32 | evan | no |
| 18:04:34 | brixen | goyox86: native threads, true concurrency |
| 18:04:36 | evan | rubinius doesn't use green threads |
| 18:04:40 | evan | native threads |
| 18:04:45 | evan | hydra is the branch i'm working on now |
| 18:04:47 | evan | that removes the GIL |
| 18:04:53 | evan | allowing for true concurrency |
| 18:06:28 | goyox86 | evan: :] but shotgun used green threads isn't? i remember some adam gardiner post, talking about that, or again i'm wrong :] |
| 18:07:14 | goyox86 | evan: an very old post i think |
| 18:07:18 | goyox86 | a* |
| 18:07:25 | evan | really old |
| 18:07:26 | evan | really really old. |
| 18:07:29 | evan | 2+ years. |
| 18:07:41 | evan | shotgun did use green threads |
| 18:07:45 | evan | as did the really early C++ stuff. |
| 18:09:32 | goyox86 | evan: how do you keep track of all the threads mutating objects?, you just stop that ones? or again i'm wrong :] |
| 18:10:07 | evan | i don't follow |
| 18:10:10 | evan | i'm not sure what you're asking. |
| 18:11:05 | goyox86 | evan: a few minutes ago brixen said -> jakedouglas: yeah, stop-the-world GC requires all the threads mutating objects to pause |
| 18:11:24 | evan | yep. |
| 18:13:37 | goyox86 | evan: well bro, keep working on hydra :), remove taht fu***ing GIL |
| 18:13:43 | goyox86 | fades |
| 18:14:01 | evan | :) |
| 18:14:10 | evan | sorry, to answer your question |
| 18:14:13 | blowmage | did someone say something about removing the gil? |
| 18:14:13 | evan | threads checkpoint |
| 18:14:17 | blowmage | perks up |
| 18:14:21 | brixen | imagines evan spraying liberally with his can of GIL-be-gone |
| 18:14:22 | evan | blowmage: yep, working on it now. |
| 18:14:29 | blowmage | niiiiice! |
| 18:15:14 | evan | goyox86: one thread requests all other threads to stop, and then waits for them to check in |
| 18:15:31 | evan | other threads check once in a while if they should stop |
| 18:15:37 | blowmage | evan: will hydra be available on your github repo? |
| 18:15:42 | evan | yep |
| 18:15:44 | evan | as a branch |
| 18:15:58 | evan | i'm getting the basics ironned out |
| 18:16:01 | evan | then i'll push it. |
| 18:16:11 | evan | it will probably still deadlock and crash sometimes |
| 18:16:24 | goyox86 | evan: that was i was asking for :) |
| 18:16:38 | evan | goyox86: :) there ya go! |
| 18:32:24 | postmodern | out of curiosity |
| 18:32:32 | postmodern | how is === implemented vs. kind_of? |
| 18:32:52 | evan | they're the same |
| 18:33:17 | evan | Module#===(obj) can just be |
| 18:33:20 | evan | obj.kind_of? self |
| 18:45:17 | postmodern | nice |
| 19:06:14 | boyscout | Fix for the following Marshal.dump specs: - 15ee649 - Jose Narvaez |
| 19:06:14 | boyscout | Remove tags for passing Marshal.dump specs - 0fe55af - Jose Narvaez |
| 19:06:40 | dbussink | goyox86: you should ask evan for commit access :) |
| 19:08:42 | goyox86 | evan: can i have a commit bit ;)? |
| 19:08:50 | evan | sure |
| 19:09:23 | evan | ok, added |
| 19:09:25 | evan | be good |
| 19:09:25 | evan | ! |
| 19:10:36 | goyox86 | is happy, joined the "Entire World Domination (for ruby)" team :] |
| 19:10:44 | evan | :D |
| 19:11:03 | tarcieri | so GIL free branch you say? |
| 19:11:05 | tarcieri | :) |
| 19:11:22 | evan | :D |
| 19:11:29 | evan | tarcieri: so far, working pretty well. |
| 19:11:45 | tarcieri | schwee |
| 19:11:49 | tarcieri | moving to fine grained locks or what? |
| 19:11:50 | evan | concurrent allocations and stop-the-world working well. |
| 19:12:04 | tarcieri | does your GC run in its own thread? |
| 19:12:05 | evan | yep. |
| 19:13:01 | evan | fine grain locks yes, |
| 19:13:03 | evan | gc thread, no. |
| 19:13:11 | tarcieri | o |
| 19:13:15 | evan | whichever thread wants to GC does the GC |
| 19:13:19 | evan | it asks all other threads to stop |
| 19:13:24 | tarcieri | ok |
| 19:13:26 | evan | and waits |
| 19:13:43 | tarcieri | well sounds dope |
| 19:14:15 | evan | this might end up being like when we first ran rails |
| 19:14:23 | evan | I was pessimistic about it for a long time |
| 19:14:30 | evan | but just decided to try one day |
| 19:14:35 | evan | about 24 hours later, it ran. |
| 19:14:43 | jakedouglas | you say 'concurrent allocation', do you allocate from something thread-local? or do you have some fine lock in it |
| 19:14:52 | evan | jakedouglas: thread-local |
| 19:15:05 | evan | each thread gets a slab of memory to access without a lock |
| 19:15:11 | evan | and only locks to grab a new slab. |
| 19:16:11 | jakedouglas | dont you have to add the new obj to some central thing? |
| 19:16:20 | evan | no |
| 19:16:26 | evan | like what? |
| 19:16:29 | goyox86 | which are the current GIL free Ruby implementations, JRuby? |
| 19:16:30 | jakedouglas | oh. it's already part of the central thing? |
| 19:16:40 | evan | what "central thing?" |
| 19:16:45 | evan | goyox86: macruby too |
| 19:17:45 | goyox86 | evan: what do you know about maglev?, it's not GIL free? |
| 19:17:53 | evan | that I don't know. |
| 19:18:03 | jakedouglas | i duno, does the gc only look at objects for the thread its running on? i feel that i have something conceptually wrong. maybe you could give a summary :p |
| 19:18:03 | dbussink | jakedouglas: there is no central thing, just that the gc needs to know which slabs are used, that's why asking for a new slab is locked |
| 19:18:11 | tarcieri | evan: it'd be a pretty interesting state of affairs if rbx and jruby supported concurrent multithreading and YARV didn't |
| 19:18:38 | evan | tarcieri: well, seems like thats going to happen. |
| 19:18:40 | dbussink | evan: btw, did headius succeed in triggering you a bit with his jruby c ext mongrel benchmarks? ;) |
| 19:18:49 | evan | no. |
| 19:18:56 | evan | which benchmarks? |
| 19:19:24 | evan | jakedouglas: to allocate an object, we setup the object header in memory with the class and clear the body, thats it. |
| 19:19:46 | evan | jakedouglas: when we want to GC, all threads are stop, and the object graph is traced, starting at the roots |
| 19:19:50 | tarcieri | evan: it's so nice on jruby being able to run one VM and have it use all of the available CPU cores, even for a dinky mostly database bound Rails app :) |
| 19:19:55 | evan | roots include locals variables, etc. |
| 19:21:37 | jakedouglas | right |
| 19:21:58 | evan | the system doesn't actively track all objects |
| 19:22:13 | evan | it simply knows where to start looking when it wants to find them. :) |
| 19:22:24 | tarcieri | is it weird I've come around to being a fan of threads and blocking I/O? |
| 19:22:25 | tarcieri | lol |
| 19:22:34 | evan | not at all to me. |
| 19:22:36 | evan | i am. |
| 19:22:48 | dbussink | tarcieri: did you read this? http://al3x.net/2010/07/27/node.html |
| 19:22:53 | tarcieri | yes |
| 19:22:59 | dbussink | pretty much sums up that there's no silver bullet ever |
| 19:23:04 | tarcieri | indeed |
| 19:23:12 | dbussink | it's the same story each time, async stuff, nosql, etc etc. |
| 19:23:18 | jakedouglas | is so ready to stop having the i/o discussion because it's always particular to circumstance |
| 19:23:26 | tarcieri | Node is a nifty idea but I really hate callback-driven asynchronous programming now |
| 19:23:36 | tarcieri | well, I have for awhile |
| 19:24:38 | evan | i'm mainly quite tired of silverbulletism. |
| 19:24:48 | evan | and thats not saying anything about a cold Coors. |
| 19:24:53 | tarcieri | haha |
| 19:24:54 | dbussink | evan: so true yeah :) |
| 19:25:16 | dbussink | evan: i'd be tired of Coors too if i were you :P |
| 19:25:18 | evan | i hear about people saying "you're stupid you don't use node.js for everything" |
| 19:25:26 | tarcieri | lol |
| 19:25:30 | evan | dbussink: i can't be tired of something I never drink. |
| 19:25:37 | tarcieri | there was this thing we could've used Node for |
| 19:25:48 | tarcieri | sort of an async push messaging server |
| 19:25:55 | tarcieri | then defunkt pointed us at the nginx http push module |
| 19:27:25 | evan | this is an interesting exercise |
| 19:27:30 | evan | i'm basically replacing |
| 19:27:42 | evan | GlobalLock::LockGuard guard(...); |
| 19:27:44 | evan | with |
| 19:27:55 | evan | GCIndependent guard(...); |
| 19:28:24 | evan | so that the GC can run while other threads are inside blocking syscalls. |
| 19:28:34 | tarcieri | aah |
| 19:28:43 | dbussink | evan: ah ok, cool :) |
| 19:28:56 | dbussink | evan: also integrates with ffi? |
| 19:29:02 | evan | ie, if a thread is waiting inside read(2) |
| 19:29:07 | evan | it's fine for other threads to run the GC |
| 19:29:22 | tarcieri | are you going to support rb_thread_blocking_region? :) |
| 19:29:28 | evan | i already do |
| 19:29:30 | evan | and funny enough |
| 19:29:31 | tarcieri | o |
| 19:29:36 | evan | now it's just this: |
| 19:29:54 | evan | return (*func)(data); |
| 19:29:56 | evan | :D |
| 19:29:58 | tarcieri | haha |
| 19:30:00 | tarcieri | nice |
| 19:30:02 | jakedouglas | haha |
| 19:30:23 | evan | before it had a GlobalLock::UnlockGuard guard(...) in there. |
| 19:30:35 | evan | I could throw a GCIndependent guard in there |
| 19:30:41 | evan | but don't need to. |
| 19:31:00 | evan | not GCing while an extension is busy is fine. |
| 19:32:31 | tarcieri | what if it's blocking for an indefinite period of time on a system call? |
| 19:33:01 | evan | true |
| 19:33:06 | evan | should go ahead and put the guard in there. |
| 19:33:58 | evan | same goes for FFI |
| 19:34:18 | evan | yeah, i'm basically just swapping every place I was unlocking the global lock with guards to go independent |
| 19:34:43 | brixen | so, getting the bts from all the threads in Agent is now going to be super useful for tracking down stuff |
| 19:35:52 | evan | yep |
| 19:35:59 | evan | and we've got that ability easily |
| 19:36:09 | evan | state->shared.stop_the_world(); |
| 19:36:12 | evan | <read backtraces> |
| 19:36:17 | evan | state->shared.restart_world(); |
| 19:36:32 | tarcieri | evan: what do you use for the memory allocator for the slabs? |
| 19:36:36 | tarcieri | just libc-provided malloc? |
| 19:37:19 | evan | my own stuff. |
| 19:37:24 | tarcieri | o |
| 19:37:29 | tarcieri | the Erlang people wrote their own too |
| 19:37:33 | evan | the young gen is allocated with malloc or mmap |
| 19:37:42 | evan | and the slabs are portions of that young gen |
| 19:37:48 | tarcieri | ok |
| 19:38:50 | evan | I should grab some lunch. |
| 19:38:57 | evan | bbiab |
| 19:39:10 | dwaite | evam. upi |
| 19:39:12 | dwaite | re sti[od upi dpm |
| 19:39:17 | evan | ? |
| 19:39:31 | dwaite | evan, you're stupid you don't use node.js for everything |
| 19:39:35 | tarcieri | lol |
| 19:39:40 | evan | i know. |
| 19:39:41 | dwaite | like, editing text, brushing your teeth, etc. |
| 19:39:42 | evan | i'm an idiot. |
| 19:39:50 | evan | it makes great cat food |
| 19:39:52 | evan | i'll say that. |
| 19:40:09 | dbussink | i should make a node.js based online text editor to conquer the software development world |
| 19:40:11 | evan | ok, lunch time. |
| 19:40:19 | tarcieri | I really need to blog about the whole async/fiber hype that's going on now :/ |
| 19:40:24 | dwaite | dbussink, as long as it supports pointing at textmate plugins |
| 19:40:57 | dwaite | tarcieri: will it just be "you are reimplementing green threads behind the GIL" |
| 19:41:00 | goyox86 | dbussink: Nodemate :] |
| 19:41:00 | dwaite | ? |
| 19:41:06 | dwaite | TextNode |
| 19:41:18 | goyox86 | dwaite: lol |
| 19:41:20 | tarcieri | dwaite: oh, I have lots of complaints... but the lack of real threads is one of them |
| 19:41:34 | dwaite | I've often been working on say some YAML and thought 'there really should be CSS animation here' |
| 19:49:53 | tarcieri | especially in light of evan's work on concurrent multithreading here, heh |
| 19:50:21 | tarcieri | wonders if IronRuby supports concurrent multithreading |
| 19:50:31 | dwaite | probably? unless the DLR doesn't |
| 19:50:53 | tarcieri | well it's not something they'd just get for free because the DLR provides it |
| 19:51:02 | tarcieri | they'd need to take steps to ensure the semantics are still correct |
| 19:51:44 | dwaite | "IronRuby maps Ruby's green threads directly to CLR threads, and there is no GIL." |
| 19:51:49 | dwaite | so says the internet |
| 19:51:51 | tarcieri | cool |
| 19:52:00 | tarcieri | dwaite: thanks, too lazy to Google :) |
| 19:54:26 | goyox86 | Node.js uses this technology: http://www.google.com/technology/pigeonrank.html :) |
| 19:56:30 | goyox86 | is just kiddin, he thinks Node.js a good project ;) (For ta Node.js fans) |
| 19:56:37 | tarcieri | oh I do too |
| 19:56:42 | tarcieri | it's nifty and all |
| 19:56:46 | tarcieri | if you have an appropriate use case |
| 19:56:56 | tarcieri | we did at one point but we found something that was already written for us :) |
| 19:57:33 | goyox86 | tarcieri: yep, nope seeing this as the panacea! , i agree you totally apropiate use case :] |
| 20:00:27 | dwaite | I think it is a silver bullet, and it will solve all of my problems |
| 20:00:28 | dwaite | ever |
| 20:00:41 | dwaite | including relationship problems |
| 20:00:51 | dwaite | and certain long-standing unproven mathematical theorems |
| 21:16:51 | bakkdoor | evan: you there? |
| 21:16:58 | evan | yep! |
| 21:53:07 | sbryant | Anything interesting happen lately with rubinius? |
| 21:53:36 | Defiler | By definition. :) |
| 21:53:56 | evan | sbryant: working on GIL removal. |
| 21:54:55 | goyox86 | sbryant: should ask if there is some hydra around... |
| 21:55:03 | goyox86 | ;) |
| 21:56:38 | sbryant | kekeke |
| 21:56:45 | sbryant | evan: neat-o! |
| 21:56:47 | bougyman | evan: hooray! |
| 21:56:52 | bougyman | is it 1.9 yet? |
| 21:56:53 | sbryant | I thought there were issues with it. |
| 21:57:12 | sbryant | With removing the GIL that is. |
| 21:57:42 | evan | nothing inherent in the architecture |
| 21:57:47 | evan | I just always figured it would be a lot of work |
| 21:57:49 | Defiler | Issues like 'evan has to do it' |
| 21:57:50 | evan | but i didn't really know |
| 21:57:57 | evan | so I decided to dive in. |
| 21:58:03 | evan | Defiler: :D |
| 22:18:09 | sbryant | evan: well, awesome. |
| 22:32:39 | jakedouglas | is there a benchmark laying around that serves to benchmark the gc? (creates lots of objects?) |
| 22:33:17 | evan | mmm, not that I can think of |
| 22:33:17 | evan | no. |
| 22:33:29 | boyscout | Add thread::Lockable, add locks to SharedState - 4e30535 - Evan Phoenix (hydra) |
| 22:33:30 | boyscout | Remove all traces of GlobalLock - dc364a9 - Evan Phoenix (hydra) |
| 22:33:30 | boyscout | Get stop-the-world for GC working - ba14bec - Evan Phoenix (hydra) |
| 22:33:35 | evan | for those that are curious ^^^^^ |
| 22:33:36 | jakedouglas | HYDDDRRRAAAAA |
| 22:39:26 | brixen | jakedouglas: a couple of the RBS benches create a bunch of arrays and string iirc |
| 22:39:32 | brixen | or really big strings or something |
| 22:40:10 | brixen | benchmark/rbs/garbage_collection/bm_gc_* |
| 22:40:17 | jakedouglas | thanks |
| 22:40:28 | brixen | they could be vastly improved |
| 22:40:34 | brixen | as with everything in rbs :) |
| 22:40:53 | jakedouglas | heh |
| 22:41:25 | brixen | jakedouglas: you should use heap dump to grab an object profile 1/2 through a rails request or something |
| 22:41:40 | brixen | use that to create a similar histogram of objects synthetically |
| 22:42:44 | jakedouglas | yea |
| 22:52:25 | brixen | http://gist.github.com/496620 |
| 22:52:28 | brixen | yay |
| 22:52:43 | brixen | fair to say perf is scaling with the # of directives implemented |
| 22:53:53 | brixen | this chunky_png bench http://gist.github.com/493523 is still slow with all directives that it uses implemented though |
| 22:53:58 | brixen | so I need to profile that |
| 22:54:03 | evan | brixen: btw |
| 22:54:09 | evan | notice you have data in those other columns now |
| 22:54:17 | evan | because i'm using getrusage for Process.times finally |
| 22:54:18 | brixen | yep :) |
| 22:54:25 | brixen | I sow your commit, cool beans |
| 22:54:30 | brixen | er saw |
| 22:54:34 | evan | :) |
| 22:54:44 | evan | getrusage is more accurate than times(2) which is what MRI uses |
| 22:55:01 | evan | thats why we've got less round numbers |
| 22:55:02 | evan | :) |
| 22:55:07 | brixen | cool |
| 23:03:10 | brixen | thanks kernel panic, I wasn't in the middle of anything |
| 23:03:16 | evan | again? |
| 23:03:17 | evan | geez. |
| 23:03:22 | brixen | you could have installed the safari update while you were at it |
| 23:03:42 | brixen | firefox-bin was the current thread |
| 23:03:52 | brixen | but I swear, it only happens when I run specs |
| 23:04:06 | evan | maybe a Process#kill spec? |
| 23:04:07 | brixen | must be some heavy thread switching or something |
| 23:04:23 | brixen | can't see why that'd cause a kernel panic, but who knows |
| 23:04:36 | evan | *shrug* |
| 23:04:40 | brixen | I should just give up on using ff |
| 23:04:52 | evan | i've been using chrome |
| 23:05:19 | brixen | I should give it a try |
| 23:07:18 | evan | brixen: muhahah |
| 23:07:25 | evan | i think we've won hearts and minds with RubySpec |
| 23:07:31 | brixen | awesome |
| 23:07:37 | brixen | what makes you think that? |
| 23:07:42 | evan | someone on ruby-core said that if they're going to introduce a Semaphore class, they should be writing specs in RubySpec for it. |
| 23:07:50 | brixen | yay! |
| 23:07:57 | evan | i don't know if they will |
| 23:08:02 | evan | but random people are chiming in. |
| 23:08:07 | brixen | excellent |
| 23:08:40 | goyox86 | brixen: definitely use chrome |
| 23:08:41 | brixen | I'm calling the era before RubySpec the BS era |
| 23:08:45 | brixen | Before Specs |
| 23:08:50 | evan | heheh |
| 23:08:50 | brixen | mind boggling really |
| 23:09:51 | brixen | evan: this is the extent of unpack in the 1.8.7 tests http://gist.github.com/493054 |
| 23:10:07 | bakkdoor | lol, bs era :D |
| 23:10:14 | brixen | it would be hilarious were it not so sad :( |
| 23:10:33 | bakkdoor | yeah .. |
| 23:12:05 | jakedouglas | maybe someone in here can tell me - is there a way to make the MRI source code display sanely in textmate? |
| 23:12:18 | goyox86 | evan, brixen: Using BDD/TDD, definitely was a win, it makes a LOT of easy, the diving into the project, when you say "just try to make some spec pass", and we'll check your patch, is like a rock solid foundation :) |
| 23:12:22 | evan | brixen: http://skitch.com/evanphx/dqwdt/cam |
| 23:12:52 | evan | jakedouglas: try setting the tab width to 4 |
| 23:13:02 | evan | should be a setting in the tray at the bottom |
| 23:14:31 | jakedouglas | not quite... |
| 23:14:38 | jakedouglas | looks a little better though heh |
| 23:15:00 | brixen | evan: haha excellent |
| 23:15:18 | brixen | jakedouglas: I think tabs 8 |
| 23:15:22 | brixen | the spaces are 4 |
| 23:15:32 | brixen | it's the craziest shit |
| 23:15:33 | jakedouglas | yea tabs 8 worked. thanks |
| 23:15:33 | brixen | ever |
| 23:15:52 | jakedouglas | its fiiiine |
| 23:15:55 | jakedouglas | :p |
| 23:15:58 | brixen | hehe |
| 23:18:19 | evan | oh man |
| 23:18:31 | evan | you know this change is going to be good when you get to use __sync_bool_compare_and_swap |
| 23:19:46 | brixen | yay |
| 23:20:14 | brixen | I think our buzzword compliance is going to scale linearly with cores |
| 23:20:19 | evan | i have to think through a bunch code in parallel |
| 23:20:29 | evan | which is always a good mental exercise. |
| 23:50:39 | goyox86 | i'm getting this http://gist.github.com/496772 when building hydra branch :], i'm pretty sure it's me but can someone help me? :) |
| 23:51:05 | evan | goyox86: it doesn't run the specs |
| 23:51:10 | evan | and i haven't tried to compile extensions with it. |
| 23:51:16 | evan | rake -q build |
| 23:51:18 | evan | only for now. |
| 23:51:29 | evan | er |
| 23:51:31 | evan | rake -q vm:build |
| 23:51:32 | goyox86 | evan: :) |
| 23:51:38 | evan | not sure why you're getting that error though |
| 23:51:44 | evan | that should work |
| 23:52:03 | evan | yeah, thats even for MRI |
| 23:52:08 | evan | thats not related to hydra actually. |
| 23:52:27 | goyox86 | evan: 10-04 |
| 23:55:35 | goyox86 | evan: same error, let me get Mephistopheles out of my box and try again :) |
| 23:55:49 | evan | :) |