Start a new version.
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index 78ce42d..2626a0d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -4,10 +4,152 @@ See the end for copying conditions.
 
 Please send Guile bug reports to bug-guile@gnu.org.
 \f
+Changes since Guile 1.3.4:
+
+\f
 Changes since Guile 1.3.2:
 
+* Changes to the stand-alone interpreter
+
+** Debugger
+
+An initial version of the Guile debugger written by Chris Hanson has
+been added.  The debugger is still under development but is included
+in the distribution anyway since it is already quite useful.
+
+Type
+
+  (debug)
+
+after an error to enter the debugger.  Type `help' inside the debugger
+for a description of available commands.
+
+If you prefer to have stack frames numbered and printed in
+anti-chronological order and prefer up in the stack to be down on the
+screen as is the case in gdb, you can put
+
+  (debug-enable 'backwards)
+
+in your .guile startup file.  (However, this means that Guile can't
+use indentation to indicate stack level.)
+
+The debugger is autoloaded into Guile at the first use.
+
+** Further enhancements to backtraces
+
+There is a new debug option `width' which controls the maximum width
+on the screen of printed stack frames.  Fancy printing parameters
+("level" and "length" as in Common LISP) are adaptively adjusted for
+each stack frame to give maximum information while still fitting
+within the bounds.  If the stack frame can't be made to fit by
+adjusting parameters, it is simply cut off at the end.  This is marked
+with a `$'.
+
+** Some modules are now only loaded when the repl is started
+
+The modules (ice-9 debug), (ice-9 session), (ice-9 threads) and (ice-9
+regex) are now loaded into (guile-user) only if the repl has been
+started.  The effect is that the startup time for scripts has been
+reduced to 30% of what it was previously.
+
+Correctly written scripts load the modules they require at the top of
+the file and should not be affected by this change.
+
+** Hooks are now represented as smobs
+
 * Changes to Scheme functions and syntax
 
+** Readline support has changed again.
+
+The old (readline-activator) module is gone.  Use (ice-9 readline)
+instead, which now contains all readline functionality.  So the code
+to activate readline is now
+
+    (use-modules (ice-9 readline))
+    (activate-readline)
+
+This should work at any time, including from the guile prompt.
+
+To avoid confusion about the terms of Guile's license, please only
+enable readline for your personal use; please don't make it the
+default for others.  Here is why we make this rather odd-sounding
+request:
+
+Guile is normally licensed under a weakened form of the GNU General
+Public License, which allows you to link code with Guile without
+placing that code under the GPL.  This exception is important to some
+people.
+
+However, since readline is distributed under the GNU General Public
+License, when you link Guile with readline, either statically or
+dynamically, you effectively change Guile's license to the strict GPL.
+Whenever you link any strictly GPL'd code into Guile, uses of Guile
+which are normally permitted become forbidden.  This is a rather
+non-obvious consequence of the licensing terms.
+
+So, to make sure things remain clear, please let people choose for
+themselves whether to link GPL'd libraries like readline with Guile.
+
+** regexp-substitute/global has changed slightly, but incompatibly.
+
+If you include a function in the item list, the string of the match
+object it receives is the same string passed to
+regexp-substitute/global, not some suffix of that string.
+Correspondingly, the match's positions are relative to the entire
+string, not the suffix.
+
+If the regexp can match the empty string, the way matches are chosen
+from the string has changed.  regexp-substitute/global recognizes the
+same set of matches that list-matches does; see below.
+
+** New function: list-matches REGEXP STRING [FLAGS]
+
+Return a list of match objects, one for every non-overlapping, maximal
+match of REGEXP in STRING.  The matches appear in left-to-right order.
+list-matches only reports matches of the empty string if there are no
+other matches which begin on, end at, or include the empty match's
+position.
+
+If present, FLAGS is passed as the FLAGS argument to regexp-exec.
+
+** New function: fold-matches REGEXP STRING INIT PROC [FLAGS]
+
+For each match of REGEXP in STRING, apply PROC to the match object,
+and the last value PROC returned, or INIT for the first call.  Return
+the last value returned by PROC.  We apply PROC to the matches as they
+appear from left to right.
+
+This function recognizes matches according to the same criteria as
+list-matches.
+
+Thus, you could define list-matches like this:
+
+  (define (list-matches regexp string . flags)
+    (reverse! (apply fold-matches regexp string '() cons flags)))
+
+If present, FLAGS is passed as the FLAGS argument to regexp-exec.
+
+** Hooks
+
+*** New function: hook? OBJ
+
+Return #t if OBJ is a hook, otherwise #f.
+
+*** New function: make-hook-with-name NAME [ARITY]
+
+Return a hook with name NAME and arity ARITY.  The default value for
+ARITY is 0.  The only effect of NAME is that it will appear when the
+hook object is printed to ease debugging.
+
+*** New function: hook-empty? HOOK
+
+Return #t if HOOK doesn't contain any procedures, otherwise #f.
+
+*** New function: hook->list HOOK
+
+Return a list of the procedures that are called when run-hook is
+applied to HOOK.
+
 ** `map' signals an error if its argument lists are not all the same length.
 
 This is the behavior required by R5RS, so this change is really a bug
@@ -31,8 +173,28 @@ Return a new port with the associated print state PRINT-STATE.
 Return the print state associated with this port if it exists,
 otherwise return #f.
 
+*** New function: directory-stream? OBJECT
+
+Returns true iff OBJECT is a directory stream --- the sort of object
+returned by `opendir'.
+
+** New function: using-readline?
+
+Return #t if readline is in use in the current repl.
+
+** structs will be removed in 1.4
+
+Structs will be replaced in Guile 1.4.  We will merge GOOPS into Guile
+and use GOOPS objects as the fundamental record type.
+
 * Changes to the scm_ interface
 
+** structs will be removed in 1.4
+
+The entire current struct interface (struct.c, struct.h) will be
+replaced in Guile 1.4.  We will merge GOOPS into libguile and use
+GOOPS objects as the fundamental record type.
+
 ** The internal representation of subr's has changed
 
 Instead of giving a hint to the subr name, the CAR field of the subr
@@ -48,26 +210,21 @@ documentation slots are not yet used.
 
 It is now possible to extend the functionality of some Guile
 primitives by letting them defer a call to a GOOPS generic function on
-argument mismatch.  This functionality is enabled with the GOOPS
-primitive
-
-  enable-primitive-generic! PRIMITIVE ...
-
-It is then possible to extend the primitive(s) by defining methods for
-them without loss of efficiency in normal evaluation.
+argument mismatch.  This means that there is no loss of efficiency in
+normal evaluation.
 
 Example:
 
-  (use-modules (oop goops))
-  (enable-primitive-generic! +)
+  (use-modules (oop goops)) ; Must be GOOPS version 0.2.
   (define-method + ((x <string>) (y <string>))
     (string-append x y))
 
-  + will still be as efficient as usual in numerical calculations, but
-  can also be used for concatenating strings.
++ will still be as efficient as usual in numerical calculations, but
+can also be used for concatenating strings.
 
-  Who will be the first one to extend Guile's numerical tower to
-  rationals?  :)
+Who will be the first one to extend Guile's numerical tower to
+rationals?  :)  [OK, there a few other things to fix before this can
+be made in a clean way.]
 
 *** New snarf macros for defining primitives: SCM_GPROC, SCM_GPROC1
 
@@ -75,7 +232,7 @@ Example:
 
   New macro: SCM_GPROC1 (CNAME, SNAME, TYPE, CFUNC, GENERIC)
 
-These do the same job as SCM_PROC and SCM_PROC1, but they also defines
+These do the same job as SCM_PROC and SCM_PROC1, but they also define
 a variable GENERIC which can be used by the dispatch macros below.
 
 [This is experimental code which may change soon.]
@@ -133,6 +290,23 @@ these compilation units has been cleaned up and better structured.
   New function: SCM scm_call_generic_2 (GENERIC, ARG1, ARG2)
   New function: SCM scm_call_generic_3 (GENERIC, ARG1, ARG2, ARG3)
 
+** Deprecated function: scm_make_named_hook
+
+It is now replaced by:
+
+** New function: SCM scm_create_hook (const char *name, int arity)
+
+Creates a hook in the same way as make-hook above but also
+binds a variable named NAME to it.
+
+This is the typical way of creating a hook from C code.
+
+Currently, the variable is created in the "current" module.
+This might change when we get the new module system.
+
+[The behaviour is identical to scm_make_named_hook.]
+
+
 \f
 Changes since Guile 1.3:
 
@@ -1247,8 +1421,8 @@ binds a variable named NAME to it.
 
 This is the typical way of creating a hook from C code.
 
-Currently, the variable is created in the root module.  This will
-change when we get the new module system.
+Currently, the variable is created in the "current" module.  This
+might change when we get the new module system.
 
 ** The smob interface