*** empty log message ***
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index a1f7d10..73acbb7 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -42,7 +42,7 @@ features:
 
 These are likely to become separate modules some day.
 
-** Added new configure option --enable-debug-freelist
+** New configure option --enable-debug-freelist
 
 This enables a debugging version of SCM_NEWCELL(), and also registers
 an extra primitive, the setter `gc-set-debug-check-freelist!'.
@@ -58,8 +58,39 @@ a garbage collection before each allocation of a cell.  This can
 slow down the interpreter dramatically, so the setter should be used to
 turn on this extra processing only when necessary.
 
+** New configure option --enable-debug-malloc
+
+Include code for debugging of calls to scm_must_malloc/realloc/free.
+
+Checks that
+
+1. objects freed by scm_must_free has been mallocated by scm_must_malloc
+2. objects reallocated by scm_must_realloc has been allocated by
+   scm_must_malloc
+3. reallocated objects are reallocated with the same what string
+
+But, most importantly, it records the number of allocated objects of
+each kind.  This is useful when searching for memory leaks.
+
+A Guile compiled with this option provides the primitive
+`malloc-stats' which returns an alist with pairs of kind and the
+number of objects of that kind.
+
+** All includes are now referenced relative to the root directory
+
+Since some users have had problems with mixups between Guile and
+system headers, we have decided to always refer to Guile headers via
+their parent directories.  This essentially creates a "private name
+space" for Guile headers.  This means that the compiler only is given
+-I options for the root build and root source directory.
+
 * Changes to the stand-alone interpreter
 
+** New help facility
+
+Typing (help) prints helpful information.
+Typing (help NAME) gives documentation about NAME.
+
 ** Dynamic linking now uses libltdl from the libtool package.
 
 The old system dependent code for doing dynamic linking has been
@@ -121,6 +152,24 @@ an exception with a key of 'unbound-variable instead of 'misc-error.
 ** The initial default output port is now unbuffered if it's using a
 tty device.  Previously in this situation it was line-buffered.
 
+** gc-thunk is deprecated
+
+gc-thunk will be removed in next release of Guile.  It has been
+replaced by after-gc-hook.
+
+** New hook: after-gc-hook
+
+after-gc-hook takes over the role of gc-thunk.  This hook is run at
+the first SCM_TICK after a GC.  (Thus, the code is run at the same
+point during evaluation as signal handlers.)
+
+Note that this hook should be used only for diagnostic and debugging
+purposes.  It is not certain that it will continue to be well-defined
+when this hook is run in the future.
+
+C programmers: Note the new C level hooks scm_before_gc_c_hook,
+scm_before_sweep_c_hook, scm_after_gc_c_hook.
+
 * Changes to Scheme functions and syntax
 
 ** close-input-port and close-output-port are now R5RS
@@ -149,6 +198,12 @@ only characters, for compatibility with R5RS.
 ** New procedure: port-closed? PORT
 Returns #t if PORT is closed or #f if it is open.
 
+* Changes to the gh_ interface
+
+** Deprecated: gh_int2scmb
+
+Use gh_bool2scm instead.
+
 * Changes to the scm_ interface
 
 ** Guile primitives now carry docstrings!
@@ -168,14 +223,15 @@ the readability of argument checking.
 
 ** All (nearly?) K&R prototypes for functions replaced with ANSI C equivalents.
 
-** New macros: SCM_PACK, SCM_UNPACK, SCM_UNPACK_CAR
+** New macros: SCM_PACK, SCM_UNPACK
 
 Compose/decompose an SCM value.
 
-The SCM type is now defined as void * on most architectures.  This
-makes it easier to find several types of bugs, for example when SCM
-values are treated as integers without conversion.  Values of the SCM
-type should be treated as "atomic" values.  These macros are used when
+The SCM type is now treated as an abstract data type and may be defined as a
+long, a void* or as a struct, depending on the architecture and compile time
+options. This makes it easier to find several types of bugs, for example when
+SCM values are treated as integers without conversion.  Values of the SCM type
+should be treated as "atomic" values.  These macros are used when
 composing/decomposing an SCM value, either because you want to access
 individual bits, or because you want to treat it as an integer value.
 
@@ -183,11 +239,16 @@ E.g., in order to set bit 7 in an SCM value x, use the expression
 
   SCM_PACK (SCM_UNPACK (x) | 0x80)
 
-SCM_UNPACK_CAR (X) is defined as SCM_UNPACK (SCM_CAR (X))
+** The name property of hooks is deprecated.
+Thus, the use of SCM_HOOK_NAME and scm_make_hook_with_name is deprecated.
+
+You can emulate this feature by using object properties.
 
-** Deprecated macros: SCM_INPORTP, SCM_OUTPORTP
+** Deprecated macros: SCM_INPORTP, SCM_OUTPORTP, SCM_CRDY, SCM_ICHRP, 
+SCM_ICHR, SCM_MAKICHR, SCM_SETJMPBUF, SCM_NSTRINGP, SCM_NRWSTRINGP,
+SCM_NVECTORP
 
-These macros will be removed in next release of Guile.
+These macros will be removed in a future release of Guile.
 
 ** 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
@@ -210,6 +271,10 @@ although to actually avoid resetting the buffers and discard unread
 chars requires further hacking that depends on the characteristics
 of the ptob.
 
+** Deprecated functions: scm_fseek, scm_tag
+
+These functions are no longer used and will be removed in a future version.
+
 ** The scm_sysmissing procedure is no longer used in libguile.
 Unless it turns out to be unexpectedly useful to somebody, it will be
 removed in a future version.
@@ -319,6 +384,56 @@ Use scm_mutex_init and scm_cond_init instead.
      currently executing threads, nor call the destructor function
      associated with the key.
 
+** New function: scm_c_hook_init (scm_c_hook_t *HOOK, void *HOOK_DATA, scm_c_hook_type_t TYPE)
+
+Initialize a C level hook HOOK with associated HOOK_DATA and type
+TYPE.  (See scm_c_hook_run ().)
+
+** New function: scm_c_hook_add (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA, int APPENDP)
+
+Add hook function FUNC with associated FUNC_DATA to HOOK.  If APPENDP
+is true, add it last, otherwise first.  The same FUNC can be added
+multiple times if FUNC_DATA differ and vice versa.
+
+** New function: scm_c_hook_remove (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA)
+
+Remove hook function FUNC with associated FUNC_DATA from HOOK.  A
+function is only removed if both FUNC and FUNC_DATA matches.
+
+** New function: void *scm_c_hook_run (scm_c_hook_t *HOOK, void *DATA)
+
+Run hook HOOK passing DATA to the hook functions.
+
+If TYPE is SCM_C_HOOK_NORMAL, all hook functions are run.  The value
+returned is undefined.
+
+If TYPE is SCM_C_HOOK_OR, hook functions are run until a function
+returns a non-NULL value.  This value is returned as the result of
+scm_c_hook_run.  If all functions return NULL, NULL is returned.
+
+If TYPE is SCM_C_HOOK_AND, hook functions are run until a function
+returns a NULL value, and NULL is returned.  If all functions returns
+a non-NULL value, the last value is returned.
+
+** New C level GC hooks
+
+Five new C level hooks has been added to the garbage collector.
+
+  scm_before_gc_c_hook
+  scm_after_gc_c_hook
+
+are run before locking and after unlocking the heap.  The system is
+thus in a mode where evaluation can take place.  (Except that
+scm_before_gc_c_hook must not allocate new cells.)
+
+  scm_before_mark_c_hook
+  scm_before_sweep_c_hook
+  scm_after_sweep_c_hook
+
+are run when the heap is locked.  These are intended for extension of
+the GC in a modular fashion.  Examples are the weaks and guardians
+modules.
+
 * Changes to system call interfaces:
 
 ** The "select" procedure now tests port buffers for the ability to