X-Git-Url: http://git.hcoop.net/bpt/guile.git/blobdiff_plain/228a24ef30e635e58af0e4fe5fc9b9db738abeff..3e690887f5314e8bdc0d2f1092c8044ec38b2842:/NEWS diff --git a/NEWS b/NEWS index 76aa249c3..a0f3a9e98 100644 --- a/NEWS +++ b/NEWS @@ -1,11 +1,122 @@ -Guile NEWS --- history of user-visible changes. -*- text -*- -Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. +Guile NEWS --- history of user-visible changes. +Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. See the end for copying conditions. Please send Guile bug reports to bug-guile@gnu.org. + +Each release reports the NEWS in the following sections: + +* Changes to the distribution +* Changes to the stand-alone interpreter +* Changes to Scheme functions and syntax +* Changes to the C interface + Changes since the stable branch: +* Changes to the distribution + +** Guile is now licensed with the GNU Lesser General Public License. + +** 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. + +** 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 +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. + +Providing an unchanging version number during a stable release for +things like the versioned share directory can be particularly +important for Guile "add-on" packages, since it provides a directory +that they can install to that won't be changed out from under them +with each micro release during a stable series. + +** Thread implementation has changed. + +When you configure "--with-threads=null", you will get the usual +threading API (call-with-new-thread, make-mutex, etc), but you can't +actually create new threads. Also, "--with-threads=no" is now +equivalent to "--with-threads=null". This means that the thread API +is always present, although you might not be able to create new +threads. + +When you configure "--with-threads=pthreads" or "--with-threads=yes", +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 default is "pthreads", unless your platform doesn't have pthreads, +in which case "null" threads are used. + +** New module (ice-9 serialize): + +(serialize FORM1 ...) and (parallelize FORM1 ...) are useful when +you don't trust the thread safety of most of your program, but +where you have some section(s) of code which you consider can run +in parallel to other sections. + +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 +serial section (including itself). + +Both serialize and parallelize can be nested. If so, the +inner-most construct is in effect. + +NOTE 1: A serial section can run in parallel with a parallel +section. + +NOTE 2: If a serial section S is "interrupted" by a parallel +section P in the following manner: S = S1 P S2, S2 is not +guaranteed to be resumed by the same thread that previously +executed S1. + +WARNING: Spawning new threads within a serial section have +undefined effects. It is OK, though, to spawn threads in unflagged +sections of code where neither serialize or parallelize is in +effect. + +A typical usage is when Guile is used as scripting language in some +application doing heavy computations. If each thread is +encapsulated with a serialize form, you can then put a parallelize +form around the code performing the heavy computations (typically a +C code primitive), enabling the computations to run in parallel +while the scripting code runs single-threadedly. + +** Guile now includes its own version of libltdl. + +We now use a modified version of libltdl that allows us to make +improvements to it without having to rely on libtool releases. + * Changes to the standalone interpreter ** New command line option `--no-debug'. @@ -20,6 +131,294 @@ debugging evaluator gives better error messages. * Changes to Scheme functions and syntax +** 'while' now provides 'break' and 'continue' + +break and continue were previously bound in a while loop, but not +documented, and continue didn't quite work properly. The undocumented +parameter to break which gave a return value for the while has been +dropped. + +** 'call-with-current-continuation' is now also available under the name + 'call/cc'. + +** Checking for duplicate bindings in module system + +The module system now can check for name conflicts among imported +bindings. + +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: + +(define-module (foo) + :use-module (bar) + :use-module (baz) + :duplicates check) + +The new default behavior of the module system when a name collision +has been detected is to + + 1. Give priority to bindings marked as a replacement. + 2. Issue a warning (different warning if overriding core binding). + 3. Give priority to the last encountered binding (this corresponds to + the old behavior). + +If you want the old behavior back without replacements or warnings you +can add the line: + + (default-duplicate-binding-handler 'last) + +to your .guile init file. + +The syntax for the :duplicates option is: + + :duplicates HANDLER-NAME | (HANDLER1-NAME HANDLER2-NAME ...) + +Specifying multiple handlers is useful since some handlers (such as +replace) can defer conflict resolution to others. Each handler is +tried until a binding is selected. + +Currently available duplicates handlers are: + + check report an error for bindings with a common name + warn issue a warning for bindings with a common name + replace replace bindings which have an imported replacement + warn-override-core issue a warning for imports which override core bindings + and accept the override + first select the first encountered binding (override) + last select the last encountered binding (override) + +These two are provided by the (oop goops) module: + + merge-generics merge generic functions with a common name + into an + merge-accessors merge accessors with a common name + +The default duplicates handler is: + + (replace warn-override-core warn last) + +A recommended handler (which is likely to correspond to future Guile +behavior) can be installed with: + + (default-duplicate-binding-handler '(replace warn-override-core check)) + +** New define-module option: :replace + +:replace works as :export, but, in addition, marks the binding as a +replacement. + +A typical example is `format' in (ice-9 format) which is a replacement +for the core binding `format'. + +** Adding prefixes to imported bindings in the module system + +There is now a new :use-module option :prefix. It can be used to add +a prefix to all imported bindings. + + (define-module (foo) + :use-module ((bar) :prefix bar:)) + +will import all bindings exported from bar, but rename them by adding +the prefix `bar:'. + +** Merging generic functions + +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 +in vector packages. + +Assume that we work with a graphical package which needs to use two +independent vector packages for 2D and 3D vectors respectively. If +both packages export `x' we will encounter a name collision. + +This can now be resolved automagically with the duplicates handler +`merge-generics' which gives the module system license to merge all +generic functions sharing a common name: + +(define-module (math 2D-vectors) + :use-module (oop goops) + :export (x y ...)) + +(define-module (math 3D-vectors) + :use-module (oop goops) + :export (x y z ...)) + +(define-module (my-module) + :use-module (math 2D-vectors) + :use-module (math 3D-vectors) + :duplicates merge-generics) + +x in (my-module) will now share methods with x in both imported +modules. + +There will, in fact, now be three distinct generic functions named +`x': x in (2D-vectors), x in (3D-vectors), and x in (my-module). The +last function will be an , extending the previous +two functions. + +Let's call the imported generic functions the "ancestor functions". x +in (my-module) is, in turn, a "descendant function" of the imported +functions, extending its ancestors. + +For any generic function G, the applicable methods are selected from +the union of the methods of the descendant functions, the methods of G +itself and the methods of the ancestor functions. + +This, ancestor functions share methods with their descendants and vice +versa. This implies that x in (math 2D-vectors) can will share the +methods of x in (my-module) and vice versa, while x in (math 2D-vectors) +doesn't share the methods of x in (math 3D-vectors), thus preserving +modularity. + +Sharing is dynamic, so that adding new methods to a descendant implies +adding it to the ancestor. + +If duplicates checking is desired in the above example, the following +form of the :duplicates option can be used instead: + + :duplicates (merge-generics check) + +** New function: effective-version + +Returns the "effective" version number. This is just the normal full +version string without the final micro-version number. See "Changes +to the distribution" above. + +** 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. + +** 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 +instead if blocking and indicate failure. + +** Waiting on a condition variable can have a timeout. + +The funtion 'wait-condition-variable' now takes a third, optional +argument that specifies the point in time where the waiting should be +aborted. + +** New function 'broadcast-condition-variable'. + +** New functions 'all-threads' and 'current-thread'. + +** Signals and system asyncs work better with threads. + +The function 'sigaction' now takes a fourth, optional, argument that +specifies the thread that the handler should run in. When the +argument is omitted, the handler will run in the thread that called +'sigaction'. + +Likewise, 'system-async-mark' takes a second, optional, argument that +specifies the thread that the async should run in. When it is +omitted, the async will run in the thread that called +'system-async-mark'. + +C code can use the new functions scm_sigaction_for_thread and +scm_system_async_mark_for_thread to pass the new thread argument. + +** The function 'system-async' is deprecated. + +You can now pass any zero-argument procedure to 'system-async-mark'. +The function 'system-async' will just return its argument unchanged +now. + +** New functions 'call-with-blocked-asyncs' and + 'call-with-unblocked-asyncs' + +The expression (call-with-blocked-asyncs PROC) will call PROC and will +block execution of system asyncs for the current thread by one level +while PROC runs. Likewise, call-with-unblocked-asyncs will call a +procedure and will unblock the execution of system asyncs by one +level for the current thread. + +Only system asyncs are affected by these functions. + +** The functions 'mask-signals' and 'unmask-signals' are deprecated. + +Use 'call-with-blocked-asyncs' or 'call-with-unblocked-asyncs' +instead. Those functions are easier to use correctly and can be +nested. + +** New function 'unsetenv'. + +** New macro 'define-syntax-public'. + +It works like 'define-syntax' and also exports the defined macro (but +only on top-level). + +** There is support for Infinity and NaNs. + +Following PLT Scheme, Guile can now work with infinite numbers, and +'not-a-numbers'. + +There is new syntax for numbers: "+inf.0" (infinity), "-inf.0" +(negative infinity), "+nan.0" (not-a-number), and "-nan.0" (same as +"+nan.0"). These numbers are inexact and have no exact counterpart. + +Dividing by an inexact zero returns +inf.0 or -inf.0, depending on the +sign of the dividend. The infinities are integers, and they answer #t +for both 'even?' and 'odd?'. The +nan.0 value is not an integer and is +not '=' to itself, but '+nan.0' is 'eqv?' to itself. + +For example + + (/ 1 0.0) + => +inf.0 + + (/ 0 0.0) + => +nan.0 + + (/ 0) + ERROR: Numerical overflow + +Two new predicates 'inf?' and 'nan?' can be used to test for the +special values. + +** Inexact zero can have a sign. + +Guile can now distinguish between plus and minus inexact zero, if your +platform supports this, too. The two zeros are equal according to +'=', but not according to 'eqv?'. For example + + (- 0.0) + => -0.0 + + (= 0.0 (- 0.0)) + => #t + + (eqv? 0.0 (- 0.0)) + => #f + ** We now have uninterned symbols. The new function 'make-symbol' will return a uninterned symbol. This @@ -46,12 +445,295 @@ compare their values. This is no longer done. Variables are now only You can now use an empty `begin' form. It will yield # when evaluated and simply be ignored in a definition context. -** Removed: substring-move-left!, substring-move-right! +** 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. + +** Soft ports now allow a `char-ready?' procedure + +The vector argument to `make-soft-port' can now have a length of +either 5 or 6. (Previously the length had to be 5.) The optional 6th +element is interpreted as an `input-waiting' thunk -- i.e. a thunk +that returns the number of characters that can be read immediately +without the soft port blocking. + +** New debugging feature: breakpoints. + +Guile now has breakpoints. For details see the `Debugging Features' +chapter in the reference manual. + +** Deprecated: undefine + +There is no replacement for undefine. + +** 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. -Use `substring-move!' instead. +** SRFI-19 fixes + +date-week-number now correctly respects the requested day of week +starting the week. * Changes to the C interface +** 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 + + SCM_HAVE_T_INT64 + SCM_HAVE_T_UINT64 + +and when either of these are defined to 1, optionally defines + + scm_t_int64 + scm_t_uint64 + +respectively. + +Guile always defines + + scm_t_timespec + +** The macro SCM_SLOPPY_INEXACTP has been deprecated. + +Use SCM_INEXACTP instead. + +** The macro SCM_SLOPPY_REALP has been deprecated. + +Use SCM_REALP 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. + +Going forward, assume that the features represented by +READER_EXTENSIONS are always present. + +** The preprocessor define DEBUG_EXTENSIONS has been deprecated. + +Going forward, assume that the features represented by +DEBUG_EXTENSIONS are always present. + +** The preprocessor define DYNAMIC_LINKING has been deprecated. + +Going forward, assume that the features represented by +DYNAMIC_LINKING are always present. + +** 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.) + +** New function: scm_effective_version + +Returns the "effective" version number. This is just the normal full +version string without the final micro-version number. See "Changes +to the distribution" above. + +** The function scm_call_with_new_thread has a new prototype. + +Instead of taking a list with the thunk and handler, these two +arguments are now passed directly: + + SCM scm_call_with_new_thread (SCM thunk, SCM handler); + +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 +function in the init section. + +** 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 +sweeping. This is reflected in the output of (gc-stats); since cells +are being freed when they are allocated, the cells-allocated field +stays roughly constant. + +For malloc related triggers, the behavior is changed. It uses the same +heuristic as the cell-triggered collections. It may be tuned with the +environment variables GUILE_MIN_YIELD_MALLOC. This is the percentage +for minimum yield of malloc related triggers. The default is 40. +GUILE_INIT_MALLOC_LIMIT sets the initial trigger for doing a GC. The +default is 200 kb. + +Debugging operations for the freelist have been deprecated, along with +the C variables that control garbage collection. The environment +variables GUILE_MAX_SEGMENT_SIZE, GUILE_INIT_SEGMENT_SIZE_2, +GUILE_INIT_SEGMENT_SIZE_1, and GUILE_MIN_YIELD_2 should be used. + +** 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 This is in accordance to Guile's naming scheme for types. Note that @@ -68,9 +750,9 @@ cause aborts in long running programs. The new functions are more symmetrical and do not need cooperation from smob free routines, among other improvements. -The new functions are scm_malloc, scm_realloc, scm_strdup, -scm_strndup, scm_gc_malloc, scm_gc_realloc, scm_gc_free, -scm_gc_register_collectable_memory, and +The new functions are scm_malloc, scm_realloc, scm_calloc, scm_strdup, +scm_strndup, scm_gc_malloc, scm_gc_calloc, scm_gc_realloc, +scm_gc_free, scm_gc_register_collectable_memory, and scm_gc_unregister_collectable_memory. Refer to the manual for more details and for upgrading instructions. @@ -105,6 +787,110 @@ 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. + +Use the variables scm_check_entry_p, scm_check_apply_p and scm_check_exit_p +instead. + +** SRCBRKP has been deprecated. + +Use scm_c_source_property_breakpoint_p instead. + +** 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. + +** 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 macros for iloc handling: SCM_ILOC00, SCM_IDINC, SCM_IDSTMSK + +These macros 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, +*top-level-lookup-closure*, scm_top_level_lookup_closure_var, +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_GLOBAL_VCELL, SCM_VCELL_INIT, SCM_GLOBAL_VCELL_INIT, +SCM_HUGE_LENGTH, SCM_VALIDATE_STRINGORSUBSTR, SCM_VALIDATE_ROSTRING, +SCM_VALIDATE_ROSTRING_COPY, SCM_VALIDATE_NULLORROSTRING_COPY, +SCM_VALIDATE_RWSTRING, DIGITS, scm_small_istr2int, scm_istr2int, +scm_istr2flo, scm_istring2number, scm_istr2int, scm_istr2flo, +scm_istring2number, scm_vtable_index_vcell, scm_si_vcell, SCM_ECONSP, +SCM_NECONSP, SCM_GLOC_VAR, SCM_GLOC_VAL, SCM_GLOC_SET_VAL, +SCM_GLOC_VAL_LOC, scm_make_gloc, scm_gloc_p, scm_tc16_variable + Changes since Guile 1.4: * Changes to the distribution @@ -957,24 +1743,18 @@ Instead, use scm_c_memq or scm_memq, scm_memv, scm_member. ** New functions: scm_call_0, scm_call_1, scm_call_2, scm_call_3 -Call a procedure with the indicated number of arguments. - -Example: - - scm_call_1 (proc, arg1); +Call a procedure with the indicated number of arguments. See "Fly +Evaluation" in the manual. ** New functions: scm_apply_0, scm_apply_1, scm_apply_2, scm_apply_3 -Call a procedure with the indicated number of arguments and a list -of arguments. - -Example: - - scm_apply_1 (proc, arg1, args); +Call a procedure with the indicated number of arguments and a list of +further arguments. See "Fly Evaluation" in the manual. ** New functions: scm_list_1, scm_list_2, scm_list_3, scm_list_4, scm_list_5 -Create a list of the given number of elements. +Create a list of the given number of elements. See "List +Constructors" in the manual. ** Renamed function: scm_listify has been replaced by scm_list_n. @@ -1715,10 +2495,6 @@ These macros will be removed in a future release of Guile. scm_dblproc, SCM_UNEGFIXABLE, SCM_FLOBUFLEN, SCM_INEXP, SCM_CPLXP, SCM_REAL, SCM_IMAG, SCM_REALPART, scm_makdbl, SCM_SINGP, SCM_NUM2DBL, SCM_NO_BIGDIG -Further, it is recommended not to rely on implementation details for guile's -current implementation of bignums. It is planned to replace this -implementation with gmp in the future. - ** Port internals: the rw_random variable in the scm_port structure must be set to non-zero in any random access port. In recent Guile releases it was only set for bidirectional random-access ports. @@ -6012,4 +6788,3 @@ Local variables: mode: outline paragraph-separate: "[ ]*$" end: -