diff --git a/NEWS b/NEWS index dbe5b11f0..a0bde903f 100644 --- a/NEWS +++ b/NEWS @@ -8,214 +8,7 @@ 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): - -** 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 - -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 - -`(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. - -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. - -** Primitive procedures are now VM trampoline procedures - -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. - -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. - -** Remove deprecated array C interfaces - -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'. - -** String encoding errors throw to `encoding-error' instead of `misc-error' - -** Keyword argument errors uniformly throw to `keyword-argument-error' - -** 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. - -** 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. - -** 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. - -** Load path change: search in version-specific paths before site paths - -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. +Changes in 1.9.8 (since the 1.9.7 prerelease): ** And of course, the usual collection of bugfixes