*** empty log message ***
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index 9fd10c1..8e6af0e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -58,11 +58,14 @@ 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 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.
@@ -192,6 +195,36 @@ be used with '-e'.  For example, you can now write a script like
 
 * Changes to Scheme functions and syntax
 
+** 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
@@ -214,9 +247,10 @@ 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 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.
+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.
@@ -301,6 +335,25 @@ Now:
     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
@@ -473,27 +526,6 @@ thread.  See the "Futures" section in the reference manual.
 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
@@ -524,6 +556,11 @@ omitted, the async will run in the thread that called
 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'.
@@ -704,6 +741,22 @@ Use symbol->keyword and keyword->symbol instead.
 
 * Changes to the C interface
 
+** The functions scm_hash_fn_remove_x and scm_hashx_remove_x no longer
+   take a 'delete' function argument.
+
+This argument makes no sense since the delete function is used to
+remove a pair from an alist, and this must not be configurable.
+
+This is an incompatible change.
+
+** The GH interface is now subject to the deprecation mechanism
+
+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.
+
+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.
 
@@ -857,7 +910,7 @@ See the manual, node "Accessing Arrays From C".
 ** The old uniform vector and bitvector implementations have been
    unceremoniously removed.
 
-This implementation exposed the detailes of the tagging system of
+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.
 
@@ -965,12 +1018,31 @@ This function calls 'free' on a given pointer when a frame is left.
 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
@@ -1043,17 +1115,6 @@ arguments are now passed directly:
 
 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
@@ -1162,13 +1223,11 @@ function as the callback instead of a SCM value.
 
 Use scm_std_select, scm_std_sleep, scm_std_usleep instead.
 
-** SCM_DEFER_INTS and SCM_ALLOW_INTS have been deprecated.
-
-Use, for example, scm_frame_critical_section to mark critical
-sections.
+** The GC can no longer be blocked.
 
-SCM_REDEFER_INTS and SCM_REALLOW_INTS are deprecated as well, of
-course.
+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.