The source code for Tcl is managed by fossil. Tcl developers coordinate all
changes to the Tcl source code at
> [Tcl Source Code](https://core.tcl-lang.org/tcl/timeline)
Release Tcl 9.0.0 arises from the check-in with tag core-9-0-0.
Highlighted differences between Tcl 9.0 and Tcl 8.6 are summarized below,
with focus on changes important to programmers using the Tcl library and
writing Tcl scripts.
## 64-bit capacity: Data values larger than 2Gb
## Internationalization of text
- Full Unicode range of codepoints
- New encodings: utf-16/utf-32/ucs-2(le|be), CESU-8, etc.
- `encoding` options -profile, -failindex manage encoding of I/O.
- `msgcat` supports custom locale search list
- `source` defaults to -encoding utf-8
## Zip filesystems and attached archives.
## Unix notifiers available using epoll() or kqueue()
- relieves limits on file descriptors imposed by legacy select()
## Notable incompatibilities
- Unqualified varnames resolved in current namespace, not global.
- No --disable-threads build option. Always thread-enabled.
- I/O malencoding default response: raise error (-profile strict)
- Windows platform needs Windows 7 or Windows Server 2008 R2 or later
- Ended interpretation of ~ as home directory in pathnames
- Removed the "identity" encoding.
- Removed the encoding alias "binary" to "iso8859-1".
- $::tcl_precision no longer controls string generation of doubles
- Removed Tcl 7 legacies: [case], [puts] [read] variant syntaxes
- Removed subcommands [trace variable|vdelete|vinfo]
- No -eofchar option for channels anymore for writing.
- On Windows 10+ (Version 1903 or higher), system encoding is always utf-8.
- %b/%d/%o/%x format modifiers (without size modifier) for "format"
and "scan" always truncate to 32-bits on all platforms.
- %L size modifier for "scan" no longer truncates to 64-bit.
- Removed command ::tcl::unsupported::inject.
## Incompatibilities in C public interface
- Many arguments expanded type from int to Tcl_Size
- Ended support for Tcl_ChannelTypeVersion less than 5
- Introduced versioning of the Tcl_ObjType struct
- Removed macros CONST*: Tcl 9 support means dropping Tcl 8.3 support
- Removed routines:
> Tcl_Backslash(), Tcl_*VA(), Tcl_*MathFunc*(), Tcl_MakeSafe(),
> Tcl_(Save|Restore|Discard|Free)Result(), Tcl_EvalTokens(),
> Tcl_(Get|Set)DefaultEncodingDir(),
> Tcl_UniCharN(case)cmp(), Tcl_UniCharCaseMatch()
## New commands
- `array default`, `array for`
- `chan isbinary`
- `coroinject`, `coroprobe`
- `clock add weekdays`
- `const`, `info const*`
- `dict getwithdefault`
- `file tempdir`, `file home`, `file tildeexpand`
- `info commandtype`
- `ledit`
- `lpop`
- `lremove`
- `lseq`
- `package files`
- `string insert`, `string is dict`
- `tcl::process`
- `*::build-info`
- `readFile`, `writeFile`, `foreachLine`
- `tcl::idna::*`
## New command options
- `clock scan ... -validate ...`
- `info loaded ... ?prefix?`
- `lsearch ... -stride ...`
- `regsub ... -command ...`
- `socket ... -nodelay ... -keepalive ...`
- `vwait` controlled by several new options
- `expr` string comparators `lt`, `gt`, `le`, `ge`
## Numbers
- 0NNN format is no longer octal interpretation. Use 0oNNN.
- 0dNNNN format to compel decimal interpretation.
- NN_NNN_NNN, underscores in numbers for optional readability
- Functions: isinf() isnan() isnormal() issubnormal() isunordered()
- `fpclassify`
- Function int() no longer truncates to word size
## tcl::oo facilities
- private variables and methods
- class variables and methods
- abstract and singleton classes
- configurable properties
- `method -export`, `method -unexport`
## Known bugs
- [changed behaviour wrt command names, namespaces and resolution](https://core.tcl-lang.org/tcl/tktview/f14b33)
- [classmethod fails if no argument supplied to class create](https://core.tcl-lang.org/tcl/tktview/680503)
- [windows dos device paths inconsistencies and missing functionality](https://core.tcl-lang.org/tcl/tktview/d8f121)
- [zlib-8.8, zlib-8.16 fail on Fedora 40, gcc 14.1.1](https://core.tcl-lang.org/tcl/tktview/73d5cb)
- [Temporary folder with file "tcl9registry13.dll" remains after "exit"](https://core.tcl-lang.org/tcl/tktview/6ce3c0)