*** empty log message ***
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index e46edb4..73e92a9 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,57 @@ See the end for copying conditions.
 
 Please send Guile bug reports to bug-guile@gnu.org.
 \f
+Changes since Guile 1.4:
+
+* Changes to the distribution
+
+* Changes to the stand-alone interpreter
+
+** It's now possible to create modules with controlled environments
+
+Example:
+
+(define m (make-module 1021 (list (resolve-interface '(ice-9 safe-r5rs)))))
+;;; m will now be a module containing only a safe subset of R5RS
+(eval-in-module '(+ 1 2) m) --> 3
+(eval-in-module 'load m) --> ERROR: Unbound variable: load
+
+* Changes to Scheme functions and syntax
+
+** New define-module option: pure
+
+Tells the module system not to include any bindings from the root
+module.
+
+Example:
+
+(define-module (totally-empty-module)
+  :pure)
+
+** New define-module option: export NAME1 ...
+
+Export names NAME1 ...
+
+This option is required if you want to be able to export bindings from
+a module which doesn't import one of `define-public' or `export'.
+
+Example:
+
+(define-module (foo)
+  :pure
+  :use-module (ice-9 r5rs)
+  :export (bar))
+
+;;; Note that we're pure R5RS below this point!
+
+(define (bar)
+  ...)
+
+* Changes to the gh_ interface
+
+* Changes to the scm_ interface
+
+\f
 Changes since Guile 1.3.4:
 
 * Changes to the distribution
@@ -84,8 +135,39 @@ their parent directories.  This essentially creates a "private name
 space" for Guile headers.  This means that the compiler only is given
 -I options for the root build and root source directory.
 
+** Header files kw.h and genio.h have been removed.
+
+** The module (ice-9 getopt-gnu-style) has been removed.
+
+** New module (ice-9 documentation)
+
+Implements the interface to documentation strings associated with
+objects.
+
 * Changes to the stand-alone interpreter
 
+** New command line option --debug
+
+Start Guile with debugging evaluator and backtraces enabled.
+
+This is useful when debugging your .guile init file or scripts.
+
+** New help facility
+
+Usage: (help NAME) gives documentation about objects named NAME (a symbol)
+       (help REGEXP) ditto for objects with names matching REGEXP (a string)
+       (help ,EXPR) gives documentation for object returned by EXPR
+       (help) gives this text
+
+`help' searches among bindings exported from loaded modules, while
+`apropos' searches among bindings visible from the "current" module.
+
+Examples: (help help)
+          (help cons)
+          (help "output-string")
+
+** `help' and `apropos' now prints full module names
+
 ** Dynamic linking now uses libltdl from the libtool package.
 
 The old system dependent code for doing dynamic linking has been
@@ -141,6 +223,12 @@ at the top of the script.
 (The first options enables the debugging evaluator.
  The second enables backtraces.)
 
+** Part of module system symbol lookup now implemented in C
+
+The eval closure of most modules is now implemented in C.  Since this
+was one of the bottlenecks for loading speed, Guile now loads code
+substantially faster than before.
+
 ** Attempting to get the value of an unbound variable now produces
 an exception with a key of 'unbound-variable instead of 'misc-error.
 
@@ -165,6 +253,73 @@ when this hook is run in the future.
 C programmers: Note the new C level hooks scm_before_gc_c_hook,
 scm_before_sweep_c_hook, scm_after_gc_c_hook.
 
+** Improvements to garbage collector
+
+Guile 1.4 has a new policy for triggering heap allocation and
+determining the sizes of heap segments.  It fixes a number of problems
+in the old GC.
+
+1. The new policy can handle two separate pools of cells
+   (2-word/4-word) better.  (The old policy would run wild, allocating
+   more and more memory for certain programs.)
+
+2. The old code would sometimes allocate far too much heap so that the
+   Guile process became gigantic.  The new code avoids this.
+
+3. The old code would sometimes allocate too little so that few cells
+   were freed at GC so that, in turn, too much time was spent in GC.
+
+4. The old code would often trigger heap allocation several times in a
+   row.  (The new scheme predicts how large the segments needs to be
+   in order not to need further allocation.)
+
+All in all, the new GC policy will make larger applications more
+efficient.
+
+The new GC scheme also is prepared for POSIX threading.  Threads can
+allocate private pools of cells ("clusters") with just a single
+function call.  Allocation of single cells from such a cluster can
+then proceed without any need of inter-thread synchronization.
+
+** New environment variables controlling GC parameters
+
+GUILE_MAX_SEGMENT_SIZE          Maximal segment size
+                                (default = 2097000)
+
+Allocation of 2-word cell heaps:
+
+GUILE_INIT_SEGMENT_SIZE_1       Size of initial heap segment in bytes
+                                (default = 360000)
+
+GUILE_MIN_YIELD_1               Minimum number of freed cells at each
+                                GC in percent of total heap size
+                                (default = 40)
+
+Allocation of 4-word cell heaps
+(used for real numbers and misc other objects):
+
+GUILE_INIT_SEGMENT_SIZE_2, GUILE_MIN_YIELD_2
+
+(See entry "Way for application to customize GC parameters" under
+ section "Changes to the scm_ interface" below.)
+
+** Guile now implements reals using 4-word cells
+
+This speeds up computation with reals.  (They were earlier allocated
+with `malloc'.)  There is still some room for optimizations, however.
+
+** Some further steps toward POSIX thread support have been taken
+
+*** Guile's critical sections (SCM_DEFER/ALLOW_INTS)
+don't have much effect any longer, and many of them will be removed in
+next release.
+
+*** Signals
+are only handled at the top of the evaluator loop, immediately after
+I/O, and in scm_equalp.
+
+*** The GC can allocate thread private pools of pairs.
+
 * Changes to Scheme functions and syntax
 
 ** close-input-port and close-output-port are now R5RS
@@ -193,6 +348,35 @@ only characters, for compatibility with R5RS.
 ** New procedure: port-closed? PORT
 Returns #t if PORT is closed or #f if it is open.
 
+** Deprecated: list*
+
+The list* functionality is now provided by cons* (SRFI-1 compliant)
+
+** New procedure: cons* ARG1 ARG2 ... ARGn
+
+Like `list', but the last arg provides the tail of the constructed list,
+returning (cons ARG1 (cons ARG2 (cons ... ARGn))).
+
+Requires at least one argument.  If given one argument, that argument
+is returned as result.
+
+This function is called `list*' in some other Schemes and in Common LISP.
+
+** Removed deprecated: serial-map, serial-array-copy!, serial-array-map!
+
+** New procedure: object-documentation OBJECT
+
+Returns the documentation string associated with OBJECT.  The
+procedure uses a caching mechanism so that subsequent lookups are
+faster.
+
+Exported by (ice-9 documentation).
+
+** module-name now returns full names of modules
+
+Previously, only the last part of the name was returned (`session' for
+`(ice-9 session)').  Ex: `(ice-9 session)'.
+
 * Changes to the gh_ interface
 
 ** Deprecated: gh_int2scmb
@@ -205,12 +389,15 @@ Use gh_bool2scm instead.
 
 Thanks to Greg Badros!
 
-** Guile primitives are defined in a new way: GUILE_PROC/GUILE_PROC1
+** Guile primitives are defined in a new way: SCM_DEFINE/SCM_DEFINE1/SCM_PROC
 
-Now Guile primitives are defined using the GUILE_PROC/GUILE_PROC1 macros
-and must contain a docstring that is extracted into foo.doc using a new
+Now Guile primitives are defined using the SCM_DEFINE/SCM_DEFINE1/SCM_PROC
+macros and must contain a docstring that is extracted into foo.doc using a new
 guile-doc-snarf script (that uses guile-doc-snarf.awk).
 
+However, a major overhaul of these macros is scheduled for the next release of
+guile.
+
 ** Guile primitives use a new technique for validation of arguments
 
 SCM_VALIDATE_* macros are defined to ease the redundancy and improve
@@ -234,12 +421,25 @@ E.g., in order to set bit 7 in an SCM value x, use the expression
 
   SCM_PACK (SCM_UNPACK (x) | 0x80)
 
+** The name property of hooks is deprecated.
+Thus, the use of SCM_HOOK_NAME and scm_make_hook_with_name is deprecated.
+
+You can emulate this feature by using object properties.
+
 ** Deprecated macros: SCM_INPORTP, SCM_OUTPORTP, SCM_CRDY, SCM_ICHRP, 
 SCM_ICHR, SCM_MAKICHR, SCM_SETJMPBUF, SCM_NSTRINGP, SCM_NRWSTRINGP,
 SCM_NVECTORP
 
 These macros will be removed in a future release of Guile.
 
+** The following types, functions and macros from numbers.h are deprecated:  
+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.
@@ -424,6 +624,67 @@ are run when the heap is locked.  These are intended for extension of
 the GC in a modular fashion.  Examples are the weaks and guardians
 modules.
 
+** Way for application to customize GC parameters
+
+The application can set up other default values for the GC heap
+allocation parameters
+
+  GUILE_INIT_HEAP_SIZE_1, GUILE_MIN_YIELD_1,
+  GUILE_INIT_HEAP_SIZE_2, GUILE_MIN_YIELD_2,
+  GUILE_MAX_SEGMENT_SIZE,
+
+by setting
+
+  scm_default_init_heap_size_1, scm_default_min_yield_1,
+  scm_default_init_heap_size_2, scm_default_min_yield_2,
+  scm_default_max_segment_size
+
+respectively before callong scm_boot_guile.
+
+(See entry "New environment variables ..." in section
+"Changes to the stand-alone interpreter" above.)
+
+** scm_protect_object/scm_unprotect_object now nest
+
+This means that you can call scm_protect_object multiple times on an
+object and count on the object being protected until
+scm_unprotect_object has been call the same number of times.
+
+The functions also have better time complexity.
+
+Still, it is usually possible to structure the application in a way
+that you don't need to use these functions.  For example, if you use a
+protected standard Guile list to keep track of live objects rather
+than some custom data type, objects will die a natural death when they
+are no longer needed.
+
+** Deprecated type tags:  scm_tc16_flo, scm_tc_flo, scm_tc_dblr, scm_tc_dblc
+
+Guile does not provide the float representation for inexact real numbers any
+more.  Now, only doubles are used to represent inexact real numbers.  Further,
+the tag names scm_tc_dblr and scm_tc_dblc have been changed to scm_tc16_real
+and scm_tc16_complex, respectively.
+
+** Removed deprecated type scm_smobfuns
+
+** Removed deprecated function scm_newsmob
+
+** Warning: scm_make_smob_type_mfpe might become deprecated in a future release
+
+There is an ongoing discussion among the developers whether to
+deprecate `scm_make_smob_type_mfpe' or not.  Please use the current
+standard interface (scm_make_smob_type, scm_set_smob_XXX) in new code
+until this issue has been settled.
+
+** Removed deprecated type tag scm_tc16_kw
+
+** Added type tag scm_tc16_keyword
+
+(This was introduced already in release 1.3.4 but was not documented
+ until now.)
+
+** gdb_print now prints "*** Guile not initialized ***" until Guile initialized
+
 * Changes to system call interfaces:
 
 ** The "select" procedure now tests port buffers for the ability to