X-Git-Url: http://git.hcoop.net/bpt/guile.git/blobdiff_plain/de424d959442e6be066fb8fa048253a4e5b2bb45..4938d3cb742de2a356586c55e5af32e193c5990b:/NEWS?ds=sidebyside diff --git a/NEWS b/NEWS index 121cfd9b5..cb0dafc54 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,275 @@ See the end for copying conditions. Please send Guile bug reports to bug-guile@gnu.org. +Changes in 2.0.3 (since 2.0.2): + +* Speed improvements + +** Guile has a new optimizer, `peval'. + +`Peval' is a partial evaluator that performs constant folding, dead code +elimination, copy propagation, and inlining. By default it runs on +every piece of code that Guile compiles, to fold computations that can +happen at compile-time, so they don't have to happen at runtime. + +If we did our job right, the only impact you would see would be your +programs getting faster. But if you notice slowdowns or bloated code, +please send a mail to bug-guile@gnu.org with details. + +Thanks to William R. Cook, Oscar Waddell, and Kent Dybvig for inspiring +peval and its implementation. + +You can see what peval does on a given piece of code by running the new +`,optimize' REPL meta-command, and comparing it to the output of +`,expand'. See "Compile Commands" in the manual, for more. + +** Fewer calls to `stat'. + +Guile now stats only the .go file and the .scm file when loading a fresh +compiled file. + +* Notable changes + +** New module: `(web client)', a simple synchronous web client. + +See "Web Client" in the manual, for more. + +** Users can now install compiled `.go' files. + +See "Installing Site Packages" in the manual. + +** Remove Front-Cover and Back-Cover text from the manual. + +The manual is still under the GNU Free Documentation License, but no +longer has any invariant sections. + +** More helpful `guild help'. + +`guild' is Guile's multi-tool, for use in shell scripting. Now it has a +nicer interface for querying the set of existing commands, and getting +help on those commands. Try it out and see! + +** New macro: `define-syntax-rule' + +`define-syntax-rule' is a shorthand to make a `syntax-rules' macro with +one clause. See "Syntax Rules" in the manual, for more. + +** The `,time' REPL meta-command now has more precision. + +The output of this command now has microsecond precision, instead of +10-millisecond precision. + +** `(ice-9 match)' can now match records. + +See "Pattern Matching" in the manual, for more on matching records. + +** New module: `(language tree-il debug)'. + +This module provides a tree-il verifier. This is useful for people that +generate tree-il, usually as part of a language compiler. + +** New functions: `scm_is_exact', `scm_is_inexact'. + +These provide a nice C interface for Scheme's `exact?' and `inexact?', +respectively. + +* Bugs fixed + +See the git log (or the ChangeLog) for more details on these bugs. + +** Fix order of importing modules and resolving duplicates handlers. +** Fix a number of bugs involving extended (merged) generics. +** Fix invocation of merge-generics duplicate handler. +** Fix write beyond array end in arrays.c. +** Fix read beyond end of hashtable size array in hashtab.c. +** (web http): Locale-independent parsing and serialization of dates. +** Ensure presence of Host header in HTTP/1.1 requests. +** Fix take-right and drop-right for improper lists. +** Fix leak in get_current_locale(). +** Fix recursive define-inlinable expansions. +** Check that srfi-1 procedure arguments are procedures. +** Fix r6rs `map' for multiple returns. +** Fix scm_tmpfile leak on POSIX platforms. +** Fix a couple of leaks (objcode->bytecode, make-boot-program). +** Fix guile-lib back-compatibility for module-stexi-documentation. +** Fix --listen option to allow other ports. +** Fix scm_to_latin1_stringn for substrings. +** Fix compilation of untyped arrays of rank not 1. +** Fix unparse-tree-il of . +** Fix reading of #||||#. +** Fix segfault in GOOPS when class fields are redefined. +** Prefer poll(2) over select(2) to allow file descriptors above FD_SETSIZE. + + +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 +359,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 +397,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,13 +416,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 @@ -199,6 +468,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'