Version 71 of What feature or functionality is missing in Tcl

Updated 2003-01-31 13:56:01

Purpose: to outline and prioritize features and functionality that developers or users find missing in Tcl. As you think of things to add to the list below, please insert the things in the appropriate place. If someone is aware of code (patches, extensions, procs, etc.) which fulfills the need, please drop a URL or Wiki reference in place so that we know that requirement has/can be met.

Also, feel free to add, enhance, or expand on the categories and/or definitions below. I just took a first crack at this as a brain storming start place.


Missing Features - these have to do with how Tcl the language itself works, syntactically, gramatically, etc.

Critical Missing Features

Insert items here which are so needed in Tcl that until the feature is present, the language isn't suitable for use in your particular problem domain. If you have a lot of description, background, etc. drop in a Wikit or URI pointer to a seperate location.

Important Missing Features

Items inserted here will add to Tcl features which are needed to resolve major development or support issues.

Useful Missing Features

Items inserted here improve Tcl in significant ways.


Features Found In Every Program

Functions or commands you find yourself adding to every program you write. Sure, there's no need to add them to the core...but wouldn't it be nice if you could forget about them?

  • A command that returns a guaranteed unused command name, optionally using a template for the name.
  • An lshift command: return the first element of a list stored in a variable, removing it from the list and updating the variable (surely this would be faster in C?)
  • BR - finally: The finally part of try/catch/finally. Manually writing correct code for resource deallocation and re-throwing an error is somewhat tedious and error-prone (see example and a simple proposal on the catch page).

Missing Functionality - these items have more to do with extensions / bindings / etc. than with the language of Tcl itself. Often Tcl is taken to task as not having a batteries included mentality. However, I still haven't seen those in community who believe this come to an agreement on requirements that would satisfy them. Working on a 'sumo' software development kit, as I keep hearing people endorse, isn't a useful task if a set of requirements aren't clearly identified. What I find as a sufficient set of extensions may not have much overlap with someone else's needs. Identifying what is needed allows the community work towards that goal. Below, list the extensions that one would want to find in a single, huge, all inclusive extension distribution.

Note: if you see something listed as having never been written but you know that it is available, feel free to move the entry down and add to the entry the appropriate pointer to the package.

  • Critical Missing Functionality
  1. What we need here is a list of needs that have not even been written yet, as far as the writer knows.
  2. An ftruncate or truncate command to truncate an open file to zero bytes or optionally to X bytes.
  3. A general database interface, under which a person could plug in specific hooks to Oracle, Sybase, Postgres, msql, odbc, etc. without having application changes needing to be made. Work on this has gone on with tclodbc and [fill in other extension names here]
  4. Documentation, examples based on Functionality of frame and toplevel -container to enable swallowing of external X desktop applications, xterms, etc.
  5. Better Data Structure support, with garbage collection where appropriate
  6. True Multi-dimensional arrays (does nap satisfy here or BLT's data vectors?)
  7. Garbage Collected Reference style data objects (this is possible: specifically we need to stop Tcl from losing references as easily as it does).
  8. Better Cross platform ability to print out GUI components
  9. Rich clipboard types
  10. Plugin style browser functionality, to allow seamless download and launch of Tcl/Tk application without a seperate install step (perhaps making use of starpacks?)
  11. More help from ProWrap to figure out what extensions can be included and which can't and help resolve the issue
  12. An http client package that supports async requests
  13. An http client package that supports persistent connections
  14. Lazy evaluation support
  15. Transmission of events/bindings between subwidgets of a megawidget
  16. Support for lists of pure strings (??)
  17. Generate procs from a string (why doesn't eval work here?)
  18. Documentation support (why doesn't autodoc, etc. work here?)
  19. Cross-platform ability in Tcl to get just one character from stdin.
  20. Named colors (similar to named fonts) and the system colors with names
  21. Option sets
  22. Ability to use all Windows (or other OS) native widgets - in the way that the MacOS X team is providing Aqua support (See note at bottom)
  23. general software-generated event dispatch system, with value substitution and bindtags management, independant of Tk. Michael McLennan has something called a trigger command that may be relevant.
  24. Continuations combined with Tcl level events (What are continuations?) ("... a way to nest calls to VWait in a way that the outer calls can wake before the inner calls do. That's the difference between continuations and subroutines.)
  25. ONC RPC/Sun RPC and rpcgen support
  26. Ability to use an internally generated bitmap as a Tk cursor.
  • Important Missing Functionality
  1. What goes in this part of the list would be functionality currently not distributed in the centralized package known as Tcl, but which people consider essential to be distributed.
  • One or more Object Oriented Extensions

This assumes that such a thing is of interest to people. Alternatives to including this functionality into Tcl itself are:

  1. incr Tcl [This one is on its way into the core distribution - if only someone steps forward and leads the work effort to make it happen.]
  2. stooop [This one is now in Tcllib ].
  3. pool
  4. XOTcl
  5. Snit's Not Incr Tcl
  • One or more Windowing Extensions
  1. Tk
  2. wxTcl (is that the right name?)
  3. Fltk Tcl binding
  1. incr Tk
  2. mkWidgets
  • One or more additional Extensions that add widgets to Tk (See note at bottom)
  1. BWidgets
  2. BLT
  3. Tix [L1 ] [L2 ]
  4. EffTcl (from the book Effective Tcl/Tk Programming)
  5. One of the HTML rendering widgets like TkHTML
  6. an OpenGL based widget set
  7. a multi-column listbox widget like mclistbox, but with image capability as well
  8. incr Widgets
  9. Drag and Drop support such as TkDND [L3 ] [L4 ] [L5 ]
  10. TkTable
  11. The vu widget set (part of TkTable SF project, but different widgets)
  12. A combobox
  13. A tree widget TkTreeCtrl
  14. A progress bar (This should use native progressbars on Windows and OS X)
  15. A tab notebook
  • Extensions of other types
  1. Critcl
  2. Img
  3. Expect
  4. TclX
  5. tcllib
  6. Snack
  7. tclSOAP
  8. tclxml
  9. tclDOM
  10. tclvfs
  11. tcl threads
  12. Provide http 1.1 support in Tcl's default http support (see TclSOAP for a beginning towards such support).
  • Useful Missing Functionality
  1. In this category are those things which if available would be pleasant to have, or even important in some cases, but, in general, are not needed.
  • Extended digit math support
  1. Mpexpr
  • Statistics calculation support (AM is working on a module for this)
  • Numerical analysis support (Some modules in Tcllib are available for the purpose, and there is the LA package)
  • Lambda In Tcl
  • Other
  1. LDAP
  2. Trf
  3. Memchan
  4. tkpiechart
  5. a port of the various widgets available for Perl/Tk but which are not currently available for Tcl/Tk
  6. UDP and multicast sockets handling (in the core - hopefully as versatile and elegant as the current sockets implementation)
  7. Tiled backgrounds in widgets
  8. Ability to attach user data to an event - particularly virtual events - so they could be used as general message passing mechanism.
  9. Ability to treat an event more like an object
  10. Ability to overload expr's operators, to add things like complex number calculation support.
  11. tclhttpd (What in the world does this mean?)
  12. Ability to execute Tcl commands from a command line invocation of Tcl (Currently, tclsh leaves all command line switches to the domain of the tcl script being executed - changing this would break existings scripts. It is rather trivial to write a tcl script that provides this kind of functionality - see owh - a fileless tclsh for one example)
  13. Ability to generate image and font names so collisions can be avoided without reliance on remembering to specify some sort of prefix.
  14. Ability to apply some proc/command to each character of a string without having to a) split the string into a list of single character elements or b) looking up the string index each time through a loop. The first means that huge strings have to be duplicated in memory and the second means that huge strings require longer lookups than needed. Basically, the idea would be a means of treating a string as if it were a C/C++ byte array, only ideally the array would treat unicode characters as unique elements; ie $stuff(index) would hyperquickly find the right character.

In a recent Slashdot article asking which cross-platform GUI toolkit is the best, I found this post by someone: [L6 ]. Granted, this is a personal opinion of someone, but scroll to the bottom and read what is said about Tk. No native widget support and lack of widget selection. It's a point that will be brought up over and over again against us. If we could do this, we would have a real advantage over every other toolkit listed. Consider it.

Uhhhh... the poster of that comment is entitled to his own opinion, but not to his own facts. Tk has used native widgets since release 8.0. What's that 5 years now?

Really? Why are my buttons still gray and square on Windows XP? I'm talking about true, native widget support. We've gone part of the way, but until apps can look truly native on modern, skinned operating systems, we're not there. Applications still look foreign.

LV note that this issue is listed above...


See also Tcl 9.0 WishList and Tk 9.0 WishList.


Category Suggestions