Index

Show enters and exits. Hide enters and exits.

00:00:03sandalevan, headius I'd really appreciate it if you could check my notes on my talk when I have them together, if you are interested
00:00:03evanlike they've got incompatible syntax
00:00:08evansure
00:00:12headiusno problem
00:00:29sandalIt's not planned to be super technical, it's just trying to give people a survey of the options and a snapshot of where things are
00:00:51sandalwhile I really love the various talks you guys have given, I feel like they're geared towards language geeks (completely understandably)
00:01:23luislavenaok guys, time to go home, thank you for everything.
00:01:30evanluislavena: see ya
00:01:37luislavenaneed to get some gems working on 1.9 :P
00:01:40evansandal: certainly
00:01:45sandalI was hoping to offer the newb perspective without the fanboy vibes :)
00:02:06headiuswe tried to do a user talk at rubyconf this year
00:02:12headiusdidn't talk about implementation at all
00:02:18sandalbut yeah, I'll send along my notes because it's hard to keep up with this velocity
00:03:04sandalheadius: examples run perfect on edge
00:03:08headiuscool
00:03:40sandalchecking tests now...
00:06:15sandalheadius: tests all green
00:06:26headiussolid!
00:06:31sandalevan: this means that JRuby just stole the #1 spot in the Prawntest :)
00:06:41headiusbtw, do you have a CI run set up somewhere for JRuby? cuz we could set one up otherwise
00:06:48headiusI've been wanting to get more CI runs for various gems
00:06:54evanNOOO
00:06:55sandaloh, please do so
00:06:55headiuskeep us both honest
00:06:55evan:D
00:07:18evansandal: anything you need rubinius to fix?
00:07:24evanthe test/spec thing?
00:07:42sandalThough still pretty solid. I'm going to fix that test/spec issue because I'm pretty sure Rubinius will pass the tests too
00:07:45sandalyeah, that's the only issue
00:08:12sandalIt does make Rubinius an outlier, given that JRuby, MacRuby, k01's vm, and MRI all work
00:08:14jaribi found some cases where UnboundMethod#compiled_method returns an AccessVariable instance
00:08:20jaribshould that ever happen?
00:08:47jaribit makes UnboundMethod#inspect blow up since it calls @compiled_method.name
00:08:48sandaloh whoops, - macruby
00:09:00sandalit didn't run test/spec at all, couldn't find it
00:09:12sandal(will be looking into it)
00:09:12headiusyeah, I don't think rspec works on macruby yet
00:09:21sandaltest/spec.
00:09:29headiusoh, ok
00:09:35headiusI read "tests/specs"
00:09:40sandalIt seemed like a rubygems issue
00:09:56sandalit just couldn't find it
00:10:26evanjarib: that can happen, yes.
00:10:35evanjarib: UnboundMethod needs to be aware of AccessVariables
00:10:50evanand/or AccessVariables needs a #name method
00:10:52evanprobably the later
00:11:30jaribi see
00:12:38headiuswhenever I read prawn I think pr0n
00:12:53headiussometimes type it too
00:12:57headiusgem install pron
00:13:27evanwishful thinking perhaps.
00:14:41sandalSometimes when I read pr0n I think of Prawn
00:17:10rueTehee
00:19:04headiussandal: CI build set up
00:20:14headiussandal: I'm just having it update master/HEAD every night
00:22:39headiuswow, what the hell is in prawn repo that takes this long to clone?
00:22:53headiusmaybe github is slow right now or something
00:24:10sandalheadius: actually, no.
00:24:27sandalI accidentally checked in the PDF spec
00:24:32headiusack
00:24:33sandalwhich is like 17mb
00:24:38headiusyeah, that would do it
00:24:43sandalPrawn was my first experience using git :)
00:24:48headiusyou should wipe out that commit
00:24:53headiusI think you can do that
00:25:11sandalI did that but I need to re-write it on every tag I think
00:25:18headiusick
00:25:19sandalor something nasty
00:25:26sandalthis has come up though before
00:25:34headiuswell I'm doing clone --depth 1 for the initial pull, so hopefully it won't re-fetch that
00:25:36sandaleven without it, the repos will be big because of some CJK fonts
00:25:38headiusbut it takes a long time to process
00:25:44headiusok
00:25:52headiusslow connection at this location anyway
00:25:53headiusI'm sure it's fine
00:25:54sandal(for testing)
00:27:24sandalanyway, off for now. Thanks evan and headius for the help.
00:27:38headiusyup yup
00:27:50jaribevan: adding AccessVariable#name, it ends up looking like this: [].method(:length) #=> #<Method: Array#@total (defined in Array)>
00:29:08jaribat least it's an improvement :)
00:32:34jaribhmm, perhaps Method#inspect should just use it's own @name instead of @compiled_method.name if it's an AccessVariable
00:32:36brixenhm, what about #<AccessVariable: Array @total>
00:33:44jaribfor Method#inspect ?
00:33:52brixenfor that case
00:34:03brixenI dislike Array#@total
00:34:08jaribyeah
00:35:25jaribbut it seems wrong if the inspect string for Method doesn't have #<Method ...something...>, no?
00:35:46brixenhmm
00:36:16brixenI see you're point, but..
00:36:46brixenAccessVariable < Executable
00:37:02brixenanyway, evan can decide
00:37:12brixenI vote for my #inspect string :)
00:37:45jarib#<Method: Array#length (@total, defined in Array)>
00:37:54jaribi have no idea
00:37:58brixenugly imo
00:38:21brixenI don't think it has to have #<Method ..> in it
00:38:39jaribno, you're probably right
00:39:04brixenmy string just has the relevant bits of info
00:39:07jarib#method can return UnboundMethod as well
00:39:53brixensure
00:40:04brixendoes AccessVariable not have #inspect?
00:41:01jaribit does, but Method#inspect will use @compiled_method.name
00:42:11jaribwhich blows up when @compiled_method.is_a? AccessVariable
00:43:06brixenso, the issue is in Method#inspect?
00:43:12jaribyes
00:43:37brixenand you can't return the alternative string when @compiled_method.is_a? AccessVariable?
00:43:58jaribno, that should be fine
00:44:50jaribit just feels weird that Method#inspect essentially returns the inspect string of one of its ivars
00:45:30brixenyeah, it feels a little weird
00:45:48brixenI don't think it would be a problem though
00:46:05brixenmore of the insides of rbx show, since more of it is first-class classes
00:51:49rueMuhaa. Put up LLVM
03:28:15tarcieriumm, weird
03:28:34tarcieri^C doesn't seem to stop the tests that run after rake
03:28:40brixenyeah, that's rake
03:28:48brixenit swallows the ^C
03:28:50tarcieriorly
03:28:51tarcieriwtf
03:28:57brixenor does something with it
03:29:00brixenrbx doesn't get it
03:29:07tarcieribizzarre
03:29:19brixenrake is a tool
03:29:24brixenheh
03:29:29tarcierihaha
03:29:31tarcieriI ^Zed it
03:29:36tarcieriand it kept running in the background
03:29:37tarcieriweeeird
03:29:38brixenyeah
03:44:09slavahi tarcieri
03:46:18slavabrixen: have you guys thought of doing something like tuple arrays in rubinius, even if only for internal use?
03:47:55brixenI think evan has
03:48:41brixenI don't have empirical data on how common homo arrays are
03:48:47brixenmight make everything slower
03:49:09slavaI haven't actually used them for anything yet
03:49:27slavathe guy who did unicode support wanted to use them for some unicode data tables, but he's busy with school these days
03:49:36brixenahh
03:50:02slava"homo" arrays for numeric types are a lot more useful I think
03:50:07brixenyeah, we've talked about a vector of immediates for unicode
03:50:25slavafloat-arrays being the most useful of those, we use those all over the place, since it saves a ton of overhead on boxing
03:50:33brixenright
03:50:40brixenthat's a great use case
03:51:48slavaonce you eliminate as much runtime dispatch as possible the next perf wall you hit with dynamic languages is heap layout
03:51:58slavaso I've been thinking about that a bit lately
03:53:26brixenwhat are you thinking?
03:54:23slavaI don't have any concrete ideas really
03:57:51headiusso do you just represent homogeneous arrays as their own types?
03:57:55headiusFloatArray.new(size)?
03:58:03headiusI didn't read through your whole post
03:58:15slavayes
03:58:41headiuswe could probably provide that now backed with Java arrays
03:59:08slavawhat about homogeneous arrays of objects? java doesn't really allow that
03:59:10headiuskeeping values unboxed when passing them around would take a little doing though
03:59:13slavawhere the objects are stored directly in the array
03:59:25headiusas values? no, no support for that
03:59:29slavaalthough you could generate bytecode to do it
03:59:47headiusnot really
04:00:17headiusyou could have an array of type Object[] and use chunks of it for object state, but everything would be boxed and untyped throughout
04:00:36slavayeah, but ruby ivars are Object anyway right?
04:00:39headiusyou can't have an array hold both primitive values and references
04:00:55headiusyes, and jruby's ivar tables are already an array
04:01:14headiusbut it's a separate array referenced by containing object
04:53:46brixencuckoo hash is extremely sensitive to load factor > 0.5
05:30:37ddubbrixen: don't let it get that high :)
05:32:03brixenddub: no kidding ;)
05:32:50brixenddub: it's interesting how badly it drops off
05:33:41ddubthe difference between taking a seat and playing musical chairs
05:34:13brixenwell, the difference between taking a seat and the whole circle playing musical chairs
05:34:22brixenand rehashing
06:51:04tarcierilol
06:51:20tarcieriis this in bad form: http://www.nabble.com/Pythonic-indentation-(or%3A-beating-a-dead-horse)-td23624907i60.html#a236647 57
06:52:24slavaPythonic
06:52:27slavawhat the fuck does that even mean
06:52:43tarcieriheh
06:52:43slavamy cock is pythonic
06:52:52tarcieriserpentine?
06:57:46tarcieriI'm surprised a 100 line link covered all the edge cases I came up with
07:01:11ddubso someone wants ruby to have whitespace indentation to define blocks like python does?
07:01:24ddubthats like, one of my least-liked features of python
07:02:21tarcieriI should take that script and find a bunch of edge cases it doesn't cover
07:05:25evantarcieri: nah, you're fine.
07:05:40evani personally would have pulled back before "right cunt"
07:05:45evanbut hey, thats my style yo.
07:05:52tarcieriheh
07:06:02tarcieriyeah that might've been a bit far
07:07:07evanI think you ended it fine by saying, basically, "cool you got a regex to work on a few cases. good luck getting rubyists to use it."
07:07:34evanpersonally, looking at that code he got to run made me go "ug, this is ugly."
07:07:45tarcieriyes
07:09:48ddubI usually solve these sorts of disputes by outright ignoring the person
07:10:03evanpersonally on this discussion, i take the tack
07:10:10ddubnothing deflates their hopes of victory and superiority like nothing
07:10:15evan"go for it, let me know when we can play with it."
07:10:32evani'm not going to say it sucks or is impossible or whatever, i don't need to waste my breath
07:10:45evanif they've got the drive, let them try it.
07:10:55evanyou can't save them from themselves.
07:11:30tarcieriwas trying to go over the edge cases he ran into actually trying to implement this with a Python-style lexer
07:11:37ddubI recommend you call your python + ruby hybrid "pubey"
07:11:45tarcierilol
07:12:23evantarcieri: yep, you were trying to help
07:12:29evanbut i don't think he wanted help
07:12:34evanhe wanted to hear it was a great idea
07:12:37rueStupid Nabble
07:13:14tarcieriI think he wanted validation that anyone who opposed the idea is a retard
07:13:35evanright
07:13:35tarcieriprops to the guy who wrote this script though
07:13:43evani don't think it was an invite to have a discussion
07:13:43tarcieriit's handling all the edge cases I throw at it
07:15:24tarcierioh wait
07:15:26tarcierispoke too soon
07:16:27evanis it just running regexp transforms on the source?
07:16:49tarcieriyes
07:17:06tarcierisymbols are totally broken
07:17:13evanas they would be
07:17:17evanusing the ambigious :
07:17:17tarcierinot sure how you're supposed to do them
07:17:24evanthats a great band name
07:17:26evanambigious colon
07:17:28tarcierilol
07:17:34evanwhats it mean? it's ambigious!
07:17:40tarcieriexpressions Python would do implicit line joining on don't work
07:17:51tarcieriit just barfs
07:18:17evanlike?
07:18:18evani'm curious
07:18:22tarcieri[
07:18:24tarcieri 1,
07:18:25tarcieri 2,
07:18:26tarcieri 3
07:18:26ddubI'll have to run that by my doctor next time I go in
07:18:27tarcieri]
07:18:36ddub"doc, I was thinking I might have ambiguous colon"
07:18:37tarciericall a method with a block on that
07:18:50tarcieriit just doesn't detect whatever it's trying to detect
07:19:08ddubtarcieri: problem is, now after calling him a cunt you probably shouldn't share :)
07:19:17tarcieriheh
07:19:25tarcieriyeah I'm done arguing I think
07:19:40tarcierisomeone emailed me a "Bravo" email for calling him out on being a troll
07:19:44tarcieriI think it's time for DNFT
07:19:47ddubmaybe someone else here can explain that he has a case of ambiguous colon
07:19:50dduband recommend more fiber
07:19:57tarcieriheh
07:20:18evanddub: or a better keyboard? who knows, it's ambigious!
07:21:12dduball I ask is that if someone posts a failing case around the ambiguous colon, that they try to work in a reference to "colon blow"
07:21:21tarcierihaha
07:21:32evanthey might need new super colon blow to debug it!
07:21:40evan90s SNL ftw
07:23:00tarcieriheh
07:23:29rueWell, for what it is worth, I will take whitespace over Potion's "solution"
07:24:01evanwhats that "solution" ?
07:24:09tarcieriwhen I got rid of the indent sensitive stuff in Reia and it started looking like Ruby with all the niceties that Python does with mandatory parens, I was like "wow, this rules"
07:24:14evandoes it send the program via whale sounds to _why for parsing?
07:24:31rueHm. Should offer a counter-solution of using ASCII pipes to draw boxes around the blocks
07:24:35tarcieriit's a language I think any Ruby programmer could learn without too much hassle
07:24:45evantarcieri: sweet!
07:24:51evanhow's it going btw?
07:25:01tarcieripretty well
07:25:05tarcieriChad Fowler seemed to like it
07:25:24tarcieriI've been working on a new compiled form sort of loosely based off .rbc
07:25:31evanah cool!
07:25:48rueevan: Something weird like _say terminates previous say (regardless of intervening nesting)
07:26:24manverutarcieri: i wonder, would you accept a patch that adds Main::p ?
07:26:42tarcierimanveru: sure, although I really need to fix Main
07:27:01tarcieriat Erlang Factory I learned of the perfect way to implement Main in an Erlang system
07:27:10evanrue: huh.
07:27:13evanstrange.
07:27:22evanstrugs at potion
07:27:26evanshrugs.
07:27:28manverutarcieri: a gen-server that responds to different methods?
07:27:38manveruhides
07:27:42tarcierimanveru: each process in Erlang has an associated "error handler"
07:27:50tarcierithat's how Erlang does automatic code loading
07:28:03manveruso kinda like method-missing that searches for updates?
07:28:26tarcieriyeah, but for me "method missing" is part of the message processing
07:28:44tarcierithis would be for unrecognized function calls
07:29:06tarcieriso if a "local" function call doesn't work, it can retry it on main
07:29:12tarcieriand if that fails, then the function really doesn't exist
07:29:19tarcieriI would like people to be able to define methods on main
07:29:26manverunods
07:29:29evanok, time to teach the jit about splat!
07:29:37manverui don't care so much about other modules, but Main would be very useful
07:29:37tarcieriso "def" is a true expression you can use anywhere
07:30:10tarcieriRuby is beautiful that way
07:30:22evani was giving a friend a crash course it ruby
07:30:26tarcierieverything is an expressions and all expressions have meanings in all scopes
07:30:29evanabout how class bodies are just code
07:30:45evanit's really something people struggle with at first
07:30:51evanbut eventually realize the power.
07:31:03rueevan: Didja make it over, by the by?
07:31:04manveruheh, yeah :)
07:31:25manverutarcieri: my eventual goal would be implementing something like attr_accessor
07:31:44evanrue: no, ended up going to dinner with a couple of guys that had been doing work there
07:31:44tarcierimanveru: yeah for sure... something that needs class bodies, metaclasses, and metaprogramming
07:31:46manveruwith a somewhat nicer name...
07:31:48evanthat were in from out of town
07:31:51tarcieriwhich I'd like to get to
07:32:00evanwe were all hungry, so we headed to dinner directly.
07:32:06rueHeh
07:32:15evanrue: hopefully next month i'll have more notice
07:32:24evandriving up there is fun
07:32:32evani get to drive the bizarre, california highway #2
07:32:36manverutarcieri: what's your reason for working on reia?
07:32:38evanwhich is like a fucking race track
07:32:45evanit's 5 lanes in both directions
07:32:56evanand is only about 10 miles long
07:33:14evani kept looking down and going "oops! over 90, better slow down."
07:33:31rueSignificant whitespace would be ideal, I think, provided that 1. the whole tab/space thing got sorted out somehow and 2. the language would not have to crutch on statements rather than expressions
07:33:35tarcierimanveru: frustrations with Erlang, frustrations with Ruby
07:33:52manveru:)
07:33:55tarcieriErlang has a crappy syntax, it's full of boilerplate, and doing anything with strings is a nightmare
07:34:00tarcieriConcurrency and I/O suck balls in Ruby
07:34:17rueevan: Haha, yeah, "just going with the flow of traffic, officer"
07:34:19manveruok... and fixing syntax is easier than fixing ruby :)
07:34:29tarcieriyes
07:34:43tarcierihard to say where Reia falls semantically between Ruby and Erlang
07:34:49tarcieriit's closer to Erlang
07:34:51manverui'm quite interested since i heard word that erlang finally added unicode handling
07:34:53tarcieribut with a Ruby-like syntax
07:35:01evanwhat the...
07:35:09evanit seems
07:35:09evan if(vmm->total_args == 0 and args.total() == 0) {
07:35:12evanis valid C++
07:35:22evanand i wrote it...
07:35:25rueWell*
07:35:27tarcierimanveru: and we can talk in #reia if you want... don't want to interrupt the rbx debugging here
07:35:30tarcieriheh
07:35:33manveruk
07:35:55evani... don't even know what it does!
07:36:42rueIt is exactly equivalent to &&
07:36:50evanwtf
07:36:53evanreally?
07:37:00evani can't even find anyone that lists and as a keyword
07:37:16rue'Es. There is 'bitand', 'bitor' and all the others you would expect
07:37:25evanreally... interesting.
07:37:30evanwhere do you see any info on these?
07:37:41rueSo we should totally s/&&/and/g
07:38:06evanoh, the wikipedia page lists them!
07:38:08rueUm, recesses of my mind somewhere
07:38:32rueI thought it was neat at some point
07:38:40evanrad!
07:38:51evanit's certainly easier to read
07:38:53rueCombined it with inheritance simulated through template metaprogramming...go figure
07:39:18evanc++ is crazy yo.
07:39:53scooprhttp://www.dinkumware.com/manuals/?manual=compleat&page=iso646.html
07:40:01scoopryou can have them in c too!
07:40:01rueHaha
07:40:19evancute!
07:40:42rue`int* yay = bitand my_int;`
07:40:54scoopreesch =)
07:41:54scooprof the unforseen keywords in c++, I hated that I couldn't use 'far' and 'near' as variable name in msvc ..
07:42:46rueYeah, MS had some other weirdness in there too
07:43:39rue`void foo(std::string bitand wee) { ... }`
07:44:04scoopryou might want to const that!
07:44:17scoopr;)
07:44:56rueHeh
07:45:49evanme thinks that taking a weeeee bit too far.
07:45:50evan:D
07:46:34slavaheh
07:46:41slavahaving fun with C++ guys?
07:46:47evanyes
07:46:59tarcierislava: you are too there eh?
07:47:09evanhow come they didn't add an alias for ( or )
07:47:10scooprstd::string bitfar wee
07:47:46evanvoid bitor func open_paren std::string bitand name close_paren curly_brace_left
07:47:50rueEeexcellent
07:47:57slavaevan: so much more readable!
07:48:03slavano confusing punctuation
07:48:03tarcierihehe
07:48:15evan:D
07:48:55ruestd nerd string
07:49:09evan4 eyes?
07:49:18rue;;)
07:49:25evan:)
07:49:37slavaevan: how's the jit going
07:49:43evanpretty good
07:49:54evani've missed a few things related to argument handling
07:49:58evanthat i'm fixing now
07:50:11evani'm experementing with a call counter here
07:50:26slavaI started working on a new codegen but got sidetracked by getting rid of GNU extension usage in the VM
07:50:31rueAdding stuff at a decent pace, certainly
07:50:33evannow that LLVM will just say "sorry, this function is invalid" if the jit constructs bad IR
07:50:59rueYes, GNU/C++ is bad...we still have typeof in there?
07:51:14slavaI was using register variables
07:51:18slavaits a fair bit of work getting rid of those
07:51:19evanis typeof a GNU extension?
07:51:24slavano, typeof is RTTI
07:51:24evanslava: you got rid of those?
07:51:29slavaevan: in the process of
07:51:42slavaevan: still have a bunch of asm to redo
07:51:50evaninteresting.
07:52:00slavamy goal is to compile with MSVC on windows
07:53:07rueslava: No, type_info is RTTI
07:53:27evantypeof is C i think
07:53:31evanwe used it in normal C
07:53:37evanfor some macros
07:54:01slavaoh
07:54:01rueJust a GCC (and others') extension
07:54:12rueI think they have it in 0x
07:55:50rueslava: Ha, double-take...you mean register variable as in with the register name?
07:55:58evanslava: haha
07:55:59evaner
07:56:00evanrue: hah
07:56:05evani just imagined you doing a spit take
07:56:11evanwa WA!
07:56:20rueHeeey
07:56:32slavarue: eg, register int foo asm("%eax");
07:56:48rueYeah
07:57:24tarcierievan: so when you create a CompiledMethod to do eval (that's what you do, right?) do you effectively decorate the code so as to return the resulting binding? Or how does that work?
07:58:12evantarcieri: we create a CompiledMethod, yes
07:58:15evanbut no decoration
07:58:18evanit's a normal method
07:58:29evanwhat we do is piggy back on BlockEnvironment
07:58:31tarcierihow do you get the resulting binding then?
07:58:36evanwe don't
07:58:42scooprhm, apparently
07:58:43scoopradfg
07:58:50tarcieriorly... does Ruby's eval just accept a binding as input?
07:58:54evanwhen you do an eval, it's like synthesing a block from a string
07:58:58scooprhm, apparently 'typeid' is an 'operator' .. I wonder, can you overload it :P
07:59:03evantarcieri: yeah, just on input
07:59:09tarcierii c
07:59:11evantarcieri: our BlockEnvironment could easily be returned
07:59:24tarcieriyeah ok
07:59:27tarcieriyou and your mutable state
07:59:28tarcieriheh
07:59:35evanWEEE
08:00:42evanbrb
08:10:22brixenI am finding R to be quite a nice tool
08:11:45evanArrr
08:11:53evanthar be pirates in ye stats!
08:12:18brixenheh
08:12:26rueWait, what? "R, also called S"
08:12:52brixenevan: so, I combined the two tables into one with h2() using an offset for a modest gain
08:13:01brixenI'm adding c=1 probing now
08:13:17evanneat!
08:13:48brixenI think that based on the simplicity of the cuckoo code all together that it should jit better
08:14:02brixenie, the iterator is just a walk down a vector
08:14:06brixenetc
08:14:24evannice
08:14:26brixeninstead of going over links in the chained buckets
08:15:40evansure
08:16:14rueWas there a particular reason why hash insertion order was preserved?
08:16:25evaneh?
08:16:37rueThe MRI change
08:16:42evanoh
08:16:50evanit made it more friendly i think
08:17:05evannot that i really agree
08:17:16brixenI think it's ridiculous
08:20:34manverurue: i think it's faster
08:20:45manverufor iteration
08:21:10evanmanveru: very very minorly maybe
08:21:15manverunobody could really bench it
08:21:17evanbecause iteration now walks a linked list
08:22:19manveruwell, it would be nice to turn that behaviour off :)
08:22:47manveruor randomize somehow
08:23:02manverujust so my specs fail when i rely on order
08:23:30brixenmanveru: run them under 1.8.6 :)
08:23:49manveruthe lowest ruby i have is 1.8.8dev
08:24:22manveruand i'm running all my stuff in 1.9 since a while
08:24:22brixenhow's that working for you?
08:24:23brixenI still have no idea what 1.8.8 is
08:24:38manverudunno... doesn't seem any different
08:24:46brixenthan which?
08:24:53manveru1.8.7
08:24:55brixenah
08:25:14brixenI wonder why it's .8 then
08:25:26manverubecause it's what's going to be .8
08:25:47brixenthat's a bit circular :)
08:25:53manverulol
08:26:02manveruwell, it is 1.8.8dev, not 1.8.8 proper
08:26:24manveruthe version in svn is bumped right after the release
08:27:22manverurubygems complained a bit because it couldn't parse my RUBY_VERSION though
08:27:49manverubut i'm running on the svn version since years now... no reason to change that
08:29:18evanmanveru: have you run into problems with ramaze using 1.8.7+ features that people using it under 1.8.6 didn't have?
08:30:05manveruthere's one problem, yeah
08:30:15manverubut i've been too lazy to change it, since it's in a little-used method
08:30:40manveruapart from that i try to keep my library code compatible
08:30:54evangotcha
08:31:42manveruthough any new libraries i make will target 1.9
08:32:13manveruah, there it is: obfuscated = email.to_s.each_byte.map{|c| "&#%03d" % c}.join
08:32:32evanso you're leaving 1.8 behind soon?
08:32:39manverui guess i could use gsub with //n instead
08:32:48manveruyes
08:33:09manverumost people picking up ramaze these days ask for 1.9 support (at least the ones i talk with)
08:33:18manveruand a lot are running 1.9 already
08:33:59evaninteresting.
08:34:21manveruit seems like new people usually go for the highest version
08:34:47manverualthough there are still some libs that need a little manual nudging to work
08:35:06evanwell, ruby-lang.org only lets them download 1.9
08:35:12evanso i guess i'm not surprised.
08:35:19manveruand god knows when the vim guys decide to add support
08:35:42manveruthat was ugly to patch...
08:36:50manveruwell, i see the only reason to stick with 1.8 these days is that some libs won't work out-of-the-box
08:37:11manverulike mongrel having silly 'when :' in one place, but being compatible otherwise
08:37:30manverumost of those could be made compatible with a small maintenance release
08:37:56manveruthat's probably where github will have an edge
08:38:38evanyeah
08:38:49evanmakes we worried that we should think more about 1.9 support.
08:39:17rueHm, does the Hash implementation maintain two data structures, then?
08:39:22evanno
08:39:32evanthe entry structs themselves are nodes in a linked list
08:39:37evanso it's 2 data structures in one
08:39:59evaneach bucket now has next_bucket, next, prev
08:40:09evannext/prev for the list, next_bucket for the chaining
08:40:32evanso an extra 2 words per entry in the hash table
08:41:09rueRight, yes, it just has the hash indexing in front
08:41:30evanyes
08:41:46rueIt does somewhat limit implementation options, assuming performance is a concern
08:41:55manverujust waits for people to ask for Hash#reverse!
08:42:38manverurue: the core devs pointed out that the ordering is an implementation-detail that might not be ported to other impls.
08:43:00rueOh, yeah, no-one will be relying on it
08:43:16evan*eyeroll*
08:43:28manveru:P
08:43:31manveruexactly...
08:45:09rueI think a guarantee that the iteration order is always the *same* might have been appropriate...but just one more vessel clogging up the waterways
08:46:25evanit's a bloody hash table
08:46:35evanif order matters, you're using the wrong data structure!
08:46:38manverui remember how hard it was for me to switch from phps all-in-one array/hash bastard to the separate structures in ruby
08:47:07manverunow people will be a lot more tempted to use a hash for everything...
08:47:13rueThere is a SortedSet somewhere
08:47:22manveruin set.rb
08:48:44evanimho, insertion order of a Hash makes no sense.
08:48:49evanbut what do I know.
08:51:52rueShould rebel. If for nothing else, to show that it is _not_ an implementation detail :)
08:52:06evanheh
08:52:42manveruthe fun part starts when replicating set-during-iterate behaviour :)
08:53:26evaneeh gads.
08:53:49rueNext year, we should propose a GSoC project to implement undefined behaviour
08:55:15rueCross-platform filesystem corruption support
08:56:16evanhehe
09:05:12rue* Maybe. void* where C.
09:06:25rueThat pyrb script is not terrible, actually. Obviously nothing like an actually workable solution, but maybe it makes Mr. Haas happy
09:08:06rueAt any rate, Python does not suck because of the indentation, but because it is Python
09:09:21rueHm. Is there a better way to express the ", but" above? I guess just repeating the statement
09:09:28rueOh, English.
09:09:39boyscoutTeach JIT properly about all manner of argument passing - 0805854 - Evan Phoenix
09:10:08evanyou could say "At any rate, Python does not suck because of the indenation, but rather because it is Python."
09:10:36evan", but rather" being the backtracking reason changer of English
09:11:48rueAh, yes
09:12:16rueI think I am objecting to the repetition of "because", now that I think of it
09:13:39rueThere is a clear need for a because-but construct akin to if-else :P
09:13:47evanhehe
09:13:51evani tried to rewrite it
09:13:58evanthe 2 becauses is still the clearest
09:14:11evanbecause you can imagine the ", but rather" reversing to right after suck
09:14:23evanso what would be the standalone sentence there?
09:14:39evanPython sucks since it is Python
09:14:41evanthats clunky.
09:14:45rue`cause Suck; Python; else; Indentation; end`
09:14:53evanhah
09:15:33rueFrom which, I guess, comes "The cause of Python's suck is Python, not indentation"
09:16:12evanrecursive definition is clunky by nature
09:16:34evanin english
09:16:37evanand probably most languages.
09:17:03rueExcept Esperanto
09:17:19boyscoutCI: 0805854 success. 2682 files, 10321 examples, 32866 expectations, 0 failures, 0 errors
09:17:25rueWell, maybe. Perhaps I should pick that up as a hobby
09:18:18brixenthe set of reasons python sucks intersect the set of all reasons to suck = { python }
09:18:21evanI had a friend that picked it up at one point
09:18:26rueAlthough I was looking for something that involves more people, not less
09:18:47evanrue: perhaps an esperanto book club!
09:19:18evanbrixen: hehe
09:19:18rueI am pretty sure they only socially shun Esperanto speakers rather than actually beating them up nowadays
09:19:34evanbrixen: getting close to rbx -v running with the LLVM JIT in call counter mode
09:19:58rueKarate and Esperanto would be a synergistic hobby combo, though.
09:20:19rueMm, wait, method call counter?
09:20:30evanyeah
09:20:35evanprimitive hot spot detection
09:20:43evanbased on the number of times a method has been called
09:20:50rueTrigger at N, sure
09:20:55evanyep
09:21:25brixenevan: awesome!
09:21:51rueThe upfront loading option is good to have, too, for server purposes
09:22:17evanrue: yep
09:22:27rueAre all the rbx. config options processed from -X switches now?
09:22:30evanthough, it will still do better if it run in a hotspot mode
09:22:39evanso it can make use of the info the interpreter gathers
09:22:58evanrue: they're all available that way
09:23:20rueGoodie
09:23:38evanvm/configuration.hpp
09:23:43evanis the ones that the VM itself checks and uses
09:24:04evanbut anything with -X shows up in RUBY_CONFIG
09:24:13rueOK
09:24:29brixenwe should probably try to standardize them a bit
09:24:40brixenI litter them wherever I find a need :)
09:24:46evanheh
09:24:54evanwell, i've started to pull them together well
09:24:58rueYeah...this is a good step in the right direction, though, it was much worse
09:25:05evanbrixen: i changed all the ones you used
09:25:18brixenin the vm, yes
09:25:30brixenI mean in ruby code using RUBY_CONFIG
09:25:47evanah.
09:25:56evanwell, we should decide if the rbx. prefix is needed
09:26:12brixenyeah, probably could do without that
09:26:28brixen<main subsystem>.<option>
09:26:36brixen-Xprofiler.graph
09:26:47evansure
09:26:48evanyeah
09:26:58brixenit would be nice to get a list of all the ones used, like you can for the vm ones
09:27:08brixenbut we don't register them anywhere for ruby code atm
09:27:11rueThe -X part pretty much takes care of the "namespace"
09:27:13evanwould it be -Xvm.gil.debug
09:27:14evanthen?
09:27:19brixenyeah
09:27:22evank
09:27:51rueCould always use a 'real' option parser...just need to split it out from the loader though
09:27:57evanbrixen: we'll need a play to show them all
09:28:03brixenyeah
09:28:14evanrue: to do what with them?
09:28:26evanconfiguration.hpp takes care of importing them into values the VM can easily use
09:28:51rueConstructing --help and such
09:29:38evanfor things that -X takes?
09:29:56rueWell, all options
09:30:16evan-X isn't an option thats seen by loader.rb
09:30:38evanthe driver spys on it
09:30:41brixenthe parsing isn't the issue for displaying held, it's somehow registering which -X options do what
09:30:46evanso that the values are available to the VM on startup
09:30:53brixens/held/help/
09:31:06brixenwhen they are used in ruby code
09:31:25evanbrixen: yeah, we'll need a list of all -X options available
09:31:34brixenyep
09:31:59rueRight, or more generally, concentrating the option definition and details to as few different locations as possible
09:32:25evanthats what configuration.hpp is for, VM side
09:32:33evanit's one place that all -X options are imported
09:33:43evanit would be easy for me to add a const char* description
09:33:47evanto the configuration items
09:33:48rue'Es
09:33:58evanso that you could have it print out it's names, values, and what they mean
09:34:04evanif you do
09:34:13evan-Xconfig.print
09:34:17evanit already prints out the names and values
09:34:35brixenyeah, the parsing is good
09:34:57brixenbut atm, it's got no way to report that -Xprofiler.graph is/does anything
09:35:04brixenyou can make up any -X option
09:35:09evanyep
09:35:17brixenwhich is good
09:35:19brixenin a way
09:35:30brixenbut the downside is no way to inform the user
09:35:42evanit's definitely 'agile' :D
09:35:44rueadds another GSoC project for making up inscrutable options
09:35:49brixenheh, yeah
09:35:54evanhow about this
09:36:10evanad a singleton object at Rubinius::Options
09:36:21evanand, in the class body of the code that uses RUBY_CONFIG
09:36:22evanyou do
09:36:40evanRubinius::Options.add "profiler.graph", "Tells the profile to display call graph output"
09:36:47evanso it's simple to register
09:36:49brixenyeah, I like that
09:36:54evanand Rubinius::Options.add is super easy to grep for
09:36:56evanif need be
09:37:43rue'Es
09:38:02rue'Course, still have to slightly improve the loader.rb option parsing too :)
09:38:25evanyes
09:38:33brixenrewriting loader.rb completely is in the roadmap
09:38:35evanloader needs love too
09:39:25rueThat is mainly where I figured, say, optparse would be usable
09:39:47brixenI'm thinking of using mspec's option parsing
09:40:15rueOr that, certainly. A bit less weighty
09:40:42evani'd really prefer something simple and light
09:40:43brixeneither way, loader definitely needs proper parsing
09:40:45evanoptparse is way too big.
09:40:50evanremember how early on this is.
09:40:52brixenand now we have cmd line specs too
09:40:53ruegetopt()
09:41:36scooprso that -e'puts "Hello!"' would finally work (like it does int MRI)? ;) (currently you need to put space in between, -e 'puts "Hello!"')
09:41:51brixenmspec's parsing works well, is easy to define, and runs on immature impl
09:42:03brixenscoopr: yeah, that :)
09:42:20evanscoopr: it doesn't work?
09:42:24evanoh, the space
09:42:26evanGAH
09:42:39scooprtrips me every time ;)
09:44:19evanhey look!
09:44:21evanmatz on a book!
09:44:22evanhttp://www.amazon.co.jp/o/ASIN/4822234312/amz_ranking-22/ref=nosim
09:44:27evani wonder what the book is about
09:44:28brixenheh yeah
09:44:31brixenme too
09:44:37brixenmatz keeps tweeting that
09:45:02evanok boys and rue
09:45:05evani need to get to bed.
09:45:12evanmother-in-law arrives tomorrow morning.
09:45:14rueSomething like "living and breathing code", I venture
09:45:26manveruthe title is "world of code"
09:45:29rueYep yep, nites
09:45:48rueI need to go wake up the alternate-reality me that went to bed
09:45:52manverusubtitle is something like "how to become a super-programmer"
09:45:59rueMan, my eyes suck
09:46:23ruemanveru: How is your Japanese nowadays?
09:46:28manveruerr, "the 14 laws of becoming a super-programmer" :)
09:46:45manverunot so bad anymore
09:46:51rueHehee, sounds like a diet book
09:47:20manverui dunno... doesn't sound like a title he'd choose
09:47:50rueIt could be a cultural thing too, I suppose?
09:48:00manverumaybe, yeah
09:48:06rueAlso, it would be awesome if there actually _were_ laws
09:48:27rue3 Python strikes and you are out
09:48:42manverulol
09:50:07manverusleep well
09:50:16rueDepartment of Awesome Code
09:50:21rueSpecial Agent
14:58:01jaribanyone know what's with these failures from `bin/mspec ci` http://gist.github.com/116140 ?
16:28:14rueLooks like weird localisation stuff.. reproducible?
16:28:25rueDST or something maybe
17:05:01jaribrue: hmm, that's possible
17:05:27rueAr is specific to us, too, so it may have escaped scrutiny
17:05:39rueThe top one seems weird...lemme check
17:06:31rueHm, quite possibly just a poor choice
17:06:48ruejarib_: Are you able to reproduce the egid one? (And verify that the number is correct?)
17:08:58jaribrue: it returns a Bignum, not sure how to verify the number?
17:09:14rueJust print it or something
17:10:03jarib$ bin/rbx -e 'p [Process.egid, Process.egid.class]'
17:10:03jarib[1503010931, Bignum]
17:12:17jaribhuh
17:12:45evanmorning.
17:12:53evanjarib_: eh?
17:12:57rueMm, it is evening now..
17:13:05evanrue: crap! my clock is STILL wrong!
17:13:13evan(btw, I think something is wrong with the sun too...)
17:13:33evansearches "sun repair" in the yellowpages
17:13:58jaribevan: weird, http://gist.github.com/116222
17:14:11brixenyes, the sun needs repair, it is actually shining in pdx
17:14:14ruejarib_: It does seem somewhat unlikely that that is a valid gid?
17:14:33jaribrue: i wouldn't know
17:14:33evanjarib_: thats an MRI bug
17:14:35evanimho.
17:14:44evanthats fixed in 1.9
17:14:50evanand jruby has full 32bit Fixnums
17:15:03evanwhere as we only have 31bit ones (30 bits of data, 1 of sign)
17:15:16jaribevan: there's a spec that says it should be a Fixnum http://gist.github.com/116140
17:15:20jarib(top one)
17:15:25evanthats spec is wrong.
17:15:34evanyes
17:15:36rueThe spec is basically 'the egid is some number'
17:15:36evanthe spec is wrong.
17:15:42evanthat should be
17:15:45jaribso, change it to Integer
17:15:45jarib?
17:15:50evanProcess.epid returns an Integer
17:15:51rueInteger, yes
17:15:51evanyes
17:16:00jaribaha
17:16:08rueNo, that is eGid
17:16:22evaner er.
17:16:23evanyes.
17:16:30evanbtw, just for reference:
17:16:30evanirb(main):003:0> 1503010931 > Fixnum::MAX
17:16:30evan=> true
17:17:00rueMm, yeah, so it is the syscall boundary
17:17:31evanwhat is?
17:17:46evanthis, btw is a boundary case for a lot of code
17:17:55evansince that Bignum can still fit in an int
17:19:17jaribevan: any idea about the Ar failures?
17:20:35evanhm.
17:20:49jariband, should I do a patch to rubyspec or rubinius?
17:21:19evanin this case, rubyspec would be best
17:21:24jaribok
17:24:43evanoh, I wonder..
17:25:09evanoh.
17:25:37evanwell
17:25:42evani'm not sure this can be made to work
17:25:50evanAr is incompatible with numbers that big.
17:26:01evanit has 6 bytes to store the number as ASCII only.
17:27:18evanplus, the Ar isn't clamping the output to only 6 bytes
17:27:30evanso there are 2 bugs
17:28:06evan1) the ar format just doesn't support uid/gid that large
17:28:18evan2) Ar, the class, isn't doing the wring thing when they are that large
17:31:36jaribwhy does it happen only on my machine? it's not that special :)
17:32:44evanit is actually
17:32:51evanyou have huge egid results
17:33:38jaribi have no idea what would cause that
17:33:48jaribit's a regular MBP
17:33:49evanwhat OS are you using?
17:33:52evanah.
17:33:53evanhm...
17:34:06evanthats weird, because
17:34:06evanirb(main):002:0> Process.egid
17:34:06evan=> 20
17:34:13jaribhmm
17:36:51jaribperhaps it's something that would grow over time?
17:37:04jaribheh, guess not
17:37:16jaribi have another question though
17:38:49jaribevan: what would you like Method#inspect to look like when it's backed by an AccessVariable?
17:39:21jaribatm, it blows up. adding AccessVariable#name will give #<Method: Array#@total (defined in Array)>
17:39:33jaribbrixen suggested #<AccessVariable Array @total>
17:39:35evanhm.
17:39:41evanwell easiest is to just fix #name
17:39:45evanto return it without the @
17:40:12jaribso [].method(:length) #=> #<Method: Array#total (defined in Array)>
17:40:17evanbut returning what brixn said is ok
17:40:24evanor even
17:40:50evan#<Method: AccessVariable of @total on Array>
17:41:25jaribi like the last one
17:41:41evango for it
17:41:47jaribwill do :)
17:41:56evanya just need to make Method and UnboundMethod aware of AccessVariable
17:42:06jaribyep
17:44:11rueThat is what I was saying, that large a gid seems unlikely to be correct
17:44:25rueUnless it is a signedness issue or something, maybe?
17:44:40jaribi'm on intel
17:45:19evanrue: well, if it were signedness, i'd expect to just see a wrong high bit
17:45:25evanthis has even bit distribution throughout
17:45:32evanso i guess it could be garbage
17:45:46evanjarib_: do you always get that value when you call Process.egid
17:45:47evan?
17:46:06evanjarib_: are you on 10.5?
17:46:14jaribyes to both
17:46:26jariboh
17:46:27brixenjarib_: what's your github user?
17:46:30evanhm.
17:46:33jaribbrixen: jarib
17:47:12brixenjarib_: ok, added you to rubyspec
17:47:21jaribcool, thanks!
17:47:30brixenthanks for helping!
17:47:35jaribi made a ticket
17:48:10brixenalready committed
17:48:23jaribnice :)
17:48:27evanbada bing bada boom
17:48:29brixenI'll update rbx's frozen in a bit
17:48:29evanthats how we roll.
17:48:57evanok, i gotta head to the airport to pick up my mother-in-law
17:49:04evani'll be back a little later
17:49:14evani'm pushing through getting -v running with the JIT
17:49:16evanmaking good progress
17:49:25rueCool
17:49:37sandalAnyone have a moment to verify a Ruby 1.9 rubyspec patch for Observable?
17:50:13sandalI haven't put it into patch form yet, but:
17:50:14sandalhttp://pastie.org/private/hbxu6cf3g5wlt224ui0zw
17:50:55sandalBasically, looking over the code in 1.8.6 vs. 1.9.1 it's pretty clear. The latter uses a hash as its underlying structure
17:52:41sandalif it looks right, let me know and I'll submit.
18:01:38brixensandal: looks ok to me
18:01:46rueSeems OK, I might be partial to something like `it "returns the number of unique observers"` for the verbal part but that is a matter of taste
18:02:25sandalrue: maybe that is better
18:02:36ruesandal: Will both versions still notify both duplicate observers?
18:02:48sandalrue: actually, no
18:03:05sandalthat's why it's a bit of a flawed verbiage in either case
18:03:19sandalbasically, @observers = [] in Ruby 1.8.6
18:03:23sandaland {} in Ruby 1.9.1
18:03:35rueWell, it probably belongs in a different spec
18:03:45brixensandal: you should perhal spec that under #add_observers
18:03:50brixener perhaps
18:04:04rueRight, or wherever the actual notification spec is. Or both :P
18:04:18sandalbrixen: that seems like a good idea, and then I could just make a count spec that is neutral
18:04:25sandalby not re-using the same observer
18:04:30brixenyeah, probably better
18:04:34rueYep
18:04:42sandalokay, will do.
18:05:23sandalrue: probably not in notify observers.
18:05:35sandalIt does notify 'all observers' in either case
18:05:46sandalit's the add that has the significant difference
18:05:57sandalbecause on 1.9, a duplicate replaces the original
18:06:59rueSure
18:08:01rueThe way I was thinking is that, in fact, both 1.8 and 1.9 allow giving the same observer multiple times
18:08:17rueThe difference is that 1.9 will only dispatch to one
18:08:37rues/one/once/
18:08:50rueErm. You get the point
18:08:58sandalhmm... I think that's too handwavey though
18:09:20sandalthere is a significant difference between replacing and duplicating them in my mind
18:09:25sandaland it happens at insertion
18:10:12sandalI guess I see your point that the behavior is noticeable at notification time
18:10:29rueWell, how do you specify that only one 'copy' is stored? It seems to border on implementation detail
18:10:53sandalI just think that if I had an API for add_observer()
18:11:11sandalI would specify explictly that duplicates would be ignored
18:11:32rueSure, but how do you find out if that is the case? :)
18:11:32sandalwhereas I think this would be out of place and after the fact on notify observers
18:11:41brixenyeah, spec'ing via the notification received is more about observing (no pun intended) vs looking at how it's generating the observed behavior (ie using {} )
18:12:11brixenbut, it puts the spec in an odd place for implementers
18:12:21brixenwho would probably look at the spec for adding observers
18:12:45sandalbrixen: yeah, I think the point is that if you put it on notify, it doesn't implictly cover count at all
18:12:48rueTechnically, 1.8 could store all in an Array and just weed out duplicates at dispatch time
18:13:07sandalrue: sure, but it doesn't. The count is seen immediately
18:13:11sandalbefore any dispatch
18:13:31sandaland that's not an implementation detail, it's a behavior
18:13:53brixensandal: I would probably put the spec on adding the observer, but use the dispatch to observers instead of count
18:14:16brixenbecause, conceivably, you could keep a unique count, but dispatch the # of times the observer was added
18:14:46brixenin the count spec, you can show that count is different if you add the same observer
18:14:50rueRight, the interface for 1.8 is that it will dispatch multiple times to the same observer, and that the count is the number of notifications that will be generated
18:14:55brixendifferent or the same, based on version
18:19:59sandalAlright, let me see what I can whip up here.
18:24:58sandalbrixen: here is my reworked count spec. http://pastie.org/private/es97gbpegmsnlprfgyiia
18:25:18sandalI need to add something on add_observer (that works by dispatch)
18:29:42brixenheh, ok kinda nitpicky, but I would say it "returns the number of observers", it "returns the number of unique observers", it "returns the number of observers including duplicates"
18:30:03sandalokay, sure.
18:30:08sandalI appreciate the feedback
18:31:54sandalI think this looks better than before though, since it draws clearer attention to what's actually expected
18:31:55brixensandal: if you want to put that in a ticket, I'll get you a commit bit and you can commit the others when you finish them
18:32:06brixenyeah, I think it's improved
18:32:19sandalthat'd be great.
18:32:32sandaldo you want a git formatted patch, or just a link to pastie?
18:32:42brixenfp is the best, you get credit :)
18:35:12sandalwhere is the tracker?
18:35:42sandaltried http://rubyspec.org/projects/rubyspec/issues/new but it asked me for username pass
18:37:07sandalI see it. I need to register I guess?
18:41:29brixenyeah, you'd need to register, but I'm moving to github issues shortly
18:41:33brixenyou could pastie me the fp
18:43:12sandalbrixen: http://rubyspec.org/projects/rubyspec/issues/show?id=115
18:48:08brixensandal: ok, committed and added you to rubyspec
18:48:17sandalbrixen: excellent, thanks.
18:48:18brixenfeel free to hang in #rubyspec too
18:48:31brixenwe have a bot that reports commits there and helpful people :)
18:48:49sandalI'm really excited about this stuff.
18:48:57brixencool!
18:49:14sandalThis is my first dip into what you guys have been doing, and I'm really impressed with the level of support and general awesomeness
18:49:26brixenwell that makes my day!
18:50:13sandalAnyway, I'll do what I can to get a spec in to cover the rest of this problem soon, I'll post on #rubyspec for review when I have it.
18:50:27sandalRight now I need to go back to solve my first problem, writing a blog post about code reading
18:50:48sandalBut now it'll include a bit more about RubySpec than I initially intended. :)
18:51:18brixenheh, sweet
18:54:26rueAll helpful people are reported
20:00:25ddubyou are reporting helpful people?
20:00:31ddubare they in trouble?
20:00:35ddubis glad he is so unhelpful
20:02:42brixenthe reporting is done
20:02:51brixenpassive, there is no agent
20:10:29rueThe Department of Awesome Code can neither confirm nor deny anything that was or was not just said.
20:12:52brixenfooooooooooood
21:10:52sandalevan: here's that tiny doc patch I recommended yesterday
21:10:53sandalhttp://pastie.org/486823
21:11:08sandalI can file a ticket if you want, but it's hardly a patch at all :)
21:18:54brixensandal: I'll commit it
21:19:15brixenbetween that and your rubyspec patch, you could likely twist evan's arm for a bit :)
21:19:32sandalbrixen: thanks. It's so tiny, but yet google failed me yesterday and I only figured it out by accident. :)
21:19:45brixenheh, cool
21:21:08sandalbrixen, did you catch the discussion yesterday on this:
21:21:09sandalhttps://rubinius.lighthouseapp.com/projects/5089/tickets/773-bug-using-attr_accessor-name-at-class-l evel
21:21:28sandalBasically, evan suggested that it's weird that MRI allows for this (and I agree)
21:21:34sandalbut JRuby also does
21:22:03sandalbrixen: not sure if you wanted a RubySpec patch for that or not
21:23:19brixenwell, I think we will have to change the name we use
21:23:28brixenbecause we can't really get in the way of code
21:23:34brixeneven if it's rather dumb code
21:24:14sandalIt's just sort of accidental code
21:24:21brixenyeah
21:24:26sandaltest/spec does something like this
21:24:31brixenby dumb I mean not really descriptive
21:24:49sandalmy_test_class = Class.new(Test::Unit::TestCase)
21:24:51brixenwhat test/spec does
21:24:55brixenyeah
21:24:57sandalmy_test_class.name = "Blah"
21:25:01sandalerr
21:25:06sandalyeah
21:25:48sandalWell, if you guys do patch that, then it makes my GoRuCo presentation a lot easier. Because I'm pretty sure that Rubinius will pass all of Prawn's tests if not for this.
21:25:56brixenclasses have names and it's silly for test/spec to call what it's assigning a 'name'
21:25:57sandalSince it renders all the examples
21:26:05brixenlike evan said, it's more a description
21:26:20brixenbut that aside, we probably will need to change what we use
21:26:25sandalyeah, I can push back there.
21:26:26brixenbecause 'name' is so common
21:26:42sandaljust on the principle you just mentioned
21:27:31sandalBut name is so common that I can see how this clash happens by accident
21:28:16brixenwe could make a special setter that #to_sym's the string :)
21:28:46sandalHeh, but then you're going to have someone doing
21:28:58sandalklass.name = Label.new
21:29:06brixenif you tried to assign a non-sym-able type, it barfs
21:29:16brixenas long as you can #to_s
21:29:22brixenand #to_sym it
21:29:24brixenshould be ok
21:30:06sandalI wonder though, how about when people read it back?
21:30:21sandalPotentially same problem on the other side
21:31:42brixenwell, the getter could #to_s it
21:32:21brixenbut of course, you'd have someone do: c.name = "my *really*\0dumb name"
21:32:22brixen:P
21:32:36brixenand #to_sym would barf
21:34:06sandalit sounds like the fix should either make Rubinius consistent with other implementations, or just be left as is and not supported
21:34:11boyscoutAdd note about interactive prompt to docs - fb6b228 - Gregory Brown
21:34:36sandalI think either are okay, but a middle of the road approach would just make things kinda-sorta-work which is confusing
21:34:45brixenheh, true
21:36:11brixensince Module#name already exists, I think user code that redefines it does so at their own peril
21:36:25brixenruby is open, but that is not the same as totally permissive
21:36:36brixenruby might be easy, but it's not free
21:36:37boyscoutCI: fb6b228 success. 2682 files, 10321 examples, 32866 expectations, 0 failures, 0 errors
21:36:43brixenyou pay in exceptions :)
21:36:54sandalYeah, if that's the feeling, I'm fine with just patching test/spec
21:37:07sandalIt may well just be an undefined behavior
21:37:17brixenright
21:37:31brixenchanging existing methods should probably be undefined
21:37:36sandalI seriously doubt if you asked Matz he'd have a strong opinion about what should happen when you do something dangerous like that
21:37:50sandalthough I sort of wish that name was something a little more descriptive
21:38:03brixenit's like, the impl gets first dibs, if the app overrides it and it still works, lucky you
21:38:14sandalheh, good way to put it
21:38:32sandalno different than overriding library code
21:38:50brixenthe other point is that rbx has real typed code in the VM
21:39:06brixenvery different from MRI, which just has VALUE everywhere
21:39:14sandalright, I learned about that the other day.
21:39:29sandalI really haven't studied the internals much at all, but now I'm taking an interest
21:39:48brixensome cool stuff, if I do say so myself :)
21:52:09jaribdoes rubinius use a different readline lib from MRI? seems different
21:52:43brixenit uses the C ext imported from some version of mri
21:52:55brixenlib/ext/readline
21:52:55jptixhmm
21:53:10brixenit may have some stuff disabled, iirc
21:53:16jptixah, so it will probbly use libedit on os x
21:53:22brixenyeah
21:53:27jaribah, right
21:53:31brixenwhich is broken on some versions
21:53:37jaribthat's why :)
21:54:05brixenwe may be using the rb-readline that luislavena bountied
21:54:15brixenshould ask evan about that again
23:25:17evanyay new chair!
23:25:20evanfree at that!
23:25:23brixenyay!
23:25:27brixenno better price
23:29:55evanwell, they could have paid me to take it.
23:29:55evan:D
23:31:31brixenthat wouldn't be a price, that'd be a prize
23:31:33brixen:)
23:37:27brixenevan: sweet, this hash is behaving very predictably now
23:37:35brixentake a look at the spreadsheet
23:37:55brixenadding probing predictably helps on insert, but slows fetch down
23:38:30brixenI'm going to do one more variation based on http://crpit.com/confpapers/CRPITV91Askitis.pdf (2009 paper)
23:38:46brixena bucketized cuckoo hash
23:39:03rueInteresting
23:41:43evanthat doc on bin/rbx running irb should say that it is irb
23:41:45evannot that it's similar.
23:41:59brixenthe biggest increase for probing was on a lot of get/sets in small hashes
23:42:18brixen~10% over existing chained bucket hash
23:42:44brixenah, yeah it should
23:44:03evaninteresting
23:44:07evani'm happy we've got a nice testbed
23:44:11evanto experiment
23:44:28brixenyeah
23:45:32brixenon pure inserts to 5-10 elt hashes, the improvement over chained buckets is 9-14%
23:45:53slavasmall changes in the load factor can make a huge difference for probing too
23:46:09brixenbased on the hash spy, that's the vast majority of sizes
23:46:26brixenslava: yeah, I saw that last night with plain cuckoo
23:46:43brixenit's extremely sensitive at ~0.5
23:47:15rueSo it turns out that decimal time is quite a mindbender
23:48:34brixenin fact, it is a figment of our imaginations
23:48:56brixenunless you imagine in color, then it may be a pigment
23:55:30jaribany comments on https://rubinius.lighthouseapp.com/attachments/125545/0001-Fix-Method-inspect-arity-when-it-s-backed -by-an-Ac.patch ?
23:56:04jaribi could add AccessVariable#arity instead of doing the checks in Method
23:56:22evanyou should
23:56:23jaribalso curious if you want specs for stuff like this
23:56:30evanbecause the code you have isn't right
23:56:40evanthe arity is 0 if it's a read, 1 if it's a write
23:56:44jaribah
23:56:49jaribok
23:56:51evanWOOP.
23:57:00evan-v just run with the JIT on
23:57:16brixensweet
23:57:56rueExtremely dandelion, dude
23:58:09evani need to add a couple of extra counters
23:58:15evanfor some JIT stats
23:58:22evanbecause this is one interesting artifact
23:58:48evanit appears that -v finishes running before 80% of the background compilations complete :D
23:58:55evanbackground JIT ftw
23:59:19evanthis is in full DEV mode
23:59:24evanatm.