Index

Show enters and exits. Hide enters and exits.

00:15:34evanok!
00:15:42evanfinally got the MOP sorted out.
00:16:29brixensweet!
00:16:48evanMetaClass is gone.
00:16:57brixenlong live MetaClass
00:17:01evanin it's place, there is Class#__metaclass_object__
00:17:10brixenmm interesting
00:17:13evanwhich returns non-nil for a metaclass
00:17:19evansounds kludgy
00:17:21evanit is a bit
00:17:32evanbut the semantics dictate it to a certain extent
00:17:54brixensadly, correct is always better than elegant
00:18:33brixendid this affect #32 at all?
00:19:17evanchecking
00:19:45evandunno yet
00:19:49brixenk
00:19:54brixenjust curious
00:20:28evanbut 37 runs properly now.
00:20:38evanwhich is pretty much the MOP horror test.
00:22:59brixenheh, small world
00:23:14brixenI'm sitting here and realized a former client is seated next to me
00:23:20evanha
00:23:40brixenI'm not at my desk obviously
00:23:45brixenheh, that'd be too weird
00:24:41brixenI'm going to ask them about testing their sites on rbx :)
00:24:47evango for it!
00:24:52brixenheh, I am!
00:28:24brixenok, maybe early jan we're going to sit down and run in a staging env
00:28:34brixenlooks like they're using nokogiri
00:31:30evanwe can do that :)
00:31:38brixenyep
00:33:46evanMOP MOP MOP
00:33:47boyscoutFix the MOP. Fixes #37. Passes MOP horror test. - ab073c4 - Evan Phoenix
00:33:47boyscoutWork spec around broken unpack() - 3e593f9 - Evan Phoenix
00:33:50evanMOP MOP MOP
00:34:17brixenheh MOP Horror Test (tm)
00:34:58evanseriously
00:35:08evanthat thing makes metaclasses of metaclasses of metaclasses
00:36:30brixencrap, just remembered...
00:36:48brixenevan: seen? http://www.flickr.com/photos/yugui/3571683843/
00:37:00brixenand http://www.flickr.com/photos/yugui/3572489968/
00:37:21brixenthere's ones for 1.9 too
00:37:24evanmmm, not these ones specifcly
00:37:28evanbut ones that were close
00:37:32brixenah ok
00:37:52evanbtw
00:38:05evanit's the horiz lines coming out from metaclasses that the MetaClass class went away
00:38:19evanthe reason it went away
00:38:48evanbecause Meta:Bar.class == Meta:Class
00:39:23brixenhm
00:40:57evangets his tools out and attacks String::Unpacker
01:59:01rueMetaobject protocol may be a nonobvious acronym.
02:00:08brixenI think all acronyms are non-obvious
02:02:40rueI like trying to guess acronyms
02:03:00ruePerhaps s/nonobvious/little-known/
02:06:07evanit will be fun for them to find out
02:06:13evanit's like a scavenger hunt
02:11:31brixenevan: boyscout never reported and I think you need to remove metaclass.rbc from bootstrap and delta load_order.txt
02:11:41brixengotta run to class or I'd push this
02:11:47brixenbut I don't want to push and run
02:11:48evanack.
02:12:12brixenok, bbl...
02:23:30rueMaybe.
02:23:50rueWonder if the standardisation to "eigenclass" will work out. It is an unwieldy word
02:28:15rueHuh, it dropped to -2ºF, going to see how the kitties like it and go to bed
03:09:28boyscoutHide a tasty MOP tidbit in the glossary - 750f10d - Wilson Bilkovich
03:11:05boyscoutCI: Build 750f10d failed. http://ci.rubini.us/rubinius/builds/750f10d011ea7d12fea0aabe0473497de269331b
03:16:46Defilerbrixen: These flickr shots of the 1.8 metaclass hierarchy.. am I reading the diagram wrong? It looks like it shows Class as the metaclass of Object's metaclass
03:17:35Defilerbut Object.metaclass.metaclass is Class:<Class:Object>, right?
03:53:55dwaiteooh, < < metametaclass > >
05:00:22boyscoutMoved compiler signature file. - fb79289 - Brian Ford
05:00:22boyscoutRemoved metaclass.rbc from kernel loading files. - c573065 - Brian Ford
05:09:48boyscoutCI: c573065 success. 3017 files, 11576 examples, 35678 expectations, 0 failures, 0 errors
07:58:18DefilerI've found some more places where the MOP is different from 1.8, got all but one of them fixed, and a bunch more things commented
07:58:29Defilerbut I should get some sleep so I will finish it tomorrow
07:59:33DefilerClass.metaclass.metaclass.superclass and Class.metaclass.superclass.metaclass should be the same object
08:06:02Defileraha, got it
08:13:02dbussinkevan: i saw you didn't reopen 114 yet, got time to take a look at it?
08:16:10boyscoutCorrect superclass for meta-metaclasses, document MOP - de83717 - Wilson Bilkovich
08:16:17Defilerthat was fun
08:17:06Defilerbrixen: evan: please feel free to review that commit; I'm pretty sure it is now exactly like 1.8.7, minus an inconsistency that isn't worth emulating
08:20:07DefilerThe superclass of (Class's metaclass) changes in 1.8.7 after you open a metametaclass on it
08:20:16Defilerand that is insane
08:24:14boyscoutCI: de83717 success. 3017 files, 11576 examples, 35678 expectations, 0 failures, 0 errors
08:33:53evanDefiler: you still there?
08:33:58Defileryeah
08:34:44evanline 420 in object.cpp is bad news.
08:34:59DefilerHow so?
08:35:02evandon't ever cast like that
08:35:12DefilerOh, crap, forgot, yeah
08:35:16evanwell for one
08:35:25evanthere is no promise that class_object() is actually a MetaClass
08:35:30evanif you expect it to be
08:35:32evanyou need to validate that
08:35:38evanand handle the case for it not being there
08:36:03DefilerYeah, that part is ill-advised, definitely
08:36:27evanthat line alone is why metaclass returned a Class*
08:36:31evanbecause for, say, Fixnum
08:36:37evana Fixnum, rather.
08:36:39DefilerIt seems like a place for an assert, so therefor an as?
08:36:41evanFixnum the class is returned
08:36:45evanwhich is not a MetaClass.
08:37:01evanso either you should assert that metaclass can't be called on non-references
08:37:10evanor change metaclass back to just returning a Class*
08:37:26evanand require the caller of metaclass() to sort it out
08:37:57DefilerVirtually everything casts it to a Class* by passing it straight into something that expects that
08:38:17Defilerso there isn't much fuss in putting it back to Class*, but I'll take a look at what guarantees there are for a sec here..
08:38:19evanwhats it?
08:38:31Defilerthe return value of metaclass()
08:38:35evangotcha
08:38:42evanprobably easier to have it return a Class* then.
08:38:59DefilerOK, so we never actually get to this code for a Fixnum accessed from ruby
08:39:13Defilerso calling this on an immediate in the VM would be a bug, I'd say
08:39:50evannah
08:39:59Defilerbut I'll just change it back
08:40:01evannot a bug
08:40:07evanFixnum is the metaclass of 1
08:40:25Defileryou get a typeerror doing that in ruby though
08:40:29evana comment in there indicating that non-reference's metaclass is the class itself
08:40:34evanwould be prudent.
08:40:59DefilerWhy should this mechanism have a different definition of metaclass than the one ruby exposes?
08:41:08evanit doesn't.
08:41:20evanin ruby, the metaclass of 1 is Fixnum.
08:41:25DefilerHow so?
08:41:44Defilerwell, I mean, its 'klass' is Fixnum
08:41:46evanit's documented as such.
08:41:52evanthe MRI docs indicate that.
08:42:21DefilerHuh. That just doesn't seem like a useful definition of metaclass to me, but oh well
08:42:33Defilersince the object system already handles the case of an object not having a metaclass
08:42:48evanif thats going to be the case
08:42:55evani'd rather NOT have this method hard fail.
08:43:03evanie, raise an exception
08:43:10evansince it's at such a lowlevel.
08:43:25evanand thusly, returning a best try is better imho.
08:43:28Defileryeah, makes sense
08:43:34Defilerthere's lots of code guarding this already
08:44:18evanok, i'm off to bed.
08:44:39evannite
08:44:55Defilernite. thanks for noticing that haha
08:54:12boyscoutChange metaclass() return value back to Class* - e86eb17 - Wilson Bilkovich
09:00:40boyscoutCI: e86eb17 success. 3017 files, 11576 examples, 35678 expectations, 0 failures, 0 errors
13:44:14scooprhttp://blip.tv/file/2232410 =)
15:48:57dwaiteman what is with all the net splits lately?
16:02:13cypher23dwaite, there's a DDOS going on against a few Freenode servers
17:40:42brixenmorning
17:51:48rueHi ho
17:51:50evanmorning
17:51:52evanreading http://qntm.org/?destroy
17:51:53evanand loving it.
17:55:35brixenit's much easier to destroy all the people on the earth
17:56:00dwaitedef.
17:56:11dwaiteBYOO2, nice
17:56:35evanheheh
17:56:37evanSwallowed up as the Sun enters red giant stage
17:56:37evanYou will need: patience
17:56:45brixenI like the "You will need"
17:56:48brixenheh yeah
17:57:30evanhehe
17:57:32evanCrunched
17:57:32evanYou will need: considerably more patience
17:57:47evanthat one is wait for the universe to finish expanding.
18:14:52rueHm, it gets crunched?
18:17:06evanthats one of the scenarios
18:17:18evanafter it expands, it contracts
18:17:39evancrushing all matter into a single point
18:17:55evanthen bigbang, the next generation, begins!
18:18:14evani'd call it BigBang 2.0, but we've got no idea how many times that might have already happened.
18:28:26brixenalas, time to tackle these #require specs
18:29:10brixenlasso, tie up, brand, drug, kick in the butt back out to pasture
18:29:48evansounds like my teens.
18:30:07evani helped a friend during calving season on his ranch in my teens.
18:30:12brixenfun!
18:30:15evanit was not I that was branded and drugged.
18:30:20brixenheh
18:30:21evanat least not in my teens.
18:30:28evannow college....
18:30:42brixenpics or it didn't...
18:30:43brixenheh
18:30:53evanthen it didn't happen.
18:30:56evanthats why there are no pics.
18:31:17brixentoo bad
18:31:27evan*wink, wink8
18:31:28evan*
18:31:31brixenheh
18:32:03rueHm. I think I walked past this "LA Ink" place last time I was there
18:32:19evanon La Brea
18:32:22evannear Fountain
18:32:32evanacross the street from Jon's, the grocery store
18:32:55evannext to Edible Arrangements!~
18:33:08evanthats in my hood
18:33:12evanif you couldn't tell.
18:37:08rueHaha
18:37:25rueMaybe you could get rbx some air time by getting an elaborate tattoo
18:37:45evanmaybe when 1.0 is out.
18:37:55dwaitewould be a great time to announce the logo was changed to a reuben
18:37:56evanI think that kat has a long waiting list.
18:37:57rueMaybe :P
18:38:09evanas do the rest of the artists that are on the show.
18:38:22rueFame does that to a place, I imagine
18:38:23boyscoutRefactor String::Unpack into some methods - 28d6afc - Evan Phoenix
18:38:24boyscoutFix unpack's i and l modes - d19c3f1 - Evan Phoenix
18:38:24boyscoutAdd better i and l String#unpack specs - 8cf171e - Evan Phoenix
18:38:24boyscoutRemove debugging in spec - 0c47b7e - Evan Phoenix
18:38:27evanthis subject has come up among my friends before
18:38:29rueI had not seen the show until now
18:38:40evanare you watching one with Pixie?
18:38:50evanKat's friend who was the receptionist
18:39:01rueMm, no, some guy is the receptionist
18:39:05evank
18:39:10evani haven't watch in a whil
18:39:11evane
18:39:16evandon't think i saw it at all last season.
18:39:19rueSeason 2 apparently
18:39:30evanyeah, we watched some of season 1
18:39:38evanit's what abby and I call "vacation TV"
18:40:57rueI am thinking of finally getting another tattoo...been planning a día de los muertos skull done as a mosaic , or an art nouveau piece
18:41:02evanTV you only watch on vacation
18:41:05rueHeh
18:41:09evannot TV that is itself a vacation.
18:41:28evanrue: oh nice.
18:41:31rueMy TV watching has gone up 100% because I ran out of movies to watch while on the trainer
18:41:35evani've been considering a bit more ink myself
18:42:53evanrue: hows the knee?
18:42:57dwaiteI've never been inspired or drunk enough to get something inked perminently on my skin
18:43:04boyscoutCI: 0c47b7e success. 3017 files, 11580 examples, 35697 expectations, 0 failures, 0 errors
18:43:06dwaiteI think I'd actually need to be both
18:43:21evanyou do have to sign a waiver when you get a tattoo that says you're not drunk.
18:43:36evannot that that keeps people from getting tattoo's drunk.
18:44:12dwaiteyep, but it does help make you look like an ass when you go back and threaten to sue the next day
18:44:39evanthats the idea
18:45:01dwaitemaybe I could get one on my back that says 'dude' or 'sweet'
18:45:16dwaite(that'd be a tough choice though)
18:46:14evanhah.
18:46:22evanhow will you decide!?
18:46:38evanWHAT DOES MINE SAY?! SWEET! WHAT DOES MINE SAY?! DUDE!
18:46:58evanah Dude Where's My Car, that bastion of modern cinema.
18:47:03dwaitethat one scene made that whole movie bearable
18:48:15dwaitethere are other good ones
18:50:24evanno and then!
18:50:45dwaitethis is an emergency dude! so's this, its a breakdancing stripper emergency!
18:52:03evanwho wants to talk about Undefined briefly
18:52:15evani need to bounce some ideas around.
18:56:29evani'm boggled at this: http://www.python.org/download/releases/2.3/mro/
18:56:33evanso complicated
18:56:34evanman.
19:01:00brixenevan: shoot
19:01:08evanso
19:01:13evandoing
19:01:19evanObject.const_get "Undefined"
19:01:20evandoesn't work
19:01:35evanbecause recursive_const_get uses Undefined internally as a sentinal value
19:01:41evanto indicate that no values was retrieved
19:01:50brixenk
19:01:58evannow, i can special case Undefined in #const_get
19:02:28evanbut I'm wondering if Undefined shouldn't be supported via a compiler plugin
19:02:39evanand perhaps an instruction
19:02:43evanie, not a real constant.
19:03:06brixenhm, how does that change this case?
19:03:28evanit wouldn't be in Object.constants
19:03:35evanand thusly you wouldn't expect to be able to get it via const_get
19:03:38evanthats how this came up
19:03:41brixenok
19:03:43evanObject.constants shows Undefined
19:03:47brixengotcha
19:04:05evani should note also that Undefined is going to get us into trouble: http://www.google.com/codesearch?q=lang%3Aruby+Undefined&hl=en&btnG=Search+Code
19:04:08evanother people do it too.
19:04:23brixenheh, yeah
19:04:24Defilerbrixen: Got a second to let me bounce a MOP concept off you?
19:04:25evanand they create a toplevel Undefined class
19:04:29evanwhich will break instantly.
19:04:34brixenDefiler: sure, sec..
19:04:44evanbecause we've got it as pointing to an bare object
19:04:49brixenyeah
19:04:59brixenwell, it needs to be a lower level thing then
19:05:25brixencrazy how many things just get totally broken in Ruby based on impl details of MRI
19:05:38evanyep.
19:05:46brixenlike, we could have a nice interesting system, in an alternate universe
19:05:52evanso, I can make it so that Qundef in the VM is spelled Undefined in rubyland.
19:06:05brixenthat's what I was wondering
19:06:18brixensince we have Qundef, how to make it work in rubyland
19:06:19DefilerRuby should just introduce None, a la Python
19:06:23brixenwithout breaking something else
19:06:33brixenNone is nil, no?
19:06:37evanhow about LikelyNot
19:06:47evanor MMMMMMMMMNo
19:06:53brixenhow about NUL
19:06:55brixenheh
19:06:58DefilerI thought of an evil hack
19:06:59DefilerNaN
19:06:59rueevan: Knee is fine, no more bone showing on the ankle and even the back is in usable shape. Probably only 80-90% of what it was
19:07:04brixenMu
19:07:45evanrue: thats good to hear it's getting back in shape
19:07:47brixenmake it french Non
19:08:20rueProbably never going to be better than the 90% :) 'S not so bad though
19:08:28brixenNon, non, je ne regrette rien
19:09:13evanRien
19:09:14evanhehe
19:09:33evancamu would be proud.
19:09:37rueIt is not used a lot
19:09:41evanif he knew what a programmer was.
19:09:43rueUndefined, that is
19:09:48evantrue, it's not.
19:10:09rueAll uses thereof are for the same purpose, too
19:10:15evanyep
19:10:29evana sentinal non-value..
19:10:37rueSo one avenue would be to have it added to spec
19:10:46evanruby-std?
19:10:52evani need to do this today
19:10:54evannot in 3 years.
19:10:56rueHeh
19:11:14evanpeople use use nil normally
19:11:18evanand live with the downside.
19:11:22rueI think I would leave it as-is
19:11:27brixenI'd make it a singleton like nil
19:11:32brixenbut with a different name
19:11:52brixensince nil masquerades as a value too often
19:12:03evanhm
19:12:08rueCould add it as a pseudo-value "undefined", sure
19:12:09evanrue: well, i have to change something about the setup
19:12:28evansure, i can turn a vcall to undefined into push_undef
19:13:07evanand have that only on in the kernel
19:13:15rueI kind of like the option to offer it to end-developers too as an internal sentinel, but that does require some co-operation
19:13:21evanyeah
19:13:26rueAnd does not need to be done immediately
19:13:27evanwe can do that
19:13:34evanbut i think we should solve our need first
19:13:40rueYep
19:13:53evanok, so
19:13:55ruebrixen: Pseudo-var?
19:14:06evanyou guys think turning some syntax into a push_undef instruction is fine though
19:14:07evanyes?
19:14:15evanso it's really then deciding on what syntax
19:14:28DefilerIt seems like something that would be less likely to conflict than a toplevel constant
19:14:41rueAlong with true/false/nil, undefined seems best
19:14:43evanUndefined is nice because we already have it
19:14:51evani don't have to change any code
19:15:01evanand we don't have to open the reeducation camps
19:15:01Defilerthe problem with Undefined is that if you bump into it, there's not a good workaround
19:15:06ruePlus Undefined stands out a bit better
19:15:09Defilerwhereas undefined would let you do undefined(), self.undefined, etc etc
19:15:25evanDefiler: it's not going to be a real method though.
19:15:26Defilerbut I agree with rue that Undefined is a little more obviously a constant/singleton thing
19:15:30evank
19:15:33evanUndefined it is!
19:15:39evantoils away
19:15:40Defilerright, but I mean you can make it not be a vcall pretty easily, in client code
19:16:37Defilerbrixen: So, let's pretend that I have a kernel alias 'm' for class << self;self;end
19:16:41rueChanging it is only a sed line, of course
19:16:43evani'm wondering if i can just return Qundef
19:16:52evani'm checking out how we use Qundef in the VM now
19:16:57evanand trying to figure out if anything will break
19:17:04evani can add another Q var too.
19:17:20Defilerbrixen: actually, I'll just make a self-contained gist
19:17:26evanhm, yeah, i'll add another Q.
19:17:28rueIt should be fine to use in both cases, or then we are using it wrong, it would seem
19:17:43evanQundef is used by the VM for some critical things
19:17:50evani'm worried about it slipping in for a valid value
19:17:54evanand confusing things in the VM.
19:18:12rueMm, it is a possibility
19:18:16brixenevan: if you're going to go compiler transform, I'd use 'undefined'
19:18:25evan:(
19:18:29evanwhy/
19:18:30evan?
19:18:37evanbecause we've got call transforms already?
19:18:40brixenwell, we don't tranform constants now
19:18:45brixenUndefined is a call?
19:19:08evanright, i'd have to add the ability to transform a constant
19:19:21evani think not breaking all the existing code has an big upside.
19:19:21brixenright
19:19:37brixenhow does s/U/u/ break existing code?
19:19:42evani have to change it all :)
19:19:44rueChanging the existing Undefineds is easy though
19:19:51evanand we have to tell people to not use it
19:19:53evanoh and plus
19:19:57brixenit's much easier than adding a new transform
19:19:58evangoogle code search for undefined
19:20:04brixenhm
19:20:09evanthough, because it's a kernel transform
19:20:11evanthat should be ok.
19:20:31evanhrmzers.
19:20:59evanok.
19:21:01evani'll do call.
19:21:08evanundefined it is.
19:21:14evanand to make the transition easy
19:21:22evani'm going to have it return the same thing as Undefined
19:21:25evanie, a bare object
19:21:45evanso we can use them interchanged briefly.
19:22:33rue$ sed -i s/Undefined/undefined/g kernelfiles # ?
19:22:45evanoh so clever.
19:22:46evan:D
19:22:49evanyou're right.
19:22:52evani never pull sed out.
19:23:51Defilerbrixen: OK, so.. http://gist.github.com/258096
19:24:04Defilerbrixen: I am unable to reconcile that behavior with any of the recent diagrams that have been floating around
19:27:09Defilerupdated it with an extended example
19:27:23evanhuh.
19:27:28evani'm not surprised terribly
19:27:44DefilerThere are two 1.8 behaviors I didn't get going in rbx last night
19:28:03evanDefiler: try with a normal class
19:28:08evanclass Blah; end
19:28:10evanand also
19:28:12evana normal instance.
19:28:59DefilerI will in a sec. I did that last night and I'm pretty sure it works the same
19:29:07Defilerbut I'll check it again after a quick meeting
19:29:21evank
19:29:27Defilerthis is behavior #2 that we don't comply with.. #1 is that on rbx Class.m.m.superclass == Module.m.m
19:29:39Defiler(which, according to the diagram, is actually true)
19:29:45Defileron 1.8 that returns false, but I consider that a bug in 1.8
19:29:52evanhm ok.
19:30:06Defilersince the superclass of Class's meta-metaclass is the meta-metaclass of Module ha ha
19:30:10Defilerback in a sec though
19:33:06rue1.9.1 changes this slightly
19:47:56boyscoutWhen immediates are frozen or tainted, they return themselves, not false - 6acdbf1 - Yehuda Katz
19:47:56boyscoutFix issue where negative integers were being treated incorrectly in sprintf. This was causing a bug in ActiveSupport. - 40bfb00 - Yehuda Katz
19:47:56boyscoutincluded is called over and over again even if the module was already included (append_features is not) - c934da9 - Yehuda Katz
19:47:56boyscoutGives Enumerator #with_index powers - 016902e - Yehuda Katz
19:50:22evannow
19:50:25evanto recall how to use sed.
19:50:50boyscoutCI: 016902e success. 3017 files, 11584 examples, 35722 expectations, 0 failures, 0 errors
19:52:00evanthere we go.
19:52:03evana little for + sed magic.
19:52:18brixenargh with the commits to spec/frozen embedded in other commits
19:52:21brixenle sigh
19:52:29evanbad wycats!
19:52:33evani told him not to do that.
19:52:38brixendestroys rubyspec and moves everything back to rubinius
19:52:42brixenevan: you did it too
19:52:45evanbrixen: i did?
19:52:49evanbad me.
19:52:51evansorry. :(
19:52:56evansorry.
19:53:00brixend19c3f17
19:53:02evanmaybe we should revoke committing to frozen.
19:53:10evanif it's too much trouble.
19:53:14brixenhow do we enforce that?
19:53:21brixenI'm not sure which is more trouble
19:53:30brixenI'm going to sync specs once a week at least
19:53:34evanwell, there are few updates to specs these days
19:53:41evana lot fewer than in the past
19:53:41brixenI just don't want to lose stuff
19:53:44evanand they're mostly by me now.
19:53:52evanhow about this
19:54:01evansync from rubyspec one way
19:54:08evanand require changes to frozen to go into rubyspec too
19:54:19evanrequire as in say "don't jsut make them in frozen or they'll disappear!"
19:54:29evanthat gives me what I want
19:54:36evanwhich is changing a spec, making it pass, commiting.
19:54:43brixenyes
19:54:50brixenand you can work right in spec/ruby for that
19:54:56evanyeah
19:54:59evanbut sometimes i have to change a spec
19:55:01evanor somethnig
19:55:01brixenbut I don't have a way to enforce it
19:55:02evanto make it pass
19:55:10evansure we do!
19:55:17evanwe say "make it just in frozen, it will disappear!"
19:55:22brixenheh
19:55:29scooprpost-receive-hook? ;)
19:55:42evanscoopr: i considered that, but github doesn't have that support I don't think.
19:55:49scooprah right'o
19:56:23evanbrixen: i wanna make it easier on you
19:56:24brixenI can set spec/frozen to read-only though, right?
19:56:43evanwell, how about the one way sync only
19:56:50brixensure
19:56:52evanthat way people can basically update frozen as they work on it
19:56:59evanbut they have to put the changes in rubyspec at the same time
19:56:59brixenbut I don't like losing stuff
19:57:02brixenseems heavy handed
19:57:13evani think at this stage we can be heavy handed
19:57:19wycatsbrixen: just doing what evan said :)
19:57:20evanbecause spec changes are slowing down.
19:57:33brixenwycats: no, evan would not say that
19:57:39wycats?
19:57:41brixenI've berated him enough about it
19:57:44evanwycats: well, you're not supposed to change spec/frozen with other commits
19:57:45wycatsevan would not say what?
19:57:54wycatsevan: you didn't tell me that
19:57:54evanif I did not communicate that
19:57:56evanthats my mistake.
19:57:58wycats:)
19:58:05evananyway
19:58:07wycatsI was just trying to follow instructions :/
19:58:09rueThe submodule approach has some merit
19:58:10evanlets figure out how to make this the last time.
19:58:20wycatsI knew I was doing something controversial!
19:58:23wycatssighs
19:58:33evanrue: it's the same, since you can't esaily commit back to a submodule
19:58:34evanand we tried that
19:58:41evanthats the extreme way
19:58:42brixenno submodules
19:58:52rueSure you can, it is a live repo
19:59:32rueBut, in the absence of submodules, committing to rubyspec and pulling would probably be easier to enforce
19:59:58brixenevan: I'll sync one way from rubyspec
20:00:21evanok
20:00:21brixenevan: but I'll still try to check commits to spec frozen
20:00:27evanbrixen: so
20:00:28evanlets do this
20:00:29evanif you find them
20:00:32evanjust tell the person
20:00:37brixenyeah
20:00:39evanlet them clean up their own mess
20:00:40evanlike me!
20:00:49evansince i'm the one that creates the most mess.
20:01:23brixenwell, the problem is, ppl create messes in rubyspec too
20:01:31brixenand I try to clean that up before syncing
20:01:57brixenI'd like to remove any reason to commit to spec/frozen at all
20:02:04evanok
20:02:12evanmy only reason is broken specs
20:02:12wycatsI have commit to rubyspec
20:02:13brixenthe only reason to do is is because the tags are out of sync with rubyspec
20:02:18wycatsbut I don't know how to pull into frozen
20:02:21rueSure. There is just a sync lag, which makes it a little less convenient
20:02:23evanor adding specs for behaviors
20:02:25wycatsso I could just push to rubyspec
20:02:30evanthat i wanna test now.
20:02:34brixenwycats: you don't need to pull into spec/frozen
20:02:34evanthose could wait though
20:02:43brixenwycats: you need to commit rubyspecs to rubyspec
20:02:49wycatsbrixen: I'd want to so I could run the tests and make sure things pass
20:02:57wycatsbrixen: there's a weird dichotomy here
20:03:00brixenwycats: you can
20:03:05wycatson the one hand rubyspec *is* the spec suite for rbx
20:03:10wycatson the other hand, it's its own project
20:03:12brixenrake rubyspec:update
20:03:14wycatsk
20:03:21brixenbin/mspec ci spec/ruby/blah
20:04:02brixenevan: so, get this flow...
20:04:06rueThat would be the better workflow
20:04:16brixenrue: hang on a sec
20:04:27wycatsbrixen: it would be helpful if there was a rake task that did the right thing
20:04:28brixenevan: you are working on the specs for Foo#bar
20:04:40brixenwycats: there isn't a simple right thing
20:04:44brixenplease listen
20:04:47brixenI have the mic
20:04:48brixenk
20:04:49brixen?
20:04:56wycatsok
20:05:09brixenyou are working on Foo#bar
20:05:14brixensome method in some core class
20:05:22brixenyou are writing a spec for some behavior
20:05:31brixenyou rake rubyspec:update
20:05:40brixenwhich pulls the current rubyspec into spec/ruby
20:05:53brixenyou run bin/mspec ci spec/ruby/core/foo/bar
20:05:59brixenyou should get no failures
20:06:11brixenbecause the tags work with both spec/frozen and spec/ruby
20:06:23brixenyou write your specs and commit to rubyspec
20:06:28brixenyou make your specs pass
20:06:38brixencommit that to rubinius
20:06:50evanwell, for me at least
20:06:54brixenthe CI specs continue passing (they run on spec/frozen)
20:06:56evanwriting the specs isn't a solo activity
20:07:00evani don't do it all upfront.
20:07:08evanso it's going to be interleaved with doing the impl.
20:07:09brixenit wouldn't need to be
20:07:10evananyway, continue.
20:07:23brixenwell, why would it need to be up-front?
20:07:37brixenI'm just saying, commit to rubyspec and run directly from spec/ruby
20:07:56evanok
20:08:02brixenat least once a week, I'll sync to spec frozen
20:08:04rueWhat is in spec/ruby? Just pure clone?
20:08:15brixenthe only problem is, the CI specs run on spec/frozen, not spec/ruby
20:08:20evanyes
20:08:20evanso
20:08:31brixenso your new specs would not be reflected in CI for up to a week
20:08:33brixenis that ok?
20:08:34wycatsbrixen: what's special about spec/frozen?
20:08:35evanwhat if doing "rake" run 'ci spec/ruby' if it existed.
20:08:54evanrather than 'ci spec/frozen'
20:09:05brixenwell, the problem is new specs get commited to rubyspec that don't have tags for rbx
20:09:14rueI would be on the side of doing that and solving issues as they came up...
20:09:18brixenyou can't get a guaranteed clean CI if you broke nothing
20:09:32brixenspec/frozen is for CI
20:09:38evanright
20:09:39evanok
20:09:43brixeneveryone should run it before commiting
20:09:48brixenthe bot runs it as insurance
20:09:54evanthe issue is that people wanna run all the specs to make sure they didn't break anything unassociated
20:10:02evanwhich i guess they can do by running the frozen specs
20:10:02brixenright, that still works
20:10:05wycatsbin/mspec ci spec/frozen?
20:10:06brixenyes
20:10:15brixenand your own new specs you should run directly
20:10:18rueComplemated
20:10:24brixensince that's what you are working on
20:10:39brixenrue: use words if you want to be taken seriously
20:10:40brixenplease
20:11:03rueI dun think there is any risk of that happening.
20:11:11brixenwycats: rake is all you need to do to run the CI specs and vm tests
20:11:32brixenanyone who pushes should run rake before pushing
20:11:49wycatsdid not know that, but now do
20:12:08brixenI'm trying to simplify one specific flow: 1) new specs are needed, AND 2) new rbx code is needed
20:12:39brixenif fixing an existing spec failure, you just commit to rbx
20:12:48brixenif just writing specs, just commit to rubyspec
20:13:03brixenso it's just this one intersection of rubyspecs and rbx code
20:13:06rueAnd then pull to have coverage.
20:13:14evani think this is fine if and only if the sync from spec/ruby to frozen is often.
20:13:16evanif it's rare
20:13:19evanthen it won't work.
20:13:27brixenevan: yeah, it will be often
20:13:45evansay there is a bad spec
20:13:46brixenor, we can just let it be
20:13:50evana tag works for you, but not me.
20:13:54evanshould I change that in spec/frozen?
20:14:02brixenchange the spec or the tag?
20:14:05evanshould I change the spec rather
20:14:06evanit depends
20:14:09evansay the spec is bad
20:14:12rueWeekly is not very often, and on the other hand, it is not fair to have you wade through all that code
20:14:17evanshould I just tag those
20:14:27evanand never fix specs in frozen
20:14:28brixena bad spec should be fixed
20:14:34brixenhm
20:14:44evani really do not want to add more tags.
20:14:51evanwe have a big problem with tags atm.
20:15:03evanbecause things get tagged and forgetten about
20:15:06rueI think I would prefer to live on the edge and use rubyspec head, fixing issues as they occur (or, as a last resort, tagging them away)
20:15:06brixenwe have relatively few tags really
20:15:09wycatsbrixen: it's a weird intersection but it's where I live
20:15:13wycatsbecause I'm fixing issues with Rails
20:15:29evanbrixen: i wanna avoid creating any unnecessary fails tags.
20:15:36evanbecause fails tags are hidden.
20:15:47evanwe can try and make them not hidden
20:15:50brixenthey're only hidden from CI
20:15:54evanperhaps by reporting how many there
20:15:58evansure, but because rake runs ci
20:16:08evaneverything but ci is more hidden
20:16:08rueThe most common breakage from head would be unguarded stuff anyway, no? Might as well fix those at the same time
20:16:22brixenrue: it's not that simple, believe me
20:16:30brixenthat is why I just tag when syncing
20:16:42rueProbably not, but this is not really very simple either
20:16:42brixenit's often very hard to fix new failures
20:16:44evanrue: it's more about people changing rubyspec and then brixen having 100 new failures
20:16:54evanwe can't expect him to fix all those 100 before he syncs
20:17:13evanso they're tagged as fails
20:17:15evanand we move on
20:17:25evanbut we don't prune those fails tags often enough
20:17:27brixenthe simplest possible thing is this: if you commit to spec/frozen, ONLY commit to spec/frozen
20:17:29evanthats an influencing factor here.
20:17:30rueThat could be done by whoever is adding the spec
20:17:31brixenthat is seriously the simplest
20:17:41brixenand everyone can go about their business
20:17:47brixencus I can find the commit easily
20:17:50evanbut thats more work for you.
20:17:51rueI was specifically trying to avoid having a "bottleneck" (not meant negatively)
20:17:56rueExactly
20:18:07brixenno, more work is trying to extract changes embedded in commit
20:18:17evanok
20:18:22evanso you no longer do that
20:18:23evanever.
20:18:24brixenI can git fp, change paths and commit to rubyspec very easily
20:18:27evanif people do that
20:18:28evanwell oops
20:18:30evanwe loose it.
20:18:33evanthats how it goes.
20:18:36brixenk
20:18:52evanso without that
20:19:00evanis the frozen => spec/ruby sync very time consuming?
20:19:06evancould it be codified in a rake task?
20:19:06brixenno
20:19:13brixenrake rubyspec:sync
20:19:19brixenthen fix up the tags
20:19:41brixenthe problem is making sure idiotic shit is not committed to rubyspec
20:19:47brixenwhich it often is
20:19:52evanok
20:19:54brixenso, it's not just running the rake task
20:19:58brixenit's paying attention
20:20:03evanso frozen, baring the embedded change, is not really the issue
20:20:03brixensomething no often done :P
20:20:06evanthats a red herring
20:20:20brixenlosing specs embedded in other commits to rbx is the issue
20:20:28rueThat should never happen anyway
20:20:39evanbrixen: ok, but thats no longer going to be your concern
20:20:54rueSpec and code should always be separate commits
20:21:10brixenI'm sure it will happen, but less I hope
20:21:19evanif it happens a lot (does it?) then we can have boyscout report it
20:21:24rueBut I think that having more people more immediately impacted by the rubyspec head would only be beneficial
20:21:24brixenrue: yes, we agreed on that almost 3 years ago :)
20:21:27evanand rather than brixen fixing it
20:21:32evanthe committer needs to fix it.
20:21:46evanif we lose specs
20:21:53evanthats a lose i'm prepared to take
20:22:34evanbrixen is not our personal janitorial service.
20:22:46evanI'M LOOKING AT YOU EVAN.
20:22:55evanshys away from himself.
20:23:10rueSo, make everyone run off rubyspec head
20:23:53brixenwell, it would play out like this: broken spec in rubyspec, fixed in spec/frozen, I sync, and now weird shit fails
20:23:57brixenand it's lost
20:23:59brixenand that sucks
20:24:11rueAll spec commits directly to rubyspec
20:24:14brixenhaha
20:24:15evanthe issue with running off rubyspec head is that not everyone who makes rubyspec head changes checks their spec changes on all impls
20:24:38evanbrixen: then wierd shit it is
20:24:42evani'm ok with that.
20:24:59brixenevan: how hard would it be to have boyscout report if there are other files changed if there are spec/frozen changes?
20:25:03brixenthat would be nice
20:25:06brixenand visible
20:25:10evanbecause if that broken spec is embedded in another commit (like I did) then we loose it.
20:25:13rueTrue, not everyone does. But it would A) be possibly found quicker and B) fixed quicker by the developer who is committing a spec
20:25:25brixenrubyspec head is not a viable option
20:25:35evanbrixen: sure, i can do that.
20:25:39rueI do not see why it is not
20:25:44brixenevan: that would be rad
20:26:12evanbrixen: can we automate rubyspec:sync?
20:26:19evanhave it just tag all failures
20:26:19brixennot really
20:26:25brixenI don't want to automate that
20:26:30rueIt would simplify the workflow and consistency on the implementation side
20:26:34brixenI want to ensure I don't lose spec fixes
20:26:56brixenevan: you can't just tag segfaults and hangs
20:27:06evanm true
20:27:07brixenI don't want to automate rubyspec:sync
20:27:14evanok
20:27:21brixenI want to automate not allowing spec/frozen changes embedded
20:27:25brixenI think that's it
20:27:27evanok
20:27:28rueIn contrast to having to juggle two spec sets on this side, and having you wade through all the specs by yourself.
20:27:29evanlets do that.
20:28:07brixenin fact, maybe we should change spec/frozen to something
20:28:18brixenand just have ppl commit to that in rbx
20:28:23brixennot rubyspecs
20:28:46brixenbut still complain about combining spec and code changes
20:29:19evanhow do ya mean?
20:29:21brixenspec/therealdeal/
20:29:23evanjust a different directory?
20:29:25brixenspec/mehere
20:29:37evanhow does that help?
20:29:40rueI think that is the wrong way to solve the problem.
20:29:45brixenjust name it different so ppl aren't confused
20:29:59brixenbecause there would be a single place ppl are commiting
20:30:08brixenand it's all contained in rbx
20:30:14brixeneasy to push to rubyspec
20:30:18brixeneasy to sync back
20:30:21brixeneasy to explain
20:30:32brixenas long as no specs are embedded in other commits
20:30:55evanhow is that not frozen?
20:31:01evanactually, don't answer that.
20:31:03evani need lunch.
20:31:04brixenit's exactly the same
20:31:06brixenheh
20:31:13brixenme too
20:31:21evanok, lets ponder over lunch
20:31:21brixenin fact, I need to see a guy about internets
20:31:25evanand discuss afterwords.
20:31:27brixenok
20:31:53rueI will just type this up in the meanwhile.
20:32:43evank
20:32:53evanrue, official scribe.
20:33:17rueNuh, just my workflow from an rbx point of view.
20:34:02rue1. Everyone should be committing to rubyspec directly. Single point of entry. Also avoids duplication of work (rare as it may be)
20:35:15Defilerevan: Sorry, meeting took longer than I thought. Same behavior for non-class-objects http://gist.github.com/258096
20:35:20rue2. Pull from rubyspec to get the new stuff to rbx, with $ rake spec:update or whatever. Run specs.
20:35:58DefilerI guess I need to break out omnigraffle and make a revised MOP diagram for 1.8
20:36:05Defilerbecause I don't think the current one is quite right
20:36:32rue3. Solve issues caused by other commits to rubyspec head (unless already did before your commit). brixen: Which issues are likely to be encountered, aside from missing guards?
20:37:17rue4. Automation, including CI, runs off head as well. Avoids sync lag.
20:44:12Defileranyone happen to know where the meta-metaclass code lives in MRI?
20:46:43wycatsDefiler: what problem are you having?
20:46:56Defilerthis: http://gist.github.com/258096
20:47:17ruehttp://gist.github.com/258150
20:47:29DefilerTrying to make our behavior match that, but changing the superclass of the receiver just seems like a gnarly thing to do when attaching a metaclass
20:48:06rueSlightly easier to see ;)
20:48:52DefilerYeah, there you go. Looks like the last line got cut off though
20:49:17rueMm, mibbe
20:49:48rue1.9.1 also produces #<Class:Object> for Module.m.superclass
20:50:07wycatsthis stuff is actually rather important
20:50:12wycatsbreakage can cause weird bugz
20:50:50wycatsyeah lots of diffs
20:50:51DefilerYeah, 1.9 is definitely different
20:50:53rueAnd Module.m.m.superclass
20:51:05rueWe are pretty much 1.9.1 except BasicObject
20:52:17wycatssuperclass of a metaclass not being class seems odd
20:52:29wycatsahh
20:53:07Defilerrue: after last night, we are 1.8 other than this one behavior
20:53:29rueTwo?
20:53:36wycatsI thought rue said 1.9
20:53:52DefilerYeah, I disagree. heh
20:55:41DefilerSo, it looks to me like the 1.8 logic is...
20:56:02Defilerwhen opening a metaclass on something that is already a metaclass, determine the correct superclass for the new metaclass..
20:56:14Defiler..and then set the superclass of the receiver to be the same
20:59:34rueUpdated http://gist.github.com/258150
21:01:11rueThere are several differences, maybe caused by same you mean?
21:01:41DefilerYeah
21:01:53DefilerI mean, it all looks like the same mechanism in all of those differences
21:03:20rueAdded 1.9.1 output down there too just for fun
21:16:39wycatsso I guess one question is whether this is important
21:17:24DefilerPersonally I think the answer is no, but I would like to have a canonical diagram for 1.8
21:17:47Defilermeta-metaclasses are totally useless anyway, much less their superclass chain
21:18:47rueI do not really like the changing midstream
21:19:31DefilerWhat are the other scenarios in Ruby where the superclass of an object changes?
21:19:44Defiler(as in, the return value of .superclass, not the effective superclass)
21:24:45rueAnything in the specs?
21:25:05DefilerNope. I haven't found any specs for the meta-metaclass stuff at all
21:25:11Defilerwanted to fully understand it before adding some
21:27:12dbussinkevan: did you my question about issue #114?
21:28:09wycatssuperclasses should not actually change
21:28:09wycatsthat sounds bad
21:30:05rueLikely why the behaviour is different in 1.9.1
21:30:06DefilerIt sure feels like a bug in 1.8 to me, yeah
21:37:05rueChecking with 1.8.7 head, but I doubt it has been changed
21:37:28DefilerI've been doing this testing on 1.8.7 174
21:38:46evanman freenode is a mess.
21:39:08rueJoin/leave turned off, dunno
21:40:14Defilersome DDoS going on apparently
21:42:18rueMy workflow is above somewhere.
22:01:25evanrad
22:01:37evani updated my ruby.vim to highlight undefined the same as true/false/nil/self
22:03:04Defileroh no you've forked ruby.vim and caused a schism in the community!
22:03:04evangah :/
22:03:10evanUndefined is used in stringio.rb
22:03:21evanDefiler: the great schism!
22:03:24evanof ruby.vim users!
22:03:38Defilernow we can have xruby.vim and gnuruby.vim
22:04:06evanmaybe i should have called the rubinius executable xuby
22:04:07evanrather than rbx
22:04:19evanabby asked me the other day "why is the rubinius command rbx?"
22:04:24evan"there is no x in the word, why not rbs?"
22:04:40evanme: "um, because it looks cooler? and phoenix ends with an x?"
22:04:42DefilerClearly she will never understand our religion
22:04:56rueWas she cross about it?
22:05:01evannah
22:05:02evanjsut curious
22:05:06ruePun!
22:05:13evanOH DAMN
22:05:15evanI GOT PUNIFIED
22:05:26rueOK, so I am not trying 1.8.7 head, apparently I installed 1.9.2dev
22:05:47evanoops.
22:05:50Defilerhaha, i've done that
22:05:52evanwell, we're glad you checked.
22:27:16boyscoutChange Undefined to undefined. - ff082ab - Evan Phoenix
22:34:03boyscoutCI: ff082ab success. 3017 files, 11584 examples, 35722 expectations, 0 failures, 0 errors
22:39:13brixenI can't wait for xmas to be over
22:39:21brixenwhat a lame holiday :P
22:39:35brixenthanks to all the crazy people
22:40:30brixenalso, people who have no clue should not be sales reps for something like wimax
22:40:38brixen</rant>
22:40:56evansounds unfun.
22:41:13brixenit was
22:57:11dwaiteoh nice
22:57:18dwaiteWindows XP, IE6 and IE7 all end of life in July
23:42:03brixenthis is going to be painful
23:42:07brixenhmm
23:44:29brixenevan: poke