TIP: 354
Title: Minor Production-Driven TclOO Revisions
State: Final
Type: Project
Tcl-Version: 8.6
Vote: Done
Post-History:
Version: $Revision: 1.4 $
Author: Donal K. Fellows <[email protected]>
Created: 26-Aug-2009
~ Abstract
This TIP describes a few small changes required for solving issues that have
been found when using TclOO in production.
~ Description
TclOO (see [257]) has now had a substantial amount of use for relatively
complex functionality (as well as production deployment) and it has turned out
that there were a few small changes required.
1. The scope of resolution for the target of a '''forward'''ed method is
updated so that it is with respect to the object's namespace. This means
that a class may create methods that forward to a command given by each
instance, which makes creating megawidgets by wrapping real Tk widgets
much easier, since the forwards do not have to be created at the instance
level.
2. A subcommand was added to '''info object''' to allow the discovery of the
namespace of an object by code outside that object. This makes it far
easier for code that needs to "break the abstraction" to do so, which
turns out to be necessary for things like serialization. This subcommand,
'''namespace''', takes an object name as its only argument and returns the
name of the object's namespace.
> To expand on the requirements for serialization, the serialization code
needs to call a method on each object to create the serialization for that
object. However, the method should not be part of the public API for the
object as it cannot perform a complete serialization correctly, since the
serialization depends on the rest of the object graph. (It also requires a
number of global overheads that are best applied once, not repeatedly.)
> Note that I plan to release the serialization code itself (originally
developed as part of a solution for a Rosetta Code task) as a package via
tcllib. This TIP does not propose its inclusion with Tcl.
3. A new C API function has been added to allow code at that level to
''efficiently'' discover the name of an object that it already has a
handle to. This new function, '''Tcl_GetObjectName''', returns a shared
Tcl_Obj reference to the name that needs no special reference count
management.
~ Copyright
This document has been placed in the public domain.