Show enters and exits. Hide enters and exits.
| 00:00:22 | brixen | sweet |
| 00:01:22 | rue | Cool. I was thinking about adding "banner" or "comment" items, but the current setup in vm/configuration.hpp would not really work well with that |
| 00:01:42 | evan | rue: yeah, this works fine |
| 00:01:50 | evan | it's not the nicest in the world, but it gets the job done. |
| 00:02:04 | rue | It will work fine until there are 20 or 30 options :) |
| 00:02:15 | evan | yeah |
| 00:02:16 | evan | oh well |
| 00:02:24 | rue | They are grouped, rather than alphabetised, which makes sense in the .hpp, but not when you print them :) |
| 00:03:09 | evan | yeah, i was thinking that too |
| 00:03:53 | rue | You have to give up the direct ivar access to gain that without writing any more elaborate parser code |
| 00:07:05 | evan | huh? |
| 00:08:04 | boyscout | CI: 2bc8d00 success. 2683 files, 10346 examples, 32917 expectations, 0 failures, 0 errors |
| 00:08:07 | boyscout | Minor reformat - c1c20f7 - Evan Phoenix |
| 00:14:56 | boyscout | Catch unknown gc. options - d03fb5a - Evan Phoenix |
| 00:15:24 | boyscout | CI: c1c20f7 success. 2683 files, 10346 examples, 32917 expectations, 0 failures, 0 errors |
| 00:47:50 | evan | dbussink: poke |
| 00:51:49 | rue | Probably gone, it is 23.809444444444445 UTD already |
| 00:52:14 | evan | T-0.19 til tomorrow! |
| 00:52:33 | rue | Or UMT, I suppose |
| 00:52:45 | seydar | stalks a wild rue |
| 00:52:54 | seydar | withdraws his pokeball |
| 00:53:01 | seydar | greetings fellow pokehunters |
| 00:53:08 | rue | It is pitch black. You are likely to be eaten by a rue |
| 00:53:21 | seydar | bwahahahaha |
| 00:54:09 | seydar | you are full of the best things |
| 00:54:17 | seydar | what was it you wanted to be back in middle school? |
| 00:55:29 | rue | Well, many things |
| 00:55:43 | rue | I am a renaissance man of wanting to be stuff |
| 00:56:28 | seydar | you need to update your blog |
| 00:56:40 | seydar | or use twitter to broadcast your brilliant remarks |
| 00:57:13 | seydar | sorry to seem to be idolizing you, but that past two things you've said that i've caught have been fucking hilarious |
| 00:59:11 | seydar | you said you wanted to be a traveling minstrel of sorts |
| 00:59:15 | seydar | but there was some qualifier |
| 01:05:53 | rue | Oh |
| 01:05:59 | rue | Opium-addled |
| 01:06:48 | seydar | and i bet you would've made a great one at that |
| 01:09:37 | boyscout | Properly initialize the header of a VariableScope - a7f7c9a - Evan Phoenix |
| 01:09:37 | boyscout | Properly initialize NativeMethodEnvironment - 319665d - Evan Phoenix |
| 01:11:16 | seydar | rue: whatever happened to mod_rubinius? |
| 01:11:17 | evan | ok, tell dbussink to try again |
| 01:17:14 | boyscout | CI: 319665d success. 2683 files, 10346 examples, 32917 expectations, 0 failures, 0 errors |
| 01:17:54 | rue | seydar: Nothing; Rubinius is still not quite at the point to do any of the more drastic stuff and Passenger pretty much takes care of the non-drastic variety |
| 01:18:23 | seydar | ok, but it WILL happen at some point, right? |
| 01:19:45 | rue | I rather hope Apache dies a painful death first. Will probably give Rubinius serverisation a go at some point, though |
| 01:20:32 | seydar | or maybe if thin/mongrel/ebb become good enough to take apache's place, that'd be sweet |
| 01:20:37 | seydar | because i HATE passenger |
| 01:21:34 | macournoyer | seydar: don't think that will happen |
| 01:21:46 | seydar | macournoyer: what would it take? |
| 01:22:01 | rue | A cataclysm |
| 01:22:13 | macournoyer | magic and lots of cupcakes |
| 01:22:27 | seydar | i meant technologically, not have it socially replace apache |
| 01:22:29 | rue | I am totally going to devise an SMP device that only affects crappy technology |
| 01:23:08 | macournoyer | you'd have to serve static files very fast |
| 01:23:40 | macournoyer | that means sendfile on some system writev on others and other technics |
| 01:25:00 | seydar | and besides serving static files mthrfckingly fast? |
| 01:25:13 | rue | seydar: Oh, hey, got something for you |
| 01:25:32 | seydar | rue: kyllä, olen here |
| 01:26:06 | seydar | feels loved |
| 01:26:23 | macournoyer | manage response/request body buffers more efficiently I guess |
| 01:26:24 | rue | http://files.kittensoft.org/photos/summer/03-12am.jpg |
| 01:27:42 | seydar | rue: hah, that's midnight for you? |
| 01:28:23 | seydar | macournoyer: how do you feel about using swiftiply |
| 01:28:33 | seydar | ezmob: you going to GoRuCo? |
| 01:28:40 | ezmob | nope |
| 01:28:42 | ezmob | :( |
| 01:29:46 | seydar | :-( |
| 01:30:13 | seydar | fades for 20 min to finish his hw |
| 01:47:32 | seydar | aloha, children |
| 05:30:27 | ddub | man xkcd is soo geeky |
| 05:39:21 | will_l | http://www.isxkcdshittytoday.com/ |
| 05:39:21 | evan | seriously |
| 06:22:58 | tarcieri | hmm |
| 06:23:00 | tarcieri | hey evan? |
| 06:23:28 | tarcieri | when you're doing eval, do you build some sort of environment object that stores the bound local variables, then use that in conjunction with some compiled bytecode? |
| 06:23:37 | tarcieri | </toolazytousethesourceluke> |
| 06:58:27 | evan | tarcieri: yes. |
| 06:58:56 | tarcieri | okay, hmm |
| 06:59:21 | tarcieri | I don't know a lot about stack machines work, but does that environment object just populate certain registers with values or, umm, yeah I don't really know what I'm talking about |
| 06:59:40 | evan | no |
| 06:59:54 | evan | it's pretty unrelated to it being a stack machine |
| 07:00:00 | tarcieri | how does the bytecode reference state in the environment? |
| 07:00:02 | tarcieri | by name? |
| 07:00:09 | evan | depends |
| 07:00:12 | evan | different ways |
| 07:00:18 | tarcieri | fun! |
| 07:00:24 | evan | locals are id'd by index |
| 07:00:32 | tarcieri | index of what? |
| 07:00:37 | tarcieri | locals are really what I'm concerned about |
| 07:00:38 | evan | so like 'push_local 0' pushes the first thing in the locals tuple |
| 07:00:45 | tarcieri | ok |
| 07:00:49 | evan | i don't store the locals on the operand stack |
| 07:00:59 | tarcieri | like... I have a list of tuples |
| 07:01:00 | evan | because then i have to keep the whole operand stack around after a method exists |
| 07:01:00 | tarcieri | for locals |
| 07:01:03 | evan | exits |
| 07:01:08 | evan | ok |
| 07:01:11 | evan | so in eval |
| 07:01:18 | evan | i'll give ya a quick example |
| 07:01:19 | evan | the code |
| 07:01:25 | evan | a = 0; 1.times { p a } |
| 07:01:28 | evan | and |
| 07:01:33 | evan | a = 0; eval("p a") |
| 07:01:39 | evan | execute almost exactly the same way |
| 07:01:45 | tarcieri | if you're curious I'm basically trying to rewrite my eval to compile the code first |
| 07:01:52 | evan | ahok, |
| 07:01:53 | tarcieri | yeah, so that basically does eval("p a", binding) |
| 07:01:53 | evan | ok. |
| 07:01:55 | tarcieri | or something? |
| 07:01:59 | evan | right |
| 07:02:07 | evan | so it's constructing a new block |
| 07:02:09 | evan | and running it |
| 07:02:15 | tarcieri | o a block eh? |
| 07:02:19 | evan | and it references a using 'push_local_depth' |
| 07:02:20 | evan | in this case |
| 07:02:25 | tarcieri | hmmmm |
| 07:02:25 | evan | push_local_depth 1, 0 |
| 07:02:29 | evan | ie, up one level, index 0 |
| 07:02:30 | tarcieri | that is a particularly interesting solution |
| 07:02:47 | tarcieri | because it handles building the environment for me |
| 07:02:50 | evan | it's always up, relative the current one |
| 07:03:07 | evan | so the binding is just the variables available at depth 1+ |
| 07:03:09 | tarcieri | Erlang funs have an environment which contains the same list of tuples representing bound variables |
| 07:04:05 | evan | right |
| 07:04:21 | evan | so, in rubinius the locals are in a VariableScope object |
| 07:04:24 | tarcieri | and the resulting bytecode can reference them by name, provided the initial argument ordering is right |
| 07:04:25 | evan | that has a parent pointer |
| 07:04:30 | slava | evan: so next I'm going to extend my register allocator to operate on the whole procedure instead of basic blocks |
| 07:04:32 | evan | to an optional nother VariableScope |
| 07:04:36 | tarcieri | yeah I'm afraid I can't do anything that elaborate |
| 07:04:49 | evan | why not? |
| 07:04:57 | tarcieri | because I don't have objects, heh |
| 07:05:00 | evan | can you just access them directly in a mutable tuple |
| 07:05:10 | tarcieri | at least until I write a self-hosted compiler |
| 07:05:13 | tarcieri | I don't have mutable state |
| 07:05:22 | tarcieri | at all |
| 07:05:29 | evan | slava: neato |
| 07:05:33 | evan | tarcieri: hrm |
| 07:05:52 | tarcieri | their craptastic generational GC depends on immutable state |
| 07:06:16 | evan | FUN! |
| 07:06:18 | tarcieri | yep |
| 07:06:19 | tarcieri | heh |
| 07:06:24 | evan | that takes away all the fun parts of a GC |
| 07:06:29 | tarcieri | hehe |
| 07:06:37 | tarcieri | they need a better GC for their "hybrid" heap |
| 07:06:50 | tarcieri | cuz their current one fails miserably |
| 07:07:12 | tarcieri | hybrid heap is a shared heap for message-passed objects |
| 07:07:30 | tarcieri | maybe something like concurrent mark/sweep would work better? I dunno I'm certainly not a GC expert |
| 07:08:03 | evan | how were you doing reassigned locals with no mutable state? |
| 07:08:14 | tarcieri | quasi-SSA sort of thing |
| 07:08:25 | tarcieri | every variable gets a version number |
| 07:08:28 | tarcieri | incremented on rebind |
| 07:08:40 | evan | ah. |
| 07:09:32 | tarcieri | I wind up with a dict of variable names mapped to their current version number |
| 07:09:51 | evan | right. |
| 07:09:55 | tarcieri | so in a compiled eval, I have to translate that into something that builds a new list-of-bound-variable-tuples, and returns that in a tuple along with the real return value |
| 07:09:58 | tarcieri | FUN! |
| 07:11:13 | evan | ug. |
| 07:11:43 | tarcieri | yeah pure functional = pain |
| 07:12:28 | tarcieri | some mutable state would really be handy |
| 07:12:56 | evan | my kingdom for mutable state! |
| 07:13:20 | evan | $my_kingdom.owner = you |
| 07:13:22 | evan | in other words |
| 07:13:23 | evan | :D |
| 07:13:34 | tarcieri | heh |
| 07:14:30 | tarcieri | but yeah, using a lambda to build the environment for you, effectively |
| 07:14:32 | tarcieri | that's awesome |
| 07:15:16 | tarcieri | my compiler is full of "cool hacks" like that which other people thought up |
| 07:15:31 | tarcieri | like using throw/catch to implement "return" in a pure functional language was badass |
| 07:15:37 | tarcieri | well |
| 07:15:53 | evan | that is bad ass. |
| 07:15:55 | tarcieri | umm, using pure functional language constructs in a very impure functional language rather |
| 07:16:15 | tarcieri | Erlang has imperative features up the wazoo |
| 07:18:56 | tarcieri | evan: I talked to slava and I think he ditched his metacircular eval for something that just compiles, which is what you do too right? |
| 07:19:00 | tarcieri | that seems like the way to go |
| 07:19:14 | slava | I never had a metacircular evaluator |
| 07:19:26 | tarcieri | mainly I'm just tired of discrepancies between the metacircular evaluator and the compiled form |
| 07:19:29 | tarcieri | slava: o |
| 07:20:03 | slava | factor has been a compiled language from the first release in 2004 |
| 07:20:05 | tarcieri | there's totally bugs in eval which are only in eval and I'm tired of trying to debug those independently of the compiled form |
| 07:20:23 | tarcieri | yeah Erlang is completely compiled as well, although compiled to interpreted bytecode, unless you're using HiPE |
| 07:20:36 | tarcieri | however they do have a very gimpy metacircular eval |
| 07:20:46 | tarcieri | there are some lulzy code snippets from it |
| 07:20:50 | tarcieri | which I'm sure you've seen, slava |
| 07:20:50 | tarcieri | heh |
| 07:20:54 | slava | evan: did you read my blog post about PICs? |
| 07:21:27 | slava | I should've written it a month ago right after I implemented everything |
| 07:22:15 | tarcieri | I wish I could program the arduino in something better than C |
| 07:22:24 | tarcieri | has been trying to do analog eletronics lately |
| 07:22:28 | tarcieri | wow is it teduious |
| 07:22:43 | tarcieri | I'm looking through resistors manually inputting their color bands into a web site to identify them |
| 07:53:28 | evan | slava: I did! |
| 07:53:39 | evan | slava: and I think I want to use your code for back-patching call sites |
| 07:55:34 | evan | tarcieri: ah, EE |
| 07:55:38 | evan | i recall my EE classes well. |
| 07:56:41 | boyscout | Invoke the write barrier when writing locals - bdba687 - Evan Phoenix |
| 08:02:16 | boyscout | CI: bdba687 success. 2683 files, 10346 examples, 32917 expectations, 0 failures, 0 errors |
| 08:10:03 | tarcieri | heh |
| 08:10:09 | tarcieri | yeah I took like a semester of EE |
| 08:10:20 | tarcieri | but I did analog electronics crap before that |
| 08:12:25 | slava | evan: write barrier for locals? that doesn't sound right |
| 08:12:33 | dbussink | evan: looks like i have all passing specs for DO now :) |
| 08:13:17 | brixen | dbussink: seriously? on all adapters? |
| 08:13:29 | dbussink | brixen: with rspec 1.2.2 |
| 08:13:39 | dbussink | brixen: with 1.2.6 it throws a whole bunch of errors |
| 08:13:47 | brixen | ahh ok |
| 08:14:15 | dbussink | so that's something in the rspec / rbx playground, not in DO :) |
| 08:14:26 | brixen | well, good to know |
| 08:14:29 | dbussink | next up, running datamapper :) |
| 08:14:44 | brixen | progress :) |
| 08:14:48 | dbussink | but i don't think that should be really too problematic |
| 08:19:44 | evan | slava: no, thats right. |
| 08:19:57 | evan | slava: since locals can be promoted to be stored in a heap structure |
| 08:20:41 | tarcieri | crazy |
| 08:20:42 | tarcieri | heh |
| 08:20:46 | evan | looks like, atm |
| 08:20:51 | evan | bin/rbx -S rdoc -1 -v -r -o file.html lib/rdoc |
| 08:21:02 | evan | add -Xjit.enabled in there, get 25% improvement |
| 08:21:06 | tarcieri | the values can move from the stack to the heap? |
| 08:21:16 | evan | tarcieri: locals aren't on the stack. |
| 08:21:20 | evan | oh that |
| 08:21:21 | tarcieri | o |
| 08:21:25 | evan | yeah, it's on the C stack |
| 08:21:27 | evan | to begin life |
| 08:21:31 | tarcieri | yeah |
| 08:21:36 | evan | and promoted to the heap if need be |
| 08:21:43 | tarcieri | ok |
| 08:22:00 | slava | I hope your goal is a lot better than 25% improvement :) |
| 08:22:22 | evan | nah, i figured i'd stop here. :/ |
| 08:24:29 | tarcieri | is looking at a ~1000% improvement from his present code compilation strategy |
| 08:24:37 | tarcieri | but all that really means is my present implementation sucks balls |
| 18:07:02 | ddub | is there any grammar definition for ruby outside of the .y file bundled with MRI? :) |
| 18:10:05 | brixen | ddub: not that I know of, other than the other grammars out there |
| 18:14:33 | ddub | brixen: any that are fairly complete? |
| 18:14:43 | brixen | jruby's |
| 18:14:52 | brixen | ruby_parser |
| 18:15:33 | ddub | is it a refactoring of the MRI grammar or a new one? |
| 18:15:46 | brixen | both are based on MRI's |
| 18:15:58 | brixen | you could join #rubyspec and see if jonrafkind is around |
| 18:16:08 | ddub | yeah? |
| 18:16:18 | brixen | he's written a peg lib in scheme and implemented a ruby grammar in ti |
| 18:16:19 | brixen | it |
| 18:17:19 | ddub | I saw the tinyrb pegleg grammar but thats rather incomplete |
| 18:17:27 | ddub | who is jonrafkind? :) |
| 18:17:51 | brixen | some guy at U of Utah that likes grammars |
| 18:18:34 | brixen | also, the principle author of this paper www.cs.utah.edu/~regehr/papers/ismm15-rafkind.pdf |
| 18:25:55 | evan | morning |
| 18:27:02 | brixen | morning |
| 18:31:39 | evan | so, happily the JIT is only making things faster |
| 18:31:41 | evan | not slower |
| 18:31:41 | evan | yay |
| 18:33:53 | scoopr | woo |
| 18:34:36 | scoopr | how would it fare in the language shootout? ;) |
| 18:36:19 | evan | dunno |
| 18:36:23 | evan | give it a try |
| 18:36:40 | evan | it's still not generating the right code in some cases |
| 18:36:47 | evan | ie, the specs don't pass with -Xjit.enabled |
| 18:36:50 | evan | so i'm working on that now. |
| 18:36:53 | brixen | evan: I'll have some numbers running the Hash benches shortly |
| 18:37:01 | evan | 10-4 |
| 18:37:27 | brixen | evan: it took the total time with cuckoo from ~9m6s to 7m4s |
| 18:37:40 | evan | nice! |
| 18:37:46 | brixen | that's just 'time <benchmark command' |
| 18:38:12 | brixen | running against regular hash now, bbiab.. |
| 18:40:04 | evan | ummmm... |
| 18:40:28 | evan | <= confused |
| 18:40:37 | evan | ok, lets try this again... |
| 18:42:41 | evan | boggles. |
| 18:42:43 | evan | wtf is going on... |
| 18:43:16 | evan | oh |
| 18:43:17 | evan | man. |
| 18:43:22 | evan | coffee hasn't kicked in yet. |
| 18:47:52 | scoopr | pours gin + grapelemonade |
| 18:52:17 | rue | Tentacle! |
| 18:52:59 | scoopr | yummie <3 |
| 18:53:35 | rue | Never could stand beer or ciders...but tentacles are alright :) |
| 18:56:43 | scoopr | I was never a beer fan either .. cider goes occasionally (mostly only dry apple).. but oh my.. tentacles! |
| 19:05:33 | dgtized | evan: what's a quick test to make sure the JIT is enabled/ |
| 19:06:17 | evan | -Xjit.show |
| 19:06:23 | evan | will print out messages when it kicks in for methods |
| 19:09:29 | dgtized | hmm, is it doing it on count yet, or is there just a specific call in IRB to get it to JIT a method? |
| 19:09:48 | evan | if you do |
| 19:09:52 | evan | -Xjit.enabled |
| 19:09:55 | evan | it does call counter based |
| 19:10:28 | dgtized | ah which is kicked in by just starting up IRB I see |
| 19:10:39 | evan | right |
| 19:10:47 | evan | just have to run stuff enough times. |
| 19:13:29 | dgtized | can you inspect the list of methods that have been JITed and have it print out there bytecode or something? |
| 19:17:01 | evan | not atm no |
| 19:26:49 | dgtized | my my the jit does love the array_each example |
| 19:36:19 | evan | :D |
| 19:59:52 | cremes | gin + grapefruit juice == lonkero, right? (haven't been to Helsinki for a few years...) |
| 20:00:33 | scoopr | more or less |
| 20:00:40 | scoopr | yes |
| 20:00:49 | cremes | i miss those... :) |
| 20:01:05 | scoopr | (and literal translation of lonkero -> tentacle) |
| 20:01:13 | cremes | ah, it all makes sense now |
| 20:13:54 | dbussink | evan: interested in more gc fun? |
| 20:19:53 | brixen | dbussink: always :) |
| 20:19:55 | brixen | ticket it up |
| 20:23:36 | dbussink | brixen: http://github.com/evanphx/rubinius/issues/#issue/9 |
| 20:33:50 | dgtized | evan: interesting Array#[index] appears to be faster using the JIT, but Array#[index,offset] appears to be slower |
| 20:34:43 | dgtized | evan: that or it's just that example bounces around in how long it takes |
| 20:37:11 | ReinH | 'ello folks |
| 20:37:59 | ddub | brixen: thanks for the pointer earlier. |
| 20:39:16 | brixen | ddub: sure |
| 20:39:18 | brixen | ReinH: hello |
| 21:03:22 | rue | Hello |
| 21:41:24 | rue | Yay Barca |
| 22:12:45 | boyscout | Check the return value of .call for an exception - a47bce2 - Evan Phoenix |
| 22:13:09 | evan | ok, specs pass with -Xjit.enabled |
| 22:13:16 | brixen | nice! |
| 22:13:21 | evan | there are a few thread related crashes i'm going to work on now |
| 22:15:17 | boyscout | CI: a47bce2 success. 2683 files, 10346 examples, 32917 expectations, 0 failures, 0 errors |
| 22:23:17 | dbussink | evan: did you see i have another issue for you? |
| 22:23:23 | evan | nope |
| 22:23:25 | evan | checking now |
| 22:23:29 | evan | i need that GH Issues RSS! |
| 22:23:53 | evan | dbussink: interesting... |
| 22:24:06 | brixen | evan: could boyscout report tickets added? |
| 22:24:48 | dbussink | evan: this is actually without a capi extension or whatever, just pure ruby |
| 22:25:21 | evan | brixen: oooh |
| 22:25:25 | evan | brixen: trixy! |
| 22:25:31 | evan | dbussink: ok. |
| 22:32:27 | evan | dbussink: le sigh |
| 22:32:32 | evan | why is extlib using _id2red? |
| 22:32:35 | evan | _id2ref |
| 22:33:07 | dbussink | evan: some ugly hack afaik create method hooks |
| 22:33:25 | evan | the faster you get rid of that |
| 22:33:30 | evan | the faster extlib will run on rubinius |
| 22:33:34 | dbussink | hehe |
| 22:33:43 | evan | because i can implement _id2ref |
| 22:33:44 | dbussink | well, i'm more concerned with crashes :P |
| 22:33:48 | evan | but you're not going to like the implementation |
| 22:34:00 | evan | ie, i return nil everytime |
| 22:34:11 | evan | or use the GC to search the whole heap for the object you want |
| 22:34:39 | evan | i'm working on the crash now. |
| 22:34:50 | dbussink | evan: yeah, i know, i would want to get rid of it yeah |
| 22:39:45 | dbussink | evan: but i'm going to head to bed, good luck with the nasty stuff i seem to hit :P |
| 22:40:19 | evan | :D |
| 22:40:22 | evan | you're finding good stuff! |
| 22:40:59 | slava | sup evan |
| 22:41:15 | evan | sup |
| 23:58:52 | boyscout | 1.8.7: Enumerable#reverse_each (implemented new method) - 1f9470d - Marc-Andre Lafortune |
| 23:58:52 | boyscout | 1.8.7: Enumerable#to_a (now accepts arguments) - 86ec672 - Marc-Andre Lafortune |
| 23:58:52 | boyscout | 1.8.7: Enumerable#drop (bug fix) - ff156e9 - Marc-Andre Lafortune |