mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
fold 1.9.11 news into main body
* NEWS: Update.
This commit is contained in:
parent
551b96d294
commit
18e90860d1
1 changed files with 132 additions and 251 deletions
383
NEWS
383
NEWS
|
@ -10,257 +10,11 @@ prerelease, and a full NEWS corresponding to 1.8 -> 2.0.)
|
||||||
|
|
||||||
Changes in 1.9.12 (since the 1.9.11 prerelease):
|
Changes in 1.9.12 (since the 1.9.11 prerelease):
|
||||||
|
|
||||||
** Random generator state has an external form
|
** Random generator state may be serialized to a datum
|
||||||
|
|
||||||
Now the random number generator state can be obtained in external
|
`random-state->datum' will serialize a random state to a datum, which
|
||||||
(i.e. `read'/`write'-able) form via the new procedure
|
may be written out and read back in later. That datum may be used to
|
||||||
`random-state->external'. An externalized state can be reinstantiated by
|
construct an equivalent random state by calling `datum->random-state'.
|
||||||
calling `external->random-state'.
|
|
||||||
|
|
||||||
|
|
||||||
Changes in 1.9.11 (since the 1.9.10 prerelease):
|
|
||||||
|
|
||||||
** Renamed module: (rnrs bytevectors)
|
|
||||||
|
|
||||||
This module was called (rnrs bytevector), its name from earlier drafts
|
|
||||||
of the R6RS. Its name has been changed. Users of previous 1.9 preleases
|
|
||||||
may want to search for any stale rnrs/bytevector .go or .scm file, and
|
|
||||||
delete them.
|
|
||||||
|
|
||||||
** New module: (sxml match)
|
|
||||||
|
|
||||||
Guile has incorporated Jim Bender's `sxml-match' library. See
|
|
||||||
"sxml-match' in the manual for more information. Thanks, Jim!
|
|
||||||
|
|
||||||
** New module: (srfi srfi-9 gnu)
|
|
||||||
|
|
||||||
This module adds an extension to srfi-9, `set-record-type-printer!'. See
|
|
||||||
"SRFI-9" in the manual for more information.
|
|
||||||
|
|
||||||
** Support for R6RS libraries
|
|
||||||
|
|
||||||
The `library' and `import' forms from the latest Scheme report have been
|
|
||||||
added to Guile, in such a way that R6RS libraries share a namespace with
|
|
||||||
Guile modules. R6RS modules may import Guile modules, and are available
|
|
||||||
for Guile modules to import via use-modules and all the rest. See "R6RS
|
|
||||||
Libraries" in the manual for more information.
|
|
||||||
|
|
||||||
** Implementations of R6RS libraries
|
|
||||||
|
|
||||||
Guile now has implementations for all of the libraries defined in the
|
|
||||||
R6RS. Thanks to Julian Graham for this excellent hack. See "R6RS
|
|
||||||
Standard Libraries" in the manual for a full list of libraries.
|
|
||||||
|
|
||||||
** Partial R6RS compatibility
|
|
||||||
|
|
||||||
Guile now has enough support for R6RS to run a reasonably large subset
|
|
||||||
of R6RS programs.
|
|
||||||
|
|
||||||
Guile is not fully R6RS compatible. Many incompatibilities are simply
|
|
||||||
bugs, though some parts of Guile will remain R6RS-incompatible for the
|
|
||||||
foreseeable future. See "R6RS Incompatibilities" in the manual, for more
|
|
||||||
information.
|
|
||||||
|
|
||||||
Please contact bug-guile@gnu.org if you have found an issue not
|
|
||||||
mentioned in that compatibility list.
|
|
||||||
|
|
||||||
** Macro expansion produces structures instead of s-expressions
|
|
||||||
|
|
||||||
In the olden days, macroexpanding an s-expression would yield another
|
|
||||||
s-expression. Though the lexical variables were renamed, expansions of
|
|
||||||
core forms like `if' and `begin' were still non-hygienic, as they relied
|
|
||||||
on the toplevel definitions of `if' et al being the conventional ones.
|
|
||||||
|
|
||||||
The solution is to expand to structures instead of s-expressions. There
|
|
||||||
is an `if' structure, a `begin' structure, a `toplevel-ref' structure,
|
|
||||||
etc. The expander already did this for compilation, producing Tree-IL
|
|
||||||
directly; it has been changed now to do so when expanding for the
|
|
||||||
evaluator as well.
|
|
||||||
|
|
||||||
The real truth is somewhat more involved: Tree-IL doesn't exist until
|
|
||||||
modules have been booted, but we need the expander to boot modules, and
|
|
||||||
additionally we need a boot expander before psyntax is loaded. So a
|
|
||||||
subset of Tree-IL is defined in C, and the boot expander produces these
|
|
||||||
"macroexpanded" structures. Psyntax has been modified to produce those
|
|
||||||
structures as well. When Tree-IL loads, it incorporates those structures
|
|
||||||
directly as part of its language.
|
|
||||||
|
|
||||||
Finally, the evaluator has been adapted to accept these "expanded"
|
|
||||||
structures, and enhanced to better support the gamut of this subset of
|
|
||||||
Tree-IL, including `lambda*' and `case-lambda'. This was a much-needed
|
|
||||||
harmonization between the compiler, expander, and evaluator.
|
|
||||||
|
|
||||||
** Deprecated `scm_badargsp'
|
|
||||||
|
|
||||||
This function is unused in Guile, but was part of its API.
|
|
||||||
|
|
||||||
** `sxml->xml' enhancement
|
|
||||||
|
|
||||||
`sxml->xml' from `(sxml simple)' can now handle the result of
|
|
||||||
`xml->sxml'. See bug #29260 for more information.
|
|
||||||
|
|
||||||
** New module: (system vm coverage)
|
|
||||||
|
|
||||||
This new module can produce code coverage reports for compiled Scheme
|
|
||||||
code on a line-by-line level. See "Code Coverage" in the manual for more
|
|
||||||
information.
|
|
||||||
|
|
||||||
** Faster VM hooks.
|
|
||||||
|
|
||||||
The frame objects passed to VM hook procedures are now allocated on the
|
|
||||||
stack instead of the heap, making the next-instruction hook practical to
|
|
||||||
use.
|
|
||||||
|
|
||||||
** New `eval-when' situation: `expand'
|
|
||||||
|
|
||||||
Sometimes it's important to cause side-effects while expanding an
|
|
||||||
expression, even in eval mode. This situation is used in
|
|
||||||
`define-module', `use-modules', et al, in order to affect the current
|
|
||||||
module and its set of syntax expanders.
|
|
||||||
|
|
||||||
** Better module-level hygiene
|
|
||||||
|
|
||||||
Instead of attempting to track changes to the current module when
|
|
||||||
expanding toplevel sequences, we instead preserve referential
|
|
||||||
transparency relative to where the macro itself was defined. If the
|
|
||||||
macro should expand to expressions in the context of the new module, it
|
|
||||||
should wrap those expressions in `@@', which has been enhanced to accept
|
|
||||||
generic expressions, not just identifier references. For example, part
|
|
||||||
of the definition of the R6RS `library' form:
|
|
||||||
|
|
||||||
#'(begin
|
|
||||||
(define-module (name name* ...) #:pure #:version (version ...))
|
|
||||||
(import ispec) ...
|
|
||||||
(re-export r ...) (export e ...)
|
|
||||||
(@@ (name name* ...) body)
|
|
||||||
...)
|
|
||||||
|
|
||||||
In this example the `import' refers to the `import' definition in the
|
|
||||||
module where the `library' macro is defined, not in the new module.
|
|
||||||
|
|
||||||
** Module system macros rewritten as hygienic macros
|
|
||||||
|
|
||||||
`define-module', `use-modules', `export', and other such macros have
|
|
||||||
been rewritten as hygienic macros. This allows the necessary referential
|
|
||||||
transparency for the R6RS `library' form to do the right thing.
|
|
||||||
|
|
||||||
** Compiler and VM documentation updated
|
|
||||||
|
|
||||||
The documentation for the compiler and VM had slipped out of date; it
|
|
||||||
has been brought back... to the future!
|
|
||||||
|
|
||||||
** Tree-IL field renaming: `vars' -> `gensyms'
|
|
||||||
|
|
||||||
The `vars' fields of <let>, <letrec>, <fix>, and <lambda-case> has been
|
|
||||||
renamed to `gensyms', for clarity, and to match <lexical-ref>.
|
|
||||||
|
|
||||||
** Removed `version' field from <language>
|
|
||||||
|
|
||||||
Language versions weren't being updated or used in any worthwhile way;
|
|
||||||
they have been removed, for now at least.
|
|
||||||
|
|
||||||
** New procedure: `module-export-all!'
|
|
||||||
|
|
||||||
This procedure exports all current and future bindings from a module.
|
|
||||||
Use as `(module-export-all! (current-module))'.
|
|
||||||
|
|
||||||
** Updates to manual
|
|
||||||
|
|
||||||
The introductory sections of the manual have been reorganized
|
|
||||||
significantly, making it more accessible to new users of Guile. Check it
|
|
||||||
out!
|
|
||||||
|
|
||||||
** The module namespace is now separate from the value namespace
|
|
||||||
|
|
||||||
It was a little-known implementation detail of Guile's module system
|
|
||||||
that it was built on a single hierarchical namespace of values -- that
|
|
||||||
if there was a module named `(foo bar)', then in the module named
|
|
||||||
`(foo)' there was a binding from `bar' to the `(foo bar)' module.
|
|
||||||
|
|
||||||
This was a neat trick, but presented a number of problems. One problem
|
|
||||||
was that the bindings in a module were not apparent from the module
|
|
||||||
itself; perhaps the `(foo)' module had a private binding for `bar', and
|
|
||||||
then an external contributor defined `(foo bar)'. In the end there can
|
|
||||||
be only one binding, so one of the two will see the wrong thing, and
|
|
||||||
produce an obtuse error of unclear provenance.
|
|
||||||
|
|
||||||
Also, the public interface of a module was also bound in the value
|
|
||||||
namespace, as `%module-public-interface'. This was a hack from the early
|
|
||||||
days of Guile's modules.
|
|
||||||
|
|
||||||
Both of these warts have been fixed by the addition of fields in the
|
|
||||||
`module' data type. Access to modules and their interfaces from the
|
|
||||||
value namespace has been deprecated, and all accessors use the new
|
|
||||||
record accessors appropriately.
|
|
||||||
|
|
||||||
When Guile is built with support for deprecated code, as is the default,
|
|
||||||
the value namespace is still searched for modules and public interfaces,
|
|
||||||
and a deprecation warning is raised as appropriate.
|
|
||||||
|
|
||||||
Finally, to support lazy loading of modules as one used to be able to do
|
|
||||||
with module binder procedures, Guile now has submodule binders, called
|
|
||||||
if a given submodule is not found. See boot-9.scm for more information.
|
|
||||||
|
|
||||||
** New procedures: module-ref-submodule, module-define-submodule,
|
|
||||||
nested-ref-module, nested-define-module!, local-ref-module,
|
|
||||||
local-define-module
|
|
||||||
|
|
||||||
These new accessors are like their bare variants, but operate on
|
|
||||||
namespaces instead of values.
|
|
||||||
|
|
||||||
** The (app modules) module tree is officially deprecated
|
|
||||||
|
|
||||||
It used to be that one could access a module named `(foo bar)' via
|
|
||||||
`(nested-ref the-root-module '(app modules foo bar))'. The `(app
|
|
||||||
modules)' bit was a never-used and never-documented abstraction, and has
|
|
||||||
been deprecated. See the following mail for a full discussion:
|
|
||||||
|
|
||||||
http://lists.gnu.org/archive/html/guile-devel/2010-04/msg00168.html
|
|
||||||
|
|
||||||
The `%app' binding is also deprecated.
|
|
||||||
|
|
||||||
** Deprecated `@bind' syntax
|
|
||||||
|
|
||||||
`@bind' was part of an older implementation of the Emacs Lisp language,
|
|
||||||
and is no longer used.
|
|
||||||
|
|
||||||
** New fluid: `%file-port-name-canonicalization'
|
|
||||||
|
|
||||||
This fluid parameterizes the file names that are associated with file
|
|
||||||
ports. If %file-port-name-canonicalization is 'absolute, then file names
|
|
||||||
are canonicalized to be absolute paths. If it is 'relative, then the
|
|
||||||
name is canonicalized, but any prefix corresponding to a member of
|
|
||||||
`%load-path' is stripped off. Otherwise the names are passed through
|
|
||||||
unchanged.
|
|
||||||
|
|
||||||
** Source file name canonicalization in `compile-file', `compile-and-load'
|
|
||||||
|
|
||||||
These file-compiling procedures now bind
|
|
||||||
%file-port-name-canonicalization to their `#:canonicalization' keyword
|
|
||||||
argument, which defaults to 'relative. In this way, one might compile
|
|
||||||
"../module/ice-9/boot-9.scm", but the path that gets residualized into
|
|
||||||
the .go is "ice-9/boot-9.scm".
|
|
||||||
|
|
||||||
** Deprecate arity access via (procedure-properties proc 'arity)
|
|
||||||
|
|
||||||
Instead of accessing a procedure's arity as a property, use the new
|
|
||||||
`procedure-minimum-arity' function, which gives the most permissive
|
|
||||||
arity that the the function has, in the same format as the old arity
|
|
||||||
accessor.
|
|
||||||
|
|
||||||
** Remove redundant accessors: program-name, program-documentation,
|
|
||||||
program-properties, program-property
|
|
||||||
|
|
||||||
Instead, just use procedure-name, procedure-documentation,
|
|
||||||
procedure-properties, and procedure-property.
|
|
||||||
|
|
||||||
** Enhance documentation for support of Emacs Lisp's `nil'
|
|
||||||
|
|
||||||
See "Nil" in the manual, for more details.
|
|
||||||
|
|
||||||
** Enhance documentation for support of other languages
|
|
||||||
|
|
||||||
See "Other Languages" in the manual, for more details.
|
|
||||||
|
|
||||||
** And of course, the usual collection of bugfixes
|
** And of course, the usual collection of bugfixes
|
||||||
|
|
||||||
|
@ -279,7 +33,9 @@ Changes in 1.9.x (since the 1.8.x series):
|
||||||
** `(system xref)', a cross-referencing facility (FIXME undocumented)
|
** `(system xref)', a cross-referencing facility (FIXME undocumented)
|
||||||
** `(ice-9 vlist)', lists with constant-time random access; hash lists
|
** `(ice-9 vlist)', lists with constant-time random access; hash lists
|
||||||
** `(system foreign)', foreign function interface
|
** `(system foreign)', foreign function interface
|
||||||
|
** `(sxml match)', a pattern matcher for SXML
|
||||||
|
** `(srfi srfi-9 gnu)', extensions to the SRFI-9 record library
|
||||||
|
** `(system vm coverage)', a line-by-line code coverage library
|
||||||
** Imported statprof, SSAX, and texinfo modules from Guile-Lib
|
** Imported statprof, SSAX, and texinfo modules from Guile-Lib
|
||||||
|
|
||||||
The statprof statistical profiler, the SSAX XML toolkit, and the texinfo
|
The statprof statistical profiler, the SSAX XML toolkit, and the texinfo
|
||||||
|
@ -375,6 +131,33 @@ warranty disclaimer on startup, along with pointers to more information.
|
||||||
|
|
||||||
* Changes to Scheme functions and syntax
|
* Changes to Scheme functions and syntax
|
||||||
|
|
||||||
|
** Support for R6RS libraries
|
||||||
|
|
||||||
|
The `library' and `import' forms from the latest Scheme report have been
|
||||||
|
added to Guile, in such a way that R6RS libraries share a namespace with
|
||||||
|
Guile modules. R6RS modules may import Guile modules, and are available
|
||||||
|
for Guile modules to import via use-modules and all the rest. See "R6RS
|
||||||
|
Libraries" in the manual for more information.
|
||||||
|
|
||||||
|
** Implementations of R6RS libraries
|
||||||
|
|
||||||
|
Guile now has implementations for all of the libraries defined in the
|
||||||
|
R6RS. Thanks to Julian Graham for this excellent hack. See "R6RS
|
||||||
|
Standard Libraries" in the manual for a full list of libraries.
|
||||||
|
|
||||||
|
** Partial R6RS compatibility
|
||||||
|
|
||||||
|
Guile now has enough support for R6RS to run a reasonably large subset
|
||||||
|
of R6RS programs.
|
||||||
|
|
||||||
|
Guile is not fully R6RS compatible. Many incompatibilities are simply
|
||||||
|
bugs, though some parts of Guile will remain R6RS-incompatible for the
|
||||||
|
foreseeable future. See "R6RS Incompatibilities" in the manual, for more
|
||||||
|
information.
|
||||||
|
|
||||||
|
Please contact bug-guile@gnu.org if you have found an issue not
|
||||||
|
mentioned in that compatibility list.
|
||||||
|
|
||||||
** New implementation of `primitive-eval'
|
** New implementation of `primitive-eval'
|
||||||
|
|
||||||
Guile's `primitive-eval' is now implemented in Scheme. Actually there is
|
Guile's `primitive-eval' is now implemented in Scheme. Actually there is
|
||||||
|
@ -562,6 +345,11 @@ export, it now also accepts a pair of symbols, indicating that a binding
|
||||||
should be renamed on export. See "Creating Guile Modules" in the manual
|
should be renamed on export. See "Creating Guile Modules" in the manual
|
||||||
for more information.
|
for more information.
|
||||||
|
|
||||||
|
** New procedure: `module-export-all!'
|
||||||
|
|
||||||
|
This procedure exports all current and future bindings from a module.
|
||||||
|
Use as `(module-export-all! (current-module))'.
|
||||||
|
|
||||||
** `eval-case' has been deprecated, and replaced by `eval-when'.
|
** `eval-case' has been deprecated, and replaced by `eval-when'.
|
||||||
|
|
||||||
The semantics of `eval-when' are easier to understand. See "Eval When"
|
The semantics of `eval-when' are easier to understand. See "Eval When"
|
||||||
|
@ -585,6 +373,19 @@ feedback about this change (a consequence of using psyntax as the
|
||||||
default expander), and may choose to revisit this situation before 2.0
|
default expander), and may choose to revisit this situation before 2.0
|
||||||
in response to user feedback.
|
in response to user feedback.
|
||||||
|
|
||||||
|
** Macro expansion produces structures instead of s-expressions
|
||||||
|
|
||||||
|
In the olden days, macroexpanding an s-expression would yield another
|
||||||
|
s-expression. Though the lexical variables were renamed, expansions of
|
||||||
|
core forms like `if' and `begin' were still non-hygienic, as they relied
|
||||||
|
on the toplevel definitions of `if' et al being the conventional ones.
|
||||||
|
|
||||||
|
The solution is to expand to structures instead of s-expressions. There
|
||||||
|
is an `if' structure, a `begin' structure, a `toplevel-ref' structure,
|
||||||
|
etc. The expander already did this for compilation, producing Tree-IL
|
||||||
|
directly; it has been changed now to do so when expanding for the
|
||||||
|
evaluator as well.
|
||||||
|
|
||||||
** Defmacros must now produce valid Scheme expressions.
|
** Defmacros must now produce valid Scheme expressions.
|
||||||
|
|
||||||
It used to be that defmacros could unquote in Scheme values, as a way of
|
It used to be that defmacros could unquote in Scheme values, as a way of
|
||||||
|
@ -744,6 +545,55 @@ because of hygiene and macros, all modules have names. If a module was
|
||||||
created without a name, the first time `module-name' is called on it, a
|
created without a name, the first time `module-name' is called on it, a
|
||||||
fresh name will be lazily generated for it.
|
fresh name will be lazily generated for it.
|
||||||
|
|
||||||
|
** The module namespace is now separate from the value namespace
|
||||||
|
|
||||||
|
It was a little-known implementation detail of Guile's module system
|
||||||
|
that it was built on a single hierarchical namespace of values -- that
|
||||||
|
if there was a module named `(foo bar)', then in the module named
|
||||||
|
`(foo)' there was a binding from `bar' to the `(foo bar)' module.
|
||||||
|
|
||||||
|
This was a neat trick, but presented a number of problems. One problem
|
||||||
|
was that the bindings in a module were not apparent from the module
|
||||||
|
itself; perhaps the `(foo)' module had a private binding for `bar', and
|
||||||
|
then an external contributor defined `(foo bar)'. In the end there can
|
||||||
|
be only one binding, so one of the two will see the wrong thing, and
|
||||||
|
produce an obtuse error of unclear provenance.
|
||||||
|
|
||||||
|
Also, the public interface of a module was also bound in the value
|
||||||
|
namespace, as `%module-public-interface'. This was a hack from the early
|
||||||
|
days of Guile's modules.
|
||||||
|
|
||||||
|
Both of these warts have been fixed by the addition of fields in the
|
||||||
|
`module' data type. Access to modules and their interfaces from the
|
||||||
|
value namespace has been deprecated, and all accessors use the new
|
||||||
|
record accessors appropriately.
|
||||||
|
|
||||||
|
When Guile is built with support for deprecated code, as is the default,
|
||||||
|
the value namespace is still searched for modules and public interfaces,
|
||||||
|
and a deprecation warning is raised as appropriate.
|
||||||
|
|
||||||
|
Finally, to support lazy loading of modules as one used to be able to do
|
||||||
|
with module binder procedures, Guile now has submodule binders, called
|
||||||
|
if a given submodule is not found. See boot-9.scm for more information.
|
||||||
|
|
||||||
|
** New procedures: module-ref-submodule, module-define-submodule,
|
||||||
|
nested-ref-module, nested-define-module!, local-ref-module,
|
||||||
|
local-define-module
|
||||||
|
|
||||||
|
These new accessors are like their bare variants, but operate on
|
||||||
|
namespaces instead of values.
|
||||||
|
|
||||||
|
** The (app modules) module tree is officially deprecated
|
||||||
|
|
||||||
|
It used to be that one could access a module named `(foo bar)' via
|
||||||
|
`(nested-ref the-root-module '(app modules foo bar))'. The `(app
|
||||||
|
modules)' bit was a never-used and never-documented abstraction, and has
|
||||||
|
been deprecated. See the following mail for a full discussion:
|
||||||
|
|
||||||
|
http://lists.gnu.org/archive/html/guile-devel/2010-04/msg00168.html
|
||||||
|
|
||||||
|
The `%app' binding is also deprecated.
|
||||||
|
|
||||||
** Many syntax errors have different texts now
|
** Many syntax errors have different texts now
|
||||||
|
|
||||||
Syntax errors still throw to the `syntax-error' key, but the arguments
|
Syntax errors still throw to the `syntax-error' key, but the arguments
|
||||||
|
@ -905,6 +755,13 @@ arities of compiled procedures may be accessed via procedures from the
|
||||||
`(system vm program)' module; see "Compiled Procedures", "Optional
|
`(system vm program)' module; see "Compiled Procedures", "Optional
|
||||||
Arguments", and "Case-lambda" in the manual.
|
Arguments", and "Case-lambda" in the manual.
|
||||||
|
|
||||||
|
** Deprecate arity access via (procedure-properties proc 'arity)
|
||||||
|
|
||||||
|
Instead of accessing a procedure's arity as a property, use the new
|
||||||
|
`procedure-minimum-arity' function, which gives the most permissive
|
||||||
|
arity that the the function has, in the same format as the old arity
|
||||||
|
accessor.
|
||||||
|
|
||||||
** `lambda*' and `define*' are now available in the default environment
|
** `lambda*' and `define*' are now available in the default environment
|
||||||
|
|
||||||
As with `case-lambda', `(ice-9 optargs)' continues to be supported, for
|
As with `case-lambda', `(ice-9 optargs)' continues to be supported, for
|
||||||
|
@ -1162,6 +1019,21 @@ backtrace. This has been fixed.
|
||||||
|
|
||||||
These are analogous to %load-path and %load-extensions.
|
These are analogous to %load-path and %load-extensions.
|
||||||
|
|
||||||
|
** New fluid: `%file-port-name-canonicalization'
|
||||||
|
|
||||||
|
This fluid parameterizes the file names that are associated with file
|
||||||
|
ports. If %file-port-name-canonicalization is 'absolute, then file names
|
||||||
|
are canonicalized to be absolute paths. If it is 'relative, then the
|
||||||
|
name is canonicalized, but any prefix corresponding to a member of
|
||||||
|
`%load-path' is stripped off. Otherwise the names are passed through
|
||||||
|
unchanged.
|
||||||
|
|
||||||
|
In addition, the `compile-file' and `compile-and-load' procedures bind
|
||||||
|
%file-port-name-canonicalization to their `#:canonicalization' keyword
|
||||||
|
argument, which defaults to 'relative. In this way, one might compile
|
||||||
|
"../module/ice-9/boot-9.scm", but the path that gets residualized into
|
||||||
|
the .go is "ice-9/boot-9.scm".
|
||||||
|
|
||||||
** New procedure, `make-promise'
|
** New procedure, `make-promise'
|
||||||
|
|
||||||
`(make-promise (lambda () foo))' is equivalent to `(delay foo)'.
|
`(make-promise (lambda () foo))' is equivalent to `(delay foo)'.
|
||||||
|
@ -1202,6 +1074,11 @@ respectively.
|
||||||
crazy. Please change to use `catch', possibly with a throw-handler, or
|
crazy. Please change to use `catch', possibly with a throw-handler, or
|
||||||
`with-throw-handler'.
|
`with-throw-handler'.
|
||||||
|
|
||||||
|
** Deprecated `@bind' syntax
|
||||||
|
|
||||||
|
`@bind' was part of an older implementation of the Emacs Lisp language,
|
||||||
|
and is no longer used.
|
||||||
|
|
||||||
** Last but not least, the `λ' macro can be used in lieu of `lambda'
|
** Last but not least, the `λ' macro can be used in lieu of `lambda'
|
||||||
|
|
||||||
* Changes to the C interface
|
* Changes to the C interface
|
||||||
|
@ -1384,6 +1261,10 @@ procedure, then return a specialized "call" procedure. However this
|
||||||
optimization wasn't actually an optimization, so it is now deprecated.
|
optimization wasn't actually an optimization, so it is now deprecated.
|
||||||
Just use `scm_call_0', etc instead.
|
Just use `scm_call_0', etc instead.
|
||||||
|
|
||||||
|
** Deprecated `scm_badargsp'
|
||||||
|
|
||||||
|
This function is unused in Guile, but was part of its API.
|
||||||
|
|
||||||
** Better support for Lisp `nil'.
|
** Better support for Lisp `nil'.
|
||||||
|
|
||||||
The bit representation of `nil' has been tweaked so that it is now very
|
The bit representation of `nil' has been tweaked so that it is now very
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue