** Guile is now licensed with the GNU Lesser General Public License.
+** The manual is now licensed with the GNU Free Documentation License.
+
** Guile now requires GNU MP (http://swox.com/gmp).
Guile now uses the GNU MP library for arbitrary precision arithmetic.
C code primitive), enabling the computations to run in parallel
while the scripting code runs single-threadedly.
+** New module (srfi srfi-26)
+
+This is an implementation of SRFI-26.
+
+** New module (srfi srfi-31)
+
+This is an implementation of SRFI-31 which provides a special form
+`rec' for recursive evaluation.
+
** Guile now includes its own version of libltdl.
We now use a modified version of libltdl that allows us to make
The function pretty-print from the (ice-9 pretty-print) module can now
also be invoked with keyword arguments that control things like
-maximum output width. See its online documentation.
+maximum output width. See the manual for details.
** Variables have no longer a special behavior for `equal?'.
list-copy now accepts improper lists, per the specification.
+** SRFI-4 fixes
+
+Larger values in 64-bit vectors should print correctly now.
+
** SRFI-19 fixes
date-week-number now correctly respects the requested day of week
* Changes to the C interface
+** SCM_CELL_WORD_LOC has been deprecated.
+
+Use the new macro SCM_CELL_OBJECT_LOC instead, which return a pointer
+to a SCM, as opposed to a pointer to a scm_t_bits.
+
+This was done to allow the correct use of pointers into the Scheme
+heap. Previously, the heap words were of type scm_t_bits and local
+variables and function arguments were of type SCM, making it
+non-standards-conformant to have a pointer that can point to both.
+
+** New macros SCM_SMOB_DATA_2, SM_SMOB_DATA_3, etc.
+
+These macros should be used instead of SCM_CELL_WORD_2/3 to access the
+second and third words of double smobs. Likewise for
+SCM_SET_SMOB_DATA_2 and SCM_SET_SMOB_DATA_3.
+
+Also, there is SCM_SMOB_FLAGS and SCM_SET_SMOB_FLAGS that should be
+used to get and set the 16 exra bits in the zeroth word of a smob.
+
+And finally, there is SCM_SMOB_OBJECT and SCM_SMOB_SET_OBJECT for
+accesing the first immediate word of a smob as a SCM value, and there
+is SCM_SMOB_OBJECT_LOC for getting a pointer to the first immediate
+smob words. Like wise for SCM_SMOB_OBJECT_2, etc.
+
** New way to deal with non-local exits and reentries.
There is a new set of functions that essentially do what
-scm_internal_dynamic_wind does, but in a more convenient way. Here is
-a quick example of how to prevent a potential memory leak:
+scm_internal_dynamic_wind does, but in a way that is more convenient
+for C code in some situations. Here is a quick example of how to
+prevent a potential memory leak:
void
foo ()
{
char *mem;
- scm_begin_frame (0);
+ scm_frame_begin (0);
mem = scm_malloc (100);
- scm_on_unwind (free, mem, SCM_F_WIND_EXPLICITELY);
+ scm_frame_unwind_handler (free, mem, SCM_F_WIND_EXPLICITELY);
+
+ /* MEM would leak if BAR throws an error.
+ SCM_FRAME_UNWIND_HANDLER frees it nevertheless. */
- /* MEM would leak if BAR throws an error. SCM_ON_UNWIND frees it
- nevertheless.
- */
bar ();
- scm_end_frame ();
+ scm_frame_end ();
/* Because of SCM_F_WIND_EXPLICITELY, MEM will be freed by
- SCM_END_FRAME as well.
+ SCM_FRAME_END as well.
*/
}
For full documentation, see the node "Frames" in the manual.
+** New way to block and 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.
+
+** 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
+above). <foo> is one of "input", "output" or "error".
+
+** New way to temporarily set fluids
+
+C code can now use scm_frame_fluid in a 'frame' (see
+above) to temporarily set the value of a fluid.
+
** New types scm_t_intmax and scm_t_uintmax.
On platforms that have them, these types are identical to intmax_t and
uintmax_t, respectively. On other platforms, they are identical to
the largest integer types that Guile knows about.
+** scm_unmemocopy and scm_unmemoize have been removed from public use.
+
+For guile internal use, the functions scm_i_unmemocopy_expr,
+scm_i_unmemocopy_body and scm_i_unmemoize_expr are provided to replace
+scm_unmemocopy and scm_unmemoize. User code should not have used
+scm_unmemocopy and scm_unmemoize and thus should not use the replacement
+functions also.
+
+Background: Formerly, scm_unmemocopy and scm_unmemoize would have allowed to
+unmemoize a single expression as well as a sequence of body forms. This would
+have lead to problems when unmemoizing code of the new memoizer. Now the two
+cases have to be distinguished.
+
+
** Many public #defines with generic names have been made private.
#defines with generic names like HAVE_FOO or SIZEOF_FOO have been made
These functions were used in the implementation of the evaluator. It's
unlikely that they have been used by user code.
+** Deprecated functions and variables for evaluation and application:
+scm_ceval, scm_deval and scm_ceval_ptr
+
+These functions and variables were used in the implementation of the
+evaluator. It's unlikely that they have been used by user code. If you have
+used these functions, switch to scm_eval or scm_eval_x.
+
** Deprecated functions for unmemoization: scm_unmemocar
-** Deprecated macros for iloc handling: SCM_ILOC00, SCM_IDINC, SCM_IDSTMSK
+** Deprecated definitions for iloc and isym handling
-These macros were used in the implementation of the evaluator. It's unlikely
-that they have been used by user code.
+SCM_ILOC00, SCM_IDINC, SCM_IDSTMSK, SCM_IFRINC, SCM_ICDR, SCM_IFRAME,
+SCM_IDIST, SCM_ICDRP, SCM_ISYMNUM, SCM_ISYMCHARS, scm_isymnames.
+
+These definitions 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_NECONSP, SCM_GLOC_VAR, SCM_GLOC_VAL, SCM_GLOC_SET_VAL,
SCM_GLOC_VAL_LOC, scm_make_gloc, scm_gloc_p, scm_tc16_variable
+** Deprecated definitions for debugging: scm_debug_mode, SCM_DEBUGGINGP
+
+These functions were used in the implementation of the evaluator. It's
+unlikely that they have been used by user code.
+
+** Removed macro SCM_MAKSPCSYM
+
+This macro was used for defining byte codes of the evaluator. It is almost
+impossible that user code has used this macro.
+
\f
Changes since Guile 1.4: