TIP 665: Remove support for internal utf-16 for Tcl 8.7 (and 9.0)

Author:		Jan Nijtmans <[email protected]>
State:		Final
Type:		Project
Vote:		Done
Created:	02-05-2023
Tcl-Version:	8.7
Tcl-Branch:	tip-665
Vote-Summary:	Accepted 4/0/1
Votes-For:	AK, JN, KW, SL
Votes-Against:	none
Votes-Present:	BG


This TIP proposes to remove support for building the Tcl 8.7 and 9.0 core with -DTCL_UTF_MAX=3, more specifically: any value other than 4.

Extensions (like Tk) can still use -DTCL_UTF_MAX=3.


The TIPs 542 and 622 prepared Tcl 8.7 (and 9.0) to use utf-32 internally for all operations, while - still - being able to use utf-16 internally. This was used mainly for regression-testing. The "utf.test" suite carefully compared the result of all utf-related functions between the 8.6 result and the 8.7 result, making sure that extensions won't be effected.

Now that the internal utf-32 handling has stabilized, this "utf16" mode hinders further development more than that it helps. Therefore this TIP proposes to remove it as far as possible. The utf-16 compatibility layer, which allows extensions (such as Tk) still being compiled with -DTCL_UTF_MAX=3 is still kept. And also the file tclUniData.c (which is generated from the Unicode official data-tables, and kept equal in Tcl 8.6/8.7/9.0) is left as-is.


Implementation is in Tcl branch "tip-665".


Since the compatibility layer is kept as-is for extensions, this change is fully upwards compatible with 8.6.


This document has been placed in the public domain.