Index

Show enters and exits. Hide enters and exits.

00:00:47dbussinkfor who's interested (or here in the first place ;) )
00:00:48dbussinkhttp://pastie.caboo.se/195279
00:05:39Maledictus leaves the room.
00:07:54Cosmos95 enters the room.
00:07:56joachimm_ leaves the room.
00:12:30joachimm leaves the room.
00:13:19benburkert enters the room.
00:19:10lopex leaves the room.
00:24:23rueWell, "Iron Man" was good
00:25:28dbussinkrue: not too campy?
00:25:48rueNot at all. And Downey was great
00:27:01dbussinkah, maybe i'll have to check it out then too
00:27:12dbussinkreally ought to get to bed now first
00:27:25dbussinkbefore i switch to rue standard time :P
00:28:01rueCozy in Ruechtenstein
00:29:11qwert666_ leaves the room.
00:29:20dbussinkbut good to see that my optimizations are working now :)
00:30:07dbussinkhmm, some ci failures :(
00:32:31benburkert leaves the room.
00:55:14Yurik leaves the room.
00:55:25Yurik enters the room.
00:57:46sambo82 leaves the room.
01:00:41jtoy enters the room.
01:01:08NoKarma leaves the room.
01:06:35dbussinkrue: thank god for the spec suite :)
01:06:50dbussinkrue: got the bug out that the optimisation had :)
01:08:23Cosmos95 leaves the room.
01:10:17Cosmos95 enters the room.
01:10:48boyscout1 commit by Dirkjan Bussink
01:10:49boyscout * Optimized integer calculations involving Bignum and Fixnum; 7045911
01:11:29dbussinktime for bed now!
01:11:29dbussinknite
01:14:09jtoy leaves the room.
01:17:25crafterm enters the room.
01:23:13rubuildius_amd64Dirkjan Bussink: 704591108; 2107 files, 6859 examples, 25050 expectations, 0 failures, 0 errors
01:34:21rubuildius_ppcDirkjan Bussink: 704591108; 2107 files, 6861 examples, 25076 expectations, 0 failures, 0 errors
01:48:06jtoy enters the room.
02:06:35jtoy leaves the room.
02:10:44jtoy enters the room.
02:13:08m7d leaves the room.
02:23:44VVSiz_ enters the room.
02:40:14rubuildius_ppc leaves the room.
02:40:49rubuildius_ppc enters the room.
02:42:05VVSiz leaves the room.
02:43:43trythil_ enters the room.
02:43:43trythil leaves the room.
02:44:53Yurik leaves the room.
02:52:08nemerle enters the room.
02:55:12mkescher_ enters the room.
02:55:17rubuildius_ppcDirkjan Bussink: 704591108; 2107 files, 6861 examples, 25076 expectations, 0 failures, 0 errors
02:56:47cored leaves the room.
03:04:32rueArgh, the lambda thread again.
03:05:56Cosmos95 leaves the room.
03:11:00evanheh
03:15:17headius enters the room.
03:16:39crafterm enters the room.
03:21:32evanmy my, dan berger has gotten so... negative.
03:26:55trythil_ leaves the room.
03:27:05Packet_Monkey enters the room.
03:29:15rubuildius_ppc leaves the room.
03:29:47rubuildius_ppc enters the room.
03:41:19crafterm leaves the room.
03:47:28dysinger enters the room.
03:58:25trythil enters the room.
04:00:40Yurik enters the room.
04:04:43mkescher_ leaves the room.
04:29:14ShayArnett leaves the room.
04:53:26benburkert enters the room.
04:58:43benburkert leaves the room.
05:02:43Packet_Monkey leaves the room.
05:04:32benburkert enters the room.
05:16:59benburkert leaves the room.
05:22:02TheVoice enters the room.
05:32:53headiusevan: link?
05:43:57trythil_ enters the room.
05:43:57trythil leaves the room.
06:04:11rueheadius, evan: http://www.oreillynet.com/ruby/blog/2008/05/is_qwerty_harming_language_des.html
06:04:16rueHe picked up
06:06:53trythilhmm, I thought that APL tried that and it ended up not quite working
06:13:13headiusperhaps sapphire will be programmable entirely in untypable characters
06:17:01evanheadius: perhaps
06:17:04evanheadius: link to which?
06:17:25headiusberger being negative
06:17:50evanoh.
06:17:55evanon ruby-core
06:18:08mapar leaves the room.
06:18:16evanmaybe i'm reading into it, but his tone sounds very negative.
06:21:28headiusahh, ok
06:22:42benburkert enters the room.
06:26:38headiushonestly making lambda a keyword still seems the most sane to me
06:43:35benburkert leaves the room.
06:56:45xhanjian_ enters the room.
07:02:38xhanjian leaves the room.
07:08:26Skip enters the room.
07:26:26headius leaves the room.
07:31:20headius enters the room.
07:35:19joachim__ leaves the room.
07:35:43stepheneb leaves the room.
07:41:51headius_ enters the room.
07:43:03headius_ leaves the room.
07:49:10trythil_ leaves the room.
07:49:26ezmobius leaves the room.
07:56:00headius_ enters the room.
08:00:05headius leaves the room.
08:00:31headius enters the room.
08:00:31dewd enters the room.
08:02:55qwert666 enters the room.
08:04:08imajes enters the room.
08:06:48gnufied enters the room.
08:09:44imajes leaves the room.
08:10:10NoKarma enters the room.
08:15:29dbussinkmorning
08:15:56thehcdreamer enters the room.
08:17:10headius_ leaves the room.
08:19:00NoKarmamorning
08:25:11dbussinkevan: still there?
08:39:08evanyep
08:39:09evansup?
08:41:33mkrauskopf enters the room.
08:54:16mutle enters the room.
08:56:51danlucraft enters the room.
08:57:42imajes enters the room.
08:58:32imajes leaves the room.
08:59:06imajes enters the room.
09:06:25octopod enters the room.
09:10:13w1rele55 enters the room.
09:11:34jzj enters the room.
09:11:50jzjlastest build error
09:12:06jzjInitializing mspec submodule...
09:12:14jzjgit submodule init mspec
09:12:23jzjgit: 'submodule' is not a git-command
09:15:05benny enters the room.
09:16:36NoKarmajzj: do you have the latest git version?
09:21:17mutle leaves the room.
09:21:37mutle enters the room.
09:23:07jzjyeah
09:23:12jzji think so
09:23:20jzjno
09:23:21jzjjust a min
09:23:40jzj1.5.2.5
09:24:57jzjoops, this is a 1.5.3 feature
09:25:02jzjgot it
09:26:12imajes_ enters the room.
09:28:16dbussinkevan: ah, i was out for a shower
09:28:39dbussinkevan: i was wondering about the new vm, i saw nothing related to fixnum / bignum overflowing etc
09:28:47dbussinkyou want to do that in cpp or in ruby?
09:29:21dbussinki was hacking a bit to optimize that stuff in the current vm
09:31:00xmlhacker leaves the room.
09:31:46dbussinkevan: 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:39imajes leaves the room.
09:33:21xmlhacker enters the room.
09:43:11headius leaves the room.
09:57:19brainopia enters the room.
10:00:34brainopia leaves the room.
10:00:52gnufied_ enters the room.
10:01:28gnufied leaves the room.
10:10:56scooprhm, why isn't the git repo added to rubyspec redmine?
10:11:10jtoy leaves the room.
10:14:23brainopia enters the room.
10:17:55dbussinkscoopr: you should ask brixen, but i guess he's asleep atm
10:18:53jtoy enters the room.
10:23:18NoKarmascoopr: rubyspec.org is still a work-in-progress
10:23:24scoopraight
10:23:30NoKarmascoopr: I think he'll set that up sooner or later
10:29:36dbussinkanyone in with some reasonably in depth knowledge of libtommath?
10:35:31BlackEdder enters the room.
10:38:48rby enters the room.
10:42:57jzjcan i disable the git submodule
10:43:16jzjim using proxy which doesn't support Git
10:45:51dbussinkbut how did you get the code then?
10:46:00dbussinknightly tarball?
10:46:27jzjusing http_proxy
10:46:44jzjbut githup doesn't have http one
10:46:51jzjit's using git://....
10:48:00jzjhttp://git.rubini.us/code and git://git.rubini.us/code are the same repo
10:48:51jzjhttp://github.com/brixen/mspec.git and git://github.com/brixen/mspec.git are not
10:56:30dbussinkjzj: and downloading it as a tarball through the github interface?
11:02:49Maledictus enters the room.
11:07:12Blinchik leaves the room.
11:07:46jzj leaves the room.
11:19:05rubuildius_ppc leaves the room.
11:19:38rubuildius_ppc enters the room.
11:20:38mutle leaves the room.
11:27:37jtoy leaves the room.
11:29:27mutle enters the room.
11:30:03rubuildius_ppc leaves the room.
11:30:35rubuildius_ppc enters the room.
11:33:46dbussinkwished we had some more developers from europe
11:40:05rubuildius_ppc leaves the room.
11:40:37rubuildius_ppc enters the room.
11:40:53mkrauskopfHi. Anybody able to clone Rubinius repo at the moment?
11:41:07mkrauskopf'git clone git://git.rubini.us/code rubinius' fails with timeout for me, for last few hours
11:41:15dbussinkthe gitweb interface is up
11:42:22mkrauskopfHmm, might local provider problem.
11:42:33NoKarmamkrauskopf: you could try the github repo, i think
11:42:54NoKarma leaves the room.
11:45:57mkrauskopfThanks for the tip with github, that works. Still in the beginning with Rubinius....
11:48:31VVSizmkrauskopf: cloning the rubini.us repo work just fine here
11:51:35VVSiz(took about 2 mins to clone the whole repo)
11:56:53mkrauskopfVVSiz: 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:30VVSizmkrauskopf: yeah, they are exactly the same for all practical purposes, if you're in read-only mode
11:58:38mkrauskopfVVSiz: read-only is definitely the case for me ;)
11:58:45VVSiz:)
11:58:58dbussinkVVSiz: you don't happen to know libtommath do you?
11:59:19VVSiznope, no way :)
11:59:42dbussinktoo ba
11:59:43dbussinkbad
12:00:09dbussinki've changed something in there and i think it's ok, but i'd love for someone to actually confirm that
12:05:21VVSizdbussink: interesting, the first time I see that 'master' and 'github/master' differ: http://git.rubini.us/?p=code;a=summary
12:05:58dbussinkVVSiz: hmm, maybe evan didn't add my ssh key to his project
12:06:17dbussinkVVSiz: my user to the repo i mean
12:06:31dbussinki usually use the rake tasks, so that should work
12:09:26dewd leaves the room.
12:17:01benny leaves the room.
12:39:02ctennis enters the room.
12:42:34dewd enters the room.
12:43:58Blinchik enters the room.
12:44:06Blinchik_ enters the room.
12:44:21Blinchik_ leaves the room.
12:50:27jtoy enters the room.
12:58:17thehcdreamer_ enters the room.
13:08:09wdperson enters the room.
13:11:01thehcdreamer leaves the room.
13:14:06radarek enters the room.
13:16:58mkrauskopf leaves the room.
13:17:14mkrauskopf enters the room.
13:42:35blakewatters leaves the room.
14:00:28_mutle enters the room.
14:09:07blakewatters enters the room.
14:10:22benny enters the room.
14:14:16thehcdreamer__ enters the room.
14:15:24wmoxam leaves the room.
14:18:06mutle leaves the room.
14:22:00dbussinkhehe, just found an optimization that actually makes something slower :)
14:30:44thehcdreamer_ leaves the room.
14:33:26AndrewO enters the room.
14:34:24moofbong enters the room.
14:37:41wmoxam enters the room.
14:43:15VVSiz leaves the room.
14:47:30trythil enters the room.
14:48:17trythil leaves the room.
15:07:46benburkert enters the room.
15:10:30Yurik leaves the room.
15:14:36shame leaves the room.
15:17:53dewd leaves the room.
15:18:30benny leaves the room.
15:21:43rby leaves the room.
15:22:13benburkert leaves the room.
15:23:46benny enters the room.
15:24:21benburkert enters the room.
15:34:16yipstar enters the room.
15:36:27ShayArnett enters the room.
15:40:06dysinger leaves the room.
15:45:20stepheneb enters the room.
15:48:23trythil enters the room.
15:52:56Yurik enters the room.
15:52:56thehcdreamer__ leaves the room.
15:58:09therealadam enters the room.
15:59:28nicksieger enters the room.
16:01:48jtoy leaves the room.
16:03:19benburkert leaves the room.
16:04:19benburkert enters the room.
16:09:34benstiglitz enters the room.
16:09:50dewd enters the room.
16:10:13dewd leaves the room.
16:13:06gnufied leaves the room.
16:13:21thehcdreamer enters the room.
16:15:05benburkert leaves the room.
16:18:17enebo enters the room.
16:18:31yugui leaves the room.
16:20:21yugui enters the room.
16:20:54dewd enters the room.
16:31:02ttmrichter leaves the room.
16:36:32shame enters the room.
16:46:59DefilerWe should figure out why our gem download speed is so bad
16:48:45gnufied enters the room.
16:50:03yugui leaves the room.
16:52:52dbussinkDefiler: you know anything about libtommath?
16:53:32DefilerSome
16:53:43dbussinkDefiler: and i was wondering why Type.object_kind_of? is 50% slower than Object#is_a?
16:53:44DefilerI had to read a bunch of it during the 64bit wars
16:54:15dbussinkwell, i changed the DIGIT_BIT value from 28 to 29 for 32 bits and from 60 to 61 for 64 bits
16:54:20DefilerWe have a 'fast is_a?' that is used where possible
16:54:27DefilerWhoa why?
16:54:34DefilerThat is bad
16:54:35dbussinkbecause in that case it matches our own fixnums
16:54:41dbussinkonly locally
16:54:44dbussinki was testing with it
16:54:53DefilerYeah.. that value is unrelated to our fixnums
16:54:53dbussinkit makes some optimizations really easy to do
16:54:59Defilerand is crucial to the libtommath algorithms
16:55:08DefilerSo be careful, at least
16:55:31dbussinkwell, it says: A "mp_digit" must be able to hold DIGIT_BIT + 1 bits
16:55:33trythil leaves the room.
16:55:43dbussinkso that is still satisfied
16:55:49dbussinkand it has a 31 bit mode too
16:55:55DefilerIt has to be a multiple of four
16:56:05trythil enters the room.
16:56:06dbussinkhmm, what depends on that?
16:56:11Defilerbecause the ints are procesed 4 bits at a time inside libtommath
16:56:42dbussinkbut i don't see anything additional for that 31 bit support
16:57:15dbussinkand i've been testing it reasonably thorough and it all works ok
16:57:18Defilercheck out mp_set_int
16:58:12dbussinkhmm, but why is everything still working then?
16:58:30DefilerDunno. Maybe I'm wrong
16:59:04dbussinkDefiler: http://pastie.caboo.se/pastes/195279
16:59:12dbussinkthose are some numbers only for *
16:59:28dbussinksame optimization can be done for sub / add etc.
16:59:54dbussinkbasically comes down to using mp_mul_d if the second argument is a fixnum
17:00:02dbussinkand not build a bignum and then do mp_mul
17:00:15dbussinkshaves off 50%
17:01:03dbussinkproblem 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:21DefilerWhy not just make ours 28 bits as well?
17:04:27imajes leaves the room.
17:07:20lopex enters the room.
17:07:49DefilerHaircut time. Back i a bit
17:07:50dbussinkDefiler: dunno if we want to break with mri on that point
17:07:53DefilerWe already have
17:08:02DefilerWe use one more bit for tags already
17:08:24dbussinktrue, but that's transparant
17:08:30dbussinkmri has 29 bit fixnums too
17:09:11DefilerOur max fixnum size is different than MRI's
17:09:50Defiler(2**29).class is Fixnum in MRI and Bignum in 32bit Rubinius
17:10:30DefilerMRI has 30 bit fixnums, unless I am much mistaken
17:12:06dbussinknope
17:12:11dbussinkit's the same on both
17:12:14dbussink2 bit tag
17:12:16dbussink1 bit sign
17:12:55dbussinkah wait, no
17:13:10dbussinksorry, you're right
17:13:16dbussinkso we could go down a bit
17:13:55benburkert enters the room.
17:15:11mutle leaves the room.
17:18:31evanallo.
17:41:09benny leaves the room.
17:42:10dewd leaves the room.
17:44:14benny enters the room.
17:54:48imajes enters the room.
17:57:20benburkert leaves the room.
18:00:46benny leaves the room.
18:01:35joachimm enters the room.
18:02:50octopod leaves the room.
18:02:59mkrauskopf_ enters the room.
18:05:09mkrauskopf leaves the room.
18:19:24edwardam enters the room.
18:19:41edwardamevan: ping ... if you got a sec for a dumb ruby question
18:20:35dysinger enters the room.
18:23:33dbussinkevan: still there?
18:23:45dbussinkwhat do you think of the discussion Defiler and i had?
18:32:30imajes leaves the room.
18:32:55headius enters the room.
18:36:16joachimm leaves the room.
18:39:40eventualbuddha enters the room.
18:40:59Defilerbrixen: pingorama
18:42:52eventualbuddha leaves the room.
18:45:14headius leaves the room.
18:47:03mapar enters the room.
18:47:21brixenDefiler: pongeruma
18:47:37VVSiz enters the room.
18:47:40DefilerWant to help me tilt at the windmill of RSpec today?
18:47:48brixenheh
18:47:49brixenok
18:47:53DefilerI think it reveals some instance_eval issues that will probably haunt us in Rails
18:47:59brixenyah
18:48:23brixendid we get this working? http://git.rubini.us/?p=code;a=shortlog;h=refs/heads/instance_eval
18:48:25DefilerI will paste up the spec/example run
18:48:30brixenk
18:48:36dbussinkbrixen: what do you think of the bignum discussion?
18:48:44dbussinkbrixen: i've been able to speed some stuff up
18:48:50Defilerbrixen: It should work now. We should try it. Might be a simpler thing to examine
18:49:05brixendbussink: where can I view the discussion? I saw your benches
18:49:09headius enters the room.
18:49:16dbussinkjust a small chat with Defiler
18:49:26wycats leaves the room.
18:49:29brixenle'me catch up on channel traffic
18:49:34Defilerbrixen: http://pastie.org/195609
18:49:40headius leaves the room.
18:49:43dbussinkbrixen: it's close to the end
18:49:49Defilerbrixen: That is on rspec trunk
18:50:10joachimm enters the room.
18:50:12headius enters the room.
18:52:16Defilerbrixen: Can't use the rake task as it stands (in rspec) because it has insane dependencies
18:52:21Defilere.g. heckle
18:53:02brixenDefiler: hrm, yeah looks like still eval issues
18:53:30DefilerWe need these dead, though, and we have the infrastructure now to fix them
18:53:31brixenis this rspec head or 1.1.3 or something else?
18:53:35DefilerJust need to come up with a simple repro
18:53:38brixenyep
18:53:47Defilersvn://rubyforge.org/var/svn/rspec/trunk/rspec
18:53:51brixenk
18:53:56DefilerI can switch to something else if you think it best
18:53:58evanyo
18:54:09brixenDefiler: no, that's fine, just want to be on the same page
18:54:11brixenevan: yo
18:55:18benburkert enters the room.
18:56:15enebo leaves the room.
18:56:20brixendbussink: ok, I kinda follow. so the opts depend on changing the number of bits representing a bignum?
18:56:54Defilerit turns fixnums into a degenerate case of bignum, right?
18:57:07brixenhah, I just typed svn up in my rbx dir
18:57:12brixensmacks himself
18:57:22brixenDefiler: ok, I've got rspec trunk
18:57:26DefilerIt should have a python-style "Did you mean 'exit()'" thing
18:57:43brixenheh, totally
18:58:23brixenDefiler: I'm pulling rbx, let me check that eval spec from the instance_eval branch
18:58:50Defilerk
18:58:57brixenDefiler: my concern is that we may need to change mspec to use instance_eval to spec some of these
18:58:58DefilerI'm working on chopping out a simple reproduction
18:59:13brixensince that spec in particular is not possible with block.call instead of instance_eval
19:01:25Defilerhrm.. why does attr_reader even work inside a describe block?
19:01:35DefilerWhat is 'self' these days inside a describe block in rspec trunk?
19:01:37brixendbussink: 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:47brixendbussink: if it's too much noise, I can turn it off
19:02:06brixenDefiler: not sure
19:02:55Defilerholy shit
19:02:56DefilerSpec::Example::ExampleGroup::Subclass_1
19:03:02Defileris what 'p self' produces
19:03:52Defilerspec/spec/example/example_group_factory_spec.rb
19:03:54Defiler43: example_group.name.should =~ /Spec::Example::ExampleGroup::Subclass_\d+/
19:04:01Defilerspace. madness.
19:04:27wycats enters the room.
19:04:30brixenhrm, is this just for isolation?
19:04:56DefilerOk, so this happens when you 'create_example_group' is invoked
19:05:15brixenDefiler: I was thinking, running the rubyspecs with rspec might give insight to the issues as well
19:05:21DefilerOh, indeed
19:05:33brixenDefiler: er, running rspec with rbx *on* the rubyspecs
19:05:35dbussinkbrixen: the idea is that we can use some shortcuts for adding fixnum to bignums
19:05:37DefilerYou want to give that a spin while I try to follow the backtrace?
19:05:43brixenDefiler: sure
19:05:58dbussinkbrixen: libtommath has functions for that, that is 50% faster than constructing a bignum and then adding it
19:06:03DefilerI decided that rspec might be the best way to get rails running
19:06:10Defilerand I think I am right, based on the results here
19:06:12brixendbussink: yeah, that would be a good opt, since when I worked on the float stuff, Fixnum to Bignum took way too long
19:06:13dbussinkbrixen: but the problem is that currently mp_digit is 28 bit by default
19:06:27dbussinkbrixen: i changed it to 29 to test it
19:06:30evandbussink: if it passes the tests, go for it.
19:06:37dbussinkbrixen: doesn't break anything, but no guarantees
19:06:40dbussinkevan: ok
19:06:46brixendbussink: can you just mask? does it have to have exactly the same # of bits?
19:06:49Defilershotgun should be totally fixnum_max agnostic now
19:06:50thehcdreamer leaves the room.
19:06:58evandbussink: you should email tom and ask
19:07:00DefilerSo you shouldn't need to fix anything
19:07:02dbussinkbrixen: well, in that case there is another exception
19:07:03DefilerTom got rid of his email.
19:07:09DefilerCannot be contacted
19:07:14evansee if he has any objections.
19:07:16evanreally?
19:07:17evan :P
19:07:19DefilerYep
19:07:24dbussinkwe can also change fixnum size to 28 bits instead of 29
19:07:34dbussinkdunno if we need more immediate space ;)
19:07:41DefilerI think we should change our fixnum size
19:07:44Defilerrather than altering ltm
19:07:48brixenyeah
19:07:57Defilerltm is a crystal diadem
19:08:45brixenexcept that I wonder about weird stuff not handling the reduced range of Fixnum
19:08:56DefilerWe already have a reduced Fixnum range
19:08:57brixenstuff that doesn't promote and deal with a number as a bignum
19:09:09DefilerSo we're in that boat either way
19:09:12brixenyeah, probably should have specs for e.g. Array in those ranges
19:09:17DefilerWe have some, actually
19:09:22brixencool
19:09:26DefilerFor when we were fixing 64bit
19:09:38DefilerWe had to support platform constants that were bignums, etc
19:10:02DefilerWe have a couple specs that will break, but they are rubinius specs not ruby specs
19:10:11evandbussink: does your optimization requiring twiddling the inside of a mp_int?
19:10:18evanregardless of it's size
19:10:25dbussinkevan: no
19:10:35dbussinkevan: it uses stuff like mp_mul_d / mp_add_d
19:10:51dbussinkthose are already there for multiplying or adding with a mp_digit
19:10:52evanby casting a Fixnum as a mp_digit?
19:10:58dbussinkyeah
19:11:03evanok
19:11:05dbussinkit's also an unsigned long
19:11:12dbussinkbut it truncates it at 28 bits
19:11:18dbussinkor 60 on 64 bit platforms
19:11:19evanreducing Fixnum to be the same size as mp_digit makes sense
19:11:28dbussinktesting atm
19:11:29DefilerI like the idea the more I think about it, personally
19:11:48DefilerWe should lean as hard as possible on LTM
19:11:52dbussinkevan: on something totally different
19:12:00dbussinkevan: i was testing some more numeric stuff
19:12:20dbussinkand it turns out that Type.object_kind_of is pretty slow compared to Object#is_a?
19:12:22evanDefiler: yeah, by having it be a degenerative case, it should improve things
19:12:23dbussink50% slower
19:12:27evandbussink: course
19:12:28evanit does more.
19:12:32evanit checks the return type
19:12:47evanand performs a conversion
19:12:57evanoh wait.
19:13:02evanwhat is object_kind_of?
19:13:07Defileris_a? is inlined, right?
19:13:07evanthis is the first i'm hearing of it.
19:13:10evanDefiler: no.
19:13:16Defilerwhich one is again?
19:13:19evannon.
19:13:21evannone.
19:13:27DefilerHuh. I thought we had a compiler opt for one of them?
19:13:29dbussinkType.object_kind_of
19:13:30evanwe did
19:13:32Defileraah
19:13:33dbussinkType.object_kind_of?
19:13:33evani removed it
19:13:35brixen__kind_of__ ?
19:13:39brixenoh, you removed it?
19:13:43dbussinkit's in bootstrap/kernel.rb
19:13:48evanbecause Rake overrides kind_of?
19:13:56Defiler*sigh*
19:14:11evanthe underscore versions were never added, as I recall
19:14:14evanwe could certainly add them.
19:14:28DefilerWe use that method a LOT in the kernel
19:14:28thehcdreamer enters the room.
19:14:34DefilerWe should make it fast as hell
19:14:36macournoyer enters the room.
19:14:44dbussinkwell, this being slow has for example as a result that the optimization in Numeric#** actually makes it slower
19:14:54evandbussink: where is Type.object_kind_of?
19:15:02evani don't have it in kernel/bootstrap/kernel.rb
19:15:06dbussinkbecause it calls Type.coerce_to, which calls Type.object_kind_of?
19:15:13dbussinkat the bottom here
19:15:25evanoh
19:15:27evanobj_kind_of
19:15:47evanah
19:16:06evanthe reason it exists is as a non overridable Object#kind_of
19:16:10evanbecause things can change kind_of
19:16:18evanand there are times where we need to see through such a change
19:16:32dbussinkyeah, but can we make it faster?
19:16:42dbussinkbecause it's called through Type.coerce_to very often
19:16:57evanType.coerce_to should be moved into bootstrap
19:16:59evanand use assembly
19:17:20brixenevan: what am I missing? http://pastie.org/195616
19:17:31evanie, don't call obj_kind_of? in coerce_to, use assembly to access the kind_of instruction
19:17:59EugZol leaves the room.
19:17:59evanbrixen: you're missing that i'm full of shit
19:18:00evanit would seem.
19:18:03brixenheh
19:18:04brixenok
19:18:08dbussinkbut obj_kind_of? also is assembly isn't it?
19:18:11brixencus I use __kind_of__
19:18:15evandbussink: yes, BUT
19:18:22evanit's assembly in another method
19:18:29evanthus the VM must look up obj_kind_of
19:18:33evancreate a MethodContext
19:18:36evanswitch to it
19:18:36evanrun it
19:18:40evanreturn the vaule...
19:18:52evanif you use the instruction directly, none of that happens
19:19:06evanie, if you, as brixen showed, use __kind_of__
19:19:13evanwhich is wired up to use the instructions directly
19:19:30TheVoice enters the room.
19:20:05dbussinkevan: http://pastie.caboo.se/195618
19:20:07evanthe __send__(meth) can be replaced by using assembly directly too
19:20:16dbussinkthose are some current numbers
19:20:32evandbussink: add in Object.__kind_of__
19:20:36evanto that benchmark
19:20:38evanand rerun
19:20:45evaner. Object#__kind_of__
19:21:25dbussinkevan: updated
19:21:28dbussinklooks a lot better
19:21:47dbussinkthis is 1 million calls
19:22:03evanupdate the pastie
19:22:09dbussinkit's updated
19:22:24evannot for me it's not
19:22:25dbussinkthe switch to 28 bit fixnums results in only two failures :)
19:22:38dbussinkevan: cmd + r ?
19:22:40evani still just see 2 entries
19:22:46evannope
19:22:51dbussinkweird stuff
19:22:53evanreload many times.
19:22:58dbussinki'll put up a new one
19:23:00evanuse rafb.net
19:23:07evanor sure, anoth.r
19:23:12dbussinkhttp://pastie.caboo.se/195622
19:23:29dbussinkthe failing fixnum specs are the ones that test the thresholds :)
19:23:35dbussinkso all looks green for 28 bit fixnums
19:23:43evanok
19:23:54evanwould ya mind pasting the diff before you commit it?
19:23:57evani'd like to see how you're doing it
19:24:48dbussinkyeah, just a min
19:25:47DefilerSo.. "after" in RSpec is a singleton method on a dynamically-generated instance of Class
19:25:51DefilerThat is hardcore
19:26:07DefilerI wonder why they did that.. just to allow 'attr_accessor' and whatnot?
19:26:25dbussinkevan: http://pastie.caboo.se/195624
19:26:34DefilerThey should have called it "nightside of eden", not rspec
19:28:13evandbussink: ah!
19:28:13evanok.
19:28:27evanyou didn't change the way a native_int becomes a Fixnum
19:28:28brixenDefiler: so, with instance_eval instead of block.call, we only have 6 failures in ci, which is much better than before
19:28:38Defilercool
19:28:39evanjust clamped it so that the highest bit in a Fixnum is never used.
19:28:42Defilercan you paste the failures?
19:29:14dbussinkevan: what do you mean exactly?
19:29:53evanyou pushed the FIXNUM_MAX down by one bit
19:29:55brixenDefiler: yeah, will do in a sec
19:30:03dbussinkevan: oh that yeah
19:30:20evanso that nothing has to change
19:30:25evanexcept the code that detects overflow
19:30:25dbussinktrue
19:30:28brixenDefiler: it looks like this passes now, yay: http://git.rubini.us/?p=code;a=commitdiff;h=a0ce88b69d2eacde4e8097682b6cfb4e61cfee6d
19:30:33dbussinkwell, that uses these values
19:30:36dbussinkso it's ok
19:30:42dbussinkonly the spec for the overflow
19:30:43evanyep
19:30:53evani mean I2N()
19:30:58evanI2N() uses FIXNUM_MAX
19:31:02evanto decide what it should return
19:31:11Defilerbrixen: excellent
19:31:27evandbussink: go ahead and commit with the updated specs for cutoff
19:31:35Blinchik leaves the room.
19:31:37evanoh, you made them already
19:31:39evancommit away!
19:31:44dbussinkyeah :)
19:32:24Blinchik enters the room.
19:32:34Fullmoon enters the room.
19:34:02dbussinkhmm, strange
19:34:12dbussink2 ** 28 - 1 => results in a bignum
19:34:20dbussink2 ** 28 - 2 => results in a fixnum
19:34:32DefilerWell, take a look at the definition of FIXNUM_MAX
19:34:36DefilerThat is expected
19:35:15dbussinkbut that wasn't the case when it was 29 bits
19:35:23evanshould have been.
19:35:31evanjust to be clear
19:35:34dbussinkdoh
19:35:34evanbefore
19:35:37evanthe tag was 2 bits
19:35:41evanand there was one bit for sign
19:35:44dbussinki made a mistake
19:35:55evanthus the 29 bits of data
19:35:59dbussink2 ** 28 - 1 should be a fixnum
19:36:07dbussinkand it is again now
19:37:09dbussinkevan: but i guess this kind of stuff all still needs to be put in the new vm?
19:37:12thehcdreamer leaves the room.
19:37:21ezmobius enters the room.
19:37:21evandbussink: yep
19:37:28evandbussink: should be easy to patch in
19:37:31evanif you want to do it
19:37:38evandon't worry about the primitives for right now
19:37:46evanbut the rest should go in
19:37:59dbussinkand write some c++ tests for it then :)
19:38:36brixenDefiler: I chopped out the dots so it would paste: http://pastie.org/195630
19:39:08DefilerCool. 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:43brixenDefiler: k, there's 6 errors with ci only (i.e. not ci -B full.mspec)
19:40:38mkrauskopf_ leaves the room.
19:40:39Defilerwait, what does the second command run?
19:40:53mkrauskopf enters the room.
19:42:13dbussinkDefiler: also run the library spec
19:43:25brixenDefiler: peek at spec/default.mspec and spec/full.mspec
19:43:39brixenbin/ci uses default.mspec and doesn't run spec/frozen/1.8/library
19:43:55Defileroh hoh. Hadn't seen this before
19:44:05DefilerWhat does the m stand for these days? :)
19:44:11brixenyeah, just changed it a couple days ago
19:44:16brixenbots are running with full.mspec
19:44:25brixenDefiler: m as in bmw m :)
19:44:41DefilerNice.
19:44:43DefilerI like that
19:44:45brixenheh
19:45:22brixenon array, we run rspec at 5 sec and mspec 3.8
19:45:23DefilerIt stands for 'Motorsport' by the way
19:45:27DefilerI love that word
19:46:53tarcieri*boggle*
19:47:07tarcierii forgot my github password, and resetting it doesn't appear to tell you your username
19:47:33evantarcieri: hey, so, would you tell me how you got mongrel running?
19:47:42tarcieriokay, I'm an idiot and was copying spaces on the password
19:48:28tarcierievan: 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:42evanoh, i thought you said you have it working using the native parser
19:49:06tarcierinope, just ran the parser tests against it and confirmed it was working
19:49:12evanok.
19:49:29brixenDefiler: 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:43tarcierievan: all I can say is... it should work, I think, heh
19:49:50evanok
19:49:53evanwhere is the native parser?
19:49:55evanchecked in?
19:50:10tarcieriyeah, lib/http11.rb
19:50:29evanhrm
19:50:31evanthats why i missed it
19:50:35evanit should be under mongrel.
19:50:39boyscout1 commit by Dirkjan Bussink
19:50:40boyscout * Optimize numeric operations; 62d2efb
19:50:51evanor does mongrel call it actually "require 'http11'"
19:50:53tarcieriyeah, I originally had it under mongrel... the Mongrel gem looks for it in the toplevel though
19:50:54tarcieriyep
19:50:58evanah
19:51:00evanbleh.
19:51:01evanoh well.
19:51:20evanwhere was the original input?
19:51:20DefilerWhy doesn't "require 'mongrel'" work then in rbx?
19:51:25brixenDefiler: 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:43Defilerbrixen: I think I agree with that, yeah
19:51:45tarcierievan: the original Ragel?
19:51:50DefilerIt seems like a smaller bite-sized piece
19:51:53gnufied leaves the room.
19:51:53tarcierievan: that's under lib/mongrel
19:51:54evanthe original .rl file
19:51:54evanyeah
19:51:55brixenDefiler: k
19:51:56evanoh oh.
19:51:56evanok.
19:52:07tarcieriI have to munge the output though
19:52:15tarcieriI can check in the script to do that too
19:52:19tarcieriif you want to play around with it
19:52:38evanright
19:52:39enebo enters the room.
19:53:11evani've been working with Adrian to make the output more sane.
19:53:13anteaya enters the room.
19:53:26ezmobius leaves the room.
19:53:33brixenDefiler: cd mspec: http://pastie.org/195640
19:53:42tarcierievan: sweet
19:53:57Defilerk. let me branch off here
19:55:25DefilerOK. So you are running which command here? -B full_mspec etc?
19:55:35brixenwell, just bin/mspec ci for now
19:58:05brixenDefiler: do you get 6 errors with mspec ci ?
19:58:49Defilersec. had to wait for a rebuild
20:00:35joachimm leaves the room.
20:01:18Defilerheadius: 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:23Defilerheadius: I love that quote
20:01:36Defilerbrixen: but yes, 6 errors here too
20:01:55brixenk, how do you want to tackle this?
20:01:57headiusDefiler: is that in yegge's article?
20:02:00tarcieriDefiler: heh, did you see any of the articles about Opera doing profile guided optimization?
20:02:02evanheadius: yeah
20:02:07headiusyep yep
20:02:14Defilertarcieri: nope. link?
20:02:17Defilerbrixen: /bin/mspec ci spec/frozen/1.8/core/class/new_spec.rb
20:02:22Defilererr.. ./bin
20:02:30DefilerI think that command will get us all we need to know about this problem
20:02:34Defiler(but I could be wrong)
20:02:39brixenDefiler: k
20:03:05tarcieriDefiler: http://my.opera.com/desktopteam/blog/2008/05/09/profile-guided-optimizations
20:03:12rubuildius_amd64Dirkjan Bussink: 62d2efbed; 2107 files, 6859 examples, 25050 expectations, 0 failures, 0 errors
20:03:16tarcieriDefiler: it's just funny how with the JVM you get that for free
20:03:31Defilerbrixen: This is a crazy failure wow
20:03:38Defileralso oh god this song is so great
20:04:19evantarcieri: using profile guided optz in gcc is a pain.
20:04:26tarcieriheh
20:06:32DefilerThis is the perfect instance_eval music: http://hellninjacommando.com/adtrw/voyage_of_gurdjieff.mp3
20:06:46dewd enters the room.
20:08:01DefilerThis is an astonishing failure: http://pastie.org/195645
20:08:25Defiler MyClass.name.should == "MyClass"
20:08:31Defileris the line it fails on. forgot to mark that
20:08:47Defilerbut it doesn't fail because the name is wrong.. it fails because it gets const_missing on MyClass
20:09:50joachimm enters the room.
20:10:00rubuildius_ppcDirkjan Bussink: 62d2efbed; 2107 files, 6861 examples, 25076 expectations, 0 failures, 0 errors
20:10:19dgtized leaves the room.
20:16:13joachimmevan: could you provide some feed back on my patch. http://rubinius.lighthouseapp.com/projects/5089/tickets/551
20:17:23joachimmI thought I should get some hints before moving forward with more tests.
20:18:36brixenDefiler: http://pastie.org/195653
20:18:42brixenDefiler: that works fine in rbx
20:19:04evanjoachimm: looks good!
20:19:10Defilerbrixen: http://pastie.org/195655
20:19:50DefilerCheck out that paste as well, evan. That (amazingly) fails in rbx
20:20:38evanwhats it do?
20:20:42brixenhrm, won't instance_eval on other than a class or module
20:20:57wycats_ enters the room.
20:21:13DefilerIt fails when it tries to set the const
20:21:13evani'm pretty sure thats because the the cdecl instruction pushes self
20:21:20evanthen sets the const on that
20:21:30Defilertrying to make sure this is the failure that is breaking rspec right now
20:22:09Defilerin MRI that makes a toplevel const
20:22:25DefilerSo I guess it uses the instance_eval caller's scope?
20:22:26evanwe should treat this the same as method definition
20:22:34evanlets just push constant setting first class
20:22:42evanleave constant retrieval in the VM
20:22:48DefilerOK
20:23:22evanuse the same
20:23:27evanpush_context trick
20:25:14DefilerSounds good
20:25:32brixenDefiler: gonna grab some lunch, bbiab..
20:25:47DefilerCool. I'm going to work on this now
20:25:59Defilerbut I need to go pick up some hose fittings soon :)
20:26:41brixenDefiler: if you want to point me to something else, cool. otherwise I'll work in getting the docs moved to rubyspec.org
20:26:45brixenand updating our readme, etc
20:27:15Defilerevan: Can you remind me exactly what the meaning of @compiler.kernel? being true is again?
20:27:26evanmeans that kernel/ is being compiled.
20:27:39DefilerLiterally just that the target file is under that path, right?
20:27:41evanyou should have the new const set code be not while in kernel
20:27:46evanDefiler: no no
20:27:50evanit's a compiler flag passed in
20:27:54Defileraha
20:28:00evanwhich is only passed in when compiling the kernel
20:28:03DefilerSo yeah, I just want to modify the other branch of that code
20:28:33anteaya leaves the room.
20:30:09ezmobius enters the room.
20:31:11dgtized enters the room.
20:33:27DefilerThat fixes the error when setting it, but not the instance_eval problem
20:33:34Defilerinteresting
20:34:45evanhow are you setting it?
20:34:47evanthats the biggy
20:36:04Defilerevan: http://pastie.org/195660
20:36:07DefilerIs that wrong?
20:39:24wycats leaves the room.
20:39:49evanseems ok
20:40:00evanoh oh.
20:40:03evanhrm.
20:40:24evanso, whats the case that breaks?
20:40:33evanaccessing a constant inside instance_eval?
20:40:50DefilerActually, that change causes some ci errors
20:41:37Defilere.g. http://pastie.org/195665
20:41:46Defiler(line numbers should be unmodified)
20:41:54Defilershould be == are
20:41:58evanhrm
20:42:02evandouble check the behavior in MRI
20:42:08imajes enters the room.
20:42:13evani recall strangeness with constants and instance_eval
20:43:06Defilerhttp://pastie.org/195668
20:44:40evando it NOT on object.
20:44:55evanyou need to find out if the context of the object or the context of the closure is used.
20:44:59evanright now, you have them the same
20:45:03evanmake them different, then check the behavior.
20:45:42NoKarma enters the room.
20:45:54Defilerright
20:47:37Defilerwow this is not what I was expecting to see
20:47:38Defilerhttp://pastie.org/195671
20:48:11NoKarmaheya
20:48:17Defileryo
20:48:37evanDefiler: right, thats why i wanted you to check
20:48:45DefilerYeah, good thinking
20:48:49smparkes leaves the room.
20:49:01evansadly
20:49:03NoKarmadamn cool that rubinius is now running merb
20:49:08DefilerTrue also if crazytown is a singleton method on Crazy
20:49:10evanthe context of the closure is still used
20:49:11smparkes enters the room.
20:49:23evanwhich means that instance_eval is only a partial context change.
20:49:59DefilerThat is astonishingly irritating
20:50:21evanincredibly so.
20:50:33evanbut, we have a work around.
20:50:36DefilerDo we?
20:50:39evanwe do.
20:50:54evanwhen instance_eval is used, we need to stash the original staticscope somewhere
20:51:06Defileroh hoh
20:51:22evanthen we need to tag a MethodContext as being used as instance_eval
20:51:29DefilerCheck out the big brain on evan. That is clever.
20:51:39evanand have it check it's flag, and use the saved staticscope chain
20:51:48DefilerSo instance_eval should set the flag on the caller's MContext?
20:51:51evanbtw, staticscope is loosing the name static in the new VM.
20:51:52evanit's just scope.
20:52:01DefilerCool
20:52:02evanno
20:52:09evaninstance_eval has to set the flag on itself.
20:52:12evannot on the caller.
20:52:22evanthe caller of instance_eval isn't an instance_eval
20:52:28evanit's just a normal context
20:52:36DefilerIt's the thing that asked for it, though
20:52:45evanwe need to detect if we're actively inside an instance_eval
20:52:49DefilerI see, though.. instance_eval's MC has already copied it
20:52:56evanno
20:53:00evani think you're confusing yourself.
20:53:16evanto perform an instance_eval
20:53:21evana BlockEnvironment is created
20:53:23evanthen called
20:53:29DefilerThe staticscope of MethodContext.current is the same on the first line of 'def instance_eval' as it is in its caller, right?
20:53:32evanthe calling creates a BlockContext class
20:53:42evanwe have to 'tag' that BlockContext class somehow.
20:53:51evanperhaps tag the BlockEnvironment
20:54:00evanand override __const_set__ on BlockContext
20:54:07evanto check it's env to see if it was an instance_eval
20:54:46evanoh, then we can save the original staticscope chain in the BlockEnivronment
20:55:25evanDefiler: no
20:55:36evanthe staticscope of a method IS NOT the same as it's caller.
20:56:02DefilerOh, right. Of course not
20:56:18evansee where I'm going with this though?
20:56:25DefilerIt's the same for methods in the same module as def instance_eval
20:56:36evandon't worry about what it is.
20:56:44DefilerYeah. I'm trying to understand exactly which method call would save off the staticscope chain though
20:56:44evanit actually doesn't matter for this.
20:56:55evanthe call to instance_eval
20:57:05evaninside the instance_eval method
20:57:16evanwe replace the staticscope of the CompiledMethod that represents the block
20:57:39yipstar leaves the room.
20:58:43DefilerSo before 'call_on_instance'
20:58:56evanyes
20:59:02DefilerGotcha
20:59:24evancrap
20:59:31DefilerI 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:34evanwe have instance_eval calling instance_exec now
20:59:37evanwe have to change that
20:59:41evanlets get rid of that
20:59:43DefilerI thought that was how it works?
20:59:49evandon't have instance_eval call instance_exec
20:59:53evanit confuses me.
20:59:54Defileroh, for procs
21:00:00evanyeah
21:00:03evanwhich is the case we're on.
21:00:07Defilerfor sure
21:00:11wycats enters the room.
21:00:34evanDefiler: so, another bug I just realized in instance_eval
21:00:36evanof a proc
21:00:49rby enters the room.
21:00:57evanline 541
21:01:09DefilerYeah, that is super wrong
21:01:13evanwe're changing the staticscope of the CompiledMethod that contains the code
21:01:17evanit's actually right
21:01:22evanbut there is a bug with it.
21:01:25Defiler"metaclass" is wrong, right?
21:01:28evanno
21:01:41evani don't think so...
21:01:42DefilerOK. I guess I don't get it then
21:01:50Defiler(the bug)
21:02:02evanthe bug i was going to mention is that right now
21:02:16evanwe're changing the singel CompiledMethod object for the block
21:02:27evanso if we pass a block to instance_eval
21:02:30evanit's forever changed
21:02:33evaneven if we call it again
21:02:34Defilerohh
21:02:48evanit 'sticks' in instance_eval mode
21:02:53evanso we need to be dup'ing the CompiledMethod
21:02:56evanmanipulating it
21:02:59evanthen using it.
21:04:01evanthe metaclass is there because thats the logic we worked out for method definition in an instance_eval
21:04:13evanmethods go on just that one object
21:04:32evanyay for MRI, it doesn't obey that for constants though :/
21:05:36evanheadius: ?
21:05:39Defilerhttp://pastie.org/195689
21:05:41Defilerso like that?
21:05:53headiussup
21:05:53evanprobably need to dup env too
21:06:00Defilerredirect_to does
21:06:04evanok then
21:06:23evanheadius: jruby has the same scope chain because it doesn't have cref anymore, right?
21:06:36evanif so, what info does instance_eval use?
21:06:47headiuswhatever the scope is
21:06:49evanseems that it uses half the info from the closure, half from the object
21:07:01headiusMRI always puts constants in the block's containing class, not the instance
21:07:12Arjen_ enters the room.
21:07:24headiusI believe that's changed in 1.9, not sure
21:08:00evanhow do you define "block's containing class"
21:08:00headiusso 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:02evan?
21:08:06headiuslexical scope
21:08:18Defilerevan: 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:34trythil leaves the room.
21:08:36DefilerI'm imagining that BlockEnvironment will get a new accessor called instance_eval_scope
21:08:39evanheadius: gotcha, so instance_eval doesn't modify the original lexical scope of the block
21:08:44headiusthat's right
21:08:48evanheadius: ok
21:08:50Defilerbut I'm stumped as to where we get the value to assign to it
21:08:55evanso then in jruby, for method definition
21:09:01headiusit just changes self and a couple other things
21:09:03evando you just detect that the current scope is an instance_eval?
21:09:06evanto decide where to put the method
21:09:21evan"".instance_eval { def suck; 1; end }
21:09:30evansuck a singleton method
21:09:32evanof ""
21:09:40Defilerheadius: run this code: http://pastie.org/195694
21:10:22headiusDefiler: same output as MRI
21:10:42headiusevan: there's two separate constant stacks
21:10:43Defilerright, 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:44headiusin JRuby
21:10:52headiusDefiler: no
21:11:01Defiler<headius> MRI always puts constants in the block's containing class, not the instance
21:11:04Defileris the line I am referring to
21:11:12evanheadius: and a DynamicMethod has pointers to both?
21:11:16DefilerIn that code, they go to toplevel
21:11:41headiusyeah, because the block is rooted at toplevel
21:11:47evanDefiler: thats what he means
21:11:48headiuslexically, its outer scope is toplevel scope
21:11:58DefilerAha, yes
21:12:05Defilertricky
21:12:05headiushence the toplevel warning too
21:12:21headiusevan: no, dynamicmethod only tracks the cref equivalent
21:12:36headiusthere's a separate thread on the stack for the "rubyclass" stack, which also exists in MRI
21:12:37Defilerevan: So, in rubinius, what does the line in the kernel look like to access the staticscope of that block?
21:12:46DefilerMethodContext.current.foo
21:12:55headiusconstants follow cref
21:13:04headiusI think methods and some other things follow rubyclass
21:13:07ctennis leaves the room.
21:13:09headiusit's not consistent
21:13:21DefilerInteresting.
21:13:32DefilerI didn't have that terminology in my head before, but I like it
21:19:53dgtized leaves the room.
21:28:42ctennis enters the room.
21:36:34Yurik leaves the room.
21:38:51drbrainhrm, it seems that close isn't working right
21:38:55drbrainfor IO
21:40:47drbrainI wish I had strace :/
21:41:41evanyou do
21:41:42evandtruss
21:48:06ineffablygregory enters the room.
21:50:08dgtized enters the room.
21:54:11qwert666_ enters the room.
22:00:41binary42_ leaves the room.
22:12:12qwert666 leaves the room.
22:18:16dewd leaves the room.
22:18:34macournoyer leaves the room.
22:18:55drbrainok, it looks like our popen is wrong
22:19:15drbrainI only see one pipe here, for parent read/child write
22:19:22drbrainI don't see parent write/child read
22:19:25drbrainIO.popen
22:20:26evanhm
22:20:27evanlet me look.
22:20:46drbrainI'm comparing to 1.8's