Index

Show enters and exits. Hide enters and exits.

17:10:48evanmorning!
17:11:26kronos_vanoevan, evening!
17:13:16evanhi kronos_vano
17:25:57brixenmorning
17:26:21evanbrixen: have a nice weekend?
17:27:32brixenpretty nice
17:27:48brixenworked on rubyspec quite a bit
17:28:25evancool
17:29:01evani'm rewriting find_canditate, which is what finds what method to JIT when a counter overflows
17:29:12brixenahh cool
17:29:19brixenany new insights?
17:30:30evanwell, i read the explaination of how they expected it to work in Self
17:30:45evanand realized that not checking the methods size as we walk upward is bad
17:30:52brixenah
17:31:03evanbecause we can easily walk beyond where the inliner will run
17:31:10brixengotcha
17:31:48evanthe current logic, in fact, will walk up 8 levels, only stopping on a method that isn't run much, is a block, or uses a splat
17:32:00evanin fact, i'm pretty sure it stops one level too deep too
17:32:06evanwhich is also bad.
17:32:16evanthe logic is a mess, so thats why i've just started over
17:32:23brixenawesome
17:32:39evanit's a small method, but it's already clearer about what the logic is supposed to do
17:32:47brixensince we saw some pretty nice improvements with that messy logic, could be much room to improve
17:33:31brixenI have this crazy issue running the IO specs under 186
17:33:41evanug. fun.
17:34:08brixena file has some 8bit chars in it and merely requiring the file (ie the spec never runs) causes an EBADF in a completely different file
17:34:15brixenreliably I think
17:34:41brixens o f r u s t r a t i n g
17:35:51evanwow.
17:36:13brixensrsly
17:36:58brixencomment the str literals, it runs; uncomment them, the other spec fails
17:37:07brixencolor me blue
17:37:48evanwow
17:37:51evanwhats the string literal?
17:37:58evandoes it cause like the next file to fail?
17:38:23brixenum...
17:38:38brixennot the next
17:38:46brixenthis is a shared spec for #each
17:38:49evana specific other file?
17:38:52brixenand the IO.new spec if failing
17:39:25brixenI think I'm just going to use a different fixture
17:40:23brixenthis is the spec http://gist.github.com/298387
17:40:31brixenthat spec is never invoked
17:40:49brixencommenting the literal array makes everything pass
17:41:12brixenuncommenting it causes IO.open emits a warning if given a block ERROR to fail with EBADF
17:41:18brixenonly on 186
17:41:31brixenso most likely some bug was fixed
17:41:44brixensince it doesn't happen in 1.8.7
17:41:49evanug.
17:42:00brixenthat's why I'm just gonna use a different fixture
17:43:21brixen<3 vim
17:43:24brixend i [
17:43:29brixenawesome command
17:44:01evanoooh
17:44:03evanthats a good one!
17:44:14brixenyeah, love those
17:44:16brixenc i "
17:44:19brixenetc
17:53:26evanhey nerds: anyone know what haskell uses for runtime type checks?
17:53:29evanit must have them.
17:54:20brixenhm really?
17:54:32brixenI thought everything was compile-time resolved
17:54:40brixenbut I really don't know
17:55:25brixenI suppose #haskell would know
17:55:39brixentell me what you find out! :)
17:55:44evani just don't know enough
17:55:50evanI mean, you can do
17:55:56evantype Thing = Person | Rock
17:56:18evanso.... it seems like there could be cases where at runtime you wouldn't know if a Thing was a Person or a Rock
17:56:36evanbut i guess it might be able to resolve that at compile time
17:56:52brixenhttp://okmij.org/ftp/Haskell/types.html
17:56:58evan:)
17:57:02evanI did a google search too :)
17:57:04brixens for run-time check
17:57:18brixenunder the Dependently-typed append
17:57:21brixensection
17:59:24evanyep
18:01:40evani guess the good thing about find_candidate not working well is that it's decision isn't final
18:01:47evanor even super important
18:02:13evanbecause if it picks the wrong method, it will probably pick the right method shortly
18:06:33brixencool
18:08:26evanalso, i'm going to write up a new benchmarking method today
18:08:42evanconstant time, variable iterations
18:08:52evanreported in terms of ips (iterations per second)
18:09:15evanit solves the "really slow on one implementation" problem
18:09:18brixenohh nice
18:09:23brixenyeah
18:09:29brixenI wanted to do something like that
18:09:47brixenso you could normalize all the benches to like 3 sec on an impl
18:09:53evanright
18:09:54brixenand look at the delta on another impl
18:09:58evanexactly.
18:10:01brixensweet
18:10:13evani think i can do it with an ivar read and compare per iteration
18:10:24evanand spinning up another thread
19:04:16cremeshow can i force the JIT on for everything? i think i have discovered a bug where Float.zero? returns true for negative numbers when the JIT is active
19:04:16cremesi can't reduce it to a simple case because it requires a lot of data to force the JIT on; the bug does not occur when run with -Xint
19:04:47evancremes: there is no such way.
19:04:53evanyou need to run it in a loop
19:04:58evanthat will force it to get JITd
19:05:04cremesi'll try that...
19:05:14evanif it's a simple bug in Float#zero?
19:05:21evanit should be easy to put in a loop and run.
19:06:50cremesgot it; after 12260 invocations of the loop, #zero? starts returning true for a negative number
19:07:00cremesi'll open an issue
19:07:15cremesanything magical about 12260?
19:08:28evanha
19:08:28evanno.
19:08:41evanthe number of iterations depends entirely on your machine and the code
19:08:54cremesah, subsequent runs triggers the bug at different times; nevermind!
19:10:30dbussinkcremes: as long as it reliably happens at some point :)
19:10:43dbussinkevan: i also have a reliable segfault on freebsd 8
19:10:53evanok
19:10:54evanticket it.
19:11:03dbussinki'll get as much out of it
19:11:17dbussinkevan: it also supports ucontext, so can enable fibers there too
19:11:24evanok
19:11:31evanjust need to add a condition to fiber.hpp
19:12:54dbussinkevan: yeah, did that already
19:13:05evank
19:13:23dbussinki'll get as much info out of it :)
19:14:14cremesissue 185 created; let me know if you need additional details
19:14:34cremesdbussink: 60% of the time it happens *every* time!
19:15:02dbussinkcremes: evan loves puzzles like that ;)
19:15:24evanheh
19:15:33cremesheh; i'm starting to run rbx for everything i do these days, so as i run across stuff i'll try to reduce it and create issues
19:16:28evansomeday people wil remember to put code in tickets inside a <pre>
19:16:29evanle sigh.
19:16:46evancremes: thanks for the ticket
19:16:51evanit's probably something easy actually
19:16:57evanrelated to the JIT's float logic
19:17:05evangee, that sounded dumb.
19:17:34brixenheh
19:18:17cremesit's a tautology!
19:18:36cremes"this JIT float bug is probably related to a bug in the JIT code"
19:26:59brixenle sigh, IO in mri 1.8...
19:28:47brixenI bet this is related to not dup'ing the fd on IE.new(some_file.fileno)
19:28:58brixenthese random EBADF errors
19:29:14brixens/IE/IO/
19:29:27brixenalthough 1.8 IO reminds one of IE
19:29:55evanoh
19:29:57evantotally.
19:30:32brixenI may have to put those specs in a subprocess spec
19:30:50evanyeah
19:42:05tarcierihaha brixen
19:42:18tarcierire: 1.8 I/O and IE
19:44:14brixentarcieri: :)
19:44:26brixeny'all see this? http://gitorious.org/metatrace
19:44:32brixendwaite linked me to that
19:44:48tarcierihahahahahahahaha
19:44:50tarcieriawesome
19:44:51brixenall together now... o/~ craaaazy o/~
19:44:55tarcieriindeed
19:44:58brixenyeah, for some values of awesome
19:45:09brixenmostly in the extended reals
19:45:09tarcieriit's cooler than Perl's Acme::Turing :)
19:45:13brixenheh
19:51:23evanso
19:51:33evandoes it do the raytracing actually as template expansions?
19:53:05Zoxchttp://h3.team0xf.com/ctrace/ :)
20:11:49evansweet, i've got a nice IPS harness setup
20:11:54evanwith a nice compare script
20:12:24evanand a script to generate boiler plate benchmark files, one for each method in a class
20:12:50evanand compare automatically excludes unedited boiler plate files
20:13:08evanshould be a good setup for benchmarking core methods.
20:28:48lopexwow, metatrace rulez
21:56:07evanman, this IPS setup is so much nicer than guessing an iteration count.
21:56:20brixennice
21:57:07evani'm writing simple benchmarks for each String method
21:57:30brixenbased on the existing ones?
21:57:38evanno.
21:57:48evanquite literally the simplest thing
21:57:53evana loop calling the method.
21:58:15brixenhmm
21:58:17evanbut i'm already seeing good data
21:58:37brixenwell, the existing ones attempt to make the results meaningful
21:58:39evanthis benchmark is entirely seperate from the other benchmarks
21:58:53evanthe other is all about how fast some ruby code be run
21:58:57evani'm not interested in that here.
21:59:12evan(well, i am only because rubinius implements most of these methods with ruby)
21:59:26evani'm interested in where rubinius sits wrt the speed of the kernel itself.
21:59:35evanbecause thats where our benchmark/speed improvements go
21:59:44evanwe need to know whats slow to know what to fix.
22:01:43brixenI actually added factors to all the bm_string benches to make them approximately the same magnitude runtime on 186
22:01:55brixenI'm curious how you make the string to test a method on
22:02:23evanoh yeah
22:02:26evani forgot we had bm_string
22:02:27evanug.
22:02:29evanwell
22:02:52evanhaving them all in one big ass file
22:02:58evanand with no warmup
22:02:59evanetc.
22:03:03brixenyeah
22:03:03evansucks.
22:03:08brixenI'm not arguing that
22:03:18evanplus this is iteration based.
22:03:22evanIPS is so much better.
22:03:30brixenjust that I tried to make the input at least a bit statistically independent of the operation
22:03:48evanIPS solves the (random_expression).times {} problem
22:03:52brixeneg sub'ing a non-existent char might give different results than sub'ing an existing char
22:04:03evanand these use a constant for the string?
22:04:11brixenyeah
22:04:12evanmine just use a local.
22:04:15evanand they're isolated
22:04:21evanbecause each runs in a seperate process
22:04:25evanwith warmup
22:04:31brixensure
22:05:22brixenanyway, there's a comment above the string data
22:06:04brixenthe constant lookup is factorable using the "base" bench
22:06:49brixenproblem is, not every one of those benches use the constant
22:06:56brixenso yeah, it's a mess
22:07:16brixenbut I think the string needs to be appropriately random
22:07:37brixento attempt to avoid impl biases
22:09:08evanthat run method is confusing.
22:12:33evanah, thats how individual ones run
22:12:38evanyeah, this is too confusing
22:12:46evanand introduces all kinds of other problems.
22:13:10brixenheh, I'm agreeing
22:13:20brixenthe only point is to use an appropriately random string
22:14:08evanhm.
22:14:21evanyeah, i guess thats important
22:14:31evani'm sort of at the stage where being biased is fine
22:14:42evanif an impl can do it faster because it's biased
22:14:46evanbonus for it.
22:15:02evani'm looking for objectivity
22:15:17brixenwell, unless that's somehow qualifiable, it's hard to interpret
22:15:20evanjust places that we need to do some work
22:16:20brixenI'm beginning to despair that a single solitary rubyspec file exists that won't make me groan upon opening it
22:16:35brixenthe IO specs are just effen gross
22:17:19evanspec/ruby/core/true/to_s_spec.rb
22:17:41brixen?
22:17:55evanthat can't make you groan when you open it
22:18:00brixenheh
22:18:12brixentrue!
22:18:21brixenor "true"!
22:25:22evanok, i added a simple helper system to the new benchmarks
22:25:42evanthat loads automatically
22:25:53evanand put the random string into a random_string method to be used.
22:26:23brixencool
22:28:37evani think i'll commit these
22:28:44evani did about 10
22:28:45evanin String
22:28:49evanbut the setup is there
22:28:52evanwe just need to flesh them out
22:29:15brixenok
22:31:47tarcieriyou guys still all about being embeddable?
22:32:03tarcierithere's been a few people asking about it on ruby-talk
22:32:07evantarcieri: we've done nothing to preclude ourselves from being embedded.
22:32:08tarcierifeel like I should point them at Rubinius
22:32:36tarcierievan: one guy was reporting segfaults when trying to run multiple copies of the Ruby VM in the same process, heh
22:32:43tarcieriI guess in different threads?
22:32:48evanof MRI? ug.
22:32:50tarcieriit's like "segfaults? imagine that"
22:32:51evanmm, yeah.
22:35:09tarcieriI try to embed a Ruby interpreter into an application through a shared
22:35:09tarcierilibrary. This application can call more than one time Ruby interpreter.
22:35:09tarcieriIn the attached testcase, first call works as expected but next calls
22:35:10tarciericreate a segmentation fault.
22:35:14tarcieri^^^ yeah, that guy
22:35:15tarcieriheh
22:35:29evanfun.
22:35:42tarcierisome other guy asking where the Ruby C embedding API is
22:35:47evanzoinks
22:35:47tarcieriand everyone being like "whaaaaa?"
22:35:57evanour String#dump is 0.039 times the speed of MRI's
22:36:09tarcieriawesome
22:36:11evanthis is why I realized we needed these.
22:46:44brixenI think the concept that the specs would show code examples *you might actually use* has been lost
23:09:48evanbrixen: if you're curious, kresten finally open sourced his ruby impl he talked to me about a few years ago
23:09:49evanhttp://github.com/krestenkrab/hotruby
23:10:01evanhe's where I got the idea for packed ivars from
23:10:03brixenoh cool
23:10:23evanthat code seems to implement it, but i haven't sorted through some of the details yet.
23:10:31brixenok
23:12:28evanyou'll have to check it out with git to navigate it
23:12:32evanit sticks with the java way
23:12:38evanand thusly there are a million nested directories
23:12:44brixenfun
23:12:59evanbut checkout CompiledIVar
23:13:12evanCompiledIVarAccessor rather
23:13:20brixeninteresting, IO.foreach(name, sep) in 1.9 calls #to_str on sep for every line read if sep is not a String
23:13:29brixenclones
23:13:39evangenius!
23:23:15evanzoinks
23:23:26evanToyota is recalling all 2010 pruises
23:23:41brixenouch
23:23:59evanas though they didn't have enough problems.
23:24:39evancremes: just fixed your bug
23:24:52evanit was <sheepish>a typo</sheepish>
23:25:04cremesevan: np; i'll test it out after you push
23:25:13evank
23:25:20evanrunning tests now, then i'll push.
23:25:21cremesbet you wish all bugs were that easy :)
23:25:26evanI DO.
23:25:39evanplease provide me with more typo bugs
23:25:47cremesi'll get right on that...
23:26:42brixencremes: creating typos to file bugs on is excluded :)
23:27:02cremesyou guys have all the angles covered!
23:27:07brixenheh
23:27:25cremesnow i really need to run; chat tomorrow!
23:27:47evan:)
23:27:49evansee ya!
23:29:31boyscoutThe beginning of the core benchmarks - ce306b0 - Evan Phoenix
23:29:31boyscoutFix segfault in exiting before JIT actually runs - 558e3b5 - Evan Phoenix
23:29:31boyscoutReformulate find_candidate - 5892f94 - Evan Phoenix
23:29:31boyscoutFix latent typo in Float#== inlining. Fixes #185. - 7fe1be7 - Evan Phoenix
23:31:08mahargany chance the patches in #168 could get applied? I'd like to stop needing to rebase in order to use rubinius ;)
23:31:18evansure
23:31:19evanone sec
23:31:46mahargthanks
23:34:41boyscoutCI: rubinius: 7fe1be7 successful: 3041 files, 11849 examples, 36136 expectations, 0 failures, 0 errors
23:35:49evanmaharg: where is your patch to fix #168?
23:35:52evani only see the patch for the spec
23:36:17evanoh i see it
23:36:38evanyou sort of fixed your spacing, but only in the spec.
23:36:41mahargthe other guy put in a patch on that one. My patch had formatting issues and this guy actually fixed it first. I could repair the formatting on mine if you'd prefer
23:36:47evanhis patch is wrong.
23:36:49evan:)
23:36:52evanno
23:36:57evani've already repaired it
23:36:59evanthe spec is in
23:37:04evani'm going to hand apply your fix
23:37:13mahargk
23:41:55evanI wonder if MRI does all this just so that the new Exception has no backtrace
23:42:04evanand raise can create one.
23:44:14brixenI wish File has_a IO rather than File is_a IO
23:44:28ezmobiushttp://gist.github.com/298733
23:44:30evanthat would be nice
23:44:30evanyeah
23:44:38ezmobiusi keep having issues trying to get rubinius built on snow leopard
23:44:44ezmobiusthat i upgraded from leopard
23:44:49evanezmobius: get a new clone.
23:44:56evanit's too complicated otherwise
23:45:04ezmobiusits mostly melbourne for mri?}do i need to rebuild my mri for snow leopard or something
23:45:05evanbecause things switched from 32bit to 64bit when you upgraded.
23:45:09ezmobiusi did get a new clone
23:45:11brixenezmobius: what is your default MRI?
23:45:15brixenahh that
23:45:16evanoh
23:45:16evanyeah
23:45:19evanyou need to rebuild your MRI
23:45:20ezmobius1.8.6 that i hand built
23:45:23ezmobiusyeah figured
23:45:34ezmobiusok cool ill try that
23:45:57evanmaharg: so, do you have code thats doing
23:46:07evanexc = WhateverException.new(blah)
23:46:12evanraise exc, "exceptions are fun!"
23:46:46mahargwithout being on 2 lines, yeah that's the code I'm running into
23:47:01mahargraise Exc.new(blahblah), "blorp"
23:47:04evanright
23:47:05evanok
23:47:12evanfor future reference
23:47:19evanif you fix yoru #initialize
23:47:21evanand pass the message up
23:47:23evanso you can do
23:47:26evanraise Exc.new(blah)
23:47:31evan(no 2nd arg notice)
23:47:39evanit will be a lot more efficient
23:47:55evanthe 2 arg version has to do the whole clone code you fixed
23:48:00evanthe 1 arg version doesn't
23:48:10mahargmakes sense.
23:48:16evaner. that should be
23:48:22evanraise Exc.new("blorp", blahblah)
23:48:25evanbut you get me.
23:48:31mahargyep
23:49:59evani think this protocol exists so you can do
23:50:04evanrescue => e
23:50:12evan raise e, "more generic message"
23:50:42boyscoutUpdated spec for issue when raising an object instance with a message - aa321d1 - Graham
23:50:42boyscoutException#exception is crazy. Fixes #168. - c40a935 - Evan Phoenix
23:50:43maharghuh. Never thought of that, but it makes sense
23:50:47evanfor those playing at home that want to play with an awesome feature
23:50:52evanyou can do:
23:50:55evanrescue => e
23:51:03evan raise OuterError, "more generic message", e
23:51:05evanin rubinius
23:51:10evanto create chained exceptions
23:51:28evanwhen the instance of OuterError is printed out
23:51:33evane will be printed out too.
23:51:41evanwith their own backtraces
23:55:03boyscoutCI: rubinius: c40a935 successful: 3041 files, 11850 examples, 36139 expectations, 0 failures, 0 errors
23:59:33evanooh
23:59:34evanfun!
23:59:37evannew protocol!
23:59:41wayneeseguinevan: can I get a quick code review from you ?
23:59:41wayneeseguinhttp://github.com/ashebanow/rvm/commit/aa9ac1617e0c03b175a7c36321865b1a445e086b
23:59:50wayneeseguinDoes that look correct-ish for installing rbx?
23:59:52evanso, should the name of the method that fills an exception's backtrace be called
23:59:58evan#fill_locations()