* goops/compile.scm (compile-method): Tag method closure for body
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index f364f62..51bfe18 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,5 @@
 Guile NEWS --- history of user-visible changes.  -*- text -*-
-Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
 See the end for copying conditions.
 
 Please send Guile bug reports to bug-guile@gnu.org.
@@ -8,9 +8,22 @@ Changes since Guile 1.4:
 
 * Changes to the distribution
 
-** New modules (oop goops) etc
+** New module (ice-9 stack-catch):
 
-The new modules
+stack-catch is like catch, but saves the current state of the stack in
+the the-last-stack fluid for the debugger to inspect or in able to
+re-throw an error.
+
+** The module (ice-9 and-let*) has been renamed to (ice-9 and-let-star)
+
+This has been done to prevent problems on lesser operating systems
+that can't tolerate `*'s in file names.  The exported macro continues
+to be named `and-let*', of course.
+
+On systems that support it, there is also a compatability module named
+(ice-9 and-let*).  It will go away in the next release.
+   
+** New modules (oop goops) etc.:
 
   (oop goops)
   (oop goops describe)
@@ -18,14 +31,8 @@ The new modules
   (oop goops active-slot)
   (oop goops composite-slot)
 
-plus some GOOPS utility modules have been added.
-
-* Changes to the stand-alone interpreter
-
-** GOOPS has been merged into Guile
-
-The Guile Object Oriented Programming System has been integrated into
-Guile.
+The Guile Object Oriented Programming System (GOOPS) has been
+integrated into Guile.
 
 Type
 
@@ -75,6 +82,48 @@ Asking for the type of an object
 See further in the GOOPS tutorial available in the guile-doc
 distribution in info (goops.info) and texinfo formats.
 
+** New module (ice-9 rdelim).
+
+This exports the following procedures which were previously defined
+in the default environment:
+
+read-line read-line! read-delimited read-delimited! %read-delimited!
+%read-line write-line
+
+For backwards compatibility the definitions are still imported into the
+default environment in this version of Guile.  However you should add:
+
+(use-modules (ice-9 rdelim))
+
+to any program which uses the definitions, since this may change in
+future.
+
+Alternatively, if guile-scsh is installed, the (scsh rdelim) module
+can be used for similar functionality.
+
+** New module (ice-9 match)
+
+This module includes Andrew K. Wright's pattern matcher:
+
+(use-modules (ice-9 match))
+
+(match '(+ 1 2)
+  (('+ x) x)
+  (('+ x y) `(add ,x ,y))
+  (('- x y) `(sub ,x ,y)))  => (add 1 2)
+
+See ice-9/match.scm for brief description or
+http://www.star-lab.com/wright/code.html for complete documentation.
+
+This module requires SLIB to be installed and available from Guile.
+
+* Changes to the stand-alone interpreter
+
+** Evaluation of "()", the empty list, is now an error.
+
+Previously, you could for example write (cons 1 ()); now you need to
+be more explicit and write (cons 1 '()).
+
 ** It's now possible to create modules with controlled environments
 
 Example:
@@ -82,11 +131,97 @@ Example:
 (use-modules (ice-9 safe))
 (define m (make-safe-module))
 ;;; m will now be a module containing only a safe subset of R5RS
-(eval-in-module '(+ 1 2) m) --> 3
-(eval-in-module 'load m) --> ERROR: Unbound variable: load
+(eval '(+ 1 2) m) --> 3
+(eval 'load m) --> ERROR: Unbound variable: load
 
 * Changes to Scheme functions and syntax
 
+** The module system has been made more disciplined.
+
+The function `eval' will now save and restore the current module
+around the evaluation of the specified expression.  While this
+expression is evaluated, `(current-module)' will now return the right
+module, which is the module specified as the second argument to
+`eval'.
+
+A consequence of this change is that `eval' is not particularily
+useful when you want allow the evaluated code to change what module is
+designated as the current module and have this change persist from one
+call to `eval' to the next.  The read-eval-print-loop is an example
+where `eval' is now inadequate.  To compensate, there is a new
+function `primitive-eval' that does not take a module specifier and
+that does not save/restore the current module.  You should use this
+function together with `set-current-module', `current-module', etc
+when you want to have more control over the state that is carried from
+one eval to the next.
+
+Additionally, it has been made sure that forms that are evaluated at
+the top level are always evaluated with respect to the current module.
+Previously, subforms of top-level forms such as `begin', `case',
+etc. did not respect changes to the current module although these
+subforms are at the top-level as well.
+
+To prevent strange behaviour, the forms `define-module',
+`use-modules', `use-syntax', and `export' have been restricted to only
+work on the top level.  The forms `define-public' and
+`defmacro-public' only export the new binding on the top level.  They
+behave just like `define' and `defmacro', respectively, when they are
+used in a lexical environment.
+
+** `port-for-each' makes an additional guarantee.
+
+From the docstring: @var{proc} is applied exactly once to every port
+that exists in the system at the time @var{port-for-each} is invoked.
+Changes to the port table while @var{port-for-each} is running have no
+effect as far as @var{port-for-each} is concerned.
+
+This guarantee is important to make (ice-9 popen) work reliable.
+
+** The semantics of guardians have changed.
+
+The changes are for the most part compatible.  An important criterion
+was to keep the typical usage of guardians as simple as before, but to 
+make the semantics safer and (as a result) more useful.
+
+*** All objects returned from guardians are now properly alive.
+
+It is now guaranteed that any object referenced by an object returned
+from a guardian is alive.  It's now impossible for a guardian to
+return a "contained" object before its "containing" object.
+
+One incompatible (but probably not very important) change resulting
+from this is that it is no longer possible to guard objects that
+indirectly reference themselves (i.e. are parts of cycles).  If you do
+so accidentally, you'll get a warning.
+
+*** There are now two types of guardians: greedy and sharing.
+
+If you call (make-guardian #t) or just (make-guardian), you'll get a
+greedy guardian, and for (make-guardian #f) a sharing guardian.
+
+Greedy guardians are the default because they are more "defensive".
+You can only greedily guard an object once.  If you guard an object
+more than once, once in a greedy guardian and the rest of times in
+sharing guardians, then it is guaranteed that the object won't be
+returned from sharing guardians as long as it is greedily guarded
+and/or alive.
+
+Guardians returned by calls to `make-guardian' can now take one more
+optional parameter, which says whether to throw an error in case an
+attempt is made to greedily guard an object that is already greedily
+guarded.  The default is true, i.e. throw an error.  If the parameter
+is false, the guardian invocation returns #t if guarding was
+successful and #f if it wasn't.
+
+Also, since greedy guarding is, in effect, a side-effecting operation
+on objects, a new function is introduced: `destroy-guardian!'.
+Invoking this function on a guardian renders it unoperative and, if
+the guardian is greedy, clears the "greedily guarded" property of the
+objects that were guarded by it, thus undoing the side effect.
+
+Note that all this hair is hardly very important, since guardian
+objects are usually permanent.
+
 ** Escape procedures created by call-with-current-continuation now
 accept any number of arguments, as required by R5RS.
 
@@ -172,11 +307,42 @@ Guile.
 
 Instead, use scm_c_memq or scm_memq, scm_memv, scm_member.
 
+** New function: read-string!/partial str [port_or_fdes [start [end]]]
+
+     Read characters from an fport or file descriptor into a string
+     STR.  This procedure is scsh-compatible and can efficiently read
+     large strings.  It will:
+
+        * attempt to fill the entire string, unless the START and/or
+          END arguments are supplied.  i.e., START defaults to 0 and
+          END defaults to `(string-length str)'
+
+        * use the current input port if PORT_OR_FDES is not supplied.
+
+        * read any characters that are currently available, without
+          waiting for the rest (short reads are possible).
+
+        * wait for as long as it needs to for the first character to
+          become available, unless the port is in non-blocking mode
+
+        * return `#f' if end-of-file is encountered before reading any
+          characters, otherwise return the number of characters read.
+
+        * return 0 if the port is in non-blocking mode and no characters
+          are immediately available.
+
+        * return 0 if the request is for 0 bytes, with no end-of-file
+          check
+
 ** New function: port? X
 
 Returns a boolean indicating whether X is a port.  Equivalent to
 `(or (input-port? X) (output-port? X))'.
 
+** New function: file-port?
+
+Determines whether a given object is a port that is related to a file.
+
 ** New function: port-for-each proc
 
 Apply PROC to each port in the Guile port table in turn.  The
@@ -188,7 +354,7 @@ A simple wrapper for the `dup2' system call.  Copies the file
 descriptor OLDFD to descriptor number NEWFD, replacing the
 previous meaning of NEWFD.  Both OLDFD and NEWFD must be integers.
 Unlike for dup->fdes or primitive-move->fdes, no attempt is made
-to move away ports which are using NEWFD\n".  The return value is
+to move away ports which are using NEWFD.  The return value is
 unspecified.
 
 ** New function: close-fdes fd
@@ -211,12 +377,29 @@ current values of file descriptors 0, 1, and 2 in the parent process.
 
 There is no such concept as a weak binding any more.
 
-** Removed constants:  most-positive-fixnum, most-negative-fixnum, bignum-radix
+** Removed constants:  bignum-radix, scm-line-incrementors
 
 * Changes to the gh_ interface
 
 * Changes to the scm_ interface
 
+** New function: scm_c_read (SCM port, void *buffer, scm_sizet size)
+
+Used by an application to read arbitrary number of bytes from a port.
+Same semantics as libc read, except that scm_c_read only returns less
+than SIZE bytes if at end-of-file.
+
+Warning: Doesn't update port line and column counts!
+
+** New function: scm_c_write (SCM port, const void *ptr, scm_sizet size)
+
+Used by an application to write arbitrary number of bytes to an SCM
+port.  Similar semantics as libc write.  However, unlike libc
+write, scm_c_write writes the requested number of bytes and has no
+return value.
+
+Warning: Doesn't update port line and column counts!
+
 ** New function: scm_init_guile ()
 
 In contrast to scm_boot_guile, scm_init_guile will return normally
@@ -254,6 +437,16 @@ behaviour is undefined - it may even crash or loop endlessly.  Further, for
 the case that the object is not found in the list, scm_c_memq returns #f which
 is similar to scm_memq, but different from scm_sloppy_memq's behaviour.
 
+** New functions: scm_remember_upto_here_1, scm_remember_upto_here_2, 
+scm_remember_upto_here
+
+These functions replace the function scm_remember.
+
+** Deprecated function:  scm_remember
+
+Use one of the new functions scm_remember_upto_here_1,
+scm_remember_upto_here_2 or scm_remember_upto_here instead.
+
 ** New global variable scm_gc_running_p introduced.
 
 Use this variable to find out if garbage collection is being executed.  Up to
@@ -298,6 +491,10 @@ Use these instead of SCM_SETCHARS.
 
 Use instead of SCM_COERCE_SUBSTR.
 
+** New macros:  SCM_DIR_OPEN_P, SCM_DIR_FLAG_OPEN
+
+For directory objects, use these instead of SCM_OPDIRP and SCM_OPN.
+
 ** Deprecated macros:  SCM_OUTOFRANGE, SCM_NALLOC, SCM_HUP_SIGNAL, 
 SCM_INT_SIGNAL, SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL, 
 SCM_ALRM_SIGNAL, SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD, 
@@ -308,7 +505,8 @@ SCM_VALIDATE_NULLORROSTRING_COPY, SCM_ROLENGTH, SCM_LENGTH, SCM_HUGE_LENGTH,
 SCM_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET, SCM_COERCE_SUBSTR,
 SCM_ROSTRINGP, SCM_RWSTRINGP, SCM_VALIDATE_RWSTRING, SCM_ROCHARS,
 SCM_ROUCHARS, SCM_SETLENGTH, SCM_SETCHARS, SCM_LENGTH_MAX, SCM_GC8MARKP,
-SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR
+SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR, SCM_SUBR_DOC,
+SCM_OPDIRP, SCM_VALIDATE_OPDIR
 
 Use SCM_ASSERT_RANGE or SCM_VALIDATE_XXX_RANGE instead of SCM_OUTOFRANGE.
 Use scm_memory_error instead of SCM_NALLOC.
@@ -332,6 +530,7 @@ Use SCM_SETGCMARK instead of SCM_SETGC8MARK.
 Use SCM_CLRGCMARK instead of SCM_CLRGC8MARK.
 Use SCM_TYP16 instead of SCM_GCTYP16.
 Use SCM_CDR instead of SCM_GCCDR.
+Use SCM_DIR_OPEN_P instead of SCM_OPDIRP.
 
 ** Removed function:  scm_struct_init