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.
* Changes to the distribution
+** New module (ice-9 stack-catch):
+
+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)
** New module (ice-9 rdelim).
This exports the following procedures which were previously defined
-in the root module:
+in the default environment:
-read-line read-line! read-delimited read-delimited!
-;; TODO: read-string!/partial %read-delimited! %read-line write-line
+read-line read-line! read-delimited read-delimited! %read-delimited!
+%read-line write-line
-For backwards compatibility the definitions are also imported into the
-root module in this version of Guile. However you should add:
+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 be removed
-in in a future version.
+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:
* 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
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
closed even if a port is using it. The return value is
unspecified.
+** New function: crypt password salt
+
+Encrypts `password' using the standard unix password encryption
+algorithm.
+
+** New function: chroot path
+
+Change the root directory of the running process to `path'.
+
+** New functions: getlogin, cuserid
+
+Return the login name or the user name of the current effective user
+id, respectively.
+
+** New functions: getpriority which who, setpriority which who prio
+
+Get or set the priority of the running process.
+
+** New function: getpass prompt
+
+Read a password from the terminal, first displaying `prompt' and
+disabling echoing.
+
+** New function: flock file operation
+
+Set/remove an advisory shared or exclusive lock on `file'.
+
+** New functions: sethostname name, gethostname
+
+Set or get the hostname of the machine the current process is running
+on.
+
** Deprecated: close-all-ports-except. This was intended for closing
ports in a child process after a fork, but it has the undesirable side
effect of flushing buffers. port-for-each is more flexible.
* 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
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,
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_SUBR_DOC
+SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR, SCM_SUBR_DOC,
+SCM_OPDIRP, SCM_VALIDATE_OPDIR, SCM_WTA, RETURN_SCM_WTA
Use SCM_ASSERT_RANGE or SCM_VALIDATE_XXX_RANGE instead of SCM_OUTOFRANGE.
Use scm_memory_error instead of SCM_NALLOC.
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.
+Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of SCM_WTA.
+Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of RETURN_SCM_WTA.
** Removed function: scm_struct_init