Index

Show enters and exits. Hide enters and exits.

00:28:22evanmuhaha
00:28:40evana method created with a standalone lambda passed to define_method is being inlined by the JIT
00:28:55evanMMM DYNAMIC COMPILATION
00:29:26ezmobiussweet
00:29:36slavais this new?
00:30:01evanspecificly methods from define_method being inlined is
00:30:10evanbecause i'm doing some form detection of the code passed to it
00:30:19evandefine_method :foo { |a| a + 1 }
00:30:23evandef bar
00:30:27evan foo(1)
00:30:28evanend
00:30:41evanit's this subset
00:30:52evanthere is a subset of forms of lambda passed to define_method that are standalone
00:31:09evanthat don't need special invocation as methods
00:31:14evanbecause they don't access the outer scope
00:31:17slavacool
00:31:38evanif they do access outer scope
00:31:43evanthen they're slower to invoke
00:31:44evanand can't be inlined.
00:31:50slavawhy can't they be inlined?
00:31:57slavayou just haven't implemented it yet?
00:31:58evanthey could be
00:32:05Zoxcwhat about returns in them?
00:32:06evanjust haven't taught the JIT that trick yet.
00:32:15slavaah
00:32:17evanZoxc: ah ha. returns in them are like a method return.
00:32:30evanlike a lambda
00:32:36evanit doesn't cause the creating context to return
00:38:23slavawhat are inflated headers?
00:39:10brixenslava: the first word points to an inflated header that is bigger (has more info) when an obj has an inflated header
00:39:29brixenslava: we use it to stash the C-API handle atm
00:39:33slavaah
00:39:38brixenbut it could stash an inflated lock
00:39:43brixena la jvm
00:40:31evanthink of it like variable length headers
01:07:02evanhuh.
01:07:14evanmy little playtime hack has made it so you can pass a block to a method created with define_method
01:07:25evanhow... interesting.
01:07:42brixenhm
01:11:14evani wonder what happens if you yield in a proc connected to define_method that was created in method with a block
01:11:17evanthats a mouthfull.
01:11:34ddubouch, my brain
01:12:46Zoxccan you even yield in "regular" blocks?
01:13:12evanah bugger.
01:13:14evanit yields it.
01:13:17evanpoop!
01:13:37evanthat means that accessing the block counts toward closing over scope
01:14:37evanwhat a strange, strange scope leak.
01:14:46evanoh ruby, i still love you.
01:14:51evanbut you're twisted sometimes.
01:15:21slavaheh
01:15:27slavadoes it work in MRI?
01:15:42ddubmakes idle comparisons between characteristics of ruby and various ex-girlfriends
01:15:47evanhttp://gist.github.com/233490
01:15:51evanthat prints
01:15:52evan:here
01:15:54evansetup block
01:16:46slavaso 'yield' is lexically scoped
01:16:50slavathat makes sense
01:16:57evanyeah, it does
01:17:09evanbut define_method doesn't really respect the lexical scope normally
01:17:12evanfor instance
01:17:25evanself inside the block passed to define method is different when it's called as foo
01:17:34evanit's not B
01:17:36evanit's an instance of B
01:17:43slavathat's because self is dynamically scoped
01:17:55evanin this case, yes
01:18:00evanbut normally it's lexically scoped.
01:18:02ddubgets up the courage to look at the gist
01:18:36slavathe semantics of yield, self, super and a few other things seems really complex
01:18:52ddubdo people use my gist SL service? I've considered announcing it in more places than this channel, but it seems a little feature-thin :)
01:18:58evanslava: they are.
01:19:09evanddub: announce!
01:20:00ddubcan you think of anything else I can do to make it more useful?
01:20:47brixenddub: toast?
01:21:18ddubbrixen: its a right click "Create new Public Gist" on any text
01:21:36brixenddub: sure, but sometimes it would be nice to have toast with that :)
01:21:56evanperhaps some jam on my toast
01:22:00evanwhile you're up.
01:22:15brixenddub: I prefer marmalade
01:22:21brixenmost days
01:22:22ddubmaybe I'll add in authentication to the script, then its probably the minimal featureset
01:22:28brixenbut sometimes jam in nice
01:22:38ddubheh
01:22:42brixencould I have a calendar to configure when I want jam?
01:22:48ddubso cloudforce is also happening in SF next week
01:23:01Zoxclikes how he can debug his JIT with OllyDbg
01:23:01ddubI might crash parties cross-conference
01:23:02brixenmay the cloudforce be with you
01:23:52ddubI told our marketing folk that if I show up, it won't be as an employee but as a mooch
01:24:12slavawhat's OllyDbg?
01:24:59brixenwow, ollydbg has been around for nearly a decade
01:25:06brixenand I'd never heard of it
01:25:19slavaoh, itneresting
01:25:20brixenwishes the same were true of windows
01:25:41ddubthat it had only been around since 2000?
01:25:47brixenheh
01:25:54brixenthat I'd never heard of it
01:25:55ddubI'd probably have a lot more respect for microsoft if they had started with win2k
01:26:00ddubskip windows 1, 2, ME...
01:26:23dduba world without windows
01:26:25ddubwould be very dark
01:26:37brixenI'd have more respect for windows if they sent every customer a refund for the billions stolen
01:26:39dduband possibly improperly ventilated
01:27:00brixener respect for microsoft
01:27:04evanddub: nah, we'd just have a lot of doors
01:27:14evansmall doors, big doors, skinny doors, fat doors
01:27:28brixentrapdoors!
01:27:32evantrapdoors!
01:27:36evanyes!
01:38:08Zoxchm..how do you search a repo on github?
01:45:21slavaZoxc: how's your jit coming along
02:00:20evani really dislike that block_given? is a method.
02:04:39brixenyeah, that doesn't make much sense
02:04:59brixenlike, how would you really implement it?
02:05:08evani'm teaching the compiler to recognize Kernel.block_given?
02:05:29evanand treat it the same as block_given?
02:08:10brixenwhy's that?
02:08:50evanbecause it should be :)
02:08:59evanblock_given? is basically a special form.
02:09:10evanthat reflects on the current scope
02:11:31evanbrixen: so, question.
02:11:41evanthese specs test that block_given? returns false
02:11:46evanbut we're actually returning nil
02:11:56evanbeacuse push_block just pushes nil if there is no block.
02:12:06evanshould I coerce it to be a false?
02:12:09evanany thoughts?
02:12:13evani'd have to do it in bytecode
02:12:15evanwhich sucks.
02:12:20evansince nil and false are so close.
02:12:27evanotherwise, i can invert the spec
02:12:28evanto do
02:12:30evanshould_not be_true
02:12:51evanthoughts
02:12:53evan?
02:45:20rueddub: The correct question to ask is "how much can I pare down the functionality"
02:46:27rueevan: trueish and falseish
02:50:44brixenevan: hum...
02:50:55brixenshould_not be_true kinda sucks
02:52:15rue`should_be falseish` :)
02:52:15brixenevan: what's the issue with having push_block push Qfalse if there is no block?
02:52:34ruebe_falseish rather...
02:52:43rueExtra instruction!
02:58:58Zoxcevan: how does yield and block_given? works for blocks that does or does not take block arguments?
02:59:20brixenhm, yeah, be_untrue maybe? where false or nil would succeed
02:59:36brixenyou.should_not be_untrue(:to_me) :)
04:07:00ddubI totally think conditionals should support coercion via to_bool
06:00:42scooprrue, theres a rubybrigade.fi meeting today, coming?
08:06:54ruescoopr: Seriously? I will be there, where?
08:07:14scooprrue, http://www.facebook.com/event.php?eid=183862063573&index=1
08:07:43ruehttp://rubybrigade.fi sanoo 13.02.2009
08:08:19scooprwanhaa tietoo
08:08:35rueFigures...yeah, I will get my butt over there
08:08:44scooprexcellent
08:11:27scooprI was supposed to ask earlier, kinda forgot =)
08:14:30rueHeh
08:14:40rueGood you caught me now...been asleep at that hour recently
16:54:52evanmorning.
17:03:15brianmario'morning
17:03:34brianmarioyou guys have been killin it man
17:03:54brianmarionext release is gonna be rad
17:04:04evanthanks!
17:04:09evanactually, it being friday the 13th
17:04:15evanwe're going to release 0.13 today!
17:04:48brianmarioNICE
17:06:52brixenyay! freaky friday release!
17:08:49evanhehe
17:09:00evanso, anything not checked in that we should put in the release?
17:09:30brixenwell, rake install is not done, but we should release anyway
17:09:43evanis it working at least?
17:09:50brixennot yet
17:09:51evanfor some definition of working
17:09:58brixennope
17:10:11brixenI can see if I can wrap it up this morning
17:10:32evanok, you have the morning!
17:10:33evango!
17:10:40brixenheh, ok!
17:10:58brixencan I have the morning in hawaii? :)
17:11:44brixenthat'd give me 2 extra hrs
17:12:01evanwe'll see. :)
17:12:08brixenI love google's "what time is it in" search
17:12:11evanso, a browsed through the go compiler briefly
17:12:27evanit's a classic unix program
17:12:30evanno comments
17:12:33brixenheh
17:12:35evanno encaplusation
17:12:55evanC with as few characters as possible
17:12:55brixenthe amount of buzz it's getting seems... disproportional
17:13:10brixenI suppose I should try writing something in it
17:13:47evanso anyway, yeah, the go compiler is not a learning tool.
17:13:48evanat all.
17:14:07brixenbummer
17:46:08evanbrixen: so, here's a thought
17:46:35brixenok
17:46:41evanso, right now
17:46:51evanwe rbc marshal a CompiledMethod
17:46:57evanand to add methods, etc
17:47:00evanwe pull it out of literals
17:47:07evanand pass it to add_defn(..)
17:47:31brixennods
17:47:37evanso, what if instead, we marshaled Code objects
17:47:49evanand things associated with a method, like arg info, etc.
17:47:58evanwere emitted as arguments to add_defn
17:48:03evanso you'd do
17:48:17evanadd_defn code, 0, 0
17:48:20evanfor a method that takes no arguments
17:48:26evanadd_defn would create a CompiledMethod
17:48:32evanfrom the info
17:49:06evanthat would effectively give us the ability to any metadata on a CompiledMethod
17:49:18evanbecause the metadata would actually be in the execution stream
17:49:24brixenhmm
17:49:31brixenseems reasonable
17:49:46brixenit's the same amount of info, but organized differently
17:49:51brixenand more flexible
17:49:52evanadd_defn code, 0, 0, [:local_names, [...], :wycats_magic, true]
17:49:53evanetc.
17:50:09evanright
17:50:15brixensure, extensible with arbitrary metadata
17:50:17evanit's organized more around an immutable Code object
17:50:18brixenmakes sense
17:50:23brixengotcha
17:50:52evana CompiledMethod is very much a runtime effect
17:51:01evanof some code in some context
17:52:32dgtizedI just got a "can't modify frozen string" during a distclean from the latest revision
17:52:42brixenseems like it would give us a nice pivot for constructing a duck-typed interface to creating any execution context then
17:52:45brixenevan: ^^^
17:52:50dgtizedand I did the distclean in response to melbourne missing a symbol
17:53:12evanbrixen: sure
17:53:26brixendgtized: file a ticket
17:53:27dgtizedhttp://gist.github.com/234023
17:54:06dgtizedbut yea I'll file a ticket
17:54:22dgtizedbut I can't file the second ticket about the missing symbol because I can't get that far in the compiling process because of this error
17:54:40evandgtized: the missing symbol is gone after a clean
17:54:45evani've seen it myself.
17:54:50evanno need to fill that.
17:54:51dgtizedk
17:55:06evanalso, feel free to fix the ticket.
17:55:07brixendgtized: run with -t
17:55:16brixenthat gist has no useful info
17:55:30brixenexcept a line no :)
17:55:45brixendgtized: also, what ruby version exactly
17:56:22brixenwhy the eff would $CFLAGS be frozen
17:57:05brixenstupid stupid stupid frozen, taint, and trust
17:57:26brixenohh, should have made that an masgn
17:57:41brixendgtized: ??
17:58:57dgtizedbrixen: http://github.com/evanphx/rubinius/issues/#issue/73
17:59:02dgtizedsorry was creating the issue
17:59:17dgtizedsorry about the format problem, I guess something in the first paste broke my close </pre>
18:00:15brixendgtized: I don't see the ruby version other than 1.8
18:00:21dgtizedI just added that
18:00:33dgtizedit's 1.8.7 patchlevel 174
18:00:35brixenk
18:01:00brixencan you instrument ext_helper and try to track down how $CFLAGS gets frozen?
18:01:25brixenis it acquiring the from a string that is being appended to it?
18:01:29dgtizedinstrument? -- just add some prints you mean?
18:01:34brixenyeah
18:01:45dgtizedsure give me a minute
18:02:02brixenif so, we can just dup the strings being appended
18:02:15brixenbut I really want to know how it's getting frozen first
18:02:48evanyeah, thats weird.
18:03:09dgtizedENV["HOME"].frozen? => true in irb on my system?
18:03:20evanhuh.
18:03:29evanis ENV freezing values?
18:03:50evanlet me check.
18:03:56evanyes
18:03:56evanit is.
18:04:28dgtizedthat kind of makes sense, I mean as stupid as frozen is, that does seem like a logical use for it
18:04:44brixenwhy is that getting to $CFLAGS
18:04:45evantrue, it is.
18:04:45brixen?
18:05:09brixenare you setting CFLAGS?
18:05:29dgtizedyea I have CFLAGS set
18:05:36evanaah
18:05:36evanto what?
18:05:37brixenbecause I don't see that in your ticket
18:05:43brixenugh
18:05:54brixenanyway, dup the ENV valuse
18:05:55dgtizedCFLAGS=-I/home/clgc/usr/include
18:06:05dgtizedk, I'll try duping them all and see if that fixes it
18:06:11brixenit will ;)
18:06:14evanthem all?
18:06:18evanshouldn't it be one thing?
18:06:33brixendup ever ENV["bla"] in ext_helper
18:06:52brixenit does $CFLAGS = ENV[] || something
18:07:02evanah ha.
18:07:02brixenfor various env vars
18:07:10evanput a wrapper around it instead
18:07:13evanplease.
18:07:23dgtizedok
18:07:25brixenwrapper around what?
18:07:26evanrather than having to put dup i zillion places.
18:07:32brixenerg
18:07:44evanunless you're not duping everytime you pull something out of ENV
18:07:45brixendef env(name) ENV[name].dup end
18:07:50evanright.
18:07:56dgtizedenv_or_default function?
18:08:08dgtizeddef env_or_default(name, default)
18:08:09brixendgtized: sure
18:11:15evanbrixen: so, here's my other rub.
18:11:27evanwhich I think I have solved
18:11:44evanwe specialize the code to interpret
18:11:48evanbased on the type
18:11:56evanso that, say, in a String method
18:12:01evan@data can be accessed very quickly.
18:12:19evanusing push_my_field
18:12:49evannormally, a method is hooked up on a class/type and can't move
18:12:53evanso thats a safe thing to do
18:13:09brixenright
18:13:17evanbut i also do it inside blocks.
18:13:23evanso that things like
18:13:29evan100.times { @data.at(1) }
18:13:33evanor whatever are fast too.
18:13:51evanthe issue is the escape of the code in the block
18:13:56brixenyeah
18:14:03evanprimarily, the usage of *_eval and a block
18:14:12evanwhere the receiver is reapplied
18:14:39evani think I can get around this by, when *_eval is used, duping the Code object
18:14:46evanso that the dup looses any specialized effects
18:14:54evanthe downside is that *_eval are a bit slower
18:15:01evanbecause they have to be recomputed everytime they're used
18:15:09brixenhmm
18:15:14evanan optimization here would be a query on a Code object
18:15:17evan#specialized?
18:15:26evanand you only dup when it's been specialized
18:15:31brixensure
18:15:31evanwhich is actually the minority case.
18:15:36evanbut could happen a lot more
18:15:40evanwhen we add auto-packed ivars.
18:15:52brixenright
18:16:30evanhm
18:16:42evani'm getting an idea.
18:16:43brixenbut specialized? attr would let us spy on how much it's happening
18:16:46boyscoutdup frozen ENV values using env_or_default helper - 9032cd2 - Charles Comstock
18:17:10evanperhaps what I do is add guards to the specalized instructions
18:17:17evanthey should be guarded really anyway
18:17:36evanand if the guards fail at runtime, they run the slow/safe version
18:17:42evanthe guard should be a type id comparison
18:17:45evanjust like the JIT does.
18:18:12evanthat should allow all Code objects to be used in all contexts
18:18:19brixendgtized: what's with all the ()?
18:18:20evanand in some contexts, they perform better.
18:18:37boyscoutCI: 9032cd2 success. 3002 files, 11423 examples, 35491 expectations, 0 failures, 0 errors
18:18:47brixenevan: that seems much better
18:18:57brixenguard + slow / uncommon path
18:19:08evanthey really should be guarded anyway
18:19:15evanbecause otherwise they'll crash things.
18:19:20evanwhich can happen.
18:19:28brixenyeah, surprised we haven't hit that yet
18:19:33brixengiven the block example
18:19:37evanwe haven't because of a work-around I put in
18:19:40brixenI guess we don't use blocks much in kernel
18:19:43evanthat I want to remove.
18:19:47brixenah ok
18:19:47evanbasically
18:19:50evanwhen you create a block
18:19:52dgtizedbrixen: sorry, I keep forgetting you guys are so strong on that style
18:20:03evanthe code peeks into the caller's VMMethod
18:20:08brixendgtized: well, they're gross :P
18:20:19evanand graps a specialized VMMethod
18:20:26evanbut it's wierd
18:20:28evanand takes extra memory.
18:20:35brixenheh, that is weird
18:20:41evandgtized: and that should be
18:20:43evandefault=""
18:20:55dgtizedok, I'll fix that then
18:21:05evanso you don't have to keep putting "" at the call site
18:21:11brixendef env(name, default="") ... end
18:21:19evanyeah, thats nicer.
18:21:44brixen$CFLAGS = env "CFLAGS", "--my-yummy-awesome"
18:21:51brixensee, how pretty? :)
18:22:07evanheh
18:25:56boyscoutstyle fix / rename env_or_default to env - e836010 - Charles Comstock
18:27:43evanMUCH better.
18:27:44evanthanks!
18:27:44boyscoutCI: e836010 success. 3002 files, 11423 examples, 35491 expectations, 0 failures, 0 errors
18:30:41dgtizednp
19:49:00evansweet
19:49:12evanfast type equivence of all builtin types
19:49:29evanusing a static array
20:17:01brixenI HATE you rake
20:17:18brixenreason #259 why rake sucks: the dependency graph is GLOBAL
20:17:23brixenyou can't compose shit
20:17:27brixennothing has context
20:17:47brixencircularity sucks because circularity
20:18:53Zoxcwhat's the other 258 reasons?
20:20:04brixendon't get me started :P
20:30:29evanwoop
20:30:47evankind_of<> and therefore try_as<> and as<> are now O(1)
20:31:17evanprobably won't make a difference because most of the specializations were O(1) already.
20:36:05brixenevery little bit helps
20:36:20brixen10 is 1 + 1 ... :)
20:37:14evanheh
20:40:58brixenfinally got kernel.rake working again
20:41:42brixensans any arbitrary tasks that do things that should be done as file or directory tasks
20:41:54brixenevan: I think we should just release 0.13
20:42:08evanok
20:42:08brixenI still have to sort out the mess that is rbconfig.rb
20:42:11evanis rake install busted?
20:42:14brixenyes
20:42:27brixenor we can release later today
20:42:34brixenis anybody waiting on it?
20:42:44evannot that I know of.
20:42:44brixenexpects to see hands raised
20:42:50brixenc'mon people!
20:42:52brixenheh
20:42:52Zoxcdoes it build on windows?
20:42:58brixenZoxc: not yet
20:43:00brixenbut it will
20:43:13Zoxctakes hand down
20:43:16brixenheh
20:43:19brixenmeanie
20:43:24dbussinkhelps out brixen by raising his hand so at least someone does ;)
20:43:41brixenawards dbussink medal for the good sport of the day
20:43:48evanhehe
20:43:54evanwe don't have to release today
20:44:00brixenyes, we do!
20:44:08evanreleasing with rake install busted seems not good.
20:44:15evanand it's only a week until rubyconf.
20:44:15brixenthere will never be another chance like this in the history of Rubinius
20:44:24evan*eyeroll*
20:44:24brixenum, rake install was busted for 0.12
20:44:30evanok
20:44:32brixenand pretty much every release we've ever dane
20:44:35evanwell, lets go ahead and do it then.
20:44:35brixendone
20:45:04brixenRelease Notes: Do NOT use rake install. Have fun!
20:45:05brixen:)
20:45:17evanheh
20:45:37Zoxcturns on DoS vs. http://rubini.us/download.html
20:45:52brixenwe should write up a gist of the main points since 0.12
20:45:55brixenthere's a ton
20:46:17evanok, why don't you get started on that.
20:46:30evanyou've done a large part of the changes
20:46:33brixenI suppose just a git log
20:46:46brixengit log with the long format
20:46:46evani can certainly do that.
20:46:50evanwerr
20:46:54evangit shortlog with a since
20:46:57evangives you who's done what
20:47:08brixensure
20:47:17brixenI think the msg is the most important
20:47:22brixen* Fixed boo
20:47:26brixen* Added foo
20:47:48brixenisn't there a changelog format output?
20:48:58evani believe so.
20:49:55evanbrianmario: poke
20:50:01evanwhere is that llvm prebuilt again?
20:50:10evanI wanna have it be available for 0.13
20:50:30brixenthere's http://snipplr.com/view.php?codeview&id=6261
20:51:22evanwhat should we do with the change log?
20:54:55brixenhttp://gist.github.com/234149
20:55:05brixenI was just going to link to that in the tweet about 0.13
20:55:36evank
20:55:58brixenI can push this kernel.rake stuff if you want
20:56:11brixentake me a sec to check a clean build again
20:56:25evanyou used the 0.12 tag to calcluate the since?
20:57:12brixenyes
20:57:18brixenthe hash of the tagged commit
20:57:27brixenhttp://github.com/evanphx/rubinius/tree/release-0.12
20:58:21evank
20:58:23evanalright
20:58:27evani'm going to grab some lunch
20:58:30brixenok
20:58:32evanand we'll release first thing when I get back
20:58:33brixenme too
20:58:35brixenok
21:05:44brixendid I just get a full CI run in 83 sec from a clean build?!
21:05:48brixengetting faster...
21:10:30boyscoutRemoved obsolete kernel rake task. - dd617bc - Brian Ford
21:10:30boyscoutFixed creating SyntaxError in melbourne on both rbx and mri. - 21cfc13 - Brian Ford
21:10:30boyscoutAdded sha1 hash of all parser+compiler files and cleaned up kernel.rake. - cde6705 - Brian Ford
21:12:23boyscoutCI: cde6705 success. 3002 files, 11423 examples, 35491 expectations, 0 failures, 0 errors
21:14:24Defilerrbx is awesome now
21:14:59DefilerI've got a sorting benchmark extracted from our app
21:16:29brixenwe prefer the phrase "rbx is the awesome now"
21:16:35brixenbut might take a bit to catch on
21:16:36brixen:D
21:16:44Defilerrunning it 5000 times, rbx takes 0.023, jruby trunk 0.07 (0.013 after lots of warmup), ruby 1.9 0.023
21:16:58brixenneat
21:17:31Defilerhttp://gist.github.com/234170
21:17:33Defilerif you want to play with it
21:17:45brixensweet
21:17:50brixenI know evan will :)
21:19:35DefilerOh, actually, rbx is faster than I was saying
21:19:41DefilerBecause I forgot -XJ
21:19:52brixenheh, who needs that
21:20:06Defilerruby 1.8.7, 0.236 after warmup. rbx, 0.059 after warmup
21:20:40Defilerjruby is extremely impressively fast at the terrible 'append' algorithm though
21:20:43brixenyou should bump up the work till it's above 1 sec for the fastest
21:21:21DefilerYeah, this was a 'show person interviewing how wrong they are about how they propose to do this' snippet. Heh
21:21:31DefilerRather than an impl comparison, but I'll strip out the slow one and see
21:23:58Defilerhttp://gist.github.com/234176
21:24:01brixenfoods
21:24:26brixeninteresting
21:24:34brixenI bet it's core class perf
21:24:41brixenprobably pure java array or something?
21:25:29brixenhm, actually rbx warmup times are a lot, but not the run
21:25:38brixennocopy is the same as jruby
21:25:45brixenfaster even
21:26:55DefilerYeah
21:27:16Defilerrbx was definitely slower at the crappy algo that I disabled, which also spends time creating a new array and copying crap into it
21:28:06brixenahh
21:28:16DefilerIt's interesting that the two methods take almost the same amount of time on jruby
21:28:29Defilerwhereas you can see the overhead of duping two arrays every time in all the other implementations
21:28:32brixenyeah it is
21:29:04brixenwell, merge is faster on 1.8.7
21:29:10brixenhow's that work
21:31:18DefilerMy guess would be that 1.8 suffers more from the additional math in nocopy?
21:31:28Defilerwhereas incrementing a fixnum is pretty much free in jruby or rbx
21:32:18DefilerJust a WAG though, because it's pretty hard to see how the nocopy version could be slower
21:40:23evanDefiler: -XJ does nothing now
21:40:26evanit's on by default
21:40:31evanif you wanna turn the JIT off
21:40:33evanuse -Xint
21:42:00evanthis sort of illustrates how opaque MRI tuning is
21:42:15evanwith rbx, profiling will show you time in Array ops
21:42:19evanin MRI, you're on your own.
21:43:12DefilerYeah, I would have to dive deep to figure out why nocopy is slower (or even equal) in MRI
21:43:52evanDefiler: i'd be curious to see what times you get with -Xint
21:44:23DefilerI'd tell you, but I just did a distclean and then I realized I'm in this situation..
21:44:32DefilerERROR. No llvm-x86_64-apple-darwin10.2.0.tar.bz2 available on server. (just updated to 10.6.2)
21:46:05Defiler(but working around that)
21:47:09brixenhttp://sharpercoding.com/projects/rubinius/llvm-x86_64-apple-darwin10.2.0.tar.bz2
21:47:19brixenevan: ^^ that's the link from brianmario
21:47:25brixenDefiler: you can try that file
21:47:28DefilerIs it actually different, or is it just renamed from 10.0.0?
21:47:33evandanku
21:47:38evandunno.
21:47:44evanhe built it on 10.6.2
21:47:44dbussinkevan: what's with the danku? :P
21:47:46brixenDefiler: built on 10.6.2
21:47:55brixendanke
21:47:57DefilerFor now, I just copied the 10.0.0 to the file name it was looking for. We'll see. Heh
21:48:24dbussinkbrixen: danke is more german, danku more dutch :)
21:48:36evani like to mix it up.
21:48:37brixenI guess I'm more german :)
21:48:43brixeni've never studied dutch
21:48:48brixenI have studied german
21:49:31evanDefiler: :) thats probably fine too
21:49:46evanthere are no ABI changes between 10.0.0 and 10.2.0
21:50:07dbussinkbrixen: german is for wussies ;)
21:50:12DefilerI don't understand why 10.6.1 didn't bump the darwin version but 10.6.2 did
21:50:18DefilerWhat happened to 10.1.0, for example
21:51:06DefilerOh, looks like enough kernel changes to justify it, I guess
21:51:13evanthey can do it whenever they want
21:51:17evanright
21:51:31evanit's the 10th darwin version
21:51:33evanis all.
21:54:46evanman, Boise State has won the last 54 games at home.
21:54:53evan(college football)
22:01:10evanok, i put the 10.6.2 prebuilt in place.
22:09:09evanI wish that
22:09:17evanTime#strftime was valid syntax
22:09:20evanfor getting a method object.
22:09:21evanthat would rock.
22:09:48DefilerThat would be awesome
22:10:14Defilerand that would finally give an excuse to change/deprecate what :: does
22:10:37evanyeah
22:11:03DefilerTime@strftime would probably be unambiguous, but is fugly
22:11:07evanyeah
22:11:08evani was just thinking
22:11:09evanmaybe
22:11:12evanTime::#strftime
22:11:37DefilerThat suggests Time::.now for class methods though, which is kinda jacked
22:11:49evani kinda like it.
22:11:50evan:)
22:11:53evanTime.#strftime
22:11:55evanTime..new
22:12:04evanoh nopes, we've got a .. operator.
22:12:04brixeneww
22:12:07DefilerYeah
22:12:10evanheh
22:12:12Defiler1..to_s would be hard too :)
22:12:21evanhehe
22:12:26evanit's like a story!
22:12:33evanwhat are you doing to 1?
22:12:40evanyou're pausing for suspense
22:12:43DefilerDon't leave us hanging!
22:12:52evan1...to_s!
22:13:30brixen1.::.to_s
22:13:45brixenthere lies the path to perl 6
22:14:04brixenor scala I suppose
22:14:36DefilerHey, :.: isn't taken
22:14:48DefilerThe Galaga operator
22:16:09evanhah
22:16:24evani do like perl 6's <== and ==> operator
22:16:50evanit takes the return value on one side and puts it into the argument on the other side
22:17:20evansince we've got methods on objects, we'd need that less
22:17:21evanand
22:17:24evanary.sort.uniq
22:17:30evanis a lot easier to read
22:21:06evanoh man.
22:21:17evanwe've been doing no interpreter specialization.
22:21:55evanoh wait, here it is.
22:25:59Defilerevan: http://gist.github.com/234222
22:26:06Defiler-Xint makes a big difference. Heh
22:26:37evanI suspected it would
22:26:40evanthats good news though
22:26:51evanthe bigger the difference
22:26:53evanthe better.
22:27:05DefilerI just updated it with jruby results in interpreter mode
22:28:27evanthats a confusing option
22:28:34evanI guess the -C means "minus compiler"
22:28:38DefilerYeah
22:28:59DefilerYou get + and - options for O and C
22:29:02Defiler(objectspace and compiler)
22:29:08evanword.
22:29:15evanyou using jruby much?
22:29:34DefilerNo, because I rely heavily on something that uses a native extension at the moment
22:29:39Defiler(typhoeus)
22:29:52Defilerbut I'm going to fix it up to use ffi instead and then I suspect I will be using it in production
22:30:19evanDefiler: you're going to be at rubyconf right?
22:30:26DefilerSadly no; I didn't score a ticket
22:30:32evanoh man.
22:30:35DefilerYeah :(
22:30:36evannow i'm depressed.
22:30:38brixen:(
22:30:51DefilerI wonder how hard it would be to get one
22:32:06DefilerWe're doing things like KNN in our Rails app (ha ha), so raw Ruby performance matters more than usual
22:32:15evanKNN?
22:32:22Defilerk-nearest neighbors
22:32:46evani guess i don't know what that is
22:32:50Defilerhttp://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm
22:33:10DefilerGiven a document, it lets you find the ones that are most similar, for example
22:34:22evanah yes
22:34:36evanso you can have Kirk from Gilmore Girls tell people how to make drinks
22:34:40DefilerWord.
22:35:37DefilerThe process is basically "make a ton of parallel HTTP requests" => "merge sort" => calculate kNN fun to figure out which ones to keep
22:35:43DefilerWhich is an interesting optimization task
22:37:14evaninteresting.
22:37:54Defilerrabbitmq has really changed the difficulty level of doing some large-scale shit
22:37:59DefilerVery impressive piece of software
22:38:36evani've heard that!
22:38:38evani wanna play with it.
22:38:44evani recommended it to a friend
22:38:52DefilerIf you do, I recommend the 'bunny' library. It is dead easy
22:38:57evanbecause i guess there is a comet plugin thing
22:39:07evanso you can talk javascript straight to rabbitmq
22:39:13DefilerSick
22:39:35evanezmobius got his amqp project running under rbx
22:39:40DefilerI just love it.. we have this convention where you put the names of the fields you are updating in the message key
22:39:46evani wanna right so amqp stuff.
22:39:56Defilere.g. 'user.email'
22:40:08evancool
22:40:08DefilerSo systems that care about particular parts of a thing can just subscribe to those
22:40:15evanaah
22:40:17evannice!
22:40:28DefilerYeah, things just snap into place like LEGOs
22:40:33evani wish rabbitmq and such had been around 4 years ago
22:40:39DefilerYes. Oh yes.
22:40:40evanwe'd probably have used it instead of dbus
22:40:46evanin a product
22:40:50evanwhich failed.
22:40:51DefilerIt's painful to think back on things I did as daemons that would have been 10x easier with rabbit
22:40:55evannot because of dbus
22:40:58evanbut it didn't help.
22:41:18DefilerOh, fun. I just ran that sorting benchmark under zsh's 'time' built-in
22:41:26evani made up these adhoc comm mechanisms for talking soap and such between machines
22:41:29evanand dbus internally.
22:41:33Defilerand not only does rbx beat 1.8.7 with a stick, the total run-time, including startup, is way shorter
22:41:41evannice!
22:41:43Defiler5.6 total seconds vs. 9.6
22:42:00Zoxcwhat's rbx? :D
22:42:09Defilerrubinius binary
22:42:18Defiler(and that is true even if it has to build and save the .rbc)
22:42:23boyscoutRemove -dev from version number - 6ada49f - Evan Phoenix
22:44:00evanDefiler: noice!
22:44:13boyscoutCI: 6ada49f success. 3002 files, 11423 examples, 35491 expectations, 0 failures, 0 errors
22:44:23DefilerYou have been running with this ball for 3 years now non-stop. Bad ass, sir.
22:44:30rueWhich sorting?
22:44:44Defilerhttp://gist.github.com/234170
22:46:25boyscoutUpdate download page with 0.13 - ca5617a - Evan Phoenix (gh-pages)
22:46:28rueAha
22:46:43brixenwoot!
22:47:00brixenlistens for a little birdy...
22:47:04brixenchirp chirp
22:47:18boyscoutAdd rake tasks for doing releases - 196dc19 - Evan Phoenix
22:47:20evani'll tweet now
22:47:21Zoxctries to build on Windows
22:47:42DefilerI can tell you how that's going to go :)
22:48:06Defilerbut don't let that stop you; has to happen someday
22:49:07boyscoutCI: 196dc19 success. 3002 files, 11423 examples, 35491 expectations, 0 failures, 0 errors
22:51:23boyscoutUpdate release date - 1d6a59c - Evan Phoenix (gh-pages)
22:54:33evanoh oops!
22:54:43evanI should have included the link to the changelog gist
22:55:10evanwe should probably write up a brief summary
22:55:16evanin addition to the changelog
22:55:23evani'll go through mine and summarize them now.
22:57:25brixensuppose we should
22:59:06brixenI wonder if I can just put the whole commit msg in that changelog
22:59:15brixenI try to explain stuff in the commits
23:00:16DefilerYes. Yes you do. :)
23:00:48brixenheh
23:01:00brixenDefiler: now what'dya mean by that...
23:01:02evanmine are typically short
23:01:06evani'm going to summarize the work
23:01:32Defilerbrixen: I mean that you have really informative commit messages that I make sure to read carefully.
23:01:41DefilerThat or you try to have them and fail. Take it whichever way you prefer
23:02:28brixenheh
23:02:37brixenDefiler: just kidding ya
23:02:43Defiler:)
23:03:25brixenI was actually going to embed a "If you send me a tweet with this message, I'll give you a $1" to see if anyone was paying attention
23:03:46brixenwell, first person
23:03:52brixenas recorded by twitter
23:05:13brianmariocongrats on the release guys, great work on this one
23:05:25brixenbrianmario: thank you!
23:12:38evanwow
23:12:41evanwe DID to a lot in 0.13
23:12:42evangeez.
23:12:53brixenyeah
23:13:06brixenhence my reluctance to try to summarize it :P
23:13:23brixenI'm trying to though
23:13:39evanyou don't have to
23:13:41evani wanted to mine
23:13:46evanyou write better commit message than I do.
23:13:56brixenheh, dunno about that
23:14:07brixenbut I think it is valuable docs for you to summarize your stuff
23:14:17brixenI can always explain mine, and so could you ;)
23:15:10evanhm, so where should I put this...
23:15:14evanon the website maybe?
23:15:18brixenyeah
23:15:57brixenI'll go ahead and summarize this stuff too
23:16:05brixenlike the build system changes
23:16:19brixenwhat is melbourne/c-ng in simple terms
23:20:06evanok
23:20:10evani've got my summarized
23:20:15evanand i've put the changelog you created into a page
23:20:21brixenk
23:20:22evani'll add a link and push
23:20:28brixencool
23:25:33boyscoutAdd release summary page - facee80 - Evan Phoenix (gh-pages)
23:29:38contextwether i use llvm or not i keep getting this error when i run rake: library not found for class Digest::SHA1 -- digest/sha1
23:32:29evancontext: please open a ticket with all the info
23:34:18brixencontext: what platform, ruby version?
23:35:04contextbrixen: SL, 1.9.1
23:35:09contexttrying with 1.8.7 now
23:35:34brixencontext: ok, let me know how it goes
23:35:44brixen1.9.1 is not officially supported yet
23:36:11brixencontext: can you figure out if 'require "digest/sha1"' is needed or something?
23:36:35contextwell yeah thats required in 1.8 as well
23:36:43contexteyah gimme a few minutes
23:36:57brixenum, no it's not otherwise no one would be able to build
23:37:08brixenassuming it's in kernel.rake
23:37:37brixenit does 'require "digest"'
23:38:04contextVM Assertion: set RBX_RUNTIME to runtime (or equiv)
23:38:05context2 rbx 0x00000001000457f5 rubinius::VMException::VMException(char const*, bool) + 101
23:38:08context<-- not my day
23:38:39brixenhow are you running this?
23:39:08contextheh. ./configure --prefix ./_INSTALL ; rake
23:39:28brixendon't use --prefix
23:39:32contextkk
23:39:38brixenit's broken
23:39:43brixenyou don't need it either
23:39:48brixenjust run rbx in the build dir
23:40:37evandamn
23:40:38brixenthank you unix, the "configure; make; make install" mantra is broken and unnecessary
23:40:41evanwe should have just disabled prefix.
23:40:54evanpeople are going to stumble over that.
23:41:13contextheh
23:41:17brixenyou could still disable it and re-release
23:41:25contextgonna try without llvm then llvm
23:41:25evanyeah
23:41:28evancould.
23:41:36evancontext: on SL
23:41:39evanusing LLVM is free
23:41:42evanand you should use it.
23:41:49evan./configure --enable-llv
23:41:51evan./configure --enable-llvm
23:41:57evanit will download a prebuilt LLVM for you to use
23:43:01contextyeah did that already
23:43:07contextkk, ill stop and try with llvm
23:43:51contextwell screw it ill let it go
23:43:54contextid rather use llvm
23:43:57contextbut ill let this run
23:44:01evanwhy?
23:44:05evanjust ^C
23:44:09evanand do it again.
23:44:47contextheh kk
23:46:29contextkk compiling we go
23:46:35boyscoutAdd gotchas section - 5f2ecde - Evan Phoenix (gh-pages)
23:48:12evanok, i think thats fine.
23:48:19evanit's now documented that --prefix is broken.
23:48:23evanwe'll fix it for next week anyway
23:49:09boyscoutA few more 0.13 summaries. - 21d1afc - Brian Ford (gh-pages)
23:49:28contextrubinius 0.13.0-dev (1.8.7 cde67054 2009-11-06) [x86_64-apple-darwin10.2.0]
23:49:34contextappears to be going fine with 1.8.7
23:50:26brixencontext: did you co the 0.13 tag or just clone rbx?
23:50:33contextthis is master
23:50:37brixenok
23:50:53contextbrixen: i like to cut myself
23:51:00brixensure :)
23:51:05brixenwell, we keep master sane
23:51:09evanack!
23:51:11brixenand boyscout backs us up
23:51:14evandid the -dev leak out?
23:51:16brixenno
23:51:26evanok, he's on master
23:51:27evanfew.
23:51:29contextyey! iconv errors
23:51:43evans/few/good/
23:52:11contexthttp://pastie.org/698113
23:52:34contextthat just the tests?
23:52:38evanhuh.
23:52:40evanyeah, thats the tests
23:52:50evani didn't think we were running them by default right now.
23:53:36evancontext: mm. i'll bet you don't have macports installed
23:53:41evanand thusly probably don't have libiconv
23:58:49contextevan: nope
23:58:57contextive been using homebrew
23:59:02contextbut im prolly gonna go back to macports
23:59:49contextkk. dont use rbx with ruby1.9 CHECK!