Author: Jan Nijtmans <[email protected]>
State: Final
Type: Project
Vote: Done
Created: 08-Nov-2017
Post-History:
Tcl-Version: 9.0
Tcl-Branch: tip-485
Abstract
The "case" command, and the "read|puts ... nonewline" construct are replaced by better commands long ago (resp. "switch" and "read|puts -nonewline ..."), but the old forms were never actually removed from the Tcl code base. They still work. See also bug #3151675. For Tcl 9.0 it is finally time to actually remove it.
In addition, there are a number of C API's which have better successors
by now. Finally, there are a few C routines and other macros which were
never been properly documented before, like CONST, or macros needed for
supporting deprecated C features, like _ANSI_ARGS_ and TCL_VARARGS.
This TIP proposes to finally remove all of those in Tcl 9.0, and mark
them as deprecated in Tcl 8.7.
Rationale
The "case" command is superseded by the "switch" command.
The "read <chan> nonewline" construct is superseded by "read -nonewline <chan>".
The "puts <chan> <line> nonewline" construct is superseded by "read -nonewline <chan> <line>".
The following C routines -- mostly macros -- like the "case" command have never been part of the documented interface of Tcl 8, and should be removed:
Tcl_DStringTruncTcl_CkallocTcl_CkfreeTcl_CkreallocTcl_ReturnTcl_TildeSubstpanic
The following C macros don't serve any purpose any more, they will be removed in Tcl 9.0:
CONST84_RETURN(just useconst)CONST84(just useconst)CONST(just useconst)INLINE(just remove it)TCL_RESULT_SIZE(useTCL_DSTRING_STATIC_SIZEin stead, if you really have to)TCL_VARARGS(just use...)TCL_VARARGS_DEF(just use...)TCL_VARARGS_START(just useva_start())_ANSI_ARGS_(just use '(' and ')')VOID,CHAR,SHORT,LONG(windows-only, just use lower-case variant)TCL_PARSE_PART1(flag for variable-related functions, has no effect any more)__WIN32__,WIN32(just use_WIN32)
Minor note: The macro CONST86 is still kept, as this can be used
for extensions wanting to keep compatibility with Tcl 8.5. This macro
will become DEPRECATED in Tcl 9.0, but will not be removed yet.
The following types don't serve any purpose any more, they will be removed in Tcl 9.0:
Tcl_ValueType(enum, used by deprecated math-related functions)Tcl_Value(struct, used by deprecated math-related functions)
The function Tcl_Backslash is superseded by Tcl_UtfBackslash
- The routine
Tcl_Backslashreturns a single-byte char. It cannot return all possible character values produced in Tcl backslash sequences. Moving to the successor routine fixes bugs.
The function Tcl_GetDefaultEncodingDir is superseded by Tcl_GetEncodingSearchPath
The function Tcl_SetDefaultEncodingDir is superseded by Tcl_SetEncodingSearchPath
The function Tcl_EvalTokens is superseded by Tcl_EvalTokensStandard
- The routine
Tcl_EvalTokensis incapable of reporting back to the caller the return code produced by evaluation. Moving to the successor routine fixes bugs inherent in not distinguishing different return codes.
Finally, the functions Tcl_CreateMathFunc, Tcl_GetMathFuncInfo and Tcl_ListMathFuncs
are superseded by TIP #232
Proposed Change
If Tcl 8.7 is compiled with the flag -DTCL_NO_DEPRECATED, the "case" command,
the "read <chan> nonewline", and the "puts <chan> <line> nonewline"
constructs will be disabled. In Tcl 9.0 all related
code will actually be removed from the Tcl code base.
The following API's are declared deprecated in Tcl 8.7 and will be
fully removed in Tcl 9.0. If Tcl 8.7 is compiled with the flag -DTCL_NO_DEPRECATED,
all deprecated API is disabled, by making those entries MODULE_SCOPE, and
putting 0 in the corresponding stub entries. This can be used by extensions
to see whether they are compatible with the next major Tcl release or not.
Those functions are already removed in the "novem" branch:
Tcl_BackslashTcl_GetDefaultEncodingDirTcl_SetDefaultEncodingDirTcl_EvalTokensTcl_CreateMathFuncTcl_GetMathFuncInfoTcl_ListMathFuncs
An implementation of this TIP can be found in the tip-485 branch. This branch is based on "core-8-branch" (Tcl 8.7), but can be trivially merged forward to trunk (Tcl 9.0).
Rejected Alternatives
Originally, Tcl_EvalFile was a candidate for removal as well.
Copyright
This document has been placed in the public domain.
