Index

Show enters and exits. Hide enters and exits.

00:01:20Maledictus enters the room.
00:07:46asap18 leaves the room.
00:09:57joearnol_ enters the room.
00:11:06joearnold leaves the room.
00:18:16rueHeh. Should just have split Message in the summer.
00:19:39brixendepending on gestation, spring is more a time for splitting and summer a time for joining
00:21:25macournoyer enters the room.
00:22:11macournoyer leaves the room.
00:27:16brynary leaves the room.
00:35:55rueAlright, tarcieri, I am getting more Reia e-mail than all my Ruby stuff combined
00:36:06qbproger enters the room.
00:36:08tarcierihaha really?
00:39:06slavais there a lot of interest in Reia these days?
00:54:23jarib enters the room.
00:58:27jarib leaves the room.
00:58:30jarib enters the room.
01:00:05enebo leaves the room.
01:00:21ruetarcieri: Granted I am only on -core, rubinius-dev and the Waves list but still
01:00:24joearnol_ leaves the room.
01:00:37rueOh, and ffi
01:00:46joearnold enters the room.
01:03:32ezmob leaves the room.
01:04:50ezmob enters the room.
01:07:24enebo enters the room.
01:10:01enebo leaves the room.
01:14:47djb leaves the room.
01:16:24headius leaves the room.
01:17:08stepheneb leaves the room.
01:20:41brynary enters the room.
01:26:37cored enters the room.
01:33:44lopex leaves the room.
01:50:41outerim leaves the room.
01:53:32ezmob leaves the room.
01:57:23slavaevan: http://paste.factorcode.org/paste?id=535
02:00:27benny leaves the room.
02:01:37joearnold leaves the room.
02:04:33ryanlowe enters the room.
02:08:18benny enters the room.
02:10:08asap18 enters the room.
02:11:07binary42 leaves the room.
02:16:42brixenslava: sweet
02:16:46harryv enters the room.
02:17:07brixenslava: I think there's a t in scratch
02:17:37slavaI know
02:17:41slavait was a typo in my listener
02:17:50brixenyeah, I figured :)
02:18:08brixenjust taking the opportunity to needle you
02:19:04jashmenn leaves the room.
02:26:12mernen enters the room.
02:27:30rueOK, yeah rm Twitterrific
02:28:45rueThis Lounge thing is still on some cuneiform version and it is still by far better
02:28:58SoreGums enters the room.
02:30:42harryvwhat's up with people and un-googleable names. sigh
02:31:27ruehttp://loungeapp.com/mac if that was the one you were oogling
02:32:15rueVia avibryant
02:32:17harryvoi, that looks nice, yes.
02:33:20harryvsheesh. even more 10.5-only apps.
02:33:37slava10.5 is a nice improvement over 10.4 API-wise
02:34:13harryvyeah. I woud probably do 10.5-only apps too, if I had anything interesting to do
02:35:56rue>> >>> vVv -> VVV >> V ->
02:36:07rue"PREALPHA" in cuneiform :)
02:36:39rueevan: Can we make that our version string?
02:38:02rueSuppose it could just be "U", too, being their last: _VVV
02:43:15joearnold enters the room.
02:50:00joearnold leaves the room.
02:55:08chris2 leaves the room.
03:01:00cored leaves the room.
03:16:31evanslava: cooool
03:16:47evanjust got a crazy big cashiers check for the condo!
03:16:53evanand signed all the docs!
03:17:04brixenevan: yay! congrats!
03:17:14brixenthat's awesome
03:17:20evanyeah
03:17:26evanit's a bit surreal
03:17:28binary42 enters the room.
03:17:32evanit will be more real when we move in
03:17:34evanand get keys
03:17:51brixenyes, you should have the keys before moving in
03:18:26evanprobably.
03:18:40evanit's such a wierd day to do this on
03:18:41evanabby being sick
03:18:46evanme leaving on wednesday
03:18:59brixenohh yeah, forgot about your trip
03:19:36headius enters the room.
03:22:09tongueroo leaves the room.
03:22:38evani've been working on a Message refactoring today as well
03:22:44evanshould have it pushed later tonight.
03:22:53evanMessage is going away and being split into 3 parts
03:23:05evanDispatch, Arguments, and LookupData
03:23:23brixencool
03:23:30evanthis way, the inline cache can actually just be a Dispatch C++ objects thats used over and over again
03:23:52evanand LookupData is only created when you actually need to do a more extended lookup of a method
03:24:07evanArguments is slim and trim, only containing recv, args, and block
03:24:17brixensweet
03:25:09brixensounds like you're getting ready for some serious jit work
03:25:39evanyep.
03:26:05brixenwhen do you get back from SA?
03:26:09enebo enters the room.
03:26:28evanthe 8th
03:26:39brixenk
03:28:29enebo leaves the room.
03:29:17evanbrixen: you can help us move in when you're here :D
03:29:33evanbrixen: i'm actually going to move my office there before we move the rest of the furniture
03:29:37evanso we'll have an office
03:31:03brixensure
03:31:11brixenI'm good at moving
03:31:14evanhehe
03:31:30brixenI might just move it :D
03:31:32evandid you get travel and hotel worked out?
03:31:36evanhah
03:31:39evani'm not going to force you to move
03:31:40brixenoh yeah
03:31:41evantrust me.
03:32:00evanin college, people used to get me to help them a lot
03:32:04brixen115 S Fairfax Ave
03:32:09evanso i'll never do that to anyone else
03:32:13brixenis that the right farmers daughter?
03:32:18evanfarmer's daughter?
03:32:22brixenhotel
03:32:25evanyeah, there is only one :)
03:32:28brixenok
03:32:31brixenI should be set then
03:33:17brixenhah, I meant to type, I might just move *in*
03:33:29brixendamn, ruined the joke
03:33:30evanoh ha!
03:33:30evan:D
03:33:32evannah
03:33:34evanboth are good!
03:33:39evan2 for 1!
03:33:48brixensunny so cal is looking better every day
03:33:54brixenI'm tired of rain and snow
03:34:01brixenand the suburbs
03:34:09brixenthose are the pits
03:34:45evanwell, i'll get ya out of both of those!
03:34:51brixenalmost have the mspec specs passing on 1.9
03:35:05brixenstarted with 123 failures, down to 9
03:35:15evannice!
03:43:36tongueroo enters the room.
03:46:20imajes leaves the room.
03:51:29tongueroo leaves the room.
03:52:30tongueroo enters the room.
03:53:43macournoyer enters the room.
03:53:44gnufied enters the room.
03:59:54SoreGums leaves the room.
04:04:19SoreGums enters the room.
04:04:23stepheneb enters the room.
04:07:28yipstar leaves the room.
04:10:25tongueroo leaves the room.
04:23:02mdalessio enters the room.
04:25:54outerim enters the room.
04:30:11imajes enters the room.
04:53:08stepheneb leaves the room.
04:53:26binary42 leaves the room.
04:57:10macournoyer leaves the room.
04:59:52aotearoa leaves the room.
05:01:28asap18 leaves the room.
05:01:56mdalessio leaves the room.
05:10:52krawek enters the room.
05:22:59tongueroo enters the room.
05:27:56qbproger leaves the room.
05:28:07wycats_ enters the room.
05:32:50shoe leaves the room.
05:33:14wycats_ leaves the room.
05:33:17wycats_ enters the room.
05:37:21brynary leaves the room.
05:51:20shoe enters the room.
06:02:13wycats_ leaves the room.
06:05:13tongueroo leaves the room.
06:32:08brixen1.9 appears to be about 15% faster running the mspec specs than 1.8
06:32:22brixenbut that's ~0.85s vs ~1.0s
06:32:28brixenso who knows :)
06:47:54somebody_ leaves the room.
06:56:23mediogre enters the room.
07:09:53mernen leaves the room.
07:17:05headius_ enters the room.
07:17:05headius leaves the room.
07:17:27naeu enters the room.
07:44:04benny leaves the room.
07:49:31naeu leaves the room.
07:51:07boyscoutUpdated MSpec source to a3362728. - 3ba7371 - Brian Ford
07:52:31boyscoutCI: 3ba7371 success. 1438 files, 7097 examples, 23344 expectations, 0 failures, 0 errors
07:56:41naeu enters the room.
08:01:17naeu leaves the room.
08:03:28headius leaves the room.
08:12:08kronos_vano enters the room.
08:23:07bitsweat leaves the room.
08:33:17krawek leaves the room.
08:55:21benny enters the room.
08:56:21JonathanT enters the room.
08:59:21dbussink leaves the room.
09:05:08naeu enters the room.
09:08:16mutle_ enters the room.
09:24:09mutle leaves the room.
09:24:42botanicus enters the room.
09:42:11antares_ enters the room.
09:49:07antares_ leaves the room.
10:01:51botanicus_ enters the room.
10:03:14botanicus leaves the room.
10:26:51dbussink enters the room.
11:18:25imajes leaves the room.
11:50:51botanicus_ leaves the room.
11:52:52botanicus enters the room.
11:56:21asap18 enters the room.
12:04:13botanicus_ enters the room.
12:04:49botanicus leaves the room.
12:10:22naeu_ enters the room.
12:10:45naeu leaves the room.
12:33:41asap18 leaves the room.
12:36:12gnufied leaves the room.
12:42:56asap18 enters the room.
12:56:07asap18 leaves the room.
13:08:01jarib_ enters the room.
13:13:36gnufied enters the room.
13:32:31cypher23 leaves the room.
13:33:56mernen enters the room.
13:46:06cypher23 enters the room.
13:58:04JonathanT leaves the room.
13:58:18JonathanT enters the room.
14:02:06JonathanT leaves the room.
14:03:50brynary enters the room.
14:23:16wmoxam enters the room.
14:32:55chris2 enters the room.
14:37:03botanicus_ leaves the room.
14:37:05botanicus enters the room.
14:38:08macournoyer enters the room.
15:01:17botanicus leaves the room.
15:04:00stepheneb enters the room.
15:13:23yipstar enters the room.
15:18:47Maledikt enters the room.
15:32:48stepheneb leaves the room.
15:33:42botanicus enters the room.
15:36:47Maledictus leaves the room.
15:49:47asap18 enters the room.
15:51:24chris2 leaves the room.
15:53:26stepheneb enters the room.
16:03:08stepheneb leaves the room.
16:09:00binary42 enters the room.
16:09:59therealadam enters the room.
16:27:18kronos_vano leaves the room.
16:28:19jashmenn enters the room.
16:40:06lopex enters the room.
16:41:37mwesterb enters the room.
16:55:43outerim leaves the room.
17:17:07outerim enters the room.
17:27:52joearnold enters the room.
17:37:55mwesterbIf i wanted to start contributing to rubinius where would you recommend i start?
17:40:02botanicusBTW how is it going with rubinius? From the time you guys start to work in EY it doesn't seems there are much updates, is it?
17:40:33brixenmwesterb: have a look at doc/contributing.txt
17:40:44mwesterbI did
17:40:57brixenbotanicus: you might have a look at the commit rss on the github repo
17:41:03mwesterbahh
17:41:09brixenbotanicus: there's a ton of activity
17:41:36mwesterbi am just wondering if there is a part of the standard library that needs some help or something else i am currently reading the cpp code, but it is currently outside of my full understanding
17:42:18brixenmwesterb: we'll there are lots of failing specs for the core libs
17:42:42botanicusbrixen: I'm looking at it now, you're right. Just the last release is a bit old.
17:42:48mwesterbahh i see, i shall start there
17:42:58brixenmwesterb: have a look at doc/howto
17:43:21botanicusRubinius works with ruby 1.8 or 1.9 syntax?
17:43:24brixenyou can do bin/mspec tag --list fails core
17:43:27brixenfor instance
17:43:32brixenbotanicus: 1.8
17:43:35evanbotanicus: yeah, we haven't done a release in a while
17:43:51tongueroo enters the room.
17:44:15botanicusOK, I must try it again
17:44:31naeu_ leaves the room.
17:44:46botanicusHow is it fast? Of course faster than MRI 1.8, but what about 1.9?
17:44:54brixenbasically, since we are in dev, every day master is a release
17:45:00brixenwe tend not to break master
17:45:04brixenalmost ever
17:45:20evanbotanicus: we're faster than 1.8 on a lot of micro stuff
17:45:26evanbut perhaps a little bit slower overall
17:45:33evanbecause our core classes are written in ruby
17:46:25botanicusevan: I love the idea of core classes in Ruby
17:49:32evanme too
17:53:26kronos_vano enters the room.
17:53:44brixenman, that 1.9 change to float sucks
17:53:52brixenthere's a ton of specs like
17:53:54brixenExpected "0.5..2.3999999999999999" to equal "0.5..2.4"
17:54:14brixenround trip your ff with marshal
17:54:53brixenI want my friendly floats back
18:00:19botanicusBTW when would you like to support 1.9 syntax?
18:01:58jero5 leaves the room.
18:02:08rueWell, it is Floats. It seems the spec itself is broken
18:05:46jero5 enters the room.
18:11:10brixenthe spec is not broken, ruby had deterministic friendly output of floating points that "round-tripped" for humans
18:11:17brixenthey changed that
18:11:25brixenthe spec will have to change too
18:11:39ezmob enters the room.
18:12:01brixento be some stupid x.should == computed_value
18:12:14brixeninstead of an easy to read and understand literal
18:12:53evanfloats suck
18:12:54evanin general.
18:12:58brixenindeed
18:13:01evanI so rarely use them
18:13:13evani like things that either are or are not.
18:13:16scooprI hardly use anything else, each to their own I guess ;)
18:13:29brixenscoopr: you like the new behavior?
18:13:46scooprwhat behaviour?, sorry I just jumped in
18:14:01brixendo p 2.4 in ruby19 head
18:14:34brixenthe point is, not everything round-trips via to_s or inspect, so use marshal, that's what it is for
18:14:46brixenand leave the output for humans friendly
18:15:25jarib_ leaves the room.
18:15:38brixenit's a gratuitous change that will lead to endless headaches
18:17:49warren_s leaves the room.
18:18:24brixen2543 files, 9016 examples, 105055 expectations, 79 failures, 99 errors
18:18:34brixenthat is rubyspec *ci* with 1.9 head
18:18:43brixenthey're going in the wrong direction
18:19:42scooprhm, I don't think I have 1.9 installed anywhere
18:19:43brixenhrm, and something blew up the expectation count, should be ~30k
18:20:14brixenscoopr: no worries, just fire up python and type 2.4
18:20:20brixenthat's what you'll see in ruby now
18:24:44rueThe spec was just based on inaccurate assumptions
18:25:28scooprbrixen, ah
18:26:11stepheneb enters the room.
18:26:21ruebrixen: The ruby-core archive has the thread, it was within the last month
18:27:26scooprhm
18:27:52bitsweat enters the room.
18:28:19scooprI would actually expect the same result as "%f" % 2.4 would give ..
18:29:42evanthats yet another representation
18:31:43headius enters the room.
18:32:11brixenrue: that thread has (almost) no justification for changing the representation
18:32:32brixenit meanders all over the accuracy of fp terrain
18:32:40brixenthis really has nothing to do with that
18:33:12brixenmatz's only input is "can you commit please"
18:36:15ruebrixen: Well, maybe this statistical masterpiece will cheer you up: http://musicthatmakesyoudumb.virgil.gr/index.php
18:38:14brixeninterestingly, 1.9 does not appear to be much faster than 1.8 running rubyspec
18:38:31brixencould be the zillion exceptions in 1.9 though
18:39:05rue1.9 is something like 75% 1.8 runtimes on average
18:40:04warren_s enters the room.
18:47:45headiusonce execution is no longer an issue rubyspecs are pretty dependent on core class perf, which is probably a wash between 1.8 and 1.9
18:47:49headiussome slower, some faster
18:49:39evanyep.
19:01:56lopexIO
19:02:30lopexhow does rspec perform on 1.9 ?
19:05:29rueFor IO?
19:05:54evanwell, SendSites are getting a much needed scrubbing
19:06:00evanwe had a lot of dead code in there.
19:09:33rueYeahh
19:11:35antares_ enters the room.
19:31:25imajes enters the room.
19:31:42joearnold leaves the room.
19:38:43libc_ enters the room.
19:38:49somebody_ enters the room.
19:46:26libc leaves the room.
19:46:29kronos_vano leaves the room.
19:50:18joearnold enters the room.
19:54:05stepheneb leaves the room.
19:54:32therealadam leaves the room.
19:55:52stepheneb enters the room.
19:57:52brynary leaves the room.
20:05:22krawek enters the room.
20:09:56ezmob leaves the room.
20:11:04tongueroo leaves the room.
20:13:37mernen leaves the room.
20:14:50tongueroo enters the room.
20:24:16mernen enters the room.
20:29:31rueThink I shall watch "Quantum of Solace"
20:45:02crayz_ enters the room.
20:46:17wmoxamrue: it's pretty decent. Not as good as the last Bond film though
20:47:01rueYou mean "Never Say Never Again"? :)
20:51:18stepheneb leaves the room.
20:51:29stepheneb enters the room.
20:52:55crayz__ leaves the room.
21:02:43benny leaves the room.
21:03:18imajes leaves the room.
21:05:19crayz_ leaves the room.
21:06:34benny enters the room.
21:11:57antares_ leaves the room.
21:12:08qbproger enters the room.
21:13:26mediogre leaves the room.
21:18:28stepheneb leaves the room.
21:22:28botanicus leaves the room.
21:38:08evanso last night
21:38:21evanI had the idea for another kind of VM code structure
21:38:28evanthe "service routine"
21:38:58evana bad name, perhaps, but I was thinking they could be a kind of code between instructions and primitives
21:39:05brixenyes!
21:39:13brixenI was just thinking about this...
21:39:20brixenreading that array bounds paper
21:39:31evanthey'd be staticly dispatched
21:39:32brixenwhat were you thinking about it for?
21:39:40evanand referenced via name
21:40:00evanso that the VM itself could fix that up to be a direct function call to the routine
21:40:16brixenhow would you use them?
21:40:33evanwell, i was pondering if they would be our first real translated code
21:40:46evanthey'd be written in ruby, and be translated to run in the VM
21:41:08brixenok
21:41:23evanyou'd use them for non-flow control logic
21:41:37evanthat you still want to be low and fast
21:41:56brixenmy concern with prims is that they are too big in a sense
21:42:12brixenbig chunks of code
21:42:18evansure
21:42:24evanso what were you thinking?
21:42:32brixenand for doing opts, it would be nicer to have smaller composable chuncks
21:42:41brixenbecause the bounds checking is done in the primitive
21:42:45evani was thinking that, for instance, the tuple operations would be these service routines
21:42:49evanrather than primitives
21:43:02brixenyeah, I think I'm following
21:43:08evanwe could introduce a compiler escape to call them
21:43:25evanthey'd kind of let us drop down a half a level
21:43:36evanto a little bit faster, more static set of execution
21:43:53evani worry that they confuse things
21:43:57evanthough
21:44:11brixenI was trying to think how to do this as an instruction, but being able to call eg String.new is needed (String.new being a primitive)
21:44:47evanyou can do that in instructions now
21:45:01evanbut it complicates the instruction, obviously
21:45:05brixenright
21:45:17evanthe idea I was thinking is that instructions are just for control flow
21:45:27brixenk
21:45:34evanstack manip, jump, send, etc.
21:45:40imajes enters the room.
21:45:55evanmaybe even the meta_ instructions would go away
21:46:01evanmoving them to be service routines
21:46:11brixenyeah
21:46:24brixenalmost seems we could ditch a number of primitives this way
21:46:24evanwe'd introduce a new instruction call_routine
21:46:25evanor something
21:46:46evancall_routine :tuple_put, 3
21:46:52evanfixed argument count
21:46:54brixenI was going to look at how I could compose the array prims from more primitive stuff
21:46:57brixenright
21:47:03evanthey'd be passed the data and return a result
21:47:35evanslava is probably laughing right now
21:47:42evanbecause this is basically adding static word dispatch to rubinius
21:47:45brixenI think Tuple or Array would be a good experiment
21:49:36evanhm
21:49:42evanok, well, how would these be called?
21:49:47evanwhat were you thinking?
21:50:40brixenbasically like you showed above
21:50:53brixensomething that is visible in our bytecode
21:51:03evanright
21:51:06evani mean in the ruby code
21:51:08brixenrather than opaque behind a primitive dispatch
21:51:13brixenhm
21:51:27brixenwell, we talked about the Type.method syntax before
21:52:01brixenclass Array; def [](n); Tuple.get n; end; end
21:52:03brixensomething like that?
21:52:13brixenwell, passing the tuple
21:52:26brixenI'm curious how you handle "fall back" type code
21:52:38rueErrors
21:52:53evanthey'd be allowed to throw exceptions, etc.
21:53:05evanor signal an error however they want
21:53:10evanno fall back code like primitives
21:53:19evanit's up to the caller and the routine to figure it out
21:53:27brixenseems we'd need a simple non-expensive way to say "can't help ya here bub"
21:53:41evanwell, why would it not be able to help?
21:53:44brixenso other code can be run
21:54:01brixenI suppose it could
21:54:19brixenthe caller is then responsible for understanding and guarding the dispatch
21:54:36brixencan't just dispatch and clean up like with prims
21:55:03brixenbut with Array#[] for instance, you can only call if you know n is a fixnum
21:55:08brixenis that what you're thinking?
21:55:24evanwell, like all things
21:55:27evandynamicly typed
21:55:37evanthat routine is going to have to check types and throw TypeErrors
21:55:47evanbefore doing any work
21:56:18brixenI guess I'm thinking lower level then
21:56:35evanok, could ya explain?
21:56:35brixenI want the check to be composable with the actual data fetch, in the tuple example
21:56:55brixenso if there are multiple fetches, we could optimise the bounds check in one place
21:57:01brixenthat sort of idea
21:57:16brixenpotentially optimize I should say
21:57:32brixenthings like reading chars from a string
21:57:56brixenthat we do totally behind a primitive or with a bunch of full primitive dispatches now
21:58:07evanok, what would the smallest unit of execution be in your case?
21:58:23evansomething like setting a byte in a String?
21:58:31brixenyeah, something like that
21:58:43brixenmy concern is bundling up the checks with the operations
21:58:52brixenso it becomes opaque in the bytecode
21:59:38evanok
21:59:42evanso how would you build up?
21:59:48evanwould it be explicit or implicit?
22:00:03evanie, would you create a new unit thing thats a composite over other units
22:00:10brixenwell, I was imagining a ruby-like method that is tranlated
22:00:25evanor would that composite be realized by the compiler
22:00:46brixenI was thinking explicit, but it could be decomposed by the compiler
22:00:53brixenexplicitly written
22:01:41brixenhow were you thinking for the service methods?
22:01:59evannot sure
22:02:04evanjust an idea bouncing around
22:02:08brixenok
22:02:09evanthought i'd spit it out, see what happens
22:02:35evanso you were thinking units would be written a dialect
22:02:39evanand they could be composed together
22:02:42brixenI'm looking at Tuple::copy_from for instance
22:02:52brixenit's a shame that's a primitive
22:02:52evanwith the compositing being a new unit
22:02:57evanthat could be translated
22:03:02brixenyeah
22:03:12brixenmore like lists of operations
22:03:20brixenthan anything that needed flow control
22:03:32brixenthe control is more just "bail"
22:03:36brixendo_one
22:03:39brixendo_two
22:03:50brixendo_three -> eeks can't continue
22:03:59evanwhat about conditionals?
22:04:12brixenthen higher code has to make the conditional decision
22:04:17rueGot inline assembly already
22:04:19brixenmaybe that doesn't make sense
22:04:22evanor would the invoking of do_one implicitly check if do_one failed
22:04:28evanand if do_one fails, the caller fails
22:04:36brixenevan: yeah, like that
22:04:45brixenwell, they just run
22:04:49evanrue: yeah, but we don't have many instructions
22:04:54evanrue: so inline assembly is of limited use
22:04:59brixenbut if one fails, the "unit" fails
22:05:24evanso, what would the composition for Tuple::copy_from look like?
22:05:49stepheneb enters the room.
22:05:53brixenwell, here's the idea
22:05:54evanjust the simpliest case
22:06:09rueJust start on the simplified Ruby
22:06:14brixenthe bounds checks in copy_from are abstractable across all of tuple
22:06:22brixenbut they are bound up in that primitive
22:06:27brixenso, it would be a list of
22:06:32brixencheck_lower_bound
22:06:36brixencheck_upper_bound
22:06:41brixenfetch
22:06:44brixenassign
22:06:45evanwhat are the arguments to those?
22:07:08brixenthe args to copy_from, which is the "unit"
22:07:55brixenmaybe another way to think of this would be: what would our insns look like if we wrote some just for Tuple
22:08:01brixenmaybe that's what I'm thinking
22:08:25brixenthere's a pretty small set of things you to in a primitive way with tuple
22:08:30brixenbut at the Ruby level
22:08:37brixenthose are collections of things
22:08:40evanso if we had an instruction set that operated on a tuple?
22:08:54brixenwell, as a thought experiment
22:09:34brixenbut rather than putting these in the compiler, I thought we'd write the "methods" that are these collections of tuple insns
22:09:37brixenthat sort of thing
22:09:44brixenis this making any sense?
22:10:13evanhm
22:10:15evani don't follow that.
22:10:58brixenwell..
22:11:22brixenusing the compiler analogy
22:12:10brixensay Tuple.copy_from(this, other, start, length, dest)
22:12:35brixenthen looking at each operation in the primitive now
22:13:12brixenthe compile would emit stuff like check_lower_bound start
22:13:18brixenetc
22:13:43brixenif we had such insns for tuples
22:15:34evanso it's more that just an extensible instruction set
22:15:44evanbecause the compiler is aware of the implementation for the insns
22:16:08brixenbasically
22:16:38evanso the compiler and act like a compiler and composite them together
22:17:09evans/and/can/
22:17:31brixenthe thing is, if you called something else and then copy_from right now with a fixnum, that can't change, it's still going to check that olend > 0
22:18:08brixenthe only way to optimize this is with interprocedural opts
22:18:12brixenafaik
22:18:13evanright
22:18:31evanso we're talking really about a dispatch layer below methods
22:18:42evanthat the compiler can reason about
22:18:47brixenyeah
22:19:07brixenseems to me about 150 lines of tuple.cpp could be in this form
22:19:30brixenthe gc mark, weakref, size would still be cpp methods
22:19:42brixencus they're used by the vm
22:20:12evanwell
22:20:21evanto a certain extent yes
22:20:35evanbut the real plus would to be to tie the C++ methods into these
22:20:46brixenbut if we could do this *without* an isns set just for tuple, that'd be cool
22:20:49evanso we're starting to translate parts of the VM too
22:20:54brixenright
22:22:25brixenseems like it's possible to do without a full-fledged language
22:22:36brixenjust a list of operations with a start and end point
22:22:54brixenyou can catch a failure that happens midway at the start
22:23:15evanhm
22:23:35brixenlike a really simple state diagram
22:23:43rueWhy do it without a full-fledged language?
22:23:49brixenwhere things either end in yes or no, or just yes
22:24:06brixenif it ends in no, the "unit" ends in no
22:24:49gnufied leaves the room.
22:27:33yipstar leaves the room.
22:28:18yipstar enters the room.
22:28:19macournoyer leaves the room.
22:29:21brixenevan: I guess this is why that equality saturation approach seems so interesting
22:29:26brixentuples don't change is size
22:29:45brixenso that's more info to add when it's optimizing bounds checks
22:30:16brixenif the tuple is the same and the index is the same, there's only one check for a bunch of operations
22:30:28evansure
22:30:31brixenyou could add the info with a domain axiom
22:30:53brixenbut arrays can change
22:30:56evanbut my worry is we don't want to be writing the whole core in these routines
22:31:03brixenyeah
22:31:22evanso stuff like optimizations that assume tuple size and index would be better applied to normal ruby code
22:31:35evanso that it could be used without having to drop down to a specific dialect
22:31:45brixengotcha
22:32:37evanat the same time, having a dynamic set of intrinsic operations that the bytecode and compiler can use might be useful
22:32:47botanicus enters the room.
22:33:30brixento ruby code it would look like a method call, but to our compiler it would not be an opaque primitive
22:33:38brixenI guess that's basically what I'm thinking
22:33:58stepheneb leaves the room.
22:34:17brixenwhich sounds like what you were thinking, but..
22:34:24brixenI'm not sure
22:34:28evanme neither.
22:34:32brixenheh
22:34:34evanafter talking with John Rose
22:34:43evani've begun thinking about how we could have intrinsics
22:34:52evanwith a staticly typed language, thats easy
22:35:04evanbecause the compiler can see that you're performing operation X of type Y
22:35:36brixeninteresting http://www.digitalmars.com/d/2.0/phobos/std_intrinsic.html
22:35:46evanwhere as the best we can do up front is that you're calling method X on something that the user called Y
22:36:19brixenright
22:37:05joearnold leaves the room.
22:37:07evanyou can "pull the veil" back on the instrinics by requiring a specific syntax for calling them
22:37:15joearnold enters the room.
22:37:19evanRubinius.intrinsic :tuple_copy, self, other
22:37:48evanbut thats really ugly to litter the code with
22:37:56brixenyeah
22:37:58evanand it breaks portability
22:38:16brixenbut if that were behind a "normal" method call
22:38:22brixenlike primitives are now
22:38:48evanright
22:39:00evanthe the calling code is shielded from the implementation
22:43:05crayz_ enters the room.
22:43:07brixenyou know, what I am thinking is really just intrinsics too
22:43:19brixenI was trying to think of how to abstract writing them
22:43:28brixenbut I don't think that makes much sense
22:44:28seydar enters the room.
22:45:23brixensey.dar n. random visitor from the land of mibbit
22:46:20seydari started my compilers course today
22:46:26brixensweet!
22:46:39seydarit's in matlab, but i'm going to do it in c++ as well (maybe) so i can get glasses and be extra nerdy
22:46:57evanbrixen: we may just have to play around with a couple of things
22:47:01evansee what works and doesn't
22:47:06brixenevan: indeed
22:48:51evani'm still cleaning up SendSite atm
22:48:59evanhad to gut a lot of code
22:49:27genericpenguin enters the room.
22:49:36brixenI keep forgetting about scholar.google.com
22:49:46evanI'm thinking about using a few macros and such to reduce the ammount of changed needed for this in the future
22:50:28dgtizedthere are a couple more routines that could share those "intrinsics" of tuple in Array, delete comes to mind
22:51:30rueseydar: Touching your C++ does not make you blind
22:51:52evandgtized: sure
22:51:54brixenevan: I think the idea would be to put the intrinsic 'signature' into the class and use something like our sendsite
22:52:09brixenevan: I think you mentioned something like this
22:52:15evansignature?
22:52:40brixenbasically, the sendsite, or guard could say, I've got an intrisic for this method on this type
22:52:46brixenby looking in the type's class
22:52:59brixenand maybe patch
22:53:03brixenjust thinking out loud
22:53:13evansure
22:53:15brixenrather than having intrinsic calls in the ruby code
22:53:17evanthats actually super easy
22:53:52evanin that case, we'd be building a way of taking highlevel, ruby like code and translating it to code that we could compile into the VM
22:54:01brixenyeah
22:54:05evanin many ways, it's better to view those as 2 different things anyway
22:54:25evanHOW to call the intrinsic should be seperated from WHAT it is
22:54:36brixenyeah
22:55:03seydarrue: i'm not sure whether that was deliberately confusing or you were making a one-testicled joke
22:55:51evani've had this idea many times
22:56:07evanat one point, i'd considered having something akin to a GPU in the VM
22:56:18evanwhich a completely different instruction set
22:56:24seydara GPU in the VM?
22:56:24evanthat was highly specialized
22:56:31brixenheh, neat
22:56:46evanthe main VM would ask the 'GPU' to perform some operation
22:56:56seydarwhy would you want to model a GPU instead of a CPU?
22:56:57evanwith the operation expressed as a DSL in the ruby code
22:57:06evanseydar: i don't mean an actual GPU
22:57:11evani just mean a specialized coprocessor
22:57:14dgtizedone GPU, or a GPU for numerics, a GPU for arrays, a GPU for strings?
22:57:20evanmaybe
22:57:21evandunno
22:57:27evanit was an idea I had on an airplane
22:58:25evanit provides an interesting abstraction
22:58:31seydarcan you explain what you mean by having the operation expressed as a DSL?
22:58:42dgtizedI mean we sort of have one for Regexp right?
22:58:43evansure
22:58:54evansay we have a String GPU
22:59:17evanthat supports an operation called move_byte(from, from_idx, to, to_idx)
22:59:47evanif you needed to move bytes between to strings a and b, you'd do
22:59:59evanString::GPU.perform do |g|
23:00:24evan g.move_byte a, 0, b, 0
23:00:25evanend
23:00:31evanthats just one byte, obviously
23:00:44evanbut the compiler would see you doing that
23:01:00evanand rather than running that as normal ruby code
23:01:14rueI am not sure I see the benefit for something like that except for "plugins"
23:01:18evanit would do the work of creating a GPU instruction stream at compile time
23:01:33evanand at runtime it would use some normal VM instruction to call out to the GPU
23:01:42evanrue: yeah, i'm not sure either.
23:01:49evannever did it.
23:02:33rueIt would be a good way to allow some unknown code to perform faster, but it does not seem there is anything there for internal stuff
23:02:49rueUnless you actually run it on the GPU :P
23:02:51mernen leaves the room.
23:03:29slavahi evan
23:03:31evanwhich would be awesome
23:03:34evanslava: allo
23:03:54evanrue: maybe we should actually build a DSL for performing VM operations by a GPU
23:04:03evanas OpenGL instructions or something
23:04:04evan:D
23:04:24slavaI think I can get method dispatch down to 5 instructions
23:04:31slavain the cache hit case
23:04:33evanhm, can you model method lookup as texture mapping and collision detection....
23:04:46drbrainuse wilson
23:05:00dgtizedis this what slang does in smalltalk?
23:05:24evandrbrain: we'd need a wilson for at least ppc then too
23:05:39drbrainminor issue :)
23:05:40evandgtized: not really.
23:06:02evanslang looks at smalltalk code and translates it using a completely different set of assumptions
23:06:02tarcierilol @ using collision detection to perform method dispatch
23:08:58rueI would totally play Array#reject implemented as a FPS
23:09:06evanhah
23:21:53seydar leaves the room.
23:29:34botanicus leaves the room.
23:30:42gnufied enters the room.
23:34:31naeu enters the room.
23:41:31ezmob enters the room.
23:42:12stepheneb enters the room.
23:44:33stepheneb leaves the room.
23:45:59stepheneb enters the room.
23:49:05wmoxam leaves the room.
23:50:31stepheneb leaves the room.