From: Donal K. F. <don...@ma...> - 2012-01-18 14:02:18
|
On 18/01/2012 00:13, Alexander Shpilkin wrote: > I have been recently working on an object system for Jim based on the > new ensemble functionality[1]. So, I'd be glad to hear any use cases or > real-life experience of object-based design in Jim or Tcl programs, just > to have something to test the ideas on. Even examples of small class > (object? prototype?) hierarchies would be very useful. Well, the canonical system of objects in Tcl is definitely Tk widgets. Not the relationships of the widgets to each other (that's composition) but rather the fact that you have classes, some idea of what operations all widgets have, etc. You can even think in terms of some widgets being derived from others; many buttons are really derived from labels (even if not explicitly) and spinbox is derived from entry. Ttk takes this a bit further. Of course, that's not really a full OO system (deriving new classes is stupidly hard) and might not be exactly what you're after anyway. Aside from that, most of Tcl's object-y things tend to be arranged in very shallow hierarchies. There are many things that ought to be classes in Tcllib, but not much inheritance to speak of. And there's the lesson of Snit: good delegation is often more important than good inheritance. > The current version is a relatively simple prototype-based design with > more advanced features like multiple dispatch and traits added on top of > it. Side note: I considered multiple dispatch for TclOO, but instead went for [proc]-like 'args' support as being more Tcl-ish. Can't really have both at the same time without the whole complicated business of a type system and… well… again, not Tcl-ish enough. Jim may well have less of a problem with it. :-) > Parts of it will probably be written in C, but the current pure-Tcl > implementation is already available at [2]. Thoughts and comments on any > aspects are very welcome, too. (There's at least one major problem in > it: objects never get garbage-collected, because a cyclic reference is > always created. Some features may not be complete.) Dispatch, memory management and lifecycle management probably have to be written the hard way. (Full GC _is_ hard, which is why TclOO doesn't actually do it. Since TclOO objects are commands and not values though, that's not as hurtful as it might be. YMMV.) Donal (this is all just my 2¢ and might not all be useful to you). |