X-Git-Url: https://git.hcoop.net/bpt/guile.git/blobdiff_plain/1e56cff2337d4f6b0a9f3363ea1cb3ac5287a6ed..9be8a338acf82d387846ea30819be75a9098048b:/NEWS diff --git a/NEWS b/NEWS index 4f0c22040..f5760cf38 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,175 @@ See the end for copying conditions. Please send Guile bug reports to bug-guile@gnu.org. +Changes in 2.0.2 (since 2.0.1): + +* Notable changes + +** `guile-tools' renamed to `guild' + +The new name is shorter. Its intended future use is for a CPAN-like +system for Guile wizards and journeyfolk to band together to share code; +hence the name. `guile-tools' is provided as a backward-compatible +symbolic link. See "Using Guile Tools" in the manual, for more. + +** New control operators: `shift' and `reset' + +See "Shift and Reset" in the manual, for more information. + +** `while' as an expression + +Previously the return value of `while' was unspecified. Now its +values are specified both in the case of normal termination, and via +termination by invoking `break', possibly with arguments. See "while +do" in the manual for more. + +** Disallow access to handles of weak hash tables + +`hash-get-handle' and `hash-create-handle!' are no longer permitted to +be called on weak hash tables, because the fields in a weak handle could +be nulled out by the garbage collector at any time, but yet they are +otherwise indistinguishable from pairs. Use `hash-ref' and `hash-set!' +instead. + +** More precision for `get-internal-run-time', `get-internal-real-time' + +On 64-bit systems which support POSIX clocks, Guile's internal timing +procedures offer nanosecond resolution instead of the 10-millisecond +resolution previously available. 32-bit systems now use 1-millisecond +timers. + +** Guile now measures time spent in GC + +`gc-stats' now returns a meaningful value for `gc-time-taken'. + +** Add `gcprof' + +The statprof profiler now exports a `gcprof' procedure, driven by the +`after-gc-hook', to see which parts of your program are causing GC. Let +us know if you find it useful. + +** `map', `for-each' and some others now implemented in Scheme + +We would not mention this in NEWS, as it is not a user-visible change, +if it were not for one thing: `map' and `for-each' are no longer +primitive generics. Instead they are normal bindings, which can be +wrapped by normal generics. This fixes some modularity issues between +core `map', SRFI-1 `map', and GOOPS. + +Also it's pretty cool that we can do this without a performance impact. + +** Add `scm_peek_byte_or_eof'. + +This helper is like `scm_peek_char_or_eof', but for bytes instead of +full characters. + +** Implement #:stop-at-first-non-option option for getopt-long + +See "getopt-long Reference" in the manual, for more information. + +** Improve R6RS conformance for conditions in the I/O libraries + +The `(rnrs io simple)' module now raises the correct R6RS conditions in +error cases. `(rnrs io ports)' is also more correct now, though it is +still a work in progress. + +** All deprecated routines emit warnings + +A few deprecated routines were lacking deprecation warnings. This has +been fixed now. + +* Speed improvements + +** Constants in compiled code now share state better + +Constants with shared state, like `("foo")' and `"foo"', now share state +as much as possible, in the entire compilation unit. This cuts compiled +`.go' file sizes in half, generally, and speeds startup. + +** VLists: optimize `vlist-fold-right', and add `vhash-fold-right' + +These procedures are now twice as fast as they were. + +** UTF-8 ports to bypass `iconv' entirely + +This reduces memory usage in a very common case. + +** Compiler speedups + +The compiler is now about 40% faster. (Note that this is only the case +once the compiler is itself compiled, so the build still takes as long +as it did before.) + +** VM speed tuning + +Some assertions that were mostly useful for sanity-checks on the +bytecode compiler are now off for both "regular" and "debug" engines. +This together with a fix to cache a TLS access and some other tweaks +improve the VM's performance by about 20%. + +** SRFI-1 list-set optimizations + +lset-adjoin and lset-union now have fast paths for eq? sets. + +** `memq', `memv' optimizations + +These procedures are now at least twice as fast than in 2.0.1. + +* Deprecations + +** Deprecate scm_whash API + +`scm_whash_get_handle', `SCM_WHASHFOUNDP', `SCM_WHASHREF', +`SCM_WHASHSET', `scm_whash_create_handle', `scm_whash_lookup', and +`scm_whash_insert' are now deprecated. Use the normal hash table API +instead. + +** Deprecate scm_struct_table + +`SCM_STRUCT_TABLE_NAME', `SCM_SET_STRUCT_TABLE_NAME', +`SCM_STRUCT_TABLE_CLASS', `SCM_SET_STRUCT_TABLE_CLASS', +`scm_struct_table', and `scm_struct_create_handle' are now deprecated. +These routines formed part of the internals of the map between structs +and classes. + +** Deprecate scm_internal_dynamic_wind + +The `scm_t_inner' type and `scm_internal_dynamic_wind' are deprecated, +as the `scm_dynwind' API is better, and this API encourages users to +stuff SCM values into pointers. + +** Deprecate scm_immutable_cell, scm_immutable_double_cell + +These routines are deprecated, as the GC_STUBBORN API doesn't do +anything any more. + +* Manual updates + +Andreas Rottman kindly transcribed the missing parts of the `(rnrs io +ports)' documentation from the R6RS documentation. Thanks Andreas! + +* Bugs fixed + +** Fix double-loading of script in -ds case +** -x error message fix +** iconveh-related cross-compilation fixes +** Fix small integer return value packing on big endian machines. +** Fix hash-set! in weak-value table from non-immediate to immediate +** Fix call-with-input-file & relatives for multiple values +** Fix `hash' for inf and nan +** Fix libguile internal type errors caught by typing-strictness==2 +** Fix compile error in MinGW fstat socket detection +** Fix generation of auto-compiled file names on MinGW +** Fix multithreaded access to internal hash tables +** Emit a 1-based line number in error messages +** Fix define-module ordering +** Fix several POSIX functions to use the locale encoding +** Add type and range checks to the complex generalized vector accessors +** Fix unaligned accesses for bytevectors of complex numbers +** Fix '(a #{.} b) +** Fix erroneous VM stack overflow for canceled threads + + Changes in 2.0.1 (since 2.0.0): * Notable changes @@ -90,7 +259,7 @@ Guile 2.0.0 shipped with headers that, if configured with pthread support, would re-define `pthread_create', `pthread_join', and other API to redirect to the BDW-GC wrappers, `GC_pthread_create', etc. This was unintended, and not necessary: because threads must enter Guile with -scm_with_guile, Guile can handle thread registration itself, without +`scm_with_guile', Guile can handle thread registration itself, without needing to make the GC aware of all threads. This oversight has been fixed. @@ -128,7 +297,7 @@ interpreted as starting an R6RS hex escape. This is backward compatible because the symbol printer would never produce a "\x" before. The printer also works better too. -** Added --force-auto-compile option +** Added `--fresh-auto-compile' option This allows a user to invalidate the auto-compilation cache. It's usually not needed. See "Compilation" in the manual, for a discussion. @@ -147,12 +316,13 @@ The humble `error' SRFI now has an entry in the manual. * New modules -** `(ice-9 binary-ports)': XXX, in the manual +** `(ice-9 binary-ports)': "R6RS I/O Ports", in the manual ** `(ice-9 eval-string)': "Fly Evaluation", in the manual +** `(ice-9 command-line)', not documented yet * Bugs fixed -** Fixed iconv_t memory leak on close-port +** Fixed `iconv_t' memory leak on close-port ** Fixed some leaks with weak hash tables ** Export `vhash-delq' and `vhash-delv' from `(ice-9 vlist)' ** `after-gc-hook' works again @@ -198,6 +368,10 @@ The humble `error' SRFI now has an entry in the manual. ** Fix optional second arg to R6RS log function ** Fix R6RS `assert' to return true value. ** Fix fencepost error when seeking in bytevector input ports +** Gracefully handle `setlocale' errors when starting the REPL +** Improve support of the `--disable-posix' configure option +** Make sure R6RS binary ports pass `binary-port?' regardless of the locale +** Gracefully handle unterminated UTF-8 sequences instead of hitting an `assert'