X-Git-Url: http://git.hcoop.net/bpt/guile.git/blobdiff_plain/b7d69200c08ec424a9f3138e90370f27ee8e0d4b..b432fb4b9929475c963e8be69ed6c7293bc964d2:/NEWS diff --git a/NEWS b/NEWS index 49b1b80fe..51bfe1887 100644 --- 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: @@ -87,6 +136,47 @@ 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 @@ -217,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 @@ -233,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 @@ -256,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: 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 @@ -353,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, @@ -363,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_SUBR_DOC +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. @@ -387,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