Implementation for the R6RS (rnrs programs) library.
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index dbe5b11..d610d83 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -8,215 +8,83 @@ Please send Guile bug reports to bug-guile@gnu.org.
 (During the 1.9 series, we will keep an incremental NEWS for the latest
 prerelease, and a full NEWS corresponding to 1.8 -> 2.0.)
 
-Changes in 1.9.7 (since the 1.9.6 prerelease):
+Changes in 1.9.10 (since the 1.9.9 prerelease):
 
-** Complete support for version information in Guile's `module' form
-    
-Guile modules now have a `#:version' field. They may be loaded by
-version as well. See "R6RS Version References", "General Information
-about Modules", "Using Guile Modules", and "Creating Guile Modules" in
-the manual for more information.
-
-** Support for renaming bindings on module export
-    
-Wherever Guile accepts a symbol as an argument to specify a binding to
-export, it now also accepts a pair of symbols, indicating that a binding
-should be renamed on export. See "Creating Guile Modules" in the manual
-for more information.
-
-** Imported statprof, SSAX, and texinfo modules from Guile-Lib
-    
-The statprof statistical profiler, the SSAX XML toolkit, and the texinfo
-toolkit from Guile-Lib have been imported into Guile proper. See
-"Standard Library" in the manual for more details.
-
-** Function profiling and tracing at the REPL
-    
-The `,profile FORM' REPL meta-command can now be used to statistically
-profile execution of a form, to see which functions are taking the most
-time. See `,help profile' for more information.
-
-Similarly, `,trace FORM' traces all function applications that occur
-during the execution of `FORM'. See `,help trace' for more information.
-
-** New debugger
+** Hygienic macros documented as the primary syntactic extension mechanism.
 
-By default, if an exception is raised at the REPL and not caught by user
-code, Guile will drop the user into a debugger. The user may request a
-backtrace, inspect frames, or continue raising the exception. Full
-documentation is available from within the debugger.
-
-** New function, `truncated-print', with `format' support
+The macro documentation was finally fleshed out with some documentation
+on `syntax-case' macros, and other parts of the macro expansion process.
+See "Macros" in the manual, for details.
 
-`(ice-9 pretty-print)' now exports `truncated-print', a printer that
-will ensure that the output stays within a certain width, truncating the
-output in what is hopefully an intelligent manner. See the manual for
-more details.
+** Interactive Guile follows GNU conventions
 
-There is a new `format' specifier, `~@y', for doing a truncated
-print (as opposed to `~y', which does a pretty-print). See the `format'
-documentation for more details.
+As recommended by the GPL, Guile now shows a brief copyright and
+warranty disclaimer on startup, along with pointers to more information.
+On the other hand, changing languages is more concise.
 
-** Primitive procedures are now VM trampoline procedures
+** Support for arbitrary procedure metadata
 
-Guile's old evaluator used to have special cases for applying "gsubrs",
-primitive procedures with specified numbers of required, optional, and
-rest arguments. Now, however, Guile represents gsubrs as normal VM
-procedures, with appropriate bytecode to parse out the correct number of
-arguments, including optional and rest arguments, and then with a
-special bytecode to apply the gsubr.
-
-This allows primitive procedures to appear on the VM stack, allowing
-them to be accurately counted in profiles. Also they now have more
-debugging information attached to them -- their number of arguments, for
-example. In addition, the VM can completely inline the application
-mechanics, allowing for faster primitive calls.
-
-However there are some changes on the C level. There is no more
-`scm_tc7_gsubr' or `scm_tcs_subrs' typecode for primitive procedures, as
-they are just VM procedures. Likewise the macros `SCM_GSUBR_TYPE',
-`SCM_GSUBR_MAKTYPE', `SCM_GSUBR_REQ', `SCM_GSUBR_OPT', and
-`SCM_GSUBR_REST' are gone, as are `SCM_SUBR_META_INFO', `SCM_SUBR_PROPS'
-`SCM_SET_SUBR_GENERIC_LOC', and `SCM_SUBR_ARITY_TO_TYPE'.
-
-Perhaps more significantly, `scm_c_make_subr',
-`scm_c_make_subr_with_generic', `scm_c_define_subr', and
-`scm_c_define_subr_with_generic'. They all operated on subr typecodes,
-and there are no more subr typecodes. Use the scm_c_make_gsubr family
-instead.
-
-Normal users of gsubrs should not be affected, though, as the
-scm_c_make_gsubr family still is the correct way to create primitive
-procedures.
-
-** SRFI-4 vectors reimplemented in terms of R6RS bytevectors
-
-Guile now implements SRFI-4 vectors using bytevectors. Often when you
-have a numeric vector, you end up wanting to write its bytes somewhere,
-or have access to the underlying bytes, or read in bytes from somewhere
-else. Bytevectors are very good at this sort of thing. But the SRFI-4
-APIs are nicer to use when doing number-crunching, because they are
-addressed by element and not by byte.
-
-So as a compromise, Guile allows all bytevector functions to operate on
-numeric vectors. They address the underlying bytes in the native
-endianness, as one would expect.
-
-Following the same reasoning, that it's just bytes underneath, Guile
-also allows uniform vectors of a given type to be accessed as if they
-were of any type. One can fill a u32vector, and access its elements with
-u8vector-ref. One can use f64vector-ref on bytevectors. It's all the
-same to Guile.
-
-In this way, uniform numeric vectors may be written to and read from
-input/output ports using the procedures that operate on bytevectors.
+Building on its support for docstrings, Guile now supports multiple
+docstrings, adding them to the tail of a compiled procedure's
+properties. For example:
 
-Calls to SRFI-4 accessors (ref and set functions) from Scheme are now
-inlined to the VM instructions for bytevector access.
-
-See "SRFI-4" in the manual, for more information.
-
-** Nonstandard SRFI-4 procedures now available from `(srfi srfi-4 gnu)'
-
-Guile's `(srfi srfi-4)' now only exports those srfi-4 procedures that
-are part of the standard. Complex uniform vectors and the
-`any->FOOvector' family are now available only from `(srfi srfi-4 gnu)'.
-
-Guile's default environment imports `(srfi srfi-4)', and probably should
-import `(srfi srfi-4 gnu)' as well.
-
-See "SRFI-4 Extensions" in the manual, for more information.
-
-** Unicode: String normalization, general categories, title case
-    
-Guile now exports the Unicode string normalization functions
-`string-normalize-nfc', `string-normalize-nfd', `string-normalize-nfkc',
-and `string-normalize-nfkd'. See "String Comparison" in the manual for
-more information. See "Characters" for information on the new
-`char-general-category', and "Character Case Mapping" for
-`char-titlecase', `char-locale-titlecase', and
-`string-locale-titlecase'.
-    
-** Faster access to the free variables of a closure
-
-Guile's old garbage collector limited the size of Scheme objects to be 2
-or 4 words. Now with the BDW collector, Guile can allocate
-variable-sized objects, allowing storage of the free variables of a
-closure inline to the closure itself.
-
-** New primitive `getsid'
-
-Scheme binding for the `getsid' C library call.
-
-** Changed invocation mechanics of applicable SMOBs
-
-Guile's old evaluator used to have special cases for applying SMOB
-objects. Now, with the VM, when Guile sees a SMOB, it looks up a VM
-trampoline procedure for it, and use the normal mechanics to apply the
-trampoline. This simplifies procedure application in the normal,
-non-SMOB case.
-
-The upshot is that the mechanics used to apply a SMOB are different from
-1.8. Descriptors no longer have `apply_0', `apply_1', `apply_2', and
-`apply_3' functions, and the macros SCM_SMOB_APPLY_0 and friends are now
-deprecated. Just use the scm_call_0 family of procedures.
+  (define (foo)
+    "one"
+    "two"
+    3)
+  (use-modules (system vm program))
+  (program-properties foo)
+  => ((name . foo) (documentation . "one") (documentation . "two"))
+
+Also, vectors of pairs are now treated as additional metadata entries:
+
+  (define (bar)
+    #((quz . #f) (docstring . "xyzzy"))
+    3)
+  (use-modules (system vm program))
+  (program-properties bar)
+  => ((name . bar) (quz . #f) (docstring . "xyzzy"))
+
+This allows arbitrary literals to be embedded as metadata in a compiled
+procedure.
+
+** Better documentation infrastructure for macros
+
+It is now possible to introspect on the type of a macro, e.g.
+syntax-rules, identifier-syntax, etc, and extract information about that
+macro, such as the syntax-rules patterns or the defmacro arguments.
+`(texinfo reflection)' takes advantage of this to give better macro
+documentation.
+
+** Autocompilation for applications that use Guile as an extension language
+
+It used to be that only applications that ran Guile through the
+`scm_shell' function got the advantages of autocompilation. This has
+been changed so that all applications have autocompilation on by
+default.
 
-** Remove deprecated array C interfaces
+** Better integration of Lisp nil
 
-Removed the deprecated array functions `scm_i_arrayp',
-`scm_i_array_ndim', `scm_i_array_mem', `scm_i_array_v',
-`scm_i_array_base', `scm_i_array_dims', and the deprecated macros
-`SCM_ARRAYP', `SCM_ARRAY_NDIM', `SCM_ARRAY_CONTP', `SCM_ARRAY_MEM',
-`SCM_ARRAY_V', `SCM_ARRAY_BASE', and `SCM_ARRAY_DIMS'.
+`scm_is_boolean', `scm_is_false', and `scm_is_null' all return true now
+for Lisp's `nil'. This shouldn't affect any Scheme code at this point,
+but when we start to integrate more with Emacs, it is possible that we
+break code that assumes that, for example, `(not x)' implies that `x' is
+`eq?' to `#f'. This is not a common assumption. Refactoring affected
+code to rely on properties instead of identities will improve code
+correctness. See "Nil" in the manual, for more details.
 
-** String encoding errors throw to `encoding-error' instead of `misc-error'
-    
-** Keyword argument errors uniformly throw to `keyword-argument-error'
+** Integration of lalr-scm, a parser generator
 
-** Remove unused snarf macros
-    
-`SCM_DEFINE1', `SCM_PRIMITIVE_GENERIC_1', `SCM_PROC1, and `SCM_GPROC1'
-are no more. Use SCM_DEFINE or SCM_PRIMITIVE_GENERIC instead.
+Guile has included Dominique Boucher's fine `lalr-scm' parser generator
+as `(system base lalr)'. See "LALR(1) Parsing" in the manual, for more
+information.
 
-** Add foreign value wrapper
-    
-Guile now has a datatype for aliasing "foreign" values, such as native
-long values. This should be useful for making a proper foreign function
-interface. Interested hackers should see libguile/foreign.h.
+** Documentation for the dynamic foreign function interface (FFI).
 
-** New functions: `scm_call_n', `scm_c_run_hookn'
-    
-`scm_call_n' applies to apply a function to an array of arguments.
-`scm_c_run_hookn' runs a hook with an array of arguments.
+See "Foreign Function Interface" in the manual, for more information.
 
-** Load path change: search in version-specific paths before site paths
+** Unicode character set update to Unicode 5.2.
     
-When looking for a module, Guile now searches first in Guile's
-version-specific path (the library path), *then* in the site dir. This
-allows Guile's copy of SSAX to override any Guile-Lib copy the user has
-installed. Also it should cut the number of `stat' system calls by half,
-in the common case.
-
-** Compile-time warning: -Wunused-toplevel
-
-Guile can warn about potentially unused top-level (global)
-variables. Pass the -Wunused-toplevel on the `guile-tools compile'
-command line, or add
-`#:warnings '(unused-toplevel)' to your `compile' or `compile-file'
-invocation.
-
-** New reader options: `square-brackets' and `r6rs-hex-escapes'
-
-The reader supports a new option (changeable via `read-options'),
-`square-brackets', which instructs it to interpret square brackets as
-parenthesis.  This option is on by default.
-
-If this causes problems with your code, make sure to report it to
-bug-guile@gnu.org so we can change the default.
-
-When the new `r6rs-hex-escapes' reader option is enabled, the reader
-will recognize string escape sequences as defined in R6RS.
-
 ** And of course, the usual collection of bugfixes
  
 Interested users should see the ChangeLog for more information.
@@ -232,6 +100,8 @@ Changes in 1.9.x (since the 1.8.x series):
 ** `(rnrs bytevector)', the R6RS bytevector API
 ** `(rnrs io ports)', a subset of the R6RS I/O port API
 ** `(system xref)', a cross-referencing facility (FIXME undocumented)
+** `(ice-9 vlist)', lists with constant-time random access; hash lists
+** `(system foreign)', foreign function interface
 
 ** Imported statprof, SSAX, and texinfo modules from Guile-Lib
     
@@ -379,13 +249,6 @@ will be created if needed.
 To inhibit autocompilation, set the GUILE_AUTO_COMPILE environment
 variable to 0, or pass --no-autocompile on the Guile command line.
 
-Note that there is currently a bug here: automatic compilation will
-sometimes be attempted when it shouldn't.
-
-For example, the old (lang elisp) modules are meant to be interpreted,
-not compiled. This bug will be fixed before 2.0. FIXME 2.0: Should say
-something here about module-transformer called for compile.
-
 ** Files loaded with `load' will now be compiled automatically.
 
 As with files loaded via `primitive-load-path', `load' will also compile
@@ -409,12 +272,11 @@ in the next prerelease.
 
 Scheme binding for the `getsid' C library call.
 
-** New procedure in `(oops goops)': `method-formals'
+** New POSIX procedure: `getaddrinfo'
 
-** BUG: (procedure-property func 'arity) does not work on compiled
-   procedures
+Scheme binding for the `getaddrinfo' C library function.
 
-This will be fixed one way or another before 2.0.
+** New procedure in `(oops goops)': `method-formals'
 
 ** New procedures in (ice-9 session): `add-value-help-handler!',
    `remove-value-help-handler!', `add-name-help-handler!'
@@ -624,6 +486,14 @@ actually used this, this behavior may be reinstated via the
 #; comments out an entire expression.  See SRFI-62 or the R6RS for more
 information.
 
+** Prompts: Delimited, composable continuations
+
+Guile now has prompts as part of its primitive language. See "Prompts"
+in the manual, for more information.
+
+Expressions entered in at the REPL, or from the command line, are
+surrounded by a prompt with the default prompt tag.
+
 ** `make-stack' with a tail-called procedural narrowing argument no longer
    works (with compiled procedures)
 
@@ -756,6 +626,11 @@ environment as well: `syntax->datum', `datum->syntax',
 `bound-identifier=?', `free-identifier=?', `generate-temporaries',
 `identifier?', and `syntax-violation'. See the R6RS for documentation.
 
+** Documentation of `syntax-rules' and `syntax-case' macros
+
+The documentation of macros in the manual is now separate from that of
+procedures.  A new section on hygienic macros has been added.
+
 ** Tail patterns in syntax-case
 
 Guile has pulled in some more recent changes from the psyntax portable
@@ -1118,6 +993,13 @@ History library functions.
 Instead, use make-typed-array, list->typed-array, or array-type,
 respectively.
 
+** Deprecated: `lazy-catch'
+
+`lazy-catch' was a form that captured the stack at the point of a
+`throw', but the dynamic state at the point of the `catch'. It was a bit
+crazy. Please change to use `catch', possibly with a throw-handler, or
+`with-throw-handler'.
+
 ** Last but not least, the `λ' macro can be used in lieu of `lambda'
 
 * Changes to the C interface
@@ -1311,8 +1193,7 @@ Just use `scm_call_0', etc instead.
 The bit representation of `nil' has been tweaked so that it is now very
 efficient to check e.g. if a value is equal to Scheme's end-of-list or
 Lisp's nil. Additionally there are a heap of new, specific predicates
-like scm_is_null_or_nil. Probably in the future we will #define
-scm_is_null to scm_is_null_or_nil.
+like scm_is_null_or_nil.
 
 ** Support for static allocation of strings, symbols, and subrs.
 
@@ -1367,6 +1248,17 @@ macros should now require `guile-2.0' instead of `guile-1.8'.
 If $(libdir) is /usr/lib, for example, Guile will install its .go files
 to /usr/lib/guile/1.9/ccache. These files are architecture-specific.
 
+** Parallel installability fixes
+
+Guile now installs its header files to a effective-version-specific
+directory, and includes the effective version (e.g. 2.0) in the library
+name (e.g. libguile-2.0.so).
+
+This change should be transparent to users, who should detect Guile via
+the guile.m4 macro, or the guile-2.0.pc pkg-config file. It will allow
+parallel installs for multiple versions of Guile development
+environments.
+
 ** Dynamically loadable extensions may be placed in a Guile-specific path
 
 Before, Guile only searched the system library paths for extensions
@@ -1384,6 +1276,10 @@ See http://www.hpl.hp.com/personal/Hans_Boehm/gc/, for more information.
 See http://www.gnu.org/software/libunistring/, for more information. Our
 Unicode support uses routines from libunistring.
 
+** New dependency: libffi
+
+See http://sourceware.org/libffi/, for more information.
+
 
 \f
 Changes in 1.8.8 (since 1.8.7)