Show enters and exits. Hide enters and exits.
| 00:00:01 | evan | because it was doing the incrementing in C++? |
| 00:00:06 | brixen | yeah |
| 00:00:22 | evan | gotcha |
| 00:00:29 | evan | yeah, i'm more inclided to put pressure on the JIT |
| 00:00:36 | brixen | I'd be happy to remove it |
| 00:00:46 | evan | alright, lets do that then. |
| 00:00:48 | brixen | k |
| 00:00:51 | evan | one less thing to maintain. |
| 00:00:56 | brixen | yep |
| 00:02:02 | brixen | do we have any array looping torture benches? |
| 00:02:17 | brixen | might be cool to do a quick check that the jit is handling those cases well |
| 00:02:30 | evan | i have over time |
| 00:02:35 | evan | i don't think i have them saved |
| 00:02:37 | brixen | k |
| 00:02:48 | brixen | if you're pretty confident, that's good enough for me |
| 00:02:57 | evan | relatively confident |
| 00:03:00 | evan | but try it |
| 00:03:03 | brixen | ok |
| 00:03:12 | evan | i've been wrong before. |
| 00:03:13 | evan | :) |
| 00:03:16 | brixen | heh |
| 00:03:43 | brixen | I'll extract some cases from my use of Iterator |
| 00:04:48 | evan | cool. |
| 00:05:15 | evan | because @tuple is an ivar for Array |
| 00:05:21 | evan | the JIT loves that |
| 00:05:28 | evan | because it's got stuff to make tuple access fast |
| 00:09:42 | brixen | yeah |
| 00:36:49 | boyscout | Handle tuple index boundaries better - 2ce324a - Evan Phoenix (native_int) |
| 00:39:29 | evan | brixen: there ya go. |
| 00:40:24 | brixen | sweet! thanks |
| 05:07:39 | iccodes | evening |
| 05:12:10 | tarcieri | ohai |
| 05:12:16 | tarcieri | I'm writing a virtual machine |
| 05:12:17 | tarcieri | lol |
| 05:12:40 | slava | welcome to the club |
| 05:12:49 | slava | I just found a pretty obscure bug in factor |
| 05:12:53 | tarcieri | hehehe |
| 05:12:59 | tarcieri | slava: you would laugh at mine |
| 05:13:11 | tarcieri | first because the codebase is virtually nonexistent |
| 05:13:11 | slava | on unix, subprocesses inherit the signal mask across an exec |
| 05:13:19 | slava | so factor was setting SIGPIPE to SA_IGN |
| 05:13:22 | tarcieri | oh god @ signal masks ;_; |
| 05:13:23 | tarcieri | say no more |
| 05:13:28 | slava | since we detect closed sockets a different way |
| 05:13:38 | slava | now if you ran a child process with io.launcher and it depended on SIGPIPE... |
| 05:14:30 | tarcieri | slava: whenever I was writing network servers in C the first thing I'd do was ignore sigpipe, heh |
| 05:14:41 | slava | yeah |
| 05:14:45 | slava | its useful for some things |
| 05:14:52 | tarcieri | I'm sure it is |
| 05:14:53 | slava | like if you run 'myscript | head -n 10' |
| 05:15:01 | slava | you want myscript to be killed and exit silently when head closes the fd |
| 05:15:08 | tarcieri | slava: my virtual machine doesn't run on an OS so I don't have to worry about any outside bullshit, yay |
| 05:15:09 | slava | but for network servers, yeah, its pointless |
| 05:17:54 | tarcieri | slava: aren't you the least bit curious what my virtual machine is for? |
| 05:17:54 | tarcieri | :) |
| 05:18:22 | tarcieri | I've never tried to write one before |
| 05:18:34 | tarcieri | I never even considered writing one before! |
| 05:19:00 | slava | what is it for? |
| 05:19:35 | tarcieri | have you ever heard of Core Wars? |
| 05:19:46 | slava | yes |
| 05:20:01 | tarcieri | I'm trying to develop a distributed version of Core Wars suitable for microcontrollers |
| 05:20:08 | slava | tarcieri: http://twitter.com/slava_pestov/status/22862444215 |
| 05:20:10 | tarcieri | embedded on Defcon badges |
| 05:20:10 | slava | cool |
| 05:20:18 | tarcieri | communicating over Zigbee |
| 05:22:10 | tarcieri | so it's a virtual machine for a minimalist set of instructions... with some funky instructions added |
| 05:22:24 | tarcieri | a CPU with multiple program counters |
| 05:22:25 | tarcieri | heh |
| 05:23:01 | tarcieri | and one that functions on a ring buffer |
| 05:26:44 | brixen | vm's are easy, compilers are hard :) |
| 05:27:19 | tarcieri | brixen: yeah I've mainly been writing compilers, but ones that emit the parse tree for another language |
| 05:27:24 | tarcieri | where the languages are Erlang and JavaScript |
| 05:27:40 | tarcieri | this is a really easy VM to write |
| 05:27:44 | tarcieri | I've been testing it with Ruby, too |
| 05:27:45 | tarcieri | heh |
| 05:27:56 | brixen | sounds fun! :) |
| 05:28:00 | tarcieri | it is! |
| 05:28:01 | tarcieri | heh |
| 05:28:11 | tarcieri | I wanted to get it on the official Defcon badge |
| 05:28:18 | tarcieri | but I asked and they don't want to do an electronic badge this year |
| 05:28:18 | tarcieri | wtf |
| 05:28:19 | brixen | I'm tearing out some perf shit I did before our jit was kicking so much ass |
| 05:28:30 | tarcieri | heh |
| 05:28:33 | tarcieri | yay deleting code |
| 05:28:35 | tarcieri | always fun |
| 05:28:45 | brixen | the jit is now > 20% faster than some C++ primitives |
| 05:28:52 | tarcieri | sweet :) |
| 05:29:15 | tarcieri | if my RubyConf talk gets approved you'll certainly be hearing about Rubinius |
| 05:29:24 | brixen | oh?! do tell |
| 05:29:31 | tarcieri | or more specifically about how I missed evan's keynote at RubyConf 2006 |
| 05:30:02 | tarcieri | which was bad and good :)_ |
| 05:30:17 | tarcieri | also: actors |
| 05:30:18 | brixen | ahh, I missed it too :( |
| 05:30:25 | brixen | but heard about it 2 weeks later |
| 05:30:48 | brixen | I hope my RC talk gets accepted |
| 05:30:54 | brixen | it's about Poison |
| 05:31:06 | brixen | which will have no Threads, only Actors |
| 05:31:42 | tarcieri | do tell! |
| 05:31:59 | brixen | heh, it's an interpretation of Potion |
| 05:32:07 | tarcieri | I see! |
| 05:32:14 | brixen | I'm taking some liberties |
| 05:32:23 | brixen | but _why didn't finish it, so I get to do that |
| 05:32:27 | tarcieri | yay! |
| 05:32:42 | brixen | Potion is actually a very nice language so far |
| 05:32:52 | brixen | IMO of course :) |
| 05:32:56 | tarcieri | I never really looked at Potion in depth |
| 05:33:04 | tarcieri | it has prototype-based inheritance? |
| 05:33:05 | brixen | it segfaults a lot heh |
| 05:33:07 | tarcieri | lol |
| 05:33:08 | tarcieri | yay! |
| 05:33:09 | brixen | no, classes |
| 05:33:12 | tarcieri | orly |
| 05:33:12 | tarcieri | noice |
| 05:33:17 | tarcieri | I am a fan of class-based inheritance |
| 05:33:20 | tarcieri | it's so... standard |
| 05:33:22 | brixen | but you could do prototype pretty easy |
| 05:33:26 | tarcieri | and what people are used to |
| 05:33:42 | brixen | there are no class methods, and I think that's a good thing |
| 05:33:47 | brixen | also, everything is a function |
| 05:33:53 | brixen | 1() => 1 |
| 05:34:05 | brixen | some basic values have trivial default functions |
| 05:34:10 | brixen | but it's an interesting idea |
| 05:34:48 | tarcieri | I like class methods |
| 05:35:10 | brixen | I'm not sure if _why didn't implement them, or didn't want to implement them |
| 05:35:16 | brixen | I'm seeing them as quite superfluous atm |
| 05:35:26 | tarcieri | Reia doesn't have them but that's only because I'm lazy |
| 05:35:29 | brixen | I'm on the fence for singleton methods though |
| 05:35:34 | tarcieri | and have too many other projects and I'm all ADD |
| 05:35:44 | brixen | singleton methods imply class methods |
| 05:35:46 | tarcieri | well yeah, talking about singleton methods |
| 05:36:04 | tarcieri | specifically for the purposes of dynamically generating instance methods before the class is "complete" |
| 05:36:11 | tarcieri | which Reia would have a very different sense of than Ruby |
| 05:36:17 | brixen | ahh sure |
| 05:36:25 | tarcieri | built around Erlang-style code change |
| 05:36:43 | brixen | I was considering an immutable version of Poison, like Reia's immutable objects |
| 05:36:49 | tarcieri | yay! |
| 05:36:55 | brixen | it's really a tiny stretch |
| 05:37:11 | brixen | as long as you have good functional features |
| 05:37:13 | tarcieri | brixen: so like, the entire Ruby model of metaprogramming is completely fucking insane in a multithreaded environment |
| 05:37:27 | brixen | heh, yeah |
| 05:37:32 | tarcieri | because other threads can have objects of a class that's dynamically changing |
| 05:37:37 | tarcieri | and possibly "incomplete" |
| 05:37:37 | brixen | yep |
| 05:37:41 | brixen | indeed |
| 05:37:44 | tarcieri | no fucking way in Reia |
| 05:37:45 | tarcieri | heh |
| 05:38:05 | tarcieri | you can dynamically assemble a module/cass |
| 05:38:07 | brixen | but, I'm not sure yet if that's a problem |
| 05:38:08 | tarcieri | class... |
| 05:38:17 | brixen | think of a class as a wait-free DT |
| 05:38:19 | tarcieri | but the incomplete version is local to a particular process |
| 05:38:23 | brixen | implemented as* |
| 05:38:25 | tarcieri | and when it's complete, you send it to the code server |
| 05:38:32 | tarcieri | and then it takes over as the new version |
| 05:38:37 | brixen | if you can't look up a method, you get method_missing |
| 05:38:44 | brixen | we already know how to deal with that in Ruby |
| 05:38:54 | tarcieri | yeah Reia has method_missing too |
| 05:39:14 | brixen | I think class building should be just a part of the environment |
| 05:39:17 | tarcieri | brixen: I think the best strategy in Ruby is to perform all code loading/modification in a single threaded environment, and only after it's all done and complete do you go multithreaded |
| 05:39:24 | tarcieri | brixen: which is very much NOT the approach I want to take in Reia |
| 05:39:47 | brixen | well, you could have incubator enviros, like you describe |
| 05:40:03 | brixen | and fully baked classes get sent to production |
| 05:40:08 | tarcieri | yeah |
| 05:40:13 | brixen | still not sure that distinction is necessary |
| 05:40:17 | tarcieri | well the incomplete class is process-local and gets assembled there |
| 05:40:24 | brixen | especially if you structure things with actors |
| 05:40:29 | tarcieri | and once it's fully assembled, it gets sent to the code server |
| 05:40:33 | tarcieri | which, yes, is a separate actor |
| 05:41:06 | tarcieri | but in the meantime, the rest of the processes aren't working off a half-assembled class that's dynamically changing |
| 05:41:19 | tarcieri | brixen: charlie was talking about using STM to manage this shit in Ruby, heh |
| 05:41:22 | tarcieri | I'm like *headache* |
| 05:41:27 | brixen | hmm |
| 05:41:53 | brixen | yeah, not sure I'd use that approach |
| 05:42:08 | brixen | tarcieri: what scenario do you imagine for complex class creation? |
| 05:42:53 | tarcieri | metaprogramming DSLs, or however you'd describe that |
| 05:43:00 | tarcieri | class/singleton methods that generate instance methods |
| 05:43:04 | brixen | hmm |
| 05:43:41 | tarcieri | has_many, belongs_to, etc |
| 05:43:41 | tarcieri | heh |
| 05:43:47 | brixen | so, one of the things I've been pondering is Traits vs Uses (don't know what to call Uses) |
| 05:43:58 | brixen | ie, Traits are things that on object provides |
| 05:44:17 | tarcieri | what's the difference between a method and a trait? |
| 05:44:18 | brixen | whereas is_a -> inherits, has_a -> composes |
| 05:44:40 | scoopr | def method_missing s, *args ; eval("def #{s} ; #{compute_value(args)} ; end"); end |
| 05:44:50 | brixen | a trait is an object added to an object independent of it's inheritance |
| 05:44:59 | scoopr | I've seen that as "caching" |
| 05:45:04 | brixen | er a method added to an object |
| 05:45:10 | tarcieri | brixen: *boggle* |
| 05:45:12 | tarcieri | o |
| 05:45:18 | tarcieri | scoopr: ohgawd |
| 05:45:28 | iccodes | brixen: hear of anyone getting rubinius working with unicorn? Google is letting me down |
| 05:45:40 | brixen | iccodes: it should, afaik |
| 05:45:46 | tarcieri | I've like... become super opinionated about code mangement in concurrent environments because of Reia |
| 05:45:50 | brixen | iccodes: what kind of failure are you getting? |
| 05:46:00 | brixen | tarcieri: so the idea of Uses is something like a service |
| 05:46:14 | tarcieri | brixen: ! |
| 05:46:17 | tarcieri | sounding very familiar |
| 05:46:18 | tarcieri | but do go no |
| 05:46:20 | tarcieri | errrr |
| 05:46:21 | tarcieri | on |
| 05:46:21 | tarcieri | lol |
| 05:46:31 | iccodes | brixen: just getting started, haven't run into errors |
| 05:46:34 | brixen | tarcieri: canonical example, instance of ActiveRecord *uses* a persistence service rather than inheriting/overriding a #save method |
| 05:46:50 | tarcieri | brixen: brilliant! and exactly what I want to do as well |
| 05:46:53 | iccodes | I did run into errors getting passenger with nginx working but decided to focus on unicorn instead |
| 05:47:03 | tarcieri | brixen: but I want services to be semi-indistinguishable from objects |
| 05:47:08 | brixen | and it's not a cross cutting concern that you'd implement with a Trait or Mixin |
| 05:47:09 | tarcieri | brixen: or rather, I want them to quack like objects |
| 05:47:19 | tarcieri | brixen: except services are concurrent |
| 05:47:35 | tarcieri | that's actually a really good idea |
| 05:47:37 | brixen | tarcieri: yeah, services =~ Actors here |
| 05:47:40 | tarcieri | I wanted the syntax to be "process class" |
| 05:47:45 | tarcieri | but maybe "service" is a better idea |
| 05:47:47 | brixen | hmm |
| 05:47:49 | tarcieri | for an analogue of gen_server |
| 05:47:54 | brixen | process class is interesting too |
| 05:47:57 | tarcieri | that quacks like an object |
| 05:48:00 | brixen | yeah |
| 05:48:12 | tarcieri | that's how *all* objects used to be in Reia |
| 05:48:18 | tarcieri | before like... I was like "that's dumb" |
| 05:48:19 | brixen | iccodes: if you've got repro steps to an error, I can look at it |
| 05:48:26 | tarcieri | need immutable objects too |
| 05:48:46 | iccodes | brixen: thanks, when I feel theres something worth your time I'll let you know |
| 05:48:47 | brixen | tarcieri: yeah, I think inheritance, traits, and "Uses"/services are orthogonal |
| 05:48:54 | tarcieri | yeah totally |
| 05:49:06 | brixen | tarcieri: whereas, most ppl try to implement services as one of the other two |
| 05:49:09 | tarcieri | well Reia's actorobject thingies supported single inheritance |
| 05:49:23 | tarcieri | there's all sorts of complications |
| 05:49:31 | tarcieri | like circular call chains |
| 05:49:34 | tarcieri | result in a deadlock |
| 05:49:35 | tarcieri | BUT |
| 05:49:38 | brixen | iccodes: ok, cool |
| 05:49:39 | tarcieri | a detectable deadlock! |
| 05:49:49 | tarcieri | so you can detect it and crash the whole wring |
| 05:49:51 | tarcieri | err |
| 05:49:53 | tarcieri | whole... ring |
| 05:50:01 | brixen | hm, yeah |
| 05:50:27 | tarcieri | brixen: those kind of nuances are why I want to push all that out to "Reia 2.0" |
| 05:50:36 | tarcieri | if Reia 1.0 ever happens :) |
| 05:50:37 | brixen | sounds good |
| 05:50:41 | brixen | do it! :) |
| 05:50:52 | tarcieri | yeah I'll announce it at RubyConf or something |
| 05:50:56 | tarcieri | 1.0 ready go! |
| 05:50:59 | tarcieri | no wait, maybe 0.1 |
| 05:51:02 | brixen | heh, sweet |
| 05:51:21 | brixen | 0.1 is dyslexic 1.0 :) |
| 05:51:24 | tarcieri | yeah |
| 05:51:26 | tarcieri | I like 0.0 |
| 05:51:30 | brixen | heh |
| 05:52:36 | tarcieri | brixen: so I know I talked to you about this before but do you get the whole idea that Ruby is object oriented Perl? |
| 05:52:54 | tarcieri | provided I get a RubyConf talk accepted I need to make some slides that describe that concept |
| 05:53:25 | tarcieri | people just don't get that and lots of Rubyists get offended |
| 05:53:28 | tarcieri | or something |
| 05:53:32 | tarcieri | maybe they never used Perl |
| 05:53:34 | iccodes | brixen: looks like I didn't get very far. Should I make a github issue? |
| 05:53:50 | brixen | iccodes: sure, with all your platform details and repro steps |
| 05:54:13 | brixen | tarcieri: hm, in my experience, Ruby is much more consistent than Perl |
| 05:54:22 | brixen | tarcieri: but, yes, they are not very far apart |
| 05:54:41 | tarcieri | brixen: well that, when Matz was developing Ruby, Perl was his reference |
| 05:54:53 | tarcieri | brixen: and Matz factored the flat namespace of Perl functions into Ruby classes |
| 05:54:54 | brixen | Ruby has nice OO consistency, a la Smalltalk, and some terrible Perl features |
| 05:54:56 | tarcieri | and they're all there |
| 05:54:59 | brixen | yeah |
| 05:55:02 | brixen | tell me about it |
| 05:55:05 | tarcieri | heh |
| 05:55:13 | tarcieri | yeah a lot of people just... don't get that |
| 05:55:19 | brixen | I've been implementing Array#pack and String#unpack for a month |
| 05:55:20 | tarcieri | but as a Ruby implementer, heh |
| 05:55:23 | tarcieri | yeah |
| 05:55:23 | tarcieri | heh |
| 05:55:28 | tarcieri | with Ragel now, eh? |
| 05:55:29 | brixen | fucking. terrible |
| 05:55:40 | brixen | oh, it's pretty sweet with Ragel |
| 05:55:55 | tarcieri | brixen: did you ever see the shit I did with Mongrel + Ragel + Rubinius? |
| 05:56:00 | brixen | but the Perl versions translated into Ruby == omgwtfseriously |
| 05:56:03 | tarcieri | lol |
| 05:56:09 | brixen | tarcieri: nope, where's that? |
| 05:56:17 | tarcieri | let's see if I can find it again |
| 05:56:29 | brixen | tarcieri: there are literally 4 ways to coerce an object to a String |
| 05:56:33 | brixen | *four* ways |
| 05:56:33 | tarcieri | oh here we go |
| 05:56:35 | tarcieri | http://github.com/evanphx/rubinius/blob/7d246b17efc0ac37db6c241729f6b0e298f49950/lib/mongrel/http1 1_parser.rb.rl |
| 05:56:52 | brixen | ahh this, cool |
| 05:57:03 | tarcieri | brixen: so Adrian Thurston half-ass implemented a Rubinius backend for Ragel without telling anyone or something wtf? |
| 05:57:20 | brixen | I think he was having fun |
| 05:57:26 | brixen | it was an academic project after all |
| 05:57:35 | tarcieri | I alerted evan to it and he submitted a patch which brought it up-to-par with shotgun circa about 2 years ago |
| 05:57:48 | brixen | yeah, I recall |
| 05:57:56 | tarcieri | but yeah... goto-driven FSMs... in Ruby |
| 05:57:59 | tarcieri | pretty spiffy |
| 05:58:02 | brixen | heh yep |
| 05:58:16 | tarcieri | but it's like you may as well use C... FOR SPEED |
| 05:58:23 | brixen | tarcieri: http://github.com/brixen/pegarus |
| 05:58:24 | tarcieri | so I gave up |
| 05:58:33 | iccodes | can rubinius do cow like ree? |
| 05:58:33 | tarcieri | orly |
| 05:58:46 | tarcieri | nice readme |
| 05:58:52 | iccodes | and did I just write cow like ree |
| 05:58:53 | tarcieri | but the concept from the description seems interesting |
| 05:59:06 | brixen | tarcieri: http://github.com/brixen/pegarus/blob/master/lib/pegarus/instructions.rb |
| 05:59:26 | brixen | tarcieri: I'm adding a straight parsing machine in Ruby from LPEG |
| 05:59:31 | tarcieri | brixen: heh... getting far with that? |
| 05:59:33 | tarcieri | :) |
| 05:59:33 | brixen | and the rbx version will be a jit |
| 05:59:38 | tarcieri | that's badass though |
| 05:59:39 | brixen | it's pretty easy |
| 05:59:56 | brixen | iccodes: rbx has a copying garbage collector |
| 06:00:07 | brixen | iccodes: CoW isn't really appropriate |
| 06:00:20 | brixen | iccodes: and work is being done on making rbx fully concurrent |
| 06:00:28 | brixen | so CoW will be... irrelevant |
| 06:00:36 | tarcieri | brixen: it's kind of funny... Ruby traditionally embraces the Unix/Perl heritage of small simple scripts that do one thing and do it well and communicate with text streams |
| 06:00:43 | tarcieri | brixen: and Ruby is trying to grow into a very different role |
| 06:00:45 | iccodes | sounds good to me, just trying to get rbx working with unicorn and its forking |
| 06:00:54 | brixen | iccodes: rbx should fork fine |
| 06:01:23 | brixen | tarcieri: Perl completely ditched the Unix philosophy |
| 06:01:29 | tarcieri | iccodes: Unicorn itself should soon be irrelevant to something like rbx |
| 06:01:30 | brixen | it was an attempt to do *everything* well |
| 06:01:33 | tarcieri | brixen: haha |
| 06:01:40 | tarcieri | brixen: well originally people wrote small Perl scripts |
| 06:01:51 | tarcieri | they'd take text input and spit out text output |
| 06:01:53 | brixen | yeah, they didn't get Larry's vision is all :) |
| 06:02:04 | tarcieri | yeah people tried to write like... Scoop |
| 06:02:05 | tarcieri | and shit |
| 06:02:23 | brixen | I've heard 2 state of the onions now, I think Larry wanted to turn Unix philosophy on its head |
| 06:02:26 | tarcieri | Metasploit |
| 06:02:48 | tarcieri | brixen: Erlang is the Unix philosophy, with a few minor additios and a few major subtractions :) |
| 06:02:57 | brixen | heh |
| 06:03:00 | brixen | like state :) |
| 06:03:04 | tarcieri | nah |
| 06:03:09 | tarcieri | Unix philosophy is shared nothing |
| 06:03:15 | tarcieri | but like... signals |
| 06:03:16 | tarcieri | pipes |
| 06:03:18 | tarcieri | fuck that shit |
| 06:03:36 | brixen | yeah, I see the similarities |
| 06:04:00 | brixen | the problem is when the boundaries are too coarse for the problem domain |
| 06:04:00 | tarcieri | Unix had the fundamentals right, but the actual implementation horribly wrong |
| 06:04:03 | tarcieri | TCP has the same problem |
| 06:04:06 | tarcieri | streams |
| 06:04:10 | tarcieri | instead of messages |
| 06:04:15 | brixen | yeah |
| 06:04:24 | tarcieri | SCTP fixed that, but nobody cares |
| 06:04:41 | iccodes | whats the github markup for wrapping code blocks? My rbx backtrace is looking unhelpful like this. |
| 06:04:50 | brixen | iccodes: use <pre> |
| 06:04:53 | tarcieri | iccodes: with markdown I believe it's <pre><code> |
| 06:05:06 | brixen | you can just use <pre> |
| 06:05:12 | iccodes | done and done |
| 06:05:18 | tarcieri | orly |
| 06:05:20 | iccodes | http://github.com/evanphx/rubinius/issues/issue/454 |
| 06:05:50 | brixen | hmm, haven't see this one yet |
| 06:06:01 | brixen | IllegalSequence... |
| 06:06:03 | iccodes | hope that helps find something with Iconv |
| 06:06:39 | iccodes | back to testing passenger |
| 06:07:04 | brixen | iccodes: you're on the native_int branch? |
| 06:07:18 | tarcieri | brixen: so like yeah uhh do you remember the Joel Spoelsky post about Ruby and JIT stuffins? |
| 06:07:24 | brixen | iccodes: you should be on master |
| 06:07:37 | brixen | tarcieri: nope |
| 06:07:39 | iccodes | I did an rvm install rbx-head |
| 06:07:41 | tarcieri | brixen: http://www.joelonsoftware.com/items/2006/09/12.html |
| 06:07:52 | brixen | iccodes: eeks, really? |
| 06:07:55 | iccodes | yessir |
| 06:07:58 | brixen | hum |
| 06:08:05 | brixen | that's not good |
| 06:08:11 | brixen | for rvm I mean |
| 06:08:31 | brixen | iccodes: would you mind cloning directly? |
| 06:08:33 | tarcieri | brixen: so like at RubyConf 2006 I got all drunk and shit at the open bar which I wasn't technically allowed to drink at cuz it was for people staying at the hotel, but I drank anyway |
| 06:08:40 | tarcieri | brixen: and they had this open question thing with Matz |
| 06:08:44 | tarcieri | brixen: and I brought up ^^^ |
| 06:08:48 | tarcieri | WHY DOESN'T RUBY HAVE A JIT? |
| 06:08:53 | iccodes | I wouldn't mind |
| 06:09:33 | tarcieri | brixen: but I missed evan's keynote |
| 06:09:56 | tarcieri | brixen: and a few days later matz and ko1 etc had the "Denver Accord" or whatever they called it |
| 06:10:02 | tarcieri | to merge yarv into trunk |
| 06:10:24 | brixen | tarcieri: interesting |
| 06:10:25 | tarcieri | http://www.artima.com/forums/flat.jsp?forum=123&thread=181698 |
| 06:10:35 | iccodes | How about an Evan based JIT where it FTPs your ruby code to evan and he converts it into asm and sends it back. Thoughts? |
| 06:10:43 | brixen | tarcieri: so this joel article is typical IME, a bunch of blather |
| 06:10:46 | tarcieri | iccodes: lulz |
| 06:11:04 | tarcieri | brixen: yeah my main takeaway is "ruby is slow cuz it can't jit" |
| 06:11:25 | tarcieri | brixen: this was when I was trying to hack on MRI in C and getting really fucking pissed off |
| 06:11:33 | tarcieri | like OH MY GOD |
| 06:11:35 | tarcieri | THIS IS HORRIBLE |
| 06:11:36 | tarcieri | MY EYES |
| 06:11:40 | tarcieri | THEY ARE BURNING |
| 06:11:43 | brixen | iccodes: you can run rbx directly from the build dir, just clone; ./configure; rake |
| 06:11:43 | tarcieri | THIS CODE IS SO BAD IT BURNS MY EYES |
| 06:11:57 | brixen | tarcieri: yep |
| 06:12:01 | iccodes | k |
| 06:12:08 | tarcieri | brixen: it's also the day I met Zed |
| 06:12:13 | brixen | heh |
| 06:12:18 | brixen | busy day :) |
| 06:12:20 | tarcieri | brixen: like he talked about Mongrel and Utu |
| 06:12:29 | tarcieri | and I talked to him briefly after that |
| 06:12:36 | tarcieri | and got up and, uhh yeah, kind of went off on Matz |
| 06:12:41 | tarcieri | and Zed's like "we should talk more" |
| 06:12:42 | tarcieri | lol |
| 06:12:48 | brixen | heh |
| 06:13:08 | tarcieri | we had also run into the cgi eof bug in production |
| 06:13:19 | tarcieri | which was like... at the time an undisclosed security vulnerability |
| 06:13:23 | tarcieri | and I was talking to him about that |
| 06:13:27 | brixen | well, rbx shows that not only can Ruby be effectively JIT'd, but the payoff is significant |
| 06:13:31 | tarcieri | cuz it was a DoS against any Rails app |
| 06:13:38 | tarcieri | brixen: indeed, yeah like |
| 06:13:58 | tarcieri | had I seen evan's keynote, I probably wouldn't have gotten up and talked to Matz about the deplorable state of how Ruby code was getting executed :) |
| 06:14:06 | brixen | heh |
| 06:14:07 | tarcieri | and then like 2 days later it was "solved" with YARV |
| 06:14:27 | brixen | well, yeah, and that's why the night I read about rbx I started contributing |
| 06:14:29 | brixen | pretty much |
| 06:14:36 | tarcieri | and IronRuby a.k.a. whatever it was called at the time, there was a talk on that too and a release announcement |
| 06:14:38 | brixen | I had tried to work on YARV |
| 06:14:46 | tarcieri | well I did a ton of shit with YARV |
| 06:14:48 | tarcieri | and nobody cared |
| 06:15:06 | tarcieri | and now people are starting to care and igrigorik is starting to do shit half as cool as what I did |
| 06:15:12 | tarcieri | and people are like OMFG I CAN WRITE NODE IN RAILS |
| 06:15:16 | brixen | heh |
| 06:15:45 | iccodes | why did they have to call it node? |
| 06:15:50 | tarcieri | they? |
| 06:15:50 | brixen | the achilles heel of good tech... marketing |
| 06:15:51 | tarcieri | ry? |
| 06:15:57 | iccodes | yes |
| 06:16:02 | tarcieri | not like my names are much better |
| 06:16:04 | tarcieri | rev? |
| 06:16:04 | tarcieri | heh |
| 06:16:06 | iccodes | how many nodes do you run node on? wtf |
| 06:16:07 | brixen | heh |
| 06:16:07 | tarcieri | ungooglable! |
| 06:16:41 | tarcieri | I talked with ry quite a bit when he was working on ebb |
| 06:16:45 | brixen | googles going down anyway, check if it Bings :) |
| 06:16:45 | tarcieri | he gave me some pointers on rev |
| 06:16:46 | iccodes | thats what is great about rubinius. It compiles down to rbx but is still googlable before it gets JITed. |
| 06:16:53 | tarcieri | haha |
| 06:17:18 | tarcieri | specs out an opcode that does nothing |
| 06:17:19 | tarcieri | lol |
| 06:17:23 | tarcieri | actually it does something |
| 06:17:36 | tarcieri | it kills a process, which means it increments a pointer |
| 06:17:37 | brixen | every insn set needs a no-op! |
| 06:17:46 | brixen | oh, that's a lot of something |
| 06:17:50 | tarcieri | brixen: unknown instructions in core wars are noops |
| 06:17:54 | iccodes | maybe rev was short for something? Revolution etc. |
| 06:17:54 | tarcieri | but there's an explicit noop |
| 06:17:56 | brixen | ahh nice |
| 06:18:14 | tarcieri | brixen: it's a great way to support "secret" instructions |
| 06:18:25 | tarcieri | brixen: maybe the instruction was a noop or maybe it actually did something! |
| 06:18:27 | iccodes | do I need to specify where llvm is or does rubinius pick that up now? |
| 06:18:36 | brixen | it should pick it up |
| 06:18:52 | tarcieri | iccodes: I didn't even name Rev |
| 06:18:52 | brixen | configure has some smarts about it |
| 06:19:06 | iccodes | oh |
| 06:19:15 | tarcieri | iccodes: this weird indian guy who could barely speak English was the one who was all pushing for it and named it |
| 06:19:21 | iccodes | it downloaded its own llvm |
| 06:19:26 | tarcieri | write the initial code and disappeared |
| 06:19:28 | brixen | I can't believe rvm install rbx-head picked up native_int branch |
| 06:19:41 | tarcieri | brixen: lol |
| 06:19:50 | brixen | iccodes: yeah, we have pre-builts for some platforms |
| 06:19:50 | tarcieri | works with like... released versions and shit |
| 06:19:53 | tarcieri | even if they have bugs :) |
| 06:19:54 | iccodes | brixen: I was about to go bitch to wayne but I'd like to get something that works first |
| 06:20:14 | brixen | iccodes: indeed, checking the direct clone is a good first step |
| 06:20:18 | tarcieri | since 1.0.1 I've only seen one random-seeming segfault |
| 06:21:18 | iccodes | my girlfriend sent me a picture of food she made, how does she know I'm doing hunger inducing sysadmin work? |
| 06:21:31 | brixen | iccodes: they are mind readers :) |
| 06:21:36 | tarcieri | perhaps she doesn't... hence the problem |
| 06:21:39 | brixen | heh |
| 06:21:48 | iccodes | well it is only a picture |
| 06:21:59 | iccodes | I'll eat my phone if I have to but that seems excessive |
| 06:23:46 | brixen | I love deleting code |
| 06:23:48 | iccodes | Now that rbx has reached 1.0 I think its time for it to be redone in Go. This is taking so long to compile and I heard Go fixes that. See you in 2 years for 1.1. K thanks |
| 06:24:01 | brixen | heh |
| 06:24:14 | dwaite | seconded! |
| 06:24:20 | brixen | Go isn't really an appropriate language to write a language that needs a GC |
| 06:24:29 | brixen | however, evan is working on a real language we could use |
| 06:24:39 | tarcieri | brixen: haha nice |
| 06:24:49 | tarcieri | brixen: dude like... scientists need a new programming language |
| 06:24:53 | iccodes | mirah? Charles would never let him hear the end of it |
| 06:24:59 | tarcieri | and like Python + SciPy kinda fills that role |
| 06:25:08 | tarcieri | but like someone needs to fucking kill Fortran |
| 06:25:11 | brixen | iccodes: nah, different than Mirah, whatever that is :) |
| 06:25:13 | tarcieri | what a horrible fucking language |
| 06:25:17 | iccodes | heh |
| 06:25:18 | brixen | tarcieri: indeed |
| 06:25:30 | tarcieri | I supported Fortran forever |
| 06:25:31 | brixen | Mirah is like a limp handshake |
| 06:25:37 | tarcieri | where forever = 5 years |
| 06:25:39 | tarcieri | but like |
| 06:25:41 | tarcieri | ugggggghhhhh |
| 06:25:44 | brixen | doesn't quite know which way it wants to go |
| 06:25:44 | tarcieri | Mirah is badass |
| 06:25:45 | iccodes | oddly erotic? |
| 06:25:51 | tarcieri | but yeah |
| 06:25:52 | brixen | iccodes: indeed |
| 06:25:58 | iccodes | lol |
| 06:26:03 | tarcieri | I wish Charlie would stick to targeting the JVM with it |
| 06:26:04 | brixen | tarcieri: it started out as a jvm thing, now it might be... anything? |
| 06:26:09 | tarcieri | instead of trying to make it more abstract |
| 06:26:13 | brixen | yeah |
| 06:26:17 | dwaite | obviously |
| 06:26:21 | iccodes | I forgot how much fun |
| 06:26:22 | tarcieri | cuz like |
| 06:26:25 | iccodes | #rubinius is |
| 06:26:26 | tarcieri | it needs GC |
| 06:26:35 | tarcieri | so where else are you going to use it? |
| 06:26:43 | tarcieri | rbx I guess :) |
| 06:26:43 | dwaite | what you need to do is convince the fortran guys to replace their code with http://www.netcobol.com/products/Fujitsu-NetCOBOL-for-.NET/overview |
| 06:26:56 | tarcieri | but you have a dynamic language-oriented VM |
| 06:26:57 | tarcieri | so |
| 06:26:59 | tarcieri | yeah |
| 06:27:02 | brixen | iccodes: I have a hobby project to target Go to the rbx vm :) |
| 06:27:07 | iccodes | brixen: rake aborted! |
| 06:27:08 | iccodes | uninitialized constant Rubinius::Compiler |
| 06:27:10 | brixen | since Go uses a (shitty) GC |
| 06:27:11 | dwaite | brixen: I think you could write in Go, but would want to use Go's VM |
| 06:27:19 | dwaite | err, GC |
| 06:27:22 | dwaite | (tired here) |
| 06:27:22 | tarcieri | brixen: "we'll fix the GC later!" (famous last words) |
| 06:27:28 | brixen | tarcieri: indeed |
| 06:27:35 | brixen | iccodes: gist me |
| 06:27:38 | iccodes | k |
| 06:27:38 | tarcieri | brixen: go needs exceptions |
| 06:28:03 | dwaite | yeah mono showed me how bad an idea it is to say 'we'll fix GC later' |
| 06:28:09 | brixen | tarcieri: evan added call_custom insn, so the compiler can emit static calls |
| 06:28:10 | dwaite | unless you are also planning a rewrite later |
| 06:28:16 | dwaite | its kinda more difficult than that |
| 06:28:18 | tarcieri | brixen: that's cool |
| 06:28:22 | brixen | tarcieri: everything else is details |
| 06:28:24 | iccodes | http://gist.github.com/563506 |
| 06:28:40 | tarcieri | brixen: but seriously my only interest in Mirah is writing the performance-critical components of an application for the JVM |
| 06:28:45 | tarcieri | brixen: for which Mirah is AWESOME |
| 06:28:51 | brixen | iccodes: erm |
| 06:28:56 | brixen | iccodes: that was with rake? |
| 06:29:04 | iccodes | yep |
| 06:29:15 | iccodes | want me to run it with --trace? |
| 06:29:24 | tarcieri | brixen: I know Charlie has higher aspirations but... how? |
| 06:29:27 | brixen | iccodes: sure |
| 06:29:36 | tarcieri | brixen: LLVM + some GC? |
| 06:29:49 | brixen | tarcieri: for? |
| 06:30:04 | tarcieri | I dunno, running Mirah without the JVM? |
| 06:30:11 | brixen | oh, yeah I guess |
| 06:30:13 | brixen | or just LLVM |
| 06:30:20 | brixen | a good type system is hard |
| 06:30:22 | tarcieri | but Mirah is garbage collected |
| 06:30:23 | iccodes | http://gist.github.com/563507 |
| 06:30:30 | brixen | from what I've read, Mirah ain't there yet ;) |
| 06:30:42 | tarcieri | I haven't tried to use it |
| 06:30:51 | brixen | iccodes: ugh |
| 06:31:10 | brixen | iccodes: you're trying to compile rbx with the rbx you're building I think |
| 06:31:15 | brixen | iccodes: rvm reset |
| 06:31:18 | brixen | then try rake again |
| 06:31:44 | brixen | rvm is so ambitious |
| 06:31:52 | brixen | and painful :) |
| 06:32:16 | iccodes | ah |
| 06:32:20 | iccodes | that makes some sense |
| 06:32:24 | tarcieri | rvm is my friend until it horks and fucks itself |
| 06:32:50 | tarcieri | it's mostly upgrading that's been a bit |
| 06:32:51 | tarcieri | +ch |
| 06:33:15 | brixen | well, rbx requires a bootstrap impl to build |
| 06:33:25 | brixen | ie, you have to build it with a fully functional ruby impl |
| 06:33:28 | iccodes | the whole gemset thing has been great, wish bundler came out 2 years ago |
| 06:33:46 | brixen | I should make the build system try to detect building with itself |
| 06:34:03 | iccodes | I've been in rake:install circular dependency hell for years. RAILS! |
| 06:36:07 | brixen | hi ezmobius! |
| 06:36:46 | ezmobius | yola |
| 06:36:48 | ezmobius | ready to grab lunch next week sometime? |
| 06:36:51 | tarcieri | haha |
| 06:36:53 | tarcieri | ohai |
| 06:36:57 | brixen | ezmobius: yep! |
| 06:36:59 | ezmobius | you're still in portland yes? |
| 06:37:07 | brixen | ezmobius: I'm in socal right now training with my uncle |
| 06:37:08 | ezmobius | yaya |
| 06:37:13 | ezmobius | ahh |
| 06:37:13 | brixen | ezmobius: driving back on monday |
| 06:37:19 | ezmobius | cool |
| 06:37:27 | ezmobius | im leaving sf on sunday |
| 06:37:27 | iccodes | brixen: what part of socal? |
| 06:37:39 | brixen | ezmobius: cool, have a safe drive |
| 06:37:45 | brixen | ezmobius: bummer about the car :( |
| 06:37:45 | ezmobius | but i have a wife, a 7 month old baby and two pugs so its going to be a long drive |
| 06:37:53 | brixen | heh, yeah, take your time |
| 06:38:05 | ezmobius | especially since the old pug is incontinennt and likes to crap without realizing it |
| 06:38:07 | brixen | ezmobius: also, speed limit in oregon is 65 max |
| 06:38:13 | brixen | ezmobius: don't even think about going 80 |
| 06:38:17 | ezmobius | i got my truck back today |
| 06:38:19 | brixen | they'll haul you to jail |
| 06:38:20 | iccodes | ezmobius: best of luck |
| 06:38:20 | ezmobius | its so nice |
| 06:38:26 | ezmobius | nicer then i remember |
| 06:38:38 | brixen | iccodes: escondido, san marcos |
| 06:38:43 | ezmobius | i only got to drive it fro 6 days before it was in the shop for 35 days |
| 06:38:48 | ezmobius | thx |
| 06:39:37 | ezmobius | in their favor the body shop paid $750 out of %1500 deductables |
| 06:39:42 | ezmobius | for being so late |
| 06:39:45 | brixen | oh nice |
| 06:39:52 | brixen | 35 days is a loong time |
| 06:39:55 | iccodes | brixen: you're a bit too far south for a hang out |
| 06:40:06 | brixen | iccodes: where are you at? |
| 06:40:09 | iccodes | LA |
| 06:40:11 | ezmobius | yeah no joke |
| 06:40:16 | brixen | iccodes: ahh yeah |
| 06:40:17 | ezmobius | and it was just body work |
| 06:40:23 | ezmobius | no engine or tranny or anything |
| 06:40:31 | brixen | iccodes: I was at RB.LA last week |
| 06:40:35 | brixen | iccodes: you should go |
| 06:40:40 | iccodes | but I'm actually thinking about a portland trip in a few weeks |
| 06:40:44 | iccodes | I'm going to the meetup on the 9th |
| 06:40:49 | iccodes | you going to be there? |
| 06:40:49 | brixen | cool |
| 06:41:05 | brixen | iccodes: oh, rb.la is on tues |
| 06:41:10 | brixen | it's a hack night |
| 06:41:14 | brixen | a la seattle,rb |
| 06:41:17 | brixen | er s/,/./ |
| 06:41:25 | iccodes | right |
| 06:41:45 | brixen | tues is the 7th :) |
| 06:41:51 | brixen | I'll be in oregon |
| 06:41:52 | iccodes | I'd go if I didn't feel I would be getting in the way of the hacking |
| 06:42:00 | brixen | heh |
| 06:42:05 | brixen | how does that work? |
| 06:42:21 | iccodes | I sit there and talk to you guys while you try to do cool stuff |
| 06:42:30 | brixen | ahh, it's all good |
| 06:42:46 | brixen | the ones who want to talk, talk, the rest code :) |
| 06:42:48 | ezmobius | looking at this house to buy http://www.rmlsweb.com/v2/public/PhotoViewer.asp?CRPT2=IXgUGzBIMaXZZBXpTAVNDNhxycXIhdSwPL3wAMh4CbA zDzDouiPtUnpYiyBWaBlqp3XbQzDzDdgh |
| 06:43:09 | brixen | ezmobius: beautiful! |
| 06:43:20 | iccodes | ezmobius: would you be up for lunch if I go up there? Sweet house |
| 06:43:31 | ezmobius | has one of those little pools with the current in it so you can swim against the current |
| 06:43:43 | tarcieri | ezmobius: noice |
| 06:43:45 | ezmobius | iccodes yeah for sure |
| 06:43:50 | iccodes | the open kitchen is hawt |
| 06:43:51 | tarcieri | gawd buying a house lol |
| 06:43:56 | tarcieri | I just bought one |
| 06:44:05 | tarcieri | finally moving into it tomorrow |
| 06:44:23 | ezmobius | that gouse would be $2mill in SF but its only $429 in portland |
| 06:44:31 | tarcieri | yeah heh |
| 06:44:36 | brixen | tarcieri: congrats! |
| 06:44:37 | tarcieri | dealing with Boulder vs. Denver |
| 06:44:55 | tarcieri | the house I bought in Boulder for like $350k would be worth $1mil+ in Boulder |
| 06:44:57 | tarcieri | brixen: thanks |
| 06:45:01 | tarcieri | err |
| 06:45:12 | ezmobius | im looking forward to buildign a glassblowing studio in the house i buy |
| 06:45:12 | tarcieri | s/Denver/Boulder/ (one time substitution for the first match!) |
| 06:45:18 | tarcieri | ezmobius: hell yeah |
| 06:45:20 | ezmobius | anyone want to learn how to blow glass? |
| 06:45:26 | iccodes | ezmobius: sign me up |
| 06:45:30 | tarcieri | just wants a hack room where he can work on various electronics-related projects |
| 06:45:30 | ezmobius | its soo fun |
| 06:45:31 | brixen | ezmobius: I'd love to |
| 06:45:36 | iccodes | I need a new career |
| 06:45:44 | tarcieri | ezmobius: I would like to but I'm more into surface-mount soldering atm :) |
| 06:45:52 | iccodes | Its time for my 3rd career anyway |
| 06:45:57 | iccodes | a new one ever 7 years right |
| 06:46:08 | brixen | sure, why not |
| 06:46:18 | tarcieri | ezmobius: that's a badass looking house though |
| 06:46:33 | iccodes | ezmobius: how hot does it get while blowing the glass? |
| 06:46:37 | ezmobius | yeah and theres tons of others just as nice in portland |
| 06:46:44 | tarcieri | I just bought one with a horrible ass web site I don't even want to link but: 122ellsworth.com |
| 06:47:00 | tarcieri | I suggest turning down your volume before visiting |
| 06:47:38 | ezmobius | theres 2 types of glassblowing. there is lampworking where you have a torch at a workbench with ventilation and you take cold tubes and rods of glasss and heat them up to shape them. beadmaking, marble making, goblets etc. |
| 06:47:44 | iccodes | tarcieri: does that woman come with the house? |
| 06:47:51 | tarcieri | iccodes: lol |
| 06:48:07 | ezmobius | then there is soft glass with the big furnace full of molten glass and 5 foot metal tubes you pull it out with |
| 06:48:18 | ezmobius | soft glass studios are more expensive and way hotter to work in |
| 06:48:18 | iccodes | ezmobius: so I could make a series of tubes maybe? Oh the irony |
| 06:48:29 | ezmobius | im building a lampworking studio at my house |
| 06:48:41 | ezmobius | ive built a hot shop though in bellingham in the 90's |
| 06:49:06 | ezmobius | i ran an 18k sq/ft glassblowing studio/school up there for like 7 years |
| 06:49:17 | tarcieri | awesome |
| 06:49:23 | tarcieri | what else do you make besides lamps |
| 06:49:23 | tarcieri | heh |
| 06:49:36 | ezmobius | you can make any 3 demensional shape you can think of if you are patient enough |
| 06:49:40 | ezmobius | and have the skills |
| 06:49:53 | tarcieri | but I can do that with a rapid prototyper! |
| 06:50:03 | ezmobius | i like to make marbles and paperweights with a stumpsucker |
| 06:50:04 | brixen | ezmobius: you'll have to come to the dorkbot meetups |
| 06:50:18 | brixen | ezmobius: more electronics, but allso some 3d fab stuff |
| 06:50:27 | brixen | cross-polination :) |
| 06:50:39 | ezmobius | you have this block of carbon thats like 8" cubed and you bore a cylynder all the way though the middle of it |
| 06:50:42 | brixen | put an IC in your lamps :) |
| 06:51:03 | ezmobius | then you put like a metal air hickey table type thing underneath it attached to a vacuum cleaner |
| 06:51:28 | iccodes | ezmobius: ruby controlled arduino that makes glass shaped rubies. It turtles all the way down. |
| 06:51:36 | brixen | heh |
| 06:51:46 | ezmobius | then you make glass scultupres of whatever you want like sea life etc. you put it in the bored out hole. gather up a blob of glass and drip it over the top while you turn on the vaccuum |
| 06:52:06 | ezmobius | it sucks all the air bubles out of it and you end up with your sculpture ecased in clear glass |
| 06:52:09 | ezmobius | its awesome |
| 06:52:25 | ezmobius | totally |
| 06:52:59 | brixen | iccodes: did your build work? |
| 06:53:25 | iccodes | brixen: I totally forgot about it, getting entranced by all this talk of craftsmanship |
| 06:53:30 | brixen | hehe |
| 06:53:40 | brixen | well, I'm going to be entranced by sleep soon |
| 06:53:46 | brixen | so if you could check... :) |
| 06:54:03 | iccodes | rubinius 1.0.1 (1.8.7 2ce324ae 2010-06-03 JI) [i686-pc-linux-gnu] |
| 06:54:10 | iccodes | it build it |
| 06:54:27 | iccodes | but I'm getting the same version as the one built with rvm |
| 06:54:31 | iccodes | rubinius 1.0.1 (1.8.7 2ce324ae 2010-06-03 JI) [i686-pc-linux-gnu] |
| 06:54:36 | brixen | erm |
| 06:54:39 | brixen | wth... |
| 06:55:21 | brixen | I'm so confused... |
| 06:55:53 | iccodes | sleep on it, I'm in no rush |
| 06:56:08 | brixen | iccodes: could you gist me: ruby -v; cd rubinius; git branch; git log -1 |
| 06:56:20 | brixen | oops, and ./configure --show |
| 06:57:34 | iccodes | http://gist.github.com/563531 |
| 06:58:00 | iccodes | tarcieri: nice house, I'd cook a nice dinner in there |
| 06:58:31 | tarcieri | yeah the kitchen is dope |
| 06:58:37 | dwaite | brixen, re: history of windows programming revolutions, ole and mfc were probably the two worst things they ever made |
| 06:58:50 | iccodes | the music on the website is doing a weird remix with the mass effect 2 soundtrack I have going in the bg |
| 06:59:04 | tarcieri | iccodes: haha I can't stand that shit |
| 06:59:13 | tarcieri | dwaite: yeah leave it to Apple to make d'ole |
| 06:59:16 | tarcieri | err |
| 06:59:18 | tarcieri | NeXT |
| 06:59:19 | tarcieri | but yeah |
| 06:59:27 | tarcieri | STEVE JOBS |
| 06:59:30 | tarcieri | is both |
| 07:00:56 | dwaite | err? |
| 07:01:02 | brixen | iccodes: erg, well that's what rev git rev-list reports |
| 07:01:22 | brixen | iccodes: so seems like rvm was build rbx-head correctly |
| 07:01:34 | brixen | iccodes: I'll try to repro tomorrow |
| 07:02:22 | iccodes | brixen: you rule and if you need anything else really really hesitate to ask |
| 07:02:45 | brixen | iccodes: cool, thanks for double checking for me |
| 07:02:53 | iccodes | np |
| 07:03:15 | iccodes | "To Rubinius and Beyond!" |
| 07:03:19 | brixen | heh |
| 07:04:15 | brixen | iccodes: could you add your setup steps to the ticket, please |
| 07:04:25 | brixen | ie what rails version, etc |
| 07:06:09 | tarcieri | USE THE FORMAT |
| 07:07:21 | iccodes | brixen: done with a twist |
| 07:08:58 | brixen | iccodes: sweet, thanks |
| 07:09:33 | iccodes | tarcieri: were you talking to me about the format? |
| 07:09:42 | tarcieri | lol sorry |
| 07:10:00 | tarcieri | I just got bombarded with that myself |
| 07:10:29 | tarcieri | http://github.com/carlhuda/bundler/issues#issue/634/comment/386566 |
| 07:10:58 | tarcieri | kinda like fuck your metadata, I'll figure it out myself |
| 07:11:01 | tarcieri | infinite weirdness |
| 07:12:59 | iccodes | tarcieri: no problema |
| 07:13:04 | tarcieri | heh |
| 16:02:16 | brixen | evan: seen? http://code.google.com/p/picoc/ |
| 16:07:59 | rue | brixen: 'Cause C is popular because of its expressiveness? |
| 16:09:35 | brixen | um... I think so? :) |
| 16:25:11 | dbussink | evening |
| 16:25:26 | brixen | dbussink: howdy |
| 16:25:31 | dbussink | we're starting to look like belgium with our government formation :P |
| 16:26:19 | brixen | is that a good or bad thing? |
| 16:26:27 | dbussink | hehe, a bad thing i guess |
| 16:26:39 | dbussink | although i'm not sad this coalition blew up |
| 16:27:06 | dbussink | elections where in june, second attempt of forming a coalition blew up now |
| 16:27:42 | brixen | dbussink: count your blessings :P http://www.youtube.com/watch?v=ht8PmEjxUfg |
| 16:28:01 | brixen | you could be living here with incredibly ignorant people |
| 16:28:12 | dbussink | brixen: one of the parties in the attempted coalition has similar followers |
| 16:28:33 | brixen | unsurprising |
| 16:28:40 | dbussink | although these ralliers probably are even more retarded :P |
| 16:28:41 | brixen | you probably have far fewer though |
| 16:29:22 | dbussink | looking at how big the republican party still is, we must have yeah :P |
| 16:30:41 | dbussink | brixen: i've never met americans like these though |
| 16:30:55 | brixen | dbussink: count yourself very lucky |
| 16:31:10 | dbussink | only been at the coasts though :P |
| 16:31:35 | brixen | well, I'm just inland about 30 min in so cal atm, and I seem to be in a town full of them |
| 16:32:33 | dbussink | brixen: so cal? |
| 16:33:18 | rue | Southern California |
| 16:33:19 | brixen | southern califoria |
| 16:33:27 | brixen | yeah +n |
| 16:35:32 | dbussink | brixen: maybe i have some inate ability to avoid them :P |
| 16:36:16 | brixen | dbussink: if you could put that in a bottle so we could crop spray the u.s. that'd be great :) |
| 16:36:26 | dbussink | brixen: i can send you some perhaps then |
| 16:36:33 | brixen | heh |
| 16:36:50 | dbussink | just split the usa in a coastal country and the middle |
| 16:37:38 | brixen | some of middle america is educated and informed |
| 16:38:28 | dbussink | i'm just overly generalizing :P |
| 16:38:41 | brixen | heh, yeah |
| 16:39:27 | dbussink | just as you think you're down to one issue, they keep popping up :) |
| 16:39:33 | dbussink | on a more related note btw :P |
| 16:42:04 | evan | I see that people decided to test their code under rbx today! |
| 16:42:13 | evan | lots of new tickets |
| 16:42:16 | evan | most of them easy too |
| 16:42:16 | evan | yay |
| 16:42:51 | dbussink | usually people only start testing stuff after a release :) |
| 16:42:57 | dbussink | so that's a good thing yeah :) |
| 16:43:04 | evan | yeah |
| 16:43:19 | dbussink | evan: did you guys manage to finish the int usage audit? |
| 16:43:29 | evan | we were last night |
| 16:43:33 | evan | brixen was finishing it up |
| 16:44:08 | evan | oh man, we got a bug report about masgn not returning an array... |
| 16:44:38 | dbussink | evan: and you were talking about easy ;) |
| 16:44:46 | evan | well that one can be easy |
| 16:44:52 | dbussink | he does admit this was a dubious find |
| 16:44:54 | evan | i can just say "yep! we don't support it returning an array" |
| 16:44:55 | evan | :) |
| 16:46:21 | evan | hm, you know |
| 16:46:40 | evan | i could probably detect when the return value isn't used... |
| 16:48:52 | brixen | I'm benchmarking / removing Array::Iterator atm |
| 16:49:31 | evan | coolness |
| 16:49:40 | brixen | evan: when we inline a block like using Array#each, is the block overhead completely optimized away? |
| 16:49:53 | evan | when we inline the block, yes. |
| 16:49:57 | brixen | k |
| 16:50:02 | evan | that optz still isn't on by default though. |
| 16:50:06 | brixen | hmm |
| 16:50:19 | brixen | I'd sure like to use Array#each in a lot of these methods |
| 16:50:36 | brixen | rather than littering the significant logic all over |
| 16:50:46 | evan | well, use it and benchmark it |
| 16:50:48 | brixen | ie, start, start + total, i < total, i+= 1 |
| 16:50:56 | brixen | yeah, that's what I'm doing |
| 16:50:59 | evan | remember when I found that a block was faster than the Hash::Iterator thing |
| 16:51:09 | evan | we can create blocks fast fast |
| 16:51:13 | brixen | cool |
| 16:51:23 | evan | and invoking them isn't too slow |
| 16:51:46 | evan | totally agree about the iteration logic. |
| 16:51:53 | evan | would be nice to not litter it around. |
| 16:51:57 | evan | thats just a bug waiting to happen. |
| 16:52:00 | brixen | yes |
| 16:52:16 | brixen | and most of the uses of #each would have really simple blocks |
| 16:52:27 | brixen | that actually don't have any vars that escape the method scope |
| 16:52:43 | brixen | seems like they could be optimized away completely |
| 16:52:46 | evan | i was talking with yehuda a couple days ago |
| 16:52:54 | evan | i should add some more conditions to block inlining |
| 16:53:04 | evan | so that we can turn it on by default and not worry about the weird blocks |
| 16:53:31 | brixen | that would be cool, yes |
| 16:53:42 | evan | ok, i'll take a look at that this morning |
| 16:53:47 | brixen | awesome! |
| 16:53:49 | brixen | thanks! |
| 16:53:52 | evan | i'm a little wary of doing it so late in the game release wise |
| 16:53:56 | evan | so we'll see. |
| 16:53:58 | brixen | ok |
| 17:08:53 | boyscout | Add more docs for the Debugger and Debugger APIs - a07bdb3 - Evan Phoenix |
| 17:18:46 | boyscout | CI: rubinius: a07bdb3 successful: 3522 files, 15318 examples, 43186 expectations, 0 failures, 0 errors |
| 17:39:58 | dbussink | evan: btw, what was that security issue some time ago someone mailed you about? |
| 17:40:04 | evan | oh yeah! |
| 17:40:07 | evan | thanks for reminding me. |
| 17:40:25 | dbussink | we could set up something like security@rubini.us perhaps |
| 17:41:01 | evan | this is it: http://www.ruby-lang.org/en/news/2010/08/16/xss-in-webrick-cve-2010-0541/ |
| 17:41:32 | evan | it's a one line change |
| 17:41:40 | evan | - @header['content-type'] = "text/html" |
| 17:41:40 | evan | + @header['content-type'] = "text/html; charset=ISO-8859-1" |
| 17:41:48 | evan | i'll apply it now. |
| 17:42:38 | evan | i don't see why thats the fix |
| 17:42:40 | evan | but i trust them. |
| 17:42:42 | brixen | evan: I'm also removing this "too big for long" nonsense in Array#fill |
| 17:42:51 | evan | vunderful! |
| 17:46:25 | dbussink | wunderbar! |
| 18:01:18 | evan | ok, specs run fine with block inlining on |
| 18:01:23 | evan | i added a few more restrictions |
| 18:01:28 | evan | perhaps I should just push this |
| 18:01:36 | evan | and we can hammer in next week before release |
| 18:01:39 | evan | you guys fine with that? |
| 18:02:18 | dbussink | cool, i can run some stuff |
| 18:02:25 | evan | ok |
| 18:02:29 | evan | lets do it. |
| 18:03:39 | evan | boom. |
| 18:03:51 | boyscout | Increase restrictions on block inlining, enable it by default - f997d3f - Evan Phoenix |
| 18:04:39 | evan | ok, hammer on that please! |
| 18:05:00 | evan | the new restrictions are |
| 18:05:13 | evan | 1) no yielding from inlined an inlined block |
| 18:05:26 | evan | 2) no testing if there is a block inside an inlined block |
| 18:05:34 | evan | 2) no exception handlers in an inlined block |
| 18:05:52 | dbussink | evan: as in, it doesn't inlinein those cases? |
| 18:05:57 | evan | yep |
| 18:06:02 | evan | if it sees a block doing any of those hings |
| 18:06:03 | evan | things |
| 18:06:06 | evan | it won't inline it. |
| 18:06:16 | evan | the idea is to get it solid inlining simple blocks |
| 18:06:19 | evan | and work up from there. |
| 18:07:11 | brixen | hm, the yielding from an inlined block will prevent a lot of my cases here |
| 18:09:31 | evan | you're doing "each { |x| yield x }" a bunch? |
| 18:09:45 | evan | we could probably get that working |
| 18:09:51 | evan | let me audit that code now |
| 18:10:01 | evan | i disallowed it because i wasn't sure of the logic |
| 18:10:05 | evan | i need to go over it again |
| 18:10:07 | brixen | well, not a bunch |
| 18:10:13 | brixen | but yes, in a few places |
| 18:10:17 | evan | let me take a peek |
| 18:10:23 | evan | that has actually worked in the past |
| 18:10:27 | brixen | k |
| 18:10:28 | evan | i disallowed it to be conservative. |
| 18:10:31 | brixen | sure |
| 18:15:04 | boyscout | CI: rubinius: f997d3f successful: 3522 files, 15318 examples, 43186 expectations, 0 failures, 0 errors |
| 19:03:20 | brixen | evan: almost got all of Iterator torn out |
| 19:03:25 | evan | cool. |
| 19:03:34 | brixen | I'm grabbing some lunch and then I'll work on getting it merged in |
| 19:03:42 | brixen | still need to run some sanity benchmarks |
| 19:03:44 | evan | sounds good. |
| 19:53:13 | boyscout | Allow yield_stack to be used in an inlined block - d5723c7 - Evan Phoenix |
| 20:03:06 | boyscout | CI: rubinius: d5723c7 successful: 3522 files, 15318 examples, 43186 expectations, 0 failures, 0 errors |
| 20:09:03 | kstephens | Is there a way to run mspec on a single file without having rake install rubinius? |
| 20:18:11 | brixen | yes |
| 20:18:17 | brixen | bin/mspec path/to/file |
| 20:18:29 | brixen | rbx runs fine from the build dir |
| 21:04:12 | brixen | well, that's ironic |
| 21:04:35 | brixen | all the array specs pass, but rbx has some serious array bugs from ripping out Iterator |
| 21:04:42 | brixen | le sigh |
| 21:05:46 | brixen | ahh, they are fake passing |
| 21:51:28 | brixen | ok, much better |
| 22:29:30 | evan | brixen: going ok? |
| 22:42:34 | brixen | yeah, just cleaning up failures |
| 22:42:41 | brixen | Array#fill is a nasty method |
| 22:44:37 | evan | yeah |
| 22:45:25 | evan | got my brazilian visa! yay! |
| 22:46:30 | brixen | yay! |
| 22:48:36 | brixen | hmm so, a Tuple of 3 elements on 32bit has a memory_size of 28, header of 12, body of 16 bytes |
| 22:48:44 | brixen | but it only needs 12 bytes in the body |
| 22:49:06 | evan | mmm |
| 22:49:14 | brixen | oh, it need size |
| 22:49:15 | brixen | nm |
| 22:49:17 | evan | yeah |
| 22:49:20 | brixen | this boundary error is confusing |
| 22:49:26 | brixen | I should fix the error msg |
| 22:49:31 | evan | sizeof(Tuple) == sizeof(Object) + sizeof(uint32) |
| 22:49:34 | brixen | yeah |
| 22:49:42 | evan | yeah |
| 22:49:48 | evan | please fix that boundary exception message |
| 22:49:49 | brixen | I was thinking the size was in the header, incorrectly |
| 22:49:50 | evan | i've been meaning to do that. |
| 22:50:24 | evan | did you see I commited code to allow yield inside an inlined block? |
| 22:50:30 | brixen | yes! |
| 22:50:34 | evan | k |
| 22:50:41 | brixen | I haven't pulled master yet |
| 22:50:46 | brixen | but I saw the commit |
| 22:50:48 | evan | we need to hammer the shit out of that code through next week |
| 22:50:52 | brixen | sure |