- core - The main object engine
- llama - A UI engine for simultaneous development of HTML, LaTeX, an Tk pressentations
- taodbi (being adapted to TDIF which is being adapted to TIP 308)- A general purpose interface to databases systems
- taourl (being adpated to [Tao-Http]) - An object oriented web development kit
Introduction to TAO Programming(Some of this is out of date, and in the process of being updated for Tao 9.0)TAO tries very much to look like Incr Tcl. This is by design, as it was intended to port a large library of existing Incr Tcl code with a minumum of fuss. So before we get too far, why would one decide to use TAO over Incr Tcl?Well it used to be about multiple inheritance. But as Tao has evolved, it has emerged as a light-weight object system on its own merits. The rules of TAO are designed to make behavior predictable for very large, complex, and otherwise nasty class hierarchies.Say you have "The mother of all Classes", class MOAC. In a database system you go off and implement a pile of creature comforts that you want all objects to possess. But what if you decide later to fuse two decendents of MOAC? You're screwed. Incr Tcl will throw up and die because it doesn't want to be bothered sorting out how much of this and how much of that go into a particular class. Each class can be inherited once and only once. (This was as of 2002).After knocking my head for years with different schemes to fit into this straightjacket of a concept, I realized there had to be a better way. So I wrote one. The answer was to stop thinking of classes as data structures, and instead to think of them as the product of a database search. When one builds the spec for a class, you really aren't doing anything but loading data into a central corpus. It is only when an object is called into being that the final decisions are made about the form and structure of a class, the content of the method bodies, etc.
DiscussionRLH I am just curious...does this use any of the OO stuff that is going into 8.5 or is it "your" object system? If so, why did you go this route? Do not take it as a critique at all as it seems cool. Just want to get into your head about the rationale.SDW: Yes it's my system. That said, because the code is fed into a database and assembled on the fly there is nothing that is keeping it from exploiting the new TclOO features as they come on line. TclOO is not intended to be an object system by itself, it is (or will be) a set of tools for implementing one. I have a ranting about "Why" that I've posted on my blog to save space on this page: LV: Is this statement (that tcloo is not intended to be an object system) still true? The debates and discussions I've been reading over the past 7+ months seemed, to me, to indicate otherwise. However, I've been trying to locate these discussions (which centered around questions being answered by DKF, who is responsible for the majority (perhaps all) of the OO code being developed for the tcl core. If someone locates those discussions, this would be a fine place to plug them in.SDW: From the Tcl'ers Chat on 2007-08-01
[10:38] hypnotoad Donal, there was a question about the nature of TclOO. My recollection was that it was more a framework for rolling one's own OO. Others disagree. [10:38] dkf I think it's a framework [10:38] dkf but it's also capable enough on its own, provided you don't want a lot of fancy variable handline [10:38] dkf handlingSo methinks the answer to whether TclOO is a framework or a Object System is "yes". Getting back to the discussion Tao isn't about the implementation. It's about a notation scheme and set of predicatable behaviors that will make code developed today forward-compatible.(Postscript for Tao 9.0: Tao is actually implemented on top of TclOO. Much to the merriment of myself AND Donal.)
Tao Data Encapsulation