01:40:35 lar1 left #tunes 01:59:18 nate37 joined #tunes 02:18:00 smkl joined #tunes 05:09:35 Kyle_L joined #tunes 05:34:00 eihrul joined #tunes 05:37:00 [QUIT] eihrul quit: Leaving 06:02:29 [QUIT] Kyle_L quit: Leaving 06:10:53 [QUIT] JALH quit: Ping timeout for JALH[user38-186.jakinternet.co.uk] 06:44:12 hcf joined #tunes 07:10:27 [QUIT] nate37 quit: irc.linux.com adams.openprojects.net 07:11:47 nate37 joined #tunes 07:12:49 yuriz joined #tunes 07:14:53 hello guys! Why this channel is so silent? ;) 07:32:13 yuriz left #tunes 08:17:08 is fare on vacation? i haven't seen him around for a while. 08:37:45 [QUIT] karltk quit: milton.openprojects.net irc.linux.com 08:37:45 [QUIT] smkl quit: milton.openprojects.net irc.linux.com 08:37:45 [QUIT] nate37 quit: milton.openprojects.net irc.linux.com 08:37:45 [QUIT] JALH quit: milton.openprojects.net irc.linux.com 08:38:25 karltk joined #tunes 08:38:25 smkl joined #tunes 08:38:25 nate37 joined #tunes 09:38:09 eihrul joined #tunes 09:46:07 [QUIT] eihrul quit: Leaving 09:53:18 [QUIT] hcf quit: Ping timeout for hcf[207-172-225-32.s32.tnt1.pld.me.dialup.rcn.com] 10:23:49 [NICK] ult[zen] changed nick to: ult 10:29:52 hcf joined #tunes 11:01:42 coreyr joined #tunes 11:09:44 [NICK] ult changed nick to: ult[learning] 11:11:30 nate37 left #tunes 11:26:01 coreyr joined #tunes 12:05:47 eihrul joined #tunes 12:33:58 Fare joined #tunes 12:36:43 abi: interlisp is at http://server1.florida-software.com/algorithms/downlispf4.shtml 14:26:41 ult_ joined #tunes 14:44:39 eihrul joined #tunes 15:43:14 witten joined #tunes 15:45:09 ain't witten the name of a Fields-medal laureate? 15:46:12 witten is the name of a lot of things/people 15:46:16 usually, I'm not any of them 15:47:24 'lo 15:48:08 hello 15:48:20 eihrul: tell me, what's the point of meta objects? 15:49:06 well, introspection 15:49:11 yeah 15:49:17 exactly how a message is sent or a function is applied or whatever 15:49:32 it just seems like meta objects are a particularly kludgey means of introspection 15:49:36 is usually a primitive and hard-wired process that you can't extend or interposition yourself with 15:49:46 uh, huh 15:49:50 how are they? 15:49:57 the whole meta regress thing 15:50:16 the regression is bounded 15:50:25 I know, it just doesn't feel right :) 15:50:33 why not? 15:50:46 the regression means it can be extended indefinitely... 15:51:00 there are regressions in any OO language you can look at 15:51:19 the meta object describes the object's layout, the meta meta object describes the meta object's layout, and the meta meta object describes its own layout, right? 15:51:19 usually of the class variety 15:51:19 reason you don't see them is because noone chose to address them :) 15:51:48 whatcha mean "layout"? 15:51:53 as in "memory layout"? 15:51:55 members 15:51:57 meta-structure is not always mapped to base-level objects 15:52:02 no, not in slate 15:52:06 member layout 15:52:20 in slate, that isn't even much addressed 15:52:23 Fare: meaning what? 15:52:29 eihrul: what isn't? 15:52:30 there are hidden meta-objects in the current implementation called maps 15:52:41 for instance, meta-information like "the total stack size needed to run a program" is not associated to individual base objects 15:52:52 that describe the mapping of fields to memory for the primitive message protocol 15:53:08 the meta-objects in slate otherwise just handle the process of message-passing 15:53:17 eihrul: so how is the meta object a true object? 15:53:26 it is a true object... 15:53:44 with 'lookup' and 'apply' methods defined on it that are used to send methods to objects within their "meta space" :) 15:53:49 so if you ask for the meta object's members, it must either consult its *own* meta object, or be able to describe itself? 15:53:59 yes 15:54:00 or maybe the base-level objects constitute an equation that has a high-level solution in which the original objects dissolve into meaninglessness 15:54:04 meta space. that's one term I didn't get.. 15:54:05 a meta-object has a meta-object as well 15:54:15 this regression is terminated by the object "Top", which is its own meta-object 15:54:28 (e.g. change of point of view much like the fourier transform) 15:54:29 eihrul: and how does Top describe itself? and is it a true object? 15:54:40 witten: it is its own meta-object, that's how 15:54:42 Fare: you lost me :) 15:54:46 witten: and yes, it is a true object 15:55:04 witten: implementationally, this means checking if the object's meta-object is Top, and if it is, using the understood protocol that Top provides 15:55:17 eihrul: okay 15:55:25 otherwise, it would still regress :) 15:55:25 in the fourier transform of a function defined by its values at given points, nothing corresponds to the value of the original function at a given point. 15:55:47 eihrul: and when do you decide when a meta object should be Top or not? 15:55:50 when/how 15:56:21 witten: eh, by default, object's have Top as their meta-object... you can just change the meta-object, though 15:56:43 s/object's/objects 15:57:01 So that if your program computes some stuff from a JPEG files, that happens may be optimized from uncrompssed representation, we may as well skipt decoding the FFT. 15:57:14 eihrul: and how can an object have members like lookup and apply if they're defined in its meta object? because presumably you need to consult the meta object in order to execute members.. 15:58:11 eh? rephrase that, coherently :) 15:58:32 my_object.lookup(something) 15:58:38 lookup is a member of my_object 15:58:54 looked needs to be looked up in the meta object's list of object's members 15:59:07 how can that be done? 15:59:13 rmm... lookup is not looked up in the object 15:59:18 lookup is a member of the meta-object :) 15:59:21 for instance: 15:59:31 myObject . message (parameter) 15:59:44 we first look for myObject . metaObject (this slot is primitively handled) 16:00:07 after that, we then do metaObject . lookup (myObject, "message") 16:00:22 k? 16:00:34 okay, and how does metaObject . lookup() work? 16:00:48 well, the primitive version? :) 16:00:58 or in general? 16:01:06 in general.. is it a primitive? 16:01:22 well, it is not primitive if someone defines their own meta-object :) 16:02:11 hmm 16:02:19 as for the primitive version 16:02:24 its pretty much how Self does lookups 16:02:30 each object has an implicit "map" 16:02:39 that maps message selectors to slots in the object 16:02:52 so the meta object doesn't store the object's map/list of members? 16:02:54 this is consulted to find the correct slot, and the value of that slot in the object is retrieved 16:03:01 no 16:03:07 it does not 16:03:09 well, yes and no 16:03:09 [NICK] ult changed nick to: ult[food] 16:03:12 then what good is a meta object? 16:03:14 there are many types of meta-objects :) 16:03:27 the meta objects we're concerned with in slate are to define the lookup protocol 16:03:36 that's what they are good for 16:03:57 that's it? 16:04:12 that's it 16:04:32 but, you seem to have a narrow view of "to define the lookup protocol" 16:05:03 there's lots of stuff you can do with that :) 16:05:06 like? 16:05:34 like synchronization, distribution, access control, etc. 16:05:48 and what do you get from meta objects that you can't get from vanilla inheritance or aggregation? 16:05:48 pretty much anything you could do with "aspect oriented programming" and more :) 16:05:54 oh okay 16:06:01 they fill the same niche 16:06:22 it just seems like a roundabout way to do it 16:06:36 the introspection claim, I might buy 16:06:39 "roundabout"? 16:06:52 but your meta objects don't even have a list of members to introspect 16:06:53 it is the most direct way to do it! 16:07:04 rather than having to modify the compiler to make it do stuff you want 16:07:13 eh? 16:07:27 why would you have to modify the compiler? just override "lookup" in an object or some such 16:07:44 rmm, that was my point... 16:07:47 can you explain how meta objects support introspection? that was the whole purpose behind them, I originally thought 16:07:51 without meta-objects, you have to modify the compiler :) 16:08:06 but you can override lookup without meta objects 16:08:14 how so? 16:08:50 instead of putting lookup in the meta object, put it in the object itself 16:09:16 and why is that better? 16:09:20 if there's a member called "lookup", that's used instead of the primitive lookup 16:09:45 because you don't have to mess with funky meta objects, and you can get all their other purported benefits via aggregation,whatever 16:09:56 how are meta-objects funky? 16:10:02 they're just a factoring of that 16:10:04 nothing more 16:10:22 they seem to be breaking away from the goal of universalization 16:10:33 eh? 16:10:46 er, unification 16:10:55 hcf joined #tunes 16:11:29 well, i now have to go take a mandatory CMU course on how to make spreadsheets in a program i don't use for an operating system i don't use 16:11:31 objects are functions are objects, etc etc. and then you have these weird like meta-objects which don't quite fit in 16:11:36 sorry :/ 16:11:39 that sounds a lot of fun 16:12:22 how don't meta-objects fit in? they're objects :) 16:13:11 you just haven't sold me on their utility, when it seems like you can do the same thing they do without introducing another concept 16:13:29 maybe introspection would be a reason, but it doesn't sound like they're really used for that 16:13:41 how is placing the protocol in the objects not introducing a new concept? 16:13:49 because either way, you're introducing the same concept 16:14:23 hm, good point 16:14:35 as i said, meta-objects just factor this 16:14:52 in the same way classes can factor behavior of a class of objects 16:15:05 however, you can factor this with already-available means like inheritance or aggregation 16:15:35 i don't see why this is such a big issue, man 16:15:46 it's not 16:16:00 now of course this does bring up the other issue :) 16:16:02 I just thought slate was big on unification 16:16:08 which other issue? 16:16:11 how to modify the system of meta-objects itself 16:16:26 ;) 16:16:27 yeah, that's sort of tough 16:16:43 you'd need to introduce another layering of meta-objects :) 16:17:00 that's part of my complaint :) 16:17:01 [NICK] kc-meeting changed nick to: kc5tja 16:17:11 meta objects belong *primitively* to objects 16:17:11 or just do so in the old way (modify the compiler/language system) 16:17:27 # water: you listening? :) 16:17:40 there's no way for joe slate programmer to get at an object and say, I want you to switch to *this* meta object 16:18:08 eh, a programmer can switch which meta-object he wants to use for an object, as easy as any other slot 16:18:26 oh okay 16:18:44 the problem is if you want objects to be fully self-representing including meta-behavior, you'd need another system of meta-objects to manage how the MOP works, too :) 16:18:47 but anyway 16:18:55 so it primitively belongs to an object, but you can still get at it by traditional means? 16:18:57 i gotta go take this stupid M$ excel course 16:19:04 have fun 16:19:13 yes, the meta-object slot behaves like a normal slot :) 16:19:21 ok 16:19:27 it justs just you can't modify the lookup protocol there 16:19:34 aha 16:19:34 because you'd have a nasty regression :) 16:19:38 yup 16:19:50 would need the meta-object to lookup itself, and you'd never be able to find it 16:19:53 okay, bbiab 16:19:53 [QUIT] eihrul quit: Leaving 17:09:59 eihrul joined #tunes 17:19:33 witten: any more questions about meta-objects?? 17:19:45 [QUIT] eihrul quit: Leaving 17:29:44 eihrul joined #tunes 17:29:44 sigh 17:31:07 what? 17:31:17 that class was lame... 17:31:27 the only consolation is i can telnet into bespin from there 17:31:47 (save when the teacher is walking near my workstation) 17:31:49 you can't laugh at it and have fun the same way you can at a bad movie? 17:32:09 i tend to walk out of bad movies 17:32:15 oh heh 17:34:25 this class is mandatory though :/ 17:34:28 bad movies aren't! 17:34:33 true 17:34:43 I don't see why that'd be mandatory at cmu 17:34:55 you don't go to cmu, do you? 17:35:10 there's a lot of cluelessness, even in the CS department :) 17:35:43 no, I don't 17:35:59 almost makes me happy i'm in the math department... 17:38:37 I was in the math department here for a while 17:38:46 til I remembered that I didn't like math 17:39:53 so, about that introspection.. 17:40:02 how will ya do it? 17:41:14 eh, what about it? :) 17:41:28 meta-objects :P 17:41:37 meta objects, or however else you'll do it 17:41:59 how will you implement/handle.. object.show_me_a_list_of_your_members_please() 17:42:09 meta-objects :) 17:42:29 although 17:42:31 even though the list of members is stored within the object? 17:42:35 we did have some discussion on mirrors for that purpose 17:42:43 mirrors? 17:42:45 but i think in the end we decided to just use meta-objects to do that :) 17:42:48 mirrors ala Self 17:42:56 how do self mirrors work? 17:43:15 they just return an object that makes visible certain underlying details of the object 17:43:22 which meta-objects can do, in and of themselves 17:43:50 why meta objects and not the object itself? 17:44:02 again, because its a better factoring :) 17:44:13 it would kinda clutter up the object to have all that stuff in the object itself 17:45:54 fuck, I just hosed this box 17:46:01 oh well :) 17:46:07 waaah 17:46:08 could be worse 17:46:32 no it couldn't.. I haven't done a cvs commit all day 17:47:39 you could be taking mandatory spreadsheet courses, so hush :P 17:47:47 hah 17:48:50 ok, fixed it 17:48:52 phew 17:49:29 so the general purpose of an object is to contain members, and the general purpose of a meta object is to access those members? 17:51:11 yes 17:51:33 (not to mention defining how to apply the stuff looked up) 17:52:26 "apply", as in invoke/get? 17:57:33 yeah 17:57:46 as in after you look up the method/function, you need to apply it to make it do something :) 17:59:15 right 18:04:35 excuse my obtuseness today, but how do you call a primitive member function (such as "lookup") from within the slate environment? 18:05:30 whatcha mean? 18:06:26 well lookup has to be primitive because.. well, it handles lookups.. if it weren't primitive, you'd have to lookup lookup 18:06:46 so how can you, say, call "object . lookup()" explicitly? 18:06:50 if you wanted to do that 18:07:28 I'm having a real problem seeing exactly where the rubber hits the road 18:07:43 not an issue... 18:07:47 example: 18:07:51 given myObject 18:07:57 where myObject . metaObject = Top 18:08:08 ook 18:08:14 and we want to do: myObject . message 18:08:20 evaluation might go like so: 18:08:38 first retrieve myObject . metaObject using the primitive lookup method 18:08:55 next, attemp to lookup 'lookup' in metaObject 18:09:11 (using primitive metaobject lookup method) 18:09:23 now, first examine the metaObject's metaObject 18:09:39 if it is Top, then use primitive lookup method to get the lookup method :) 18:09:49 then... finally apply this to lookup "message" in myObject 18:09:59 now... kinda messed up in this example 18:09:59 okay 18:10:08 because you actually wouldn't need to lookup lookup 18:10:12 if the metaObject is Top 18:10:18 okay 18:10:23 if it were some other metaObject whose metaObject was Top though, you would need to :) 18:12:21 I really don't know, but this doesn't sit well with me. perhaps I need to roll it around in my head some more 18:12:39 why not? 18:12:48 what don't you like? 18:13:16 I don't know 18:13:54 I don't think I'll like any solution, because no matter how you slice the cake, you'll have to make special cases for primitives that actually do the work 18:15:12 and primitives are so.. primitive 18:15:34 well, without any primitives, then how can you make anything at all? 18:15:40 you need some grounding... somewhere 18:15:44 I know 18:15:51 I just wish the grounding felt nicer 18:16:14 the issue is extending the primitives to suit your needs and making them suitably extensible :) 18:16:26 heh yeah 18:16:42 which is where tunes comes in :P 18:16:50 I suppose it feels wrong to send messages to objects that aren't "true" messages 18:17:51 what do you mean "true messages"? 18:17:55 what is a "true message"? 18:18:15 a honest-to-goodness object 18:18:18 brb 18:18:24 do you want objects to attach a stamp to an envelope, stick a letter with all their requests in them, and send them via USPS? 18:18:32 hahah 18:18:39 dude, these are honest-to-goodness objects :P 18:18:55 back 18:19:11 but are the messages honest-to-goodness objects? 18:19:21 even calling lookup()? 18:23:07 it seems like you need some mechanism to send primitive messages 18:24:36 eh 18:24:53 the message passing conventions are in a way primitively defined 18:25:03 which is necessary or else you can't have the MOP in the first place 18:25:11 MOPs don't exist in isolation 18:25:19 they are meant to augment a framework :) 18:25:40 if you have no primitive way to handle messages, you're fucked 18:26:22 MOP? 18:26:45 so are all messages primitive? 18:29:44 are messages not objects? 18:29:51 [NICK] coreyr{dikt2} changed nick to: cor{study} 18:30:49 messages are objects 18:31:01 the meta-object protocol 18:32:20 so messages are objects, but they are passed primitively.. 18:32:32 unfortunately, yeah 18:32:35 that's how that works :) 18:33:52 the implementation just has to be readily available and open though 18:33:55 as with Squeak 18:34:00 so that can be worked around :) 18:34:15 how can one add members to an object interactively? 18:34:30 messages? :) 18:34:37 nah, members 18:34:47 just send an addSlot message or whatever :) 18:35:14 and addSlot is a primitively-implemented function that modifies the list of members stored in the object? 18:35:38 in a manner of speaking, yes 18:35:52 how else would you describe it? 18:36:17 well, 1) its a hash table, not a list 18:36:33 okay 18:36:39 2) not quite sure at this point, but may go for a more non-destructive approach (i.e. adding a slot creates a new object) 18:37:02 okay 18:37:28 wouldn't it be nicer if the members of the object could be represented as a true-object slate hash/dictionary? 18:37:39 so you could, say, object.get_members() 18:38:03 well 18:38:23 you will be able to get a collection of the members and fields of the object 18:38:25 no big deal 18:38:34 that's actually what Self uses mirrors for :) 18:38:38 aha 18:38:41 I should read up on that 18:39:46 oh, and isn't the distribution/concurrency/whatever features more a result of apply() than it is of lookup()? 18:40:50 sure... 18:40:56 but slate allows you to customize both :) 18:41:07 whereas a language without a MOP allows you to customize NEITHER :P 18:41:23 so what use is customizing the lookup? 18:41:53 well, lots :) 18:42:09 examples? 18:42:11 debugging, access control, adding new lookup protocols (multiple inheritance, consultation, et.), distribution 18:42:14 as i said :) 18:42:31 in terms of modularity, isn't apply() better handled by the object being applied rather than the object that contains the object being applied? 18:42:54 well, its still debatable which object actually handles apply 18:43:00 but i'm leaning towards the object itself :) 18:43:12 yeah, I went that direction recently 18:43:16 works pretty nice 18:43:49 debugging I can buy.. 18:44:21 build a feature, and users will come :) 18:44:41 hah, or sneer :P 18:44:53 now yes, i don't believe that this one feature alone is anywhere near making a tunes 18:45:03 nor does it in any way constitute tunes 18:45:07 just one little piece :) 18:45:27 what feature, the programmable lookup? 18:45:28 lots of other stuff in the implementation itself (which somehow water manages to gloss over, no offense >:]) is also important :) 18:45:41 witten: the MOP (which constitutes lookup + apply) :P 18:45:48 oh okay 18:46:20 try not to come with with new terms and acronyms.. it tends to turn off people with more closed minds 18:46:25 s/come/come up/ 18:46:31 s/with// 18:46:48 wherever possible 18:48:05 well, MOP isn't invented 18:48:11 ) 18:48:16 it predates us 18:48:46 well it sounds obscure and academic to me :) 18:48:54 I don't have a problem with that, but many do 18:49:46 sure, it is obscure and academic 18:50:09 could be worse though 18:50:20 of course, you could be those zigzag/xandu people 18:50:23 if you want to see obscure and academic, subscribe to the haskell mailing list 18:50:28 heh 18:50:44 or the tunes mailing list :) 18:50:44 lots of people in a pissing contest to see who can sound the most intellectual 18:50:53 tunes mailing list is much, much better 18:51:05 mostly because it is more casual, in general :) 18:51:12 that's good 18:53:52 (no offense to haskell or anything) >:) 18:56:35 now you've got me wondering whether I need/want user-definable lookups 18:59:59 good! 19:00:35 bastard :) 19:04:46 i try 20:31:51 Brianna joined #tunes 22:26:54 abi joined #tunes 22:26:54 ult[sleep] joined #tunes 22:26:54 Fare joined #tunes 22:26:54 smkl joined #tunes 22:39:59 karltk joined #tunes 22:57:30 smkl joined #tunes 23:13:52 bhachech joined #tunes 23:14:24 bhachech 23:16:12 bhachech left #tunes 00:27:53 cor{study} joined #tunes