summaryrefslogtreecommitdiff
path: root/TCL
diff options
context:
space:
mode:
Diffstat (limited to 'TCL')
-rw-r--r--TCL169
1 files changed, 169 insertions, 0 deletions
diff --git a/TCL b/TCL
new file mode 100644
index 0000000000..5409bbf430
--- /dev/null
+++ b/TCL
@@ -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.
+
+