The source code for Tcl is managed by fossil. Tcl developers coordinate all changes to the Tcl source code at
Release Tcl 9.1.1 arises from the check-in with tag core-9-1-1.
Tcl patch releases have the primary purpose of delivering bug fixes to the userbase.
Bug fixes
Updated bundled packages, libraries, standards, data
- msgcat 1.7.2
- tzcode 2026e
Updated bundled packages, libraries, standards, data
Release Tcl 9.1.0 arises from the check-in with tag core-9-1-0.
Highlighted differences between Tcl 9.1 and Tcl 9.0 are summarized below, with focus on changes important to programmers using the Tcl library and writing Tcl scripts.
Incompatibilities
- Remove
exprbehavior fromlseqIncompatibility - File paths are now treated as case-insensitive on MacOS Incompatibility
- New command
tcl::registryas replacement for theregistrycommand without needing the registry package to be loaded. The registry module is now part of the core Tcl DLL in all build configurations. - Custom applications must call Tcl_FindExecutable or TclZipfs_AppHook to initialize Tcl Potential incompatibility
- Search path for locating Tcl core script and encodings is changed Potential incompatibility
New commands and options
- New options
-backslashes,-commandsand-variablesforsubstcommand - New command
unicodefor Unicode normalization - New
timercommand, switch to monotonic clock and microsecond resolution - New
lfiltercommand for selecting items from a list - Many new functions from C99, specifically:
acosh(),asinh(),atanh(),cbrt(),copysign(),dim(),erf(),erfc(),exp2(),expm1(),fma(),gamma(),ldexp(),lgamma(),log1p(),log2(),logb(),nextafter(),remainder(),signbit(), andtrunc(), and (for functions that return multiple values in their C99 API) the commands:divmod,frexp,modf, andremquo. (See this page for more information about these functions; the Tcl functions are intentionally only thin wrappers around the functions in the C99 standard.) - New
switchoption-integerto compare values as integers - Reading and writing of child interpreter variables
- Updated Tcl Bytecode opcodes
New
tcltest::configureoption-iterationsto control number of iterations of each test.
New public C API
Tcl_IsEmpty()— checks if the string representation of a value would be the empty stringTcl_GetEncodingNameForUser()— returns name of encoding from user settingsTcl_AttemptCreateHashEntry()— version ofTcl_CreateHashEntry()that returns NULL instead of panic'ing on memory allocation errorsTcl_ListObjRange(),Tcl_ListObjRepeat(),Tcl_ListObjReverse()— C API for new list operationsTcl_UtfToNormalized(),Tcl_UtfToNormalizedDString()— C API for Unicode normalizationTcl_UtfToExternalEx()andTcl_ExternalToUtfEx()— C encoding API supporting output buffers larger than INT_MAX- New API for monotonic clock and microseconds resolution
- Windows
auto_execokenhancements andexecsearch reform - New timer API using long long in stead of Tcl_Time
Tcl_RegisterPostInitProccallback for post-initialization of interpreters
Performance
- Memory efficient internal representations for list operations on large lists.
- Continued 64-bit capacity: Command line arguments larger than 2Gb
- Support for long paths on Windows
- Faster UTF-8 encoding and I/O
- Faster interpreter creation
Bug fixes
- Inconsistent
globmatching on MacOS file normalizedoes not uniquely identify a file on MacOS- Inconsistencies between
cdandfile normalizefor volume-relative paths on Windows - Tcl cannot run from an arbitrary build directory with --disable-zipfs
- Crash on finalization with an active thread running.
- Crash on use-after-free in Windows socket thread.
Updated bundled packages, libraries, standards, data
- Unicode 18.0.0
- platorm 1.2.0: Add support for musl C runtime
