Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Tcl/Tk 8.6.0 RELEASED

1,348 views
Skip to first unread message

Don Porter

unread,
Dec 21, 2012, 12:51:07 AM12/21/12
to

Tcl/Tk 8.6.0 Release Announcement
December 20, 2012

The Tcl Core Team is pleased to announce the 8.6.0 releases of the Tcl
dynamic language and the Tk toolkit. This is the first stable release
of Tcl/Tk 8.6. More details can be found below. We would like to
express our gratitude to all those who submit bug reports and patches.
This information is invaluable in enabling us to identify and eliminate
problems in the core.

Where to get the new releases:
------------------------------

Tcl/Tk 8.6.0 sources are freely available as open source from the Tcl
Developer Xchange web site at:

http://www.tcl.tk/software/tcltk/8.6.html

This web page also contains additional information about the releases,
including a summary of new features. Sources are always available from
the Tcl SourceForge project's file distribution area:

http://sourceforge.net/projects/tcl/files/Tcl/

For additional information:
---------------------------

Please visit the Tcl Developer Xchange web site:

http://www.tcl.tk/

This site contains a variety of information about Tcl/Tk in general, the
core Tcl and Tk distributions, Tcl development tools, and much more.

Summary of Changes since Tcl/Tk 8.6b3:
--------------------------------------

A complete list can be found in the changes file at the root of the
source tree. The more complete ChangeLog is also included with each
source release.

The short list of key changes since the Tcl/Tk 8.6b3 release follows.
For those who have not been following alpha and beta development,
read on to the next sections for pointers to information on the changes
since Tcl/Tk 8.5. All bug fixes in Tcl/Tk 8.5.13 are included, plus:

* [TIP 405] New commands [lmap] and [dict map].

* [TIP 416] New [load] options -global and -lazy.

* [TIP 413] Default [string trim*] trimset changed to Unicode.
*** POTENTIAL INCOMPATIBILITY ***

* [TIP 400] New [zlib] options to set gzip compression dictionary.

* Bytecode compiled: [array exists|set|unset] [format] [yield]
[dict create|exists|merge|unset] [string first|last|map|range]
[namespace current|code|qualifiers|tail|which] [tailcall]
[info commands|coroutine|level|object] [regsub] [self].

* Fixed crashes when some attempts to write to a variable in
a namespace that does not exist fail.

* Fixed paths returned from [tk_getOpenFile -multiple] on Windows.

* Corrected decoding of base64 with trailing whitespace.

* Updated packages:
- dde 1.4.0 : Full Unicode support.
- http 2.8.5 : keep-alive multiple callback bug fix.
- tcltest 2.3.5 : legacy $argv support bug fix.
- TclOO 1.0 : Stable interface built into Tcl.
- Itcl 4.0.0 : Stable release.
- tdbc + driver packages, 1.0.0 : Stable releases.
- Thread 2.7.0 : Stable release.
- Sqlite 3.7.15 : New release.

* Threads inherit floating point setting from master on Windows.

* [text] handle images and windows with names looking like indices.

* Compile-time control over where [file tempfile] creates files.

* Legacy Carbon sources removed. For support, get Tk 8.5.12.

Summary of new features since Tcl/Tk 8.5:
-----------------------------------------

Development of Tcl/Tk 8.6 began in March 2008, shortly after the release
of Tcl/Tk 8.5.2. The number of new features, bug fixes, and changes
since then is quite large. New features in Tcl are recorded as Tcl
Improvement Proposals (TIPs) at:

http://tip.tcl.tk/

Highlights of the new Tcl features include:

Object Oriented Programming

The commands of the TclOO package are now part of Tcl itself. This gives
Tcl a built-in object system that is fully dynamic, class-based, and
includes advanced features such as meta-classes, filters, and mixins.

New version 4 of the popular package Itcl (aka [incr Tcl]) is also
included, now built on a TclOO foundation, granting support for some
traditional OO Tcl programming out of the box as well.

Stackless Evaluation

The evaluation of many levels of nested proc calls are no longer
implemented as a stack of nested C routine calls. This revision in the
internal implementation of Tcl evaluation makes deep recursion in Tcl
scripts safe to do. But there's more...

This new implementation enables a collection of new commands,
[coroutine], [tailcall], [yield], and [yieldto] that provide profound
new capabilities and models of concurrency to Tcl scripts.

Enhanced Exceptions

New commands [try] and [throw] and a wealth of new -errorcode values
enable far more precise trapping and handling of exceptions using a
familiar construct.

Batteries Included

Tcl delivers in the pkgs subdirectory a bundled collection of
third-party packages built and installed along with Tcl.

Thread-enabled Operations

A thread-enabled default build, a bundled Thread package, and new
command [interp cancel] make Tcl 8.6 ready for your multi-threaded
programming tasks.

SQL Database Powered

The bundled Tcl DataBase Connectivity (tdbc) interface package makes it
possible to write your SQL database-powered scripts decoupled from any
particular database engine. The bundled sqlite3 and tdbc::sqlite3
packages supply a powerful and popular SQL database engine ready to use.

IPv6 Networking

Both client and server [socket]s support IPv6 where platform support
exists.

Built-in Zlib Compression

New command [zlib] provides utilities to handle compression of data and
streams.

List Processing

New commands [lmap] and [dict map] enable the elegant expression of
transformations over Tcl containers.

Stacked Channels by Script

New commands [chan push] and [chan pop] expose the power of stacked
channels without the need to write C code.

Additional New Features

Temporary file creation, enhancements to list sorting and setting, dict
filtering, half-close of bidirectional channels, encoding and decoding
of binary sequences, finer control over load, and many many more.

Highlights of the new Tk features include:

Built-in PNG Image Support

Photo images now support read/write in the PNG format, with the ability
to set the alpha channel.

Busy Windows

New command [tk busy] is a variant of [blt::busy] that lets the
interactivity of windows be suspended and restored as required by the
needs of the program.

New Font Selection Dialog Interface

New command [tk fontchooser] provides a portable interface to the
standard font selector of the platform, whether that is modal or not.

Angled Text

New option "-angle $degrees" to [$canvas create text] for rotating
displayed text.

Moving Things on a Canvas

New commands [$canvas moveto], [$canvas imove] and [$canvas rchars]
for moving and manipulating canvas items.

Additional New Features

Text widget cursor control, more window manager hints, and a collection
of modernizations in appearance and function.

The complete summary of new features visible to Tcl scripts in the
Tcl/Tk 8.6 releases is:

http://wiki.tcl.tk/Changes+in+Tcl%2fTk+8.6

Each item includes links to the TIP(s) that approved the change.

There have also been changes to the C API for the Tcl and Tk libraries
that are not visible to Tcl scripts, but are important to those who
create extensions and applications that use Tcl/Tk. The relevant TIPs
are:

TIP #265: A Convenient C-side Command Option Parser for Tcl
TIP #307: Make TclTransferResult() Public
TIP #316: Portable Access Functions for Stat Buffers
TIP #322: Publish the NRE API
TIP #330: Eliminate interp->result from the Public Headers
TIP #335: An API for Detecting Active Interpreters
TIP #336: Supported Access To interp->errorline
TIP #337: Make TclBackgroundException() Public
TIP #338: Embedder Access to Startup Scripts of *_Main()
TIP #353: NR-enabled Expressions for Extensions
TIP #356: NR-enabled Substitutions for Extensions
TIP #357: Export TclLoadFile

These lists of feature changes are starting points for exploring the
new capabilities of Tcl/Tk 8.6.0. As more developers become familiar
with the new tools, expect more guides to effective use of the new
features to appear online.

Building and installing Tcl will also build and install a set of
packages bundled with it in source code distribution form under the
pkgs subdirectory. These packages are Itcl, Thread, sqlite3, tdbc,
and several tdbc driver packages.

Compatibility issues:
--------------------
The Tcl/Tk 8.6.0 releases are highly compatible with prior releases
of Tcl/Tk since 8.1. There are a handful of changes that may cause
programs and scripts written for prior releases to behave differently
with Tcl/Tk 8.6.0. Here we summarize the known things to watch out for.

Build and platform support issues:

* Default build configuration for Tcl is now --enable-threads. Use
the configure option --disable-threads if your use of Tcl is
incompatible with a thread-enabled build.

* The --enable-aqua build for Tk on Mac OS X is a Cocoa implementation.
Tk 8.6 no longer supports Carbon, even as a compile-time option.
This implies dropping support for pre-Leopard (10.5) releases of
Mac OS X. See Tk 8.5.12 for last Carbon-supporting release.

* Attempts to run on Win9x systems will panic.

* Support for pre-ANSI compilers via _ANSI_ARGS_ removed.

* The included support for Xcode builds on Mac OS X requires at least
Tiger (10.4).

Script-visible issues:

* As a general comment, any scripts that rely on the precise text of
an error message or error code (a common issue in test suites) may
need revision. Tcl/Tk 8.6 includes many revisions to the text of
many error messages for the sake of clarity or readability, and a
large collection of new error code values useful for the new [try]
command.

* On exit, Tcl will no longer flush open non-blocking channels. Scripts
relying on open non-blocking channels being flushed on exit will have
to be modified to explicitly flush or close those channels.

* Tk color names have been redefined to match Web color standards.

* Tk defines many more virtual events that control the built-in widget
set. These can override virtual events created in your scripts with
the [event add] command, changing program behavior.

* The default <MouseWheel> bindings have changed.

* On Unix-like platforms, [load] is implemented as a call to dlopen(),
with the flags (RTLD_NOW|RTLD_LOCAL) passed by default. If your use
of [load] requires otherwise, use the new -global or -lazy options to
[load] to set the RTLD_GLOBAL or RTLD_LAZY flags respectively.

* The default set of whitespace characters trimmed by the
[string trim*] commands was changed to add more Unicode whitespace
characters.

* When a channel gets std channel status on creation, it now gets the
appropriate name matching std*, and no other.

* A workaround built in to the default [unknown] command allowed
programs to make errors with [namespace code]. Scripts are now
expected to use [namespace code] correctly.

Issues for users of the public C API:

* C code compiled with USE_TCL_STUBS now must be linked against a
stub library. The Tcl shared library no longer exports variables
used in the stub interface. Analogous changes also made to Tk.

* The Tcl_Interp no longer contains the fields "result" or "errorline".
Update your programs to use the supported interfaces
Tcl_GetStringResult(), Tcl_(Get|Set)ErrorLine(), and
Tcl_Set(Obj)Result(). While working on that update, use temporary
workarounds of
#define USE_INTERP_RESULT
#define USE_INTERP_ERRORLINE
to keep existing code working until the update is complete.

* Tcl_Exit() no longer calls Tcl_Finalize() to do a complete orderly
teardown of Tcl. It calls handlers registered by
Tcl_CreateExitHandler() and little else. Most of the tasks skipped
will be accomplished by the OS anyway, freeing memory and such.
This avoids many tricky finalization bugs, especially in
multi-threaded operation. Callers of Tcl_Exit() that want to keep
a full teardown may call Tcl_Finalize() themselves, or set the
environment variable TCL_FINALIZE_ON_EXIT to non-zero.

* System encoding during Tcl library initialization now iso8859-1,
not identity.

* A [load]able extension is no longer [unload]able unless it signals
its ability to be [unload]ed by exporting suitable <Package>_Unload()
and <Package>_SafeUnload() routines.

* Tcl_GetObjType(), Tcl_GetChannelType(), Tcl_FSGetFileSystemForPath()
now return const (read-only) pointers.

* Tcl_SetMainLoop() can now only influence Tcl_Main() if it is called
from the same thread as Tcl_Main().

* Providers of a Tcl_Filesystem will need to update their
Tcl_FSFileAttrStringProc entry to match the prototype

typedef const char * CONST86 *Tcl_FSFileAttrStringsProc(
Tcl_Obj *pathPtr, Tcl_Obj **objPtrRef);

where CONST86 indicates a new const on the return value in Tcl 8.6.

* The Tcl_ObjType "option" is no longer registered. Callers of
Tcl_GetObjType("option") must be prepared to accept NULL as a result.

Issues for users of the private interfaces:

* Callers of the Tcl*Startup*() routines should convert to using the
corresponding (now public) Tcl_*Startup*() routines.

* Callers of TclFindElement() must adapt to its revised specification
for its final argument.

* TclpGetUserHome() and TclSetPreInitScript() now return const
(read-only) pointers.

--
Tcl Core Team and Maintainers
Don Porter, Tcl Core Release Manager

--
| Don Porter Applied and Computational Mathematics Division |
| donald...@nist.gov Information Technology Laboratory |
| http://math.nist.gov/~DPorter/ NIST |
|______________________________________________________________________|

johannes falcone

unread,
Dec 21, 2012, 1:32:36 AM12/21/12
to
AWESOME!!!

Donal K. Fellows

unread,
Dec 21, 2012, 4:21:44 AM12/21/12
to
On 21/12/2012 05:51, Don Porter wrote:
> The Tcl Core Team is pleased to announce the 8.6.0 releases of the Tcl
> dynamic language and the Tk toolkit.

I'm also happy to note that version 1.0 of the TclOO package for Tcl 8.5
is now available for download from SourceForge:

https://sourceforge.net/projects/tcl/files/TclOO%20Package/1.0/

I don't have any pre-built versions for any platforms at all.

A copy of the release notes follow below...

Donal.
--------------

Release of TclOO Version 1.0

This officially corresponds to the version of TclOO that is included
with Tcl 8.6.0, except for features (notably coroutine support) that
require the 8.6 runtime and not-officially-observable differences like
the degree of bytecode compilation support.

TclOO: An Object System for Tcl

TclOO is an object system for Tcl that has been designed to provide high
performance while still allowing as much flexibility as possible, and to
be a core for other object systems. It supports a single-rooted
class-based object system where classes are themselves subclassable
objects, with multiple inheritance, mixins, procedure-like and forwarded
methods, filter methods, dynamic reconfiguration, etc.

It does not come with a large class library, and it does not force its
use upon user scripts.

The heritage of TclOO can be traced back to a number of other object
systems, notably including XOTcl, incr Tcl, and Snit. It also draws on
experience with object systems in other languages like C++, Java and
Ruby (despite being somewhat different from each of them).

Changes in TclOO 1.0

Only minor bugfixes and documentation updates since 0.7.

Significant changes since 0.6

Forwarded methods now resolve in the context of the instance object.
Instance namespace introspection added (info object namespace).
Method type introspection added (info class methodtype, etc.)
Public API function for retrieving an instance's name.
Improved destructor calling order.
Call chain introspection added (info class call, etc.)
Added nextto command to allow better control over method call chain
traversal in the multiple-inheritance case.
Slot class (oo::Slot) for unified control over how definitions of lists
of things are managed.
Added callback method (<cloned>) to allow better control over how
objects are copied by oo::copy; default implementation does partial
instance namespace copy.
Basic Usage of TclOO

oo::class create Toaster {
variable toasting time
constructor {toastingTime} {
set time $toastingTime
set toasting ""
}
method toast {breadProduct} {
if {$toasting ne ""} {
error "already toasting something"
}
set toasting [after $time [namespace code [list \
my Toasted $breadProduct]]]
puts "toasting $breadProduct for you"
}
method Toasted {breadProduct} {
puts "toasted the $breadProduct"
set toasting ""
}
destructor {
after cancel $toasting
}
}

Toaster create quickToaster 30000 ; # 30 seconds only
quickToaster toast crumpet

after 40000 {set done ok}
vwait done ; # Run the event loop

quickToaster destroy ; # Delete the object

Julian H J Loaring

unread,
Dec 21, 2012, 4:25:15 AM12/21/12
to
Many thanks to the core team for bringing this to fruition, for their dedication, exemplary support and ability to keep the language exciting and fun to work with. This is perhaps the best Xmas present I will get this years!

Kind regards
Julian H J Loaring

johannes falcone

unread,
Dec 21, 2012, 5:17:42 AM12/21/12
to
On Friday, December 21, 2012 12:51:07 AM UTC-5, Don Porter wrote:
yes bravo

well done!!!

nau...@gmail.com

unread,
Dec 21, 2012, 5:39:02 AM12/21/12
to
So, it's the end of the world, as we know it (without TCL 8.6) and i feel fine. Seems the maya people have no 8.6 in their language.

Many thanks to everyone who made this possible, especially DOOnal and Did Great Porter!

AxN

nau...@gmail.com

unread,
Dec 21, 2012, 5:39:02 AM12/21/12
to

nau...@gmail.com

unread,
Dec 21, 2012, 5:39:03 AM12/21/12
to

escargo

unread,
Dec 21, 2012, 10:17:42 AM12/21/12
to
On Thursday, December 20, 2012 11:51:07 PM UTC-6, Don Porter wrote:
> Tcl/Tk 8.6.0 Release Announcement
>
> December 20, 2012
>
>
>
> The Tcl Core Team is pleased to announce the 8.6.0 releases of the Tcl
>
> dynamic language and the Tk toolkit....
>
> * Updated packages:

> - Itcl 4.0.0 : Stable release.

I have a copy of incr Tcl from the Ground Up. Do you know how much of that book remains compatible with what is released in 8.6.0?

Kevin Walzer

unread,
Dec 21, 2012, 11:19:19 AM12/21/12
to
Congrats to all for a terrific job, and happy holidays.

--Kevin

--
Kevin Walzer
Code by Kevin
http://www.codebykevin.com

Donal K. Fellows

unread,
Dec 21, 2012, 4:25:41 PM12/21/12
to
On Friday, 21 December 2012 15:17:42 UTC, escargo wrote:
> I have a copy of incr Tcl from the Ground Up. Do you know how much
> of that book remains compatible with what is released in 8.6.0?

Most of it should be compatible. As I understand it, Itcl 4 passes a very large fraction of Itcl 3's test suite (and does so because Arnulf Wiedemann needed that level of compatibility). But it is a new major version: there could be changes. Try it and see if there are any problems.

There are probably features of Itcl 4 that that book doesn't cover. :-)

Donal.

tomk

unread,
Dec 22, 2012, 11:41:07 AM12/22/12
to
Thank you to the TCT for spreading Christmas cheer!

tnw...@gmail.com

unread,
Dec 22, 2012, 1:38:01 PM12/22/12
to
Well done chaps, good news indeed.

Anybody know where I might get Windows binaries for it? All the 8.6 tclkits I can find are still the beta version and the ActiveState website seems completely oblivious to the release.

Do I need to just bite the bullet and compile it myself?

Donal K. Fellows

unread,
Dec 22, 2012, 3:41:27 PM12/22/12
to
On Saturday, 22 December 2012 18:38:01 UTC, tnw...@gmail.com wrote:
> Anybody know where I might get Windows binaries for it? All the 8.6 tclkits
> I can find are still the beta version and the ActiveState website seems
> completely oblivious to the release.
>
> Do I need to just bite the bullet and compile it myself?

If you're in that much of a hurry, build it yourself. The people who are responsible for doing ActiveTcl builds and Tclkit builds are entitled to get ready for their Christmas holidays too. :-)

Donal.

Aric Bills

unread,
Dec 22, 2012, 8:50:54 PM12/22/12
to
Thanks, TCT!

Lawrence Woodman

unread,
Dec 24, 2012, 2:36:29 PM12/24/12
to
Great work TCT. This is a really good release. Just in time for my next project which I managed to justify using Tcl for.


Best Wishes

Lorry

ericsm...@gmail.com

unread,
Dec 25, 2012, 12:19:37 AM12/25/12
to
On Saturday, December 22, 2012 10:38:01 AM UTC-8, tnw...@gmail.com wrote:
> Well done chaps, good news indeed.
>
>
>
> Anybody know where I might get Windows binaries for it? All the 8.6 tclkits I can find are still the beta version and the ActiveState website seems completely oblivious to the release.


I just took a stab at http://www.patthoyts.tk/tclkit/win32-ix86/8.6.0/ which seems to be working for me.

tnw...@gmail.com

unread,
Dec 28, 2012, 10:07:43 PM12/28/12
to
Ah excellent, thanks. Happy new year.

chunpi...@gmail.com

unread,
Jan 8, 2013, 10:11:15 AM1/8/13
to
Can tcl/tk 8.6 used with itk? Tcl/tk 8.6 uses Itcl 4.0. I only have itk 3.3. I could not find itk 4.0.

When I issue the package require Itk command as the following, then I will get an error message:

% package require Itcl
4.0.0
% package require Itk
version conflict for package "Itcl": have 4.0.0, need exactly 3.3

Can someone give me some advice on how to use itk with Tcl/Tk 8.6 which looks like having many great features?

Thank you!

Chunping

rene

unread,
Jan 8, 2013, 1:14:40 PM1/8/13
to
You can get a script compatible version with iwidgets from
http://sourceforge.net/projects/kbskit/files/itk/

HTH
rene

Don Porter

unread,
Jan 9, 2013, 8:41:17 AM1/9/13
to
On 01/08/2013 10:11 AM, chunpi...@gmail.com wrote:
> Can tcl/tk 8.6 used with itk? Tcl/tk 8.6 uses Itcl 4.0. I only have itk 3.3. I could not find itk 4.0.

Besides the other advice you will get regarding the current state of
Itk, you should confirm that Itcl 3.4 will still work fine in Tcl 8.6.
You just have to ask for it.

package require Itcl 3

Given that start, I'd imagine Itk 3.3 will also be fine.

tomk

unread,
Feb 11, 2013, 12:36:01 PM2/11/13
to
On Thursday, December 20, 2012 10:51:07 PM UTC-7, Don Porter wrote:
Hi Don,
I just compiled tcl8.6 on the linux box here at work and found that it generated 10 errors when I ran the tests. I think they are spurious but I thought you would be interested. They all look similar to the output show below and at first glance appear to be cause by the "term=gnome-terminal" setting which wasn't cleaned up prior to running the tests.
Tom K.

==== env-2.1 adding environment variables FAILED
==== Contents of test case:

getenv

---- Result was:
term=gnome-terminal
---- Result should have been (exact matching):

0 new messages