TIP #276: Specify and Unify Variable Linking Commands


TIP:276
Title:Specify and Unify Variable Linking Commands
Version:$Revision: 1.20 $
Author:Miguel Sofer <msofer at users dot sourceforge dot net>
State:Draft
Type:Project
Tcl-Version:8.7
Vote:Pending
Created:Sunday, 01 October 2006
Keywords:Tcl, global, variable, upvar, namespace upvar

Abstract

The purpose of this TIP is to simplify and clarify the semantics of the commands in Tcl that couple variables in different scopes together.

Rationale

This TIP proposes to specify and document the behaviour of the different variable linking commands in Tcl: global, variable, upvar and namespace upvar.

In particular, as many of these commands were initially designed to be mainly useful from within procedure bodies, the documentation does not specify their behaviour with respect to qualified variable names.

This TIP proposes to specify and document this behaviour, insuring that it is essentially the same in all these commands.

Current Situation

There have been a few bug reports concerning the behaviour of variable linking commands with respect to qualified variable names: 604226, 1274916, 1274918. Some are real bugs, some are just surprising but correct behaviour, some are surprising unspecified behaviour.

Within proc bodies all of these commands create local variables that are linked to original variables elsewhere (the following assumes that local is a non-qualified name):

One undocumented issue is what should happen when local is a qualified name.

Another issue is the behaviour of these commands when invoked outside of procedure bodies:

Proposal

This TIP proposes to unify the criteria, making all of these commands essentially implementable in Tcl from the most general, upvar. The behaviour should not depend on the commands being invoked within or outside of a procedure body.

In all of the following, it is an error for local to be a qualified variable name.

In all cases, attempting to link a variable to itself will be a no-op.

Compatibility

This TIP may cause breakage in some scripts relying on undocumented behaviour.

The specification changes for global and variable outside of proc bodies is almost certainly implementing what the programmer meant them to do, hence likely to fix more bugs than it causes.

Reference Implementation and Documentation

Forthcoming at SF.

Copyright

This document has been placed in the public domain.


Powered by Tcl[Index] [History] [Edit] [HTML Format] [Source Format] [LaTeX Format] [Text Format] [XML Format] [*roff Format (experimental)] [RTF Format (experimental)]

TIP AutoGenerator - written by Donal K. Fellows