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
+On systems that support it, there is also a compatibility module named
(ice-9 and-let*). It will go away in the next release.
** New modules (oop goops) etc.:
(is-a? v <2D-vector>) --> #t
-See further in the GOOPS tutorial available in the guile-doc
-distribution in info (goops.info) and texinfo formats.
+See further in the GOOPS manual and tutorial in the `doc' directory,
+in info (goops.info) and texinfo formats.
** New module (ice-9 rdelim).
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.
+
+** New module (ice-9 buffered-input)
+
+This module provides procedures to construct an input port from an
+underlying source of input that reads and returns its input in chunks.
+The underlying input source is a Scheme procedure, specified by the
+caller, which the port invokes whenever it needs more input.
+
+This is useful when building an input port whose back end is Readline
+or a UI element such as the GtkEntry widget.
+
+** Documentation
+
+The reference and tutorial documentation that was previously
+distributed separately, as `guile-doc', is now included in the core
+Guile distribution. The documentation consists of the following
+manuals.
+
+- The Guile Tutorial (guile-tut.texi) contains a tutorial introduction
+ to using Guile.
+
+- The Guile Reference Manual (guile.texi) contains (or is intended to
+ contain) reference documentation on all aspects of Guile.
+
+- The GOOPS Manual (goops.texi) contains both tutorial-style and
+ reference documentation for using GOOPS, Guile's Object Oriented
+ Programming System.
+
+- The Revised^4 and Revised^5 Reports on the Algorithmic Language
+ Scheme (r4rs.texi and r5rs.texi).
+
+See the README file in the `doc' directory for more details.
+
* 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 empty combination is no longer valid syntax.
+
+Previously, the expression "()" evaluated to the empty list. This has
+been changed to signal a "missing expression" error. The correct way
+to write the empty list as a literal constant is to use quote: "'()".
+
+** Auto-loading of compiled-code modules is deprecated.
+
+Guile used to be able to automatically find and link a shared
+libraries to satisfy requests for a module. For example, the module
+`(foo bar)' could be implemented by placing a shared library named
+"foo/libbar.so" (or with a different extension) in a directory on the
+load path of Guile.
+
+This has been found to be too tricky, and is no longer supported.
+What you should do instead now is to write a small Scheme file that
+explicitly calls `dynamic-link' to load the shared library and
+`dynamic-call' to initialize it.
+
+The shared libraries themselves should be installed in the usual
+places for shared libraries, with names like "libguile-foo-bar".
+
+For example, place this into a file "foo/bar.scm"
+
+ (define-module (foo bar))
+
+ (dynamic-call "foobar_init" (dynamic-link "libguile-foo-bar"))
+
+The file name passed to `dynamic-link' should not contain an
+extension. It will be provided automatically.
+
** The module system has been made more disciplined.
The function `eval' will now save and restore the current module
** Escape procedures created by call-with-current-continuation now
accept any number of arguments, as required by R5RS.
+** New function `call-with-deprecation'
+
+Call a thunk, displaying a deprecation message at the first call:
+
+ (define (id x)
+ (call-with-deprecation "`id' is deprecated. Use `identity' instead."
+ (lambda ()
+ (identity x))))
+
+ guile> (id 1)
+ ;; `id' is deprecated. Use `identity' instead.
+ 1
+ guile> (id 1)
+ 1
+
** New function `make-object-property'
This function returns a new `procedure with setter' P that can be used
* return 0 if the request is for 0 bytes, with no end-of-file
check
+** New function: object->string OBJ
+
+Return a Scheme string obtained by printing a given object.
+
** New function: port? X
Returns a boolean indicating whether X is a port. Equivalent to
closed even if a port is using it. The return value is
unspecified.
-** 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.
+** 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.
+
+** New function: mkstemp! tmpl
+
+mkstemp creates a new unique file in the file system and returns a
+new buffered port open for reading and writing to the file. TMPL
+is a string specifying where the file should be created: it must
+end with `XXXXXX' and will be changed in place to return the name
+of the temporary file.
+
+** New function: open-input-string string
+
+Return an input string port which delivers the characters from
+`string'. This procedure, together with `open-output-string' and
+`get-output-string' implements SRFI-6.
+
+** New function: open-output-string
+
+Return an output string port which collects all data written to it.
+The data can then be retrieved by `get-output-string'.
+
+** New function: get-output-string
+
+Return the contents of an output string port.
+
+** New function: identity
+
+Return the argument.
+
+** Deprecated: id
+
+Use `identity' instead.
+
+** 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.
** The (ice-9 popen) module now attempts to set up file descriptors in
the child process from the current Scheme ports, instead of using the
** Removed constants: bignum-radix, scm-line-incrementors
+** define-method: New syntax mandatory.
+
+The new method syntax is now mandatory:
+
+(define-method (NAME ARG-SPEC ...) BODY ...)
+(define-method (NAME ARG-SPEC ... . REST-ARG) BODY ...)
+
+ ARG-SPEC ::= ARG-NAME | (ARG-NAME TYPE)
+ REST-ARG ::= ARG-NAME
+
+If you have old code using the old syntax, import
+(oop goops old-define-method) before (oop goops) as in:
+
+ (use-modules (oop goops old-define-method) (oop goops))
+
* 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
Use one of the new functions scm_remember_upto_here_1,
scm_remember_upto_here_2 or scm_remember_upto_here instead.
+** New function: scm_allocate_string
+
+This function replaces the function scm_makstr.
+
+** Deprecated function: scm_makstr
+
+Use the new function scm_allocate_string instead.
+
** New global variable scm_gc_running_p introduced.
Use this variable to find out if garbage collection is being executed. Up to
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_OPDIRP, SCM_VALIDATE_OPDIR
+SCM_OPDIRP, SCM_VALIDATE_OPDIR, SCM_WTA, RETURN_SCM_WTA, SCM_CONST_LONG,
+SCM_WNA, SCM_FUNC_NAME, SCM_VALIDATE_NUMBER_COPY,
+SCM_VALIDATE_NUMBER_DEF_COPY, SCM_SLOPPY_CONSP, SCM_SLOPPY_NCONSP,
+SCM_SETAND_CDR, SCM_SETOR_CDR, SCM_SETAND_CAR, SCM_SETOR_CAR
Use SCM_ASSERT_RANGE or SCM_VALIDATE_XXX_RANGE instead of SCM_OUTOFRANGE.
Use scm_memory_error instead of SCM_NALLOC.
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.
+Use SCM_VCELL_INIT instead of SCM_CONST_LONG.
+Use SCM_WRONG_NUM_ARGS instead of SCM_WNA.
+Use SCM_CONSP instead of SCM_SLOPPY_CONSP.
+Use !SCM_CONSP instead of SCM_SLOPPY_NCONSP.
** Removed function: scm_struct_init
This can be used to set an apply function to a smob type.
+** Deprecated function: scm_strprint_obj
+
+Use scm_object_to_string instead.
+
+** Deprecated function: scm_wta
+
+Use scm_wrong_type_arg, or another appropriate error signalling function
+instead.
+
\f
Changes since Guile 1.3.4:
Implements the interface to documentation strings associated with
objects.
+** New module (ice-9 time)
+
+Provides a macro `time', which displays execution time of a given form.
+
+** New module (ice-9 history)
+
+Loading this module enables value history in the repl.
+
* Changes to the stand-alone interpreter
** New command line option --debug