Show enters and exits. Hide enters and exits.
| 00:00:01 | evan | why did you change size_to_type to return :char_array as it's default type? |
| 00:00:07 | evan | in kernel/platform/ffi.rb |
| 00:00:09 | ctennis | nothing was showing up on the channel |
| 00:00:27 | ctennis | I don't remember now |
| 00:00:30 | ctennis | Seems like it was necessary for something else |
| 00:00:35 | evan | it's not a valid change. |
| 00:00:38 | evan | needs to be changed back |
| 00:00:46 | ctennis | lemme take a look see here |
| 00:00:47 | evan | it's not a valid fix that is. |
| 00:00:51 | dbussink | blegh, no .each yet in ffi.rb |
| 00:01:23 | evan | then where is config_hash used... |
| 00:01:30 | evan | oh, ctennis added that too |
| 00:01:32 | evan | ctennis: ? |
| 00:01:47 | dbussink | evan: it's in a method that is probably used after bootstrap in complete |
| 00:01:52 | dbussink | is complete |
| 00:02:21 | evan | dbussink: you should be able to use Array#size and Array#[] though |
| 00:02:26 | evan | FFI.layout uses those |
| 00:02:35 | evan | and it's called quite early. |
| 00:03:53 | Arjen_ leaves the room. | |
| 00:04:23 | dbussink | hmm, what is probably available for hash then |
| 00:04:24 | dbussink | ? |
| 00:04:32 | benburkert enters the room. | |
| 00:04:48 | evan | why hash? |
| 00:04:58 | evan | Hash#[] is available |
| 00:04:59 | evan | yeah |
| 00:05:02 | dbussink | because RUBY_CONFIG is a hash |
| 00:05:11 | dbussink | and i have to loop through it |
| 00:05:20 | evan | it's available |
| 00:05:37 | ctennis | evan: there was something broken at the time, and this change fixed it, though I can't seem to recall what it is now |
| 00:05:48 | ctennis | evan: but anyway, I can change it back.. |
| 00:05:53 | evan | please do |
| 00:06:15 | dbussink | evan: but how can i loop through a hash in this case then? or is keys available? |
| 00:06:25 | evan | dbussink: you can find out yourself |
| 00:06:29 | evan | look in kernel/bootstrap/hash.rb |
| 00:07:20 | dbussink | evan: doh :) |
| 00:07:37 | evan | you might need to add keys to bootstrap/hash.rb |
| 00:07:40 | evan | thats very easy |
| 00:08:07 | drbrain | I love git:safe_push |
| 00:08:31 | boyscout | 3 commits by Eric Hodel |
| 00:08:32 | boyscout | * Cleanup documentation.; 5fcdb7f |
| 00:08:33 | boyscout | * Import RDoc changes from trunk. Fixes some formatting problems in doc/vm; 8e2b607 |
| 00:08:34 | boyscout | * Remove extra \; 51e5916 |
| 00:13:52 | dbussink | evan: hmm, how easy should it be? |
| 00:14:23 | boyscout | 1 commit by Caleb Tennis |
| 00:14:24 | boyscout | * size_to_type should return :int as default; ed74e26 |
| 00:14:42 | evan | dbussink: relatively. |
| 00:14:44 | evan | i'd think. |
| 00:14:44 | ctennis | evan: was there another issue? colloquy seems to only be giving me part of the details.. |
| 00:15:01 | evan | i was wondering where config_hash was used |
| 00:15:22 | dbussink | evan: because i'm moving over keys to the bootstrap version, but that for example uses << on array |
| 00:15:34 | ctennis | socket.rb was where I first put it |
| 00:15:35 | evan | hm |
| 00:15:45 | mae enters the room. | |
| 00:16:07 | dbussink | evan: although that looks like something that could be moved to array bootstrap |
| 00:16:12 | evan | dbussink: use ary[ary.size] = val |
| 00:16:19 | enebo enters the room. | |
| 00:16:20 | evan | instead of << |
| 00:16:25 | evan | leave the core version |
| 00:16:33 | evan | just add a basic version to bootstrap |
| 00:17:38 | ctennis | evan, would you prefer I get rid of config_hash and just make do in socket.rb ? |
| 00:17:58 | evan | i think it's fine where it is |
| 00:18:02 | evan | just curious what it was used for |
| 00:18:17 | ctennis | convenience |
| 00:18:23 | evan | in socket.rb |
| 00:18:27 | evan | to get platform constants |
| 00:18:29 | evan | i'm assuming. |
| 00:18:30 | ctennis | right |
| 00:18:46 | ctennis | I need to iterate over them and actually const_define them |
| 00:18:53 | ctennis | or const_set, or whatever it's called |
| 00:24:06 | dbussink | evan: and we hit the next problem, no regexp available |
| 00:24:20 | evan | why do you need regexp? |
| 00:25:03 | dbussink | evan: i think i can do this with sub strings too |
| 00:25:09 | evan | you'll have to |
| 00:25:34 | rubuildius | Caleb Tennis: ed74e2677; 4725 examples, 17259 expectations, 0 failures, 0 errors |
| 00:25:35 | rubuildius | Eric Hodel: 5fcdb7f91; 4725 examples, 17259 expectations, 0 failures, 0 errors |
| 00:25:36 | dbussink | hmm, i see no sub string stuff in string bootstrap |
| 00:25:55 | evan | yeah |
| 00:25:56 | dbussink | evan: problem is that the keys are something like rbx.platform.typedef.etc |
| 00:26:02 | dbussink | and i need the etc part |
| 00:26:45 | evan | add a simple String#substring to bootstrap |
| 00:26:53 | ctennis | so if I have 3 failures for bin/ci on my machine but there aren't any via rubuildius, is that an issue? |
| 00:27:30 | evan | if str.substring(0, 16) == "rbx.platform.typedef" |
| 00:27:44 | evan | key = str.substring(17, str.size) |
| 00:31:55 | meisdave enters the room. | |
| 00:31:57 | KirinDave leaves the room. | |
| 00:33:32 | KirinDave enters the room. | |
| 00:34:28 | agile leaves the room. | |
| 00:35:50 | enebo leaves the room. | |
| 00:38:06 | brixen | Defiler: did you perchance try using #ifdef for bignum so we can use mp_init_set_int on 32bit platforms? |
| 00:48:54 | dbussink | evan: it is a problem that i changed bootstrap/kernel.rb:71 to read Unable to send #{meth} on #{self} instead of Unable to send #{meth} ? |
| 00:49:06 | dbussink | because that made at least my life easier when debugging |
| 00:51:53 | dbussink | ok, moment of truth, building with the new ffi types |
| 00:53:33 | lopex leaves the room. | |
| 00:55:20 | daesan enters the room. | |
| 00:56:21 | drbrain | what is doc/compiler_audit.txt? |
| 00:57:36 | perplexes leaves the room. | |
| 00:58:16 | perplexes enters the room. | |
| 01:03:09 | dbussink | brixen: man, what a work for a single bugfix that seemed so insignificant ;) |
| 01:04:25 | brixen | dbussink: heh, sounds like you are putting the smack-down on it :) |
| 01:04:42 | dbussink | brixen: going for the whole nine yards |
| 01:04:54 | dbussink | brixen: but it's looking good |
| 01:05:05 | dbussink | brixen: only some nasty bootstrap stuff that i had to go through |
| 01:06:19 | dbussink | brixen: i really like the integration with platform.conf, looks clean and where it belongs |
| 01:06:19 | brixen | nice |
| 01:06:32 | brixen | yeah, makes a lot more sense |
| 01:07:11 | b3b0p leaves the room. | |
| 01:07:43 | dbussink | now you can use :size_t, :uid_t, :dev_t and all that niceness in ffi's |
| 01:08:08 | brixen | that is awesome, seriously |
| 01:08:41 | brixen | FFI, imo, is ideal for extending, so this is good |
| 01:09:17 | dbussink | brixen: yeah, all file stat specs are ok on linux now :) |
| 01:09:25 | brixen | sweet |
| 01:09:35 | twbray_ enters the room. | |
| 01:09:52 | brixen | I can't wait till there are no more C bindings for stuff like db adapters, image libraries, etc |
| 01:10:07 | brixen | I've pulled out serious hair getting stuff like that running at times with rails |
| 01:11:25 | boyscout | 6 commits by Dirkjan Bussink |
| 01:11:26 | boyscout | * Remove excludes for File#stats specs; c3988a4 |
| 01:11:27 | boyscout | * Let the POSIX methods use the new FFI types; e80c737 |
| 01:11:28 | boyscout | * Add FFI types loading; def9cae |
| 01:11:29 | boyscout | * Fix typo in FFI types generator; 5ac51e7 |
| 01:11:30 | boyscout | * Added Hash and String bootstrap functionality for FFI types; d9a6618 |
| 01:11:31 | boyscout | ... |
| 01:11:39 | brixen | woot! |
| 01:11:50 | brixen | csotw |
| 01:12:05 | brixen | our tools are getting sharp |
| 01:12:10 | dbussink | csotw? |
| 01:12:21 | brixen | change set of the week |
| 01:12:30 | brixen | nominate on the ml |
| 01:12:43 | brixen | something evan started a while back |
| 01:13:10 | dbussink | hmm, anyone aware of the warnings on 64 bit? |
| 01:13:21 | dbussink | In function ‘rbs_uint_to_numeric’: warning: comparison is always false due to limited range of data type |
| 01:13:28 | brixen | yeah, just saw those today |
| 01:13:55 | brixen | we should poke Defiler, he's the 64bit pro :) |
| 01:14:29 | dbussink | it's bed time for me anyway |
| 01:14:37 | dbussink | 2:14 am here atm |
| 01:14:41 | brixen | yikes |
| 01:14:44 | brixen | well, thanks! |
| 01:15:03 | dbussink | i was just getting close, so then you just want to finish :) |
| 01:15:09 | dbussink | rue knows all about that ;) |
| 01:15:14 | brixen | heh, yeah |
| 01:16:00 | dbussink | this could probably fix those ffi dirent issues we had too |
| 01:16:27 | brixen | likely |
| 01:16:35 | brixen | we can revisit eventually |
| 01:16:44 | dbussink | 64 bit looks all ok too |
| 01:16:47 | brixen | stability is a big plus |
| 01:16:51 | brixen | nice |
| 01:16:58 | dbussink | so bed time |
| 01:17:00 | dbussink | nite! |
| 01:17:05 | brixen | nite! |
| 01:17:34 | dbussink leaves the room. | |
| 01:24:40 | rubuildius | Dirkjan Bussink: c3988a4a9; 4728 examples, 17262 expectations, 0 failures, 0 errors |
| 01:26:36 | evan | nice |
| 01:32:30 | Yurik enters the room. | |
| 01:35:11 | jeyr enters the room. | |
| 01:36:04 | KirinDave leaves the room. | |
| 01:39:15 | antares_ enters the room. | |
| 01:39:41 | Yurik | hey antares_ |
| 01:39:48 | antares | Yurik, hey |
| 01:44:10 | KirinDave enters the room. | |
| 01:44:21 | drbrain | I am broken! |
| 01:44:30 | evan | heh |
| 01:44:46 | drbrain | tries rebuild |
| 01:45:07 | loincloth enters the room. | |
| 01:47:39 | nicksieger leaves the room. | |
| 01:47:45 | drbrain | yay! |
| 01:49:03 | boyscout | 1 commit by Eric Hodel |
| 01:49:04 | boyscout | * Remove weird files that obviously aren't documentation.; 3b57c18 |
| 01:52:05 | teXnomancy leaves the room. | |
| 01:52:41 | squeegy enters the room. | |
| 01:52:57 | meisdave leaves the room. | |
| 01:56:11 | nicksieger enters the room. | |
| 01:59:43 | rubuildius | Eric Hodel: 3b57c1825; 4728 examples, 17262 expectations, 0 failures, 0 errors |
| 02:00:23 | Defiler | brixen: We could use an ifdef, sure |
| 02:00:39 | Defiler | brixen: ..but the version I wrote should be identical to set_int on a 32bit box |
| 02:00:51 | Defiler | brixen: I just conditionalized the number of loops |
| 02:01:14 | Defiler | Once those things that are uints are moved to defines, it will compile down to the same machine code |
| 02:02:15 | Defiler | Who changed rbs_uint_to_numeric? The new definition is retarded |
| 02:03:12 | Defiler | Hrm.. well.. that is too strong a word.. just.. shortsighted |
| 02:04:36 | evan | Defiler: i fixed that |
| 02:04:37 | evan | me |
| 02:04:39 | evan | no it's not |
| 02:04:44 | evan | the old way is broken |
| 02:04:47 | Defiler | I agree |
| 02:04:57 | evan | because C doesn't change bit patterns when you cast between signed and unsigned |
| 02:05:08 | Defiler | Oh, no.. I wasn't talking about that part.. that fix is totally right |
| 02:05:17 | evan | oh |
| 02:05:18 | evan | which part |
| 02:05:21 | Defiler | It is the FIXNUM_MAX thing. |
| 02:05:31 | evan | thats what i changed. |
| 02:05:48 | Defiler | I am going to wrap it in an #if, since if FIXNUM_WIDTH is greater than the size of an unsigned int, it doesn't need to check |
| 02:06:46 | evan | it just always makse a bignum then? |
| 02:07:11 | Defiler | It always fits in a Fixnum if FIXNUM_WIDTH >= (sizeof(unsigned int) * 8) |
| 02:07:25 | evan | oh, i see. |
| 02:07:27 | evan | gotcha |
| 02:07:34 | brixen | Defiler: well, the cost of creating a bignum is about the same as the cost of addition |
| 02:07:40 | brixen | which is really costly |
| 02:07:51 | Defiler | Yeah, libtommath is wicked badass |
| 02:07:54 | brixen | and on 32bit, it will do that internal loop 1/2 as much |
| 02:08:02 | brixen | when creating a Bignum |
| 02:08:51 | brixen | Defiler: bignum + bignum is about 2x faster than bignum + fixnum, so I was hoping to improve that a bit |
| 02:09:12 | wycats | I'm gonna try and tackle Zlib::Deflate tonite |
| 02:10:53 | brixen | Defiler: or am I missing count = sizeof(unsigned long) * 2? |
| 02:11:11 | twbray_ leaves the room. | |
| 02:11:53 | Defiler | brixen: 'missing'? |
| 02:12:08 | macournoyer enters the room. | |
| 02:12:16 | brixen | well, I always get confused, what is sizeof(long) on 32bit? |
| 02:12:22 | Defiler | 4 |
| 02:12:28 | brixen | ok, we're all good then ;) |
| 02:12:29 | Defiler | (on UNIX) |
| 02:13:12 | Yurik leaves the room. | |
| 02:15:00 | perplexes leaves the room. | |
| 02:15:52 | Defiler | Is it just me, or does cpu_instructions.c take way longer to compile these days? |
| 02:16:43 | smtlaissezfaire enters the room. | |
| 02:16:48 | evan | it's you. |
| 02:16:56 | evan | it changes as I work on it |
| 02:17:01 | evan | because the inlining changes. |
| 02:18:12 | perplexes enters the room. | |
| 02:19:12 | Defiler | OK. Just checking. :) |
| 02:19:41 | perplexes leaves the room. | |
| 02:21:08 | Defiler | Is ci running clean for people? |
| 02:21:20 | Defiler | I got some weird stuff when I rebased just a moment ago |
| 02:22:02 | brixen | I think drbrain mentioned some failures, but then everything was ok. perhaps rebuild? |
| 02:22:19 | Defiler | k |
| 02:22:23 | brixen | I'm off in my own world ;) |
| 02:22:30 | brixen | rubuildius seems happy |
| 02:27:23 | Defiler | git reset --hard <commit has prior to thing I want to kill> is the way to uncommit something, right? |
| 02:27:29 | Defiler | has = hash |
| 02:29:42 | evan | yeah |
| 02:29:54 | brixen | destructively |
| 02:30:10 | brixen | if you want to kill softly --soft :P |
| 02:30:42 | obvio171 enters the room. | |
| 02:33:57 | wycats | kill --me --softly |
| 02:34:28 | jbarnette leaves the room. | |
| 02:36:56 | wycats | make that kill me --softly |
| 02:41:03 | agile enters the room. | |
| 02:45:54 | VVSiz_ enters the room. | |
| 02:47:02 | KirinDave leaves the room. | |
| 02:47:04 | obvio leaves the room. | |
| 02:49:32 | _mutle enters the room. | |
| 02:49:48 | mutle leaves the room. | |
| 02:52:39 | gdagley leaves the room. | |
| 02:54:09 | twbray enters the room. | |
| 02:54:41 | drbrain | brixen: `rake rebuild` fixed it for me |
| 02:56:53 | brixen | cool |
| 02:58:10 | Defiler | evan: Is there a standard-ish built-in #define for 64-bit-ness? |
| 02:58:42 | evan | like |
| 02:58:51 | evan | to detect you're on a 64bit platform? |
| 02:58:54 | Defiler | Yeah |
| 02:59:02 | evan | not that I know of |
| 02:59:04 | twbray leaves the room. | |
| 02:59:16 | Defiler | That sucks. I wish sizeof was defined at preprocessor time |
| 02:59:37 | evan | we have a config #define for it |
| 02:59:55 | Defiler | Oh yeah |
| 03:00:06 | evan | CONFIG_WORDSIZE |
| 03:00:16 | evan | #if CONFIG_WORDSIZE == 64 |
| 03:03:09 | twbray enters the room. | |
| 03:03:16 | rubyconsumer enters the room. | |
| 03:03:53 | VVSiz leaves the room. | |
| 03:04:55 | boyscout | 1 commit by Wilson Bilkovich |
| 03:04:56 | boyscout | * Don't check the value of a uint on 64bit systems; it always fits in a Fixnum; baafab1 |
| 03:05:21 | Defiler | Not as clean as I want it, but all of the tricks to get at sizeof-like things at prepro time are worse =( |
| 03:06:57 | Defiler | Also, this is the best post on usenet http://groups.google.com/group/comp.std.c/msg/4852afc61a060d89?dmode=source |
| 03:09:27 | binary42 enters the room. | |
| 03:11:11 | drbrain | Defiler: definitely |
| 03:11:47 | Defiler | When you get slammed that hard, it is time to change your email address and never look bac |
| 03:11:50 | Defiler | k |
| 03:12:23 | brixen | Dir.glob is our canary in a coalmine |
| 03:12:33 | brixen | I had it at 45 sec, down from 95 |
| 03:12:39 | brixen | now it's back to 68 |
| 03:12:42 | KirinDave enters the room. | |
| 03:12:42 | brixen | dangit |
| 03:13:11 | brixen | that was just from changing some math ops, not the dir code |
| 03:13:50 | Defiler | I consider that a strong endorsement of our development plan |
| 03:14:20 | Defiler | We are going to have a smooth, polished stone when we are done :) |
| 03:14:29 | rubuildius | Wilson Bilkovich: baafab120; 4728 examples, 17262 expectations, 0 failures, 0 errors |
| 03:14:50 | smtlaissezfaire leaves the room. | |
| 03:15:13 | brixen | hmm, my benches run the same, wtf |
| 03:18:01 | meisdave enters the room. | |
| 03:18:53 | brixen | and now so does the glob bench |
| 03:19:17 | Defiler | Any chance you had some disk-intensive thing running in the background at the time? |
| 03:19:23 | Defiler | Also, is this bench somewhere where I can run it? |
| 03:19:45 | smtlaissezfaire enters the room. | |
| 03:19:47 | brixen | I'm pretty sure I didn't have anything else running |
| 03:19:57 | brixen | I just looked byt, it was 68 sec |
| 03:19:58 | brixen | who knows |
| 03:20:27 | brixen | Defiler: http://pastie.org/151130 |
| 03:20:47 | brixen | I'm only 3sec off the bottom now |
| 03:20:51 | brixen | 3sec longer |
| 03:21:26 | brixen | oh, nm, that run had profiler running |
| 03:22:35 | brixen | not th 68sec one, the 47sec one |
| 03:22:48 | brixen | it's so nice to have a fast profiler |
| 03:23:10 | brixen | so, yeah, without profiling it's 44.3 |
| 03:24:44 | antares_ leaves the room. | |
| 03:24:50 | wycats | "must have been before my time" |
| 03:24:54 | wycats | that's almost an XKCD |
| 03:25:25 | Defiler | I get 55.8 |
| 03:27:38 | Defiler | The 'stat and Float fixes' are local to your machine, right? |
| 03:27:47 | brixen | no, one sec.. |
| 03:28:18 | brixen | I don't remember the rev of the first set, but the second as after 359166e7 |
| 03:28:43 | Defiler | Maybe I am in dev mode or something |
| 03:29:16 | brixen | the first set I ran probably here: be478db9a1 |
| 03:29:29 | brixen | before the first attempt at the stat fixes :P |
| 03:30:37 | brixen | Defiler: do you feel like writing the for loop compiler plugin? it'd sure be nice |
| 03:30:38 | be9 enters the room. | |
| 03:32:32 | Defiler | I can give it a shot, yeah. Feel like writing up a description or specs of how it should work? |
| 03:33:55 | Defiler | OK, that's better. 35 seconds without dev mode |
| 03:34:03 | brixen | ahh, yeah |
| 03:34:15 | brixen | so, for(init, cond, loop) { } |
| 03:34:32 | brixen | for(i = 0; i < size; i += 1) { } |
| 03:35:04 | brixen | translates to: i = 0; while i < size do ... i+=1 end |
| 03:35:17 | Defiler | Sounds good |
| 03:35:41 | Defiler | Hopefully the grammar doesn't strip away empty/useless semicolons |
| 03:35:52 | brixen | yeah, wasn't sure about that |
| 03:35:55 | Defiler | Or else it will be hard to make for(i = 0;;;) work |
| 03:36:07 | brixen | evan said it would be pretty easy |
| 03:36:09 | skaar leaves the room. | |
| 03:36:12 | Defiler | Yeah, I agree |
| 03:36:30 | Defiler | similar transformations already happen for 'for x in zarg' |
| 03:36:32 | brixen | well, we don't necessarily have to support deviant versions like for(;;) |
| 03:36:38 | brixen | nice |
| 03:36:50 | brixen | we have loop equiv to for(;;) |
| 03:36:56 | headius enters the room. | |
| 03:37:11 | brixen | it's just a lot nicer than using while, compact and simple |
| 03:37:25 | Defiler | Yeah, it is a good construct |
| 03:37:40 | brixen | I remember when I was first learning C, a friend *hated* the for loop |
| 03:37:46 | brixen | (we both came from apple basic) |
| 03:38:00 | brixen | it just didn't make sense to him |
| 03:38:03 | brixen | heh |
| 03:38:10 | brixen | he was still thinking in line numbers |
| 03:38:47 | brixen | interesting experience in cognitive dissonance |
| 03:39:18 | Defiler | So, have you figured out where the bottleneck is on Dir glob? |
| 03:39:23 | Defiler | It is surprisingly slow. Heh |
| 03:42:01 | drbrain | Defiler: it's shittily implemented, for starters |
| 03:42:02 | KirinDave leaves the room. | |
| 03:43:01 | Defiler | Well, that's a pretty good reason, yeah |
| 03:43:12 | headius | evening |
| 03:43:18 | drbrain | how fast is File.fnmatch? |
| 03:45:57 | brixen | drbrain: I haven't benched it, but wouldn't be hard to |
| 03:46:35 | brixen | File::Stat was taking a lot of time, because the primitive was doing a lot of extra work |
| 03:46:48 | brixen | the new one is about 3x faster and close to mri |
| 03:47:06 | brixen | but, File.file? or File.directory? is still slow |
| 03:47:17 | Defiler | Don't forget File.door? :) |
| 03:47:22 | brixen | heh |
| 03:48:25 | drbrain | Dir.glob seems to spend all it's time in #fnmatch |
| 03:48:29 | drbrain | err, .fnmatch |
| 03:48:56 | brixen | drbrain: you profiled it? |
| 03:49:13 | brixen | when I profile it, still the majority of time is in File::Stat#initialize |
| 03:49:33 | drbrain | http://rafb.net/p/kk2oTH83.html |
| 03:49:42 | drbrain | that should be the equivalent amount of work |
| 03:52:18 | drbrain | yeah, so Dir.glob isn't the problem, fnmatch is |
| 03:53:25 | Defiler | Ouch, yeah.. fnmatch is giga-slow |
| 03:53:45 | brixen | heh, yeah |
| 03:54:44 | brixen | that's what I get profiling that bench: http://pastie.org/151354 |
| 03:55:19 | Defiler | Make sure you pass a number, btw.. ARGV.shift.to_i doesn't do anything useful with no arguments. Heh |
| 03:55:58 | brixen | yeah, I changed it to use ENV |
| 03:56:01 | drbrain | oh, yeah |
| 03:56:23 | Defiler | The first time I ran it I was all "omg fnmatch is badass on rubinius" |
| 03:56:35 | drbrain | an obvious improvement would be to pull out the static subs Hash |
| 03:59:10 | Defiler | Is this one of those scenarios where the platform fnmatch has totally different semantics from the matzruby one? |
| 03:59:58 | Defiler | Because this seems like an ffi or primitive waiting to happen, at first glance |
| 04:02:08 | brixen | Defiler: http://pastie.org/151359 |
| 04:02:21 | brixen | when I wrote the first fnmatch, I didn't feel like porting that |
| 04:02:33 | Defiler | jaezus |
| 04:03:16 | drbrain | fnmatch needs to be rewritten to not use regexps |
| 04:03:19 | brixen | but then the number of regexp transforms seems to have grown a bunch |
| 04:03:24 | Defiler | "CompareImpl: too large len" is a sweet error message |
| 04:03:45 | drbrain | Defiler: "block should not cheat" is the best error message |
| 04:03:51 | brixen | we should probably write a simple parser for it ala Sprintf one |
| 04:03:52 | Defiler | I concur, doctor |
| 04:05:01 | smtlaissezfaire leaves the room. | |
| 04:05:15 | brixen | Defiler: also, the landscape has changed, a year ago regexp was orders of magnitude faster than char by char testing |
| 04:05:18 | Defiler | So, does matzruby implement this in the pasted manner because it behaves differently from the UNIX version? |
| 04:05:23 | Defiler | Or because they want it to work the same way everywhere? |
| 04:05:40 | brixen | probably both, I don't recall the particulars |
| 04:06:02 | Defiler | It seems like we should make an effort to use the platform version if it is possible somewhere |
| 04:06:22 | brixen | of course, shell has no ** |
| 04:06:34 | brixen | unix fnmatch implements the globbing rules of the shell |
| 04:06:47 | Defiler | Oh yeah. I remember this discussion. Evil. |
| 04:06:57 | brixen | yeah |
| 04:07:43 | brixen | and windows is just a giant glob, so yeah, x-platform is a plus |
| 04:08:07 | drbrain | fnmatch ain't that big |
| 04:08:41 | drbrain | it's, like, 1/3 the size of Dir.glob |
| 04:09:06 | brixen | Defiler: and jruby's port of it is a lot nicer to look at |
| 04:09:58 | brixen | drbrain: feel like knocking it out, since Dir.glob is probably still fresh in your mind? ;) |
| 04:10:21 | drbrain | Dir.glob was forgotten as soon as I finished it |
| 04:10:23 | brixen | call it the 'matz zone' |
| 04:10:29 | brixen | heh |
| 04:11:42 | drbrain | there was a moment of "fucking linked lists" and then I was done |
| 04:11:47 | drbrain | that's all I remember |
| 04:12:00 | loincloth leaves the room. | |
| 04:15:41 | smtlaissezfaire enters the room. | |
| 04:16:54 | headius | mod_rubinius eh? |
| 04:17:10 | drbrain | headius: Dir.glob |
| 04:17:19 | headius | fun on a bun |
| 04:17:48 | headius | what about it |
| 04:19:38 | ezmobius leaves the room. | |
| 04:19:49 | drbrain | brixen wants me to do my Dir.glob magic with File.fnmatch |
| 04:19:59 | headius | you get all the fun jobs |
| 04:20:24 | headius | we went through a half-dozen impls just during my time on the project |
| 04:20:44 | headius | I think the straight-up port we have now was ola's work, with a fairly deep refactoring by tom |
| 04:21:16 | headius | we still run into problems on windows because MRI totally changes its behavior in several places for windows |
| 04:21:29 | evan | is getting his NPR on |
| 04:21:43 | drbrain | is getting his rm on |
| 04:22:35 | drbrain | String#% is my favorite templating language |
| 04:22:49 | femtowin enters the room. | |
| 04:23:59 | boyscout | 1 commit by Eric Hodel |
| 04:24:01 | boyscout | * Clean up after converting from textile; 52733a2 |
| 04:25:56 | drbrain | what's doc/block_arg_spec.rb ? |
| 04:27:45 | KirinDave enters the room. | |
| 04:30:03 | twbray leaves the room. | |
| 04:34:29 | rubuildius | Eric Hodel: 52733a276; 4728 examples, 17262 expectations, 0 failures, 0 errors |
| 04:36:44 | brixen | I think that was a test evan wrote when working on it way back |
| 04:36:51 | evan | yeah |
| 04:36:52 | evan | a test |
| 04:36:56 | evan | nuke thy file! |
| 04:40:21 | fork enters the room. | |
| 04:42:02 | drbrain | nuked |
| 04:42:57 | _ADS enters the room. | |
| 04:43:22 | dewd leaves the room. | |
| 04:47:05 | djwhitt enters the room. | |
| 04:48:37 | headius leaves the room. | |
| 04:49:50 | _ADS enters the room. | |
| 04:52:01 | djwhitt enters the room. | |
| 04:55:52 | djwhitt enters the room. | |
| 04:56:01 | djwhitt leaves the room. | |
| 04:56:40 | djwhitt enters the room. | |
| 04:57:35 | jtoy enters the room. | |
| 04:59:17 | evan | has a crazy idea. |
| 04:59:31 | agardiner | do tell! |
| 04:59:36 | evan | you'll like it |
| 04:59:37 | evan | :D |
| 04:59:43 | agardiner | crazy ideas are great! :-D |
| 04:59:48 | evan | so, i'm working on implementing the macro ops stuff |
| 04:59:57 | agardiner | oooh!!! neat |
| 05:00:04 | evan | i'm doing it in a different way that that paper though |
| 05:00:14 | evan | i'm not implementing a code cache |
| 05:00:48 | evan | every method is getting it's own set of blocks of code |
| 05:00:53 | evan | that simplifies things a bit |
| 05:01:13 | agardiner | every method == every CM? |
| 05:01:22 | evan | so, the other thing that paper talks about is that you can't inline operations that contain function calls |
| 05:01:27 | evan | yeah method == CM |
| 05:01:31 | agardiner | right |
| 05:01:35 | evan | so |
| 05:01:42 | evan | I /think/ i've found a way around that. |
| 05:01:43 | evan | :) |
| 05:01:45 | agardiner | because it breaks the flow |
| 05:01:50 | agardiner | wtf? |
| 05:01:51 | evan | no actually |
| 05:02:19 | evan | you can't inline operations taht call functions because assembly code to call functions is typically position dependent |
| 05:02:34 | evan | in that, the call is relative to the address of the instruction |
| 05:02:42 | evan | thats how PIC does it. |
| 05:02:53 | agardiner | right, yeah - branch +/- |
| 05:03:08 | evan | so if you copy that code, the offset from the instruction address is wrong |
| 05:03:13 | boyscout | 2 commits by Eric Hodel |
| 05:03:14 | boyscout | * RDocify (but not hooked into anything yet).; edc440c |
| 05:03:15 | boyscout | * You are not documentation, be gone from my realm\!; 11c51bd |
| 05:03:28 | agardiner | i think i see where you are going... |
| 05:03:31 | evan | sooo, here's my idea. |
| 05:03:44 | evan | no instructions do direct function calls. |
| 05:04:08 | evan | any function that needs to be called from a instruction are instead accessed via a proxy struct |
| 05:04:14 | evan | which contains a function poiters |
| 05:04:15 | evan | so |
| 05:04:19 | evan | cpu_open_module(...) |
| 05:04:20 | evan | becomes |
| 05:04:24 | evan | proxy->open_module(...) |
| 05:04:42 | evan | ie, I'm by hand making the code completely position independent |
| 05:04:43 | agardiner | ...clever! |
| 05:04:53 | evan | proxy is a local to all this code |
| 05:05:00 | evan | so it's just access off the stack |
| 05:05:09 | evan | so everything works great |
| 05:05:14 | agardiner | an extra indirection, but should easily be paid for by the savings |
| 05:05:19 | evan | EXACTLY. |
| 05:05:20 | doshea leaves the room. | |
| 05:05:30 | agardiner | fuck, that sounds really clever |
| 05:05:35 | drbrain | coughs "hopefully" |
| 05:05:39 | evan | well |
| 05:05:41 | agardiner | i wonder if it works... :-) |
| 05:05:50 | macournoyer leaves the room. | |
| 05:06:02 | evan | the function indirection costs almost nothing compared to a normal function call |
| 05:06:13 | evan | because the cpu is so memory bound |
| 05:06:27 | agardiner | yeah... and indirection is great for flexibility... |
| 05:06:29 | Defiler | That will make macro fusion super easy, right? |
| 05:06:41 | evan | as long as the memory stays in the cache, the one extra instruction is immeasuarable |
| 05:07:10 | evan | agardiner: right! so this actually fits in with eventually putting a Task into debug mode |
| 05:07:15 | boyscout | 2 commits by oleg dashevskii |
| 05:07:17 | boyscout | * Merge branch 'master' of git@git.rubini.us:code; a4d034c |
| 05:07:17 | boyscout | * Made a real precedence_spec.; 83a3726 |
| 05:07:26 | evan | by swapping out a struct full of function pointers for debug versions |
| 05:07:32 | agardiner | yeah... that's what i was thinking! :-P |
| 05:09:21 | agardiner | although... opcode fusion is probably really bad for debugging! |
| 05:09:36 | agardiner | there are no longer individual opcodes to step over |
| 05:10:08 | evan | right |
| 05:10:22 | evan | well, we'll just build in the ability to do the old behavior |
| 05:10:24 | agardiner | but that can probably be managed by enabling/disabling fusion during bytecode compilation |
| 05:10:26 | evan | so that there is no fusion |
| 05:10:55 | agardiner | so if you want to debug a CM, you just recompile the bytecodes without fusion |
| 05:11:37 | evan | yep |
| 05:11:56 | agardiner | and then the proxy stuff still exists in the opcodes anyway, so you can leverage that to insert debug hooks |
| 05:12:01 | evan | i'm using the autorelease MemoryPointer support to store the compiled code in a stable address too |
| 05:12:02 | agardiner | cool! |
| 05:12:47 | evan | hm |
| 05:12:54 | evan | i think i'm going to have activate_method to be a primitive |
| 05:12:59 | noclue123 enters the room. | |
| 05:13:30 | agardiner | oh? |
| 05:13:39 | evan | yeah |
| 05:13:40 | djwhitt leaves the room. | |
| 05:13:49 | evan | it's kinda silly as an instruction |
| 05:14:30 | djwhitt enters the room. | |
| 05:16:18 | agardiner | yeah, especially as its never called except via asm |
| 05:16:27 | evan | yea |
| 05:16:28 | rue | Well, this does not bode well for my sleep schedule |
| 05:16:36 | evan | what doesn't? |
| 05:16:37 | evan | you sleepy? |
| 05:16:42 | rue | Just slept from 4 to now :P |
| 05:16:46 | evan | ha! |
| 05:17:00 | agardiner | geez, we're gonna need a real good clean out of the opcodes before 1.0... starting to build up a bit of cruft |
| 05:17:04 | rue | On the upside, I will be here to keep dbussink company |
| 05:17:15 | rue | http://journal.kittensoft.org/2008/2/13/platform-abstraction-musings |
| 05:17:23 | agardiner | rue: you started full-time with EY yet? |
| 05:17:25 | rue | I posted my overview of the platform stuff |
| 05:17:31 | rue | agardiner: Yep, yesterday officially |
| 05:17:37 | agardiner | woot! |
| 05:17:57 | rubyconsumer leaves the room. | |
| 05:18:22 | rue | evan: Dunno if there is anything new in that but I tried to compile it quick |
| 05:19:19 | evan | cool |
| 05:19:52 | evan | agardiner: yeah, i think that i'm going to prune out the send_* instructions too |
| 05:20:11 | evan | getting rid of the 'optimized' ones that have a fixed arg count |
| 05:20:29 | agardiner | i was going to go through and put asserts into deprecated opcodes... |
| 05:20:36 | rubuildius | oleg dashevskii: a4d034cdb; 4766 examples, 17422 expectations, 0 failures, 0 errors |
| 05:20:37 | rubuildius | Eric Hodel: edc440c85; 4728 examples, 17262 expectations, 0 failures, 0 errors |
| 05:20:45 | agardiner | i think i saw you do that with one recently? |
| 05:20:57 | agardiner | anyway, its a good way to be sure an opcode is deprecated |
| 05:21:02 | evan | yeah |
| 05:21:12 | evan | just make sure the compiler isn't emitting them |
| 05:21:17 | evan | and the stables don't call them |
| 05:21:23 | evan | then we'll add sassert() to them |
| 05:21:27 | evan | for a week |
| 05:21:30 | evan | then we should just nuke them. |
| 05:21:52 | agardiner | have to replace them with something though, as a filler |
| 05:22:04 | agardiner | otherwise the bytecode changes |
| 05:22:13 | evan | true |
| 05:22:18 | evan | noop perhaps? |
| 05:22:25 | evan | i guess asserts is fine |
| 05:22:31 | evan | until we can nicely push out a bytecode change |
| 05:22:47 | agardiner | that's gonna be tricky... |
| 05:22:59 | agardiner | probably have to do it in two passes |
| 05:23:36 | michael enters the room. | |
| 05:24:19 | evan | yeah |
| 05:25:40 | twshelton leaves the room. | |
| 05:26:01 | rue | Eating breakfast, then I will finish up the sort and finish wsgi |
| 05:26:38 | evan | wow |
| 05:26:43 | evan | you are completely off time wise. |
| 05:27:26 | evan | HAWT |
| 05:27:26 | agardiner | on eastern european time...! |
| 05:27:28 | evan | it's working! |
| 05:27:36 | rue | I will see how this works for a few days ;) |
| 05:27:41 | agardiner | ^5s evan |
| 05:27:45 | evan | i've almost got bootstrap/archive.rbc running |
| 05:27:50 | Defiler | We need full time-zone coverage in IRC so that we can always be here to talk to trolls. :) |
| 05:27:58 | evan | fusion has turned it from 6 ops to 2 |
| 05:28:51 | agardiner | two? wtf! why isn't it 1? :-D |
| 05:29:13 | boyscout | 1 commit by oleg dashevskii |
| 05:29:14 | boyscout | * Remove tests that have been superseded by precedence_spec.; 5c75721 |
| 05:29:15 | evan | heh |
| 05:32:17 | evan | crap |
| 05:32:32 | agardiner | oh-oh... |
| 05:32:51 | evan | ok, i'm going to take a short break. |
| 05:33:13 | agardiner | k |
| 05:39:31 | rubuildius | oleg dashevskii: 5c75721d5; 4764 examples, 17420 expectations, 0 failures, 0 errors |
| 05:40:12 | tmpk | Say, is the mark-sweep in shotgun marking objects directly? |
| 05:40:17 | tmpk | I.e.: iobj->Marked = TRUE; |
| 05:43:46 | agardiner | i don't belive so |
| 05:44:16 | agardiner | marks are kept separate from the object so that you can fork at little cost |
| 05:44:46 | tmpk | Yeah, which is why I'm a bit confused. |
| 05:44:56 | tmpk | void mark_sweep_clear_mark(STATE, OBJECT iobj) { iobj->Marked = FALSE; |
| 05:44:58 | tmpk | } |
| 05:45:54 | tmpk | I'm wondering how well CoW will work with a compacting mature space. |
| 05:46:21 | tmpk | I guess it depends how the compacting is done. |
| 05:47:55 | agardiner | mark_sweep_clear_mark is not called on most object's |
| 05:48:09 | agardiner | looks like it is used for contexts or something |
| 05:48:27 | agardiner | also, i'm not sure if the mature space is compacting at present |
| 05:50:59 | tmpk | That would be an interesting problem: try and minimize movement while also minimizing fragmentation. |
| 05:51:17 | tmpk | Can you tell me a bit about contexts? |
| 05:52:06 | agardiner | sure |
| 05:52:12 | agardiner | what do you want to know? |
| 05:53:47 | daesan leaves the room. | |
| 05:55:00 | tmpk | My understanding is they're used to implement some form of continuations? |
| 05:55:20 | agardiner | well, continuations are just easy to do with contexts |
| 05:55:52 | agardiner | basically, they are like a stack frame, but they are actually first class objects stored on the heap |
| 05:56:02 | agardiner | and each context has a pointer back to its caller |
| 05:56:45 | tmpk | Can I copy it by value? |
| 05:56:48 | agardiner | so continuations are easy - just save the context at the point you want to be able to resume later |
| 05:56:49 | tizianobis enters the room. | |
| 05:56:58 | tmpk | Ah, okay. |
| 05:57:26 | tmpk | Where in the source tree should I dig if I want to look at how they're implemented? |
| 05:57:31 | agardiner | contexts have a dup method |
| 05:57:32 | defunkt enters the room. | |
| 05:57:52 | agardiner | well, contexts are partly in Ruby and partly in C |
| 05:58:43 | agardiner | the ruby side is in kernel/bootstrap/context.rb and kernel/core/context.rb |
| 05:59:02 | agardiner | in the bootstrap file, you'll see a number of primitive calls |
| 05:59:22 | agardiner | the code for the primitives is in shotgun/lib/primitives.rb |
| 05:59:46 | agardiner | this in turn will call various C functions |
| 06:00:35 | agardiner | this will lead you pretty deep into shotgun |
| 06:00:58 | tongueroo leaves the room. | |
| 06:01:02 | rue | Man, we are *close* to 5k |
| 06:01:32 | agardiner | nah, still a coupla hundred off |
| 06:01:43 | agardiner | probably take a week |
| 06:02:00 | femtowin leaves the room. | |
| 06:02:36 | smtlaissezfaire leaves the room. | |
| 06:02:42 | tmpk | Ah, primitives.rb is C embedded in Ruby? |
| 06:02:58 | tmpk | Thanks, I'll go digging. :) |
| 06:02:58 | agardiner | yeah |
| 06:03:27 | agardiner | np! :-) |
| 06:03:55 | femtowin enters the room. | |
| 06:05:09 | noclue123 leaves the room. | |
| 06:08:16 | tmpk | Rubinius has a monomorphic inline cache? |
| 06:08:37 | agardiner | it used to |
| 06:08:42 | agardiner | now it has something better |
| 06:08:52 | tmpk | Do tell. :D |
| 06:09:21 | agardiner | The cache has been replaced by the notion of a SendSite |
| 06:10:00 | agardiner | Different sendsite implementations are used for different types of method calls |
| 06:10:42 | agardiner | a basic sendsite for normal method calls implements a monomorphic cache |
| 06:10:57 | agardiner | but there are other sendsites optimised for primitive calls and ffi calls |
| 06:11:38 | cjheath_ leaves the room. | |
| 06:11:44 | agardiner | and plans for other sendsite variations in the works |
| 06:16:09 | RyanTM leaves the room. | |
| 06:16:31 | tmpk | Are all cached methods kept in one place? |
| 06:17:13 | tizianobis leaves the room. | |
| 06:17:28 | tmpk | It looks like the GC is running through an array of them. |
| 06:17:53 | agardiner | well, sendsites hold a reference to a Selector, which in turn points to a method |
| 06:18:05 | agardiner | and all Selectors are kept in an array |
| 06:18:33 | twbray enters the room. | |
| 06:18:53 | tmpk | Why the extra indirection? |
| 06:19:07 | agardiner | methods can be overridden |
| 06:19:28 | agardiner | so send sites point to a selector, and the selector is updated when a new method overrides an old one |
| 06:19:42 | agardiner | that way, all the send sites don't need to be flushed |
| 06:19:50 | tmpk | Ah, got it. |
| 06:20:23 | agardiner | Selectors also keep references to the sendsites that reference them |
| 06:20:34 | agardiner | so you can find out every place a method is called from |
| 06:20:41 | agardiner | which is pretty neat |
| 06:20:48 | tmpk | Damn, I want that at work. |
| 06:20:53 | agardiner | hehe |
| 06:22:10 | tmpk | Well, cross fingers that by this time next year I can. o.o-b |
| 06:26:34 | brixen | agardiner: do you think super vs super(a) would be faster? |
| 06:27:00 | brixen | agardiner: since I won't be passing anything different than was passed to the method |
| 06:27:19 | brixen | i.e. would it result in less stack manipulation? |
| 06:28:51 | twbray leaves the room. | |
| 06:28:55 | michael leaves the room. | |
| 06:28:56 | agardiner | brixen: not certain, but i don't think it will make a difference |
| 06:29:02 | brixen | ok |
| 06:29:12 | agardiner | all super calls ultimately pass through the same dispatch logic |
| 06:29:35 | brixen | right, curious what happens before the ultimate ;) |
| 06:30:10 | brixen | I can bench it, just thought you might know |
| 06:30:19 | agardiner | did you check the bytecode for the two different calls? |
| 06:30:35 | agardiner | that should indicate whether there is anything extra going on |
| 06:30:35 | brixen | yeah |
| 06:30:40 | cjheath enters the room. | |
| 06:31:14 | brixen | the diff is zsuper vs e.g. [:super, [:array, [:lvar, :a, 0]]] |
| 06:31:39 | brixen | but the asm looks the same |
| 06:31:54 | agardiner | yeah, i think zsuper and super are normalized in the compiler |
| 06:32:04 | agardiner | so if the asm is the same, there's no diff |
| 06:32:05 | brixen | yeah, makes sense |
| 06:34:13 | defunkt leaves the room. | |
| 06:35:38 | defunkt enters the room. | |
| 06:38:03 | rue | Huh, it actually looks like it was right |
| 06:38:19 | rue | An actual reduction from ~45s to 0.2s o.O |
| 06:38:44 | brixen | rue: that's awesome! |
| 06:39:00 | agardiner | wow! nice work |
| 06:39:10 | kofno_away leaves the room. | |
| 06:39:11 | brixen | it was taking 18sec to Dir[] specs, 13 of that was sort |
| 06:39:37 | be9 | has just succeeded to run "rake distclean rebuild" with rubinius. rake can be turned self-hosted :) |
| 06:39:42 | agardiner | > two orders of magnitude! |
| 06:39:53 | brixen | be9: nice! |
| 06:40:07 | agardiner | be9: awesome! |
| 06:40:14 | agardiner | things are really rolling along... |
| 06:40:18 | be9 | brixen: rake distclean is VERY slow though. maybe due this stuff with Dir[] |
| 06:40:36 | brixen | yeah, likely |
| 06:43:10 | be9 | btw how profiling can be done in rubinius? |
| 06:44:04 | brixen | be9: shotgun/rubinius -rprofile <script> |
| 06:44:07 | brixen | is one way |
| 06:44:08 | agardiner | gotta run... cu l8r |
| 06:44:12 | brixen | agardiner: later |
| 06:44:14 | be9 | brixen: ok |
| 06:44:22 | agardiner leaves the room. | |
| 06:45:42 | jbarnette enters the room. | |
| 06:50:53 | matrixise leaves the room. | |
| 07:09:43 | rue | Hmm, I wonder if rbx can manage this |
| 07:10:21 | rue | strings = ('aaaaaaaaaaaaaaaaaaaa'..'zzzzzzzzzzzzzzzzzzzzz').to_a |
| 07:11:14 | meisdave leaves the room. | |
| 07:13:57 | be9 | rue: MRI isn't specifically good at this |
| 07:14:25 | rue | I want to see a bit how the VM holds up |
| 07:14:48 | rue | At this point we are sorting in-place anyway |
| 07:16:27 | twbray enters the room. | |
| 07:22:51 | benburkert leaves the room. | |
| 07:27:58 | jtoy leaves the room. | |
| 07:30:46 | brixen | rue: in mri, you can do 0xffff_ffff << 0xffff_ffff |
| 07:30:52 | brixen | I don't recommend it, but you can |
| 07:31:06 | brixen | we don't allow the second arg to be a bignum |
| 07:32:52 | aotearoa enters the room. | |
| 07:35:19 | be9 | hmm, ran "rake distclean" under rubinius -rprofile, http://pastie.caboo.se/151421 |
| 07:35:40 | be9 | wassup with String#[]? |
| 07:43:37 | brixen | be9: it needs work |
| 07:43:55 | brixen | be9: we have a move_bytes primitive on ByteArray that is fairly new |
| 07:44:02 | brixen | we need to use it |
| 07:44:13 | brixen | all of String needs review and opts |
| 07:45:02 | brixen | String is about 25% of that profile |
| 07:45:20 | be9 | so, the stats are not cumulative, as I see |
| 07:45:24 | brixen | in just the top 6 slots |
| 07:45:34 | brixen | be9: the profile? |
| 07:45:43 | brixen | it's a sampling profile, so statistical |
| 07:46:03 | be9 | i see |
| 07:48:56 | be9 | wonder where these 10% are spent in String#[] |
| 07:51:42 | brixen | depends on the arguments to it |
| 07:51:49 | brixen | String#[] is quite the method |
| 07:52:18 | brixen | #substring is pretty high in the profile |
| 07:52:51 | brixen | so I'd guess a lot of [n,m] or [n..m] |
| 07:53:48 | be9 | yeah, there're no calls to subpattern seen |
| 07:55:22 | be9 | now [] is nearly as expensive as gsub - what a nonsense |
| 07:56:59 | lstoll enters the room. | |
| 07:59:27 | evan | be9: running -rprofile during distclean is odd |
| 07:59:34 | evan | i'm not sure what you're profiling there |
| 07:59:39 | evan | i guess compiling kernel/ |
| 08:01:07 | scoopr | I'm guessing his profiling rbx running rake more than anything |
| 08:01:28 | evan | he's running rake via rbx?! |
| 08:01:30 | michael enters the room. | |
| 08:01:33 | brixen | yeah |
| 08:01:37 | d2dchat leaves the room. | |
| 08:01:41 | brixen | most of the work is in the compiler though |
| 08:01:44 | evan | ooh |
| 08:01:45 | KirinDave leaves the room. | |
| 08:01:48 | evan | so i see. |
| 08:01:48 | scoopr | 083936 * be9 has just succeeded to run "rake distclean rebuild" with rubinius. rake can be turned self-hosted :) |
| 08:01:51 | evan | well |
| 08:01:51 | brixen | I guess it would be hard to profile rake |
| 08:02:05 | evan | his profile would just be the work rake did |
| 08:02:46 | brixen | evan: so all the Compiler:: stuff is compiling rake then? |
| 08:03:01 | evan | likely |
| 08:03:06 | brixen | must be, it subprocesses the commands |
| 08:03:07 | evan | or the stuff in rakelib/ |
| 08:03:07 | brixen | yeah |
| 08:03:39 | be9 | yeah, that's it |
| 08:04:13 | evan | run with -ps too |
| 08:04:26 | evan | i'm curious what the selector distribution is. |
| 08:05:06 | brixen | we have such fun tools now! |
| 08:05:16 | be9 | evan: will do now |
| 08:06:33 | evan | brixen: :D |
| 08:06:54 | evan | so, Squeak has a MessageTally class that is basically the same as our Sampler |
| 08:06:55 | evan | you do |
| 08:07:02 | jtoy enters the room. | |
| 08:07:15 | evan | MessageTally spyOn [ run alot: 10000 ] |
| 08:07:27 | evan | and it outputs some stats on what the block did. |
| 08:08:33 | brixen | hmm, that's nice |
| 08:08:46 | brixen | I wonder how we could do that |
| 08:08:55 | evan | exactly the same |
| 08:08:59 | brixen | just add a method to Sampler I suppose |
| 08:08:59 | evan | we'd have to restrict it |
| 08:09:14 | evan | so that we're only spying on one block at a time |
| 08:09:19 | evan | since the Sampler is global |
| 08:09:45 | brixen | but we can reset the sampler from ruby, I thought |
| 08:09:55 | evan | sure |
| 08:10:07 | evan | but you can't have 2 Thread's running spy_on at the same time |
| 08:10:13 | evan | because the results will mix |
| 08:10:17 | brixen | ah right |
| 08:10:18 | be9 | evan: only output selectors count, 1609 |
| 08:10:28 | evan | be9: could you pastie the other output? |
| 08:11:04 | be9 | evan: http://pastie.caboo.se/151426 |
| 08:11:41 | evan | one thing the Squeak sampler does that I need to add is it adds if a primitive is running |
| 08:11:48 | evan | that makes the sampler output more clear |
| 08:11:58 | evan | right now, if a primitive runs a lot |
| 08:12:13 | evan | then the person that called the primitive shows up as the busy one |
| 08:12:14 | evan | not the primitive |
| 08:12:30 | jbarnette leaves the room. | |
| 08:12:55 | brixen | evan: oh, I was going to ask you about that |
| 08:13:00 | fork leaves the room. | |
| 08:13:03 | brixen | when I ran it with the math ops |
| 08:13:05 | be9 | evan: could the cumulative stats be collected just as gprof does? |
| 08:13:13 | brixen | I didn't get the method calling the primitive |
| 08:13:37 | brixen | evan: look at line 15 of core/sampler.rb |
| 08:13:40 | brixen | I got that message |
| 08:13:43 | evan | be9: cumulative in what way? |
| 08:14:10 | evan | brixen: huh. interesing. |
| 08:14:37 | evan | brixen: could have happened while the MethodContext was being initialized is all |
| 08:14:42 | be9 | evan: you ever saw gprof's output? there's a plain profile and a cumulative one |
| 08:14:54 | evan | yeah |
| 08:14:54 | michael leaves the room. | |
| 08:14:58 | evan | we can do all that |
| 08:15:01 | evan | we have all the data |
| 08:15:09 | evan | someone just needs to code it in core/sampler.rb |
| 08:15:28 | be9 | evan: ok :) cumulatives are great in finding bottlenecks |
| 08:18:06 | _ADS leaves the room. | |
| 08:18:43 | brixen | hah, specs are so bomb |
| 08:19:20 | thehcdreamer enters the room. | |
| 08:19:59 | pietia enters the room. | |
| 08:23:58 | aotearoa leaves the room. | |
| 08:26:51 | aotearoa enters the room. | |
| 08:33:29 | GMFlash leaves the room. | |
| 08:36:26 | lstoll leaves the room. | |
| 08:50:18 | octopod enters the room. | |
| 08:52:09 | boyscout | 2 commits by Brian Ford |
| 08:52:10 | boyscout | * More numeric cleanup. Added Bignum comparison primitives.; d57c464 |
| 08:52:11 | boyscout | * Reworked Fixnum, Bignum arithmetic primitives.; f7ff8d7 |
| 08:52:19 | dbussink enters the room. | |
| 08:52:33 | brixen | morgen dbussink :) |
| 08:52:50 | dbussink | brixen: morning |
| 08:52:52 | dbussink | brixen: still up? |
| 08:53:02 | be9 | dbussink: morning |
| 08:53:05 | brixen | heh, for a bit |
| 08:54:02 | rue | Morning |
| 08:54:27 | dbussink | wow, 3 mornings for me :P |
| 08:59:42 | dbussink | brixen: any luck on speeding up fixnum / bignum? |
| 08:59:48 | w1rele55 leaves the room. | |
| 09:00:50 | w1rele55 enters the room. | |
| 09:01:16 | _mutle leaves the room. | |
| 09:03:19 | brixen | dbussink: yeah, indeed |
| 09:03:52 | brixen | dbussink: one sec, I'll update the paste |
| 09:04:28 | rubuildius | Brian Ford: d57c46448; 4764 examples, 17420 expectations, 0 failures, 0 errors |
| 09:05:28 | dbussink | brixen: which paste? |
| 09:05:36 | brixen | dbussink: http://pastie.org/151073 |
| 09:05:59 | brixen | bignum + fixnum and vice versa can be optimized further with a change to how bignums are created |
| 09:06:21 | dbussink | really nice :) |
| 09:06:56 | brixen | well, it's a better approach really |
| 09:07:04 | ragge enters the room. | |
| 09:07:09 | brixen | Bignum, Fixnum, and Float are primitive types |
| 09:07:21 | jero5 leaves the room. | |
| 09:07:38 | Arjen_ enters the room. | |
| 09:07:45 | brixen | the implementation will allow you do math with other classes that act like those, but there's no reason not to have them be as fast as possible |
| 09:08:50 | dbussink | well, like a famous dutchman said, elegance is not a dispensable luxury :_ |
| 09:08:54 | dbussink | :) |
| 09:10:35 | mutle enters the room. | |
| 09:11:51 | brixen | heh |
| 09:13:35 | dbussink | rue: what do you think of the type abstraction i put in? |
| 09:19:39 | twbray leaves the room. | |
| 09:21:45 | rue | dbussink: Looks good |
| 09:21:53 | rue | We want to split it up still but it works nicely |
| 09:22:10 | rue | dbussink: http://journal.kittensoft.org/2008/2/13/platform-abstraction-musings |
| 09:22:15 | dbussink | yeah, i've read it |
| 09:22:32 | rue | OK, yep, that was the idea I bounced |
| 09:22:41 | dbussink | good thing we probably don't need anything below posix right now ;) |
| 09:23:07 | rue | Actually, I think we are already doing various workarounds for platforms |
| 09:23:33 | rue | Hrm. |
| 09:23:43 | rue | I do not like this array.sort {1} spec |
| 09:23:58 | dbussink | don't worry about the result |
| 09:24:16 | dbussink | the only thing that it should spec is that it doesn't fail because of an endless loop |
| 09:24:29 | rue | MRI is not stable there either |
| 09:24:37 | dbussink | nope, i already saw that too |
| 09:25:02 | rue | Hm, that was causing an endless loop? |
| 09:25:03 | dbussink | but we already discussed that the result doesn't matter, only that it shouldn't fail |
| 09:25:28 | dbussink | yeah, because nothing was equal to the pivot, so the same right was pushed down each time |
| 09:33:18 | defunkt leaves the room. | |
| 09:35:27 | hornbeck leaves the room. | |
| 09:35:36 | hornbeck enters the room. | |
| 09:41:31 | mernen leaves the room. | |
| 09:45:24 | dbussink | we really need something to set global gcc parameters that apply everywhere, from make shotgun to the struct/const/type generators |
| 09:51:00 | boyscout | 2 commits by Dirkjan Bussink |
| 09:51:01 | boyscout | * Add LFS to ConstGenerator; 3b60986 |
| 09:51:02 | boyscout | * Add LFS to TypesGenerator; fc373eb |
| 09:52:29 | GMFlash enters the room. | |
| 09:55:23 | wifelette leaves the room. | |
| 09:59:03 | femtowin leaves the room. | |
| 09:59:23 | GMFlash leaves the room. | |
| 09:59:31 | GMFlash enters the room. | |
| 10:02:34 | chris2 enters the room. | |
| 10:04:37 | rubuildius | Dirkjan Bussink: 3b60986f3; 4764 examples, 17420 expectations, 0 failures, 0 errors |
| 10:07:50 | be9 leaves the room. | |
| 10:10:00 | boyscout | 1 commit by Dirkjan Bussink |
| 10:10:01 | boyscout | * Move erb.rb from stdlib to lib, as it has specs now; af164d1 |
| 10:11:34 | wycats leaves the room. | |
| 10:13:04 | dbussink | brixen: dunno if your still there, but the coercion changes broke some Date specs |
| 10:14:03 | langenberg enters the room. | |
| 10:16:50 | brixen | dbussink: ah, ok I'll check them |
| 10:19:28 | rubuildius | Dirkjan Bussink: af164d1a5; 4764 examples, 17420 expectations, 0 failures, 0 errors |
| 10:23:05 | brixen | I need to add the library specs into ci |
| 10:23:25 | dbussink | will get us over the 5000 instantly ;) |
| 10:23:30 | scoopr | did someone here once plan on making a "cspec" or, something like rspec, but for specifially testing c code? |
| 10:24:21 | brixen | scoopr: yeah, I did |
| 10:24:46 | brixen | but it ended up looking like C, so I'm not sure the benefit |
| 10:24:57 | brixen | haven't looked at it in months |
| 10:25:07 | brixen | dbussink: ah, Rational hmm |
| 10:25:24 | imajes leaves the room. | |
| 10:25:35 | scoopr | ah |
| 10:25:36 | brixen | well, our 2 Rational specs pass heh |
| 10:25:51 | scoopr | could you still show an example what it ended up being? |
| 10:26:55 | brixen | scoopr: one sec, looking for it |
| 10:27:03 | scoopr | I'd feel more comfortable if there were even some mechanism of testing our c++ codebase when I feel like it, and somehow all the macro/template trickery I've seen hurt my eyes |
| 10:28:36 | brixen | scoopr: http://pastie.org/151456 |
| 10:28:45 | brixen | scoopr: that doesn't run, it's just different ideas |
| 10:29:44 | scoopr | ah right |
| 10:30:51 | brixen | scoopr: I was dubious that it would end up much better than just using something like: http://cutest.sourceforge.net/ |
| 10:31:02 | scoopr | I was looking at cutest too |
| 10:31:34 | brixen | also, I thought that as cuby/garnet came along, I might get better ideas ;) |
| 10:31:46 | scoopr | heh |
| 10:38:36 | dbussink | brixen: http://rubinius.lighthouseapp.com/attachments/11731/0001-Implement-File.truncate-passes-specs.patc h |
| 10:38:45 | dbussink | brixen: he's using :off_t right away :) |
| 10:38:48 | dbussink | brixen: i like it :) |
| 10:40:31 | brixen | nice! |
| 10:42:17 | ragge | that's me... really awesome work with the ffi stuff |
| 10:42:34 | brixen | well, this is odd: a = Rational(1,2); a.coerce 1 => [R,R]; 1.coerce a => [Float, Float]; a.coerce a => No method 'coerce' on an instance of Rational. |
| 10:42:56 | dbussink | that should just give a shouldn't it? |
| 10:43:02 | dbussink | ragge: thnx :) |
| 10:43:35 | brixen | dbussink: well, oddly, there's #coerce on a if called with 1, but not with a? |
| 10:43:39 | ragge | my first patch though, hope it is ok... had a little fight with git format-patch... |
| 10:45:16 | hornbeck leaves the room. | |
| 10:45:49 | dbussink | ragge: looks sane to me |
| 10:46:47 | brixen | dbussink: hah, Rational#coerce rational.rb:329 |
| 10:46:59 | brixen | that's a stupid library |
| 10:47:13 | brixen | "um, I don't know how to coerce myself. punt" |
| 10:47:35 | dbussink | that's really stupid |
| 10:48:29 | brixen | what's the default for Numeric#coerce then? try to make it a float? |
| 10:49:01 | dbussink | looks like it doesn't have that coerce function |
| 10:49:07 | brixen | I suppose if defined obj.coerce Float(obj) |
| 10:49:29 | lvmc enters the room. | |
| 10:51:56 | brixen | dbussink: yep, looks like Numeric#coerce should call #to_f if #coerce is defined in the obj, but it supers |
| 10:52:29 | brixen | dbussink: ok, simple fix |
| 10:52:42 | brixen | I confirmed that works |
| 10:52:53 | brixen | but, I think I'll sleep some now :) |
| 10:53:09 | dbussink | looks like 3 am might be a good moment to do that |
| 10:53:16 | brixen | heh |
| 10:53:21 | brixen | catch ya on the flip side |
| 10:53:24 | dbussink | nite! |
| 10:53:27 | brixen | nite! |
| 10:53:33 | brixen | (deja vu) |
| 10:53:50 | boyscout | 1 commit by Dirkjan Bussink |
| 10:53:51 | boyscout | * Update excludes for File#truncate; c968d5c |
| 10:54:19 | dbussink | ragge: there you go :) |
| 10:56:57 | mae__ enters the room. | |
| 10:57:13 | mae | to |
| 10:57:41 | mae | herro |
| 10:59:31 | VitaRara leaves the room. | |
| 10:59:47 | ragge | dbussink: thank you... |
| 11:00:00 | ragge | dbussink: seemt like this one can be closed now no? http://rubinius.lighthouseapp.com/projects/5089/tickets/56-support-for-__int64_t-types-in-ffi |
| 11:00:25 | dbussink | ragge: ah yeah, i'll close that |
| 11:01:39 | mae__ leaves the room. | |
| 11:01:48 | mae__ enters the room. | |
| 11:02:09 | boyscout | 1 commit by Dirkjan Bussink |
| 11:02:10 | boyscout | * Module#undef_method should accept string parameter, not only symbols by Nikolai Lugov ...; c894a6c |
| 11:02:14 | brixen | dbussink: shh :P simple fix. I had intended to push the #coerce closer to the classes (e.g. Fixnum), but didn't finish it |
| 11:02:21 | mae | hmm |
| 11:02:45 | dbussink | brixen: hehe :) |
| 11:03:03 | boyscout | 1 commit by Brian Ford |
| 11:03:04 | boyscout | * Return #coerce to Numeric from Integer.; 39fe528 |
| 11:03:05 | brixen | dbussink: all better |
| 11:03:18 | cris_kiev enters the room. | |
| 11:03:45 | dbussink | brixen: now go to sleep, i order you! :p |
| 11:04:16 | brixen | ok! |
| 11:04:28 | rubuildius | Dirkjan Bussink: c968d5c29; 4770 examples, 17433 expectations, 0 failures, 0 errors |
| 11:04:50 | mae__ leaves the room. | |
| 11:05:56 | hassox leaves the room. | |
| 11:06:48 | dbussink | ragge: you know the drill if you want to be able to commit yourself? |
| 11:08:33 | ragge | dbussink: pastie pubkey to evan? |
| 11:08:40 | Arjen_ leaves the room. | |
| 11:08:50 | Arjen_ enters the room. | |
| 11:09:06 | dbussink | ragge: yeah, but you'll have to wait until he awakes :) |
| 11:09:27 | Arjen_ leaves the room. | |
| 11:09:47 | halorgium | dbussink: wouldn't it make sense to have another git repo which had the pubkeys :) |
| 11:10:08 | halorgium | then it'd be implicit for commiters to be able to allow new members |
| 11:10:48 | ragge | dbussink: no hurry... i think it might be good for me to push the first few patches manually, ie. through other people... |
| 11:12:46 | dbussink | ragge: be more confident |
| 11:13:20 | dbussink | halorgium: well, that could go haywire, dunno how other people think about that |
| 11:13:44 | dbussink | ragge: you can always ask for a review in here, if you pastie something |
| 11:14:26 | rubuildius | Brian Ford: 39fe52858; 4773 examples, 17439 expectations, 0 failures, 0 errors |
| 11:14:33 | halorgium | dbussink: of course it could |
| 11:14:50 | halorgium | but you have post-receive-pack hooks to stop that |
| 11:16:23 | ragge | dbussink: ah, yes, of course... that sounds calming :) |
| 11:16:36 | Arjen_ enters the room. | |
| 11:20:15 | tizianobis enters the room. | |
| 11:20:30 | hassox enters the room. | |
| 11:22:18 | rue | Huh, weird |