*** empty log message ***

This commit is contained in:
Marius Vollmer 2001-05-20 23:42:00 +00:00
commit 311b6a3cb1
3 changed files with 187 additions and 183 deletions

358
NEWS
View file

@ -8,7 +8,7 @@ Changes since Guile 1.4:
* Changes to the distribution
** Guile now using versioning scheme similar to that of the Linux kernel.
** Guile now uses a versioning scheme similar to that of the Linux kernel.
Guile now always uses three numbers to represent the version,
i.e. "1.6.5". The first number, 1, is the major version number, the
@ -29,7 +29,13 @@ micro version number.
In addition, ./GUILE-VERSION now defines GUILE_MICRO_VERSION.
** As per RELEASE directions, deprecated items have been removed
** Guile now actively warns about deprecated features.
The new configure option `--enable-deprecated=LEVEL' and the
environment variable GUILE_WARN_DEPRECATED control this mechanism.
See INSTALL and README for more information.
** Deprecated items have been removed
*** Macros removed
@ -46,12 +52,6 @@ In addition, ./GUILE-VERSION now defines GUILE_MICRO_VERSION.
scm_tc_dblc - replaced by scm_tc16_complex.
scm_list_star - replaced by scm_cons_star.
*** scheme functions removed:
tag - no replacement.
fseek - replaced by seek.
list* - replaced by cons*.
** New SRFI modules have been added:
SRFI-0 `cond-expand' is now supported in Guile, without requiring
@ -128,55 +128,8 @@ On systems that support it, there is also a compatibility module named
(oop goops composite-slot)
The Guile Object Oriented Programming System (GOOPS) has been
integrated into Guile.
Type
(use-modules (oop goops))
access GOOPS bindings.
We're now ready to try some basic GOOPS functionality.
Generic functions
(define-method (+ (x <string>) (y <string>))
(string-append x y))
(+ 1 2) --> 3
(+ "abc" "de") --> "abcde"
User-defined types
(define-class <2D-vector> ()
(x #:init-value 0 #:accessor x-component #:init-keyword #:x)
(y #:init-value 0 #:accessor y-component #:init-keyword #:y))
(define-method write ((obj <2D-vector>) port)
(display (format #f "<~S, ~S>" (x-component obj) (y-component obj))
port))
(define v (make <2D-vector> #:x 3 #:y 4))
v --> <3, 4>
(define-method + ((x <2D-vector>) (y <2D-vector>))
(make <2D-vector>
#:x (+ (x-component x) (x-component y))
#:y (+ (y-component x) (y-component y))))
(+ v v) --> <6, 8>
Asking for the type of an object
(class-of v) --> #<<class> <2D-vector> 40241ac0>
<2D-vector> --> #<<class> <2D-vector> 40241ac0>
(class-of 1) --> #<<class> <integer> 401b2a98>
<integer> --> #<<class> <integer> 401b2a98>
(is-a? v <2D-vector>) --> #t
See further in the GOOPS manual and tutorial in the `doc' directory,
in info (goops.info) and texinfo formats.
integrated into Guile. For further information, consult the GOOPS
manual and tutorial in the `doc' directory.
** New module (ice-9 rdelim).
@ -202,46 +155,20 @@ can be used for similar functionality.
This is a subset of the (scsh rw) module from guile-scsh. Currently
it defines a single procedure:
** New function: read-string!/partial str [port_or_fdes [start [end]]]
*** 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
large strings.
** New module (ice-9 match)
This module includes Andrew K. Wright's pattern matcher:
This module includes Andrew K. Wright's pattern matcher. See
ice-9/match.scm for brief description or
(use-modules (ice-9 match))
http://www.star-lab.com/wright/code.html
(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.
for complete documentation.
This module requires SLIB to be installed and available from Guile.
@ -279,21 +206,6 @@ 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:
(use-modules (ice-9 safe))
(define m (make-safe-module))
;;; m will now be a module containing only a safe subset of R5RS
(eval '(+ 1 2) m) --> 3
(eval 'load m) --> ERROR: Unbound variable: load
** New command line option `--use-srfi'
Using this option, SRFI modules can be loaded on startup and be
@ -316,12 +228,52 @@ guile> (string-pad "bla" 20)
* Changes to Scheme functions and syntax
** The empty combination is no longer valid syntax.
** Previously deprecated Scheme functions have been removed:
tag - no replacement.
fseek - replaced by seek.
list* - replaced by cons*.
** It's now possible to create modules with controlled environments
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 '(+ 1 2) m) --> 3
(eval 'load m) --> ERROR: Unbound variable: load
** Evaluation of "()", the empty list, is now an error.
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: "'()".
** New concept of `Guile Extensions'.
A Guile Extension is just a ordinary shared library that can be linked
at run-time. We found it advantageous to give this simple concept a
dedicated name to distinguish the issues related to shared libraries
from the issues related to the module system.
*** New function: load-extension
Executing (load-extension lib init) is mostly equivalent to
(dynamic-call init (dynamic-link lib))
except when scm_register_extension has been called previously.
Whenever appropriate, you should use `load-extension' instead of
dynamic-link and dynamic-call.
*** New C function: scm_c_register_extension
This function registers a initialization function for use by
`load-extension'. Use it when you don't want specific extensions to
be loaded as shared libraries (for example on platforms that don't
support dynamic linking).
** Auto-loading of compiled-code modules is deprecated.
Guile used to be able to automatically find and link a shared
@ -330,10 +282,10 @@ library to satisfy requests for a module. For example, the module
"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.
This has been found to be too tricky, and is no longer supported. The
shared libraries are now called "extensions". You should now write a
small Scheme file that calls `load-extension' to load the shared
library and initialize it explicitely.
The shared libraries themselves should be installed in the usual
places for shared libraries, with names like "libguile-foo-bar".
@ -342,20 +294,29 @@ For example, place this into a file "foo/bar.scm"
(define-module (foo bar))
(dynamic-call "foobar_init" (dynamic-link "libguile-foo-bar"))
(load-extension "libguile-foo-bar" "foobar_init")
The file name passed to `dynamic-link' should not contain an
extension. It will be provided automatically.
** Backward incompatible change: eval EXP ENVIRONMENT-SPECIFIER
`eval' is now R5RS, that is it takes two arguments.
The second argument is an environment specifier, i.e. either
(scheme-report-environment 5)
(null-environment 5)
(interaction-environment)
or
any module.
** 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'.
The function `eval' will 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
A consequence of this change is that `eval' is not particularly
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
@ -372,7 +333,7 @@ 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',
To prevent strange behavior, 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
@ -424,12 +385,12 @@ 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.
** Continuations created by call-with-current-continuation now accept
any number of arguments, as required by R5RS.
** New function `issue-deprecation-warning'
This function is used to displaying the deprecation messages that are
This function is used to display the deprecation messages that are
controlled by GUILE_WARN_DEPRECATION as explained in the README.
(define (id x)
@ -473,19 +434,6 @@ Instead of #&optional, #&key, etc you should now use #:optional,
The old reader syntax `#&' is still supported, but deprecated. It
will be removed in the next release.
** Backward incompatible change: eval EXP ENVIRONMENT-SPECIFIER
`eval' is now R5RS, that is it takes two arguments.
The second argument is an environment specifier, i.e. either
(scheme-report-environment 5)
(null-environment 5)
(interaction-environment)
or
any module.
** New define-module option: pure
Tells the module system not to include any bindings from the root
@ -505,31 +453,15 @@ a module which doesn't import one of `define-public' or `export'.
Example:
(define-module (foo)
:pure
:use-module (ice-9 r5rs)
:export (bar))
(define-module (foo)
:pure
:use-module (ice-9 r5rs)
:export (bar))
;;; Note that we're pure R5RS below this point!
;;; Note that we're pure R5RS below this point!
(define (bar)
...)
** Deprecated: scm_make_shared_substring
Explicit shared substrings will disappear from Guile.
Instead, "normal" strings will be implemented using sharing
internally, combined with a copy-on-write strategy.
** Deprecated: scm_read_only_string_p
The concept of read-only strings will disappear in next release of
Guile.
** Deprecated: scm_sloppy_memq, scm_sloppy_memv, scm_sloppy_member
Instead, use scm_c_memq or scm_memq, scm_memv, scm_member.
(define (bar)
...)
** New function: object->string OBJ
@ -546,12 +478,11 @@ 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
return value is unspecified. More specifically, PROC is applied
exactly once to every port that exists in the system at the time
PORT-FOR-EACH is invoked. Changes to the port table while
PORT-FOR-EACH is running have no effect as far as PORT-FOR-EACH is
concerned.
Apply PROC to each port in the Guile port table in turn. The return
value is unspecified. More specifically, PROC is applied exactly once
to every port that exists in the system at the time PORT-FOR-EACH is
invoked. Changes to the port table while PORT-FOR-EACH is running
have no effect as far as PORT-FOR-EACH is concerned.
** New function: dup2 oldfd newfd
@ -634,21 +565,23 @@ Return the argument.
** New function: inet-pton family address
Convert a printable string network address into an integer. Note
that unlike the C version of this function, the result is an
integer with normal host byte ordering. FAMILY can be `AF_INET'
or `AF_INET6'. e.g.,
(inet-pton AF_INET "127.0.0.1") => 2130706433
(inet-pton AF_INET6 "::1") => 1
Convert a printable string network address into an integer. Note that
unlike the C version of this function, the result is an integer with
normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
e.g.,
(inet-pton AF_INET "127.0.0.1") => 2130706433
(inet-pton AF_INET6 "::1") => 1
** New function: inet-ntop family address
Convert an integer network address into a printable string. Note
that unlike the C version of this function, the input is an
integer with normal host byte ordering. FAMILY can be `AF_INET'
or `AF_INET6'. e.g.,
(inet-ntop AF_INET 2130706433) => "127.0.0.1"
(inet-ntop AF_INET6 (- (expt 2 128) 1)) =>
Convert an integer network address into a printable string. Note that
unlike the C version of this function, the input is an integer with
normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
e.g.,
(inet-ntop AF_INET 2130706433) => "127.0.0.1"
(inet-ntop AF_INET6 (- (expt 2 128) 1)) =>
ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
** Deprecated: id
@ -661,7 +594,7 @@ Use `1-' instead.
** Deprecated: return-it
Use `noop' instead.
Do without it.
** Deprecated: string-character-length
@ -708,9 +641,28 @@ If you have old code using the old syntax, import
There is no longer a distinction between builtin or other variables.
Use module system operations for all variables.
* Changes to the gh_ interface
** Lazy-catch handlers are no longer allowed to return.
* Changes to the scm_ interface
That is, a call to `throw', `error', etc is now guaranteed to not
return.
* Changes to the C interface
** Deprecated: scm_make_shared_substring
Explicit shared substrings will disappear from Guile.
Instead, "normal" strings will be implemented using sharing
internally, combined with a copy-on-write strategy.
** Deprecated: scm_read_only_string_p
The concept of read-only strings will disappear in next release of
Guile.
** Deprecated: scm_sloppy_memq, scm_sloppy_memv, scm_sloppy_member
Instead, use scm_c_memq or scm_memq, scm_memv, scm_member.
** New function: scm_c_read (SCM port, void *buffer, scm_sizet size)
@ -901,10 +853,6 @@ Instead, create a fresh vector of the desired size and copy the contents.
scm_gensym now only takes one argument.
** New function: scm_gentemp (SCM prefix, SCM obarray)
The builtin `gentemp' has now become a primitive.
** Deprecated type tags: scm_tc7_ssymbol, scm_tc7_msymbol, scm_tcs_symbols,
scm_tc7_lvector
@ -948,6 +896,50 @@ Use scm_c_define or scm_c_lookup instead, as appropriate.
These functions work with variables instead of with vcells.
** New functions for creating and defining `subr's and `gsubr's.
The new functions more clearly distinguish between creating a subr (or
gsubr) object and adding it to the current module.
These new functions are available: scm_c_make_subr, scm_c_define_subr,
scm_c_make_subr_with_generic, scm_c_define_subr_with_generic,
scm_c_make_gsubr, scm_c_define_gsubr, scm_c_make_gsubr_with_generic,
scm_c_define_gsubr_with_generic.
** Deprecated functions: scm_make_subr, scm_make_subr_opt,
scm_make_subr_with_generic, scm_make_gsubr,
scm_make_gsubr_with_generic.
Use the new ones from above instead.
** C interface to the module system has changed.
While we suggest that you avoid as many explicit module system
operations from C as possible for the time being, the C interface has
been made more similar to the high-level Scheme module system.
*** New functions: scm_c_define_module, scm_c_use_module,
scm_c_export, scm_c_resolve_module.
They mostly work like their Scheme namesakes. scm_c_define_module
takes a function that is called a context where the new module is
current.
*** Deprecated functions: scm_the_root_module, scm_make_module,
scm_ensure_user_module, scm_load_scheme_module.
Use the new functions instead.
** Renamed function: scm_internal_with_fluids becomes
scm_c_with_fluids.
scm_internal_with_fluids is available as a deprecated function.
** New function: scm_c_with_fluid.
Just like scm_c_with_fluids, but takes one fluid and one value instead
of lists of same.
Changes since Guile 1.3.4: