*** empty log message ***
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index 0880f79..74c8977 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,7 +2,7 @@ Guile NEWS --- history of user-visible changes.  -*- text -*-
 Copyright (C) 1996, 1997 Free Software Foundation, Inc.
 See the end for copying conditions.
 
-Please send Guile bug reports to bug-guile@prep.ai.mit.edu.
+Please send Guile bug reports to bug-guile@gnu.org.
 \f
 Changes since Guile 1.2:
 
@@ -49,27 +49,80 @@ support for it.
 The readline library is available via anonymous FTP from any GNU
 mirror site; the canonical location is "ftp://prep.ai.mit.edu/pub/gnu".
 
+** the-last-stack is now a fluid.
+
 * Changes to the procedure for linking libguile with your programs
 
-** You can now use the 'build-guile' utility to link against Guile.
+** You can now use the `guile-config' utility to build programs that use Guile.
+
+Guile now includes a command-line utility called `guile-config', which
+can provide information about how to compile and link programs that
+use Guile.
+
+*** `guile-config compile' prints any C compiler flags needed to use Guile.
+You should include this command's output on the command line you use
+to compile C or C++ code that #includes the Guile header files.  It's
+usually just a `-I' flag to help the compiler find the Guile headers.
+
+
+*** `guile-config link' prints any linker flags necessary to link with Guile.
 
-Guile now includes a command-line utility called 'build-guile', which
-writes to its standard output a list of flags which you must pass to
-the linker to link against the Guile library.  The flags include
-'-lguile' itself, and any other libraries the Guile library depends
-upon.
+This command writes to its standard output a list of flags which you
+must pass to the linker to link your code against the Guile library.
+The flags include '-lguile' itself, any other libraries the Guile
+library depends upon, and any `-L' flags needed to help the linker
+find those libraries.
 
 For example, here is a Makefile rule that builds a program named 'foo'
 from the object files ${FOO_OBJECTS}, and links them against Guile:
 
   foo: ${FOO_OBJECTS}
-         ${CC} ${CFLAGS} ${FOO_OBJECTS} `build-guile link` -o foo
+         ${CC} ${CFLAGS} ${FOO_OBJECTS} `guile-config link` -o foo
 
 Previous Guile releases recommended that you use autoconf to detect
 which of a predefined set of libraries were present on your system.
-It is more robust to use build-guile, since it records exactly which
+It is more robust to use `guile-config', since it records exactly which
 libraries the installed Guile library requires.
 
+This was originally called `build-guile', but was renamed to
+`guile-config' before Guile 1.3 was released, to be consistent with
+the analogous script for the GTK+ GUI toolkit, which is called
+`gtk-config'.
+
+
+** Use the GUILE_FLAGS macro in your configure.in file to find Guile.
+
+If you are using the GNU autoconf package to configure your program,
+you can use the GUILE_FLAGS autoconf macro to call `guile-config'
+(described above) and gather the necessary values for use in your
+Makefiles.
+
+The GUILE_FLAGS macro expands to configure script code which runs the
+`guile-config' script, to find out where Guile's header files and
+libraries are installed.  It sets two variables, marked for
+substitution, as by AC_SUBST.
+
+  GUILE_CFLAGS --- flags to pass to a C or C++ compiler to build
+    code that uses Guile header files.  This is almost always just a
+    -I flag.
+
+  GUILE_LDFLAGS --- flags to pass to the linker to link a
+    program against Guile.  This includes `-lguile' for the Guile
+    library itself, any libraries that Guile itself requires (like
+    -lqthreads), and so on.  It may also include a -L flag to tell the
+    compiler where to find the libraries.
+
+GUILE_FLAGS is defined in the file guile.m4, in the top-level
+directory of the Guile distribution.  You can copy it into your
+package's aclocal.m4 file, and then use it in your configure.in file.
+
+If you are using the `aclocal' program, distributed with GNU automake,
+to maintain your aclocal.m4 file, the Guile installation process
+installs guile.m4 where aclocal will find it.  All you need to do is
+use GUILE_FLAGS in your configure.in file, and then run `aclocal';
+this will copy the definition of GUILE_FLAGS into your aclocal.m4
+file.
+
 
 * Changes to Scheme functions and syntax
 
@@ -99,11 +152,41 @@ Add STRING as the most recent line in the history used by the READLINE
 command.  READLINE does not add lines to the history itself; you must
 call ADD-HISTORY to make previous input available to the user.
 
+** New module (ice-9 getopt-gnu-style): Parse command-line arguments.
+
+This module provides some simple argument parsing.  It exports one
+function:
+
+Function: getopt-gnu-style ARG-LS
+    Parse a list of program arguments into an alist of option
+    descriptions.
+
+    Each item in the list of program arguments is examined to see if
+    it meets the syntax of a GNU long-named option.  An argument like
+    `--MUMBLE' produces an element of the form (MUMBLE . #t) in the
+    returned alist, where MUMBLE is a keyword object with the same
+    name as the argument.  An argument like `--MUMBLE=FROB' produces
+    an element of the form (MUMBLE . FROB), where FROB is a string.
+
+    As a special case, the returned alist also contains a pair whose
+    car is the symbol `rest'.  The cdr of this pair is a list
+    containing all the items in the argument list that are not options
+    of the form mentioned above.
+
+    The argument `--' is treated specially: all items in the argument
+    list appearing after such an argument are not examined, and are
+    returned in the special `rest' list.
+
+    This function does not parse normal single-character switches.
+    You will need to parse them out of the `rest' list yourself.
+
+** macro-eval! is removed.  Use local-eval instead.
+
 ** Some magic has been added to the printer to better handle user
 written printing routines (like record printers, closure printers).
 
 The problem is that these user written routines must have access to
-the current `prine-state' to be able to handle fancy things like
+the current `print-state' to be able to handle fancy things like
 detection of circular references.  These print-states have to be
 passed to the builtin printing routines (display, write, etc) to
 properly continue the print chain.
@@ -351,8 +434,21 @@ their revealed counts set to zero.
 
 ** serial-array-map renamed to serial-array-map!
 
+** catch doesn't take #f as first argument any longer
+
+Previously, it was possible to pass #f instead of a key to `catch'.
+That would cause `catch' to pass a jump buffer object to the procedure
+passed as second argument.  The procedure could then use this jump
+buffer objekt as an argument to throw.
+
+This mechanism has been removed since its utility doesn't motivate the
+extra complexity it introduces.
+
 * Changes to the gh_ interface
 
+** The gh_enter function now takes care of loading the Guile startup files.
+gh_enter works by calling scm_boot_guile; see the remarks below.
+
 ** Function: void gh_write (SCM x)
 
 Write the printed representation of the scheme object x to the current
@@ -373,8 +469,77 @@ vector-related gh_ functions have been implemented.
 Implemented several of the R4RS pair and list functions that were
 missing.
 
+** gh_scm2doubles, gh_doubles2scm, gh_doubles2dvect
+
+New function.  Converts double arrays back and forth between Scheme
+and C.
+
 * Changes to the scm_ interface
 
+** The function scm_boot_guile now takes care of loading the startup files.
+
+Guile's primary initialization function, scm_boot_guile, now takes
+care of loading `boot-9.scm', in the `ice-9' module, to initialize
+Guile, define the module system, and put together some standard
+bindings.  It also loads `init.scm', which is intended to hold
+site-specific initialization code.
+
+Since Guile cannot operate properly until boot-9.scm is loaded, there
+is no reason to separate loading boot-9.scm from Guile's other
+initialization processes.
+
+This job used to be done by scm_compile_shell_switches, which didn't
+make much sense; in particular, it meant that people using Guile for
+non-shell-like applications had to jump through hoops to get Guile
+initialized properly.
+
+** The function scm_compile_shell_switches no longer loads the startup files.
+Now, Guile always loads the startup files, whenever it is initialized;
+see the notes above for scm_boot_guile and scm_load_startup_files.
+
+** Function: scm_load_startup_files
+This new function takes care of loading Guile's initialization file
+(`boot-9.scm'), and the site initialization file, `init.scm'.  Since
+this is always called by the Guile initialization process, it's
+probably not too useful to call this yourself, but it's there anyway.
+
+** The semantics of smob marking have changed slightly.
+
+The smob marking function (the `mark' member of the scm_smobfuns
+structure) is no longer responsible for setting the mark bit on the
+smob.  The generic smob handling code in the garbage collector will
+set this bit.  The mark function need only ensure that any other
+objects the smob refers to get marked.
+
+Note that this change means that the smob's GC8MARK bit is typically
+already set upon entry to the mark function.  Thus, marking functions
+which look like this:
+
+       {
+         if (SCM_GC8MARKP (ptr))
+           return SCM_BOOL_F;
+          SCM_SETGC8MARK (ptr);
+         ... mark objects to which the smob refers ...
+       }
+
+are now incorrect, since they will return early, and fail to mark any
+other objects the smob refers to.  Some code in the Guile library used
+to work this way.
+
+
+** Function: int scm_internal_select (int fds,
+                                     SELECT_TYPE *rfds,
+                                     SELECT_TYPE *wfds,
+                                     SELECT_TYPE *efds,
+                                     struct timeval *timeout);
+
+This is a replacement for the `select' function provided by the OS.
+It enables I/O blocking and sleeping to happen for one cooperative
+thread without blocking other threads.  It also avoids busy-loops in
+these situations.  It is intended that all I/O blocking and sleeping
+will finally go through this function.  Currently, this function is
+only available on systems providing `gettimeofday' and `select'.
+
 ** Function: SCM scm_internal_stack_catch (SCM tag,
                                           scm_catch_body_t body,
                                           void *body_data,
@@ -388,6 +553,15 @@ the stack to be saved automatically into the variable `the-last-stack'
 use advanced error reporting, such as calling scm_display_error and
 scm_display_backtrace.  (They both take a stack object as argument.)
 
+** Function: SCM scm_spawn_thread (scm_catch_body_t body,
+                                  void *body_data,
+                                  scm_catch_handler_t handler,
+                                  void *handler_data)
+
+Spawns a new thread.  It does a job similar to
+scm_call_with_new_thread but takes arguments more suitable when
+spawning threads from application C code.
+
 ** The hook scm_error_callback has been removed.  It was originally
 intended as a way for the user to install his own error handler.  But
 that method works badly since it intervenes between throw and catch,
@@ -423,6 +597,12 @@ strings.
 scm_putc, scm_puts, scm_lfwrite, scm_getc, scm_ungetc, and
 scm_do_read_line.
 
+** scm_catch_body_t: Backward incompatible change!
+
+Body functions to scm_internal_catch and friends do not any longer
+take a second argument.  This is because it is no longer possible to
+pass a #f arg to catch.
+
 \f
 Changes in Guile 1.2 (released Tuesday, June 24 1997):