Updated for new SCM_SMOB_* macros.
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index 1fea1f7..d5f4887 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,5 @@
 Guile NEWS --- history of user-visible changes.
 Guile NEWS --- history of user-visible changes.
-Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
 See the end for copying conditions.
 
 Please send Guile bug reports to bug-guile@gnu.org.
 See the end for copying conditions.
 
 Please send Guile bug reports to bug-guile@gnu.org.
@@ -18,6 +18,8 @@ Changes since the stable branch:
 
 ** Guile is now licensed with the GNU Lesser General Public License.
 
 
 ** 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.
 ** Guile now requires GNU MP (http://swox.com/gmp).
 
 Guile now uses the GNU MP library for arbitrary precision arithmetic.
@@ -112,12 +114,16 @@ 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.
 
 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.
+
 ** Guile now includes its own version of libltdl.
 
 We now use a modified version of libltdl that allows us to make
 improvements to it without having to rely on libtool releases.
 
 ** Guile now includes its own version of libltdl.
 
 We now use a modified version of libltdl that allows us to make
 improvements to it without having to rely on libtool releases.
 
-* Changes to the standalone interpreter
+* Changes to the stand-alone interpreter
 
 ** New command line option `--no-debug'.
 
 
 ** New command line option `--no-debug'.
 
@@ -129,8 +135,41 @@ evaluator turned off, even for interactive sessions.
 Previously, the normal evaluator would have been used.  Using the
 debugging evaluator gives better error messages.
 
 Previously, the normal evaluator would have been used.  Using the
 debugging evaluator gives better error messages.
 
+** The '-e' option now 'read's its argument.
+
+This is to allow the new '(@ MODULE-NAME VARIABLE-NAME)' construct to
+be used with '-e'.  For example, you can now write a script like
+
+  #! /bin/sh
+  exec guile -e '(@ (demo) main)' -s "$0" "$@"
+  !#
+
+  (define-module (demo)
+    :export (main))
+
+  (define (main args)
+    (format #t "Demo: ~a~%" args))
+
+
 * Changes to Scheme functions and syntax
 
 * Changes to Scheme functions and syntax
 
+** New syntax '@' and '@@':
+
+You can now directly refer to variables exported from a module by
+writing
+
+    (@ MODULE-NAME VARIABLE-NAME)
+
+For example (@ (ice-9 pretty-print) pretty-print) will directly access
+the pretty-print variable exported from the (ice-9 pretty-print)
+module.  You don't need to 'use' that module first.  You can also use
+'@' with 'set!'.
+
+The related syntax (@@ MODULE-NAME VARIABLE-NAME) works just like '@',
+but it can also access variables that have not been exported.  It is
+intended only for kluges and temporary fixes and for debugging, not
+for ordinary code.
+
 ** 'while' now provides 'break' and 'continue'
 
 break and continue were previously bound in a while loop, but not
 ** 'while' now provides 'break' and 'continue'
 
 break and continue were previously bound in a while loop, but not
@@ -419,6 +458,51 @@ platform supports this, too.  The two zeros are equal according to
     (eqv? 0.0 (- 0.0))
     => #f
 
     (eqv? 0.0 (- 0.0))
     => #f
 
+** Guile now has exact rationals.
+
+Guile can now represent fractions such as 1/3 exactly.  Computing with
+them is also done exactly, of course:
+
+    (* 1/3 3/2)
+    => 1/2
+
+** 'floor', 'ceiling', 'round' and 'truncate' now return exact numbers
+   for exact arguments.
+
+For example: (floor 2) now returns an exact 2 where in the past it
+returned an inexact 2.0.  Likewise, (floor 5/4) returns an exact 1.
+
+** inexact->exact no longer returns only integers.
+
+Without exact rationals, the closest exact number was always an
+integer, but now inexact->exact returns the fraction that is exactly
+equal to a floating point number.  For example:
+
+    (inexact->exact 1.234)
+    => 694680242521899/562949953421312
+
+When you want the old behavior, use 'round' explicitely:
+
+    (inexact->exact (round 1.234))
+    => 1
+
+** New function 'rationalize'.
+
+This function finds a simple fraction that is close to a given real
+number.  For example (and compare with inexact->exact above):
+
+    (rationalize (inexact->exact 1.234) 1/2000)
+    => 58/47
+
+Note that, as required by R5RS, rationalize returns only then an exact
+result when both its arguments are exact.
+
+** 'odd?' and 'even?' work also for inexact integers.
+
+Previously, (odd? 1.0) would signal an error since only exact integers
+were recognized as integers.  Now (odd? 1.0) returns #t, (odd? 2.0)
+returns #f and (odd? 1.5) signals an error.
+
 ** We now have uninterned symbols.
 
 The new function 'make-symbol' will return a uninterned symbol.  This
 ** We now have uninterned symbols.
 
 The new function 'make-symbol' will return a uninterned symbol.  This
@@ -432,7 +516,7 @@ interned or not.
 
 The function pretty-print from the (ice-9 pretty-print) module can now
 also be invoked with keyword arguments that control things like
 
 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?'.
 
 
 ** Variables have no longer a special behavior for `equal?'.
 
@@ -468,6 +552,19 @@ chapter in the reference manual.
 
 There is no replacement for undefine.
 
 
 There is no replacement for undefine.
 
+** call-with-output-string doesn't segv on closed port
+
+Previously call-with-output-string would give a segmentation fault if
+the string port was closed by the called function.  An exception is
+raised now.
+
+** (ice-9 popen) duplicate pipe fd fix
+
+open-pipe, open-input-pipe and open-output-pipe left an extra copy of
+their pipe file descriptor in the child, which was normally harmless,
+but it can prevent the parent seeing eof or a broken pipe immediately
+and has now been fixed.
+
 ** source-properties and set-source-properties! fix
 
 Properties set with set-source-properties! can now be read back
 ** source-properties and set-source-properties! fix
 
 Properties set with set-source-properties! can now be read back
@@ -480,8 +577,80 @@ order described by the SRFI-1 specification
 
 list-copy now accepts improper lists, per the 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
 
 * Changes to the C interface
 
+** 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 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_frame_begin (0);
+
+    mem = scm_malloc (100);
+    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.  */
+
+    bar ();
+  
+    scm_frame_end ();
+
+    /* Because of SCM_F_WIND_EXPLICITELY, MEM will be freed by 
+       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.
+
 ** Many public #defines with generic names have been made private.
 
 #defines with generic names like HAVE_FOO or SIZEOF_FOO have been made
 ** Many public #defines with generic names have been made private.
 
 #defines with generic names like HAVE_FOO or SIZEOF_FOO have been made
@@ -609,12 +778,12 @@ Guile always defines
   scm_t_int32
   scm_t_uint32
 
   scm_t_int32
   scm_t_uint32
 
-Guile always defines
+Guile always defines these to 0 or 1
 
   SCM_HAVE_T_INT64
   SCM_HAVE_T_UINT64
 
 
   SCM_HAVE_T_INT64
   SCM_HAVE_T_UINT64
 
-and when either of these are defined to 1, optionally defines 
+and when either of these are defined to 1, also defines
 
   scm_t_int64
   scm_t_uint64
 
   scm_t_int64
   scm_t_uint64
@@ -625,6 +794,45 @@ Guile always defines
 
   scm_t_timespec
 
 
   scm_t_timespec
 
+** The macro SCM_IFLAGP now only returns true for flags
+
+User code should never have used this macro anyway.  And, you should not use
+it in the future either.  Thus, the following explanation is just for the
+impropable case that your code actually made use of this macro, and that you
+are willing to depend on internals which will probably change in the near
+future.
+
+Formerly, SCM_IFLAGP also returned true for evaluator bytecodes created with
+SCM_MAKSPCSYM (short instructions) and evaluator bytecodes created with
+SCM_MAKISYM (short instructions).  Now, SCM_IFLAG only returns true for
+Guile's special constants created with SCM_MAKIFLAG.  To achieve the old
+behaviour, instead of
+
+  SCM_IFLAGP(x)
+
+you would have to write
+
+  (SCM_ISYMP(x) || SCM_IFLAGP(x))
+
+** The macro SCM_TYP16S has been deprecated.
+
+This macro is not intended for public use.  However, if you allocated types
+with tc16 type codes in a way that you would have needed this macro, you are
+expected to have a deep knowledge of Guile's type system.  Thus, you should
+know how to replace this macro.
+
+** The macro SCM_SLOPPY_INEXACTP has been deprecated.
+
+Use SCM_INEXACTP instead.
+
+** The macro SCM_SLOPPY_REALP has been deprecated.
+
+Use SCM_REALP instead.
+
+** The macro SCM_SLOPPY_COMPLEXP has been deprecated.
+
+Use SCM_COMPLEXP instead.
+
 ** The preprocessor define USE_THREADS has been deprecated.
 
 Going forward, assume that the thread API is always present.
 ** The preprocessor define USE_THREADS has been deprecated.
 
 Going forward, assume that the thread API is always present.
@@ -837,10 +1045,28 @@ 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.
 
 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
+** Deprecated helper functions for evaluation and application:
+scm_m_expand_body, scm_macroexp
 
 
-These macros were used in the implementation of the evaluator.  It's unlikely
-that they have been used by user code.
+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 definitions for iloc and isym handling
+
+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,
 
 ** 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,
@@ -851,7 +1077,7 @@ SCM_IM_1_IFY, SCM_GC_SET_ALLOCATED, scm_debug_newcell,
 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,
 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_top_level_lookup_closure_var, *top-level-lookup-closure*,
 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,
 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,
@@ -874,6 +1100,17 @@ scm_istring2number, scm_vtable_index_vcell, scm_si_vcell, SCM_ECONSP,
 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
 
 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:
 
 * Changes to the distribution
 Changes since Guile 1.4:
 
 * Changes to the distribution