Move @contents to usual place after title page, and
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index e1dc4e0..e9adf4f 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -16,6 +16,13 @@ Changes since the stable branch:
 
 * Changes to the distribution
 
 
 * 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.
+At the moment it is being used to handle Guile's bignums.
+
 ** Guile now has separate private and public configuration headers.
 
 Guile now has config.h and libguile/scmconfig.h.  The former is not
 ** Guile now has separate private and public configuration headers.
 
 Guile now has config.h and libguile/scmconfig.h.  The former is not
@@ -26,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.
 
 
 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.
 ** The INSTALL file is now the generic automake installed one.
 
 Guile specific instructions can be found in the README.
@@ -46,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.
 
 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
 
 When you configure "--with-threads=null", you will get the usual
 threading API (call-with-new-thread, make-mutex, etc), but you can't
@@ -55,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.
 
 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.
 
 
-The default is now "coop-pthread", unless your platform doesn't have
-pthreads, in which case "null" threads are used.
+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.
+
+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.
 
 
 ** Guile now includes its own version of libltdl.
 
@@ -83,6 +131,13 @@ debugging evaluator gives better error messages.
 
 * Changes to Scheme functions and syntax
 
 
 * Changes to Scheme functions and syntax
 
+** 'while' now provides 'break' and 'continue'
+
+break and continue were previously bound in a while loop, but not
+documented, and continue didn't quite work properly.  The undocumented
+parameter to break which gave a return value for the while has been
+dropped.
+
 ** 'call-with-current-continuation' is now also available under the name
    'call/cc'.
 
 ** 'call-with-current-continuation' is now also available under the name
    'call/cc'.
 
@@ -230,50 +285,15 @@ 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.
 
 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.
-
-** 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'.)
-
-** New syntax: parallel FORM ...
-
-Compute the results of FORM ... in parallel (in a separate thread for
-each form) and return them as multiple values.
-
-** New syntax: letpar ((VAR EXP) ...) BODYFORM ...
-
-Like 'let' but evaluates the binding expressions EXP ... in parallel.
-
-** New functions: par-map, par-for-each PROC ARGLIST ...
+** Futures: future, make-future, future-ref
 
 
-Like 'map' and 'for-each' but evaluate the procedure PROC in a
-separate thread for each (set of) argument(s).  All applications are
-guaranteed to be completed before the procedure returns.
+Futures are like promises, but begun immediately in a new thread.  See
+the "Futures" section in the reference manual.
 
 
-** New functions: n-par-map, n-par-for-each N PROC ARGLIST ...
+** New threading functions: parallel, letpar, par-map, and friends
 
 
-Like 'par-map' and 'par-for-each' but evaluate the procedure PROC in N
-threads.  This is useful when PROC uses large amounts of resources
-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.
+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
 
@@ -425,10 +445,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.
 
 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,
 ** Deprecated: procedure->macro
 
 Change your code to use either procedure->memoizing-macro or, probably better,
@@ -452,6 +468,23 @@ chapter in the reference manual.
 
 There is no replacement for undefine.
 
 
 There is no replacement for undefine.
 
+** source-properties and set-source-properties! fix
+
+Properties set with set-source-properties! can now be read back
+correctly with source-properties.
+
+** SRFI-1 fixes
+
+delete and delete! now call the "=" procedure with arguments in the
+order described by the SRFI-1 specification
+
+list-copy now accepts improper lists, per the specification.
+
+** SRFI-19 fixes
+
+date-week-number now correctly respects the requested day of week
+starting the week.
+
 * Changes to the C interface
 
 ** Many public #defines with generic names have been made private.
 * Changes to the C interface
 
 ** Many public #defines with generic names have been made private.
@@ -792,67 +825,55 @@ 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.
 
 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,
 scm_debug_newcell2, scm_tc16_allocated, SCM_SET_SYMBOL_HASH,
 SCM_IM_NIL_IFY, SCM_IM_T_IFY, SCM_IM_0_COND, SCM_IM_0_IFY,
 SCM_IM_1_IFY, SCM_GC_SET_ALLOCATED, scm_debug_newcell,
 ** 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,
 scm_debug_newcell2, scm_tc16_allocated, SCM_SET_SYMBOL_HASH,
 SCM_IM_NIL_IFY, SCM_IM_T_IFY, SCM_IM_0_COND, SCM_IM_0_IFY,
 SCM_IM_1_IFY, SCM_GC_SET_ALLOCATED, scm_debug_newcell,
-scm_debug_newcell2, long_long, ulong_long, scm_sizet, SCM_WNA,
-SCM_OUTOFRANGE, SCM_NALLOC, 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, moddata, registered_mods, scm_register_module_xxx,
-scm_registered_modules, scm_clear_registered_modules, scm_wta,
+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,
 *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_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_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,
 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,
@@ -1710,24 +1731,18 @@ Instead, use scm_c_memq or scm_memq, scm_memv, scm_member.
 
 ** New functions: scm_call_0, scm_call_1, scm_call_2, scm_call_3
 
 
 ** New functions: scm_call_0, scm_call_1, scm_call_2, scm_call_3
 
-Call a procedure with the indicated number of arguments.
-
-Example:
-
-  scm_call_1 (proc, arg1);
+Call a procedure with the indicated number of arguments.  See "Fly
+Evaluation" in the manual.
 
 ** New functions: scm_apply_0, scm_apply_1, scm_apply_2, scm_apply_3
 
 
 ** New functions: scm_apply_0, scm_apply_1, scm_apply_2, scm_apply_3
 
-Call a procedure with the indicated number of arguments and a list
-of arguments.
-
-Example:
-
-  scm_apply_1 (proc, arg1, args);
+Call a procedure with the indicated number of arguments and a list of
+further arguments.  See "Fly Evaluation" in the manual.
 
 ** New functions: scm_list_1, scm_list_2, scm_list_3, scm_list_4, scm_list_5
 
 
 ** New functions: scm_list_1, scm_list_2, scm_list_3, scm_list_4, scm_list_5
 
-Create a list of the given number of elements.
+Create a list of the given number of elements.  See "List
+Constructors" in the manual.
 
 ** Renamed function: scm_listify has been replaced by scm_list_n.
 
 
 ** Renamed function: scm_listify has been replaced by scm_list_n.
 
@@ -2468,10 +2483,6 @@ These macros will be removed in a future release of Guile.
 scm_dblproc, SCM_UNEGFIXABLE, SCM_FLOBUFLEN, SCM_INEXP, SCM_CPLXP, SCM_REAL,
 SCM_IMAG, SCM_REALPART, scm_makdbl, SCM_SINGP, SCM_NUM2DBL, SCM_NO_BIGDIG
 
 scm_dblproc, SCM_UNEGFIXABLE, SCM_FLOBUFLEN, SCM_INEXP, SCM_CPLXP, SCM_REAL,
 SCM_IMAG, SCM_REALPART, scm_makdbl, SCM_SINGP, SCM_NUM2DBL, SCM_NO_BIGDIG
 
-Further, it is recommended not to rely on implementation details for guile's
-current implementation of bignums.  It is planned to replace this
-implementation with gmp in the future.
-
 ** 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.
 ** 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.