summaryrefslogtreecommitdiffstats
path: root/changes.md
blob: fbb6b47a13fb4ff6b14619a6b25008611ca2f3f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

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.0b2 arises from the check-in with tag core-9-0-b2.

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
 - $::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.

## 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`
 - `coroinject`, `coroprobe`
 - `clock add weekdays`
 - `const`, `info const*`
 - `dict getdefault`
 - `file tempdir`, `file home`, `file tildeexpand`
 - `info commandtype`
 - `ledit`
 - `lpop`
 - `lremove`
 - `lseq`
 - `package files`
 - `string insert`, `string is dict`
 - `tcl::process`
 - `*::build-info`

## New command options
 - `regsub ... -command ...`
 - `lsearch ... -stride ...`
 - `clock scan ... -validate ...`
 - `socket ... -nodelay ... -keepalive ...`
 - `vwait` controlled by several new options

## 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 variable and methods
 - `method -export`, `method -unexport`