XEmacs 21.2.5
[chise/xemacs-chise.git.1] / etc / NEWS
index 7190dbd..30d5eb2 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -9,7 +9,7 @@ history.
 
 Use `C-c C-f' to move to the next equal level of outline, and
 `C-c C-b' to move to previous equal level.  `C-h m' will give more
-info about the Outline mode.  Many commands are also available through 
+info about the Outline mode.  Many commands are also available through
 the menubar.
 
 Users who would like to know which capabilities have been introduced
@@ -54,13 +54,73 @@ indirect).  `buffer-indirect-children' returns a list of the indirect
 children of a base buffer.
 
 \f
-* Lisp and internal changes in XEmacs 21.0
+* Lisp and internal changes in XEmacs 21.2
 ==========================================
 
 ** Functions for decoding base64 encoding are now available; see
 `base64-encode-region', `base64-encode-string', `base64-decode-region'
 and `base64-decode-string'.
 
+** Many basic lisp operations are now faster.
+This is especially the case when running a Mule-enabled XEmacs.
+
+A general overhaul of the lisp engine should produce a speedup of 1.4
+in a Latin-1 XEmacs, and 2.1 in a Mule XEmacs.  These numbers were
+obtained running (byte-compile "simple.el"), which should be a pretty
+typical test of `pure' lisp.
+
+Lisp hash tables have been re-implemented.  The Common Lisp style hash
+table interface has been made standard, and moved from cl.el into fast
+C code (See the section on hash tables in the XEmacs Lisp Reference).
+A speedup factor of 3 can be expected with code that makes intensive
+use of hash tables.
+
+The garbage collector has been tuned, leading to a speedup of 1.16.
+
+The family of functions that iterate over lists, like `memq', and
+`rassq', have been made a little faster (typically 1.3).
+
+Lisp function calls are faster, by approximately a factor of two.
+However, defining inline functions (via defsubst) still make sense.
+
+And finally, a few functions have had dramatic performance
+improvements.  For example, (last long-list) is now 30 times faster.
+
+Of course, your mileage will vary.
+
+Many operations do not see any improvement.  Surprisingly, running
+(font-lock-refontify-buffer) does not use the Lisp engine much at all.
+Speeding up your favorite slow operation is an excellent project to
+improve XEmacs.  Don't forget to profile!
+
+** XEmacs finally has an automated test suite!
+Although this is not yet very sophisticated, it is already responsible
+for several important bug fixes in XEmacs.  To try it out, simply use
+the makefile target `make check' after building XEmacs.
+
+** New hash table implementation
+As was pointed out above, the standard interface to hash tables is now
+the Common Lisp interface, as described in Common Lisp, the Language
+(CLtL2, by Steele).  The older interface (functions with names
+containing the phrase `hashtable') will continue to work, but the
+preferred interface now has names containing the phrase `hash-table'.
+
+Here's the executive overview: create hash tables using
+make-hash-table, and use gethash, puthash, remhash, maphash and
+clrhash to manipulate entries in the hash table.  See the (updated)
+Lisp Reference Manual for details.
+
+** Lisp code handles circular lists much more robustly.
+Many basic lisp functions used to loop forever when given a circular
+list.  Now this is more likely to trigger a `circular-list' error.
+Printing a circular list now results in something like this:
+
+    (progn (setq x (cons 'foo 'foo)) (setcdr x x) x)
+==> (foo ... <circular list>)
+
+An extra bonus is that checking for circularities is not just
+friendlier, but actually faster than checking for quit.
+
 \f
 * Changes in XEmacs 21.0
 ========================
@@ -111,15 +171,15 @@ and then through inexact matches, as one would expect.
 ** The new variable `user-full-name' can be used to customize one's
 name when using the Emacs mail and news reading facilities.
 
-Normally, `user-full-name' is a function that returns the full name of 
+Normally, `user-full-name' is a function that returns the full name of
 a user or UID, as specified by the system -- for instance,
-(user-full-name "root") returns something like "Super-User".  However, 
+(user-full-name "root") returns something like "Super-User".  However,
 when the function is called without arguments, it will return the
-value of the `user-full-name' variable.  The `user-full-name' variable 
+value of the `user-full-name' variable.  The `user-full-name' variable
 is initialized using the environment variable NAME and (failing that)
 the user's system name.
 
-The behaviour of the `user-full-name' function with an argument
+The behavior of the `user-full-name' function with an argument
 specified is unchanged.
 
 ** The new command `M-x customize-changed-options' lets you customize
@@ -278,7 +338,7 @@ limit.
 
 *** \\1-expressions are now valid in `nnmail-split-methods'.
 
-*** The `custom-face-lookup' function has been removed.  
+*** The `custom-face-lookup' function has been removed.
 If you used this function in your initialization files, you must
 rewrite them to use `face-spec-set' instead.
 
@@ -328,7 +388,7 @@ updated by the `gnus-start-date-timer' command.
 subsystem.  If the `dir' file does not exist in an Info directory, the
 relevant information will be generated on-the-fly.
 
-This behaviour can be customized, look for `Info-auto-generate-directory'
+This behavior can be customized, look for `Info-auto-generate-directory'
 and `Info-save-auto-generated-dir' in the `info' customization group.
 
 \f
@@ -368,7 +428,7 @@ this is set to nil, the vertical dividers between windows are shown
 only when needed, and they are not draggable.
 
 Other properties of the vertical dividers may be controlled using
-`vertical-divider-shadow-thickness', `vertical-divider-line-width' and 
+`vertical-divider-shadow-thickness', `vertical-divider-line-width' and
 `vertical-divider-spacing' specifiers, which see.
 
 ** Frame focus management changes.
@@ -440,7 +500,7 @@ instance:
 ** It is now possible to build XEmacs with LDAP support.
 You will need to install a LDAP library first.  The following have
 been tested:
-  - LDAP 3.3 from the University of Michigan 
+  - LDAP 3.3 from the University of Michigan
     (get it from <URL:http://www.umich.edu/~dirsvcs/ldap/>)
   - LDAP SDK 1.0 from Netscape Corp.
     (get it from <URL:http://developer.netscape.com/>)