*** empty log message ***
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index 68d5c03..4f3f11e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -16,6 +16,8 @@ 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.
@@ -31,6 +33,12 @@ 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.
@@ -51,7 +59,7 @@ 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.
 
-** There are two new thread implementation options: "null" and "coop-pthreads".
+** 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
@@ -60,14 +68,49 @@ equivalent to "--with-threads=null".  This means that the thread API
 is always present, although you might not be able to create new
 threads.
 
-The "coop-pthread" (or shorter: "copt") thread implementation will use
-portable POSIX threads but will restrict them so that only one thread
-can execute 'in Guile' at any one time.  This option will give you the
-same basic behavior as the old "coop" option, but hopefully in a more
-portable way.
+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.
 
-The default is now "coop-pthread", unless your platform doesn't have
-pthreads, in which case "null" threads are used.
+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.
 
@@ -235,27 +278,10 @@ 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
-
-Futures is a way of providing an alternative evaluation policy, very
-similar in principle to "promises".  Like promises, futures allow the
-main process to continue instantly, but while promises postpone
-evaluation ("lazy" evaluation) until the value is requested, futures
-immediately starts evaluation in a parallel thread.
-
-Futures are good when you want to express that "I'll need the value of
-this computation sometime soon" and want to allow processing to go on
-in the background until that time arrives.
+** Futures: future, make-future, future-ref
 
-** New syntax: future FORM
-
-Begin evaluation of FORM in a parallel thread and return the future
-immediately.  (Akin to 'delay'.)
-
-** New procedure: future-ref FUTURE
-
-Return the computed value of the future.  Wait if the computation is
-not finished.  (Akin to 'force'.)
+Futures are like promises, but begun immediately in a new thread.  See
+the "Futures" section in the reference manual.
 
 ** New syntax: parallel FORM ...
 
@@ -280,6 +306,15 @@ and/or the argument list(s) is/are long so that one thread per (set
 of) argument(s) would consume too much system resources.  On a
 dual-CPU system, N = 4 would often be a good choice.
 
+** New function: n-for-each-par-map N S-PROC P-PROC ARGLIST ...
+
+Using N parallel processes, apply S-PROC in serial order to each
+result of applying P-PROC to each set of arguments in the argument
+lists ARGLIST ...
+
+Like a composition of 'for-each' and 'n-par-map', but allows S-PROC to
+start processing while the results of P-PROC are being produced.
+
 ** Fair mutexes and condition variables
 
 Fair mutexes and condition variables have been added.  The fairness
@@ -430,10 +465,6 @@ compare their values.  This is no longer done.  Variables are now only
 You can now use an empty `begin' form.  It will yield #<unspecified>
 when evaluated and simply be ignored in a definition context.
 
-** Removed: substring-move-left!, substring-move-right!
-
-Use `substring-move!' instead.
-
 ** Deprecated: procedure->macro
 
 Change your code to use either procedure->memoizing-macro or, probably better,
@@ -457,6 +488,11 @@ chapter in the reference manual.
 
 There is no replacement for undefine.
 
+** SRFI-1 delete equality argument order fixed.
+
+In the srfi-1 module delete and delete!, the order of the arguments to
+the "=" procedure now matches the SRFI-1 specification.
+
 * Changes to the C interface
 
 ** Many public #defines with generic names have been made private.
@@ -797,6 +833,28 @@ 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,
@@ -807,54 +865,23 @@ 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, SCM_SETAND_CAR,
-SCM_SETOR_CAR, SCM_SETAND_CDR, SCM_SETOR_CDR, SCM_FREEP, SCM_NFREEP,
-SCM_GC8MARKP, SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR,
-scm_remember, scm_protect_object, scm_unprotect_object,
-root_module_lookup_closure, scm_sym_app, scm_sym_modules,
-module_prefix, make_modules_in_var, beautify_user_module_x_var,
-try_module_autoload_var, scm_module_full_name, scm_the_root_module,
-scm_make_module, scm_ensure_user_module, scm_load_scheme_module,
-scm_port, scm_ptob_descriptor, scm_port_rw_active,
-scm_close_all_ports_except, scm_rstate, scm_rng, scm_i_rstate,
-SCM_SLOPPY_STRINGP, SCM_RWSTRINGP, SCM_STRING_UCHARS,
-SCM_STRING_CHARS, scm_read_only_string_p, scm_makstr, scm_makfromstr,
-scm_make_shared_substring, scm_tc7_substring, SCM_SLOPPY_CONSP,
-SCM_SLOPPY_NCONSP, scm_tc7_ssymbol, scm_tc7_msymbol, scm_tcs_symbols,
-sym_huh, scm_variable_set_name_hint, scm_builtin_variable,
-SCM_VARVCELL, SCM_UDVARIABLEP, SCM_DEFVARIABLEP,
-scm_internal_with_fluids, scm_make_gsubr, scm_make_gsubr_with_generic,
-scm_create_hook, list*, SCM_LIST0, SCM_LIST1, SCM_LIST2, SCM_LIST3,
-SCM_LIST4, SCM_LIST5, SCM_LIST6, SCM_LIST7, SCM_LIST8, SCM_LIST9,
-scm_listify, scm_sloppy_memq, scm_sloppy_memv, scm_sloppy_member,
-scm_end_of_file_key, scm_read_and_eval_x, scm_mkbig, scm_big2inum,
-scm_adjbig, scm_normbig, scm_copybig, scm_2ulong2big, scm_dbl2big,
-scm_big2dbl, SCM_FIXNUM_BIT, scm_subr_entry, SCM_SUBR_DOC,
-scm_make_subr_opt, scm_make_subr, scm_make_subr_with_generic,
-setjmp_type, setjmp_type, scm_call_catching_errors,
-scm_make_smob_type_mfpe, scm_set_smob_mfpe, scm_strprint_obj,
-scm_read_0str, scm_eval_0str, SCM_CHARS, SCM_UCHARS, SCM_SETCHARS,
+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_LENGTH, SCM_SETLENGTH, SCM_ROSTRINGP, SCM_ROLENGTH, SCM_ROCHARS,
-SCM_ROUCHARS, SCM_SUBSTRP, SCM_COERCE_SUBSTR, scm_strhash,
-scm_sym2vcell, scm_sym2ovcell_soft, scm_sym2ovcell,
-scm_intern_obarray_soft, scm_intern_obarray, scm_intern, scm_intern0,
-scm_sysintern, scm_sysintern0, scm_sysintern0_no_module_lookup,
-scm_symbol_value0, scm_string_to_obarray_symbol, scm_intern_symbol,
-scm_unintern_symbol, scm_symbol_binding, scm_symbol_interned_p,
-scm_symbol_bound_p, scm_symbol_set_x, scm_gentemp,
-scm_init_symbols_deprecated, s_vector_set_length_x,
+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_OPDIRP, scm_fport, scm_option,
-SCM_CONST_LONG, SCM_VCELL, SCM_GLOBAL_VCELL, SCM_VCELL_INIT,
-SCM_GLOBAL_VCELL_INIT, scm_srcprops, scm_srcprops_chunk,
-scm_info_frame, scm_stack, scm_array, scm_array_dim,
-SCM_ARRAY_CONTIGUOUS, SCM_HUGE_LENGTH, SCM_FUNC_NAME, SCM_WTA,
-RETURN_SCM_WTA, SCM_VALIDATE_NUMBER_COPY,
-SCM_VALIDATE_NUMBER_DEF_COPY, SCM_VALIDATE_STRINGORSUBSTR,
-SCM_VALIDATE_ROSTRING, SCM_VALIDATE_ROSTRING_COPY,
-SCM_VALIDATE_NULLORROSTRING_COPY, SCM_VALIDATE_RWSTRING,
-SCM_VALIDATE_OPDIR, DIGITS, scm_small_istr2int, scm_istr2int,
+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,