X-Git-Url: https://git.hcoop.net/bpt/guile.git/blobdiff_plain/d3a6162490f78e36be2c6c1c5f7319b2266ac7e0..13922e3fa9f1d5747dd15ee4cf34447ec8939b7c:/NEWS diff --git a/NEWS b/NEWS index 04b6b39c7..08dc112e7 100644 --- a/NEWS +++ b/NEWS @@ -8,109 +8,150 @@ 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.3 (since the 1.9.2 prerelease): +Changes in 1.9.5 (since the 1.9.4 prerelease): +** Compiled procedures may now have more than one arity. -** Guile now uses libgc, the Boehm-Demers-Weiser garbage collector +This can be the case, for example, in case-lambda procedures. The +arities of compiled procedures may be accessed via procedures from the +`(system vm program)' module; see "Compiled Procedures", "Optional +Arguments", and "Case-lambda" in the manual. -The semantics of `scm_gc_malloc ()' have been changed, in a -backward-compatible way. A new allocation routine, -`scm_gc_malloc_pointerless ()', was added. +** `case-lambda' is now available in the default environment. -Libgc is a conservative GC, which we hope will make interaction with C -code easier and less error-prone. +The binding in the default environment is equivalent to the one from the +`(srfi srfi-16)' module. Use the srfi-16 module explicitly if you wish +to maintain compatibility with Guile 1.8 and earlier. -** Files loaded with `load' will now be compiled automatically. +** VM calling convention change: callee-parsed arguments -As with files loaded via `primitive-load-path', `load' will also compile -its target if autocompilation is enabled, and a fresh compiled file is -not found. +As an internal implementation detail, compiled procedures are now +responsible for parsing their own arguments, which they receive on the +stack. -There are two points of difference to note, however. First, `load' does -not search `GUILE_LOAD_COMPILED_PATH' for the file; it only looks in the -autocompilation directory, normally a subdirectory of ~/.cache/guile. +** VM support for multiple-arity dispatch -Secondly, autocompilation also applies to files loaded via the -l -command-line argument -- so the user may experience a slight slowdown -the first time they run a Guile script, as the script is autocompiled. +Calls to procedures with multiple arities, for example those made be +`case-lambda', now dispatch via special opcodes, without the need to +cons a rest list. -** Support for non-ASCII source code files +** Intermediate language support for multiple-arity procedures. -The default reader now handles source code files for some of the -non-ASCII character encodings, such as UTF-8. A non-ASCII source file -should have an encoding declaration near the top of the file. Also, -there is a new function, `file-encoding', that scans a port for a coding -declaration. See the section of the manual entitled, "Character Encoding -of Source Files". +In the intermediate language, tree-il, all procedures may have one or +more arities. This allows all Guile languages to have multiple arities. +It is, however, an incompatible change, and anyone maintaining a +compiler out-of-tree would be advised to get it into Guile soon :) -The pre-1.9.3 reader handled 8-bit clean but otherwise unspecified source -code. This use is now discouraged. +** `lambda*' and `define*' are now available in the default environment -** Support for locale transcoding when reading from and writing to ports +As with `case-lambda', `(ice-9 optargs)' continues to be supported, for +compatibility purposes. No semantic change has been made (we hope). +Optional and keyword arguments now dispatch via special VM operations, +without the need to cons rest arguments, making them very fast. -Ports now have an associated character encoding, and port read and write -operations do conversion to and from locales automatically. Ports also -have an associated strategy for how to deal with locale conversion -failures. +** Better support for Lisp `nil'. -See the documentation in the manual for the four new support functions, -`set-port-encoding!', `port-encoding', `set-port-conversion-strategy!', -and `port-conversion-strategy'. +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. -** String and SRFI-13 functions can operate on Unicode strings +** No future. -** Unicode support for SRFI-14 character sets +Actually the future is still in the state that it was, is, and ever +shall be, Amen, except that `futures.c' and `futures.h' are no longer a +part of it. These files were experimental, never compiled, and would be +better implemented in Scheme anyway. In the future, that is. -The default character sets are no longer locale dependent and contain -characters from the whole Unicode range. There is a new predefined -character set, `char-set:designated', which contains all assigned -Unicode characters. There is a new debugging function, `%char-set-dump'. +** Support for static allocation of strings, symbols, and subrs. -** Character functions operate on Unicode characters +Calls to snarfing CPP macros like SCM_DEFINE macro will now allocate +much of their associated data as static variables, reducing Guile's +memory footprint. -`char-upcase' and `char-downcase' use default Unicode casing rules. -Character comparisons such as `charuniform-array, list->uniform-array, array-prototype +`quasisyntax' is to `syntax' as `quasiquote' is to `quote'. See the R6RS +documentation for more information. Thanks to Andre van Tonder for the +implementation. -Instead, use make-typed-array, list->typed-array, or array-type, -respectively. +** Cleanups to Guile's primitive object system. -** Removed deprecated uniform array procedures: scm_make_uve, - scm_array_prototype, scm_list_to_uniform_array, - scm_dimensions_to_uniform_array, scm_make_ra, scm_shap2ra, scm_cvref, - scm_ra_set_contp, scm_aind, scm_raprin1 +There were a number of pieces in `objects.[ch]' that tried to be a +minimal object system, but were never documented, and were quickly +obseleted by GOOPS' merge into Guile proper. So `scm_make_class_object', +`scm_make_subclass_object', `scm_metaclass_standard', and like symbols +from objects.h are no more. In the very unlikely case in which these +were useful to you, we urge you to contact guile-devel. -These functions have been deprecated since early 2005. +** GOOPS cleanups. -** scm_array_p has one argument, not two +GOOPS had a number of concepts that were relevant to the days of Tcl, +but not any more: operators and entities, mainly. These objects were +never documented, and it is unlikely that they were ever used. Operators +were a kind of generic specific to the Tcl support. Entities were +applicable structures, but were unusable; entities will come back in the +next alpha release, but with a less stupid name. -Use of the second argument produced a deprecation warning, so it is -unlikely that any code out there actually used this functionality. +** Faster bit operations. -** GOOPS documentation folded into Guile reference manual +The bit-twiddling operations `ash', `logand', `logior', and `logxor' now +have dedicated bytecodes. Guile is not just for symbolic computation, +it's for number crunching too. -GOOPS, Guile's object system, used to be documented in separate manuals. -This content is now included in Guile's manual directly. +** `inet-ntop' and `inet-pton' are always available. -** `libguile-i18n' has been merged into `libguile' +Guile now use a portable implementation of `inet_pton'/`inet_ntop', so +there is no more need to use `inet-aton'/`inet-ntoa'. The latter +functions are deprecated. -The C support code for `(ice-9 i18n)', which used to be in -`libguile-i18n', is now part of `libguile'. +** R6RS block comment support -** Last but not least, the `λ' macro can be used in lieu of `lambda' +Guile now supports R6RS nested block comments. The start of a comment is +marked with `#|', and the end with `|#'. + +** `guile-2' cond-expand feature + +To test if your code is running under Guile 2.0 (or its alpha releases), +test for the `guile-2' cond-expand feature. Like this: + + (cond-expand (guile-2 (eval-when (compile) + ;; This must be evaluated at compile time. + (fluid-set! current-reader my-reader))) + (guile + ;; Earlier versions of Guile do not have a + ;; separate compilation phase. + (fluid-set! current-reader my-reader))) + +** ABI harmonization + +`scm_search_path' now has the signature it did in 1.8, reverting an +incompatible change made in 1.9.0. + +** Compile-time warnings: -Warity-mismatch + +Guile can warn when you pass the wrong number of arguments to a +procedure. Pass the -Warity-mismatch on the `guile-tools compile' +command line, or add `#:warnings '(arity-mismatch)' to your `compile' +or `compile-file' invocation. + +** Guile is now built without `-Werror' by default + +Use the `--enable-error-on-warning' configure option to enable it. ** And of course, the usual collection of bugfixes @@ -160,6 +201,17 @@ documented in the manual. This will be fixed before 2.0. Pass the `--help' command-line option to these commands for more information. +** Guile now adds its install prefix to the LTDL_LIBRARY_PATH + +Users may now install Guile to nonstandard prefixes and just run +`/path/to/bin/guile', instead of also having to set LTDL_LIBRARY_PATH to +include `/path/to/lib'. + +** Guile's Emacs integration is now more keyboard-friendly + +Backtraces may now be disclosed with the keyboard in addition to the +mouse. + * Changes to Scheme functions and syntax ** Procedure removed: `the-environment' @@ -579,6 +631,30 @@ This decision may be revisited before the 2.0 release. Feedback welcome to guile-devel@gnu.org (subscription required) or bug-guile@gnu.org (no subscription required). +** `case-lambda' is now available in the default environment. + +The binding in the default environment is equivalent to the one from the +`(srfi srfi-16)' module. Use the srfi-16 module explicitly if you wish +to maintain compatibility with Guile 1.8 and earlier. + +** `lambda*' and `define*' are now available in the default environment + +As with `case-lambda', `(ice-9 optargs)' continues to be supported, for +compatibility purposes. No semantic change has been made (we hope). +Optional and keyword arguments now dispatch via special VM operations, +without the need to cons rest arguments, making them very fast. + +** New syntax: include-from-path. + +`include-from-path' is like `include', except it looks for its file in +the load path. It can be used to compile other files into a file. + +** New syntax: quasisyntax. + +`quasisyntax' is to `syntax' as `quasiquote' is to `quote'. See the R6RS +documentation for more information. Thanks to Andre van Tonder for the +implementation. + ** Unicode characters Unicode characters may be entered in octal format via e.g. `#\454', or @@ -651,6 +727,17 @@ There was an EBCDIC compile flag that altered some of the character processing. It appeared that full EBCDIC support was never completed and was unmaintained. +** Compile-time warnings: -Wunbound-variable, -Warity-mismatch. + +Guile can warn about potentially unbound free variables. Pass the +-Wunbound-variable on the `guile-tools compile' command line, or add +`#:warnings '(unbound-variable)' to your `compile' or `compile-file' +invocation. + +Guile can also warn when you pass the wrong number of arguments to a +procedure, with -Warity-mismatch, or `arity-mismatch' in the +`#:warnings' as above. + ** New macro type: syncase-macro XXX Need to decide whether to document this for 2.0, probably should: @@ -670,6 +757,39 @@ This slightly improves program startup times. See `cancel-thread', `set-thread-cleanup!', and `thread-cleanup'. +** GOOPS cleanups. + +GOOPS had a number of concepts that were relevant to the days of Tcl, +but not any more: operators and entities, mainly. These objects were +never documented, and it is unlikely that they were ever used. Operators +were a kind of generic specific to the Tcl support. Entities were +applicable structures, but were unusable; entities will come back in the +next alpha release, but with a less stupid name. + +** `inet-ntop' and `inet-pton' are always available. + +Guile now use a portable implementation of `inet_pton'/`inet_ntop', so +there is no more need to use `inet-aton'/`inet-ntoa'. The latter +functions are deprecated. + +** R6RS block comment support + +Guile now supports R6RS nested block comments. The start of a comment is +marked with `#|', and the end with `|#'. + +** `guile-2' cond-expand feature + +To test if your code is running under Guile 2.0 (or its alpha releases), +test for the `guile-2' cond-expand feature. Like this: + + (cond-expand (guile-2 (eval-when (compile) + ;; This must be evaluated at compile time. + (fluid-set! current-reader my-reader))) + (guile + ;; Earlier versions of Guile do not have a + ;; separate compilation phase. + (fluid-set! current-reader my-reader))) + ** Fix bad interaction between `false-if-exception' and stack-call. Exceptions thrown by `false-if-exception' were erronously causing the @@ -701,6 +821,12 @@ the variable. This was an error, and was fixed. As syntax-case is available by default, importing `(ice-9 syncase)' has no effect, and will trigger a deprecation warning. +** New readline history functions + +The (ice-9 readline) module now provides add-history, read-history, +write-history and clear-history, which wrap the corresponding GNU +History library functions. + ** Removed deprecated uniform array procedures: dimensions->uniform-array, list->uniform-array, array-prototype @@ -736,6 +862,36 @@ indicating length of the `scm_t_option' array. This procedure corresponds to Scheme's `module-public-interface'. +** Inline vector allocation + +Instead of having vectors point out into the heap for their data, their +data is now allocated inline to the vector object itself. The same is +true for bytevectors, by default, though there is an indirection +available which should allow for making a bytevector from an existing +memory region. + +** Removal of Guile's primitive object system. + +There were a number of pieces in `objects.[ch]' that tried to be a +minimal object system, but were never documented, and were quickly +obseleted by GOOPS' merge into Guile proper. So `scm_make_class_object', +`scm_make_subclass_object', `scm_metaclass_standard', and like symbols +from objects.h are no more. In the very unlikely case in which these +were useful to you, we urge you to contact guile-devel. + +** No future. + +Actually the future is still in the state that it was, is, and ever +shall be, Amen, except that `futures.c' and `futures.h' are no longer a +part of it. These files were experimental, never compiled, and would be +better implemented in Scheme anyway. In the future, that is. + +** Support for static allocation of strings, symbols, and subrs. + +Calls to snarfing CPP macros like SCM_DEFINE macro will now allocate +much of their associated data as static variables, reducing Guile's +memory footprint. + ** `scm_stat' has an additional argument, `exception_on_error' ** `scm_primitive_load_path' has an additional argument `exception_on_not_found' @@ -753,11 +909,6 @@ definition depends on the application's value for `_FILE_OFFSET_BITS'. These functions have been deprecated since early 2005. -** scm_array_p has one argument, not two - -Use of the second argument produced a deprecation warning, so it is -unlikely that any code out there actually used this functionality. - * Changes to the distribution ** Guile's license is now LGPLv3+ @@ -788,6 +939,14 @@ 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. +** Dynamically loadable extensions may be placed in a Guile-specific path + +Before, Guile only searched the system library paths for extensions +(e.g. /usr/lib), which meant that the names of Guile extensions had to +be globally unique. Installing them to a Guile-specific extensions +directory is cleaner. Use `pkg-config --variable=extensionsdir +guile-2.0' to get the location of the extensions directory. + ** New dependency: libgc See http://www.hpl.hp.com/personal/Hans_Boehm/gc/, for more information. @@ -805,6 +964,7 @@ Changes in 1.8.8 (since 1.8.7) ** Fix possible buffer overruns when parsing numbers ** Avoid clash with system setjmp/longjmp on IA64 +** Fix `wrong type arg' exceptions with IPv6 addresses Changes in 1.8.7 (since 1.8.6)