00:04:20 lispbliss joined #tunes 00:04:20 abi joined #tunes 00:04:20 ult_NeedWork joined #tunes 00:04:20 water joined #tunes 17:21:15 Brianna joined #tunes 17:49:10 water joined #tunes 17:49:41 re 18:05:50 Kyle joined #tunes 18:06:38 hey kyle 18:06:47 hi 18:12:22 water is discussing slate in #{} again 18:12:29 atm... 18:13:01 methods objects are just going to be simple little constructs containing fields for variable and field holding code to be executed 18:13:20 s/variable/variables 18:13:24 hrm 18:13:36 care to elaborate? 18:13:40 for now, since its just interpreted code, they don't have to be enormously complex 18:13:48 sure 18:14:04 "foreign methods" are going to be a bit simpler 18:14:16 water was considering perhaps a self-like system for objects-with-code 18:14:28 just a small object wrapper over a slot that holds an integer representing the address of the method :) 18:14:37 ok 18:14:55 which just exists as a necessity to interface with the outside execution environment :) 18:15:03 right 18:15:24 more abstract than a bytecode, which is great 18:16:07 well, here's a scheme i've been thinking of for method objects... 18:16:11 well, bytecode is one possible representation of code 18:16:24 a method object can hold many different representation of the same code, depending on whose interested :) 18:16:30 for one, of course fields would be subobjects 18:16:36 sure 18:16:52 but for now, we need something that works and supports the code model we already have 18:17:22 i'm thinking that one of the quotation aspects would be the array that holds the method code 18:17:29 well, interpreted code in pidgin is going to be pretty simple 18:17:37 the sequence of slotname accessors and "." handles 18:18:05 well, if it's so simple, explain it please :) 18:19:00 just a collection of literal objects (which have some annotation that makes them be treated as literal), and then you have symbols that are not annotated as literal, where the '.' symbol of course triggers application, and any other symbol triggers lookup 18:19:31 as for collection itself, could be an array, a vector, a list, doesn't matter much :) 18:20:16 yeah but the interpreter being simple means that it knows just one protocol for stepping through code 18:20:38 well, like i said, it will be easy to make your own interpreter :) 18:20:45 ok 18:21:30 oh, and the parent slot will just be a handle to tell the MO what other object gets lazily mixed-in, right? 18:21:51 (or maybe i need to roll that myself to do it right... hm...) 18:24:43 yeah i suppose i do need to roll that myself 18:24:58 since it goes hand-in-hand with lazy eval and the MOP 18:25:24 it looks like Slate 0.1 is going to be really slooooooowww :) 18:25:41 to say nothing of pidgin 0.1 :) 18:25:54 (MO's in interpreted pidgin implementing slate ;) 18:26:34 well as long as pidgin is KIS-worthy 18:26:34 well, i'd rather implement an interpreter in C++ than an optimizing Slate compiler :) 18:26:36 heh 18:26:43 lest one falls to the Self mistake 18:26:49 yeah, that would just be one more headache for HLL fans 18:27:32 well, their argument (re-iterated the other day) against self-hosting was that the optimizations bit gets tricky when reflectively applied 18:28:03 well, sure, you have to make some distinctions for bootstrapping 18:28:13 but C++ is a tricky beast all its own at that scale 18:28:17 but then self has mutable semantics =) 18:28:22 for small projects, sure it can be manageable 18:28:32 but at the size of Self, it gets horrid 18:28:37 no kidding 18:28:50 especially when you don't have good tools like an object browser for actually comprehending the code 18:29:33 what is the Self mistake? 18:30:28 kyle: the implementation of Self is totally non-portable and not well-documented 18:30:57 and if you ever did want to make the system self-hosting 18:31:02 you'd have to rewrite everything 18:31:08 thanks 18:31:11 [QUIT] lispbliss quit: Ping timeout for lispbliss[sage.cortland.com] 18:31:22 being that it is in C++ 18:31:50 [NICK] ink changed nick to: kf6sta 18:32:15 btw, self mlist activity has picked up recently 18:33:45 to what end, who knows. anyway... 18:33:52 [NICK] trans changed nick to: trans-sho 18:34:43 i think that supporting slate in pidgin only really needs the ability to draw the object/MO distinction and code in it 18:34:54 at least i hope so ;) 18:37:09 eek! 18:37:21 people are quoting me from irc on the self mlist :) 18:37:57 hah 18:38:03 where is the self archive? :) 18:38:58 egroups? 18:40:43 yep 18:40:47 self-interest 18:40:53 they quote you, too 18:41:07 heh 18:42:47 jsut grep irc 18:42:52 s/su/us/ 18:49:30 eihrul ponders joining the mailing list. 18:49:45 discussion interesting enough to warrant subscription? 18:51:41 well look at the archives about the methods as objects discussion 18:52:06 and if you don't like the discussion, ask dave and jecel the questions YOU care about 18:52:47 the mlist is not incredibly active, though, until recently 18:55:23 holy cow 18:55:29 embedded qt 18:55:57 or rather that embedded qt environment thing 18:56:18 QT is icky :) 18:58:02 why? 19:04:16 hm 19:05:08 pidgin's procedural style might be an obstacle 19:05:51 for one, every object in slate would have to be lazy... slots created as needed, etc 19:06:51 for another, mutability is something i'm trying to make a very customizable thing... that means the MO system might get needlessly complex without some special support 19:07:01 hrm 19:13:20 hcf joined #tunes 19:13:52 [NICK] trans-sho changed nick to: trans 19:14:56 hey hcf 19:15:15 hi 19:59:23 well 19:59:32 it is not like pidgin is going to be a large and complex system 19:59:44 where mutability is present, it will be rather contained 20:00:01 and exceedingly simple to contain :) 20:00:04 ok 20:00:27 btw i don't think we ever worked out the slot creation protocol 20:00:36 you know the whole handshaking theory 20:01:25 well, i was just going to have some simple mixin stuff for that 20:02:25 hm ok 20:02:39 there's probably a few good ways to do it 20:03:19 also some slightly more "incremental" ways to build object 20:03:50 well, the reason for the handshaking protocol was so that each object had a "say" in how the link would be handled 20:04:13 like linearity of the reference, mutability aspects, etc. 20:04:57 well, i more or less have a "protocol" for setting and getting fields from an object 20:05:12 which could in theory be overloading :) 20:06:07 s/overloading/overloaded... 20:06:42 however... 20:06:48 that does bring up an issue 20:07:08 ok 20:07:09 that we may need a third element of the slate MOP 20:07:32 if you look at it in the absence of the MO 20:07:34 which would be? 20:07:43 there are two interesting things you can do to an object 20:07:58 you can: 1) 'get' the value of a field 2) 'set' the value of a field 20:08:12 (1) is more or less covered by 'lookup' 20:08:19 but (2) really doesn't have any representation at all 20:08:27 ":" ? 20:08:42 hm you mean something different 20:09:00 well... 20:09:12 i'm just imagining from a simplistic perspective 20:09:18 that an object has two methods, 'set' and 'get' 20:09:28 they both take a symbol that denotes a field name 20:09:35 and 'set' optionally takes a value 20:09:35 hum 20:09:46 which constitutes a small little protocol in and of itself :) 20:09:51 right 20:10:01 where: 20:10:07 but it's reflective 20:10:22 object get field = (object meta) lookup field in object 20:10:33 but... 20:10:34 you're performing a base-level operation on the representation of the object 20:10:37 object set field to value = what? :) 20:11:31 not sure i follow 20:11:43 well, i'm just thinking from a lispian perspective 20:12:12 for pretty much any way to access a "location", there is also a corresponding way to "set" or replace its value (possibly returning a new object in the process or whatever) 20:12:36 the idea of "set"ing can be more or less independent of mutability/immutability, but is still an important concept there :) 20:12:40 it seems pretty clearly a meta-level op to me 20:12:59 yep, but one that doesn't quite have meta-level representation in slate 20:13:04 but nothing separate per se 20:13:11 why not? 20:13:12 which is what i'm trying to emphasize here :) 20:13:17 ':' is not meta-level 20:13:25 i know it's not easily available in the syntax, for sure 20:13:37 well, we're not talking about ':' 20:14:14 i think a richer protocol for slate could be get + set + apply 20:14:20 lol 20:14:24 P 20:14:33 sounds exactly like a self discussion recently 20:14:43 not making fun 20:15:10 but set is merely subsumed by the handshaking in order to obtain new slots 20:15:37 well... 20:15:49 which i apparently need to work out better for you and others 20:16:25 "set" IS a meta-level operation comparable to "lookup" and "apply" in my mind 20:16:33 and i do think it bears representation in the protocol :) 20:16:54 and would make issues like "handshaking" and such easier to deal with 20:17:15 because it is now factored into its own little part of the protocol 20:17:25 well that was the point about the handshaking thing 20:17:38 to make it part of the MOP 20:17:51 well, i think "set" is the way to do this :) 20:18:57 well, i think you're wrong ;) 20:19:06 why? 20:19:07 or at least only half-right 20:19:27 how better can you handle this handshaking? 20:19:31 it depends on what you mean by set 20:19:47 set: object x field -> object 20:19:49 "set" usually means handling a nonlinear name :) 20:20:06 er... 20:20:10 which you demonstrated now quite well :) 20:20:12 set: object x field x object -> object 20:20:33 where does this presuppose linearity anywhere? :) 20:20:46 s/linearity/linearity or non-linearity 20:21:10 or rather... do you mean the non-linearity of the *value* placed into the field? 20:21:10 i forgot you were using type notation 20:21:33 i suppose the latter 20:21:37 OTOH... you could just as well clone the value 20:21:44 in the set part of the protocol 20:21:46 problem solved :) 20:21:57 if you desire linearity 20:22:05 and it encapsulates this all nicely :) 20:22:37 kinda 20:23:37 the problem is that how this works out should be co-operative at least 20:24:01 similar to multi-dispatch over single-dispatch ;) 20:24:10 well... 20:24:19 why can't this cooperation be encapsulated in "set"? 20:24:46 heh 20:25:11 well if by "set" you mean whatever we're talking about, sure, but then you may as well call it "tribble" :P 20:25:52 sure, and we may as well call "lookup" as "supercalafragilisticexpialadocious" and "apply" as "volkswagon" 20:25:56 but we don't 20:26:30 yeah ok we're stretching every notion 20:26:50 but we already have another notion of "set" that i don't want this confused with 20:27:00 what is this other notion? 20:27:03 ':' 20:27:24 well, i'm making the point that ':' should be replaced with an enriched protocol :) 20:27:33 unless you can make the case that it should not be 20:27:42 no, ':' serves another function entirely 20:28:03 what is its function, then? 20:28:06 in fact, ':' essentially is a specific kind of wrapper for this "set" 20:28:07 [QUIT] MysticOne quit: See ya! 20:30:04 except that ':' is meant to supply an emulation of self/smalltalk style state 20:31:25 yes, but how does this differ from an element of a protocol that can be extended to emulate various behaviors? 20:31:41 hm? 20:32:22 or rather, why must this emulation of "self/smalltalk style state" be provided in such an object? :) 20:32:55 well it's better than "x/x:" pairs, if you ask me 20:33:12 after all, we already have the "^" factoring 20:33:14 "x/x" pairs? 20:33:20 no 20:33:26 "x" and "x:" 20:33:27 er, "x/x:" pairs? 20:33:51 well, "set" also avoids this 20:33:59 why? 20:34:13 if ':' is an operator much like '.' that invokes the "set" part of the protocol 20:34:21 you don't need "x/x:" pairs 20:34:35 whoa ":" is not primitive to the syntax 20:34:41 i understand this 20:34:55 but i'm arguing that it should be in so far as '.' is 20:34:55 so what are you saying? 20:35:25 well, notice that '.' *does* move around and clone slots already 20:35:52 (being a stack operator, where the stack is a set of slots linearly passed around) 20:36:50 well, while this particular protocol extension can be simulated with the functionality present 20:37:18 i think the simulation is at the cost of munging up the meta-level and making it less clear 20:37:27 eh? 20:37:36 i think we're miscommunicating 20:37:54 where? :) 20:38:02 what exactly do you mean by this "set" mechanism? 20:38:48 simply, representation in the slate MOP for the idea of placing some object into a slot (whether this means mutation, cloning, or whatever) 20:39:04 complementary to the idea of retrieving a value from a slot 20:39:47 yeah but in the slate model you have to retrieve the value in order to put it somewhere else 20:40:10 why does that pose a problem? 20:40:31 it doesn't... but there's a certain more-literal-than-you-think aspect 20:41:02 cloning something implicitly creates a slot somewhere to access it 20:41:24 (aside from referring to the expression that generated the value) 20:42:00 the whole idea behind the handshaking idea was to be the underlying mechanism for "adding" and "removing" slots 20:42:29 well, i don't see the protocol extension as particularly any different than existing mechanisms we had, only simplified and factored 20:42:45 so if there is some problem with this extension, then i believe it will manifest wherever you try to emulate it :) 20:42:50 i've even considered that GC annotations would be done by that quote-shifting mechanism 20:43:10 which protocol extension? yours or mine? 20:43:26 well, i thought we were discussing mine, i didn't know you had one :) 20:43:36 um the handshaking bit? 20:43:45 okay... wait 20:43:49 clarification: 20:44:07 you're also proposing an extension to the slate MOP to handle a similar problem in a different way? :) 20:44:31 yeah that's what i've been saying, or at least i've thought so 20:44:53 i'm dense, so could be that or me 20:45:14 it doesn't matter now 20:47:22 well, in that case 20:47:44 i'm not necessarily clear where your handshaking idea exactly differs or why it is more expressive than mine 20:49:01 yeah i need to elaborate 20:49:32 hm most of the terms i know to express things, though, involve oo patterns or refactoring terms 20:51:05 basically it abstracts from the implementation of the lookup table mechanism 20:51:43 so you have a common protocol that allows each object to say how it wants its slots to be treated 20:51:52 hm that doesn't explain right 20:52:01 hcf joined #tunes 20:52:43 would agree there 20:53:58 basically it makes changes to the MO transparent to the one asking for the slot 20:54:30 clarify, por favor? 20:54:50 "changes to the MO?" 20:54:55 yes 20:55:10 => ? 20:56:02 for example, let's say you want an object to have a proxy that handles certain slot accesses specially if a remote object asks for a copy of that original 20:56:42 or you want to enforce shared state when every client thinks that it is the only one fooling around with it 20:57:21 [QUIT] adu quit: 20:58:11 for example, i want only the "4" slot in "integers" to actually be the integer 20:58:29 if someone else wants that integer, they don't get the original to fool with 20:58:50 but you don't want the requester to have to know what it can and can't do 20:59:10 [QUIT] ult quit: Ping timeout for ult[149.149.201.30] 20:59:21 ult joined #tunes 20:59:52 where does this involve "changes to the MO"? 21:00:31 well, you're run-of-the-mill copy is a blank object with a parent slot to its original, right? 21:00:44 ywa 21:00:47 s/ywa/yes 21:01:09 if all of those had the same semantics, then you would be restricted in how they handle requests 21:01:53 and for example, you couldn't say "forward this state update to the parent and not that one" 21:02:26 well, wouldn't that just involve giving it a new meta object? 21:03:20 sure, but who does this? 21:03:27 the client? 21:03:31 bad idea 21:03:50 so you put it into part of the protocol of the original object 21:04:05 it's a reflective aspect of it, so in slate it goes into the MO 21:04:38 well, so are you advocating here making "cloning" itself part of MOP? 21:05:22 yes, i guess i am 21:05:30 well... 21:05:41 if you weren't 21:05:45 i think i might :) 21:05:51 ok 21:06:15 because, if you switch the meta-object, but otherwise leave the actual representation (hash table or whatever) of the object unchanged 21:06:24 of course this is the kernel of the "clone" slot that a user would invoke 21:06:32 the representation may no longer be consistent with the new meta-object 21:06:50 well you only have to mute part of the MO 21:07:15 MO has to have components that can be incrementally over-ridden 21:07:32 well, i'm saying if you wanted to change the MO completely :) 21:09:04 i'm saying you wouldn't 21:09:12 why wouldn't you? 21:09:42 well for one, you probably couldn't 21:10:00 (given the MMO's say in a relatively secure slate system) 21:10:21 well... the "couldn't" bothers me 21:10:34 it is hard to even express the idea of changing the MO completely without including this in the protocol :) 21:10:36 but even if you could, you'd wind up with the inconsistencies you just mentioned 21:10:56 well, i could imagine cloning being performed in more or less this manner: 21:11:00 i'm saying the MMO would not let you do it 21:11:14 (the MMO i would implement) 21:11:18 iterating over the list of slots provided by the object, getting the values from the one object, and setting them in the other 21:11:31 "M"-MMO? 21:11:37 er... "M"-MO? 21:11:38 just like how we used to talk about Top being permanently immutable ;) 21:11:49 heh 21:12:01 the MO of the MO 21:12:06 well, i'm not changing the original object 21:12:17 i'm just transferring its representation to another meta-object 21:12:36 well suppose the representation is a slot of the MO 21:12:57 which attempting to mute gets thrown out 21:13:13 but the rest of the MO updates make it through 21:13:16 voila 21:13:27 you've changed part but not all of the MO 21:13:37 without the client having to know it 21:13:46 or manage it itself 21:14:08 eihrul got lost about "which attempting to mute gets thrown out." 21:14:16 heh 21:14:27 i still don't see where mutation comes into the picture 21:14:40 ok s/(that)/"and attempts to mute that one slot get thrown out" 21:14:45 i.e. ignored 21:15:13 sure, but why would you try to mutate it? :) 21:15:23 instead of throwing a damned exception or whatever, have it generate a context which the system refuses to compute 21:15:35 you wouldn't, most likely 21:15:50 the one-MO-per-object idea serves a purpose here 21:16:01 okay, but, i'm also lost as to how this actually relates to the idea of cloning :) 21:16:16 you have shared MO parts which get thrown around and have no instance-specific data 21:16:53 and then you have actual MOs which manage actual objects 21:17:39 part of the MO library would be parts which are ready-made or readily-adapted (programmed) to the specific object or namespace 21:17:58 cloning is meta-regressive 21:18:13 eihrul sighs. 21:18:36 well, something gets cloned IFF the representation reflects it 21:19:12 what did you expect? 21:19:30 well... i was more or less thinking: something can always invoke the cloning protocol (which infers that something can more or less always be cloned) 21:19:42 except you just have to have a way to transfer one representation to another 21:19:51 the whole damned idea of this is to make the system more modular, you grok? 21:21:16 somewhere about half a page up 21:21:16 "the cloning protocol"? 21:21:16 the actual point of this discussion got lost 21:21:16 yeah well i told you to lead because my mind is doing somersaults 21:21:17 originally... 21:21:41 i start about a page ago expressing the idea that creating a new object that more or less is consistent with a new meta-object from an old object and its old meta-object 21:22:06 then... 21:22:18 you brought up the idea that this involving mutating the old MO in some fashion 21:22:26 for which reason i can still not fathom *why* 21:22:34 heh 21:22:54 let's just say that self's clones are really dumb 21:22:56 cloning in no way involves that, in my conception of the concept 21:23:29 then your conception sucks 21:23:50 so what is a "better" conception? :P 21:24:08 well, self's conception is one-size-fits-all 21:24:11 [QUIT] hcf quit: Leaving 21:24:26 so is lisp's and smalltalk's and such 21:25:11 with self, every damned thing has to use a physical, direct manipulation metaphor or it doesn't fit at all 21:25:19 well, there's no reason why cloning couldn't involve any sort of effect whatsoever 21:25:38 yes but *transparent to the client*?? 21:26:31 are we talking about implicit cloning or explicit cloning? 21:26:38 if you have to comment your source with "if you clone me, please remember to forward your xCoordinate field-updates to me and not your clone", then it's a stupid implementation 21:26:44 both 21:26:55 mostly implicit, though 21:27:14 since implicit involves the least client-side knowledge of all: 0 :) 21:27:30 well, rmm, if an object or meta-object can define what cloning means for an object, why is this so terribly problematic? 21:27:56 do you mean the "clone" method, or the cloning mechanism? 21:28:04 both 21:28:47 it's problematic because if you don't set the MO of the clone properly, then its dynamic behavior will not be as you planned 21:29:06 you can't just set the clone's state and hope for the best 21:29:13 what prevents you from giving it the correct MO? 21:29:24 heh 21:29:31 why are you arguing my side now? 21:29:44 well, i'm not arguing your side: 21:29:46 and who do you mean by "you"? 21:30:05 client or server? 21:30:10 my perception of "your side" is that you see for some reason that existing mechanisms in slate do not account for this "cloning problem" 21:30:14 s/server/slave/ 21:30:25 and i'm just trying to assess what this problem is and why existing mechanisms make it a problem :P 21:30:35 eh? 21:30:53 slate can handle it in theory, i just want to make sure i'm elaborating it correctly for you 21:31:29 especially since it has to get implemented, and pidgin AS SURE AS HELL won't do it right 21:31:30 okay, so this is exposition, and not argument? :) 21:31:41 yes 21:32:07 although this is the rationale for the handshaking biz 21:32:16 which *was* an argument, IIRC :) 21:33:35 well, if the handshaking biz is a solution, then i'd assume a rationale for a solution would be a problem :) 21:34:10 huh? 21:34:24 "slate can handle it in theory" 21:34:31 this is not post facto rationale, asshole 21:35:33 rmm, if you wish to take the discussion that way, i'm going to call it a night 21:35:58 well you're not picking on me at the right time 21:36:06 i'm not in the mood for jokes at all 21:36:33 that wasn't a joke perse 21:36:45 in that case, it was rude 21:36:48 but perhaps we should none-the-less wait till tomorrow 21:36:53 you know me better than that 21:37:19 rmm, i think you misinterpreted the statement 21:37:28 well explain it 21:37:37 instead of cutting me off 21:37:55 well, going into this whole discussion 21:38:25 i was under the impression that "handshaking" was something that requires extension of slate 21:38:46 everything is an extension in slate 21:38:54 so what do you mean? 21:39:20 to the MOP itself, or atleast you seemed to more or less state that explicitly earlier (mistakenly or purposely) 21:39:49 nah, more like a refinement of the current ideas and plans for code 22:02:21 [QUIT] kc5tja quit: THX QSO ES 73 DE KC5TJA/6 CL ES QRT (xchat) 22:04:22 [QUIT] eihrul quit: Leaving 22:57:49 [QUIT] diablovision quit: 22:57:53 [QUIT] lar1 quit: 02:47:26 _101 joined #tunes