This page is about (the features that should be produced within) an ongoing project of the [Google Summer Of Code] 2011. ---- The idea (abstractly): Suppose you've got some value ''X'', and you know you'll need to know f(''X'') quite often, where f is some function. Then a [stasher] can let you compute f(''X'') '''once''' and then "stash" the result within the [Tcl_Obj] that is ''X'', so that when subsequently you need to know f(''X''), computing it is "free". The Tcl core uses this idea in a number of cases, usually when ''X'' is a piece of code written by a programmer and ''f'' is the operation of compiling that code: Tcl scripts can be bytecompiled, [expr]essions can be bytecompiled too, and [regexp]s compile to a finite automaton. But traditionally, you could only do that if you had implemented ''f'' in [C]. A [stasher] makes it possible to use any Tcl command as an ''f'' here, and additionally it lets you cache g(''X''), h(''X''), etc. for as many functions ''g'', ''h'', … as you bother to define. **Interface** (The details below are preliminary.) Small glossary: stash: Where cached values are stored. Technically this is going to reside within the internal representation of a [Tcl_Obj], so that when the original value is forgotten, everything that was cached for it goes away too. ''stasher'': A command used to access a stash. '''stasher''': The command used to create ''stasher''s. property: A computed value that can be cached within a stash. ''(To be continued)'' ***Example*** Practically, one might do something like the following stasher book { # Lots of code defining properties of "book"s and how to compute or look them up } set pptt isbn:0-13-038560-3 book get $pptt title Some delay when '''book''' retrieves a library catalog entry for the book with ISBN 0-13-038560-3, and then returns: `Practical programming in Tcl/Tk`. book get $pptt authors No delay before returning: `{Welch, Brent B.} {Hobbs, Jeffrey} {Jones, Ken}`, as the full catalog entry is stashed within the $pptt value. set pptt Returns: `isbn:0-13-038560-3`. We're not automagically mutating values, we're doing things to the internal representation that supplements that value. book get isbn:0-13-038560-3 authors Returns `{Welch, Brent B.} {Hobbs, Jeffrey} {Jones, Ken}` as above, but after a delay. Though the two strings are equal, they are not stored in the same [Tcl_Obj], so when '''book''' is handed one it cannot access the data stashed within the other. <>Internals