Show enters and exits. Hide enters and exits.
| 00:00:47 | dbussink | for who's interested (or here in the first place ;) ) |
| 00:00:48 | dbussink | http://pastie.caboo.se/195279 |
| 00:05:39 | Maledictus leaves the room. | |
| 00:07:54 | Cosmos95 enters the room. | |
| 00:07:56 | joachimm_ leaves the room. | |
| 00:12:30 | joachimm leaves the room. | |
| 00:13:19 | benburkert enters the room. | |
| 00:19:10 | lopex leaves the room. | |
| 00:24:23 | rue | Well, "Iron Man" was good |
| 00:25:28 | dbussink | rue: not too campy? |
| 00:25:48 | rue | Not at all. And Downey was great |
| 00:27:01 | dbussink | ah, maybe i'll have to check it out then too |
| 00:27:12 | dbussink | really ought to get to bed now first |
| 00:27:25 | dbussink | before i switch to rue standard time :P |
| 00:28:01 | rue | Cozy in Ruechtenstein |
| 00:29:11 | qwert666_ leaves the room. | |
| 00:29:20 | dbussink | but good to see that my optimizations are working now :) |
| 00:30:07 | dbussink | hmm, some ci failures :( |
| 00:32:31 | benburkert leaves the room. | |
| 00:55:14 | Yurik leaves the room. | |
| 00:55:25 | Yurik enters the room. | |
| 00:57:46 | sambo82 leaves the room. | |
| 01:00:41 | jtoy enters the room. | |
| 01:01:08 | NoKarma leaves the room. | |
| 01:06:35 | dbussink | rue: thank god for the spec suite :) |
| 01:06:50 | dbussink | rue: got the bug out that the optimisation had :) |
| 01:08:23 | Cosmos95 leaves the room. | |
| 01:10:17 | Cosmos95 enters the room. | |
| 01:10:48 | boyscout | 1 commit by Dirkjan Bussink |
| 01:10:49 | boyscout | * Optimized integer calculations involving Bignum and Fixnum; 7045911 |
| 01:11:29 | dbussink | time for bed now! |
| 01:11:29 | dbussink | nite |
| 01:14:09 | jtoy leaves the room. | |
| 01:17:25 | crafterm enters the room. | |
| 01:23:13 | rubuildius_amd64 | Dirkjan Bussink: 704591108; 2107 files, 6859 examples, 25050 expectations, 0 failures, 0 errors |
| 01:34:21 | rubuildius_ppc | Dirkjan Bussink: 704591108; 2107 files, 6861 examples, 25076 expectations, 0 failures, 0 errors |
| 01:48:06 | jtoy enters the room. | |
| 02:06:35 | jtoy leaves the room. | |
| 02:10:44 | jtoy enters the room. | |
| 02:13:08 | m7d leaves the room. | |
| 02:23:44 | VVSiz_ enters the room. | |
| 02:40:14 | rubuildius_ppc leaves the room. | |
| 02:40:49 | rubuildius_ppc enters the room. | |
| 02:42:05 | VVSiz leaves the room. | |
| 02:43:43 | trythil_ enters the room. | |
| 02:43:43 | trythil leaves the room. | |
| 02:44:53 | Yurik leaves the room. | |
| 02:52:08 | nemerle enters the room. | |
| 02:55:12 | mkescher_ enters the room. | |
| 02:55:17 | rubuildius_ppc | Dirkjan Bussink: 704591108; 2107 files, 6861 examples, 25076 expectations, 0 failures, 0 errors |
| 02:56:47 | cored leaves the room. | |
| 03:04:32 | rue | Argh, the lambda thread again. |
| 03:05:56 | Cosmos95 leaves the room. | |
| 03:11:00 | evan | heh |
| 03:15:17 | headius enters the room. | |
| 03:16:39 | crafterm enters the room. | |
| 03:21:32 | evan | my my, dan berger has gotten so... negative. |
| 03:26:55 | trythil_ leaves the room. | |
| 03:27:05 | Packet_Monkey enters the room. | |
| 03:29:15 | rubuildius_ppc leaves the room. | |
| 03:29:47 | rubuildius_ppc enters the room. | |
| 03:41:19 | crafterm leaves the room. | |
| 03:47:28 | dysinger enters the room. | |
| 03:58:25 | trythil enters the room. | |
| 04:00:40 | Yurik enters the room. | |
| 04:04:43 | mkescher_ leaves the room. | |
| 04:29:14 | ShayArnett leaves the room. | |
| 04:53:26 | benburkert enters the room. | |
| 04:58:43 | benburkert leaves the room. | |
| 05:02:43 | Packet_Monkey leaves the room. | |
| 05:04:32 | benburkert enters the room. | |
| 05:16:59 | benburkert leaves the room. | |
| 05:22:02 | TheVoice enters the room. | |
| 05:32:53 | headius | evan: link? |
| 05:43:57 | trythil_ enters the room. | |
| 05:43:57 | trythil leaves the room. | |
| 06:04:11 | rue | headius, evan: http://www.oreillynet.com/ruby/blog/2008/05/is_qwerty_harming_language_des.html |
| 06:04:16 | rue | He picked up |
| 06:06:53 | trythil | hmm, I thought that APL tried that and it ended up not quite working |
| 06:13:13 | headius | perhaps sapphire will be programmable entirely in untypable characters |
| 06:17:01 | evan | headius: perhaps |
| 06:17:04 | evan | headius: link to which? |
| 06:17:25 | headius | berger being negative |
| 06:17:50 | evan | oh. |
| 06:17:55 | evan | on ruby-core |
| 06:18:08 | mapar leaves the room. | |
| 06:18:16 | evan | maybe i'm reading into it, but his tone sounds very negative. |
| 06:21:28 | headius | ahh, ok |
| 06:22:42 | benburkert enters the room. | |
| 06:26:38 | headius | honestly making lambda a keyword still seems the most sane to me |
| 06:43:35 | benburkert leaves the room. | |
| 06:56:45 | xhanjian_ enters the room. | |
| 07:02:38 | xhanjian leaves the room. | |
| 07:08:26 | Skip enters the room. | |
| 07:26:26 | headius leaves the room. | |
| 07:31:20 | headius enters the room. | |
| 07:35:19 | joachim__ leaves the room. | |
| 07:35:43 | stepheneb leaves the room. | |
| 07:41:51 | headius_ enters the room. | |
| 07:43:03 | headius_ leaves the room. | |
| 07:49:10 | trythil_ leaves the room. | |
| 07:49:26 | ezmobius leaves the room. | |
| 07:56:00 | headius_ enters the room. | |
| 08:00:05 | headius leaves the room. | |
| 08:00:31 | headius enters the room. | |
| 08:00:31 | dewd enters the room. | |
| 08:02:55 | qwert666 enters the room. | |
| 08:04:08 | imajes enters the room. | |
| 08:06:48 | gnufied enters the room. | |
| 08:09:44 | imajes leaves the room. | |
| 08:10:10 | NoKarma enters the room. | |
| 08:15:29 | dbussink | morning |
| 08:15:56 | thehcdreamer enters the room. | |
| 08:17:10 | headius_ leaves the room. | |
| 08:19:00 | NoKarma | morning |
| 08:25:11 | dbussink | evan: still there? |
| 08:39:08 | evan | yep |
| 08:39:09 | evan | sup? |
| 08:41:33 | mkrauskopf enters the room. | |
| 08:54:16 | mutle enters the room. | |
| 08:56:51 | danlucraft enters the room. | |
| 08:57:42 | imajes enters the room. | |
| 08:58:32 | imajes leaves the room. | |
| 08:59:06 | imajes enters the room. | |
| 09:06:25 | octopod enters the room. | |
| 09:10:13 | w1rele55 enters the room. | |
| 09:11:34 | jzj enters the room. | |
| 09:11:50 | jzj | lastest build error |
| 09:12:06 | jzj | Initializing mspec submodule... |
| 09:12:14 | jzj | git submodule init mspec |
| 09:12:23 | jzj | git: 'submodule' is not a git-command |
| 09:15:05 | benny enters the room. | |
| 09:16:36 | NoKarma | jzj: do you have the latest git version? |
| 09:21:17 | mutle leaves the room. | |
| 09:21:37 | mutle enters the room. | |
| 09:23:07 | jzj | yeah |
| 09:23:12 | jzj | i think so |
| 09:23:20 | jzj | no |
| 09:23:21 | jzj | just a min |
| 09:23:40 | jzj | 1.5.2.5 |
| 09:24:57 | jzj | oops, this is a 1.5.3 feature |
| 09:25:02 | jzj | got it |
| 09:26:12 | imajes_ enters the room. | |
| 09:28:16 | dbussink | evan: ah, i was out for a shower |
| 09:28:39 | dbussink | evan: i was wondering about the new vm, i saw nothing related to fixnum / bignum overflowing etc |
| 09:28:47 | dbussink | you want to do that in cpp or in ruby? |
| 09:29:21 | dbussink | i was hacking a bit to optimize that stuff in the current vm |
| 09:31:00 | xmlhacker leaves the room. | |
| 09:31:46 | dbussink | evan: also wondering what your knowledge on libtommath is, i might want to change something in there that makes the optimizations i did a lot easier |
| 09:32:39 | imajes leaves the room. | |
| 09:33:21 | xmlhacker enters the room. | |
| 09:43:11 | headius leaves the room. | |
| 09:57:19 | brainopia enters the room. | |
| 10:00:34 | brainopia leaves the room. | |
| 10:00:52 | gnufied_ enters the room. | |
| 10:01:28 | gnufied leaves the room. | |
| 10:10:56 | scoopr | hm, why isn't the git repo added to rubyspec redmine? |
| 10:11:10 | jtoy leaves the room. | |
| 10:14:23 | brainopia enters the room. | |
| 10:17:55 | dbussink | scoopr: you should ask brixen, but i guess he's asleep atm |
| 10:18:53 | jtoy enters the room. | |
| 10:23:18 | NoKarma | scoopr: rubyspec.org is still a work-in-progress |
| 10:23:24 | scoopr | aight |
| 10:23:30 | NoKarma | scoopr: I think he'll set that up sooner or later |
| 10:29:36 | dbussink | anyone in with some reasonably in depth knowledge of libtommath? |
| 10:35:31 | BlackEdder enters the room. | |
| 10:38:48 | rby enters the room. | |
| 10:42:57 | jzj | can i disable the git submodule |
| 10:43:16 | jzj | im using proxy which doesn't support Git |
| 10:45:51 | dbussink | but how did you get the code then? |
| 10:46:00 | dbussink | nightly tarball? |
| 10:46:27 | jzj | using http_proxy |
| 10:46:44 | jzj | but githup doesn't have http one |
| 10:46:51 | jzj | it's using git://.... |
| 10:48:00 | jzj | http://git.rubini.us/code and git://git.rubini.us/code are the same repo |
| 10:48:51 | jzj | http://github.com/brixen/mspec.git and git://github.com/brixen/mspec.git are not |
| 10:56:30 | dbussink | jzj: and downloading it as a tarball through the github interface? |
| 11:02:49 | Maledictus enters the room. | |
| 11:07:12 | Blinchik leaves the room. | |
| 11:07:46 | jzj leaves the room. | |
| 11:19:05 | rubuildius_ppc leaves the room. | |
| 11:19:38 | rubuildius_ppc enters the room. | |
| 11:20:38 | mutle leaves the room. | |
| 11:27:37 | jtoy leaves the room. | |
| 11:29:27 | mutle enters the room. | |
| 11:30:03 | rubuildius_ppc leaves the room. | |
| 11:30:35 | rubuildius_ppc enters the room. | |
| 11:33:46 | dbussink | wished we had some more developers from europe |
| 11:40:05 | rubuildius_ppc leaves the room. | |
| 11:40:37 | rubuildius_ppc enters the room. | |
| 11:40:53 | mkrauskopf | Hi. Anybody able to clone Rubinius repo at the moment? |
| 11:41:07 | mkrauskopf | 'git clone git://git.rubini.us/code rubinius' fails with timeout for me, for last few hours |
| 11:41:15 | dbussink | the gitweb interface is up |
| 11:42:22 | mkrauskopf | Hmm, might local provider problem. |
| 11:42:33 | NoKarma | mkrauskopf: you could try the github repo, i think |
| 11:42:54 | NoKarma leaves the room. | |
| 11:45:57 | mkrauskopf | Thanks for the tip with github, that works. Still in the beginning with Rubinius.... |
| 11:48:31 | VVSiz | mkrauskopf: cloning the rubini.us repo work just fine here |
| 11:51:35 | VVSiz | (took about 2 mins to clone the whole repo) |
| 11:56:53 | mkrauskopf | VVSiz: I have cloned rubini.us for few weeks but stopped to work for me. But github works fine, so I'll stick with it. Supposing those two repos are practically the same. |
| 11:57:30 | VVSiz | mkrauskopf: yeah, they are exactly the same for all practical purposes, if you're in read-only mode |
| 11:58:38 | mkrauskopf | VVSiz: read-only is definitely the case for me ;) |
| 11:58:45 | VVSiz | :) |
| 11:58:58 | dbussink | VVSiz: you don't happen to know libtommath do you? |
| 11:59:19 | VVSiz | nope, no way :) |
| 11:59:42 | dbussink | too ba |
| 11:59:43 | dbussink | bad |
| 12:00:09 | dbussink | i've changed something in there and i think it's ok, but i'd love for someone to actually confirm that |
| 12:05:21 | VVSiz | dbussink: interesting, the first time I see that 'master' and 'github/master' differ: http://git.rubini.us/?p=code;a=summary |
| 12:05:58 | dbussink | VVSiz: hmm, maybe evan didn't add my ssh key to his project |
| 12:06:17 | dbussink | VVSiz: my user to the repo i mean |
| 12:06:31 | dbussink | i usually use the rake tasks, so that should work |
| 12:09:26 | dewd leaves the room. | |
| 12:17:01 | benny leaves the room. | |
| 12:39:02 | ctennis enters the room. | |
| 12:42:34 | dewd enters the room. | |
| 12:43:58 | Blinchik enters the room. | |
| 12:44:06 | Blinchik_ enters the room. | |
| 12:44:21 | Blinchik_ leaves the room. | |
| 12:50:27 | jtoy enters the room. | |
| 12:58:17 | thehcdreamer_ enters the room. | |
| 13:08:09 | wdperson enters the room. | |
| 13:11:01 | thehcdreamer leaves the room. | |
| 13:14:06 | radarek enters the room. | |
| 13:16:58 | mkrauskopf leaves the room. | |
| 13:17:14 | mkrauskopf enters the room. | |
| 13:42:35 | blakewatters leaves the room. | |
| 14:00:28 | _mutle enters the room. | |
| 14:09:07 | blakewatters enters the room. | |
| 14:10:22 | benny enters the room. | |
| 14:14:16 | thehcdreamer__ enters the room. | |
| 14:15:24 | wmoxam leaves the room. | |
| 14:18:06 | mutle leaves the room. | |
| 14:22:00 | dbussink | hehe, just found an optimization that actually makes something slower :) |
| 14:30:44 | thehcdreamer_ leaves the room. | |
| 14:33:26 | AndrewO enters the room. | |
| 14:34:24 | moofbong enters the room. | |
| 14:37:41 | wmoxam enters the room. | |
| 14:43:15 | VVSiz leaves the room. | |
| 14:47:30 | trythil enters the room. | |
| 14:48:17 | trythil leaves the room. | |
| 15:07:46 | benburkert enters the room. | |
| 15:10:30 | Yurik leaves the room. | |
| 15:14:36 | shame leaves the room. | |
| 15:17:53 | dewd leaves the room. | |
| 15:18:30 | benny leaves the room. | |
| 15:21:43 | rby leaves the room. | |
| 15:22:13 | benburkert leaves the room. | |
| 15:23:46 | benny enters the room. | |
| 15:24:21 | benburkert enters the room. | |
| 15:34:16 | yipstar enters the room. | |
| 15:36:27 | ShayArnett enters the room. | |
| 15:40:06 | dysinger leaves the room. | |
| 15:45:20 | stepheneb enters the room. | |
| 15:48:23 | trythil enters the room. | |
| 15:52:56 | Yurik enters the room. | |
| 15:52:56 | thehcdreamer__ leaves the room. | |
| 15:58:09 | therealadam enters the room. | |
| 15:59:28 | nicksieger enters the room. | |
| 16:01:48 | jtoy leaves the room. | |
| 16:03:19 | benburkert leaves the room. | |
| 16:04:19 | benburkert enters the room. | |
| 16:09:34 | benstiglitz enters the room. | |
| 16:09:50 | dewd enters the room. | |
| 16:10:13 | dewd leaves the room. | |
| 16:13:06 | gnufied leaves the room. | |
| 16:13:21 | thehcdreamer enters the room. | |
| 16:15:05 | benburkert leaves the room. | |
| 16:18:17 | enebo enters the room. | |
| 16:18:31 | yugui leaves the room. | |
| 16:20:21 | yugui enters the room. | |
| 16:20:54 | dewd enters the room. | |
| 16:31:02 | ttmrichter leaves the room. | |
| 16:36:32 | shame enters the room. | |
| 16:46:59 | Defiler | We should figure out why our gem download speed is so bad |
| 16:48:45 | gnufied enters the room. | |
| 16:50:03 | yugui leaves the room. | |
| 16:52:52 | dbussink | Defiler: you know anything about libtommath? |
| 16:53:32 | Defiler | Some |
| 16:53:43 | dbussink | Defiler: and i was wondering why Type.object_kind_of? is 50% slower than Object#is_a? |
| 16:53:44 | Defiler | I had to read a bunch of it during the 64bit wars |
| 16:54:15 | dbussink | well, i changed the DIGIT_BIT value from 28 to 29 for 32 bits and from 60 to 61 for 64 bits |
| 16:54:20 | Defiler | We have a 'fast is_a?' that is used where possible |
| 16:54:27 | Defiler | Whoa why? |
| 16:54:34 | Defiler | That is bad |
| 16:54:35 | dbussink | because in that case it matches our own fixnums |
| 16:54:41 | dbussink | only locally |
| 16:54:44 | dbussink | i was testing with it |
| 16:54:53 | Defiler | Yeah.. that value is unrelated to our fixnums |
| 16:54:53 | dbussink | it makes some optimizations really easy to do |
| 16:54:59 | Defiler | and is crucial to the libtommath algorithms |
| 16:55:08 | Defiler | So be careful, at least |
| 16:55:31 | dbussink | well, it says: A "mp_digit" must be able to hold DIGIT_BIT + 1 bits |
| 16:55:33 | trythil leaves the room. | |
| 16:55:43 | dbussink | so that is still satisfied |
| 16:55:49 | dbussink | and it has a 31 bit mode too |
| 16:55:55 | Defiler | It has to be a multiple of four |
| 16:56:05 | trythil enters the room. | |
| 16:56:06 | dbussink | hmm, what depends on that? |
| 16:56:11 | Defiler | because the ints are procesed 4 bits at a time inside libtommath |
| 16:56:42 | dbussink | but i don't see anything additional for that 31 bit support |
| 16:57:15 | dbussink | and i've been testing it reasonably thorough and it all works ok |
| 16:57:18 | Defiler | check out mp_set_int |
| 16:58:12 | dbussink | hmm, but why is everything still working then? |
| 16:58:30 | Defiler | Dunno. Maybe I'm wrong |
| 16:59:04 | dbussink | Defiler: http://pastie.caboo.se/pastes/195279 |
| 16:59:12 | dbussink | those are some numbers only for * |
| 16:59:28 | dbussink | same optimization can be done for sub / add etc. |
| 16:59:54 | dbussink | basically comes down to using mp_mul_d if the second argument is a fixnum |
| 17:00:02 | dbussink | and not build a bignum and then do mp_mul |
| 17:00:15 | dbussink | shaves off 50% |
| 17:01:03 | dbussink | problem is that if the mp_digit is 28 bits, there is an exception if our fixnum is so large it uses 29 bits, so that would mean an exception for that case |
| 17:03:21 | Defiler | Why not just make ours 28 bits as well? |
| 17:04:27 | imajes leaves the room. | |
| 17:07:20 | lopex enters the room. | |
| 17:07:49 | Defiler | Haircut time. Back i a bit |
| 17:07:50 | dbussink | Defiler: dunno if we want to break with mri on that point |
| 17:07:53 | Defiler | We already have |
| 17:08:02 | Defiler | We use one more bit for tags already |
| 17:08:24 | dbussink | true, but that's transparant |
| 17:08:30 | dbussink | mri has 29 bit fixnums too |
| 17:09:11 | Defiler | Our max fixnum size is different than MRI's |
| 17:09:50 | Defiler | (2**29).class is Fixnum in MRI and Bignum in 32bit Rubinius |
| 17:10:30 | Defiler | MRI has 30 bit fixnums, unless I am much mistaken |
| 17:12:06 | dbussink | nope |
| 17:12:11 | dbussink | it's the same on both |
| 17:12:14 | dbussink | 2 bit tag |
| 17:12:16 | dbussink | 1 bit sign |
| 17:12:55 | dbussink | ah wait, no |
| 17:13:10 | dbussink | sorry, you're right |
| 17:13:16 | dbussink | so we could go down a bit |
| 17:13:55 | benburkert enters the room. | |
| 17:15:11 | mutle leaves the room. | |
| 17:18:31 | evan | allo. |
| 17:41:09 | benny leaves the room. | |
| 17:42:10 | dewd leaves the room. | |
| 17:44:14 | benny enters the room. | |
| 17:54:48 | imajes enters the room. | |
| 17:57:20 | benburkert leaves the room. | |
| 18:00:46 | benny leaves the room. | |
| 18:01:35 | joachimm enters the room. | |
| 18:02:50 | octopod leaves the room. | |
| 18:02:59 | mkrauskopf_ enters the room. | |
| 18:05:09 | mkrauskopf leaves the room. | |
| 18:19:24 | edwardam enters the room. | |
| 18:19:41 | edwardam | evan: ping ... if you got a sec for a dumb ruby question |
| 18:20:35 | dysinger enters the room. | |
| 18:23:33 | dbussink | evan: still there? |
| 18:23:45 | dbussink | what do you think of the discussion Defiler and i had? |
| 18:32:30 | imajes leaves the room. | |
| 18:32:55 | headius enters the room. | |
| 18:36:16 | joachimm leaves the room. | |
| 18:39:40 | eventualbuddha enters the room. | |
| 18:40:59 | Defiler | brixen: pingorama |
| 18:42:52 | eventualbuddha leaves the room. | |
| 18:45:14 | headius leaves the room. | |
| 18:47:03 | mapar enters the room. | |
| 18:47:21 | brixen | Defiler: pongeruma |
| 18:47:37 | VVSiz enters the room. | |
| 18:47:40 | Defiler | Want to help me tilt at the windmill of RSpec today? |
| 18:47:48 | brixen | heh |
| 18:47:49 | brixen | ok |
| 18:47:53 | Defiler | I think it reveals some instance_eval issues that will probably haunt us in Rails |
| 18:47:59 | brixen | yah |
| 18:48:23 | brixen | did we get this working? http://git.rubini.us/?p=code;a=shortlog;h=refs/heads/instance_eval |
| 18:48:25 | Defiler | I will paste up the spec/example run |
| 18:48:30 | brixen | k |
| 18:48:36 | dbussink | brixen: what do you think of the bignum discussion? |
| 18:48:44 | dbussink | brixen: i've been able to speed some stuff up |
| 18:48:50 | Defiler | brixen: It should work now. We should try it. Might be a simpler thing to examine |
| 18:49:05 | brixen | dbussink: where can I view the discussion? I saw your benches |
| 18:49:09 | headius enters the room. | |
| 18:49:16 | dbussink | just a small chat with Defiler |
| 18:49:26 | wycats leaves the room. | |
| 18:49:29 | brixen | le'me catch up on channel traffic |
| 18:49:34 | Defiler | brixen: http://pastie.org/195609 |
| 18:49:40 | headius leaves the room. | |
| 18:49:43 | dbussink | brixen: it's close to the end |
| 18:49:49 | Defiler | brixen: That is on rspec trunk |
| 18:50:10 | joachimm enters the room. | |
| 18:50:12 | headius enters the room. | |
| 18:52:16 | Defiler | brixen: Can't use the rake task as it stands (in rspec) because it has insane dependencies |
| 18:52:21 | Defiler | e.g. heckle |
| 18:53:02 | brixen | Defiler: hrm, yeah looks like still eval issues |
| 18:53:30 | Defiler | We need these dead, though, and we have the infrastructure now to fix them |
| 18:53:31 | brixen | is this rspec head or 1.1.3 or something else? |
| 18:53:35 | Defiler | Just need to come up with a simple repro |
| 18:53:38 | brixen | yep |
| 18:53:47 | Defiler | svn://rubyforge.org/var/svn/rspec/trunk/rspec |
| 18:53:51 | brixen | k |
| 18:53:56 | Defiler | I can switch to something else if you think it best |
| 18:53:58 | evan | yo |
| 18:54:09 | brixen | Defiler: no, that's fine, just want to be on the same page |
| 18:54:11 | brixen | evan: yo |
| 18:55:18 | benburkert enters the room. | |
| 18:56:15 | enebo leaves the room. | |
| 18:56:20 | brixen | dbussink: ok, I kinda follow. so the opts depend on changing the number of bits representing a bignum? |
| 18:56:54 | Defiler | it turns fixnums into a degenerate case of bignum, right? |
| 18:57:07 | brixen | hah, I just typed svn up in my rbx dir |
| 18:57:12 | brixen | smacks himself |
| 18:57:22 | brixen | Defiler: ok, I've got rspec trunk |
| 18:57:26 | Defiler | It should have a python-style "Did you mean 'exit()'" thing |
| 18:57:43 | brixen | heh, totally |
| 18:58:23 | brixen | Defiler: I'm pulling rbx, let me check that eval spec from the instance_eval branch |
| 18:58:50 | Defiler | k |
| 18:58:57 | brixen | Defiler: my concern is that we may need to change mspec to use instance_eval to spec some of these |
| 18:58:58 | Defiler | I'm working on chopping out a simple reproduction |
| 18:59:13 | brixen | since that spec in particular is not possible with block.call instead of instance_eval |
| 19:01:25 | Defiler | hrm.. why does attr_reader even work inside a describe block? |
| 19:01:35 | Defiler | What is 'self' these days inside a describe block in rspec trunk? |
| 19:01:37 | brixen | dbussink: oh, about the github -> lh reporting, I know they all show as me (or evan for rbx), but if it's useful to people, that's ok |
| 19:01:47 | brixen | dbussink: if it's too much noise, I can turn it off |
| 19:02:06 | brixen | Defiler: not sure |
| 19:02:55 | Defiler | holy shit |
| 19:02:56 | Defiler | Spec::Example::ExampleGroup::Subclass_1 |
| 19:03:02 | Defiler | is what 'p self' produces |
| 19:03:52 | Defiler | spec/spec/example/example_group_factory_spec.rb |
| 19:03:54 | Defiler | 43: example_group.name.should =~ /Spec::Example::ExampleGroup::Subclass_\d+/ |
| 19:04:01 | Defiler | space. madness. |
| 19:04:27 | wycats enters the room. | |
| 19:04:30 | brixen | hrm, is this just for isolation? |
| 19:04:56 | Defiler | Ok, so this happens when you 'create_example_group' is invoked |
| 19:05:15 | brixen | Defiler: I was thinking, running the rubyspecs with rspec might give insight to the issues as well |
| 19:05:21 | Defiler | Oh, indeed |
| 19:05:33 | brixen | Defiler: er, running rspec with rbx *on* the rubyspecs |
| 19:05:35 | dbussink | brixen: the idea is that we can use some shortcuts for adding fixnum to bignums |
| 19:05:37 | Defiler | You want to give that a spin while I try to follow the backtrace? |
| 19:05:43 | brixen | Defiler: sure |
| 19:05:58 | dbussink | brixen: libtommath has functions for that, that is 50% faster than constructing a bignum and then adding it |
| 19:06:03 | Defiler | I decided that rspec might be the best way to get rails running |
| 19:06:10 | Defiler | and I think I am right, based on the results here |
| 19:06:12 | brixen | dbussink: yeah, that would be a good opt, since when I worked on the float stuff, Fixnum to Bignum took way too long |
| 19:06:13 | dbussink | brixen: but the problem is that currently mp_digit is 28 bit by default |
| 19:06:27 | dbussink | brixen: i changed it to 29 to test it |
| 19:06:30 | evan | dbussink: if it passes the tests, go for it. |
| 19:06:37 | dbussink | brixen: doesn't break anything, but no guarantees |
| 19:06:40 | dbussink | evan: ok |
| 19:06:46 | brixen | dbussink: can you just mask? does it have to have exactly the same # of bits? |
| 19:06:49 | Defiler | shotgun should be totally fixnum_max agnostic now |
| 19:06:50 | thehcdreamer leaves the room. | |
| 19:06:58 | evan | dbussink: you should email tom and ask |
| 19:07:00 | Defiler | So you shouldn't need to fix anything |
| 19:07:02 | dbussink | brixen: well, in that case there is another exception |
| 19:07:03 | Defiler | Tom got rid of his email. |
| 19:07:09 | Defiler | Cannot be contacted |
| 19:07:14 | evan | see if he has any objections. |
| 19:07:16 | evan | really? |
| 19:07:17 | evan | :P |
| 19:07:19 | Defiler | Yep |
| 19:07:24 | dbussink | we can also change fixnum size to 28 bits instead of 29 |
| 19:07:34 | dbussink | dunno if we need more immediate space ;) |
| 19:07:41 | Defiler | I think we should change our fixnum size |
| 19:07:44 | Defiler | rather than altering ltm |
| 19:07:48 | brixen | yeah |
| 19:07:57 | Defiler | ltm is a crystal diadem |
| 19:08:45 | brixen | except that I wonder about weird stuff not handling the reduced range of Fixnum |
| 19:08:56 | Defiler | We already have a reduced Fixnum range |
| 19:08:57 | brixen | stuff that doesn't promote and deal with a number as a bignum |
| 19:09:09 | Defiler | So we're in that boat either way |
| 19:09:12 | brixen | yeah, probably should have specs for e.g. Array in those ranges |
| 19:09:17 | Defiler | We have some, actually |
| 19:09:22 | brixen | cool |
| 19:09:26 | Defiler | For when we were fixing 64bit |
| 19:09:38 | Defiler | We had to support platform constants that were bignums, etc |
| 19:10:02 | Defiler | We have a couple specs that will break, but they are rubinius specs not ruby specs |
| 19:10:11 | evan | dbussink: does your optimization requiring twiddling the inside of a mp_int? |
| 19:10:18 | evan | regardless of it's size |
| 19:10:25 | dbussink | evan: no |
| 19:10:35 | dbussink | evan: it uses stuff like mp_mul_d / mp_add_d |
| 19:10:51 | dbussink | those are already there for multiplying or adding with a mp_digit |
| 19:10:52 | evan | by casting a Fixnum as a mp_digit? |
| 19:10:58 | dbussink | yeah |
| 19:11:03 | evan | ok |
| 19:11:05 | dbussink | it's also an unsigned long |
| 19:11:12 | dbussink | but it truncates it at 28 bits |
| 19:11:18 | dbussink | or 60 on 64 bit platforms |
| 19:11:19 | evan | reducing Fixnum to be the same size as mp_digit makes sense |
| 19:11:28 | dbussink | testing atm |
| 19:11:29 | Defiler | I like the idea the more I think about it, personally |
| 19:11:48 | Defiler | We should lean as hard as possible on LTM |
| 19:11:52 | dbussink | evan: on something totally different |
| 19:12:00 | dbussink | evan: i was testing some more numeric stuff |
| 19:12:20 | dbussink | and it turns out that Type.object_kind_of is pretty slow compared to Object#is_a? |
| 19:12:22 | evan | Defiler: yeah, by having it be a degenerative case, it should improve things |
| 19:12:23 | dbussink | 50% slower |
| 19:12:27 | evan | dbussink: course |
| 19:12:28 | evan | it does more. |
| 19:12:32 | evan | it checks the return type |
| 19:12:47 | evan | and performs a conversion |
| 19:12:57 | evan | oh wait. |
| 19:13:02 | evan | what is object_kind_of? |
| 19:13:07 | Defiler | is_a? is inlined, right? |
| 19:13:07 | evan | this is the first i'm hearing of it. |
| 19:13:10 | evan | Defiler: no. |
| 19:13:16 | Defiler | which one is again? |
| 19:13:19 | evan | non. |
| 19:13:21 | evan | none. |
| 19:13:27 | Defiler | Huh. I thought we had a compiler opt for one of them? |
| 19:13:29 | dbussink | Type.object_kind_of |
| 19:13:30 | evan | we did |
| 19:13:32 | Defiler | aah |
| 19:13:33 | dbussink | Type.object_kind_of? |
| 19:13:33 | evan | i removed it |
| 19:13:35 | brixen | __kind_of__ ? |
| 19:13:39 | brixen | oh, you removed it? |
| 19:13:43 | dbussink | it's in bootstrap/kernel.rb |
| 19:13:48 | evan | because Rake overrides kind_of? |
| 19:13:56 | Defiler | *sigh* |
| 19:14:11 | evan | the underscore versions were never added, as I recall |
| 19:14:14 | evan | we could certainly add them. |
| 19:14:28 | Defiler | We use that method a LOT in the kernel |
| 19:14:28 | thehcdreamer enters the room. | |
| 19:14:34 | Defiler | We should make it fast as hell |
| 19:14:36 | macournoyer enters the room. | |
| 19:14:44 | dbussink | well, this being slow has for example as a result that the optimization in Numeric#** actually makes it slower |
| 19:14:54 | evan | dbussink: where is Type.object_kind_of? |
| 19:15:02 | evan | i don't have it in kernel/bootstrap/kernel.rb |
| 19:15:06 | dbussink | because it calls Type.coerce_to, which calls Type.object_kind_of? |
| 19:15:13 | dbussink | at the bottom here |
| 19:15:25 | evan | oh |
| 19:15:27 | evan | obj_kind_of |
| 19:15:47 | evan | ah |
| 19:16:06 | evan | the reason it exists is as a non overridable Object#kind_of |
| 19:16:10 | evan | because things can change kind_of |
| 19:16:18 | evan | and there are times where we need to see through such a change |
| 19:16:32 | dbussink | yeah, but can we make it faster? |
| 19:16:42 | dbussink | because it's called through Type.coerce_to very often |
| 19:16:57 | evan | Type.coerce_to should be moved into bootstrap |
| 19:16:59 | evan | and use assembly |
| 19:17:20 | brixen | evan: what am I missing? http://pastie.org/195616 |
| 19:17:31 | evan | ie, don't call obj_kind_of? in coerce_to, use assembly to access the kind_of instruction |
| 19:17:59 | EugZol leaves the room. | |
| 19:17:59 | evan | brixen: you're missing that i'm full of shit |
| 19:18:00 | evan | it would seem. |
| 19:18:03 | brixen | heh |
| 19:18:04 | brixen | ok |
| 19:18:08 | dbussink | but obj_kind_of? also is assembly isn't it? |
| 19:18:11 | brixen | cus I use __kind_of__ |
| 19:18:15 | evan | dbussink: yes, BUT |
| 19:18:22 | evan | it's assembly in another method |
| 19:18:29 | evan | thus the VM must look up obj_kind_of |
| 19:18:33 | evan | create a MethodContext |
| 19:18:36 | evan | switch to it |
| 19:18:36 | evan | run it |
| 19:18:40 | evan | return the vaule... |
| 19:18:52 | evan | if you use the instruction directly, none of that happens |
| 19:19:06 | evan | ie, if you, as brixen showed, use __kind_of__ |
| 19:19:13 | evan | which is wired up to use the instructions directly |
| 19:19:30 | TheVoice enters the room. | |
| 19:20:05 | dbussink | evan: http://pastie.caboo.se/195618 |
| 19:20:07 | evan | the __send__(meth) can be replaced by using assembly directly too |
| 19:20:16 | dbussink | those are some current numbers |
| 19:20:32 | evan | dbussink: add in Object.__kind_of__ |
| 19:20:36 | evan | to that benchmark |
| 19:20:38 | evan | and rerun |
| 19:20:45 | evan | er. Object#__kind_of__ |
| 19:21:25 | dbussink | evan: updated |
| 19:21:28 | dbussink | looks a lot better |
| 19:21:47 | dbussink | this is 1 million calls |
| 19:22:03 | evan | update the pastie |
| 19:22:09 | dbussink | it's updated |
| 19:22:24 | evan | not for me it's not |
| 19:22:25 | dbussink | the switch to 28 bit fixnums results in only two failures :) |
| 19:22:38 | dbussink | evan: cmd + r ? |
| 19:22:40 | evan | i still just see 2 entries |
| 19:22:46 | evan | nope |
| 19:22:51 | dbussink | weird stuff |
| 19:22:53 | evan | reload many times. |
| 19:22:58 | dbussink | i'll put up a new one |
| 19:23:00 | evan | use rafb.net |
| 19:23:07 | evan | or sure, anoth.r |
| 19:23:12 | dbussink | http://pastie.caboo.se/195622 |
| 19:23:29 | dbussink | the failing fixnum specs are the ones that test the thresholds :) |
| 19:23:35 | dbussink | so all looks green for 28 bit fixnums |
| 19:23:43 | evan | ok |
| 19:23:54 | evan | would ya mind pasting the diff before you commit it? |
| 19:23:57 | evan | i'd like to see how you're doing it |
| 19:24:48 | dbussink | yeah, just a min |
| 19:25:47 | Defiler | So.. "after" in RSpec is a singleton method on a dynamically-generated instance of Class |
| 19:25:51 | Defiler | That is hardcore |
| 19:26:07 | Defiler | I wonder why they did that.. just to allow 'attr_accessor' and whatnot? |
| 19:26:25 | dbussink | evan: http://pastie.caboo.se/195624 |
| 19:26:34 | Defiler | They should have called it "nightside of eden", not rspec |
| 19:28:13 | evan | dbussink: ah! |
| 19:28:13 | evan | ok. |
| 19:28:27 | evan | you didn't change the way a native_int becomes a Fixnum |
| 19:28:28 | brixen | Defiler: so, with instance_eval instead of block.call, we only have 6 failures in ci, which is much better than before |
| 19:28:38 | Defiler | cool |
| 19:28:39 | evan | just clamped it so that the highest bit in a Fixnum is never used. |
| 19:28:42 | Defiler | can you paste the failures? |
| 19:29:14 | dbussink | evan: what do you mean exactly? |
| 19:29:53 | evan | you pushed the FIXNUM_MAX down by one bit |
| 19:29:55 | brixen | Defiler: yeah, will do in a sec |
| 19:30:03 | dbussink | evan: oh that yeah |
| 19:30:20 | evan | so that nothing has to change |
| 19:30:25 | evan | except the code that detects overflow |
| 19:30:25 | dbussink | true |
| 19:30:28 | brixen | Defiler: it looks like this passes now, yay: http://git.rubini.us/?p=code;a=commitdiff;h=a0ce88b69d2eacde4e8097682b6cfb4e61cfee6d |
| 19:30:33 | dbussink | well, that uses these values |
| 19:30:36 | dbussink | so it's ok |
| 19:30:42 | dbussink | only the spec for the overflow |
| 19:30:43 | evan | yep |
| 19:30:53 | evan | i mean I2N() |
| 19:30:58 | evan | I2N() uses FIXNUM_MAX |
| 19:31:02 | evan | to decide what it should return |
| 19:31:11 | Defiler | brixen: excellent |
| 19:31:27 | evan | dbussink: go ahead and commit with the updated specs for cutoff |
| 19:31:35 | Blinchik leaves the room. | |
| 19:31:37 | evan | oh, you made them already |
| 19:31:39 | evan | commit away! |
| 19:31:44 | dbussink | yeah :) |
| 19:32:24 | Blinchik enters the room. | |
| 19:32:34 | Fullmoon enters the room. | |
| 19:34:02 | dbussink | hmm, strange |
| 19:34:12 | dbussink | 2 ** 28 - 1 => results in a bignum |
| 19:34:20 | dbussink | 2 ** 28 - 2 => results in a fixnum |
| 19:34:32 | Defiler | Well, take a look at the definition of FIXNUM_MAX |
| 19:34:36 | Defiler | That is expected |
| 19:35:15 | dbussink | but that wasn't the case when it was 29 bits |
| 19:35:23 | evan | should have been. |
| 19:35:31 | evan | just to be clear |
| 19:35:34 | dbussink | doh |
| 19:35:34 | evan | before |
| 19:35:37 | evan | the tag was 2 bits |
| 19:35:41 | evan | and there was one bit for sign |
| 19:35:44 | dbussink | i made a mistake |
| 19:35:55 | evan | thus the 29 bits of data |
| 19:35:59 | dbussink | 2 ** 28 - 1 should be a fixnum |
| 19:36:07 | dbussink | and it is again now |
| 19:37:09 | dbussink | evan: but i guess this kind of stuff all still needs to be put in the new vm? |
| 19:37:12 | thehcdreamer leaves the room. | |
| 19:37:21 | ezmobius enters the room. | |
| 19:37:21 | evan | dbussink: yep |
| 19:37:28 | evan | dbussink: should be easy to patch in |
| 19:37:31 | evan | if you want to do it |
| 19:37:38 | evan | don't worry about the primitives for right now |
| 19:37:46 | evan | but the rest should go in |
| 19:37:59 | dbussink | and write some c++ tests for it then :) |
| 19:38:36 | brixen | Defiler: I chopped out the dots so it would paste: http://pastie.org/195630 |
| 19:39:08 | Defiler | Cool. On the phone for a sec, but I will open those files in a sec. Looks like it should lead us to the quarry |
| 19:39:43 | brixen | Defiler: k, there's 6 errors with ci only (i.e. not ci -B full.mspec) |
| 19:40:38 | mkrauskopf_ leaves the room. | |
| 19:40:39 | Defiler | wait, what does the second command run? |
| 19:40:53 | mkrauskopf enters the room. | |
| 19:42:13 | dbussink | Defiler: also run the library spec |
| 19:43:25 | brixen | Defiler: peek at spec/default.mspec and spec/full.mspec |
| 19:43:39 | brixen | bin/ci uses default.mspec and doesn't run spec/frozen/1.8/library |
| 19:43:55 | Defiler | oh hoh. Hadn't seen this before |
| 19:44:05 | Defiler | What does the m stand for these days? :) |
| 19:44:11 | brixen | yeah, just changed it a couple days ago |
| 19:44:16 | brixen | bots are running with full.mspec |
| 19:44:25 | brixen | Defiler: m as in bmw m :) |
| 19:44:41 | Defiler | Nice. |
| 19:44:43 | Defiler | I like that |
| 19:44:45 | brixen | heh |
| 19:45:22 | brixen | on array, we run rspec at 5 sec and mspec 3.8 |
| 19:45:23 | Defiler | It stands for 'Motorsport' by the way |
| 19:45:27 | Defiler | I love that word |
| 19:46:53 | tarcieri | *boggle* |
| 19:47:07 | tarcieri | i forgot my github password, and resetting it doesn't appear to tell you your username |
| 19:47:33 | evan | tarcieri: hey, so, would you tell me how you got mongrel running? |
| 19:47:42 | tarcieri | okay, I'm an idiot and was copying spaces on the password |
| 19:48:28 | tarcieri | evan: heh, I'm not even sure if Mongrel will work with that, but... I was planning on making a gem that didn't build the native extension or depend on fastthread or the cgi eof crap |
| 19:48:42 | evan | oh, i thought you said you have it working using the native parser |
| 19:49:06 | tarcieri | nope, just ran the parser tests against it and confirmed it was working |
| 19:49:12 | evan | ok. |
| 19:49:29 | brixen | Defiler: this will give you some tasty exceptions with rspec under rbx: shotgun/rubinius -I ../rspec/lib/ -r ../rspec/lib/spec ../rspec/bin/spec spec/ruby/1.8/core/[cf]* |
| 19:49:43 | tarcieri | evan: all I can say is... it should work, I think, heh |
| 19:49:50 | evan | ok |
| 19:49:53 | evan | where is the native parser? |
| 19:49:55 | evan | checked in? |
| 19:50:10 | tarcieri | yeah, lib/http11.rb |
| 19:50:29 | evan | hrm |
| 19:50:31 | evan | thats why i missed it |
| 19:50:35 | evan | it should be under mongrel. |
| 19:50:39 | boyscout | 1 commit by Dirkjan Bussink |
| 19:50:40 | boyscout | * Optimize numeric operations; 62d2efb |
| 19:50:51 | evan | or does mongrel call it actually "require 'http11'" |
| 19:50:53 | tarcieri | yeah, I originally had it under mongrel... the Mongrel gem looks for it in the toplevel though |
| 19:50:54 | tarcieri | yep |
| 19:50:58 | evan | ah |
| 19:51:00 | evan | bleh. |
| 19:51:01 | evan | oh well. |
| 19:51:20 | evan | where was the original input? |
| 19:51:20 | Defiler | Why doesn't "require 'mongrel'" work then in rbx? |
| 19:51:25 | brixen | Defiler: do you think we should work on getting mspec using instance_eval first, rather than futzing with rspec? because then we should be able to spec anything that is failing with rspec |
| 19:51:43 | Defiler | brixen: I think I agree with that, yeah |
| 19:51:45 | tarcieri | evan: the original Ragel? |
| 19:51:50 | Defiler | It seems like a smaller bite-sized piece |
| 19:51:53 | gnufied leaves the room. | |
| 19:51:53 | tarcieri | evan: that's under lib/mongrel |
| 19:51:54 | evan | the original .rl file |
| 19:51:54 | evan | yeah |
| 19:51:55 | brixen | Defiler: k |
| 19:51:56 | evan | oh oh. |
| 19:51:56 | evan | ok. |
| 19:52:07 | tarcieri | I have to munge the output though |
| 19:52:15 | tarcieri | I can check in the script to do that too |
| 19:52:19 | tarcieri | if you want to play around with it |
| 19:52:38 | evan | right |
| 19:52:39 | enebo enters the room. | |
| 19:53:11 | evan | i've been working with Adrian to make the output more sane. |
| 19:53:13 | anteaya enters the room. | |
| 19:53:26 | ezmobius leaves the room. | |
| 19:53:33 | brixen | Defiler: cd mspec: http://pastie.org/195640 |
| 19:53:42 | tarcieri | evan: sweet |
| 19:53:57 | Defiler | k. let me branch off here |
| 19:55:25 | Defiler | OK. So you are running which command here? -B full_mspec etc? |
| 19:55:35 | brixen | well, just bin/mspec ci for now |
| 19:58:05 | brixen | Defiler: do you get 6 errors with mspec ci ? |
| 19:58:49 | Defiler | sec. had to wait for a rebuild |
| 20:00:35 | joachimm leaves the room. | |
| 20:01:18 | Defiler | headius: the JVM has gotten really really fast, and at Google it's now widely admitted on the Java side that Java's just as fast as C++. |
| 20:01:23 | Defiler | headius: I love that quote |
| 20:01:36 | Defiler | brixen: but yes, 6 errors here too |
| 20:01:55 | brixen | k, how do you want to tackle this? |
| 20:01:57 | headius | Defiler: is that in yegge's article? |
| 20:02:00 | tarcieri | Defiler: heh, did you see any of the articles about Opera doing profile guided optimization? |
| 20:02:02 | evan | headius: yeah |
| 20:02:07 | headius | yep yep |
| 20:02:14 | Defiler | tarcieri: nope. link? |
| 20:02:17 | Defiler | brixen: /bin/mspec ci spec/frozen/1.8/core/class/new_spec.rb |
| 20:02:22 | Defiler | err.. ./bin |
| 20:02:30 | Defiler | I think that command will get us all we need to know about this problem |
| 20:02:34 | Defiler | (but I could be wrong) |
| 20:02:39 | brixen | Defiler: k |
| 20:03:05 | tarcieri | Defiler: http://my.opera.com/desktopteam/blog/2008/05/09/profile-guided-optimizations |
| 20:03:12 | rubuildius_amd64 | Dirkjan Bussink: 62d2efbed; 2107 files, 6859 examples, 25050 expectations, 0 failures, 0 errors |
| 20:03:16 | tarcieri | Defiler: it's just funny how with the JVM you get that for free |
| 20:03:31 | Defiler | brixen: This is a crazy failure wow |
| 20:03:38 | Defiler | also oh god this song is so great |
| 20:04:19 | evan | tarcieri: using profile guided optz in gcc is a pain. |
| 20:04:26 | tarcieri | heh |
| 20:06:32 | Defiler | This is the perfect instance_eval music: http://hellninjacommando.com/adtrw/voyage_of_gurdjieff.mp3 |
| 20:06:46 | dewd enters the room. | |
| 20:08:01 | Defiler | This is an astonishing failure: http://pastie.org/195645 |
| 20:08:25 | Defiler | MyClass.name.should == "MyClass" |
| 20:08:31 | Defiler | is the line it fails on. forgot to mark that |
| 20:08:47 | Defiler | but it doesn't fail because the name is wrong.. it fails because it gets const_missing on MyClass |
| 20:09:50 | joachimm enters the room. | |
| 20:10:00 | rubuildius_ppc | Dirkjan Bussink: 62d2efbed; 2107 files, 6861 examples, 25076 expectations, 0 failures, 0 errors |
| 20:10:19 | dgtized leaves the room. | |
| 20:16:13 | joachimm | evan: could you provide some feed back on my patch. http://rubinius.lighthouseapp.com/projects/5089/tickets/551 |
| 20:17:23 | joachimm | I thought I should get some hints before moving forward with more tests. |
| 20:18:36 | brixen | Defiler: http://pastie.org/195653 |
| 20:18:42 | brixen | Defiler: that works fine in rbx |
| 20:19:04 | evan | joachimm: looks good! |
| 20:19:10 | Defiler | brixen: http://pastie.org/195655 |
| 20:19:50 | Defiler | Check out that paste as well, evan. That (amazingly) fails in rbx |
| 20:20:38 | evan | whats it do? |
| 20:20:42 | brixen | hrm, won't instance_eval on other than a class or module |
| 20:20:57 | wycats_ enters the room. | |
| 20:21:13 | Defiler | It fails when it tries to set the const |
| 20:21:13 | evan | i'm pretty sure thats because the the cdecl instruction pushes self |
| 20:21:20 | evan | then sets the const on that |
| 20:21:30 | Defiler | trying to make sure this is the failure that is breaking rspec right now |
| 20:22:09 | Defiler | in MRI that makes a toplevel const |
| 20:22:25 | Defiler | So I guess it uses the instance_eval caller's scope? |
| 20:22:26 | evan | we should treat this the same as method definition |
| 20:22:34 | evan | lets just push constant setting first class |
| 20:22:42 | evan | leave constant retrieval in the VM |
| 20:22:48 | Defiler | OK |
| 20:23:22 | evan | use the same |
| 20:23:27 | evan | push_context trick |
| 20:25:14 | Defiler | Sounds good |
| 20:25:32 | brixen | Defiler: gonna grab some lunch, bbiab.. |
| 20:25:47 | Defiler | Cool. I'm going to work on this now |
| 20:25:59 | Defiler | but I need to go pick up some hose fittings soon :) |
| 20:26:41 | brixen | Defiler: if you want to point me to something else, cool. otherwise I'll work in getting the docs moved to rubyspec.org |
| 20:26:45 | brixen | and updating our readme, etc |
| 20:27:15 | Defiler | evan: Can you remind me exactly what the meaning of @compiler.kernel? being true is again? |
| 20:27:26 | evan | means that kernel/ is being compiled. |
| 20:27:39 | Defiler | Literally just that the target file is under that path, right? |
| 20:27:41 | evan | you should have the new const set code be not while in kernel |
| 20:27:46 | evan | Defiler: no no |
| 20:27:50 | evan | it's a compiler flag passed in |
| 20:27:54 | Defiler | aha |
| 20:28:00 | evan | which is only passed in when compiling the kernel |
| 20:28:03 | Defiler | So yeah, I just want to modify the other branch of that code |
| 20:28:33 | anteaya leaves the room. | |
| 20:30:09 | ezmobius enters the room. | |
| 20:31:11 | dgtized enters the room. | |
| 20:33:27 | Defiler | That fixes the error when setting it, but not the instance_eval problem |
| 20:33:34 | Defiler | interesting |
| 20:34:45 | evan | how are you setting it? |
| 20:34:47 | evan | thats the biggy |
| 20:36:04 | Defiler | evan: http://pastie.org/195660 |
| 20:36:07 | Defiler | Is that wrong? |
| 20:39:24 | wycats leaves the room. | |
| 20:39:49 | evan | seems ok |
| 20:40:00 | evan | oh oh. |
| 20:40:03 | evan | hrm. |
| 20:40:24 | evan | so, whats the case that breaks? |
| 20:40:33 | evan | accessing a constant inside instance_eval? |
| 20:40:50 | Defiler | Actually, that change causes some ci errors |
| 20:41:37 | Defiler | e.g. http://pastie.org/195665 |
| 20:41:46 | Defiler | (line numbers should be unmodified) |
| 20:41:54 | Defiler | should be == are |
| 20:41:58 | evan | hrm |
| 20:42:02 | evan | double check the behavior in MRI |
| 20:42:08 | imajes enters the room. | |
| 20:42:13 | evan | i recall strangeness with constants and instance_eval |
| 20:43:06 | Defiler | http://pastie.org/195668 |
| 20:44:40 | evan | do it NOT on object. |
| 20:44:55 | evan | you need to find out if the context of the object or the context of the closure is used. |
| 20:44:59 | evan | right now, you have them the same |
| 20:45:03 | evan | make them different, then check the behavior. |
| 20:45:42 | NoKarma enters the room. | |
| 20:45:54 | Defiler | right |
| 20:47:37 | Defiler | wow this is not what I was expecting to see |
| 20:47:38 | Defiler | http://pastie.org/195671 |
| 20:48:11 | NoKarma | heya |
| 20:48:17 | Defiler | yo |
| 20:48:37 | evan | Defiler: right, thats why i wanted you to check |
| 20:48:45 | Defiler | Yeah, good thinking |
| 20:48:49 | smparkes leaves the room. | |
| 20:49:01 | evan | sadly |
| 20:49:03 | NoKarma | damn cool that rubinius is now running merb |
| 20:49:08 | Defiler | True also if crazytown is a singleton method on Crazy |
| 20:49:10 | evan | the context of the closure is still used |
| 20:49:11 | smparkes enters the room. | |
| 20:49:23 | evan | which means that instance_eval is only a partial context change. |
| 20:49:59 | Defiler | That is astonishingly irritating |
| 20:50:21 | evan | incredibly so. |
| 20:50:33 | evan | but, we have a work around. |
| 20:50:36 | Defiler | Do we? |
| 20:50:39 | evan | we do. |
| 20:50:54 | evan | when instance_eval is used, we need to stash the original staticscope somewhere |
| 20:51:06 | Defiler | oh hoh |
| 20:51:22 | evan | then we need to tag a MethodContext as being used as instance_eval |
| 20:51:29 | Defiler | Check out the big brain on evan. That is clever. |
| 20:51:39 | evan | and have it check it's flag, and use the saved staticscope chain |
| 20:51:48 | Defiler | So instance_eval should set the flag on the caller's MContext? |
| 20:51:51 | evan | btw, staticscope is loosing the name static in the new VM. |
| 20:51:52 | evan | it's just scope. |
| 20:52:01 | Defiler | Cool |
| 20:52:02 | evan | no |
| 20:52:09 | evan | instance_eval has to set the flag on itself. |
| 20:52:12 | evan | not on the caller. |
| 20:52:22 | evan | the caller of instance_eval isn't an instance_eval |
| 20:52:28 | evan | it's just a normal context |
| 20:52:36 | Defiler | It's the thing that asked for it, though |
| 20:52:45 | evan | we need to detect if we're actively inside an instance_eval |
| 20:52:49 | Defiler | I see, though.. instance_eval's MC has already copied it |
| 20:52:56 | evan | no |
| 20:53:00 | evan | i think you're confusing yourself. |
| 20:53:16 | evan | to perform an instance_eval |
| 20:53:21 | evan | a BlockEnvironment is created |
| 20:53:23 | evan | then called |
| 20:53:29 | Defiler | The staticscope of MethodContext.current is the same on the first line of 'def instance_eval' as it is in its caller, right? |
| 20:53:32 | evan | the calling creates a BlockContext class |
| 20:53:42 | evan | we have to 'tag' that BlockContext class somehow. |
| 20:53:51 | evan | perhaps tag the BlockEnvironment |
| 20:54:00 | evan | and override __const_set__ on BlockContext |
| 20:54:07 | evan | to check it's env to see if it was an instance_eval |
| 20:54:46 | evan | oh, then we can save the original staticscope chain in the BlockEnivronment |
| 20:55:25 | evan | Defiler: no |
| 20:55:36 | evan | the staticscope of a method IS NOT the same as it's caller. |
| 20:56:02 | Defiler | Oh, right. Of course not |
| 20:56:18 | evan | see where I'm going with this though? |
| 20:56:25 | Defiler | It's the same for methods in the same module as def instance_eval |
| 20:56:36 | evan | don't worry about what it is. |
| 20:56:44 | Defiler | Yeah. I'm trying to understand exactly which method call would save off the staticscope chain though |
| 20:56:44 | evan | it actually doesn't matter for this. |
| 20:56:55 | evan | the call to instance_eval |
| 20:57:05 | evan | inside the instance_eval method |
| 20:57:16 | evan | we replace the staticscope of the CompiledMethod that represents the block |
| 20:57:39 | yipstar leaves the room. | |
| 20:58:43 | Defiler | So before 'call_on_instance' |
| 20:58:56 | evan | yes |
| 20:59:02 | Defiler | Gotcha |
| 20:59:24 | evan | crap |
| 20:59:31 | Defiler | I get it now, yeah.. the staticscope that needs to look like it exists to const_set is different than the one for, say, send |
| 20:59:34 | evan | we have instance_eval calling instance_exec now |
| 20:59:37 | evan | we have to change that |
| 20:59:41 | evan | lets get rid of that |
| 20:59:43 | Defiler | I thought that was how it works? |
| 20:59:49 | evan | don't have instance_eval call instance_exec |
| 20:59:53 | evan | it confuses me. |
| 20:59:54 | Defiler | oh, for procs |
| 21:00:00 | evan | yeah |
| 21:00:03 | evan | which is the case we're on. |
| 21:00:07 | Defiler | for sure |
| 21:00:11 | wycats enters the room. | |
| 21:00:34 | evan | Defiler: so, another bug I just realized in instance_eval |
| 21:00:36 | evan | of a proc |
| 21:00:49 | rby enters the room. | |
| 21:00:57 | evan | line 541 |
| 21:01:09 | Defiler | Yeah, that is super wrong |
| 21:01:13 | evan | we're changing the staticscope of the CompiledMethod that contains the code |
| 21:01:17 | evan | it's actually right |
| 21:01:22 | evan | but there is a bug with it. |
| 21:01:25 | Defiler | "metaclass" is wrong, right? |
| 21:01:28 | evan | no |
| 21:01:41 | evan | i don't think so... |
| 21:01:42 | Defiler | OK. I guess I don't get it then |
| 21:01:50 | Defiler | (the bug) |
| 21:02:02 | evan | the bug i was going to mention is that right now |
| 21:02:16 | evan | we're changing the singel CompiledMethod object for the block |
| 21:02:27 | evan | so if we pass a block to instance_eval |
| 21:02:30 | evan | it's forever changed |
| 21:02:33 | evan | even if we call it again |
| 21:02:34 | Defiler | ohh |
| 21:02:48 | evan | it 'sticks' in instance_eval mode |
| 21:02:53 | evan | so we need to be dup'ing the CompiledMethod |
| 21:02:56 | evan | manipulating it |
| 21:02:59 | evan | then using it. |
| 21:04:01 | evan | the metaclass is there because thats the logic we worked out for method definition in an instance_eval |
| 21:04:13 | evan | methods go on just that one object |
| 21:04:32 | evan | yay for MRI, it doesn't obey that for constants though :/ |
| 21:05:36 | evan | headius: ? |
| 21:05:39 | Defiler | http://pastie.org/195689 |
| 21:05:41 | Defiler | so like that? |
| 21:05:53 | headius | sup |
| 21:05:53 | evan | probably need to dup env too |
| 21:06:00 | Defiler | redirect_to does |
| 21:06:04 | evan | ok then |
| 21:06:23 | evan | headius: jruby has the same scope chain because it doesn't have cref anymore, right? |
| 21:06:36 | evan | if so, what info does instance_eval use? |
| 21:06:47 | headius | whatever the scope is |
| 21:06:49 | evan | seems that it uses half the info from the closure, half from the object |
| 21:07:01 | headius | MRI always puts constants in the block's containing class, not the instance |
| 21:07:12 | Arjen_ enters the room. | |
| 21:07:24 | headius | I believe that's changed in 1.9, not sure |
| 21:08:00 | evan | how do you define "block's containing class" |
| 21:08:00 | headius | so since instance_eval gets a static scope rooted in the caller's scope, constants will go in that chain, not the class of the instance being instance_eval'ed against |
| 21:08:02 | evan | ? |
| 21:08:06 | headius | lexical scope |
| 21:08:18 | Defiler | evan: Hrm. Now that I've gotten to typing in the code, I realize I'm not exactly sure what we need here in instance_eval |
| 21:08:34 | trythil leaves the room. | |
| 21:08:36 | Defiler | I'm imagining that BlockEnvironment will get a new accessor called instance_eval_scope |
| 21:08:39 | evan | headius: gotcha, so instance_eval doesn't modify the original lexical scope of the block |
| 21:08:44 | headius | that's right |
| 21:08:48 | evan | headius: ok |
| 21:08:50 | Defiler | but I'm stumped as to where we get the value to assign to it |
| 21:08:55 | evan | so then in jruby, for method definition |
| 21:09:01 | headius | it just changes self and a couple other things |
| 21:09:03 | evan | do you just detect that the current scope is an instance_eval? |
| 21:09:06 | evan | to decide where to put the method |
| 21:09:21 | evan | "".instance_eval { def suck; 1; end } |
| 21:09:30 | evan | suck a singleton method |
| 21:09:32 | evan | of "" |
| 21:09:40 | Defiler | headius: run this code: http://pastie.org/195694 |
| 21:10:22 | headius | Defiler: same output as MRI |
| 21:10:42 | headius | evan: there's two separate constant stacks |
| 21:10:43 | Defiler | right, I just mean that your description of what const setting does in a block is different from MRI and JRuby's actual behavior |
| 21:10:44 | headius | in JRuby |
| 21:10:52 | headius | Defiler: no |
| 21:11:01 | Defiler | <headius> MRI always puts constants in the block's containing class, not the instance |
| 21:11:04 | Defiler | is the line I am referring to |
| 21:11:12 | evan | headius: and a DynamicMethod has pointers to both? |
| 21:11:16 | Defiler | In that code, they go to toplevel |
| 21:11:41 | headius | yeah, because the block is rooted at toplevel |
| 21:11:47 | evan | Defiler: thats what he means |
| 21:11:48 | headius | lexically, its outer scope is toplevel scope |
| 21:11:58 | Defiler | Aha, yes |
| 21:12:05 | Defiler | tricky |
| 21:12:05 | headius | hence the toplevel warning too |
| 21:12:21 | headius | evan: no, dynamicmethod only tracks the cref equivalent |
| 21:12:36 | headius | there's a separate thread on the stack for the "rubyclass" stack, which also exists in MRI |
| 21:12:37 | Defiler | evan: So, in rubinius, what does the line in the kernel look like to access the staticscope of that block? |
| 21:12:46 | Defiler | MethodContext.current.foo |
| 21:12:55 | headius | constants follow cref |
| 21:13:04 | headius | I think methods and some other things follow rubyclass |
| 21:13:07 | ctennis leaves the room. | |
| 21:13:09 | headius | it's not consistent |
| 21:13:21 | Defiler | Interesting. |
| 21:13:32 | Defiler | I didn't have that terminology in my head before, but I like it |
| 21:19:53 | dgtized leaves the room. | |
| 21:28:42 | ctennis enters the room. | |
| 21:36:34 | Yurik leaves the room. | |
| 21:38:51 | drbrain | hrm, it seems that close isn't working right |
| 21:38:55 | drbrain | for IO |
| 21:40:47 | drbrain | I wish I had strace :/ |
| 21:41:41 | evan | you do |
| 21:41:42 | evan | dtruss |
| 21:48:06 | ineffablygregory enters the room. | |
| 21:50:08 | dgtized enters the room. | |
| 21:54:11 | qwert666_ enters the room. | |
| 22:00:41 | binary42_ leaves the room. | |
| 22:12:12 | qwert666 leaves the room. | |
| 22:18:16 | dewd leaves the room. | |
| 22:18:34 | macournoyer leaves the room. | |
| 22:18:55 | drbrain | ok, it looks like our popen is wrong |
| 22:19:15 | drbrain | I only see one pipe here, for parent read/child write |
| 22:19:22 | drbrain | I don't see parent write/child read |
| 22:19:25 | drbrain | IO.popen |
| 22:20:26 | evan | hm |
| 22:20:27 | evan | let me look. |
| 22:20:46 | drbrain | I'm comparing to 1.8's |