diff options
Diffstat (limited to 'TCL')
-rw-r--r-- | TCL | 169 |
1 files changed, 169 insertions, 0 deletions
@@ -0,0 +1,169 @@ +Article 1475 of comp.lang.tcl: +Path: netlabs!news!usc!cs.utexas.edu!sun-barr!ames!agate!sprite.Berkeley.EDU!ouster +From: ouster@sprite.Berkeley.EDU (John Ousterhout) +Newsgroups: comp.lang.tcl +Subject: Planning for Tcl 7.0 +Message-ID: <1avu22INN5ao@agate.berkeley.edu> +Date: 8 Oct 92 00:06:26 GMT +Organization: U.C. Berkeley Sprite Project +Lines: 156 +NNTP-Posting-Host: tyranny.berkeley.edu + + +For the last year I've made only small changes to Tcl while focussing +on the canvas and text widgets for Tk. I'm now making plans to catch +up on a bunch of much-needed bug fixes and enhancements to Tcl. Some +of the changes I'm considering are not backwards-compatible. The +purpose of this message is to let know know what changes I'm considering +for Tcl 7.0 and to solicit feedback. I'm particularly interested in +comments on the changes that are incompatible: I'll probably drop +the changes for which I get lots of negative feedback and not much +positive feedback. If there are other changes that you think are +important but aren't contained on this list, let me know and I may add +them. + +Incompatible changes: +--------------------- + +The changes listed below are likely to require changes to existing +scripts and/or C code. Each change includes an explanation of why the +change might be useful. I'd like to know whether or not you think the change +is useful enough to justify the incompatibility. + +1. Eliminate the "|" option in the "open" command. Instead, add a +"popen" command that does the same thing. Rationale: in the current +implementation you can't open a file whose name begins with "|". +Also, I think the "popen" command would be more logical. + +2. Eliminate the Tcl_WaitPids procedure and use the waitpid POSIX call +instead. Also change the wait code to periodically poll for dead +child processes so that zombie processes don't get left around forever. +Rationale: the current code tends to leave zombies around in some +situations. Switching to waitpid should solve this problem in a +relatively portable fashion. The only incompatibility will be for +C procedures that call Tcl_WaitPids; they'll have to switch to call +waitpid instead. I'll provide a compatibility version of waitpid for +use on systems that don't have it yet. + +3. Clean up backslash processing in several ways: + - Change backslash-newline to eat up all the whitespace following the + newline and replace the sequence with a single whitespace character. + Right now it only eats up the newline character and replaces it + with an empty string. Rationale: this would be more consistent + with other programs that process backslash-newline sequences. + - Eliminate the sequences \Mxx, \Cxxx, and \e. + Rationale: these sequences are left around from ancient times. + They're not particular compatible with any other program. I + should have removed them in Tcl 6.0 but didn't. They did get + removed from the documentation, however, so no-one should be + using them (?). + - Change \x (where x is not one of the characters that gets special + backslash treatment) to expand to x, not \x. + Rationale: the current behavior is inconsistent with all other + programs I know of that handle backslashes, and I think it's + confusing. + - Change "format" so it doesn't do an additional layer of backslash + processing on its format string. + Rationale: I don't know why it currently behaves as it does, and + I think it's confusing. + +4. Change "regsub" so that when no match occurs it sets the result +variable to the original string, rather than leaving it unmodified. +Rationale: the current behavior results in extra tests of the regsub +result that could sometimes be avoided with the proposed new behavior. +I doubt that there's much code that will break with the change (this +would have to be code that depends on the result variable *not* being +modified). + +5. Change the name "UNIX" in the "errorCode" variable to "POSIX". +Rationale: I suspect that I'm eventually going to get a call from the +USL lawyers on this one if I don't change it. Better to change it now +in an orderly fashion so I don't have change it hastily in the future. + +6. Change glob to return only the names of existing files. +Rationale: at present "glob */foo" expands * and generates a result +without checking to see if each directory has a "foo" file in it. This +makes the current behavior incompatible with csh, for example. One +question is whether constructs like "glob {a,b}.c" should also check for +the existence of each of the files. At present they don't (i.e. a.c and +b.c will be returned even if they don't exist), but neither does csh. My +inclination is to make the behavior match csh (names containing *?[] are +checked for existence, others aren't). I'd be interested to hear +opinions on this one: check all names for existence, check only names +including *?[] (for csh compatibility), or keep it as it is? + +7. Change "gets" so it returns 1 for success and 0 for failure. At present +it returns the line length for success and -1 for failure. +Rationale: this would allow slightly simple Tcl scripts: you could just +say + while [gets $f line] {...} +instead of + while {[gets $f line] >= 0} {...} +I'm not really convinced that this one is important enough to justify the +incompatibility, so it won't take much negative feedback to kill it. + +Other changes: +-------------- + +The changes listed below shouldn't introduce substantial compatibility +problems. Of course, any change can potentially cause scripts to stop +working (e.g. almost any change will break the test suite), but very +few if any people should be affected by these changes. + +8. Implement Tcl_CreateExternVar() procedure along lines proposed by +Andreas Stolcke to tie a C variable to a Tcl variable with automatic +updates between them. + +9. Changes to exec: + - Allow redirection to an existing file descriptor in "exec", + with a mechanism like >&1 or >& stdout. + - Allow file names immediately after ">" and "<" without + intervening spaces. + +10. Changes related to files: + - Fix Scott Bolte bug (closing stdin and stdout). + - Move TclGetOpenFile and OpenFile stuff to tcl.h so that they're + accessible to applications. + - Extend access modes in open to include the complete set of POSIX + access modes (such as O_EXCL and O_NONBLOCK). + +11. Re-instate Tcl_WatchInterp to notify application when an interpreter +is deleted. + +12. Add "elseif" mechanism to "if" command for chaining "else {if ..." +constructs more cleanly. Require exact matches on "then" and "else" +keywords. + +13. Remove UNIX system call declarations from tclUnix.h. Use them from +unistd.h instead, and provide a default version of unistd.h for systems +that don't have one. + +14. Changes in the expr command, mostly following suggestions made by +George Howlett a long time ago: + - Increase precision of floating-point results. + - Make floating-point numbers always print with a point. + - Add transcendental functions like sin and exp. + - Add explicit integer and floating conversion operations. + - Don't promote large integers to floating-point automatically. + - Allow multiple arguments to expr command. + +15. Extend lsort to allow alternate sorting mechanisms, like numeric, +or client-supplied. + +16. Allow alternate pattern-matching forms (e.g. exact or regexp) for +lsearch and case. + +17. Add XPG/3 positional argument specifiers to format (code contributed +by Mark Diekhans). + +18. Change "file readlink" to return an error on systems that don't +support it rather than removing the option entirely. + +19. Add a mechanism for scheduling a Tcl command to be executed when the +interpreter reaches a clean point. This is needed for things like +signal support. + +20. Change upvar so that you can refer to an element of an array as +well as a whole array. + + |