Tcl has seen major improvements in the last few releases. The result is a high-performance, cross-platform scripting language with a robust, thread-safe implementation. For more detailed information about the new features in each version of Tcl/Tk, take a look at the Release Notes.
With the Tcl/Tk support for thread safety, developers can now use Tcl in multi-threaded, high performance applications. Finally, all the benefits of scripting - rapid development, extensibility, powerful GUIs, and more - can be applied to multi-threaded applications.
Individual threads are allowed to use one or more interpreters as long as each interpreter (and any slave interpreters) is only accessed by one thread. Interpreters in different threads communicate by sending Tcl scripts to other threads for evaluation. There are new C APIs for mutexes, condition variables, and thread local storage.
Tcl's new internationalization facilities allow developers to create Tcl applications that support any multi-byte language, including Chinese and Japanese. Tcl is the first cross-platform scripting language to help developers to deploy both commercial and enterprise network applications on a global scale.
Tk has also undergone a major overhaul to support the new internationalization features of Tcl. The font package has been rewritten to support arbitrary Unicode characters; when you specify a particular font such as "Times 12", Tk may actually use additional fonts to display Unicode characters that don't exist in the font you chose. Tk guarantees to find a way to display any Unicode character regardless of the font you selected, as long as there is some font in the system that contains the Unicode character. The input method support in Tk has also been modified to support full Unicode characters.
It has always been easy to extend Tcl with new commands. However, lack of makefile standards and differences in dynamic loading facilities have made it difficult to share extensions, either as source code or binary distributions. The Tcl Extension Architecture (TEA) provides standards for extension writers so all Tcl extensions can be built in a common framework, and easily shared by others in the Tcl community.
Tcl uses autoconf, configure, and make for its build process on both Unix and Windows. TEA includes a set of standard autoconf macros that extension authors can use to create their own highly portable extensions. There are also sample project files for the Macintosh and Windows compilers.
Tcl implements its own form of dynamic linking through a "stub library" mechanism. An extension that links against the stub library can be used across multiple versions of Tcl. It is also possible to create statically linked Tcl shells that can still dynamically load extensions linked against the stub library.
Other Improvements Introduced in Tcl 8.1
There is a new message catalog package which makes it easy to localize the strings in a script.
A DDE package has been added for the Windows platform. This allows Tcl applications to use DDE to communicate with other Windows applications. This package is not yet a complete replacement for the Tk send command. Note that this package is usable from Tcl shells.
There is a new library of C procedures for manipulating widget configuration options using Tcl_Objs instead of strings. This should eventually make Tk much more efficient. Label, button, checkbutton, radiobutton, and menu widgets have been modified to use the new library.
More Tcl_Obj support
Several additional C library procedures have been added to support Tcl_Objs.
Tk embedding now also works on the Macintosh, as long as both the container and embedded application are in the same process.
Binary data is handled differently since Tcl 8.1 than in Tcl 8.0. Tcl now uses the UTF-8 facilities to represent binary data: the character value zero is represented with a multi-byte sequence, so that (once again) strings in Tcl never contain null bytes. This means that binary data is now accepted everywhere in Tcl and Tk (in Tcl 8.0 the support for binary data was incomplete). If you have C code that needs to manipulate the bytes of binary data (as opposed to just passing the data through) you should use a new object type called "byte array". ·
Tcl still supports the string-based interface to Tcl command implementations.
However, commands that use the