Show enters and exits. Hide enters and exits.
| 00:00:45 | rue | I like to use .inl files |
| 00:02:41 | boyscout | 1 commit by Cezar Sa Espinola |
| 00:02:42 | boyscout | * Adding rb_obj_classname() to subtend, specs included.; 6122a56 |
| 00:03:36 | dgtized | rue: so you keep the interface clear of the definitions? |
| 00:03:48 | lopex leaves the room. | |
| 00:05:06 | evan | I prefer to leverage the fact that C++ makes any function defined in the class body as inline |
| 00:05:58 | Arjen_ enters the room. | |
| 00:10:16 | fabiokung_ enters the room. | |
| 00:10:16 | fabiokung leaves the room. | |
| 00:11:24 | imajes enters the room. | |
| 00:13:33 | rubuildius_amd64 | Cezar Sa Espinola: 6122a564d; 2187 files, 7177 examples, 25811 expectations, 0 failures, 0 errors |
| 00:13:57 | fabiokung_ leaves the room. | |
| 00:14:41 | benburkert leaves the room. | |
| 00:16:21 | rubuildius_ppc | Cezar Sa Espinola: 6122a564d; 2187 files, 7190 examples, 25855 expectations, 0 failures, 0 errors |
| 00:23:12 | therealadam leaves the room. | |
| 00:25:20 | boof leaves the room. | |
| 00:25:40 | imajes leaves the room. | |
| 00:28:37 | mernen enters the room. | |
| 00:31:01 | atmos leaves the room. | |
| 00:31:02 | AndrewO enters the room. | |
| 00:33:42 | NoKarma enters the room. | |
| 00:34:08 | yugui enters the room. | |
| 00:35:05 | atmos enters the room. | |
| 00:35:31 | AndrewO leaves the room. | |
| 00:36:18 | AndrewO enters the room. | |
| 00:37:10 | binary42 enters the room. | |
| 00:43:36 | wycats | when does rubygems ignore --no-update-sources? |
| 00:44:11 | drbrain | I don't know, if it ever does, that is probably a bug |
| 00:46:10 | fabiokung enters the room. | |
| 00:46:10 | chris2 leaves the room. | |
| 00:48:27 | fabiokung leaves the room. | |
| 00:49:31 | benstiglitz leaves the room. | |
| 00:50:39 | tarcieri | whoa @ git colors |
| 00:50:42 | tarcieri | never knew about that |
| 00:51:43 | lstoll leaves the room. | |
| 00:51:50 | drbrain | I hate colors |
| 00:52:28 | evan | but love ponies |
| 00:52:30 | evan | how ironic. |
| 00:53:40 | tarcieri | drbrain: you want the world all black and white, but a rainbow never tells no lies |
| 00:53:47 | tarcieri | some horrible Triumph lyrics for ya |
| 00:54:11 | brixen | tarcieri: I love git status in color |
| 00:54:21 | brixen | git diff too |
| 00:54:50 | brixen | tarcieri: have you used tig? |
| 00:54:59 | tarcieri | never heard of it |
| 00:55:22 | brixen | tarcieri: you can get a copy of it here http://git.rubini.us/?p=apps/tig;a=summary |
| 00:55:33 | tarcieri | what does it do? |
| 00:55:37 | tarcieri | or should I just click ze link |
| 00:55:50 | brixen | it's a curses interface to git |
| 00:56:14 | brixen | makes it easy to browse commits |
| 00:56:54 | tarcieri | aah, cool |
| 01:09:17 | drbrain | tarcieri: but a rainbow hurts my eyes |
| 01:10:07 | evan | drbrain: how are the eyes btw? |
| 01:10:20 | drbrain | dilated |
| 01:10:26 | evan | i'll bet. |
| 01:10:36 | drbrain | but less so than when I was trying to read what I dialed this morning |
| 01:10:49 | drbrain | they used slide film, so getting pictures is too hard :( |
| 01:11:45 | evan | :/ |
| 01:11:52 | evan | it's easy to scan a slide |
| 01:12:01 | evan | there are lots of places with slide scanners now. |
| 01:12:17 | evan | you should see if you can just get it in a slide |
| 01:12:26 | drbrain | yeah |
| 01:12:47 | Arjen_ leaves the room. | |
| 01:12:54 | drbrain | the photographer waffled on it when I asked about it |
| 01:13:18 | drbrain | I'll try again once they're developed |
| 01:13:34 | drbrain | interestingly, though, they're stereoscopic! |
| 01:15:07 | evan | neato! |
| 01:15:20 | evan | i guess that makes sense |
| 01:15:25 | evan | more info that way |
| 01:15:49 | benny leaves the room. | |
| 01:15:55 | drbrain | they're primarily interested in how much the nerve head is sticking up |
| 01:18:40 | evan | gotcha |
| 01:18:44 | evan | sounds... icky. |
| 01:21:46 | brixen | you know what css is? it's bytecode, asm. it's insane that we develop web pages in asm |
| 01:21:51 | brixen | insane I tell ya |
| 01:23:25 | evan | hehe |
| 01:25:26 | cezarsa | hey, specs for rb_inspect, is spec/subtend/string_spec.rb a good place? |
| 01:25:41 | evan | hm. |
| 01:25:51 | evan | probably not |
| 01:26:01 | evan | we should have a object_spec.rb |
| 01:26:09 | drbrain | agreed |
| 01:26:11 | brixen | or kernel_spec |
| 01:26:28 | drbrain | oh, yeah, inspect is on kernel, isn't it? |
| 01:27:22 | brixen | yes |
| 01:27:34 | cezarsa | i think object_inspect should apply to rb_obj_classname (ive commited it to class_spec.rb)? |
| 01:32:20 | brixen | hmm, weird case |
| 01:32:33 | brixen | object_spec probably makes sense |
| 01:33:04 | cezarsa | ok, i'll fix it and put then both on object_spec, is that ok? |
| 01:33:51 | drbrain | I think so, we can always move it later |
| 01:33:57 | drbrain | if we become unsatisfied |
| 01:45:28 | dlee leaves the room. | |
| 01:46:31 | lstoll enters the room. | |
| 01:47:51 | cezarsa | huge crash when I run bin/mspec spec/subtend/object_spec.rb |
| 01:47:53 | cezarsa | http://pastie.org/201945 |
| 01:48:01 | cezarsa | is that a known issue? |
| 01:49:31 | twbray leaves the room. | |
| 01:49:45 | drbrain | cezarsa: I see it too |
| 01:50:22 | wmoxam enters the room. | |
| 01:51:06 | cezarsa | i thought that every subtend spec was executed by mspec ci |
| 01:51:52 | drbrain | cezarsa: only if it is not excluded via spec/tags |
| 01:52:21 | drbrain | "fails:SubtendObject rb_check_array_type should try to coerce to array, otherwise return nil" |
| 01:53:17 | cezarsa | hmm... understood, thx drbrain |
| 01:53:21 | drbrain | in spec/tags/subtend/object_tags.txt |
| 01:53:29 | brixen | zenspider: you still around? http://pastie.org/201947 |
| 01:53:37 | drbrain | (so, yes this is a known issue) |
| 01:53:55 | drbrain | brixen: he is not |
| 01:54:22 | brixen | drbrain: thanks |
| 01:54:23 | trythil enters the room. | |
| 01:55:55 | drbrain | yay! got my new SpecFetcher thingus hooked into Gem::DependencyInstaller |
| 02:02:04 | rubuildius_ppc leaves the room. | |
| 02:02:37 | rubuildius_ppc enters the room. | |
| 02:02:45 | twbray enters the room. | |
| 02:03:42 | twbray leaves the room. | |
| 02:14:17 | kw enters the room. | |
| 02:14:29 | trythil leaves the room. | |
| 02:16:28 | rubuildius_ppc | Cezar Sa Espinola: 6122a564d; 2187 files, 7190 examples, 25855 expectations, 0 failures, 0 errors |
| 02:16:54 | radarek leaves the room. | |
| 02:21:35 | anteaya_ leaves the room. | |
| 02:24:23 | ezmobius leaves the room. | |
| 02:30:04 | VVSiz_ enters the room. | |
| 02:33:02 | atmos_ enters the room. | |
| 02:33:05 | atmos_ leaves the room. | |
| 02:35:34 | lstoll_ enters the room. | |
| 02:36:51 | elight leaves the room. | |
| 02:37:13 | VVSiz leaves the room. | |
| 02:37:24 | elight enters the room. | |
| 02:39:51 | antares leaves the room. | |
| 02:41:32 | dfg59 enters the room. | |
| 02:43:02 | headius enters the room. | |
| 02:43:27 | lstoll leaves the room. | |
| 02:45:07 | crafterm enters the room. | |
| 02:45:20 | fabiokung enters the room. | |
| 02:45:35 | boyscout | 1 commit by Cezar Sa Espinola |
| 02:45:36 | boyscout | * Adding rb_inspect to subtend, with specs;; b2330c7 |
| 02:46:46 | wmoxam_ enters the room. | |
| 02:47:38 | crafterm leaves the room. | |
| 02:47:49 | fabiokung leaves the room. | |
| 02:48:30 | wmoxam leaves the room. | |
| 02:51:21 | antares enters the room. | |
| 02:53:49 | atmos leaves the room. | |
| 02:56:42 | dfg59 leaves the room. | |
| 02:56:56 | wmoxam_ leaves the room. | |
| 02:57:08 | wmoxam enters the room. | |
| 02:57:29 | atmos enters the room. | |
| 02:59:12 | twbray enters the room. | |
| 02:59:23 | rubuildius_ppc | Cezar Sa Espinola: b2330c786; 2187 files, 7191 examples, 25859 expectations, 0 failures, 0 errors |
| 03:09:47 | anteaya enters the room. | |
| 03:13:29 | twbray leaves the room. | |
| 03:15:43 | benburkert enters the room. | |
| 03:29:19 | be9 enters the room. | |
| 03:30:49 | rubuildius_ppc leaves the room. | |
| 03:31:22 | rubuildius_ppc enters the room. | |
| 03:32:57 | twbray enters the room. | |
| 03:38:23 | rubuildius_amd64 | Cezar Sa Espinola: b2330c786; 2187 files, 7178 examples, 25815 expectations, 0 failures, 0 errors |
| 03:39:22 | pth_ enters the room. | |
| 03:39:40 | pth_ leaves the room. | |
| 03:40:10 | dysinger leaves the room. | |
| 03:41:02 | _sk enters the room. | |
| 03:41:26 | ruivaldo enters the room. | |
| 03:47:36 | twbray leaves the room. | |
| 03:55:11 | pth leaves the room. | |
| 03:56:15 | anteaya leaves the room. | |
| 04:01:09 | antares leaves the room. | |
| 04:03:51 | ShayArnett leaves the room. | |
| 04:11:17 | twbray enters the room. | |
| 04:14:44 | sambo82 enters the room. | |
| 04:17:50 | obiejuan leaves the room. | |
| 04:18:31 | RyanTM leaves the room. | |
| 04:21:15 | EugZol leaves the room. | |
| 04:24:03 | ruivaldo leaves the room. | |
| 04:27:09 | be9 leaves the room. | |
| 04:31:21 | AndrewO leaves the room. | |
| 04:33:33 | crafterm enters the room. | |
| 04:37:54 | atmos leaves the room. | |
| 04:42:46 | mapar leaves the room. | |
| 04:42:47 | veek leaves the room. | |
| 04:45:58 | jtoy enters the room. | |
| 04:46:35 | TheVoice enters the room. | |
| 04:55:01 | rubuildius_ppc leaves the room. | |
| 04:55:33 | rubuildius_ppc enters the room. | |
| 04:56:00 | benburkert leaves the room. | |
| 04:58:20 | jtoy leaves the room. | |
| 04:59:00 | rubuildius_ppc leaves the room. | |
| 04:59:19 | jtoy enters the room. | |
| 04:59:33 | rubuildius_ppc enters the room. | |
| 05:02:16 | michaellatta_ enters the room. | |
| 05:06:33 | AndrewO enters the room. | |
| 05:17:26 | mapar enters the room. | |
| 05:17:39 | atmos enters the room. | |
| 05:17:44 | michaellatta leaves the room. | |
| 05:21:59 | AndrewO leaves the room. | |
| 05:32:05 | twbray leaves the room. | |
| 05:33:06 | twbray enters the room. | |
| 05:33:27 | twbray leaves the room. | |
| 05:35:33 | trythil enters the room. | |
| 05:36:39 | lstoll_ leaves the room. | |
| 05:38:05 | tizianobis enters the room. | |
| 05:46:13 | robin_dewd leaves the room. | |
| 05:46:30 | ezmobius enters the room. | |
| 06:00:43 | kw leaves the room. | |
| 06:08:55 | mediogre enters the room. | |
| 06:38:21 | mediogre enters the room. | |
| 06:42:34 | blakewatters enters the room. | |
| 06:42:49 | crafterm leaves the room. | |
| 07:01:38 | mernen leaves the room. | |
| 07:06:07 | sambo82_ enters the room. | |
| 07:08:13 | wmoxam leaves the room. | |
| 07:08:44 | w1rele55 leaves the room. | |
| 07:10:21 | w1rele55 enters the room. | |
| 07:10:45 | wycats leaves the room. | |
| 07:13:43 | yipstar leaves the room. | |
| 07:17:06 | kw enters the room. | |
| 07:17:19 | kw leaves the room. | |
| 07:18:19 | Skip enters the room. | |
| 07:18:33 | lchin_ enters the room. | |
| 07:18:58 | edwardam leaves the room. | |
| 07:23:50 | tizianobis_ enters the room. | |
| 07:26:53 | wycats enters the room. | |
| 07:30:34 | michaellatta_ leaves the room. | |
| 07:31:07 | michaellatta enters the room. | |
| 07:33:56 | lchin leaves the room. | |
| 07:35:19 | wycats leaves the room. | |
| 07:35:30 | wycats_ enters the room. | |
| 07:40:24 | tizianobis leaves the room. | |
| 07:42:18 | blakewatters leaves the room. | |
| 07:45:29 | wycats_ leaves the room. | |
| 07:46:03 | wycats enters the room. | |
| 07:51:05 | boof enters the room. | |
| 07:54:11 | rubuildius_ppc leaves the room. | |
| 07:54:43 | rubuildius_ppc enters the room. | |
| 07:56:17 | mkrauskopf enters the room. | |
| 08:11:11 | trythil leaves the room. | |
| 08:13:42 | thehcdreamer enters the room. | |
| 08:16:19 | elight leaves the room. | |
| 08:18:00 | elight enters the room. | |
| 08:26:04 | Maledictus enters the room. | |
| 08:26:33 | boof leaves the room. | |
| 08:28:18 | Fullmoon leaves the room. | |
| 08:48:56 | tizianobis__ enters the room. | |
| 08:48:58 | edwardam enters the room. | |
| 08:49:03 | edwardam leaves the room. | |
| 08:49:32 | edwardam enters the room. | |
| 08:55:51 | tizianobis___ enters the room. | |
| 08:55:53 | mutle enters the room. | |
| 09:01:41 | tizianobis___ leaves the room. | |
| 09:04:21 | lstoll enters the room. | |
| 09:07:24 | tizianobis leaves the room. | |
| 09:07:27 | tizianobis_ leaves the room. | |
| 09:16:59 | octopod enters the room. | |
| 09:22:27 | ezmobius leaves the room. | |
| 09:46:01 | olabini enters the room. | |
| 09:49:16 | imajes enters the room. | |
| 09:51:12 | BlackEdder enters the room. | |
| 09:56:37 | BlackEdder enters the room. | |
| 10:00:04 | rubuildius_ppc leaves the room. | |
| 10:00:38 | rubuildius_ppc enters the room. | |
| 10:16:39 | VVSiz_ enters the room. | |
| 10:33:21 | VVSiz leaves the room. | |
| 10:35:05 | VVSiz enters the room. | |
| 10:40:21 | VVSiz_ leaves the room. | |
| 10:48:27 | TheVoice leaves the room. | |
| 11:02:54 | atmos leaves the room. | |
| 11:05:41 | qwert666 enters the room. | |
| 11:06:12 | imajes leaves the room. | |
| 11:13:43 | thehcdreamer leaves the room. | |
| 11:16:52 | jtoy leaves the room. | |
| 11:19:37 | thehcdreamer enters the room. | |
| 11:28:53 | thehcdreamer_ enters the room. | |
| 11:29:08 | thehcdreamer_ leaves the room. | |
| 11:32:18 | _sk leaves the room. | |
| 11:37:33 | thehcdreamer leaves the room. | |
| 11:38:08 | headius_ enters the room. | |
| 11:44:05 | thehcdreamer enters the room. | |
| 11:47:24 | headius leaves the room. | |
| 11:53:45 | thehcdreamer_ enters the room. | |
| 11:56:09 | rubuildius_ppc leaves the room. | |
| 11:56:42 | rubuildius_ppc enters the room. | |
| 11:57:09 | rubuildius_ppc leaves the room. | |
| 11:57:09 | sdsykes enters the room. | |
| 11:57:41 | rubuildius_ppc enters the room. | |
| 12:01:07 | thehcdreamer leaves the room. | |
| 12:02:54 | ruivaldo enters the room. | |
| 12:08:15 | Skip leaves the room. | |
| 12:09:20 | Skip enters the room. | |
| 12:30:27 | ruivaldo leaves the room. | |
| 12:33:37 | RyanTM enters the room. | |
| 12:42:47 | radarek enters the room. | |
| 12:52:05 | sambo82_ leaves the room. | |
| 12:52:28 | charlenopires enters the room. | |
| 13:02:26 | mapar1 enters the room. | |
| 13:04:25 | mapar leaves the room. | |
| 13:07:47 | tim_w enters the room. | |
| 13:12:56 | obiejuan enters the room. | |
| 13:17:58 | mjwhitt enters the room. | |
| 13:23:22 | vertiginou1 enters the room. | |
| 13:27:37 | tim_w leaves the room. | |
| 13:29:27 | tim_w enters the room. | |
| 13:34:18 | cksouza leaves the room. | |
| 13:39:17 | jtoy enters the room. | |
| 13:40:22 | thehcdreamer_ leaves the room. | |
| 13:47:35 | binary42 leaves the room. | |
| 13:50:36 | robin_dewd enters the room. | |
| 13:52:04 | yugui leaves the room. | |
| 13:59:41 | webmat enters the room. | |
| 14:00:17 | qwert666 leaves the room. | |
| 14:07:36 | blakewatters enters the room. | |
| 14:10:40 | blakewatters leaves the room. | |
| 14:17:27 | tim_w leaves the room. | |
| 14:17:59 | scoopr enters the room. | |
| 14:22:19 | RyanTM leaves the room. | |
| 14:27:28 | twbray enters the room. | |
| 14:31:03 | enebo enters the room. | |
| 14:38:32 | edwardam leaves the room. | |
| 14:39:32 | tim_w enters the room. | |
| 14:39:39 | tim_w leaves the room. | |
| 14:42:28 | obiejuan enters the room. | |
| 14:43:17 | trythil enters the room. | |
| 14:46:29 | twbray leaves the room. | |
| 14:47:00 | trythil leaves the room. | |
| 14:47:47 | elight leaves the room. | |
| 14:48:40 | moofbong enters the room. | |
| 14:52:21 | blakewatters enters the room. | |
| 14:54:45 | thehcdreamer enters the room. | |
| 14:59:10 | wmoxam enters the room. | |
| 15:00:57 | RyanTM enters the room. | |
| 15:02:11 | rubuildius_ppc leaves the room. | |
| 15:02:44 | rubuildius_ppc enters the room. | |
| 15:11:05 | sambo82 enters the room. | |
| 15:13:39 | nemerle_afk enters the room. | |
| 15:13:47 | yugui enters the room. | |
| 15:21:41 | headius_ enters the room. | |
| 15:21:50 | qwert666 enters the room. | |
| 15:24:50 | chris2 enters the room. | |
| 15:24:53 | trythil enters the room. | |
| 15:25:53 | trythil leaves the room. | |
| 15:30:25 | yasuhito_ enters the room. | |
| 15:30:28 | ShayArnett enters the room. | |
| 15:30:57 | trythil enters the room. | |
| 15:31:09 | headius leaves the room. | |
| 15:31:09 | trythil leaves the room. | |
| 15:31:30 | nemerle leaves the room. | |
| 15:31:49 | yasuhito_ leaves the room. | |
| 15:36:44 | yipstar enters the room. | |
| 15:37:18 | yasuhito_ enters the room. | |
| 15:44:41 | twbray enters the room. | |
| 15:47:41 | nemerle enters the room. | |
| 15:53:05 | qwert666 leaves the room. | |
| 15:53:24 | lopex enters the room. | |
| 15:55:04 | nemerle_afk leaves the room. | |
| 15:55:54 | twbray leaves the room. | |
| 15:57:13 | rubuildius_ppc leaves the room. | |
| 15:57:45 | rubuildius_ppc enters the room. | |
| 16:00:00 | headius_ leaves the room. | |
| 16:00:28 | therealadam enters the room. | |
| 16:03:25 | rype enters the room. | |
| 16:03:53 | MenTaLguY enters the room. | |
| 16:04:00 | MenTaLguY | hello |
| 16:05:12 | shame leaves the room. | |
| 16:05:45 | dlee enters the room. | |
| 16:13:37 | qwert666 enters the room. | |
| 16:16:30 | boof enters the room. | |
| 16:17:10 | boof leaves the room. | |
| 16:21:01 | nicksieger enters the room. | |
| 16:21:03 | Spakman | hello |
| 16:24:37 | trythil enters the room. | |
| 16:30:59 | Packet_Monkey enters the room. | |
| 16:32:11 | qwert666 leaves the room. | |
| 16:32:12 | twbray enters the room. | |
| 16:32:55 | jtoy leaves the room. | |
| 16:38:51 | twbray leaves the room. | |
| 16:41:15 | rubuildius_ppc leaves the room. | |
| 16:41:47 | rubuildius_ppc enters the room. | |
| 16:44:49 | trythil leaves the room. | |
| 16:44:53 | naeu enters the room. | |
| 16:48:38 | dfg59 enters the room. | |
| 16:50:14 | trythil enters the room. | |
| 16:57:56 | naeu leaves the room. | |
| 16:58:10 | naeu enters the room. | |
| 16:58:46 | trythil leaves the room. | |
| 17:00:15 | naeu leaves the room. | |
| 17:03:40 | wycats leaves the room. | |
| 17:04:03 | wycats enters the room. | |
| 17:04:41 | dfg59 leaves the room. | |
| 17:05:00 | yugui leaves the room. | |
| 17:09:08 | wvdschel enters the room. | |
| 17:09:34 | shame enters the room. | |
| 17:13:34 | twbray enters the room. | |
| 17:16:35 | antares enters the room. | |
| 17:17:27 | antares leaves the room. | |
| 17:17:30 | antares enters the room. | |
| 17:20:16 | tim_w enters the room. | |
| 17:25:02 | sambo82 leaves the room. | |
| 17:28:32 | mutle leaves the room. | |
| 17:28:40 | dysinger enters the room. | |
| 17:30:17 | olabini leaves the room. | |
| 17:52:26 | MenTaLguY enters the room. | |
| 17:53:04 | thehcdreamer leaves the room. | |
| 17:57:23 | trythil enters the room. | |
| 17:58:01 | lstoll leaves the room. | |
| 18:06:01 | antares leaves the room. | |
| 18:07:56 | tim_w leaves the room. | |
| 18:13:52 | TheVoice enters the room. | |
| 18:17:51 | tim_w enters the room. | |
| 18:19:42 | octopod leaves the room. | |
| 18:30:08 | brainopia enters the room. | |
| 18:31:43 | JimMc leaves the room. | |
| 18:45:02 | brainopia leaves the room. | |
| 18:46:26 | twbray leaves the room. | |
| 18:48:08 | tim_w leaves the room. | |
| 18:48:20 | VVSiz leaves the room. | |
| 19:07:04 | charlenopires leaves the room. | |
| 19:07:11 | macournoyer enters the room. | |
| 19:07:17 | rubuildius_ppc leaves the room. | |
| 19:07:36 | atmos enters the room. | |
| 19:07:45 | macournoyer leaves the room. | |
| 19:07:50 | rubuildius_ppc enters the room. | |
| 19:07:52 | macournoyer enters the room. | |
| 19:09:58 | lopex leaves the room. | |
| 19:11:19 | dysinger leaves the room. | |
| 19:14:16 | drbrain | MenTaLguY: ping |
| 19:14:17 | qwert666 enters the room. | |
| 19:15:21 | edwardam enters the room. | |
| 19:17:07 | MenTaLguY | pong |
| 19:17:14 | MenTaLguY | what's up? |
| 19:18:28 | tarcieri | hey MenTaLguY, Reia has blocks now |
| 19:19:09 | MenTaLguY | awesome |
| 19:19:37 | tarcieri | >> [1,2,3].map() { |n| n + 1 }.map() { |n| n * 2 }.reduce(0) { |a, b| a + b } |
| 19:19:38 | tarcieri | 18 |
| 19:20:42 | brixen | tarcieri: sweet! |
| 19:21:01 | brixen | tarcieri: any chance you are coming to railsconf? |
| 19:21:16 | evan | tarcieri: reia is ruby flavored erlang, right? |
| 19:21:21 | drbrain | MenTaLguY: was wondering about your "gem database doesn't scale" twitter |
| 19:21:25 | tarcieri | was considering it, but nope... I'm not really doing much Rails anymore |
| 19:21:27 | drbrain | I think I am working on that right now |
| 19:21:43 | tarcieri | evan: it's a mishmash of Ruby, Python, and Erlang, and yeah, runs on the Erlang VM |
| 19:21:47 | brixen | tarcieri: ah bummer, I was hoping to talk MPI -> Actor stuff |
| 19:21:56 | tarcieri | brixen: aah |
| 19:22:03 | drbrain | did you mean the bulk update nastiness? |
| 19:22:11 | evan | tarcieri: whats it output? |
| 19:22:22 | evan | tarcieri: your compiler takes your syntax in and outputs erlang syntax? |
| 19:22:24 | tarcieri | evan: my code outputs Erlang AST |
| 19:22:28 | tarcieri | yeah |
| 19:22:36 | evan | in text form or somethin gelse? |
| 19:22:39 | evan | else. |
| 19:23:07 | AndrewO enters the room. | |
| 19:23:08 | tarcieri | well, right now I just walk the sexps produced by my parser and output sexps compatible with Erlang's parser |
| 19:23:21 | MenTaLguY | drbrain: yes, just that |
| 19:23:45 | drbrain | yeah, I'm working on exactly that |
| 19:23:50 | MenTaLguY | excellent |
| 19:24:02 | tarcieri | evan: but as soon as I reach the point that it's capable of self hosting I'm going to rewrite the entire compiler... and probably target core Erlang in the process |
| 19:24:12 | wycats leaves the room. | |
| 19:24:19 | evan | 'core Erlang'? |
| 19:24:43 | tarcieri | It's a simplified Erlang used by the compiler |
| 19:24:49 | tarcieri | as in the one which produces BEAM bytecodes |
| 19:25:02 | evan | gotcha |
| 19:26:30 | evan | just got type specialized blocks working nicely I think. |
| 19:27:53 | evan | this is a tricky problem |
| 19:28:05 | evan | since ruby treats blocks like composable execute units. |
| 19:28:52 | tarcieri | cheated and just has blocks as a convenience syntax for disambiguating lambdas from other formal parameters |
| 19:31:39 | MenTaLguY | how close to Ruby is Reia ultimately supposed to be, OOC? |
| 19:32:01 | tarcieri | dunno, as close as I want it to be :) |
| 19:32:17 | tarcieri | syntactically it looks a lot more like Python than Ruby |
| 19:33:07 | tarcieri | but there's certain elements of Ruby syntax I'm just copying over verbatim |
| 19:33:11 | evan | with closures. |
| 19:34:23 | ezmobius enters the room. | |
| 19:41:21 | wycats enters the room. | |
| 19:54:37 | wvdschel leaves the room. | |
| 19:56:08 | binary42 enters the room. | |
| 20:00:15 | VVSiz enters the room. | |
| 20:07:41 | enebo leaves the room. | |
| 20:08:40 | twbray enters the room. | |
| 20:11:21 | pauldix enters the room. | |
| 20:11:22 | dodecaphonic enters the room. | |
| 20:11:45 | edwardam leaves the room. | |
| 20:12:10 | trythil leaves the room. | |
| 20:18:37 | twbray leaves the room. | |
| 20:22:33 | Fullmoon enters the room. | |
| 20:25:17 | vertiginou1 leaves the room. | |
| 20:27:54 | elight enters the room. | |
| 20:30:00 | edwardam enters the room. | |
| 20:30:23 | edwardam leaves the room. | |
| 20:30:38 | edwardam enters the room. | |
| 20:40:01 | ezmobius leaves the room. | |
| 20:42:04 | rype leaves the room. | |
| 20:48:02 | dgtized | I wish rubygems had been built from the get go with some sort of category system, gem list -r is pretty much useless |
| 20:52:05 | NoKarma enters the room. | |
| 20:55:37 | Defiler | It needs a compatibility-breaking version change, in my opinion |
| 20:55:46 | Defiler | but it isn't getting one, now that it is integrated with MRI |
| 20:57:22 | flazz enters the room. | |
| 20:57:45 | chris2 leaves the room. | |
| 20:58:09 | flazz | i'm trying to run a script in rbx and it cant seem to find the gem 'builder' any ideas? |
| 20:58:25 | tarcieri | rbx gem install builder? |
| 20:58:38 | flazz | its a whole other set of gems? |
| 20:58:41 | evan | yep |
| 20:58:53 | flazz | well then |
| 20:59:05 | evan | be sure to do --no-ri --no-rdoc |
| 20:59:07 | evan | on install too |
| 20:59:15 | flazz | i'll try it, where do the rbx gems go if i have rbx under /usr/local? |
| 20:59:25 | Defiler | rbx gem environment will show the paths |
| 21:00:38 | flazz | Defiler: where/how can i look at that? |
| 21:01:06 | Defiler | type that command |
| 21:01:11 | Defiler | 'rbx gem environment' |
| 21:01:23 | Defiler | ('gem environment' will show you your MRI config) |
| 21:01:40 | twbray enters the room. | |
| 21:01:55 | brixen | flazz: you can even abbreviate it to 'rbx gem env' |
| 21:01:57 | flazz | gotcha, so why --no-ri and --no-rdoc? |
| 21:02:05 | Defiler | they are very slow right now |
| 21:02:06 | evan | it's quite slow right now. |
| 21:04:20 | enebo enters the room. | |
| 21:06:23 | sdsykes leaves the room. | |
| 21:13:01 | flazz | i stopped the gem install mid way and then when i restarted it i'm getting no such file or directory - .....cache/builder-2.1.2.gem |
| 21:13:14 | flazz | is it half installed or something? |
| 21:13:40 | Packet_Monkey_ enters the room. | |
| 21:15:44 | drbrain | flazz: can you paste a backtrace? |
| 21:15:50 | drbrain | rbx gem --debug install ... |
| 21:16:21 | dodecaphonic leaves the room. | |
| 21:18:49 | flazz | god i love pbcopy |
| 21:19:02 | dgtized | evan: was it you or dbussink that tested on debian unstable for the new vm? |
| 21:19:14 | dbussink | dgtized: was me |
| 21:19:18 | dbussink | dgtized: ah no |
| 21:19:25 | dbussink | i read it wrong, it was evan :P |
| 21:19:31 | dbussink | i have an ubuntu vm |
| 21:19:32 | flazz | http://pastie.caboo.se/202460 |
| 21:19:46 | dgtized | dbussink: running 8.04? |
| 21:19:51 | dbussink | dgtized: yup |
| 21:20:46 | dgtized | can you print out the g++ version string on that? |
| 21:20:51 | dgtized | dgtized: just to see? |
| 21:21:14 | dgtized | oops meant to tab complete on dbussink and got me somehow |
| 21:22:28 | dbussink | dgtized: i'm not at home atm, but it's the latest after a apt-get upgrade |
| 21:22:32 | dbussink | from yesterday |
| 21:23:37 | dgtized | right, which is what mine is too, but I wanted to see if the version string was actually the same, just in case something was really screwy |
| 21:24:20 | drbrain | flazz: do you have a /usr/local/lib/rubinius/lib/rbx/gems/1.8.6/cache directory |
| 21:24:23 | drbrain | ? |
| 21:24:32 | ShayArnett leaves the room. | |
| 21:28:23 | dgtized | evan: OBJECT Task::pop(); should be OBJECT pop(); in builtin_task.hpp |
| 21:28:32 | dgtized | evan: it's a compiler error otherwise |
| 21:28:36 | cremes_ leaves the room. | |
| 21:29:48 | vertiginous enters the room. | |
| 21:31:08 | Packet_Monkey leaves the room. | |
| 21:33:47 | radarek leaves the room. | |
| 21:34:05 | dgtized | evan: is undef #undef state for removing STATE or is there actually a state macro somewhere? |
| 21:35:40 | Jzalae enters the room. | |
| 21:36:30 | benny enters the room. | |
| 21:36:51 | seydar enters the room. | |
| 21:40:04 | ezmobius enters the room. | |
| 21:43:18 | dgtized | evan: HA! I found the bug in state |
| 21:43:31 | evan | oh? |
| 21:43:49 | dgtized | evan: I added an #undef state to line 281 of test_lookuptable |
| 21:44:09 | dgtized | because at the beginning of that there is a #define state &vm |
| 21:44:14 | evan | i don't have a line 281 |
| 21:44:28 | evan | oh |
| 21:44:31 | dgtized | well the last line of the class anyway |
| 21:44:33 | evan | so it was a local change of yours? |
| 21:44:40 | dgtized | no |
| 21:44:46 | dgtized | well the fix is a local change |
| 21:44:59 | evan | the fix is adding an #undef state to the end? |
| 21:45:09 | evan | i still don't get why it's only you. |
| 21:45:30 | dgtized | evan: nor do I but that's the problem somehow the #define from there is bleeding over into test_task.hpp |
| 21:45:40 | evan | hrm. ok. |
| 21:45:55 | dgtized | test_lookuptable is the only one that doesn't have a setup/teardown for vm |
| 21:46:07 | dgtized | so you allocate it at the beginning of each method |
| 21:46:18 | evan | yeah |
| 21:46:21 | evan | should probably do that |
| 21:46:27 | evan | instead |
| 21:46:30 | evan | it's an older test |
| 21:46:32 | evan | is the reason it didn't. |
| 21:46:36 | dgtized | make it a setup/teardown? k I will swap it |
| 21:46:51 | evan | yeah |
| 21:46:56 | evan | make a setup/teardown like the others |
| 21:47:02 | evan | with a state data member |
| 21:48:48 | dgtized | k |
| 21:49:12 | dgtized | so we should have 3 or 4 tests failing in general? |
| 21:49:29 | dgtized | non-deterministically? |
| 21:49:36 | vertiginous leaves the room. | |
| 21:49:53 | dbussink | dgtized: yeah, that's what i've seen too on my ubuntu vm |
| 21:50:00 | dbussink | everything is ok on os x though |
| 21:50:05 | Packet_Monkey_ leaves the room. | |
| 21:53:20 | gnufied enters the room. | |
| 21:53:42 | evan | there are 3 on linux |
| 21:53:44 | evan | that fail. |
| 21:54:15 | benny leaves the room. | |
| 21:54:23 | dgtized | I get sometimes 3 and sometimes 4 |
| 21:54:33 | dgtized | and it sounded like dbussink had the same issue |
| 21:54:57 | dbussink | i've seen 2 too |
| 21:56:22 | jammi_ leaves the room. | |
| 21:57:02 | seydar enters the room. | |
| 21:57:17 | seydar | has anyone else had trouble getting rubinius to run recently? |
| 21:57:36 | evan | seydar: welcome back |
| 21:57:43 | evan | no one has reported anything, no. |
| 21:57:45 | seydar | ok |
| 21:57:55 | evan | trouble how? |
| 21:57:56 | seydar | i am officially reporting rubinius being unable to start because of FFI |
| 21:58:15 | drbrain | hi seydar! |
| 21:58:22 | evan | seydar: please put in a tickt with all relevant info |
| 21:58:24 | seydar | drbrain: whats up! |
| 21:58:29 | evan | for instance, why you think it's FFI |
| 21:58:33 | jammi enters the room. | |
| 21:58:38 | drbrain | we've been missing you |
| 21:58:40 | seydar | evan: because it says its FFI, but i cant find a log |
| 21:58:52 | seydar | drbrain: i have been putting in more hours into dartmouth than my dad is in work |
| 21:58:58 | evan | seydar: put as much info as you have in a ticket. |
| 21:59:07 | seydar | evan: yessir. |
| 21:59:50 | drbrain | seydar: well, that's a worthy trade |
| 22:00:08 | dgtized | evan: hmm I tried adding the lookuptable in test_lookuptable to the setup/teardown |
| 22:00:39 | dgtized | evan: but then I get an invalid pointer glibc error if I try and free up the tbl in teardown |
| 22:01:04 | evan | are you doing a setup/teardown exactly the same as the other files? |
| 22:01:48 | dgtized | evan: yes except I'm also including the tbl in the setup/teardown in addition to the VM *state |
| 22:02:15 | evan | you're not freeing the tbl, right? |
| 22:02:28 | dgtized | evan: that's what fails |
| 22:02:35 | evan | you don't free them. |
| 22:02:39 | dgtized | evan: ok |
| 22:02:51 | evan | NEVER free pointers you get back from ::create |
| 22:02:56 | evan | they're GC allocated objects. |
| 22:02:56 | dgtized | evan: ok |
| 22:04:47 | dgtized | evan: ok that fixes it, incidentally all of the #undef state are no longer needed because of this change as well |
| 22:04:55 | evan | course. |
| 22:06:23 | AndrewO leaves the room. | |
| 22:07:55 | webmat leaves the room. | |
| 22:09:21 | jnicklas enters the room. | |
| 22:11:30 | pauldix leaves the room. | |
| 22:11:47 | pauldix enters the room. | |
| 22:12:15 | seydar | evan: hows the C++ implementation coming along? |
| 22:12:27 | seydar | are there any major differences you're making? |
| 22:13:01 | drbrain | tests |
| 22:13:04 | drbrain | :) |
| 22:13:07 | evan | yeah, tests. |
| 22:13:15 | evan | the architecture is cleaner |
| 22:13:32 | seydar | actually, now that im taking a course thats on machines, i have about 73.π bajillion questions for you |
| 22:13:48 | evan | heh |
| 22:13:54 | seydar | ok |
| 22:13:58 | blakewatters leaves the room. | |
| 22:14:00 | evan | like what? |
| 22:14:06 | seydar | so do you implement pipelining? |
| 22:14:13 | evan | no |
| 22:14:14 | evan | course not. |
| 22:14:17 | seydar | (i've glanced at the bluebook) |
| 22:14:20 | Defiler | We don't have multiple execution units |
| 22:14:24 | evan | no VM does. |
| 22:14:25 | Defiler | So there's nothing to pipeline. Heh |
| 22:14:36 | seydar | Defiler: pipelining doesn't require multiple ALUs |
| 22:14:49 | Defiler | Well, it does require a clock, right? |
| 22:14:51 | evan | it requires parallel execution units though. |
| 22:14:53 | seydar | that would be superscalar (Tannenbaum, 257) and super awesome |
| 22:15:04 | evan | OS's are too far from the metal to do it properly. |
| 22:15:18 | Defiler | I mean, you would need to be able to pack the pipeline with useful instructions |
| 22:15:19 | evan | superscalar units in processers are truely parallel |
| 22:15:28 | seydar | are you kidding me? is everything i learned that englishtened me totally useless this far up? |
| 22:15:30 | Defiler | and what could be more useful than the next instruction you plan to execute |
| 22:15:32 | fizx enters the room. | |
| 22:15:54 | evan | Defiler: GNU smalltalk has an instruction prefetch |
| 22:15:58 | Defiler | There aren't any 'bubbles' to fill with a pipeline, unless I am missing something fundamental |
| 22:16:03 | Defiler | Aah |
| 22:16:04 | evan | but it's unsure if it actually improves things. |
| 22:16:21 | evan | the goal instead is to eliminate bytecode dispatch |
| 22:16:28 | evan | then you get pipelining for free |
| 22:16:33 | benburkert enters the room. | |
| 22:16:41 | evan | because it's in the 'natural path' of the CPU |
| 22:17:11 | seydar | so is there any way to get legit concurrency this far up from the metal? Can C/C++/D do it? |
| 22:17:19 | seydar | this is a great question for the C/C++/D rooms... |
| 22:17:36 | evan | not in the same terms of a superscalar pipeline arch |
| 22:17:37 | evan | no. |
| 22:17:39 | evan | not possible. |
| 22:17:55 | evan | but you don't need to for those languages. |
| 22:17:55 | seydar | sdgsdklfjg. is it worth it trying to get close? |
| 22:18:11 | evan | there is no reason to if you generate machine code |
| 22:18:18 | evan | because thats automatically pipelined |
| 22:18:24 | evan | thats the whole point. |
| 22:18:38 | Defiler | Yeah, it doesn't make sense to pipeline multiple layers of the executing code, right? |
| 22:18:41 | evan | it executes the machine code the best way possible, which means pipelining |
| 22:18:51 | Defiler | In the end the CPU pipelines the machine instructions, so if those don't suck, you win for free |
| 22:19:02 | evan | seydar: it doesn't make sense |
| 22:19:09 | dgtized | evan: alright just pushed those changes, I still don't know why it only blew up for me, but at least it makes sense why it was blowing up |
| 22:19:15 | evan | because you'll ALWAYS be emulating a pipeline scheme over another pipeline scheme |
| 22:19:18 | evan | which just doesn't work. |
| 22:19:34 | evan | dgtized: yeah, we've fixed it :) |
| 22:19:47 | seydar | but thats only if you generate machine code. if you're generating bytecode, wouldn't it make tons of sense to?> |
| 22:19:53 | evan | the only way you'd do it for reals is to use FPGAs or something |
| 22:19:59 | Defiler | There's always machine code getting generated |
| 22:20:01 | evan | actually be AT the metal. |
| 22:20:18 | evan | seydar: the point is to figure out how to generate machine code from the bytecode |
| 22:20:25 | evan | thats the direction every VM goes |
| 22:20:32 | evan | all research points in that direction. |
| 22:20:57 | seydar | so that its Bytecode -> ASM ahead of time? |
| 22:21:08 | djwhitt | seydar: only the physical cpu can actually do parallel instuction execution |
| 22:21:14 | evan | by ahead of time, if you mean before you need to be running it, yes :) |
| 22:21:15 | Defiler | No, runtime is better than ahead of time |
| 22:21:17 | Defiler | faster |
| 22:21:25 | evan | ahead of time != compile time |
| 22:21:27 | evan | though |
| 22:21:41 | evan | delaying machine code generation as much as possible improves things |
| 22:21:44 | evan | because you have more info. |
| 22:21:51 | evan | this is JIT 101. |
| 22:21:55 | seydar | on a slightly unrelated note, rubinius now works again, but it took a while to load irb |
| 22:22:29 | seydar | evan: whoa there. that doesn't come till spring of '09 |
| 22:22:35 | evan | :D |
| 22:22:36 | seydar | compilers with bill mckeen |
| 22:22:46 | evan | Big McKeen! |
| 22:22:47 | evan | he sounds fun. |
| 22:22:54 | seydar | he wrote the matlab compiler |
| 22:22:58 | fizx leaves the room. | |
| 22:23:02 | seydar | btw, you all suck because you all make me mega sad |
| 22:23:06 | evan | my CPU design teacher was o/~ AAAWEEESOOOME o/~ |
| 22:23:12 | evan | puuvada |
| 22:23:17 | evan | he's the fucking man. |
| 22:23:29 | evan | best college class I took. |
| 22:23:41 | dbussink | matlab brings back my master project memories :P |
| 22:23:43 | seydar | CPU design is with sean smith who rocks my socks off and back on. |
| 22:23:55 | evan | seydar: none of this is wasted info |
| 22:24:04 | dbussink | really nasty for an it guy to work with math oriented programming where people start to count at 1 |
| 22:24:19 | evan | understanding CPU design gives you a lot of perspective |
| 22:24:51 | seydar | evan: it is so incredibly enlighting. we're building a full computer, keybaord CPU memory RAM everything ground up in logicworks using gates. |
| 22:25:09 | evan | nice |
| 22:25:14 | evan | we did the same |
| 22:25:15 | evan | in powerview. |
| 22:25:18 | seydar | ok so back to the topic at hand |
| 22:25:27 | evan | we designed a MIPS processor in powerview |
| 22:25:55 | evan | MIPS: The Sane Instruction Set |
| 22:25:59 | evan | should be it's slogan. |
| 22:26:10 | wvdschel enters the room. | |
| 22:26:11 | seydar | so there is no way to do pipelining, superscalarosity, caching or anything? |
| 22:26:21 | evan | we do cache |
| 22:26:25 | evan | but not the same as a CPU does. |
| 22:26:40 | evan | well, maybe you could map it to CPU caches in some way |
| 22:26:40 | seydar | well thus ends my life. |
| 22:26:50 | evan | in terms of L1, L2, L3, RAM fill |
| 22:26:56 | tarcieri | *boggle* |
| 22:27:05 | macournoyer leaves the room. | |
| 22:27:06 | tarcieri | what are you trying to do, keep the CPU's execution units busy? |
| 22:27:12 | evan | SendSite's are L1, GlobalCache is L2, Hierarchy is RAM |
| 22:27:43 | evan | tarcieri: yeah, "move this pile of bits over here. and when you're done, you're going to move them back." |
| 22:28:17 | tarcieri | Threads are a nice way to do that, particularly on architectures which have multiple decoders per CPU core |
| 22:28:32 | tarcieri | which includes the newest family of Intel processors |
| 22:29:14 | MenTaLguY | up to a point |
| 22:29:32 | MenTaLguY | cache issues between multiple threads can be a problem for hyperthreading though |
| 22:29:40 | evan | to make things fast, you want to improve execution transparency |
| 22:29:44 | evan | so the CPU can do most of the work |
| 22:29:55 | tarcieri | The original "HyperThreading" was a hack around the P4's pipeline being too long for its branch predictor to make efficient |
| 22:29:58 | evan | bytecode is bad in those terms because it hides execution flow from the CPU |
| 22:30:33 | evan | tarcieri: right, so they just wired some L1 on to flush and load quickly |
| 22:30:59 | tarcieri | they added another decode pipeline because its execution units kept getting starved as it refilled the pipeline |
| 22:31:30 | evan | seydar: don't forget that, in a physical CPU, when the clock ticks, thousands of parallel mechanisms can run |
| 22:31:40 | mapar1 leaves the room. | |
| 22:31:43 | evan | so for every clock tick, each execution unit in the CPU can perform an operation |
| 22:31:52 | antares enters the room. | |
| 22:31:52 | evan | if there are 40 stages, thats 40 parallel operations. |
| 22:32:30 | evan | but those are stages like loading a register from cache |
| 22:32:32 | seydar | so there is no speed increase one can get by designing whats like an actual CPU as opposed to following the bluebook? |
| 22:32:37 | evan | or perform a simple math operation |
| 22:32:40 | evan | performing. |
| 22:32:46 | evan | seydar: no |
| 22:32:57 | evan | because you're hiding the execution flow from the CPU |
| 22:33:04 | evan | making the CPU do more work. |
| 22:33:09 | seydar | ok, i *kinda* understand |
| 22:33:12 | seydar | ok now i understand |
| 22:33:15 | Defiler | If you plan to implement your own machine code generation, then maybe it might |
| 22:33:26 | evan | Defiler: not really |
| 22:33:40 | Defiler | Not faster, just perhaps easier to implement |
| 22:33:45 | evan | machine code is still like 3 steps removed from a 40 stage pipeline |
| 22:33:50 | Defiler | true |
| 22:33:57 | evan | there is still the microcode operations that are derived from the machine code |
| 22:33:58 | tarcieri | heh, especially on x86 |
| 22:34:01 | evan | then instruction reordering |
| 22:34:04 | evan | then caching |
| 22:34:06 | evan | then execution |
| 22:34:10 | evan | then a nap in the shade. |
| 22:34:28 | djwhitt | seydar: the CPU does all the crazy stuff because it's trying to execute serial code in parallel. if you're not at the actual hardware level there's no way to actually execute instructions in parallel like that |
| 22:34:50 | seydar | djwhitt: way to make me cry |
| 22:35:02 | seydar | the world is so impure!!! i want my hardware |
| 22:35:11 | tarcieri | if you have a VM with multiple hardware threads it can take advantage of SMT |
| 22:35:14 | evan | now you see why hardware guys and software guys are so different |
| 22:35:16 | Defiler | This is why Von Neumann was sad that nobody made his design obsolete |
| 22:35:19 | evan | they operate at completely different levels. |
| 22:35:39 | evan | Defiler: a friend of mine works for a switch vendor that makes clockless switches |
| 22:35:48 | evan | so there are some non-Von Neumman execution engines |
| 22:35:50 | Defiler | So cool |
| 22:35:57 | Defiler | clocks are lame =( |
| 22:36:20 | evan | clocks are a bit like a switch dispatch in a VM |
| 22:36:26 | evan | really easy at first |
| 22:36:28 | evan | but limiting. |
| 22:36:36 | mernen enters the room. | |
| 22:36:39 | seydar | evan: does rubinius do dynamic branching? |
| 22:36:50 | gramos enters the room. | |
| 22:36:53 | evan | we have superscalar, pipelining archs BECAUSE of clocks. |
| 22:37:11 | evan | seydar: i don't even know what that would be in software terms. |
| 22:37:17 | antares leaves the room. | |
| 22:37:20 | twbray leaves the room. | |
| 22:37:24 | antares enters the room. | |
| 22:38:10 | seydar | evan: how rubinius is superscalar sorta eludes me. any docs i should read or could you explain? |
| 22:38:20 | djwhitt | seydar: to optimize this stuff at the VM level you try to expose as much program structure to the underlying hardware as possible |
| 22:38:30 | vertiginous enters the room. | |
| 22:38:37 | dysinger_ enters the room. | |
| 22:38:48 | djwhitt | seydar: so that the hardware itself can do branch prediction etc. |
| 22:38:54 | evan | right |
| 22:38:56 | kw enters the room. | |
| 22:39:05 | seydar | how do you expose details to the hardware? |
| 22:39:11 | Defiler | Are trace trees the software equivalent? |
| 22:39:12 | evan | a good example is that x86 is highly optimized internall for call/ret instruction flow now. |
| 22:39:41 | evan | seydar: you translate the work you would do in bytecode into machine |
| 22:39:46 | evan | and have the CPU execute it natively |
| 22:39:54 | evan | Defiler: of branch prediction? maybe |
| 22:40:07 | evan | you could probably put them in the same truck sized bin |
| 22:40:49 | seydar | whoa. so rubinius gets its bytecode into machine code? or is that just what you'd _have_ to do? |
| 22:41:09 | djwhitt | seydar: it doesn't ... yet ... (at least as far as I know) |
| 22:41:41 | seydar | is it possible/reasonable to compile _some_ things to ASM and have those executed as needed? |
| 22:41:55 | evan | seydar: we don't yet |
| 22:41:57 | evan | but thats a goal |
| 22:41:58 | seydar | Randall Thomas told me about some VMs that are hacky in that they do that |
| 22:42:07 | evan | for making a VM fast. |
| 22:42:15 | evan | i'd love to loose the term VM. |
| 22:42:23 | evan | because it's a misnomer |
| 22:42:34 | Defiler | Hrm.. what would that even look like inside Rubinius? |
| 22:42:35 | evan | Execution Environment is a better term |
| 22:42:37 | evan | but that will never stick. |
| 22:42:55 | Defiler | There's so much crap we need to execute to run a Ruby method |
| 22:43:12 | Defiler | The naive approach would generate an insane amount of duplicate code, it seems to me |
| 22:43:20 | evan | well, my current thinking is the LLVM microthread arch |
| 22:43:32 | evan | nah |
| 22:43:39 | evan | not insane ammounts. |
| 22:43:51 | evan | you'd generate a chunk of machine code for each type specialized method |
| 22:44:05 | evan | you do that up front |
| 22:44:10 | evan | not right before you need to execute |
| 22:44:14 | evan | er. |
| 22:44:20 | evan | you can do it right before |
| 22:44:22 | evan | but you cache it |
| 22:44:23 | evan | and reuse it. |
| 22:44:26 | Defiler | Aah, so you would jump into it |
| 22:44:30 | Defiler | rather than emitting it again and again |
| 22:45:59 | evan | course |
| 22:46:04 | evan | you can't not cacheit |
| 22:46:09 | ShayArnett enters the room. | |
| 22:46:21 | Defiler | Well, you would willfully not cache it if you wanted :) |
| 22:46:23 | seydar | so are you looking to tie this into LLVM? |
| 22:46:23 | evan | unless you're on the infinite machine. |
| 22:46:36 | ezmobius | rbxEE the rubinius Execution Environment |
| 22:46:48 | evan | in which case, you simply generate all possible programs up front |
| 22:46:51 | evan | and all possible results. |
| 22:46:57 | evan | and just return the right one |
| 22:46:59 | Defiler | haha well, I meant at runtime |
| 22:47:03 | evan | all programs because O(log n) |
| 22:47:03 | Defiler | converting bytecode into machine code, say |
| 22:47:07 | evan | s/because/become/ |
| 22:47:19 | evan | ezmobius: :) |
| 22:47:25 | evan | seydar: considering it, yes. |
| 22:47:59 | ShayArnett leaves the room. | |
| 22:48:33 | benstiglitz enters the room. | |
| 22:48:51 | seydar | ok |
| 22:49:19 | seydar | so in my young and ambitious mind, i thought about either generating D code to use llvm, or just generate D code from Duby |
| 22:49:37 | edwardam | what is LLVM ? |
| 22:49:47 | evan | seydar: why D? |
| 22:50:04 | evan | edwardam: http://llvm.org/ |
| 22:50:23 | seydar | D because it is compilable and has an imperative nature AND OOP |
| 22:50:24 | benstiglitz leaves the room. | |
| 22:50:31 | seydar | also because it is garbage collected |
| 22:50:43 | seydar | if we did LLVM we'd have to write our own GC again |
| 22:50:48 | evan | nah |
| 22:51:00 | evan | i've worked out a way to not have to |
| 22:51:03 | evan | plus LLVM has GC hooks |
| 22:51:09 | evan | so we could use the GC we already have |
| 22:51:20 | seydar | is it generational. btw? |
| 22:51:26 | dgtized_ enters the room. | |
| 22:51:43 | evan | yeah |
| 22:52:02 | benstiglitz enters the room. | |
| 22:52:23 | benstiglitz leaves the room. | |
| 22:52:28 | seydar | sweet. thats the new hotness, right? |
| 22:52:32 | benstiglitz enters the room. | |
| 22:52:38 | evan | no |
| 22:52:39 | tarcieri | new? |
| 22:52:43 | evan | been generational for years now. |
| 22:52:58 | seydar | i know rubinius has, but has the rest of the world? |
| 22:53:00 | seydar | oh well. |
| 22:53:08 | seydar | how do you want to link into LLVM? |
| 22:53:15 | seydar | D has bindings to it, btw |
| 22:53:23 | seydar | CLEAN COMPLETE bindings |
| 22:53:28 | evan | we're not using D. |
| 22:53:29 | loincloth enters the room. | |
| 22:54:00 | evan | anyway, the idea is to translate the bytecode into a simple series of calls for each instruction |
| 22:54:15 | tarcieri | doesn't C++ also have clean, complete, first-class bindings? :) |
| 22:54:19 | evan | handling the goto instructions specially |
| 22:54:27 | evan | then you just tell LLVM to optimize and inline |
| 22:54:34 | tarcieri | that will be so awesome with ragel |
| 22:54:43 | evan | it inlines all the instruction code directly |
| 22:54:45 | evan | removing the call |
| 22:54:54 | evan | so the upfront work for us is very small |
| 22:54:55 | moofbong leaves the room. | |
| 22:55:04 | evan | just a loop over the bytecode, emitting call instructions |
| 22:55:08 | evan | and let LLVM do all the hard work. |
| 22:56:09 | djwhitt | is fascinated by this LLVM idea ... |
| 22:56:24 | djwhitt | probably because LLVM is just kind of a magic black box to me at this point |
| 22:56:28 | djwhitt | I know very little about it |
| 22:56:36 | evan | i wrote up a test of this idea |
| 22:56:42 | evan | using i 3 instruction VM |
| 22:56:53 | seydar | evan: so is a version of Duby that emits D code out of the question? |
| 22:56:54 | evan | it has set/add/show |
| 22:57:01 | jp_tix | FLOSS Weekly interviews Dan Ingalls, if you guys haven't seen it: http://www.twit.tv/floss29 |
| 22:57:03 | evan | worked great |
| 22:57:17 | djwhitt | I guess what I really don't grasp is what part of the VM would LLVM replace ... or is that the wrong way of thinking about it |
| 22:57:18 | evan | seydar: i don't see a reason for rubinius to use D at all. |
| 22:57:27 | evan | seydar: and I see a number of reasons not to. |
| 22:57:39 | evan | djwhitt: don't think about it that way |
| 22:57:50 | evan | it's not a either/or question |
| 22:57:54 | evan | LLVM augments what we already have |
| 22:58:03 | tarcieri | hotspotting |
| 22:58:03 | evan | just providing yet another very fast way of executing bytecode |
| 22:58:08 | djwhitt | yeah, I think that's what I don't get |
| 22:58:15 | evan | by eliminating bytecode dispatch overhead entirely |
| 22:58:21 | MenTaLguY | very breifly |
| 22:58:25 | djwhitt | any good articles/docs you could point me to? |
| 22:58:26 | MenTaLguY | LLVM = JIT capability |
| 22:58:27 | MenTaLguY | that's all |
| 22:58:30 | evan | MenTaLguY: yep |
| 22:58:57 | djwhitt | ah, I probably just need to dig through some LLVM docs to understand it better |
| 22:59:03 | djwhitt | it seems like it does a bit of everything |
| 22:59:04 | evan | jp_tix: nice! thanks! |
| 22:59:23 | evan | i should do a short blog about about the micro VM a did using LLVM |
| 22:59:26 | MenTaLguY | it's a pretty general framework for building JIT-capable compilers/interpreters |
| 22:59:31 | MenTaLguY | evan: yes, you should |
| 22:59:37 | jp_tix | evan: they're trying to get alan kay on soon to |
| 22:59:38 | evan | it just takes an int[] in |
| 22:59:46 | evan | and executes in using JIT |
| 23:00:51 | jp_tix | s/to/too |
| 23:01:01 | vertiginous leaves the room. | |
| 23:02:21 | djwhitt | hehe I love the LLVM docs page. it's like a list of thesis papers for people who have worked on the project |
| 23:02:42 | dgtized leaves the room. | |
| 23:03:25 | obiejuan leaves the room. | |
| 23:04:17 | blakewatters enters the room. | |
| 23:05:47 | seydar | so is work actively being done on Duby? |
| 23:06:11 | djwhitt | seydar: you'd probably have to ask headius |
| 23:06:13 | edwardam | evan: so will rubinius be (at least partly) an LLVM front end? |
| 23:06:20 | djwhitt | seydar: I haven't heard anything about it for a while |
| 23:06:35 | evan | edwardam: yeah, you'd call it that. |
| 23:07:04 | edwardam | wonders if there is an LLVM IR to GCC IR converter. |
| 23:07:26 | MenTaLguY | there's llvm-gcc which is not exactly what you want |
| 23:07:27 | evan | there is no GCC IR |
| 23:07:30 | evan | but you can do |
| 23:07:38 | evan | llc -march=c <bitcode file> |
| 23:07:47 | evan | and LLVM will output C for the bitecode |
| 23:07:52 | evan | as a 'portable assembly' |
| 23:08:11 | edwardam | heh ... Minor Features: Includes support for Accurate Garbage Collection |
| 23:08:44 | seydar | heading out. evan, you have singlehandedly crush my hopes and dreams. |
| 23:08:48 | seydar | take it easy everyone |
| 23:08:55 | seydar leaves the room. | |
| 23:09:24 | djwhitt | evan: so am I thinking about this correctly, the rbx instructions would basically be implemented in terms of LLVM bytecode? |
| 23:09:39 | evan | no |
| 23:09:49 | djwhitt | heh, ok |
| 23:10:01 | evan | 2 different sets entirely |
| 23:10:11 | evan | there would be a piece of code that sits inbetween them |
| 23:10:16 | evan | translating between them |
| 23:10:32 | evan | Rubinius bytecode is really nice because it's a very simple, very basic description of what work should be done |
| 23:11:10 | djwhitt | ah, maybe I just phrased my question poorly... |
| 23:11:37 | edwardam | LLVM has a Cell SPU backend |
| 23:11:49 | djwhitt | I was thinking instead of C bodies for the rbx instructions you'd essentially have something that takes the rbx instruction and outputs LLVM instructions |
| 23:12:01 | djwhitt | and then feeds them to LLVM for execution |
| 23:14:16 | djwhitt | that's what I meant by "implemented in terms of" |
| 23:14:39 | evan | djwhitt: no need to |
| 23:14:43 | evan | what you do is generate C |
| 23:14:47 | evan | and hand that to LLVM |
| 23:14:52 | djwhitt | ah, I see |
| 23:14:55 | evan | and have it create bitcode from that C |
| 23:15:06 | evan | you then later combine it with more LLVM IR you generate at runtime |
| 23:15:10 | evan | and having it optimize them together |
| 23:15:14 | djwhitt | gotcha ... starting to make sense |
| 23:15:15 | evan | letting it inline, etc. |
| 23:15:53 | djwhitt | so the bodies of the instructions stay the same ... you just kind of hand them off to LLVM to handle ? |
| 23:15:55 | evan | for example, in rubinius bytecode you'd have |
| 23:16:03 | evan | push_ivar :@blah |
| 23:16:07 | evan | that would get turned into |
| 23:16:38 | evan | call %insn_push_ivar, literals[0] |
| 23:16:46 | evan | in LLVM IR (that syntax is wrong, but you get the idea) |
| 23:16:51 | evan | you then tell LLVM to optimize that |
| 23:17:00 | djwhitt | neeto |
| 23:17:03 | evan | and it removes the call and just sticks the body of the insn_push_ivar instruction right there |
| 23:17:10 | wvdschel leaves the room. | |
| 23:18:03 | djwhitt | hmm... so LLVM handles dispatch |
| 23:18:16 | djwhitt | and does whatever is appropriate for the underlying architecture |
| 23:19:19 | dbussink | evan: any idea on the cause of the linux failures? |
| 23:19:21 | evan | it uses it's builtin toolchain to execute that |
| 23:19:50 | evan | dbussink: not off hand, no. |
| 23:20:13 | benburkert leaves the room. | |
| 23:20:29 | djwhitt | evan: LLVM wouldn't help with inlining of Ruby methods at all would it? |
| 23:20:35 | evan | djwhitt: no |
| 23:20:37 | evan | it wouldn't. |
| 23:20:41 | evan | thats another activity all together. |
| 23:20:48 | djwhitt | yeah, that's what I was thinking |
| 23:20:49 | evan | it can assist |
| 23:21:01 | evan | but it doen't do it without significant additional information |
| 23:21:39 | djwhitt | evan: cool, thanks for the explanation. makes a lot more sense to me now |
| 23:21:43 | evan | cool. |
| 23:23:57 | pauldix leaves the room. | |
| 23:28:59 | RyanTM leaves the room. | |
| 23:29:12 | octopod enters the room. | |
| 23:30:36 | AndrewO enters the room. | |
| 23:31:42 | yugui enters the room. | |
| 23:32:02 | benstiglitz leaves the room. | |
| 23:34:01 | RyanTM enters the room. | |
| 23:36:55 | AndrewO leaves the room. | |
| 23:40:37 | sambo82 enters the room. | |
| 23:40:45 | enebo leaves the room. | |
| 23:42:03 | Silva enters the room. | |
| 23:48:49 | headius enters the room. | |
| 23:50:41 | AndrewO enters the room. | |
| 23:53:51 | RyanTM leaves the room. | |
| 23:58:03 | RyanTM enters the room. | |
| 23:58:03 | sambo82_ enters the room. | |
| 23:58:03 | sambo82 leaves the room. | |
| 23:58:04 | yugui leaves the room. |