X-Git-Url: http://git.hcoop.net/bpt/guile.git/blobdiff_plain/13fac28218b42fc5408ce62b64ae3d09c95cd91e..5d20fd49fe53c2520e36e8bf983c7b7214b0ad2a:/NEWS diff --git a/NEWS b/NEWS index c20a01a36..1808dcb0e 100644 --- a/NEWS +++ b/NEWS @@ -1,10 +1,790 @@ Guile NEWS --- history of user-visible changes. -Copyright (C) 1996-2012 Free Software Foundation, Inc. +Copyright (C) 1996-2014 Free Software Foundation, Inc. See the end for copying conditions. Please send Guile bug reports to bug-guile@gnu.org. + +Changes in 2.1.1 (changes since the 2.0.x series): + +* Notable changes + +** Speed + +The biggest change in Guile 2.2 is a complete rewrite of its virtual +machine and compiler internals. The result is faster startup time, +better memory usage, and faster execution of user code. See the +"Performance improvements" section below for more details. + +** Better thread-safety + +This new release series takes the ABI-break opportunity to fix some +interfaces that were difficult to use correctly from multiple threads. +Notably, weak hash tables are now transparently thread-safe. Ports are +also thread-safe; see "New interfaces" below for details on the changes +to the C interface. + +** Off-main-thread finalization + +Following Guile 2.0.6's change to invoke finalizers via asyncs, Guile +2.2 takes the additional step of invoking finalizers from a dedicated +finalizer thread, if threads are enabled. This avoids concurrency +issues between finalizers and application code, and also speeds up +finalization. + +** Better locale support in Guile scripts + +When Guile is invoked directly, either from the command line or via a +hash-bang line (e.g. "#!/usr/bin/guile"), it now installs the current +locale via a call to `(setlocale LC_ALL "")'. For users with a unicode +locale, this makes all ports unicode-capable by default, without the +need to call `setlocale' in your program. This behavior may be +controlled via the GUILE_INSTALL_LOCALE environment variable; see the +manual for more. + +** Complete Emacs-compatible Elisp implementation + +Thanks to the work of BT Templeton, Guile's Elisp implementation is now +fully Emacs-compatible, implementing all of Elisp's features and quirks +in the same way as the editor we know and love. + +** Dynamically expandable stacks + +Instead of allocating fixed stack sizes for running Scheme code, Guile +now starts off each thread with only one or two pages of stack, and +expands it dynamically as needed. Guile will throw an exception for +stack overflows at some user-defined limit. See the manual for +documentation on the GUILE_STACK_SIZE environment variable. + +This allows users to write programs that use the stack as a data +structure for pending computations, as it was meant to be, without +reifying that data out to the heap. Where you would previously make a +loop that collect its results in reverse order only to re-reverse them +at the end, now you can just recurse without worrying about stack +overflows. + +* Performance improvements + +** Faster programs via new virtual machine + +Guile's new virtual machine compiles programs to instructions for a new +virtual machine. The new virtual machine's instructions can address +their source and destination operands by "name" (slot). This makes +access to named temporary values much faster, and removes a lot of +value-shuffling that the old virtual machine had to do. The end result +is that loop-heavy code can be two or three times as fast with Guile 2.2 +as in 2.0. Your mileage may vary, of course; see "A Virtual Machine for +Guile" in the manual for the nitties and the gritties. + +** Better startup time, memory usage with ELF object file format + +Guile now uses the standard ELF format for its compiled code. (Guile +has its own loader and linker, so this does not imply a dependency on +any particular platform's ELF toolchain.) The benefit is that Guile is +now able to statically allocate more data in the object files. ELF also +enables more sharing of data between processes, and decreases startup +time (about 40% faster than the already fast startup of the Guile 2.0 +series). Guile also uses DWARF for some of its debugging information. +Much of the debugging information can be stripped from the object files +as well. See "Object File Format" in the manual, for full details. + +** Better optimizations via compiler rewrite + +Guile's compiler now uses a Continuation-Passing Style (CPS) +intermediate language, allowing it to reason easily about temporary +values and control flow. Examples of optimizations that this permits +are optimal contification, dead code elimination, parallel moves with at +most one temporary, and allocation of stack slots using precise liveness +information. For more, see "Continuation-Passing Style" in the manual. + +** Faster interpreter + +Combined with a number of optimizations to the interpreter itself, +simply compiling `eval.scm' with the new compiler yields an interpreter +that is consistently two or three times faster than the one in Guile +2.0. + +** Allocation-free dynamic stack + +Guile now implements the dynamic stack with an actual stack instead of a +list of heap objects, avoiding most allocation. This speeds up prompts, +the `scm_dynwind_*' family of functions, fluids, and `dynamic-wind'. + +** Optimized UTF-8 and Latin-1 ports, symbols, and strings + +Guile 2.2 is faster at reading and writing UTF-8 and Latin-1 strings +from ports, and at converting symbols and strings to and from these +encodings. + +** Optimized hash functions + +Guile 2.2 now uses Bob Jenkins' `hashword2' (from his `lookup3.c') for +its string hash, and Thomas Wang's integer hash function for `hashq' and +`hashv'. These functions produce much better hash values across all +available fixnum bits. + +* New interfaces + +** New `cond-expand' feature: `guile-2.2' + +Use this feature if you need to check for Guile 2.2 from Scheme code. + +** New predicate: `nil?' + +See "Nil" in the manual. + +** New compiler modules + +Since the compiler was rewritten, there are new modules for the back-end +of the compiler and the low-level loader and introspection interfaces. +See the "Guile Implementation" chapter in the manual for all details. + +** New functions: `scm_to_intptr_t', `scm_from_intptr_t' +** New functions: `scm_to_uintptr_t', `scm_from_uintptr_t' + +See XXX in the manual. + +** New thread-safe port API + +For details on `scm_c_make_port', `scm_c_make_port_with_encoding', +`scm_c_lock_port', `scm_c_try_lock_port', `scm_c_unlock_port', +`scm_c_port_type_ref', `scm_c_port_type_add_x', `SCM_PORT_DESCRIPTOR', +and `scm_dynwind_lock_port', see XXX. + +There is now a routine to atomically adjust port "revealed counts". See +XXX for more on `scm_adjust_port_revealed_x' and +`adjust-port-revealed!', + +All other port API now takes the lock on the port if needed. There are +some C interfaces if you know that you don't need to take a lock; see +XXX for details on `scm_get_byte_or_eof_unlocked', +`scm_peek_byte_or_eof_unlocked' `scm_c_read_unlocked', +`scm_getc_unlocked' `scm_unget_byte_unlocked', `scm_ungetc_unlocked', +`scm_ungets_unlocked', `scm_fill_input_unlocked' `scm_putc_unlocked', +`scm_puts_unlocked', and `scm_lfwrite_unlocked'. + +** New inline functions: `scm_new_smob', `scm_new_double_smob' + +These can replace many uses of SCM_NEWSMOB, SCM_RETURN_NEWSMOB2, and the +like. See XXX in the manual, for more. + +** New low-level type accessors + +For more on `SCM_HAS_TYP7', `SCM_HAS_TYP7S', `SCM_HAS_TYP16', see XXX. + +`SCM_HEAP_OBJECT_P' is now an alias for the inscrutable `SCM_NIMP'. + +`SCM_UNPACK_POINTER' and `SCM_PACK_POINTER' are better-named versions of +the old `SCM2PTR' and `PTR2SCM'. Also, `SCM_UNPACK_POINTER' yields a +void*. + +** `scm_c_weak_vector_ref', `scm_c_weak_vector_set_x' + +Weak vectors can now be accessed from C using these accessors. + +** , standard-vtable-fields + +See "Structures" in the manual for more on these + +** Convenience utilities for ports and strings. + +See XXX for more on `scm_from_port_string', `scm_from_port_stringn', +`scm_to_port_string', and `scm_to_port_stringn'. + +** New expressive PEG parser + +See "PEG Parsing" in the manual for more. Thanks to Michael Lucy for +originally writing these, and to Noah Lavine for integration work. + +* Incompatible changes + +** ASCII is not ISO-8859-1 + +In Guile 2.0, if a user set "ASCII" or "ANSI_X3.4-1968" as the encoding +of a port, Guile would treat it as ISO-8859-1. While these encodings +are the same for codepoints 0 to 127, ASCII does not extend past that +range, whereas ISO-8859-1 goes up to 255. Guile 2.2 no longer treats +ASCII as ISO-8859-1. This is likely to be a problem only if the user's +locale is set to ASCII, and the user or a program writes non-ASCII +codepoints to a port. + +** String ports default to UTF-8 + +Guile 2.0 would use the `%default-port-encoding' when creating string +ports. This resulted in ports that could only accept a subset of valid +characters, which was surprising to users. Now string ports default to +the UTF-8 encoding. Sneaky users can still play encoding conversion +games with string ports by explicitly setting the encoding of a port +after it is open. See "Ports" in the manual for more. + +** `scm_from_stringn' and `scm_to_stringn' encoding arguments are never NULL + +These functions now require a valid `encoding' argument, and will abort +if given `NULL'. + +** All r6rs ports are both textual and binary + +Because R6RS ports are a thin layer on top of Guile's ports, and Guile's +ports are both textual and binary, Guile's R6RS ports are also both +textual and binary, and thus both kinds have port transcoders. This is +an incompatibility with respect to R6RS. + +** Vtable hierarchy changes + +In an attempt to make Guile's structure and record types integrate +better with GOOPS by unifying the vtable hierarchy, `make-vtable-vtable' +is now deprecated. Instead, users should just use `make-vtable' with +appropriate arguments. See "Structures" in the manual for all of the +details. As such, `record-type-vtable' and `%condition-type-vtable' now +have a parent vtable and are no longer roots of the vtable hierarchy. + +** Syntax parameters are a distinct type + +Guile 2.0's transitional implementation of `syntax-parameterize' was +based on the `fluid-let-syntax' interface inherited from the psyntax +expander. This interface allowed any binding to be dynamically rebound +-- even bindings like `lambda'. This is no longer the case in Guile +2.2. Syntax parameters must be defined via `define-syntax-parameter', +and only such bindings may be parameterized. See "Syntax Parameters" in +the manual for more. + +** Defined identifiers scoped in the current module + +Sometimes Guile's expander would attach incorrect module scoping +information for top-level bindings made by an expansion. For example, +given the following R6RS library: + + (library (defconst) + (export defconst) + (import (guile)) + (define-syntax-rule (defconst name val) + (begin + (define t val) + (define-syntax-rule (name) t)))) + +Attempting to use it would produce an error: + + (import (defconst)) + (defconst foo 42) + (foo) + =| Unbound variable: t + +It wasn't clear that we could fix this in Guile 2.0 without breaking +someone's delicate macros, so the fix is only coming out now. + +** Pseudo-hygienically rename macro-introduced bindings + +Bindings introduced by macros, like `t' in the `defconst' example above, +are now given pseudo-fresh names. This allows + + (defconst foo 42) + (defconst bar 37) + +to introduce different bindings for `t'. These pseudo-fresh names are +made in such a way that if the macro is expanded again, for example as +part of a simple recompilation, the introduced identifiers get the same +pseudo-fresh names. See "Hygiene and the Top-Level" in the manual, for +details. + +** Fix literal matching for module-bound literals + +`syntax-rules' and `syntax-case' macros can take a set of "literals": +bound or unbound keywords that the syntax matcher treats specially. +Before, literals were always matched symbolically (by name). Now they +are matched by binding. This allows literals to be reliably bound to +values, renamed by imports or exports, et cetera. See "Syntax-rules +Macros" in the manual for more on literals. + +** `dynamic-wind' doesn't check that guards are thunks + +Checking that the dynamic-wind out-guard procedure was actually a thunk +before doing the wind was slow, unreliable, and not strictly needed. + +** All deprecated code removed + +All code deprecated in Guile 2.0 has been removed. See older NEWS, and +check that your programs can compile without linker warnings and run +without runtime warnings. See "Deprecation" in the manual. + +** Remove miscellaneous unused interfaces + +We have removed accidentally public, undocumented interfaces that we +think are not used, and not useful. This includes `scm_markstream', +`SCM_FLUSH_REGISTER_WINDOWS', `SCM_THREAD_SWITCHING_CODE', `SCM_FENCE', +`scm_call_generic_0', `scm_call_generic_1', `scm_call_generic_2' +`scm_call_generic_3', `scm_apply_generic', and `scm_program_source'. +`scm_async_click' was renamed to `scm_async_tick', and `SCM_ASYNC_TICK' +was made private (use `SCM_TICK' instead). + +** Many internal compiler / VM changes + +As the compiler and virtual machine were re-written, there are many +changes in the back-end of Guile to interfaces that were introduced in +Guile 2.0. These changes are only only of interest if you wrote a +language on Guile 2.0 or a tool using Guile 2.0 internals. If this is +the case, drop by the IRC channel to discuss the changes. + +** Defining a SMOB or port type no longer mucks exports of `(oop goops)' + +It used to be that defining a SMOB or port type added an export to +GOOPS, for the wrapper class of the smob type. This violated +modularity, though, so we have removed this behavior. + +** Bytecode replaces objcode as a target language + +One way in which people may have used details of Guile's runtime in +Guile 2.0 is in compiling code to thunks for later invocation. Instead +of compiling to objcode and then calling `make-program', now the way to +do it is to compile to `bytecode' and then call `load-thunk-from-memory' +from `(system vm loader)'. + +** Remove weak pairs. + +Weak pairs were not safe to access with `car' and `cdr', and so were +removed. + +** Remove weak alist vectors. + +Use weak hash tables instead. + +* New deprecations + +** SCM_WTA_DISPATCH_0, SCM_WTA_DISPATCH_1, SCM_WTA_DISPATCH_2, SCM_WTA_DISPATCH_N +** SCM_GASSERT0, SCM_GASSERT1, SCM_GASSERT2, SCM_GASSERTn +** SCM_WTA_DISPATCH_1_SUBR + +These macros were used in dispatching primitive generics. They can be +replaced by using C functions (the same name but in lower case), if +needed, but this is a hairy part of Guile that perhaps you shouldn't be +using. + +* Changes to the distribution + +** New minor version + +The "effective version" of Guile is now 2.2, which allows parallel +installation with other effective versions (for example, the older Guile +2.0). See "Parallel Installations" in the manual for full details. +Notably, the `pkg-config' file is now `guile-2.2'. + +** Bump required libgc version to 7.2, released March 2012. + +** The readline extension is now installed in the extensionsdir + +The shared library that implements Guile's readline extension is no +longer installed to the libdir. This change should be transparent to +users, but packagers may be interested. + + + +Changes in 2.0.9 (since 2.0.7): + +Note: 2.0.8 was a brown paper bag release that was never announced, but +some mirrors may have picked it up. Please do not use it. + +* Notable changes + +** New keyword arguments for procedures that open files + +The following procedures that open files now support keyword arguments +to request binary I/O or to specify the character encoding for text +files: `open-file', `open-input-file', `open-output-file', +`call-with-input-file', `call-with-output-file', `with-input-from-file', +`with-output-to-file', and `with-error-to-file'. + +It is also now possible to specify whether Guile should scan files for +Emacs-style coding declarations. This scan was done by default in +versions 2.0.0 through 2.0.7, but now must be explicitly requested. + +See "File Ports" in the manual for details. + +** Rewritten guile.m4 + +The `guile.m4' autoconf macros have been rewritten to use `guild' and +`pkg-config' instead of the deprecated `guile-config' (which itself +calls pkg-config). + +There is also a new macro, `GUILE_PKG', which allows packages to select +the version of Guile that they want to compile against. See "Autoconf +Macros" in the manual, for more information. + +** Better Windows support + +Guile now correctly identifies absolute paths on Windows (MinGW), and +creates files on that platform according to its path conventions. See +"File System" in the manual, for all details. + +In addition, the new Gnulib imports provide `select' and `poll' on +Windows builds. + +As an incompatible change, systems that are missing were +previously provided a public `scm_std_select' C function that defined a +version of `select', but unhappily it also provided its own incompatible +definitions for FD_SET, FD_ZERO, and other system interfaces. Guile +should not be setting these macros in public API, so this interface was +removed on those plaforms (basically only MinGW). + +** Numerics improvements + +`number->string' now reliably outputs enough digits to produce the same +number when read back in. Previously, it mishandled subnormal numbers +(printing them as "#.#"), and failed to distinguish between some +distinct inexact numbers, e.g. 1.0 and (+ 1.0 (expt 2.0 -52)). These +problems had far-reaching implications, since the compiler uses +`number->string' to serialize numeric constants into .go files. + +`sqrt' now produces exact rational results when possible, and handles +very large or very small numbers more robustly. + +A number (ahem) of operations involving exact rationals have been +optimized, most notably `integer-expt' and `expt'. + +`exact->inexact' now performs correct IEEE rounding. + +** New optimizations + +There were a number of improvements to the partial evaluator, allowing +complete reduction of forms such as: + + ((let ((_ 10)) (lambda () _))) + + ((lambda _ _)) + + (apply (lambda _ _) 1 2 3 '(4)) + + (call-with-values (lambda () (values 1 2)) (lambda _ _)) + +`string-join' now handles huge lists efficiently. + +`get-bytevector-some' now uses buffered input, which is much faster. + +Finally, `array-ref', `array-set!' on arrays of rank 1 or 2 is now +faster, because it avoids building a rest list. Similarly, the +one-argument case of `array-for-each' and `array-map!' has been +optimized, and `array-copy!' and `array-fill!' are faster. + +** `peek-char' no longer consumes EOF + +As required by the R5RS, if `peek-char' returns EOF, then the next read +will also return EOF. Previously `peek-char' would consume the EOF. +This makes a difference for terminal devices where it is possible to +read past an EOF. + +** Gnulib update + +Guile's copy of Gnulib was updated to v0.0-7865-ga828bb2. The following +modules were imported from Gnulib: select, times, pipe-posix, fstat, +getlogin, poll, and c-strcase. + +** `include' resolves relative file names relative to including file + +Given a relative file name, `include' will look for it relative to the +directory of the including file. This harmonizes the behavior of +`include' with that of `load'. + +** SLIB compatibility restored + +Guile 2.0.8 is now compatible with SLIB. You will have to use a +development version of SLIB, however, until a new version of SLIB is +released. + +** Better ,trace REPL command + +Sometimes the ,trace output for nested function calls could overflow the +terminal width, which wasn't useful. Now there is a limit to the amount +of space the prefix will take. See the documentation for ",trace" for +more information. + +** Better docstring syntax supported for `case-lambda' + +Docstrings can now be placed immediately after the `case-lambda' or +`case-lambda*' keyword. See "Case-lambda" in the manual. + +** Improved handling of Unicode byte order marks + +See "BOM Handling" in the manual for details. + +** Update predefined character sets to Unicode 6.2 + +** GMP 4.2 or later required + +Guile used to require GMP at least version 4.1 (released in May 2002), +and now requires at least version 4.2 (released in March 2006). + +* Manual updates + +** Better SXML documentation + +The documentation for SXML modules was much improved, though there is +still far to go. See "SXML" in manual. + +** Style updates + +Use of "iff" was replaced with standard English. Keyword arguments are +now documented consistently, along with their default values. + +** An end to the generated-documentation experiment + +When Guile 2.0 imported some modules from Guile-Lib, they came with a +system that generated documentation from docstrings and module +commentaries. This produced terrible documentation. We finally bit the +bullet and incorporated these modules into the main text, and will be +improving them manually over time, as is the case with SXML. Help is +appreciated. + +** New documentation + +There is now documentation for `scm_array_type', and `scm_array_ref', as +well as for the new `array-length' / 'scm_c_array_length' / +`scm_array_length' functions. `array-in-bounds?' has better +documentation as well. The `program-arguments-alist' and +`program-lambda-list' functions are now documented, as well as `and=>', +`exit', and `quit'. The (system repl server) module is now documented +(see REPL Servers). Finally, the GOOPS class hierarchy diagram has been +regenerated for the web and print output formats. + +* New deprecations + +** Deprecate generalized vector interface + +The generalized vector interface, introduced in 1.8.0, is simply a +redundant, verbose interface to arrays of rank 1. `array-ref' and +similar functions are entirely sufficient. Thus, +`scm_generalized_vector_p', `scm_generalized_vector_length', +`scm_generalized_vector_ref', `scm_generalized_vector_set_x', and +`scm_generalized_vector_to_list' are now deprecated. + +** Deprecate SCM_CHAR_CODE_LIMIT and char-code-limit + +These constants were defined to 256, which is not the highest codepoint +supported by Guile. Given that they were useless and incorrect, they +have been deprecated. + +** Deprecate `http-get*' + +The new `#:streaming?' argument to `http-get' subsumes the functionality +of `http-get*' (introduced in 2.0.7). Also, the `#:extra-headers' +argument is deprecated in favor of `#:headers'. + +** Deprecate (ice-9 mapping) + +This module, present in Guile since 1996 but never used or documented, +has never worked in Guile 2.0. It has now been deprecated and will be +removed in Guile 2.2. + +** Deprecate undocumented array-related C functions + +These are `scm_array_fill_int', `scm_ra_eqp', `scm_ra_lessp', +`scm_ra_leqp', `scm_ra_grp', `scm_ra_greqp', `scm_ra_sum', +`scm_ra_product', `scm_ra_difference', `scm_ra_divide', and +`scm_array_identity'. + +* New interfaces + +** SRFI-41 Streams + +See "SRFI-41" in the manual. + +** SRFI-45 exports `promise?' + +SRFI-45 now exports a `promise?' procedure that works with its promises. +Also, its promises now print more nicely. + +** New HTTP client procedures + +See "Web Client" for documentation on the new `http-head', `http-post', +`http-put', `http-delete', `http-trace', and `http-options' procedures, +and also for more options to `http-get'. + +** Much more capable `xml->sxml' + +See "Reading and Writing XML" for information on how the `xml->sxml' +parser deals with namespaces, processed entities, doctypes, and literal +strings. Incidentally, `current-ssax-error-port' is now a parameter +object. + +** New procedures for converting strings to and from bytevectors + +See "Representing Strings as Bytes" for documention on the new `(ice-9 +iconv)' module and its `bytevector->string' and `string->bytevector' +procedures. + +** Escape continuations with `call/ec' and `let/ec' + +See "Prompt Primitives". + +** New procedures to read all characters from a port + +See "Line/Delimited" in the manual for documentation on `read-string' + and `read-string!'. + +** New procedure `sendfile' + +See "File System". + +** New procedure `unget-bytevector' + +See "R6RS Binary Input". + +** New C helper: `scm_c_bind_keyword_arguments' + +See "Keyword Procedures". + +** New command-line arguments: `--language' and `-C' + +See "Command-line Options" in the manual. + +** New environment variables: `GUILE_STACK_SIZE', `GUILE_INSTALL_LOCALE' + +See "Environment Variables". + +** New procedures for dealing with file names + +See "File System" for documentation on `system-file-name-convention', +`file-name-separator?', `absolute-file-name?', and +`file-name-separator-string'. + +** `array-length', an array's first dimension + +See "Array Procedures". + +** `hash-count', for hash tables + +See "Hash Tables". + +** `round-ash', a bit-shifting operator that rounds on right-shift + +See "Bitwise Operations". + +** New foreign types: `ssize_t', `ptrdiff_t' + +See "Foreign Types". + +** New C helpers: `scm_from_ptrdiff_t', `scm_to_ptrdiff_t' + +See "Integers". + +** Socket option `SO_REUSEPORT' now available from Scheme + +If supported on the platform, `SO_REUSEPORT' is now available from +Scheme as well. See "Network Sockets and Communication". + +** `current-language' in default environment + +Previously defined only in `(system base language)', `current-language' +is now defined in the default environment, and is used to determine the +language for the REPL, and for `compile-and-load'. + +** New procedure: `fluid->parameter' + +See "Parameters", for information on how to convert a fluid to a +parameter. + +** New `print' REPL option + +See "REPL Commands" in the manual for information on the new +user-customizable REPL printer. + +** New variable: %site-ccache-dir + +The "Installing Site Packages" and "Build Config" manual sections now +refer to this variable to describe where users should install their +`.go' files. + +* Build fixes + +** Fix compilation against libgc 7.3. +** Fix cross-compilation of `c-tokenize.o'. +** Fix warning when compiling against glibc 2.17. +** Fix documentation build against Texinfo 5.0. +** Fix building Guile from a directory with non-ASCII characters. +** Fix native MinGW build. +** Fix --disable-posix build. +** Fix MinGW builds with networking, POSIX, and thread support. + +* Bug fixes + +** Fix inexact number printer. + (http://bugs.gnu.org/13757) +** Fix infinite loop when parsing optional-argument short options (SRFI-37). + (http://bugs.gnu.org/13176) +** web: Support non-GMT date headers in the HTTP client. + (http://bugs.gnu.org/13544) +** web: support IP-literal (IPv6 address) in Host header. +** Avoid stack overflows with `par-map' and nested futures in general. + (http://bugs.gnu.org/13188) +** Peek-char no longer consumes EOF. + (http://bugs.gnu.org/12216) +** Avoid swallowing multiple EOFs in R6RS binary-input procedures. +** A fork when multiple threads are running will now print a warning. +** Allow for spurious wakeups from pthread_cond_wait. + (http://bugs.gnu.org/10641) +** Warn and ignore module autoload failures. + (http://bugs.gnu.org/12202) +** Use chmod portably in (system base compile). + (http://bugs.gnu.org/10474) +** Fix response-body-port for HTTP responses without content-length. + (http://bugs.gnu.org/13857) +** Allow case-lambda expressions with no clauses. + (http://bugs.gnu.org/9776) +** Improve standards conformance of string->number. + (http://bugs.gnu.org/11887) +** Support calls and tail-calls with more than 255 formals. +** ,option evaluates its right-hand-side. + (http://bugs.gnu.org/13076) +** Structs with tail arrays are not simple. + (http://bugs.gnu.org/12808) +** Make `SCM_LONG_BIT' usable in preprocessor conditionals. + (http://bugs.gnu.org/13848) +** Fix thread-unsafe lazy initializations. +** Allow SMOB mark procedures to be called from parallel markers. + (http://bugs.gnu.org/13611) +** Fix later-bindings-win logic in with-fluids. + (http://bugs.gnu.org/13843) +** Fix duplicate removal of with-fluids. + (http://bugs.gnu.org/13838) +** Support calling foreign functions of 10 arguments or more. + (http://bugs.gnu.org/13809) +** Let reverse! accept arbitrary types as second argument. + (http://bugs.gnu.org/13835) +** Recognize the `x86_64.*-gnux32' triplet. +** Check whether a triplet's OS part specifies an ABI. +** Recognize mips64* as having 32-bit pointers by default. +** Use portable sed constructs. + (http://bugs.gnu.org/14042) +** Remove language/glil/decompile-assembly.scm. + (http://bugs.gnu.org/10622) +** Use O_BINARY in `copy-file', `load-objcode', `mkstemp'. +** Use byte-oriented functions in `get-bytevector*'. +** Fix abort when iconv swallows BOM from UTF-16 or UTF-32 stream. +** Fix compilation of functions with more than 255 local variables. +** Fix `getgroups' for when zero supplementary group IDs exist. +** Allow (define-macro name (lambda ...)). +** Various fixes to the (texinfo) modules. +** guild: Gracefully handle failures to install the locale. +** Fix format string warnings for ~!, ~|, ~/, ~q, ~Q, and ~^. + (http://bugs.gnu.org/13485) +** Fix source annotation bug in psyntax 'expand-body'. +** Ecmascript: Fix conversion to boolean for non-numbers. +** Use case-insensitive comparisons for encoding names. +** Add missing cond-expand feature identifiers. +** A failure to find a module's file does not prevent future loading. +** Many (oop goops save) fixes. +** `http-get': don't shutdown write end of socket. + (http://bugs.gnu.org/13095) +** Avoid signed integer overflow in scm_product. +** http: read-response-body always returns bytevector or #f, never EOF. +** web: Correctly detect "No route to host" conditions. +** `system*': failure to execvp no longer leaks dangling processes. + (http://bugs.gnu.org/13166) +** More sensible case-lambda* dispatch. + (http://bugs.gnu.org/12929) +** Do not defer expansion of internal define-syntax forms. + (http://bugs.gnu.org/13509) + + + Changes in 2.0.7 (since 2.0.6): * Notable changes @@ -41,7 +821,17 @@ future to completed. This allows all threads to be kept busy, and was made possible by the use of delimited continuations (see the manual for details.) -Consequently, `par-map' has been rewritten and can now use all cores. +Consequently, `par-map' and `par-for-each' have been rewritten and can +now use all cores. + +** `GUILE_LOAD_PATH' et al can now add directories to the end of the path + +`GUILE_LOAD_PATH' and `GUILE_LOAD_COMPILED_PATH' can now be used to add +directories to both ends of the load path. If the special path +component `...' (ellipsis) is present in these environment variables, +then the default path is put in place of the ellipsis, otherwise the +default path is placed at the end. See "Environment Variables" in the +manual for details. ** `load-in-vicinity' search for `.go' files in `%load-compiled-path' @@ -61,10 +851,10 @@ ways. First, the `LD_LIBRARY_PATH' modification would be visible to sub-processes, and would also affect future calls to `dlopen', which could lead to subtle bugs in the application or sub-processes. Second, -when the installation prefix is /usr/local, the `LD_LIBRARY_PATH' -modification would typically end up inserting /usr/lib before -/usr/local/lib in the search path, which is often the opposite of -system-wide settings such as `ld.so.conf'. +when the installation prefix is /usr, the `LD_LIBRARY_PATH' modification +would typically end up inserting /usr/lib before /usr/local/lib in the +search path, which is often the opposite of system-wide settings such as +`ld.so.conf'. Both issues have now been fixed. @@ -77,10 +867,10 @@ Programs should instead use `make-vtable' and `'. These recently introduced warnings have been documented and are now enabled by default when auto-compiling. -** Optimize calls to `equal?' with a constant argument +** Optimize calls to `equal?' or `eqv?' with a constant argument -The compiler simplifies calls to `equal?' with a constant argument to -use `eq?' or `eqv?' instead, when applicable. +The compiler simplifies calls to `equal?' or `eqv?' with a constant +argument to use `eq?' instead, when applicable. * Manual updates @@ -130,10 +920,12 @@ See the manual for details. The `string-split' procedure can now be given a SRFI-14 character set or a predicate, instead of just a character. -** R6RS SRFI support --- FIXME +** R6RS SRFI support -5d7c55b R6RS srfi library names should ignore first identifier after the :n -acc1d8e Preserve additional R6RS library name components after srfi :n +Previously, in R6RS modules, Guile incorrectly ignored components of +SRFI module names after the SRFI number, making it impossible to specify +sub-libraries. This release corrects this, bringing us into accordance +with SRFI 97. ** `define-public' is no a longer curried definition by default