* init.c (scm_boot_guile_1): Added calls to debug-malloc init
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index 6718c9f..a1f7d10 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -80,6 +80,13 @@ try a few appropriate ones.  Thus, the most platform ignorant way is
 to specify a name like "libfoo", without any directories and
 extensions.
 
+** Guile COOP threads are now compatible with LinuxThreads
+
+Previously, COOP threading wasn't possible in applications linked with
+Linux POSIX threads due to their use of the stack pointer to find the
+thread context.  This has now been fixed with a workaround which uses
+the pthreads to allocate the stack.
+
 ** New primitives: `pkgdata-dir', `site-dir', `library-dir' 
 
 ** Positions of erring expression in scripts
@@ -111,8 +118,15 @@ at the top of the script.
 ** Attempting to get the value of an unbound variable now produces
 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.
+
 * Changes to Scheme functions and syntax
 
+** close-input-port and close-output-port are now R5RS
+
+These procedures have been turned into primitives and have R5RS behaviour.
+
 ** New procedure: simple-format PORT MESSAGE ARG1 ...
 
 (ice-9 boot) makes `format' an alias for `simple-format' until possibly
@@ -154,6 +168,27 @@ 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
+
+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
+composing/decomposing an SCM value, either because you want to access
+individual bits, or because you want to treat it as an integer value.
+
+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))
+
+** Deprecated macros: SCM_INPORTP, SCM_OUTPORTP
+
+These macros will be removed in next 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
 releases it was only set for bidirectional random-access ports.
@@ -231,6 +266,59 @@ In Scheme:
            ...)
 
 
+** Deprecated: coop_mutex_init, coop_condition_variable_init
+
+Don't use the functions coop_mutex_init and
+coop_condition_variable_init.  They will change.
+
+Use scm_mutex_init and scm_cond_init instead.
+
+** New function: int scm_cond_timedwait (scm_cond_t *COND, scm_mutex_t *MUTEX, const struct timespec *ABSTIME)
+     `scm_cond_timedwait' atomically unlocks MUTEX and waits on
+     COND, as `scm_cond_wait' does, but it also bounds the duration
+     of the wait. If COND has not been signaled before time ABSTIME,
+     the mutex MUTEX is re-acquired and `scm_cond_timedwait'
+     returns the error code `ETIMEDOUT'.
+
+     The ABSTIME parameter specifies an absolute time, with the same
+     origin as `time' and `gettimeofday': an ABSTIME of 0 corresponds
+     to 00:00:00 GMT, January 1, 1970.
+
+** New function: scm_cond_broadcast (scm_cond_t *COND)
+     `scm_cond_broadcast' restarts all the threads that are waiting
+     on the condition variable COND. Nothing happens if no threads are
+     waiting on COND.
+
+** New function: scm_key_create (scm_key_t *KEY, void (*destr_function) (void *))
+     `scm_key_create' allocates a new TSD key. The key is stored in
+     the location pointed to by KEY. There is no limit on the number
+     of keys allocated at a given time. The value initially associated
+     with the returned key is `NULL' in all currently executing threads.
+
+     The DESTR_FUNCTION argument, if not `NULL', specifies a destructor
+     function associated with the key. When a thread terminates,
+     DESTR_FUNCTION is called on the value associated with the key in
+     that thread. The DESTR_FUNCTION is not called if a key is deleted
+     with `scm_key_delete' or a value is changed with
+     `scm_setspecific'.  The order in which destructor functions are
+     called at thread termination time is unspecified.
+
+     Destructors are not yet implemented.
+
+** New function: scm_setspecific (scm_key_t KEY, const void *POINTER)
+     `scm_setspecific' changes the value associated with KEY in the
+     calling thread, storing the given POINTER instead.
+
+** New function: scm_getspecific (scm_key_t KEY)
+     `scm_getspecific' returns the value currently associated with
+     KEY in the calling thread.
+
+** New function: scm_key_delete (scm_key_t KEY)
+     `scm_key_delete' deallocates a TSD key. It does not check
+     whether non-`NULL' values are associated with that key in the
+     currently executing threads, nor call the destructor function
+     associated with the key.
+
 * Changes to system call interfaces:
 
 ** The "select" procedure now tests port buffers for the ability to