X-Git-Url: https://git.hcoop.net/bpt/guile.git/blobdiff_plain/a0128ebefa85f2d58aaa1373a91ba1c5de926cbb..96372e45b84bc062290806bee3390880bbbac7ff:/NEWS diff --git a/NEWS b/NEWS index a1f7d10ab..73acbb772 100644 --- 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