Guile NEWS --- history of user-visible changes.
-Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
See the end for copying conditions.
Please send Guile bug reports to bug-guile@gnu.org.
* Changes to the C interface
\f
-Changes since the stable branch:
+Changes since the 1.6.x series:
* Changes to the distribution
** Guile now requires GNU MP (http://swox.com/gmp).
Guile now uses the GNU MP library for arbitrary precision arithmetic.
-At the moment it is being used to handle Guile's bignums.
** Guile now has separate private and public configuration headers.
-Guile now has config.h and libguile/scmconfig.h. The former is not
-installed and is private. The latter is installed and used by Guile's
-public headers. config.h is generated by configure and autoheader,
-and scmconfig.h is generated by a small C program, gen-scmconfig at
-build time based in part on the contents of config.h.
-
-Seen libguile/__scm.h and gen-scmconfig.c for more information.
-
-Note too that nearly all public defines are now set to either 1 or 0
-rather than being set to 1 or left undefined. See gen-scmconfig.c and
-the GNU Coding Guidelines for the rationale. However, pre-existing
-defines that were not renamed were not changed. i.e. GUILE_DEBUG is
-still either 1 or undefined.
-
-** The INSTALL file is now the generic automake installed one.
-
-Guile specific instructions can be found in the README.
+That is, things like HAVE_STRING_H no longer leak from Guile's
+headers.
** Guile now provides and uses an "effective" version number.
Guile now provides scm_effective_version and effective-version
functions which return the "effective" version number. This is just
the normal full version string without the final micro-version number,
-so the current effective-version is "1.6". The effective version
+so the current effective-version is "1.7". The effective version
should remain unchanged during a stable series, and should be used for
items like the versioned share directory name
-i.e. /usr/share/guile/1.6.
+i.e. /usr/share/guile/1.7.
Providing an unchanging version number during a stable release for
things like the versioned share directory can be particularly
you will get threads that are implemented with the portable POSIX
threads. These threads can run concurrently (unlike the previous
"coop" thread implementation), but need to cooperate for things like
-the GC. See the manual for details. [XXX - write this.]
+the GC.
The default is "pthreads", unless your platform doesn't have pthreads,
in which case "null" threads are used.
+See the manual for details, nodes "Initialization", "Multi-Threading",
+"Blocking", and others.
+
+** There is the new notion of 'discouraged' features.
+
+This is a milder form of deprecation.
+
+Things that are discouraged should not be used in new code, but it is
+OK to leave them in old code for now. When a discouraged feature is
+used, no warning message is printed like there is for 'deprecated'
+features. Also, things that are merely discouraged are nevertheless
+implemented efficiently, while deprecated features can be very slow.
+
+You can omit discouraged features from libguile by configuring it with
+the '--disable-discouraged' option.
+
+** Deprecation warnings can be controlled at run-time.
+
+(debug-enable 'warn-deprecated) switches them on and (debug-disable
+'warn-deprecated) switches them off.
+
** New module (ice-9 serialize):
(serialize FORM1 ...) and (parallelize FORM1 ...) are useful when
where you have some section(s) of code which you consider can run
in parallel to other sections.
+### move rest to manual
+
They "flag" (with dynamic extent) sections of code to be of
"serial" or "parallel" nature and have the single effect of
preventing a serial section from being run in parallel with any
C code primitive), enabling the computations to run in parallel
while the scripting code runs single-threadedly.
-** New module (srfi srfi-26)
+** Support for require-extension, SRFI-55, has been added.
-This is an implementation of SRFI-26.
+The SRFI-55 special form `require-extension' has been added. It is
+available at startup, and provides a portable way to load Scheme
+extensions. SRFI-55 only requires support for one type of extension,
+"srfi"; so a set of SRFIs may be loaded via (require-extension (srfi 1
+13 14)).
+
+** New module (srfi srfi-26) provides support for `cut' and `cute'.
+
+The (srfi srfi-26) module is an implementation of SRFI-26 which
+provides the `cut' and `cute' syntax. These may be used to specialize
+parameters without currying.
** New module (srfi srfi-31)
This is an implementation of SRFI-31 which provides a special form
`rec' for recursive evaluation.
-** Guile now includes its own version of libltdl.
+** The modules (srfi srfi-13), (srfi srfi-14) and (srfi srfi-4) have
+ been merged with the core, making their functionality always
+ available.
+
+The modules are still available, tho, and you could use them together
+with a renaming import, for example.
-We now use a modified version of libltdl that allows us to make
-improvements to it without having to rely on libtool releases.
+** Guile no longer includes its own version of libltdl.
+
+The official version is good enough now.
** The --enable-htmldoc option has been removed from 'configure'.
Support for translating the documentation into HTML is now always
provided. Use 'make html'.
+** The configure option '--disable-arrays' has been removed.
+
+Support for arrays and uniform numeric arrays is now always included
+in Guile.
+
* Changes to the stand-alone interpreter
** New command line option `-L'.
* Changes to Scheme functions and syntax
-** There is now support for copy-on-write substrings and
- mutation-sharing substrings.
+** Guardians have changed back to their original semantics
+
+Guardians now behave like described in the paper by Dybvig et al. In
+particular, they no longer make guarantees about the order in which
+they return objects, and they can no longer be greedy.
+
+They no longer drop cyclic data structures.
+
+The C function scm_make_guardian has been changed incompatibly and no
+longer takes the 'greedy_p' argument.
+
+** New function hashx-remove!
+
+This function completes the set of 'hashx' functions.
+
+** The concept of dynamic roots has been factored into continuation
+ barriers and dynamic states.
+
+Each thread has a current dynamic state that carries the values of the
+fluids. You can create and copy dynamic states and use them as the
+second argument for 'eval'. See "Fluids and Dynamic States" in the
+manual.
+
+To restrict the influence that captured continuations can have on the
+control flow, you can errect continuation barriers. See "Continuation
+Barriers" in the manual.
+
+The function call-with-dynamic-root now essentially temporarily
+installs a new dynamic state and errects a continuation barrier.
+
+** The default load path no longer includes "." at the end.
+
+Automatically loading modules from the current directory should not
+happen by default. If you want to allow it in a more controlled
+manner, set the environment variable GUILE_LOAD_PATH or the Scheme
+variable %load-path.
+
+** The uniform vector and array support has been overhauled.
+
+It now complies with SRFI-4 and the weird prototype based uniform
+array creation has been deprecated. See the manual for more details.
+
+Some non-compatible changes have been made:
+ - characters can no longer be stored into byte arrays.
+ - strings and bit vectors are no longer considered to be uniform vectors.
+ - array-rank throws an error for non-arrays instead of returning zero.
+ - array-ref does no longer accept non-arrays when no indices are given.
+
+There is the new notion of 'generalized vectors' and corresponding
+procedures like 'generalized-vector-ref'. Generalized vectors include
+strings, bitvectors, ordinary vectors, and uniform numeric vectors.
+
+Arrays use generalized vectors as their storage, so that you still
+have arrays of characters, bits, etc. However, uniform-array-read!
+and uniform-array-write can no longer read/write strings and
+bitvectors.
+
+** There is now support for copy-on-write substrings, mutation-sharing
+ substrings and read-only strings.
+
+Three new procedures are related to this: substring/shared,
+substring/copy, and substring/read-only. See the manual for more
+information.
+
+** Backtraces will now highlight the value that caused the error.
+
+By default, these values are enclosed in "{...}", such as in this
+example:
+
+ guile> (car 'a)
+
+ Backtrace:
+ In current input:
+ 1: 0* [car {a}]
+
+ <unnamed port>:1:1: In procedure car in expression (car (quote a)):
+ <unnamed port>:1:1: Wrong type (expecting pair): a
+ ABORT: (wrong-type-arg)
+
+The prefix and suffix used for highlighting can be set via the two new
+printer options 'highlight-prefix' and 'highlight-suffix'. For
+example, putting this into ~/.guile will output the bad value in bold
+on an ANSI terminal:
+
+ (print-set! highlight-prefix "\x1b[1m")
+ (print-set! highlight-suffix "\x1b[22m")
-Two new procedures are related to this: substring/shared and
-substring/copy. See the manual for more information.
+
+** 'gettext' support for internationalization has been added.
+
+See the manual for details.
** New syntax '@' and '@@':
For example (@ (ice-9 pretty-print) pretty-print) will directly access
the pretty-print variable exported from the (ice-9 pretty-print)
module. You don't need to 'use' that module first. You can also use
-'@' with 'set!'.
+'@' as a target of 'set!', as in (set! (@ mod var) val).
The related syntax (@@ MODULE-NAME VARIABLE-NAME) works just like '@',
but it can also access variables that have not been exported. It is
intended only for kluges and temporary fixes and for debugging, not
for ordinary code.
+** Keyword syntax has been made more disciplined.
+
+Previously, the name of a keyword was read as a 'token' but printed as
+a symbol. Now, it is read as a general Scheme datum which must be a
+symbol.
+
+Previously:
+
+ guile> #:12
+ #:#{12}#
+ guile> #:#{12}#
+ #:#{\#{12}\#}#
+ guile> #:(a b c)
+ #:#{}#
+ ERROR: In expression (a b c):
+ Unbound variable: a
+ guile> #: foo
+ #:#{}#
+ ERROR: Unbound variable: foo
+
+Now:
+
+ guile> #:12
+ ERROR: Wrong type (expecting symbol): 12
+ guile> #:#{12}#
+ #:#{12}#
+ guile> #:(a b c)
+ ERROR: Wrong type (expecting symbol): (a b c)
+ guile> #: foo
+ #:foo
+
+** The printing of symbols that might look like keywords can be
+ controlled.
+
+The new printer option 'quote-keywordish-symbols' controls how symbols
+are printed that have a colon as their first or last character. The
+default now is to only quote a symbol with #{...}# when the read
+option 'keywords' is not '#f'. Thus:
+
+ guile> (define foo (string->symbol ":foo"))
+ guile> (read-set! keywords #f)
+ guile> foo
+ :foo
+ guile> (read-set! keywords 'prefix)
+ guile> foo
+ #{:foo}#
+ guile> (print-set! quote-keywordish-symbols #f)
+ guile> foo
+ :foo
+
** 'while' now provides 'break' and 'continue'
break and continue were previously bound in a while loop, but not
** 'call-with-current-continuation' is now also available under the name
'call/cc'.
-** Checking for duplicate bindings in module system
+** The module system now checks for duplicate bindings.
The module system now can check for name conflicts among imported
bindings.
-The behavior can be controlled by specifying one or more duplicates
+The behavior can be controlled by specifying one or more 'duplicates'
handlers. For example, to make Guile return an error for every name
collision, write:
to your .guile init file.
+### move rest to manual
+
The syntax for the :duplicates option is:
:duplicates HANDLER-NAME | (HANDLER1-NAME HANDLER2-NAME ...)
will import all bindings exported from bar, but rename them by adding
the prefix `bar:'.
-** Merging generic functions
+** Conflicting generic functions can be automatically merged.
+
+When two imported bindings conflict and they are both generic
+functions, the two functions can now be merged automatically. This is
+activated with the 'duplicates' handler 'merge-generics'.
+
+### move the rest to the manual
It is sometimes tempting to use GOOPS accessors with short names.
For example, it is tempting to use the name `x' for the x-coordinate
version string without the final micro-version number. See "Changes
to the distribution" above.
-** Futures: future, make-future, future-ref
+** New feature, 'futures': future, make-future, future-ref
-Futures are like promises, but begun immediately in a new thread. See
-the "Futures" section in the reference manual.
+Futures are like promises, but begin execution immediately in a new
+thread. See the "Futures" section in the reference manual.
** New threading functions: parallel, letpar, par-map, and friends
These are convenient ways to run calculations in parallel in new
threads. See "Parallel forms" in the manual for details.
-** Fair mutexes and condition variables
-
-Fair mutexes and condition variables have been added. The fairness
-means that scheduling is arranged to give as equal time shares as
-possible and that threads are awakened in a first-in-first-out
-manner. This is not guaranteed with standard mutexes and condition
-variables.
-
-In addition, fair mutexes are recursive. Locking a fair mutex that
-you have already locked will succeed. Every call to lock-mutex must
-be matched with a call to unlock-mutex. Only the last call to
-unlock-mutex will actually unlock the mutex.
-
-A fair condition variable must be used together with a fair mutex,
-just as a standard condition variable must be used together with a
-standard mutex.
-
-** New functions: make-fair-mutex, make-fair-condition-variable'
-
-Make a new fair mutex and a new fair condition variable respectively.
-
** New function 'try-mutex'.
This function will attempt to lock a mutex but will return immediately
C code can use the new functions scm_sigaction_for_thread and
scm_system_async_mark_for_thread to pass the new thread argument.
+When a thread blocks on a mutex, a condition variable or is waiting
+for IO to be possible, it will still execute system asyncs. This can
+be used to interrupt such a thread by making it execute a 'throw', for
+example.
+
** The function 'system-async' is deprecated.
You can now pass any zero-argument procedure to 'system-async-mark'.
were recognized as integers. Now (odd? 1.0) returns #t, (odd? 2.0)
returns #f and (odd? 1.5) signals an error.
-** We now have uninterned symbols.
+** Guile now has uninterned symbols.
-The new function 'make-symbol' will return a uninterned symbol. This
+The new function 'make-symbol' will return an uninterned symbol. This
is a symbol that is unique and is guaranteed to remain unique.
However, uninterned symbols can not yet be read back in.
** Deprecated: procedure->macro
-Change your code to use either procedure->memoizing-macro or, probably better,
-to use r5rs macros. Also, be aware that macro expansion will not be done
-during evaluation, but prior to evaluation.
+Change your code to use 'define-macro' or r5rs macros. Also, be aware
+that macro expansion will not be done during evaluation, but prior to
+evaluation.
** Soft ports now allow a `char-ready?' procedure
There is no replacement for undefine.
-** call-with-output-string doesn't segv on closed port
-
-Previously call-with-output-string would give a segmentation fault if
-the string port was closed by the called function. An exception is
-raised now.
+* The functions make-keyword-from-dash-symbol and keyword-dash-symbol
+ have been discouraged.
-** (ice-9 popen) duplicate pipe fd fix
+They are relics from a time where a keyword like #:foo was used
+directly as a Tcl option "-foo" and thus keywords were internally
+stored as a symbol with a starting dash. We now store a symbol
+without the dash.
-open-pipe, open-input-pipe and open-output-pipe left an extra copy of
-their pipe file descriptor in the child, which was normally harmless,
-but it can prevent the parent seeing eof or a broken pipe immediately
-and has now been fixed.
+Use symbol->keyword and keyword->symbol instead.
-** source-properties and set-source-properties! fix
-Properties set with set-source-properties! can now be read back
-correctly with source-properties.
-
-** SRFI-1 fixes
-
-delete and delete! now call the "=" procedure with arguments in the
-order described by the SRFI-1 specification
-
-list-copy now accepts improper lists, per the specification.
-
-** SRFI-4 fixes
-
-Larger values in 64-bit vectors should print correctly now.
+* Changes to the C interface
-** SRFI-19 fixes
+** The functions scm_hash_fn_remove_x and scm_hashx_remove_x no longer
+ take a 'delete' function argument.
-date-week-number now correctly respects the requested day of week
-starting the week.
+This argument makes no sense since the delete function is used to
+remove a pair from an alist, and this must not be configurable.
-* Changes to the C interface
-
-** There is the new notion of 'discouraged' features.
+This is an incompatible change.
-This is a milder form of deprecation.
+** The GH interface is now subject to the deprecation mechanism
-Things that are discouraged should not be used in new code, but it is
-OK to leave them in old code for now. When a discouraged feature is
-used, no warning message is printed like there is for 'deprecated'
-features. Also, things that are merely discouraged are nevertheless
-implemented efficiently, while deprecated features can be very slow.
+The GH interface has been deprecated for quite some time but now it is
+actually removed from Guile when it is configured with
+--disable-deprecated.
-You can omit discouraged features from libguile by configuring it with
-the '--disable-discouraged' option.
+See the manual "Transitioning away from GH" for more information.
** A new family of functions for converting between C values and
Scheme values has been added.
C value. For example, you can use scm_to_int to safely convert from
a SCM to an int.
- - SCM scm_from_<type>) (<type> val, ...)
+ - SCM scm_from_<type> (<type> val, ...)
These functions convert from a C type to a SCM value; for example,
scm_from_int for ints.
** The INUM macros have been deprecated.
A lot of code uses these macros to do general integer conversions,
-although they only work correctly with fixnums. Use the following
-alternatives.
+although the macros only work correctly with fixnums. Use the
+following alternatives.
SCM_INUMP -> scm_is_integer or similar
SCM_NINUMP -> !scm_is_integer or similar
SCM_MAKINUM -> scm_from_int or similar
SCM_INUM -> scm_to_int or similar
- SCM_VALIDATE_INUM_* -> Do not use these, scm_to_int, etc. will
+ SCM_VALIDATE_INUM_* -> Do not use these; scm_to_int, etc. will
do the validating for you.
** The scm_num2<type> and scm_<type>2num functions and scm_make_real
Use scm_is_eq for new code, which fits better into the naming
conventions.
+** The macros SCM_CONSP, SCM_NCONSP, SCM_NULLP, and SCM_NNULLP have
+ been discouraged.
+
+Use the function scm_is_pair or scm_is_null instead.
+
** The functions scm_round and scm_truncate have been deprecated and
are now available as scm_c_round and scm_c_truncate, respectively.
They export too many assumptions about the implementation of strings
and symbols that are no longer true in the presence of
-mutation-sharing substrings and later, when Guile switches to some
-form of Unicode.
+mutation-sharing substrings and when Guile switches to some form of
+Unicode.
When working with strings, it is often best to use the normal string
functions provided by Guile, such as scm_c_string_ref,
-scm_c_string_set_x, scm_string_append, etc.
+scm_c_string_set_x, scm_string_append, etc. Be sure to look in the
+manual since many more such functions are now provided than
+previously.
When you want to convert a SCM string to a C string, use the
scm_to_locale_string function or similar instead. For symbols, use
new string representation, scm_symbol_to_string does not need to copy
and is thus quite efficient.
-** Some string and symbol functions have been discouraged.
+** Some string, symbol and keyword functions have been discouraged.
-They don't fot into the uniform naming scheme and are not explicit
+They don't fit into the uniform naming scheme and are not explicit
about the character encoding.
Replace according to the following table:
scm_str2string -> scm_from_locale_string
scm_makfrom0str -> scm_from_locale_string
scm_mem2symbol -> scm_from_locale_symboln
- scm_mem2uninterned_symbol -> scm_make_symbol + scm_from_locale_stringn
+ scm_mem2uninterned_symbol -> scm_from_locale_stringn + scm_make_symbol
scm_str2symbol -> scm_from_locale_symbol
SCM_SYMBOL_HASH -> scm_hashq
SCM_SYMBOL_INTERNED_P -> scm_symbol_interned_p
+ scm_c_make_keyword -> scm_from_locale_keyword
+
+** The functions scm_keyword_to_symbol and sym_symbol_to_keyword are
+ now also available to C code.
+
+** SCM_KEYWORDP and SCM_KEYWORDSYM have been deprecated.
+
+Use scm_is_keyword and scm_keyword_to_symbol instead, but note that
+the latter returns the true name of the keyword, not the 'dash name',
+as SCM_KEYWORDSYM used to do.
+
+** A new way to access arrays in a thread-safe and efficient way has
+ been added.
+
+See the manual, node "Accessing Arrays From C".
+
+** The old uniform vector and bitvector implementations have been
+ unceremoniously removed.
+
+This implementation exposed the details of the tagging system of
+Guile. Use the new C API explained in the manual in node "Uniform
+Numeric Vectors" and "Bit Vectors", respectively.
+
+The following macros are gone: SCM_UVECTOR_BASE, SCM_SET_UVECTOR_BASE,
+SCM_UVECTOR_MAXLENGTH, SCM_UVECTOR_LENGTH, SCM_MAKE_UVECTOR_TAG,
+SCM_SET_UVECTOR_LENGTH, SCM_BITVECTOR_P, SCM_BITVECTOR_BASE,
+SCM_SET_BITVECTOR_BASE, SCM_BITVECTOR_MAX_LENGTH,
+SCM_BITVECTOR_LENGTH, SCM_MAKE_BITVECTOR_TAG,
+SCM_SET_BITVECTOR_LENGTH, SCM_BITVEC_REF, SCM_BITVEC_SET,
+SCM_BITVEC_CLR.
+
+** The macros dealing with vectors have been deprecated.
+
+Use the new functions scm_is_vector, scm_vector_elements,
+scm_vector_writable_elements, etc, or scm_is_simple_vector,
+SCM_SIMPLE_VECTOR_REF, SCM_SIMPLE_VECTOR_SET, etc instead. See the
+manual for more details.
+
+Deprecated are SCM_VECTORP, SCM_VELTS, SCM_VECTOR_MAX_LENGTH,
+SCM_VECTOR_LENGTH, SCM_VECTOR_REF, SCM_VECTOR_SET, SCM_WRITABLE_VELTS.
+
+The following macros have been removed: SCM_VECTOR_BASE,
+SCM_SET_VECTOR_BASE, SCM_MAKE_VECTOR_TAG, SCM_SET_VECTOR_LENGTH,
+SCM_VELTS_AS_STACKITEMS, SCM_SETVELTS, SCM_GC_WRITABLE_VELTS.
+
+** Some C functions and macros related to arrays have been deprecated.
+
+Migrate according to the following table:
+
+ scm_make_uve -> scm_make_typed_array, scm_make_u8vector etc.
+ scm_make_ra -> scm_make_array
+ scm_shap2ra -> scm_make_array
+ scm_cvref -> scm_c_generalized_vector_ref
+ scm_ra_set_contp -> do not use
+ scm_aind -> scm_array_handle_pos
+ scm_raprin1 -> scm_display or scm_write
+
+ SCM_ARRAYP -> scm_is_array
+ SCM_ARRAY_NDIM -> scm_c_array_rank
+ SCM_ARRAY_DIMS -> scm_array_handle_dims
+ SCM_ARRAY_CONTP -> do not use
+ SCM_ARRAY_MEM -> do not use
+ SCM_ARRAY_V -> scm_array_handle_elements or similar
+ SCM_ARRAY_BASE -> do not use
+
** SCM_CELL_WORD_LOC has been deprecated.
-Use the new macro SCM_CELL_OBJECT_LOC instead, which return a pointer
+Use the new macro SCM_CELL_OBJECT_LOC instead, which returns a pointer
to a SCM, as opposed to a pointer to a scm_t_bits.
This was done to allow the correct use of pointers into the Scheme
And finally, there is SCM_SMOB_OBJECT and SCM_SMOB_SET_OBJECT for
accesing the first immediate word of a smob as a SCM value, and there
is SCM_SMOB_OBJECT_LOC for getting a pointer to the first immediate
-smob words. Like wise for SCM_SMOB_OBJECT_2, etc.
+smob word. Like wise for SCM_SMOB_OBJECT_2, etc.
-** New way to deal with non-local exits and reentries.
+** New way to deal with non-local exits and re-entries.
There is a new set of functions that essentially do what
scm_internal_dynamic_wind does, but in a way that is more convenient
Thus the call to scm_frame_unwind_handler above could be replaced with
simply scm_frame_free (mem).
-** New way to block and unblock asyncs
+** New functions scm_c_call_with_blocked_asyncs and
+ scm_c_call_with_unblocked_asyncs
+
+Like scm_call_with_blocked_asyncs etc. but for C functions.
+
+** New functions scm_frame_block_asyncs and scm_frame_unblock_asyncs
In addition to scm_c_call_with_blocked_asyncs you can now also use
scm_frame_block_asyncs in a 'frame' (see above). Likewise for
scm_c_call_with_unblocked_asyncs and scm_frame_unblock_asyncs.
+** The macros SCM_DEFER_INTS, SCM_ALLOW_INTS, SCM_REDEFER_INTS,
+ SCM_REALLOW_INTS have been deprecated.
+
+They do no longer fulfill their original role of blocking signal
+delivery. Depending on what you want to achieve, replace a pair of
+SCM_DEFER_INTS and SCM_ALLOW_INTS with a frame that locks a mutex,
+blocks asyncs, or both. See node "Critical Sections" in the manual.
+
+** The value 'scm_mask_ints' is no longer writable.
+
+Previously, you could set scm_mask_ints directly. This is no longer
+possible. Use scm_c_call_with_blocked_asyncs and
+scm_c_call_with_unblocked_asyncs instead.
+
** New way to temporarily set the current input, output or error ports
C code can now use scm_frame_current_<foo>_port in a 'frame' (see
uintmax_t, respectively. On other platforms, they are identical to
the largest integer types that Guile knows about.
-** scm_unmemocopy and scm_unmemoize have been removed from public use.
-
-For guile internal use, the functions scm_i_unmemocopy_expr,
-scm_i_unmemocopy_body and scm_i_unmemoize_expr are provided to replace
-scm_unmemocopy and scm_unmemoize. User code should not have used
-scm_unmemocopy and scm_unmemoize and thus should not use the replacement
-functions also.
-
-Background: Formerly, scm_unmemocopy and scm_unmemoize would have allowed to
-unmemoize a single expression as well as a sequence of body forms. This would
-have lead to problems when unmemoizing code of the new memoizer. Now the two
-cases have to be distinguished.
+** The functions scm_unmemocopy and scm_unmemoize have been removed.
+You should not have used them.
** Many public #defines with generic names have been made private.
#defines with generic names like HAVE_FOO or SIZEOF_FOO have been made
-private or renamed with a more suitable public name. See below for
-the ones which have been renamed.
-
-** HAVE_STDINT_H and HAVE_INTTYPES_H have been removed from public use.
-
-HAVE_STDINT_H and HAVE_INTTYPES_H removed from public use. These are
-no longer needed since the older uses of stdint.h and inttypes.h are
-now handled by configure.in and gen-scmconfig.c.
-
-** USE_DLL_IMPORT is no longer defined publically.
-
-gen-scmconfig now uses it to decide what contents to place in the
-public scmconfig.h header without adding the USE_DLL_IMPORT itself.
-
-** HAVE_LIMITS_H has been removed from public use.
-
-gen-scmconfig now just uses HAVE_LIMITS_H to decide whether or not to
-add a limits.h include in scmconfig.h.
-
-** time.h, sys/time.h, etc. #ifdefery has been removed from public headers.
-
-gen-scmconfig now just uses the same logic to decide what time related
-#includes to add to scmconfig.h.
-
-** HAVE_STRUCT_TIMESPEC has been removed from public use.
-
-scmconfig.h now just defines scm_t_timespec.
-
-** HAVE_PTRDIFF has been removed from public use and Guile doesn't
- define ptrdiff_t.
-
-Guile now publically defines scm_t_ptrdiff and
-SCM_SIZEOF_SCM_T_PTRDIFF in scmconfig.h, and all occurrences of
-ptrdiff_t have been replaced with scm_t_ptrdiff.
-
-Guile defines its own type this rather than just relying on ptrdiff_t
-and SCM_SIZEOF_PTRDIFF_T because Guile actually typedefs long to
-scm_t_ptrdiff when ptrdiff_t isn't available. A public "typedef long
-ptrdiff_t" could conflict with other headers.
-
-** HAVE_UINTPTR_T and HAVE_UINTPTR_T have been removed from public use.
-
-They are replaced by public definitions of SCM_SIZEOF_UINTPTR_T and
-SCM_SIZEOF_INTPTR_T. These are defined to 0 if the corresponding type
-is not available.
-
-** The public #define STDC_HEADERS has been renamed to SCM_HAVE_STDC_HEADERS.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define HAVE_SYS_SELECT has been renamed to
- SCM_HAVE_SYS_SELECT_H.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define HAVE_FLOATINGPOINT_H has been renamed to
- SCM_HAVE_FLOATINGPOINT_H.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define HAVE_IEEEFP_H has been renamed to SCM_HAVE_IEEEFP_H.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define HAVE_NAN_H has been renamed to SCM_HAVE_NAN_H.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define HAVE_WINSOCK2_H has been renamed to SCM_HAVE_WINSOCK2_H.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define HAVE_ARRAYS has been renamed to SCM_HAVE_ARRAYS.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define STACK_GROWS_UP has been renamed to SCM_STACK_GROWS_UP.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define USE_PTHREAD_THREADS has been renamed to
- SCM_USE_PTHREAD_THREADS.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define USE_NULL_THREADS has been renamed to
- SCM_USE_NULL_THREADS.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define USE_COOP_THREADS has been renamed to
- SCM_USE_COOP_THREADS.
-
-The previous name was too generic for the global public namespace.
-
-** SCM_C_INLINE is publically defined if possible.
-
-If the platform has a way to define inline functions, SCM_C_INLINE
-will be defined to that text. Otherwise it will be undefined. This
-is a little bit different than autoconf's normal handling of the
-inline define via AC_C_INLINE.
-
-** Guile now publically defines some basic type infrastructure.
-
-Guile always defines
-
- SCM_SIZEOF_CHAR
- SCM_SIZEOF_UNSIGNED_CHAR
- SCM_SIZEOF_SHORT
- SCM_SIZEOF_UNSIGNED_SHORT
- SCM_SIZEOF_LONG
- SCM_SIZEOF_UNSIGNED_LONG
- SCM_SIZEOF_INT
- SCM_SIZEOF_UNSIGNED_INT
- SCM_SIZEOF_LONG_LONG /* defined to 0 if type not available */
- SCM_SIZEOF_UNSIGNED_LONG_LONG /* defined to 0 if type not available */
-
- scm_t_int8
- scm_t_uint8
- scm_t_int16
- scm_t_uint16
- scm_t_int32
- scm_t_uint32
-
-Guile always defines these to 0 or 1
-
- SCM_HAVE_T_INT64
- SCM_HAVE_T_UINT64
-
-and when either of these are defined to 1, also defines
-
- scm_t_int64
- scm_t_uint64
-
-respectively.
-
-Guile always defines
-
- scm_t_timespec
-
-** The macro SCM_IFLAGP now only returns true for flags
-
-User code should never have used this macro anyway. And, you should not use
-it in the future either. Thus, the following explanation is just for the
-impropable case that your code actually made use of this macro, and that you
-are willing to depend on internals which will probably change in the near
-future.
-
-Formerly, SCM_IFLAGP also returned true for evaluator bytecodes created with
-SCM_MAKSPCSYM (short instructions) and evaluator bytecodes created with
-SCM_MAKISYM (short instructions). Now, SCM_IFLAG only returns true for
-Guile's special constants created with SCM_MAKIFLAG. To achieve the old
-behaviour, instead of
-
- SCM_IFLAGP(x)
-
-you would have to write
-
- (SCM_ISYMP(x) || SCM_IFLAGP(x))
+private or renamed with a more suitable public name.
** The macro SCM_TYP16S has been deprecated.
-This macro is not intended for public use. However, if you allocated types
-with tc16 type codes in a way that you would have needed this macro, you are
-expected to have a deep knowledge of Guile's type system. Thus, you should
-know how to replace this macro.
+This macro is not intended for public use.
** The macro SCM_SLOPPY_INEXACTP has been deprecated.
-Use SCM_INEXACTP instead.
+Use scm_is_true (scm_inexact_p (...)) instead.
** The macro SCM_SLOPPY_REALP has been deprecated.
-Use SCM_REALP instead.
+Use scm_is_real instead.
** The macro SCM_SLOPPY_COMPLEXP has been deprecated.
-Use SCM_COMPLEXP instead.
-
-** The preprocessor define USE_THREADS has been deprecated.
-
-Going forward, assume that the thread API is always present.
-
-** The preprocessor define GUILE_ISELECT has been deprecated.
-
-Going forward, assume that scm_internal_select is always present.
-
-** The preprocessor define READER_EXTENSIONS has been deprecated.
+Use scm_is_complex instead.
-Going forward, assume that the features represented by
-READER_EXTENSIONS are always present.
+** Some preprocessor defines have been deprecated.
-** The preprocessor define DEBUG_EXTENSIONS has been deprecated.
+These defines indicated whether a certain feature was present in Guile
+or not. Going forward, assume that the features are always present.
-Going forward, assume that the features represented by
-DEBUG_EXTENSIONS are always present.
+The macros are: USE_THREADS, GUILE_ISELECT, READER_EXTENSIONS,
+DEBUG_EXTENSIONS, DYNAMIC_LINKING.
-** The preprocessor define DYNAMIC_LINKING has been deprecated.
-
-Going forward, assume that the features represented by
-DYNAMIC_LINKING are always present.
+The following macros have been removed completely: MEMOIZE_LOCALS,
+SCM_RECKLESS, SCM_CAUTIOUS.
** The preprocessor define STACK_DIRECTION has been deprecated.
There should be no need to know about the stack direction for ordinary
-programs. (Do not use.)
+programs.
** New function: scm_effective_version
This is an incompatible change.
-** The value 'scm_mask_ints' is no longer writable.
-
-Previously, you could set scm_mask_ints directly. This is no longer
-possible. Use scm_c_call_with_blocked_asyncs and
-scm_c_call_with_unblocked_asyncs instead.
-
-** New functions scm_c_call_with_blocked_asyncs and
- scm_c_call_with_unblocked_asyncs
-
-Like scm_call_with_blocked_asyncs etc. but for C functions.
-
** New snarfer macro SCM_DEFINE_PUBLIC.
This is like SCM_DEFINE, but also calls scm_c_export for the defined
** The snarfer macro SCM_SNARF_INIT is now officially supported.
-** New macros SCM_VECTOR_REF and SCM_VECTOR_SET.
-
-Use these in preference to SCM_VELTS.
-
-** The SCM_VELTS macros now returns a read-only vector. For writing,
-use the new macros SCM_WRITABLE_VELTS or SCM_VECTOR_SET. The use of
-SCM_WRITABLE_VELTS is discouraged, though.
-
** Garbage collector rewrite.
The garbage collector is cleaned up a lot, and now uses lazy
variables GUILE_MAX_SEGMENT_SIZE, GUILE_INIT_SEGMENT_SIZE_2,
GUILE_INIT_SEGMENT_SIZE_1, and GUILE_MIN_YIELD_2 should be used.
+For understanding the memory usage of a GUILE program, the routine
+gc-live-object-stats returns an alist containing the number of live
+objects for every type.
+
+
** The function scm_definedp has been renamed to scm_defined_p
The name scm_definedp is deprecated.
-** The struct scm_cell has been renamed to scm_t_cell
+** The struct scm_cell type has been renamed to scm_t_cell
This is in accordance to Guile's naming scheme for types. Note that
the name scm_cell is now used for a function that allocates and
are: scm_must_malloc, scm_must_realloc, scm_must_free,
scm_must_strdup, scm_must_strndup, scm_done_malloc, scm_done_free.
-** New function: scm_str2string
-
-This function creates a scheme string from a 0-terminated C string. The input
-string is copied.
-
** Declarations of exported features are marked with SCM_API.
Every declaration of a feature that belongs to the exported Guile API
will expand into "__declspec (dllimport) extern", which is needed for
linking to the Guile DLL in Windows.
-There are also SCM_RL_IMPORT, QT_IMPORT, SCM_SRFI1314_IMPORT, and
+There are also SCM_RL_IMPORT, SCM_SRFI1314_IMPORT, and
SCM_SRFI4_IMPORT, for the corresponding libraries.
** SCM_NEWCELL and SCM_NEWCELL2 have been deprecated.
-Use the new functions scm_cell and scm_double_cell instead. The old macros
-had problems because with them allocation and initialization was separated and
-the GC could sometimes observe half initialized cells. Only careful coding by
-the user of SCM_NEWCELL and SCM_NEWCELL2 could make this safe and efficient.
+Use the new functions scm_cell and scm_double_cell instead. The old
+macros had problems because with them allocation and initialization
+was separated and the GC could sometimes observe half initialized
+cells. Only careful coding by the user of SCM_NEWCELL and
+SCM_NEWCELL2 could make this safe and efficient.
** CHECK_ENTRY, CHECK_APPLY and CHECK_EXIT have been deprecated.
** Deprecated: scm_makmacro
-Change your code to use either scm_makmmacro or, probably better, to use r5rs
-macros. Also, be aware that macro expansion will not be done during
-evaluation, but prior to evaluation.
-
-** Removed from scm_root_state: def_inp, def_outp, def_errp, together
-with corresponding macros scm_def_inp, scm_def_outp and scm_def_errp.
-These were undocumented and unused copies of the standard ports at the
-time that Guile was initialised. Normally the current ports should be
-used instead, obtained from scm_current_input_port () etc. If an
-application needs to retain earlier ports, it should save them in a
-gc-protected location.
-
-** Removed compile time option MEMOIZE_LOCALS
-
-Now, caching of local variable positions during memoization is mandatory.
-However, the option to disable the caching has most probably not been used
-anyway.
-
-** Removed compile time option SCM_RECKLESS
-
-Full number of arguments checking of closures is mandatory now. However, the
-option to disable the checking has most probably not been used anyway.
-
-** Removed compile time option SCM_CAUTIOUS
-
-Full number of arguments checking of closures is mandatory now. However, the
-option to disable the checking has most probably not been used anyway.
-
-** Deprecated configure flags USE_THREADS and GUILE_ISELECT
-
-Previously, when the C preprocessor macro USE_THREADS was defined,
-libguile included a thread API. This API is now always included, even
-when threads are not really supported. Thus, you don't need to test
-for USE_THREADS.
-
-Analogously, GUILE_ISELECT was defined when the function
-scm_internal_select was provided by Guile. This function is now
-always defined, and GUILE_ISELECT with it.
+Change your code to use either scm_makmmacro or to define macros in
+Scheme, using 'define-macro'.
** New function scm_c_port_for_each.
This function is like scm_port_for_each but takes a pointer to a C
function as the callback instead of a SCM value.
-** Deprecated definitions of error strings: scm_s_expression, scm_s_test,
-scm_s_body, scm_s_bindings, scm_s_variable, scm_s_clauses, scm_s_formals
-
-These error message strings were used to issue syntax error messages by
-guile's evaluator. It's unlikely that they have been used by user code.
-
-** Deprecated helper macros for evaluation and application: SCM_EVALIM2,
-SCM_EVALIM, SCM_XEVAL, SCM_XEVALCAR
-
-These macros were used in the implementation of the evaluator. It's unlikely
-that they have been used by user code.
-
-** Deprecated helper functions for evaluation and application:
-scm_m_expand_body, scm_macroexp
-
-These functions were used in the implementation of the evaluator. It's
-unlikely that they have been used by user code.
-
-** Deprecated functions and variables for evaluation and application:
-scm_ceval, scm_deval and scm_ceval_ptr
-
-These functions and variables were used in the implementation of the
-evaluator. It's unlikely that they have been used by user code. If you have
-used these functions, switch to scm_eval or scm_eval_x.
-
-** Deprecated functions for unmemoization: scm_unmemocar
-
-** Deprecated definitions for iloc and isym handling
-
-SCM_ILOC00, SCM_IDINC, SCM_IDSTMSK, SCM_IFRINC, SCM_ICDR, SCM_IFRAME,
-SCM_IDIST, SCM_ICDRP, SCM_ISYMNUM, SCM_ISYMCHARS, scm_isymnames.
-
-These definitions were used in the implementation of the evaluator. It's
-unlikely that they have been used by user code.
-
-** Removed definitions: scm_lisp_nil, scm_lisp_t, s_nil_ify,
-scm_m_nil_ify, s_t_ify, scm_m_t_ify, s_0_cond, scm_m_0_cond, s_0_ify,
-scm_m_0_ify, s_1_ify, scm_m_1_ify, scm_debug_newcell,
-scm_debug_newcell2, scm_tc16_allocated, SCM_SET_SYMBOL_HASH,
-SCM_IM_NIL_IFY, SCM_IM_T_IFY, SCM_IM_0_COND, SCM_IM_0_IFY,
-SCM_IM_1_IFY, SCM_GC_SET_ALLOCATED, scm_debug_newcell,
-scm_debug_newcell2, 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_ORD_SIG, SCM_NUM_SIGS,
-scm_top_level_lookup_closure_var, *top-level-lookup-closure*,
-scm_system_transformer, scm_eval_3, scm_eval2,
-root_module_lookup_closure, SCM_SLOPPY_STRINGP, SCM_RWSTRINGP,
-scm_read_only_string_p, scm_make_shared_substring, scm_tc7_substring,
-sym_huh, SCM_VARVCELL, SCM_UDVARIABLEP, SCM_DEFVARIABLEP, scm_mkbig,
-scm_big2inum, scm_adjbig, scm_normbig, scm_copybig, scm_2ulong2big,
-scm_dbl2big, scm_big2dbl, SCM_FIXNUM_BIT, SCM_SETCHARS,
-SCM_SLOPPY_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET, SCM_LENGTH_MAX,
-SCM_SETLENGTH, SCM_ROSTRINGP, SCM_ROLENGTH, SCM_ROCHARS, SCM_ROUCHARS,
-SCM_SUBSTRP, SCM_COERCE_SUBSTR, scm_sym2vcell, scm_intern,
-scm_intern0, scm_sysintern, scm_sysintern0,
+** The names scm_internal_select, scm_thread_sleep, and
+ scm_thread_usleep have been discouraged.
+
+Use scm_std_select, scm_std_sleep, scm_std_usleep instead.
+
+** The GC can no longer be blocked.
+
+The global flags scm_gc_heap_lock and scm_block_gc have been removed.
+The GC can now run (partially) concurrently with other code and thus
+blocking it is not well defined.
+
+** Many definitions have been removed that were previously deprecated.
+
+scm_lisp_nil, scm_lisp_t, s_nil_ify, scm_m_nil_ify, s_t_ify,
+scm_m_t_ify, s_0_cond, scm_m_0_cond, s_0_ify, scm_m_0_ify, s_1_ify,
+scm_m_1_ify, scm_debug_newcell, scm_debug_newcell2,
+scm_tc16_allocated, SCM_SET_SYMBOL_HASH, SCM_IM_NIL_IFY, SCM_IM_T_IFY,
+SCM_IM_0_COND, SCM_IM_0_IFY, SCM_IM_1_IFY, SCM_GC_SET_ALLOCATED,
+scm_debug_newcell, scm_debug_newcell2, 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_ORD_SIG,
+SCM_NUM_SIGS, scm_top_level_lookup_closure_var,
+*top-level-lookup-closure*, scm_system_transformer, scm_eval_3,
+scm_eval2, root_module_lookup_closure, SCM_SLOPPY_STRINGP,
+SCM_RWSTRINGP, scm_read_only_string_p, scm_make_shared_substring,
+scm_tc7_substring, sym_huh, SCM_VARVCELL, SCM_UDVARIABLEP,
+SCM_DEFVARIABLEP, scm_mkbig, scm_big2inum, scm_adjbig, scm_normbig,
+scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl, SCM_FIXNUM_BIT,
+SCM_SETCHARS, SCM_SLOPPY_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET,
+SCM_LENGTH_MAX, SCM_SETLENGTH, SCM_ROSTRINGP, SCM_ROLENGTH,
+SCM_ROCHARS, SCM_ROUCHARS, SCM_SUBSTRP, SCM_COERCE_SUBSTR,
+scm_sym2vcell, scm_intern, scm_intern0, scm_sysintern, scm_sysintern0,
scm_sysintern0_no_module_lookup, scm_init_symbols_deprecated,
scm_vector_set_length_x, scm_contregs, scm_debug_info,
scm_debug_frame, SCM_DSIDEVAL, SCM_CONST_LONG, SCM_VCELL,
SCM_GLOC_VAL_LOC, scm_make_gloc, scm_gloc_p, scm_tc16_variable,
SCM_CHARS, SCM_LENGTH, SCM_SET_STRING_CHARS, SCM_SET_STRING_LENGTH.
-** Deprecated definitions for debugging: scm_debug_mode, SCM_DEBUGGINGP
-
-These functions were used in the implementation of the evaluator. It's
-unlikely that they have been used by user code.
-
-** Removed macro SCM_MAKSPCSYM
-
-This macro was used for defining byte codes of the evaluator. It is almost
-impossible that user code has used this macro.
-
\f
Changes since Guile 1.4: