*** empty log message ***
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index d3d433a..9dbbaba 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,5 @@
 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.
@@ -18,6 +18,8 @@ Changes since the stable branch:
 
 ** 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.
@@ -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.
 
+** 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.
 
-* Changes to the standalone interpreter
+* Changes to the stand-alone interpreter
 
 ** New command line option `--no-debug'.
 
@@ -129,8 +135,48 @@ evaluator turned off, even for interactive sessions.
 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
 
+** 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
+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'.
 
@@ -412,6 +458,51 @@ platform supports this, too.  The two zeros are equal according to
     (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
@@ -461,18 +552,91 @@ chapter in the reference manual.
 
 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
 correctly with source-properties.
 
-** SRFI-1 delete equality argument order fixed.
+** 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.
 
-In the srfi-1 module delete and delete!, the order of the arguments to
-the "=" procedure now matches the SRFI-1 specification.
+** SRFI-19 fixes
+
+date-week-number now correctly respects the requested day of week
+starting the week.
 
 * Changes to the C interface
 
+** 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
@@ -600,12 +764,12 @@ Guile always defines
   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
 
-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
@@ -616,6 +780,45 @@ Guile always defines
 
   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.
@@ -828,6 +1031,14 @@ 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 helper functions for evaluation and application:
+scm_m_expand_body, scm_macroexp
+
+These functions were used in the implementation of the evaluator.  It's
+unlikely that they have been used by user code.
+
+** Deprecated functions for unmemoization: scm_unmemocar
+
 ** Deprecated macros for iloc handling: SCM_ILOC00, SCM_IDINC, SCM_IDSTMSK
 
 These macros were used in the implementation of the evaluator.  It's unlikely
@@ -842,7 +1053,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,
-*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,
@@ -865,6 +1076,7 @@ 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
 
+\f
 Changes since Guile 1.4:
 
 * Changes to the distribution