Tcl/Tk 8.5.0 Release Announcement
December 20, 2007
The Tcl Core Team is pleased to announce the 8.5.0 releases of the Tcl
dynamic language and the Tk toolkit. This is the first stable release of
Tcl/Tk 8.5. More details can be found below. We would like to express
our gratitude to all those who submit bug reports and patches. This
information is invaluable in enabling us to identify and eliminate
problems in the core.
Where to get the new releases:
Tcl/Tk 8.5.0 sources are freely available as open source from the Tcl
Developer Xchange web site at:
This web page also contains additional information about the releases,
including a summary of new features. Sources are always available from
the Tcl SourceForge project's file distribution area:
For additional information:
Please visit the Tcl Developer Xchange web site:
This site contains a variety of information about Tcl/Tk in general, the
core Tcl and Tk distributions, Tcl development tools, and much more.
Summary of Changes since Tcl/Tk 8.5b3:
A complete list can be found in the changes file at the root of the
source tree. The more complete ChangeLog is also included with each
The short list of key changes since the Tcl/Tk 8.5b3 release follows.
For those who have not been following alpha and beta development,
read on to the next sections for pointers to information on the changes
since Tcl/Tk 8.4.
* Support for bytecoding ensembles; applied to [dict] and [string].
* Order of items in a serialized dict is stable.
* New Danish message catalog for Tk.
* New Tcl_ObjType for channel names.
* Package tcltest 2.3.0 released.
* Fixed crash due to alignment of stack-allocated memory.
* Fixed crash in [lsearch -exact -integer].
* Fixed crash in [$text replace].
* Fixed crash in [photo put] with PPM data.
* Fixed spurious NUL character in [glob] results.
* Fixed the <<Modified>> virtual event on [text] widgets.
* Revised regexp engine avoids some debilitating inefficiencies.
Summary of new features since Tcl/Tk 8.4:
Development of Tcl/Tk 8.5 began in March 2003, shortly after the release
of Tcl/Tk 8.4.2. The number of new features, bug fixes, and changes
since then is quite large.
The Tcl Core Team (TCT) began governing additions of new features in
Tcl/Tk in September 2000. The TCT documents their decisions in Tcl
Improvement Proposals available at:
A summary of the new features visible to Tcl scripts in the Tcl/Tk 8.5
releases is maintained at:
Each item includes links to the TIP(s) that approved the change.
There have also been changes to the C API for the Tcl and Tk libraries
that are not visible to Tcl scripts, but are important to those who
create extensions and applications that use Tcl/Tk. The relevant TIPs
are, for Tcl:
TIP #59: Embed Build Information in Tcl Binary Library
TIP #100: Add Support for Unloading Dynamic Libraries Loaded with [load]
TIP #111: Dictionary Values and Manipulators
TIP #121: Controlled Application Shutdown via Tcl_Exit
TIP #132: Revised Floating-Point Conversions in Tcl
TIP #137: Specifying Script Encodings for [source] and tclsh
TIP #138: New TCL_HASH_KEY_SYSTEM_HASH option for Tcl hash tables
TIP #139: Publish Part of Tcl's Namespace API
TIP #143: An Interpreter Resource Limiting Framework
TIP #148: Correct [list]-Quoting of the '#' Character
TIP #181: Add a [namespace unknown] Command
TIP #182: Add [expr bool] Math Function
TIP #183: Add a Binary Flag to [open]
TIP #208: Add a 'chan' Command
TIP #218: Tcl Channel Driver Thread State Actions
TIP #219: Tcl Channel Reflection API
TIP #226: Interface to Save and Restore Interpreter State
TIP #227: Interface to Get and Set the Return Options of an Interpreter
TIP #232: Creating New Math Functions for the 'expr' Command
TIP #233: Virtualization of Tcl's Sense of Time
TIP #235: Exposing a C API for Ensembles
TIP #237: Arbitrary-Precision Integers for Tcl
TIP #254: New Types for Tcl_LinkVar
TIP #258: Enhanced Interface for Encodings
TIP #268: Enhance 'package' Version Handling
TIP #270: Utility C Routines for String Formatting
TIP #298: Revise Shared Value Rules for Tcl_GetBignumAndClearObj
and, for Tk:
TIP #116: More Safety for Large Images
TIP #137: Specifying Script Encodings for [source] and tclsh
TIP #145: Enhanced Tk Font Handling
TIP #165: A User-Data Field for Virtual Events
TIP #245: Discover User Inactivity Time
TIP #248: Integrate Tile into Tk as Ttk
TIP #264: Add Function to Retrieve the Interpreter of a Window
These lists of feature changes are starting points for exploring the
new capabilities of Tcl/Tk 8.5.0. As more developers become familiar
with the new tools, expect more guides to effective use of the new
features to appear online.
The Tcl/Tk 8.5.0 releases are highly compatible with prior releases
of Tcl/Tk since 8.1. There are a handful of changes that may cause
programs and scripts written for prior releases to behave differently
with Tcl/Tk 8.5.0. Here we summarize the known things to watch out for.
Platform support issues:
* Tcl/Tk 8.5 no longer support the Mac OS 9 system, nor IRIX 4,
RISCos, Ultrix, nor ancient BSD systems.
* As a general comment, any scripts that rely on the precise text of
an error message (a common issue in test suites) may need revision.
Tcl/Tk 8.5 includes many revisions to the text of many error messages
for the sake of clarity or readability.
* The look and feel of the classic Tk widgets in the X11 window system
has been revised to conform better to the expectations of modern X11
desktop environments. For any scripts that simply must have the
old-fashioned settings, they can be restored with the command
* When floating point values are converted to a string representation,
the conversion is no longer governed by a default value of 12 for
$::tcl_precision. The default value is now 0, meaning the shortest
string representation that when parsed produces precisely the same
floating point value. Some scripts that display floating point values
may begin to see displays like "1.9999999999999998" where "2.0" had
been displayed before. Revise the script to explicitly [format]
values as desired. As a last resort, [set ::tcl_precision 12] will
restore compatibility within the current thread, but be aware this
will also resurrect bugs that the change has fixed.
* Integer values in Tcl now span an unlimited range. This means that
integer calculations no longer overflow. Scripts that depend on
overflow taking place in an integer calculation need to be revised
to use the int() or wide() functions, or bit masking, to make its
range-limiting needs explicit.
* The [package ifneeded] command is no longer permitted to lie about
the version provided by evaluating its script argument. When the
command [package ifneeded $p $v $s] is evaluated in an interpreter,
and later a [package require $p $r] causes script $s to be evaluated,
with the intent to load version $v of package $p in the interpreter,
if some version of $p other than $v is in fact provided, an error is
now raised. Package authors must take care that their
[package ifneeded] commands are maintained to be accurate. One way
to take care of this is to deploy packages as Tcl Modules.
* The [text] widget no longer permits negative or decreasing tab stops.
* The treatment of a channel's -blocking attribute during [close] has
been revised on Windows to be consistent with Unix.
* The [glob -nocomplain] command has been revised to silence only the
"no results" error. Other errors from the filesystem operations now
pass through to become errors raised by [glob].
* When evaluation of a command creates new execution leave traces on
that command, those new traces do not fire when command evaluation ends.
They will fire for the first time the next time the command is
* The formatting of list values has been corrected to properly quote the
"#" character when it would otherwise be the first character of the
list's string representation. Scripts (most commonly test suites) that
depend on a specific string representation of a list might be broken.
* The [auto_reset] command does a more complete job now, which may lead
to more re-[source]-ing of files containing auto-loaded commands.
Issues for users of the public C API:
* The Tcl_Main() and Tk_MainEx() routines now consume a leading command
line option, "-encoding". Programs that call these routines may find
this interferes with their own ability to accept a "-encoding" option.
* The built-in Tcl_ObjTypes "index", "ensembleCommand", "localVarName",
"levelReference", and "nsName" are no longer registered. Programs that
pass any of these strings to Tcl_GetObjType() need to be prepared for
a NULL return.
* Aqua Tk has replaced RgnHandles with HIShapeRefs. Programs that
access MacDrawable Rgns may need revision.
* Deprecated routine Tcl_GetMathFuncInfo() doesn't do much any more, since
math functions are now implemented as Tcl commands.
Issues for users of the private interfaces:
* Dependencies of Tcl's header files have been revised. Programs that
#include a private header file may need the order of #include directives
* Tcl and Tk now use the MODULE_SCOPE macro to limit the export of
symbols that are meant for internal use. Any code that calls an
internal routine that's not in one of the internal stubs tables
will find that routine is no longer exported from the shared
libraries. Static linking or a custom build of the shared libraries
with MODULE_SCOPE undefined is required to continue such
(unsupported) use of internal interfaces.
* The pre-8.4 private interface hooks into Tcl's filesystem support have
been removed. Extensions and programs are expected to have migrated
to Tcl 8.4's public Tcl_Filesystem interface.
* Any code making direct use of the structs Var, Bytecode, Namespace,
or CallFrame will likely need revision to account for changes in these
internal data structures.
* Any code poking into the internal representations of Tcl's built-in
Tcl_ObjTypes might need revision. Notably the "list" and all numeric
types have significant internal changes.
* The proper test for level #0 of an interp has changed. Replace any
(iPtr->varFramePtr == NULL) test with
(iPtr->varFramePtr == iPtr->rootFramePtr).
Tcl Core Team and Maintainers
Don Porter, Tcl Core Release Manager
| Don Porter Mathematical and Computational Sciences Division |
| donald.por...@nist.gov Information Technology Laboratory |
| http://math.nist.gov/~DPorter/ NIST |