Diff
Not logged in

Differences From Artifact [6d64d69ac1]:

To Artifact [05caec05f0]:


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
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







-
+







-
-
+
+

-
+


+
+
+
+

-
-
+
+

+
+

-
-
+
+
+


-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


+


-
-
+
+


+
+


-
-
-
-
-
+
+
+
+
+

-
-
+
+
+
+
+

-

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 8.7b1 arises from the check-in with tag core-8.7-b1.
Release Tcl 8.7b1 arises from the check-in with tag core-8-7-b1 (not released yet).

Highlighted differences between Tcl 8.7 and Tcl 8.6 are summarized below,
with focus on changes important to programmers using the Tcl library and
writing Tcl scripts.

## 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.
 - 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
 - `source` defaults to `-encoding utf-8`

## Zip filesystems and attached archives.
 - Packaging of the Tcl script library with the Tcl binary library,
   meaning that the `TCL_LIBRARY` environment variable is usually not required.
 - Packaging of an application into a virtual filesystem is now a supported
   core Tcl feature.

## Unix notifiers available using epoll() or kqueue()
 - relieves limits on file descriptors imposed by legacy select()
## Unix notifiers available using `epoll()` or `kqueue()`
 - This relieves limits on file descriptors imposed by legacy `select()` and fixes a performance bottleneck. 

# Incompatibilities

## Notable incompatibilities
 - No --disable-threads build option.  Always thread-enabled.
 - Windows platform needs Windows 7 or Windows Server 2008 R2 or later
 - No `--disable-threads` build option.  Always thread-enabled.

# New Features

## New commands
 - `array default`, `array for`
 - `chan isbinary`
 - `coroinject`, `coroprobe`
 - `clock add weekdays`
 - `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`
 - `array default` — Specify default values for arrays (note that this alters the behaviour of `append`, `incr`, `lappend`).
 - `array for` — Cheap iteration over an array's contents.
 - `chan isbinary` — Test if a channel is configured to work with binary data.
 - `coroinject`, `coroprobe` — Interact with paused coroutines.
 - `clock add weekdays` — Clock arithmetic with week days.
 - `dict getwithdefault` — Define a fallback value to use when `dict get` would otherwise fail.
 - `file home` — Get the user home directory.
 - `file tempdir` — Create a temporary directory.
 - `file tildeexpand` — Expand a file path containing a `~`.
 - `info commandtype` — Introspection for the kinds of commands.
 - `ledit` — Equivalent to `lreplace` but on a list in a variable.
 - `lpop` — Remove an item from a list in a variable.
 - `lremove` — Remove a sublist from a list in a variable.
 - `lseq` — Generate a list of numbers in a sequence.
 - `package files` — Describe the contents of a package.
 - `string insert` — Insert a string as a substring of another string.
 - `string is dict` — Test whether a string is a dictionary.
 - `tcl::process` — Commands for working with subprocesses.
 - `*::build-info` — Obtain information about the build of Tcl.
 - `readFile`, `writeFile`, `foreachLine` — Simple procedures for basic working with files.
 - `tcl::idna::*` — Commands for working with encoded DNS names.

## New command options
 - `chan configure ... -inputmode ...` — Support for raw terminal input and reading passwords.
 - `clock scan ... -validate ...`
 - `info loaded ... ?prefix?`
 - `lsearch ... -stride ...`
 - `regsub ... -command ...`
 - `lsearch ... -stride ...` — Search a list by groups of items.
 - `regsub ... -command ...` — Generate the replacement for a regular expression by calling a command.
 - `socket ... -nodelay ... -keepalive ...`
 - `vwait` controlled by several new options
 - `expr` string comparators `lt`, `gt`, `le`, `ge`
 - `expr` supports comments inside expressions

## Numbers
 - 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
 - <code>0d<i>NNNN</i></code> format to compel decimal interpretation.
 - <code>NN_NNN_NNN</code>, underscores in numbers for optional readability
 - Functions: `isinf()`, `isnan()`, `isnormal()`, `issubnormal()`, `isunordered()`
 - Command: `fpclassify`
 - Function `int()` no longer truncates to word size

## tcl::oo facilities
 - private variable and methods
## TclOO facilities
 - private variables and methods
 - class variables and methods
 - abstract and singleton classes
 - configurable properties
 - `method -export`, `method -unexport`