Tcl has some particularly distinctive features that often aren't well known, even among many long-time Tcl developers. Here are a few that we think everyone should know about!
A common complaint with older versions of Tk was that, being based on the Motif visuals, it did not look right on other platforms. Current versions of Tk include themed widgets that reflect the look of the native windowing system. And as always, the look and feel of Tk can be customized to your exact liking.
Tcl includes features for OO programming that are powerful and flexible enough to be used on their own while also providing a foundation for layering other OO models. Tcl does not force you to a particular style and instead adapts to the way you think about OO.
One of the things that makes Tcl so powerful is an event-driven I/O model that permeates everything: files, networking, GUI's and more. This makes Tcl programming more consistent, without having to rely on more complex mechanisms or add-on packages like most languages require.
Concurrent programming does not have to be complex, not with Tcl. Coroutines simplify programming by allowing asynchronous interleaved tasks to be written in a sequential style. Native thread support allows utilization of multiple processors for performance via a message passing model with minimal need for synchronization.
An I/O Framework That Does More Than I/O
Tcl's I/O framework handles both synchronous and asynchronous I/O in a platform-independent manner. Useful but common and booooring. But how about character encoding on the fly, or compressing, or encrypting, or your own transform implemented at the script level? On demand, and transparent to the application! Now, that's not common.
Sure, some other languages have libraries for accessing web or ftp sites, or looking inside zip files. But how many provide an open ended system, extendible from script, that allows you to access any such resource using the same I/O commands you'd use with regular disk files?
Practicing Safe Programming
Your application needs to communicate but there are bad guys out there. What to do? What to do? Run within a safe Tcl interpreter that provides a sandboxed environment that places limits on the operations that can be performed.
Think deployment means "configure && make", or just compiling your scripts into an executable? Eliminate your deployment and installation headaches. Tcl has several technologies, including one called "Starkits", that let you take application deployment to a whole new level of power, flexibility and convenience.
Most dynamic languages lets you write extensions to add new features to the core language (Tcl was built on this capability). But usually, you have to compile those extensions against the exact version of the language you're running against, making upgrading painful. With stubs, you can build compiled extensions that work against multiple versions of Tcl.