guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 01/01: Update NEWS for Guile 2.9.6


From: Andy Wingo
Subject: [Guile-commits] 01/01: Update NEWS for Guile 2.9.6
Date: Fri, 6 Dec 2019 05:39:05 -0500 (EST)

wingo pushed a commit to branch master
in repository guile.

commit 4a168cddcda947b35765e0ecff72d815bc1571ba
Author: Andy Wingo <address@hidden>
Date:   Fri Dec 6 11:29:15 2019 +0100

    Update NEWS for Guile 2.9.6
    
    * NEWS: Update, folding in old NEWS entries.
---
 NEWS | 212 ++++++++++++++++++++++++++++++++++++++-----------------------------
 1 file changed, 121 insertions(+), 91 deletions(-)

diff --git a/NEWS b/NEWS
index 3f1a4c9..185f592 100644
--- a/NEWS
+++ b/NEWS
@@ -6,10 +6,93 @@ Please send Guile bug reports to address@hidden.
 
 
 
-Changes in alpha 2.9.5 (since alpha 2.9.4):
+Changes in alpha 2.9.6 (since alpha 2.9.5):
 
 * Notable changes
 
+** Add --r6rs, --r7rs options to `guild compile'
+
+This makes compiling R6RS or R7RS code a bit easier.  See "R6RS Support"
+and "R7RS Support" in the manual, for more.
+
+** Add guile-3, guile-3.0 cond-expand features
+
+See "SRFI-0" in the manual, for more.
+
+** Add #:re-export-and-replace argument to `define-module'
+
+This new keyword specifies a set of bindings to re-export, but also
+marks them as intended to replace core bindings.  See "Creating Guile
+Modules" in the manual, for full details.
+
+Note to make this change, we had to change the way replacement flags are
+stored, to being associated with modules instead of individual variable
+objects.  This means that users who #:re-export an imported binding that
+was already marked as #:replace by another module will now see warnings,
+as they need to use #:re-export-and-replace instead.
+
+** Better optimizations for vector-length et al
+
+Sometimes the compiler get confused and think it couldn't hoist a
+`vector-length' call out of a loop.  This has been fixed.
+
+* Bug fixes
+
+** Fix range inference on division in unreachable code
+** Fix frame-call-representation for callees without closures
+** Fix range inference for right-shifts
+** Fix port-position documentation
+** Fix stack overflow if printing a pre-boot error throws an error
+
+
+
+Changes in alpha 2.9.x (since the stable 2.2 series):
+
+* Notable changes
+
+** Just-in-time code generation
+
+Guile programs now run up to 4 times faster, relative to Guile 2.2,
+thanks to just-in-time (JIT) native code generation.  Notably, this
+brings the performance of "eval" as written in Scheme back to the level
+of "eval" written in C, as in the days of Guile 1.8.
+
+See "Just-In-Time Native Code" in the manual, for more information.  JIT
+compilation will be enabled automatically and transparently.  To disable
+JIT compilation, configure Guile with `--enable-jit=no' or
+`--disable-jit'.  The default is `--enable-jit=auto', which enables the
+JIT if it is available.  See `./configure --help' for more.
+
+JIT compilation is enabled by default on x86-64, i686, ARMv7, and
+AArch64 targets.
+
+** Lower-level bytecode
+
+Relative to the virtual machine in Guile 2.2, Guile's VM instruction set
+is now more low-level.  This allows it to express more advanced
+optimizations, for example type check elision or integer
+devirtualization, and makes the task of JIT code generation easier.
+
+Note that this change can mean that for a given function, the
+corresponding number of instructions in Guile 3.0 may be higher than
+Guile 2.2, which can lead to slowdowns when the function is interpreted.
+We hope that JIT compilation more than makes up for this slight
+slowdown.
+
+** Interleaved internal definitions and expressions allowed
+
+It used to be that internal definitions had to precede all expressions
+in their bodies.  This restriction has been relaxed.  If an expression
+precedes an internal definition, it is treated as if it were a
+definition of an unreferenced variable.  For example, the expression
+`(foo)' transforms to the equivalent of `(define _ (begin (foo) #f))',
+if it precedes other definitions.
+
+This change improves the readability of Guile programs, as it used to be
+that program indentation tended to increase needlessly to allow nested
+`let' and `letrec' to re-establish definition contexts after initial
+expressions, for example for type-checks on procedure arguments.
+
 ** Record unification
 
 Guile used to have a number of implementations of structured data types
@@ -67,18 +150,40 @@ via `throw'.  These will probably migrate over time to
 
 See "Exceptions" in the manual, for full details on the new API.
 
-** More optimization for unexported definitions at -O3
+** Optimization of top-level bindings within a compilation unit
+
+At optimization level 2 and above, Guile's compiler is now allowed to
+inline top-level definitions within a compilation unit.  See
+"Declarative Modules" in the manual, for full details.  This change can
+improve the performance of programs with many small top-level
+definitions by quite a bit!
+
+At optimization level 3 and above, Guile will assume that any top-level
+binding in a declarative compilation unit that isn't exported from a
+module can be completely inlined into its uses.  (Prior to this change,
+-O3 was the same as -O2.)  Note that with this new
+`seal-private-bindings' pass, private declarative bindings are no longer
+available for access from the first-class module reflection API.  The
+optimizations afforded by this pass can be useful when you need a speed
+boost, but having them enabled at optimization level 3 means they are
+not on by default, as they change Guile's behavior in ways that users
+might not expect.
 
-There is a new optimization pass, `seal-private-bindings', which is
-enabled at the new optimization level -O3.  (Prior to this change, -O3
-was the same as -O2.)  With this pass, private declarative bindings
-aren't available for access from the first-class module reflection API.
-This allows for better optimization.
+** By default, GOOPS classes are not redefinable
 
-** Better optimization for unboxed int/float conversions
+It used to be that all GOOPS classes were redefinable, at least in
+theory.  This facility was supported by an indirection in all "struct"
+instances, even though only a subset of structs would need redefinition.
+We wanted to remove this indirection, in order to speed up Guile
+records, allow immutable Guile records to eventually be described by
+classes, and allow for some optimizations in core GOOPS classes that
+shouldn't be redefined anyway.
 
-This improves optimization for "exact->inexact" and integer operands to
-floating-point ops.
+Thus in GOOPS now there are classes that are redefinable and classes
+that aren't.  By default, classes created with GOOPS are not
+redefinable.  To make a class redefinable, it should be an instance of
+`<redefinable-class>'.  See "Redefining a Class" in the manual for more
+information.
 
 ** Define top-level bindings for aux syntax: `else', `=>', `...', `_'
 
@@ -114,87 +219,6 @@ see "R6RS Support" in the manual, for full details.
 Also as with R6RS, there is an `install-r7rs!' procedure and a `--r7rs'
 command-line option.
 
-
-* New deprecations
-
-** The two-argument form of `record-constructor'
-
-Calling `record-constructor' with two arguments (the record type and a
-list of field names) is deprecated.  Instead, call with just one
-argument, and provide a wrapper around that constructor if needed.
-
-
-Changes in alpha 2.9.x (since the stable 2.2 series):
-
-* Notable changes
-
-** Just-in-time code generation
-
-Guile programs now run up to 4 times faster, relative to Guile 2.2,
-thanks to just-in-time (JIT) native code generation.  Notably, this
-brings the performance of "eval" as written in Scheme back to the level
-of "eval" written in C, as in the days of Guile 1.8.
-
-See "Just-In-Time Native Code" in the manual, for more information.  JIT
-compilation will be enabled automatically and transparently.  To disable
-JIT compilation, configure Guile with `--enable-jit=no' or
-`--disable-jit'.  The default is `--enable-jit=auto', which enables the
-JIT if it is available.  See `./configure --help' for more.
-
-JIT compilation is enabled by default on x86-64, i686, ARMv7, and
-AArch64 targets.
-
-** Lower-level bytecode
-
-Relative to the virtual machine in Guile 2.2, Guile's VM instruction set
-is now more low-level.  This allows it to express more advanced
-optimizations, for example type check elision or integer
-devirtualization, and makes the task of JIT code generation easier.
-
-Note that this change can mean that for a given function, the
-corresponding number of instructions in Guile 3.0 may be higher than
-Guile 2.2, which can lead to slowdowns when the function is interpreted.
-We hope that JIT compilation more than makes up for this slight
-slowdown.
-
-** Interleaved internal definitions and expressions allowed
-
-It used to be that internal definitions had to precede all expressions
-in their bodies.  This restriction has been relaxed.  If an expression
-precedes an internal definition, it is treated as if it were a
-definition of an unreferenced variable.  For example, the expression
-`(foo)' transforms to the equivalent of `(define _ (begin (foo) #f))',
-if it precedes other definitions.
-
-This change improves the readability of Guile programs, as it used to be
-that program indentation tended to increase needlessly to allow nested
-`let' and `letrec' to re-establish definition contexts after initial
-expressions, for example for type-checks on procedure arguments.
-
-** Optimization of top-level bindings within a compilation unit
-
-At optimization level 2 and above, Guile's compiler is now allowed to
-inline top-level definitions within a compilation unit.  See
-"Declarative Modules" in the manual, for full details.  This change can
-improve the performance of programs with many small top-level
-definitions by quite a bit!
-
-** By default, GOOPS classes are not redefinable
-
-It used to be that all GOOPS classes were redefinable, at least in
-theory.  This facility was supported by an indirection in all "struct"
-instances, even though only a subset of structs would need redefinition.
-We wanted to remove this indirection, in order to speed up Guile
-records, allow immutable Guile records to eventually be described by
-classes, and allow for some optimizations in core GOOPS classes that
-shouldn't be redefined anyway.
-
-Thus in GOOPS now there are classes that are redefinable and classes
-that aren't.  By default, classes created with GOOPS are not
-redefinable.  To make a class redefinable, it should be an instance of
-`<redefinable-class>'.  See "Redefining a Class" in the manual for more
-information.
-
 * New deprecations
 
 ** scm_t_uint8, etc deprecated in favor of C99 stdint.h
@@ -208,6 +232,12 @@ and uintN for N in 8, 16, 32, and 64.  Guile also now uses 
ptrdiff_t
 instead of scm_t_ptrdiff, and similarly for intmax_t, uintmax_t,
 intptr_t, and uintptr_t.
 
+** The two-argument form of `record-constructor'
+
+Calling `record-constructor' with two arguments (the record type and a
+list of field names) is deprecated.  Instead, call with just one
+argument, and provide a wrapper around that constructor if needed.
+
 * Incompatible changes
 
 ** All deprecated code removed



reply via email to

[Prev in Thread] Current Thread [Next in Thread]