Index

Show enters and exits. Hide enters and exits.

00:01:33VVSiz_ enters the room.
00:03:50edwardam leaves the room.
00:03:50antares leaves the room.
00:03:50gramos leaves the room.
00:03:50joachimm_ leaves the room.
00:03:50wycats leaves the room.
00:03:50rubuildius_ppc leaves the room.
00:03:50rudebwoy leaves the room.
00:03:50VVSiz leaves the room.
00:03:50smparkes leaves the room.
00:03:50mass leaves the room.
00:03:50Illocution leaves the room.
00:03:50jp_tix leaves the room.
00:03:50ko1_away leaves the room.
00:05:12jp_tix enters the room.
00:05:22dgtizeddbussink: you still about?
00:05:29dgtizedoh you left, shoot
00:05:39edwardam enters the room.
00:05:39gramos enters the room.
00:05:39antares enters the room.
00:05:39joachimm_ enters the room.
00:05:39wycats enters the room.
00:05:39rubuildius_ppc enters the room.
00:05:39rudebwoy enters the room.
00:05:39smparkes enters the room.
00:05:39mass enters the room.
00:05:39Illocution enters the room.
00:05:39ko1_away enters the room.
00:06:17dgtizedevan: I have two big patches to fix compiler warnings but I can't run the test suite because of the VM** bug, should I delay commiting these changes till then or just try and see if it works?
00:06:22zenspiderok. I think we're 100%. tho I have some residual things to clean up in the compiler to be complete.
00:06:35evandgtized: yes
00:06:37evandelay
00:06:43evansee if you can fix the VM** thing
00:07:24zenspiderone last boom... looks like Defiler's "No current exception" bomb
00:07:33dgtizedI don't get what is going wrong for the VM** problem at all, I mean I guess most places use the G() macro to use state but other then that it seems no different from anything else
00:07:34evancrap.
00:07:58evanzenspider: thats not going to be easy to fix
00:08:24ezmobius leaves the room.
00:09:25ezmobius enters the room.
00:10:41zenspiderevan: that's ok... I'll make defiler do it. ;)
00:12:04eventualbuddha leaves the room.
00:13:22rudebwoy leaves the room.
00:13:24joachimm_ leaves the room.
00:13:53joachimm enters the room.
00:15:25rudebwoy enters the room.
00:16:35imajes leaves the room.
00:18:55foysavas leaves the room.
00:19:36foysavas enters the room.
00:22:10shame leaves the room.
00:22:26cezarsa leaves the room.
00:28:28edwardam_ enters the room.
00:30:14edwardam_ leaves the room.
00:30:14rudebwoy leaves the room.
00:30:14mass leaves the room.
00:30:14rubuildius_ppc leaves the room.
00:30:14gramos leaves the room.
00:30:14smparkes leaves the room.
00:30:14Illocution leaves the room.
00:30:14ko1_away leaves the room.
00:30:14wycats leaves the room.
00:30:14antares leaves the room.
00:30:14edwardam leaves the room.
00:31:39boyscout2 commits by William Morgan
00:31:40boyscout * fix spectralnorm.rb so that it works on rubinius; ba0d4df
00:31:41boyscout * whitespace somehow mangled in the format-patch->am route; e0401af
00:32:15wmoxam leaves the room.
00:34:59zenspiderbrain. melting.
00:35:19edwardam_ enters the room.
00:35:19rudebwoy enters the room.
00:35:19edwardam enters the room.
00:35:19gramos enters the room.
00:35:19antares enters the room.
00:35:19wycats enters the room.
00:35:19rubuildius_ppc enters the room.
00:35:19smparkes enters the room.
00:35:19mass enters the room.
00:35:19ko1_away enters the room.
00:36:42anteaya enters the room.
00:39:18boyscout1 commit by Evan Phoenix
00:39:19boyscout * Switch away from submodules to rsync copies; a9255bf
00:39:27wycats leaves the room.
00:40:14wycats enters the room.
00:40:27ezmobius_ leaves the room.
00:40:35evanwtf.
00:40:54Illocution enters the room.
00:41:04zenspiderfatal: Untracked working tree file 'mspec/LICENSE' would be removed by merge.
00:41:12zenspidershould I just nuke spec/frozen and mspec?
00:41:20evanyeah
00:41:27evani'm removing them as submodules right now.
00:41:32evaneverything went ok initially
00:41:38evani'm getting an error in another clone
00:41:39evanstandby
00:42:59evanok.
00:43:11evanrm -rf mspec spec/frozen; git merge origin
00:43:22evanif you get any errors doing a git:pull
00:44:12evansorry for the guff.
00:44:12zenspidertoo late. :P
00:44:12zenspiderI didn't do the git merge part
00:44:13zenspiderjust the rm and a repull
00:44:31evanand your top commit is a9255bf14?
00:44:53zenspidersomething like that
00:45:01evank
00:45:12evanwell, things should be smoother now.
00:45:13zenspiderah crap. I'm in master
00:45:16evanno more submodules.
00:45:16zenspiderfuck
00:45:21evanack.
00:45:29evani was afraid of that.
00:45:39edwardam leaves the room.
00:45:43michaellatta_ enters the room.
00:47:15enebo enters the room.
00:47:44rubuildius_ppc leaves the room.
00:49:04zenspidergod damnit...
00:49:08enebo leaves the room.
00:49:10zenspiderstupid git
00:49:13evanis it blown up again?
00:49:35zenspiderI'm back on my branch... the top stash is my deletions
00:49:44zenspiderapparently I have a lot of old stashes
00:49:51evanah
00:49:52evanack.
00:49:55zenspiderand I can't get it to apply the ones with my changes for this commit
00:50:01zenspidergit stash apply --index 1
00:50:04evandid you comimt hem or just stash them?
00:50:05zenspiderdoesn't work
00:50:09evanoh
00:50:14zenspiderI committed
00:50:21evanthey're not stashed then.
00:50:30evanif you committed them.
00:50:44zenspiderhrm.
00:50:53zenspiderok. I'll just nuke all of these then
00:51:01evanif you want to check
00:51:03evanyou can do
00:51:15evangit diff stash@{1}
00:51:18evangit diff stash@{2}
00:51:19evanetc.
00:51:27evanyou can see whats in them.
00:51:53zenspiderdiff? yeah. that makes total sense... *sigh*
00:52:11evanor show
00:52:14evangit show stash@{1}
00:55:46mernen enters the room.
00:58:57zenspidergd?
00:59:01zenspiderwhere is gd?
00:59:03boyscout4 commits by Ryan Davis
00:59:04boyscout * Patched up complier to call __ versions of methods for defined; 11ae430
00:59:05boyscout * Updated miniunit for latest rails atrocities; 79735d7
00:59:06boyscout * Moved bigdecimal/util.rb from stdlib for AWDWR tests; 1c5e161
00:59:07boyscout * I cheated... rescue false on YAML.load; 19db304
01:00:02benstiglitz leaves the room.
01:01:11evanno clue
01:01:11michaellatta leaves the room.
01:01:45lopexevan: last question, aren't rubinius primitives considered somewhat intrinsics ?
01:01:49evanI added a fixup system to the Rakefile as well
01:01:59evanso that future things like this can be handled better.
01:02:21evanthe Rakefile calls back 'rake git:post_update' after the new code has been brought in
01:02:28evanso the updated Rakefile can perform whatever fixups are needed
01:02:56evanlopex: not sure what ya mean by intrinsics
01:03:14lopexevan: just like memcpy, memset in gcc
01:03:28evanhm. no then.
01:03:36evanthey perform primitive operations
01:04:09lopexan they're direct path to the vm api ?
01:04:21lopexer, vm runtime
01:04:32evanstill unclear what you're saking
01:04:34evanasking
01:05:14lopexevan: just thinking about propagation of internall calls into vm
01:05:41lopexevan: but's just newbie question here
01:05:50Fullmoon enters the room.
01:06:23antares leaves the room.
01:06:31crafterm enters the room.
01:08:08evanah
01:08:08evanok
01:08:11evani think i see what you're asking
01:08:14evanthey do both
01:08:17evanso
01:08:24evanthere are some like fixnum_add, that just add 2 numbers together.
01:08:46evanbut object_send is also a primitive
01:08:55evanthat manipulates the internal structure of the VM
01:09:01evanto call the specified method.
01:09:06lopexah
01:09:15lopexer, mhm, I meant
01:11:29lopexevan: sorry me for comparing again to hotspot, but I'd like to get familatiar with rubinius challenges
01:11:41evanah
01:11:42evanno problem.
01:11:48evani like talking about that kind of thing
01:11:56evanjust trying to be sure i'm answering the right question.
01:12:16lopexthere's number of core java apis that's always consdered as intrinsics, so no native signature needed
01:12:41evandoes hotspot create just a C api call to them then?
01:12:44lopexthey always rewritten in term of vm
01:12:49lopexer, terms
01:13:00lopexevan: depends
01:13:12evanor inline the content of them
01:13:21lopexevan: it can either compile the call, or just generate the stub
01:13:35lopexdepends how complex the tast is
01:13:39lopexer, taks
01:13:44evansure.
01:14:18santana_ enters the room.
01:14:21yipstar leaves the room.
01:14:23santanahi
01:14:31santanaI've got the cpp branch
01:14:36santanahow do I build it
01:14:43santanathe vm
01:14:43lopexevan: but is really strikes how similar the challenges are
01:14:47evansantana_: 'rake'
01:14:51evanlopex: yeh, very much so.
01:15:00santanaI got some errors
01:15:13santanaIn file included from ar.cpp:1:
01:15:13santanaar.hpp:6:23: sys/cdefs.h: No such file or directory
01:15:13santanarake aborted!
01:15:17evansantana_: could you pastie them?
01:15:22santanaok
01:15:26evansantana_: you don't have libc6-dev installed
01:15:36santanait's Solaris
01:15:42evanarg.
01:15:51drbrainhaha
01:16:09evanmaybe solaris doesn't have cdefs.h?
01:16:09santanaso, it requires glibc?
01:16:10evani guess not.
01:16:11evanno
01:16:12evanit doesn't.
01:16:30evanwhat is ar.hpp using cdefs.h for...
01:16:42evanjust remove it
01:16:47evanit's not needed i don't think
01:16:54santanaok, let's try
01:17:17santanamore errors, I'm pastie-ing them
01:17:56santanahttp://pastie.caboo.se/201263
01:18:55evanack.
01:19:00evanthe symlink isn't being made.
01:19:25santanahmm
01:19:28evando
01:19:36evancd vm; ln -s ../shotgun/external_libs .
01:19:41evanthat will fix the ffi.h one
01:19:44evanlooking at the other
01:19:58evanoh
01:20:00evanthats my mistake
01:20:03evani'll fix them both
01:20:03evanone sec.
01:20:11santanasure
01:20:36santanaby the way, is there a "building instructions" for the C++ vm?
01:20:43evannot currenly.
01:20:44santanaI admit it, I haven't read one
01:20:48santanaoh, ok
01:23:09rubuildius_ppc enters the room.
01:24:43evansantana_: ok, pushed
01:24:49evani fixed the ar.hpp error too.
01:24:51santanapulling
01:25:20boyscout1 commit by Ryan Davis
01:25:21boyscout * More rails hacks:; 5673309
01:26:10santanashould I still make the symlink?
01:27:00twbray leaves the room.
01:27:08evanno
01:27:13evani moved the directory over.
01:27:22santanait's telling me about ffi.h missing
01:27:36santanaok, let me check again
01:28:37evanhm
01:29:25santanathe includes?
01:29:41evanhuh?
01:30:02santanasomehow it's finding <ffi.h>, which I suppose is located under external_libs
01:30:09evanyep
01:30:12santanathen, a -I flag is missing
01:30:17evanit's not.
01:30:30santanachecking again
01:30:50zenspiderevan: awdwr runs
01:30:56evanyay!
01:31:13evanhow much of rails does it exercise?
01:31:14evanjust curious
01:31:15zenspiderthey're chock full of stupid bugs, but that's the book's fault, not ours
01:31:24zenspider(escaping <p> and stuff in the product descriptions){
01:31:44zenspiderdunno... we ran the last depot, so it should be mostly complete if not totally
01:32:15zenspidershould we check this in somewhere?
01:32:22zenspideror pop a tarball somewhere?
01:32:28zenspideror is this throwaway?
01:32:37evanlets check it in
01:32:45evanperhaps under benchmark?
01:32:51evanthat seem like a logic place?
01:33:08evanor maybe
01:33:12evantest/demo/awdwr
01:33:46zenspiderk.
01:33:59zenspiderwhat about the rest of the tarball?
01:34:05evanwhats in it?
01:34:06zenspiderthere are a ton of depots and stuff
01:34:15zenspiderand then a lot of other stuff
01:34:20zenspiderI didn't bother with the other stuff
01:34:29zenspidersince I knew the depot was the book exercise
01:34:29evancheck in the one that you ran as files
01:34:33evanand the rest as the tar.gz
01:34:43evanso we can reference if we need to
01:34:50ShayArnett enters the room.
01:34:55zenspiderk
01:36:40cezarsa enters the room.
01:38:16santanaI have deleted and re-checked out the cpp branch
01:38:27MenTaLguY leaves the room.
01:39:02santanaand get this
01:39:03santanahttp://pastie.caboo.se/201280
01:39:21evancould you paste more
01:39:25santanasure
01:39:32evanthe lines before will tell me what it was doing when it hit that.
01:41:30santanahttp://pastie.caboo.se/201282
01:43:01evanhm
01:43:06evanit's doing DEP that it occures..
01:43:35evansantana_: do
01:43:37evanrake --trace
01:43:42evanand paste me the whole thing.
01:43:53zenspiderslooooowly pushing.
01:43:58zenspiderdamn cafe
01:44:09evanit seems to be something different with solaris' g++ -MM
01:44:28boyscout1 commit by Ryan Davis
01:44:29boyscout * Added test/demo/awdwr; 6d6570e
01:47:24evanzenspider: sweet, thanks.
01:50:11jtoy enters the room.
01:50:41santanaevan: http://pastie.caboo.se/201290
01:51:06evanarg
01:51:12evantrace didn't output the lines I wanted.
01:51:21evanthats my screw up.
01:51:32evansantana_: go look in vm/Rakefile
01:51:39evanline 16
01:51:45evanthe g++ -MM line
01:51:59santanaok
01:52:03evancould you print out what that line is before it's run?
01:52:12evani'm wondering if includes is empty for some reason
01:52:19evanor if G++ is behaving oddly
01:53:32santanaRakefile:16 is a blank line
01:53:35rubuildius_amd64 enters the room.
01:53:42santanaline 20 is @linker = "g++"
01:53:50lopex leaves the room.
01:53:52santanawhich is the body of cpp! method
01:54:16evanoh sorry
01:54:17evan83
01:54:18santanaok, I found the g++ #{includes} -MM line
01:54:25santanaaha
01:56:48santanait's empty
01:57:35moofbong enters the room.
01:57:42evanthats odd.
01:57:50evandid i screw up the ordering i wonder..
01:57:52santanaI'll print more
01:57:56dlee leaves the room.
01:57:57santanaincludes and path
01:58:31evaneven just p @includes
01:58:32evanin there
01:58:37evanshould tell us whats up
01:58:51santanaincludes is fine
01:58:55ezmobiushow much memory does rbx use when you have a rails app loaded?
01:59:05rubuildius_ppc leaves the room.
01:59:11santana-Iexternal_libs/libtommath -Iexternal_libs/onig -Iexternal_libs/libffi/include -Iexternal_libs/libltdl -Iexternal_libs/libev -Itest/cxxtest -I.
01:59:38rubuildius_ppc enters the room.
01:59:47santanapath is the cpp file being compiled
02:00:00santanabut data, the output of g++, is empty
02:00:06evanodd.
02:00:11santanait's not generating dependencies
02:02:15evanwell
02:02:23evanit probably doesn't have anything in it because g++ spits out that error.
02:02:27santanait's probably because it doesn't find ffi.h
02:02:35santanaaha
02:02:43evanlook in external_libs/libffi/include
02:02:46evanis there an ffi.h?
02:03:00santana../shotgun/external_libs/libffi/include/ffi.h
02:03:00santana../shotgun/lib/subtend/ffi.h
02:03:04santanabut not under vm
02:03:38rubuildius_amd64Ryan Davis: 6d6570e4f; 2187 files, 7175 examples, 25803 expectations, 0 failures, 0 errors
02:03:47evanwait wait.
02:03:52evanmy commit should have moved it.
02:03:54evandid it not?
02:03:59evanyou should have vm/external_libs
02:04:00djwhitthmm... I don't know why I have problems with runtime sometimes... seems to be ok now
02:04:06evanand no shotgun/external_libs
02:04:28santanaI do
02:04:39evandid you get my commit?
02:04:42santanaexternal_libs/libffi
02:04:44evanwhats your top commit id?
02:05:06santanayours
02:05:09santana006344a256c29c5cd350938de96e1954439b213c
02:05:21santanaoh
02:05:25santanaI have ffi.h.in
02:05:46santanaI haven't built any external lib yet
02:05:53santanashould I do it manually first?
02:07:14evanoh oh.
02:07:24evango into external_libs/ffi
02:07:27evanand do ./configure
02:07:30evandid it create ffi.h?
02:07:39evanif so, we need to move configuring up to the beginning.
02:08:09santanait did
02:08:16evanok, see if things work now.
02:08:37lchin enters the room.
02:08:37santana:), it looks better now
02:08:42evanyay!
02:09:01santanathere's an error ...hmmm
02:09:09santanabut it's Solaris' math.h
02:09:12santanaargh
02:09:30santanabuiltin_bignum.cpp:694: error: `isinf' undeclared (first use this function)
02:09:30santanabuiltin_bignum.cpp:694: error: (Each undeclared identifier is reported only once for each function it appears in.)
02:09:30santanarake aborted!
02:10:07evanack
02:10:09evanthats back.
02:11:24santanaI thought libffi was going away
02:11:33evanno
02:11:39evanit's pretty new.
02:11:50edwardam_ leaves the room.
02:12:45santanain that case, I may modify libffi's configure to work around Solaris' math.h problem
02:12:53evanyes.
02:12:59evango ahead.
02:13:01santanait's easy
02:13:04santanaok
02:13:25santanait may take some time
02:13:32santanaI'm supposed to be working :)
02:13:37evanthats fine :)
02:13:40evandid you make the change in shotgun?
02:13:44evanin the other branch
02:13:47santanaif not tonight... tomorrow
02:13:56santanaI deleted it
02:14:10evandeleted what?
02:14:22santanabecause the C++ vm was not going not use libffi ... that's what I believed
02:14:35santanadeleted my changes
02:14:38evanoh.
02:14:46evanno, we're going to use libffi
02:15:19santananp, I'm making the changes again
02:15:22evanok.
02:15:26santanaI'm going back to work
02:15:32evansounds good.
02:15:35santanasee you
02:15:40evanyes, see you.
02:15:45santana_ leaves the room.
02:19:44cezarsaevan: I want to make FIXNUM_P public avaliable in subtend, should I do like what was done with SYMBOL_P?
02:20:05cezarsabasicaly:
02:20:11cezarsa* #undef FIXNUM_P in ruby.c
02:20:16cezarsa* create a FIXNUM_P() function in ruby.c
02:20:26cezarsa* copy/paste oop.h #define FIXNUM_P to ruby.c renaming to RBX_FIXNUM_P
02:20:31cezarsa* use RBX_FIXNUM_Pin FIXNUM_P() function
02:20:59evancezarsa: yeah
02:21:05evanfollow SYMBOL_P
02:21:30cezarsathat copy/paste from oop.h doesn't seem much DRY
02:21:42evanyeah
02:21:43evani know.
02:21:47evanthats ok for now.
02:22:01cezarsaok, I'll follow it
02:22:17shame enters the room.
02:29:37_VVSiz_ enters the room.
02:32:38lstoll enters the room.
02:36:48VVSiz_ leaves the room.
02:44:58Yurik-__ leaves the room.
02:46:55AndrewO enters the room.
02:53:14_VVSiz_ leaves the room.
02:53:33therealadam leaves the room.
02:53:39_VVSiz_ enters the room.
02:59:24wycats_ enters the room.
03:07:03twbray enters the room.
03:07:21rubuildius_ppc leaves the room.
03:07:55rubuildius_ppc enters the room.
03:09:54crafterm leaves the room.
03:10:21wycats_ leaves the room.
03:11:00wycats_ enters the room.
03:11:06twbray leaves the room.
03:12:15blakewatters enters the room.
03:12:21wycats_ leaves the room.
03:12:53wycats_ enters the room.
03:16:40blakewatters leaves the room.
03:17:25wycats leaves the room.
03:18:34wycats_ leaves the room.
03:18:48twbray enters the room.
03:18:51wycats enters the room.
03:19:01twbray leaves the room.
03:21:58twbray enters the room.
03:24:03headius enters the room.
03:24:20benburkert leaves the room.
03:26:35seydar enters the room.
03:26:40seydar leaves the room.
03:27:17cksouza enters the room.
03:27:37seydar enters the room.
03:27:47benburkert enters the room.
03:28:46vertiginous enters the room.
03:30:41seydar leaves the room.
03:34:19ezmobius leaves the room.
03:35:06nicksieger leaves the room.
03:37:09wmoxam enters the room.
03:37:32fbuilesv enters the room.
03:40:41RyanTM leaves the room.
03:42:24RyanTM enters the room.
03:47:48gramos leaves the room.
03:49:20twbray leaves the room.
03:51:42benburkert leaves the room.
03:53:20benburkert enters the room.
03:55:57crafterm enters the room.
04:00:46rueHm, discarded the half-and-half submodule mesh?
04:03:04moofbong leaves the room.
04:04:40vertiginous leaves the room.
04:04:40mass leaves the room.
04:04:40smparkes leaves the room.
04:04:40ko1_away leaves the room.
04:04:40rudebwoy leaves the room.
04:04:40zenspider leaves the room.
04:04:40_VVSiz_ leaves the room.
04:04:40flori leaves the room.
04:04:40nemerle leaves the room.
04:04:40olabini leaves the room.
04:04:40robin_dewd leaves the room.
04:04:40Maledictus leaves the room.
04:04:40scudco leaves the room.
04:04:40Ingmar leaves the room.
04:05:04vertiginous enters the room.
04:05:04flori enters the room.
04:05:04Ingmar enters the room.
04:05:04nemerle enters the room.
04:05:04scudco enters the room.
04:05:04Maledictus enters the room.
04:05:04robin_dewd enters the room.
04:05:04olabini enters the room.
04:05:04rudebwoy enters the room.
04:05:04smparkes enters the room.
04:05:04mass enters the room.
04:05:04ko1_away enters the room.
04:07:46flori leaves the room.
04:07:47nemerle leaves the room.
04:07:47olabini leaves the room.
04:07:47scudco leaves the room.
04:07:47robin_dewd leaves the room.
04:07:47Maledictus leaves the room.
04:07:47Ingmar leaves the room.
04:07:47mass leaves the room.
04:07:47vertiginous leaves the room.
04:07:47smparkes leaves the room.
04:07:47ko1_away leaves the room.
04:07:47rudebwoy leaves the room.
04:10:31jzj enters the room.
04:11:39jeremydurham leaves the room.
04:19:20robin_dewd enters the room.
04:19:45AndrewO leaves the room.
04:24:25charlenopires leaves the room.
04:25:26charlenopires enters the room.
04:26:18wifelette enters the room.
04:28:05trythil enters the room.
04:29:17benburkert_ enters the room.
04:29:43vertiginous enters the room.
04:29:43rudebwoy enters the room.
04:29:43smparkes enters the room.
04:29:43mass enters the room.
04:29:43ko1_away enters the room.
04:30:04AndrewO enters the room.
04:30:58ezmobius enters the room.
04:33:23ezmobius leaves the room.
04:34:54fowlduck enters the room.
04:38:27dysinger enters the room.
04:43:02AndrewO leaves the room.
04:43:08wmoxam leaves the room.
04:46:34RyanTM leaves the room.
04:46:56benburkert leaves the room.
04:49:05AndrewO enters the room.
04:53:13fowlduck leaves the room.
04:57:49edwardam enters the room.
04:59:43AndrewO leaves the room.
05:04:08twbray enters the room.
05:07:06rueCompletely OT but anyone have a recommendation for an alternative to Fetchmail?
05:11:10rueGetmail, I suppose.. not a lot of competition there
05:12:00brixenrue: I use gmail :)
05:12:01fbuilesvrue: Gmail :P
05:12:05brixenhehe
05:12:06fbuilesvheh
05:12:08fbuilesvdamn
05:12:08brixenfbuilesv: jinx:)
05:13:09rueI am avoiding Google. It is too big
05:13:25brixenrue: rumors of google stealing your email bits are exaggerated
05:15:01rueMy life goal is for Google to not know absolutely everything about me at the time when Larry and Sergey kick the bucket
05:15:14fbuilesvrue: what do you use as a search engine then?
05:16:00rueProxied
05:16:46fbuilesvouch
05:17:32fbuilesvbrixen: is there any way to modify rake spec:full to make it accept -j?
05:18:13twbray leaves the room.
05:19:42rueIt should work fine just copying it out of ci, I imagine
05:19:43brixenfbuilesv: hmm, we could I suppose
05:20:15fbuilesvrephrase that question: Why isn't there a -j in the rakelib task :)
05:20:21brixenfbuilesv: we could just change the spec task command to bin/mspec -j -B full.mspec
05:20:28brixenheh, because it might break
05:20:37brixenit works for me on leopard :)
05:20:38fbuilesvbrixen: yes, I'm not sure how safe/unsafe that option is
05:20:41fbuilesvsame here
05:21:00evanevening.
05:21:05brixenfbuilesv: I really don't like rake commands for specs
05:21:09brixenevening evan
05:21:19fbuilesvevan: hola
05:21:23fbuilesvbrixen: I just find it faster to type
05:21:27brixenfbuilesv: I'm editing -B to default to the extension .mspec
05:21:47brixenfbuilesv: yeah, you could create an alias too though
05:22:11brixenfbuilesv: how about rake spec:multi ?
05:22:40fbuilesvbrixen: that sounds fine for me, I just didn't know if -j was non safe or something
05:22:56brixenwell, I haven't had any trouble with it
05:23:06brixenI guess if people use it, we'll hear if it breaks
05:23:32fbuilesvyeah I guess, do you want to do it or want me to?
05:24:10brixenfbuilesv: go right ahead if you want. I'll know who to point at :)
05:24:18fbuilesvheh
05:26:15evanoh JRuby people....
05:26:18evani have a question....
05:26:27rubuildius_ppc leaves the room.
05:27:00rubuildius_ppc enters the room.
05:27:57headiusodd, I didn't get a beep for that
05:27:59headiusmaybe my highlight is case sensitive
05:28:06evanhehe
05:28:10_VVSiz_ enters the room.
05:28:10olabini enters the room.
05:28:10Maledictus enters the room.
05:28:10scudco enters the room.
05:28:10nemerle enters the room.
05:28:10Ingmar enters the room.
05:28:10flori enters the room.
05:28:17zenspider enters the room.
05:28:18headiusahh no, it just wasn't there
05:28:20headiuswhat's up
05:28:34evanheadius: how did you wire up DATA in jruby in compiled mode?
05:29:15boyscout1 commit by Federico Builes
05:29:16boyscout * Adds a Rake task for CI on multiple processors; bf5f9e6
05:29:51headiushmm, let me see
05:30:00headiusI don't recall doing anything special for it
05:30:12twbray enters the room.
05:30:49headiusshow me an example quick, I can never remember the syntax
05:31:01evanput __END__ at the bottom
05:31:06evanand access DATA above it.
05:32:40headiushmmm, it works
05:32:43headiusI don't remember doing that
05:32:58headiusmagic!
05:33:03evanheh
05:33:44headiusmight just be a parser question...something tom's doing that stuffs the data into a global structure pre-execute
05:33:58evanyeah
05:33:59headiusand then I just compile that like anything else
05:34:02evanjust curious about compiled mode
05:34:21evanmainly, running the code way after the .rb file is read
05:34:27evanlike maybe, across runs
05:34:29headiusdoes DATA parse as anything other than a constant?
05:34:29evando you guys do that yet?
05:34:33headiusI'm checking our special constants
05:34:38evanit's just a constant
05:34:56headiuswhat do you mean, way after the .rb file is read
05:35:02headiuslike from another file later on?
05:35:44evani thought you guys were walking about create .class files
05:35:52evan'precompiled' files
05:35:57headiusno, we never dump any files to disk
05:35:58evannot doing that? maybe i made that up
05:36:00headiusthey compile in memory
05:36:17headiusyou can forcibly precompile if you want, but it's not the default
05:36:46headiusand most files don't compile at all, relying on jit later
05:37:27evansure
05:37:31evanjust curious.
05:38:01benburkert_ leaves the room.
05:38:13headiusyeah, I don't know where DATA is wired up..I know enebo's fiddled with it a lot in the past
05:38:20rubuildius_amd64Federico Builes: bf5f9e6ff; 2187 files, 7175 examples, 25803 expectations, 0 failures, 0 errors
05:38:22headiusI'll try precompiling quick
05:39:03evanprobably wired up by the parser
05:40:00cyndis leaves the room.
05:40:11headiusyeah, looks like it doesn't ever hit the compiler
05:40:13headiuspastie
05:40:36pastiehttp://pastie.org/201364 by headius.
05:40:57headiusthe contents of DATA appear nowhere in the precompiled output
05:41:27headiusperhaps qualifies as a bug, but basically if it's not in the AST, I don't ever see it in the compiler
05:41:50evanyeah
05:42:47evanthe constant pool is per class, right?
05:42:54headiusyes
05:43:01evanwhat can it contain?
05:43:21headiusliteral strings, method signatures/names, type names
05:43:46evanthat it?
05:43:59headiusthe #123 in that output is references to the constant pool
05:44:15headiusintegers and such are just in the bytecode directly
05:44:34headiusI think you can shoehorn other byte data into the constant pool, but it's not typical
05:44:53Erlang00t enters the room.
05:44:54evanok
05:44:56evanjust curious.
05:45:06Erlang00ta bug
05:45:10evansince our CompiledMethods are setup so very similarly
05:45:16Erlang00tdef foo(a,b,c=d=1)
05:45:21Erlang00trubinius can't pass
05:45:22evanew.
05:45:25evanwtf does that do?
05:45:49headiuspastie
05:46:02pastiehttp://pastie.org/201365 by headius.
05:46:16headiusthere's the long output with constant pool, stack sizes, internal signatures and stuff
05:46:37headiusnothing in this file corresponds to your CompiledMethod though
05:46:49Erlang00thttp://pastie.org/201366
05:46:54headiusCompiledMethod would be equivalent to the eventual callable handle we bind to code in this output
05:47:06headiusat "def" time, for example
05:47:16Erlang00tthis one can't pass, rubinius can not generate bytecode
05:47:39kw enters the room.
05:47:46evanheadius: I mean setup
05:47:55rubuildius_ppcFederico Builes: bf5f9e6ff; 2187 files, 7188 examples, 25847 expectations, 0 failures, 0 errors
05:47:59evana CompiledMethod has a literals tuple (constant pool), etc.
05:48:01mediogre enters the room.
05:48:19evanErlang00t: file a ticket.
05:48:21headiusahh, sure, I understand
05:48:52headiusyeah, basically this uses a single constant pool for an entire .rb file compiled into .class, just the normal Java constant pool
05:48:56Erlang00thow to, where?
05:49:13evanErlang00t: http://rubinius.lighthouseapp.com/projects/5089-rubinius/overview
05:49:13headiussome other literals we cache on first construct and some not
05:49:30evando you cache them into the constant pool directly?
05:49:37evanor as static class variables
05:49:38headiusI think right now we cache symbols, bignum, and regex, but fixnums just go to a global cache of -127..128
05:49:45evan(i guess those might be the same thing)
05:49:50headiusanything outside that we construct new objects for every time
05:50:02headiusconstant pool is separate from static variables
05:50:11evanyikes, you hope your bignum cache is flushed.
05:50:17evaner.
05:50:18evanI hope.
05:50:33rubuildius_ppc leaves the room.
05:50:34benburkert enters the room.
05:50:38headiuswe don't cache anything as static variables that holds a reference to the JRuby runtime..so every compiled script is first instantiated with the runtime as a reference
05:50:50cremes leaves the room.
05:50:56headiusso all calls from then on are calling instance methods on an AbstractScript subclass which has java fields for various caches
05:51:09headiusthat allows us to share the same compiled code across runtimes
05:51:33headiusthe bignum thing is only for literals
05:51:37headiuspretty rare
05:51:38evangotcha
05:52:16headiuswe also pre-construct the backing store for strings when a script is instantiated, and then only the RubyString objects are new each time
05:52:31headiusdue to COW, we basically just mark all new literal strings as shared, so they're cheap
05:53:05_VVSiz_ leaves the room.
05:53:05zenspider leaves the room.
05:53:10flori leaves the room.
05:53:10nemerle leaves the room.
05:53:10scudco leaves the room.
05:53:10olabini leaves the room.
05:53:10Maledictus leaves the room.
05:53:10Ingmar leaves the room.
05:53:10evanyep
05:53:11evanwe do the same.
05:53:37zenspider enters the room.
05:53:37_VVSiz_ enters the room.
05:53:37olabini enters the room.
05:53:37Maledictus enters the room.
05:53:37scudco enters the room.
05:53:37nemerle enters the room.
05:53:37Ingmar enters the room.
05:53:37flori enters the room.
05:53:52headiusokeedoke
05:54:13headiusguess I've said all you care to hear :)
05:54:20evannah!
05:54:24evani love talking VM design
05:54:30evanI so rarely get to do it
05:54:44evani look all over the net for descriptions and papers on VM construction
05:55:33headiusbtw, I didn't get to show you this the other day
05:55:34headiushttp://pastie.org/pastes/200438
05:55:55headiustom and I were talking about adding a separate method cache to classes and I was curious about our current sclass cost
05:56:03evanheh
05:56:05headiusseems like we're both a helluva lot better than MRI or 1.9
05:56:06evanobjc style.
05:56:08headiusno idea what's going on there
05:56:12anteaya leaves the room.
05:56:26evanobjc has a method cache per class
05:56:33headiuswe used to have such a cache, but it got removed in favor of one that was supposed to be better
05:56:37headiusturned out not to be, now we have none
05:56:44evanthere are some great papers about objc_msgsend
05:56:56evanhow to make pulling from the method cache fast
05:57:07headiusyeah, the cache isn't as hard as coming up with a safe way to invalidate it
05:57:10evanyou still have the global one though, yeah?
05:57:13headiusnope
05:57:18headiusnothing but call site caches
05:57:21evanwow.
05:57:30evanthats probably good
05:57:32headiuswhich don't do anything for send, respond_to, etc as you know
05:57:37evangets you pushing on the call sites more.
05:57:39evanyep
05:57:47headiusyeah...but we really need to get it back
05:57:53headiusrespond_to is hit hard, and we have no cache for it
05:58:01headiusprobably post 1.1.2 though
05:58:05evangotcha
05:58:24evani've been pondering more and more about having a shadow object in the VM
05:58:26evanone per class
05:58:33evanthat stores and speeds things up
05:58:41rubuildius_ppc enters the room.
05:58:55headiusa secondary abstraction of class internals?
05:59:15headiuswould the version presented to ruby then be more of a mirror?
05:59:19cremes enters the room.
05:59:41evanwell, i'm thinking it would have info the class doesn't store
05:59:44evaninfo thats hidden from the GC
05:59:52headiusahh, like what
05:59:53evanand thus can be moreflexible
06:00:18evanwell, i'm thinking thats where type specialized methods would be stored
06:00:56headiushow would you handle the dispatching to them?
06:01:30evanwell
06:01:39evanthe method dispatch logic would look in them
06:01:45evanto find potential matches
06:02:01evanthey'd be executed like normal
06:02:04evanthat wouldn't change.
06:02:15evanin the new VM, a CompiledMethod object already has a shadow C++ object
06:02:18evanVMMethod
06:02:41evanthat contains a runtime dependent version of the CM
06:03:13evanin the same way, I imagine, the JVM stores private, fast presentations of bytecode methods internally
06:03:33headiusalmost all bytecode is massaged on the way in, so yeah, there's something similar
06:03:45headiusbut of course, there's also the code cache for the jitted versions hanging around somewhere too
06:03:56evancourse
06:04:13headiusI don't believe the JVM specializes bytecode though
06:04:15headiusthe compiler does that
06:04:22headiusJIT compiler I mean
06:04:57headiusis this to allow you to dispatch more quickly to type-specific paths in core methods?
06:05:30headiusor is this for general ruby code? I've been trying to think of a way to use type specialization in regular Ruby code, but it's a lot harder than in Java because there's so many variations
06:06:04headiuscurrently we also don't have separate entry points into core class methods for specific parameter types...only for specific arities
06:06:08evanit would be for all ruby code
06:06:34evaneverything is a type specific path
06:06:52evanit's just whether or not there is a type specific version of a method available
06:07:32headiusso you would be doing much deeper analysis of the bytecode to determine which types follow which paths? in order to produce specialized partial methods?
06:07:55evandunno
06:08:08evanright now, i'm thinking specialization of the bytecode based on new information
06:08:11evanfor example
06:08:16evanthe new ivar_as_index replacement
06:08:51evanthe VM, based on a mapping of ivar to slot number, specializes the VMMethod to access the slot rather than using the ivar hashtable
06:09:06evanso while the normal bytecode says
06:09:10evanpush_ivar :@blah
06:09:20evanthe VM combines that with the information that :@blah => 3
06:09:24evanto make that
06:09:27evanpush_my_field 3
06:09:37headiusright, I see
06:09:57evanphase 1 i'm working on now, has the ivar => slot maps be static
06:10:07evanie, it doesn't learn anything new
06:10:21evanit just uses maps generate at VM compiled time by looking at annotations of the builtin classes
06:10:29headiusahhh
06:10:36michaellatta leaves the room.
06:10:48headiusso the methods themselves are still looking in a map for now
06:11:09michaellatta enters the room.
06:11:09evansorta
06:11:14evanwhen the method is added to the class
06:11:23evanthe VMMethod behind the CompiledMethod is specialized
06:11:26evanbased on the class
06:11:49headiusok, gotcha, that makes sense
06:12:13headiusso it inspects the body and only ivars that have been previously annotated thus are transformed into indexes
06:12:17evanyep
06:12:21evana simple phase 1
06:12:31evanwith enough in place to make phase 2 easier
06:12:57headiusthat's a good idea...I wonder if that would work for my java layer
06:13:24headiusthere I've essentially already got the list of fields, right? so at method add time I could rewrite it to just be direct object field accesses when using a Java object
06:13:47headiusI suppose that would work for jruby too...specially-named or annotated fields on the core classes that get wired up differently
06:14:11evanyeah
06:14:13evansame thing
06:14:14headiushave to keep that in mind later...so far there hasn't been a need
06:14:24evani've got it wired up through some C++ infrastructure
06:14:34evanso that assignment is type safe too
06:14:38evanso that
06:14:40evanclass String
06:14:42evan def the_suck
06:14:45evan @data = 3
06:14:46evan end
06:14:46evanend
06:14:54evandoesn't cause the STring to self destruct
06:15:19evanit would just raise a TypeError
06:15:27evanin this case, indicating that a Fixnum can't be use as a ByteArray
06:15:39evanthats one place where this arch is better than what we curretly have
06:15:52headiusyeah, I want to start adding that in one of these iterations
06:15:55evanit limits duck typing
06:15:57headiuswe manually check types everywhere right now
06:16:01evanbut you can't duck type all the way down
06:16:06evanit has to end somewhere
06:16:13headiusironruby has some extra sauce in their binding layer to do it
06:16:34evani'm just using a simple script that pulls out data member annocations
06:16:40evanclass String : public BuiltinType {
06:16:41evan ...
06:16:46evan ByteArray* data; // slot
06:16:57vertiginous leaves the room.
06:17:01evanit gives it a number, and generates glue to check that the type is ByteArray
06:17:29headiusright, it would be something like @JRubyIvar ByteList value; for us
06:17:36headiusto go with @JRubyMethod we have now
06:18:10headiusgiven any more thought to stackless versus not?
06:18:18evani'm back and forth constantly
06:18:19evanmentally.
06:18:46fowlduck enters the room.
06:18:55headiusI saw a talk on stackless python at pycon, sounds like it's pretty mature and it's still a couple times slower than cpython
06:19:06brixenevan: how does that type checking work compared to RISA and RTYPE in shotgun? i.e. HASH_P uses RISA
06:19:38evanheadius: i dunno if thats a symptom of them being stackless or all the stuff they had to add to make Python stackless
06:19:47evanie, if it were stackless from the ground up, it would probably work better.
06:19:48headiusyeah, me neither
06:20:00headiuscould be, I dunno
06:20:07fowlduck leaves the room.
06:20:09evanbrixen: type checking in C++
06:20:11evan?
06:20:20evani've always wanted to chat with those guys
06:20:25evani have a front that works for IronPort
06:20:30evans/front/friend/
06:20:31brixenevan: so it's just C++ check then?
06:20:50evanall their products are based on an internal version of stackless python
06:21:05evanbrixen: there is some special sause
06:21:11evanfor example
06:21:18evanByteArray* ba = as<ByteArray>(obj);
06:21:31evanif obj isn't a ByteArray, it throws a C++ TypeError exception
06:21:35evanwhich is translated into a ruby one
06:21:50evanas<> is a rubinius function template.
06:21:54evanwhich is very simple
06:21:58evanit's basically
06:22:00headiusdynamic_cast
06:22:15evanif(T::type == obj->obj_type) return (T*)obj;
06:22:19evanthrow TypeError(...);
06:22:27evandynamic cast wont work for us
06:22:29headiusseeing this almost makes me miss my C++ days
06:22:30headiusalmost
06:22:33evanbut it works very similarly
06:22:45brixenevan: ok. I was trying to remember an issue I had converting stuff to LookupTable
06:22:47evandynamic_cast only works for stuff with virtual functions
06:22:51headiusyeah
06:23:00brixenevan: because it was expecting a Hash
06:23:01headiusit's meant for stuff that fits fully into a C++ virtual class hierarchy
06:23:11evanbrixen: ah, well, they're seperate types
06:23:16evanheadius: yep
06:23:27evanour builtin class set is small enough
06:23:34evanit's actually not bad using our own versions
06:23:38evanyou just have to do
06:23:46evanclass Blah : public BuiltinType {
06:23:56evan const static object_type type = BlahType;
06:23:56evan...
06:23:57evan}
06:24:03evanand it works with as<> automatically
06:24:17evanthe type field on the class is what as uses
06:24:42evanbrixen: they can't intermix anymore.
06:24:57brixenevan: yeah, I'm getting it
06:25:22evandoing
06:25:27headiusis as<> smart about supertypes? or is your core class hierarchy flat?
06:25:33evanByteArray *ba = (ByteArray*)obj;
06:25:42evanis strictly forbidden in the new VM
06:25:46evanthat kind of cast.
06:26:06evan(and by strictly forbidden, i mean ok only in very few contexts)
06:26:17evanheadius: thats the magic.
06:26:17brixenhehe
06:26:29evanheadius: as<> is specialized per supertype
06:26:33evanto understand all subtypes
06:26:41evanit's a static thing
06:26:41brixenstrictly forbidden except where it's not
06:26:53evanbut not being totally magic is good
06:26:58evankeeps things slim.
06:27:06headiusso then, it expands to a set of ifs or something?
06:28:00evanhttp://github.com/evanphx/rubinius/tree/006344a256c29c5cd350938de96e1954439b213c/vm/builtin_class. hpp#L87
06:28:06evanas<> actually uses kind_of<>
06:28:15evanand kind_of<> is specialized
06:28:27evanthat link is an example
06:28:36headiusok, got it
06:29:07headiusout of curiousity, why didn't you make a real hierarchy and use virtual methods?
06:29:32evana good question.
06:29:50evaninitially, as I was prototyping this
06:30:14evanmy aim was to create C++ who's internal structure was fully GC'able
06:30:27evanif you use virtual functions
06:30:40evanthen the objects would contain a void* as the first datamember
06:30:45evanwhich would blow the GC up
06:30:56evanthis is actually exactly how StrongTalk did it to
06:31:40headiusahh, I see
06:32:15evanso stuff like single inheritance to make sure the data is layed out sanely, etc.
06:32:43headiusyeah, that's a good point...and vtable logic isn't always portable
06:32:47evanironically, with the annotations, the GC is small enough to know exactly where GCable fields are located in the builtin types
06:32:53evans/small/smart/
06:33:34evanso it doesn't have treat them like untype boxs of references
06:33:45evanit can know exactly where to look
06:33:58evanso i could potentially have virtual functions now.
06:34:07evanbut i think i'm going to avoid them for now
06:34:13headiusso you use the annotations to also advise the GC on which references it should be tracking
06:34:18evansince thats how I've started out
06:34:24evanyep
06:34:37evanthe annotations generate a mark glue function
06:34:50evaneach BuiltinType has a Info subclass too
06:34:52headiusprimary reason I asked about virtual methods would be the ease of interfacing with stuff outside rubinius
06:34:54evanwhich is a TypeInfo subclass
06:35:03headiusbut since you're still stackless the builtin methods already have a lot of prerequisites
06:35:19evanthe mark function is generate for each BuiltinType's Info
06:35:21headiusit would be like calling one of our dumb compiled bodies without the appropriate stack fiddling
06:35:44evanyeah
06:35:47evanactually
06:36:20evanthe method dispatch logic (post lookup), is one line:
06:36:26evan as<Executable>(msg.method)->execute(state, this, msg);
06:37:09evanExecutable::execute dispatches to a virtual function, VMExecutable::execute
06:37:16evanof which, VMMethod overrides
06:37:20evanditto with VMPrimitiveMethod
06:37:36headiusyeah, more and more similar to what we have
06:37:45headiusDynamicMethod and its subtypes that override virtual methods
06:37:58headiusJavaMethod, DefaultMethod (bad name, should be InterpretedMethod), CompiledMethod
06:38:16evanyep
06:38:18headiuswe essentially only have the objects equivalent to your VMMethods
06:38:26_sk enters the room.
06:38:28evanVMMethod twiddles the status of the current Task object
06:38:32evanso that when things return
06:38:39evanthe Task is now executing the new method
06:38:41evanstackless
06:38:55kw leaves the room.
06:38:55mass leaves the room.
06:38:55smparkes leaves the room.
06:38:55ko1_away leaves the room.
06:38:55rudebwoy leaves the room.
06:39:13headiusin our case it just twiddles the thread-specific stacks on the way in and out
06:39:24evanwhats in those stacks?
06:39:27evanscope and such?
06:39:43headiusmy stackless version essentially returned separate callables for those that were executed at the same level
06:39:47headiusyeah
06:39:50headiusscope, frame, rubyclass, etc
06:41:50evanI think that i've come up with a way to use LLVM stackless, which is something i really want to investigate soon.
06:42:03headiusoh yeah? it's capable of that?
06:42:17headiusor is it something where you'd have to decorate the llvm IL to trampoline?
06:42:20evandepends on how you use it :)
06:42:44headiusI had a trampolining decorator I played with on JVM to make normal Java calls stackless, and it worked reasonably well
06:42:51foysavas leaves the room.
06:43:11evanmy thinking is to translate a bytecode method into an LLVM function
06:43:22evaneach LLVM function is split into a number of blocks
06:43:26headiusthere's an actual library out there now though, that you can use to transform any method into a non-stack-deepening version...basically just converts calls into returns of specific markers, then the caller does the call for it and calls back in
06:43:33evanto perform a stack deeping ruby call
06:43:37headiusyeah
06:43:49evanthe function sets up some state (including the number of the next block) and returns
06:43:56headiusthat's what I mocked up in jruby too
06:44:01evanthe VM goes off and starts executing
06:44:06evanand to return
06:44:15evanthe first thing the LLVM function always does is branch to the block number passed in
06:44:39evanit's certainly not as fast as using LLVM's invoke instruction to deepen the C stack
06:44:43headiusthough my experiment trampolined every time there would be a potential Ruby thread switch, to allow swapping in a new runnable
06:44:51headiusyep, I used a switch for mine
06:44:52evanbut it eliminates bytecode dispatch entirely
06:44:53headiussame thing
06:45:11evanwhat do you mean trampolined?
06:45:20evanused exceptions to unwind?
06:45:35headiusevery call into a method is guaranteed to bounce back out, either with a final return or with a new deeper call to execute
06:45:47headiusmine didn't use any exceptions
06:45:57evanyep, same thing i'm considering.
06:45:57headiusbut there are others who have done that on JVM also
06:46:41evaninteresting.
06:46:52headiususually to emulate things like continuations or coroutines
06:46:59evanyou decided against it because it's just not fast enough?
06:47:07evanas just deepening the java stack
06:47:09headiuswasn't really useful enough
06:47:33headiusand we can't do it to the rest of the stack we don't control anyway
06:47:45evanyeah
06:47:50evanthats one problem I don't have
06:47:58evanwhich has it's ups and downs.
06:48:1