Artifact 57fbfb01ec27bbfc6e1684778d0e0ac095e0f2855276c442cec0f6eb027ea243:
- File changes.md — part of check-in [7cd4c1125d] at 2024-09-17 10:29:49 on branch core-9-0-0-rc — Remove 'known bug' listing for issue that was fixed several months ago (user: dkf size: 4246)
The source code for Tcl is managed by fossil. Tcl developers coordinate all changes to the Tcl source code at
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.
encodingoptions -profile, -failindex manage encoding of I/O.msgcatsupports custom locale search listsourcedefaults 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 forchan isbinarycoroinject,coroprobeclock add weekdaysconst,info const*dict getwithdefaultfile tempdir,file home,file tildeexpandinfo commandtypeleditlpoplremovelseqpackage filesstring insert,string is dicttcl::process*::build-inforeadFile,writeFile,foreachLinetcl::idna::*
New command options
clock scan ... -validate ...info loaded ... ?prefix?lsearch ... -stride ...regsub ... -command ...socket ... -nodelay ... -keepalive ...vwaitcontrolled by several new optionsexprstring comparatorslt,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
- classmethod fails if no argument supplied to class create
- windows dos device paths inconsistencies and missing functionality
- zlib-8.8, zlib-8.16 fail on Fedora 40, gcc 14.1.1
- Temporary folder with file "tcl9registry13.dll" remains after "exit"