summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-06-19 11:19:34 +0200
committerAndy Wingo <wingo@pobox.com>2009-06-19 11:19:34 +0200
commit96b73e84bbb6d88c73a99bf46450642d79612be0 (patch)
tree1fc8d50424863066afc7839701ce3a1384fa8f8b
parent159399850de811f23e45d439aecf452b0137d847 (diff)
downloadguile-96b73e84bbb6d88c73a99bf46450642d79612be0.tar.gz
another draft of NEWS
* NEWS: Another draft.
-rw-r--r--NEWS479
1 files changed, 259 insertions, 220 deletions
diff --git a/NEWS b/NEWS
index 303caea93..141855591 100644
--- a/NEWS
+++ b/NEWS
@@ -5,7 +5,21 @@ See the end for copying conditions.
Please send Guile bug reports to bug-guile@gnu.org.
-Changes in 1.9.1 (changes since the 1.8.x series):
+Changes in 1.9.0 (changes since the 1.8.x series):
+
+* New modules (see the manual for details)
+
+** `(srfi srfi-18)', more sophisticated multithreading support
+** `(ice-9 i18n)', internationalization support
+** `(rnrs bytevector)', the R6RS bytevector API
+** `(system xref)', a cross-referencing facility (FIXME undocumented)
+
+* Changes to the stand-alone interpreter
+
+** Guile now can compile Scheme to bytecode for a custom virtual machine.
+
+Compiled code loads much faster than Scheme source code, and runs around
+3 or 4 times as fast, generating much less garbage in the process.
** The stack limit is now initialized from the environment.
@@ -13,11 +27,31 @@ If getrlimit(2) is available and a stack limit is set, Guile will set
its stack limit to 80% of the rlimit. Otherwise the limit is 160000
words, a four-fold increase from the earlier default limit.
-** Fix bad interaction between `false-if-exception' and stack-call.
+** New environment variables: GUILE_LOAD_COMPILED_PATH,
+ GUILE_SYSTEM_LOAD_COMPILED_PATH
-Exceptions thrown by `false-if-exception' were erronously causing the
-stack to be saved, causing later errors to show the incorrectly-saved
-backtrace. This has been fixed.
+GUILE_LOAD_COMPILED_PATH is for compiled files what GUILE_LOAD_PATH is
+for source files. It is a different path, however, because compiled
+files are architecture-specific. GUILE_SYSTEM_LOAD_COMPILED_PATH is like
+GUILE_SYSTEM_PATH.
+
+** New read-eval-print loop (REPL) implementation
+
+Running Guile with no arguments drops the user into the new REPL. While
+it is self-documenting to an extent, the new REPL has not yet been
+documented in the manual. This will be fixed before 2.0.
+
+** New `guile-tools' commands: `compile', `disassemble'
+
+Pass the --help command-line option to these commands for more
+information.
+
+* Changes to Scheme functions and syntax
+
+** Procedure removed: `the-environment'
+
+This procedure was part of the interpreter's execution model, and does
+not apply to the compiler.
** Files loaded with primitive-load-path will now be compiled
automatically.
@@ -38,30 +72,191 @@ ccache's behavior for C files.
To inhibit autocompilation, set the GUILE_AUTO_COMPILE environment
variable to 0, or pass --no-autocompile on the Guile command line.
-** New environment variables: GUILE_LOAD_COMPILED_PATH,
- GUILE_SYSTEM_LOAD_COMPILED_PATH
+Note that there is currently a bug here: automatic compilation will
+sometimes be attempted when it shouldn't.
-GUILE_LOAD_COMPILED_PATH is for compiled files what GUILE_LOAD_PATH is
-for source files. It is a different path, however, because compiled
-files are architecture-specific. GUILE_SYSTEM_LOAD_COMPILED_PATH is like
-GUILE_SYSTEM_PATH.
+For example, the old (lang elisp) modules are meant to be interpreted,
+not compiled. This bug will be fixed before 2.0. FIXME 2.0: Should say
+something here about module-transformer called for compile.
-** New global variables: %load-compiled-path, %load-compiled-extensions
+** New POSIX procedures: `getrlimit' and `setrlimit'
-These are analogous to %load-path and %load-extensions.
+Note however that the interface of these functions is likely to change
+in the next prerelease.
-** New installation directory: $(pkglibdir)/1.9/ccache
+** New procedure in `(oops goops)': `method-formals'
-If $(libdir) is /usr/lib, for example, Guile will install its .go files
-to /usr/lib/guile/1.9/ccache. These files are architecture-specific.
+** BUG: (procedure-property func 'arity) does not work on compiled
+ procedures
-** scm_primitive_load_path has additional argument, exception_on_error
+This will be fixed one way or another before 2.0.
-** scm_stat has additional argument, exception_on_error
+** New procedures in (ice-9 session): `add-value-help-handler!',
+ `remove-value-help-handler!', `add-name-help-handler!'
+ `remove-name-help-handler!', `procedure-arguments',
-** New entry into %guile-build-info: `ccachedir'
+The value and name help handlers provide some minimal extensibility to
+the help interface. Guile-lib's `(texinfo reflection)' uses them, for
+example, to make stexinfo help documentation available. See those
+procedures' docstrings for more information.
+
+`procedure-arguments' describes the arguments that a procedure can take,
+combining arity and formals. For example:
+
+ (procedure-arguments resolve-interface)
+ => ((required . (name)) (rest . args))
-Probably should be removed?
+Additionally, `module-commentary' is now publically exported from
+`(ice-9 session).
+
+** Deprecated: `procedure->memoizing-macro', `procedure->syntax'
+
+These procedures will not work with syncase expansion, and indeed are
+not used in the normal course of Guile. They are still used by the old
+Emacs Lisp support, however.
+
+** New language: ECMAScript
+
+Guile now ships with one other high-level language supported,
+ECMAScript. The goal is to support all of version 3.1 of the standard,
+but not all of the libraries are there yet. This support is not yet
+documented; ask on the mailing list if you are interested.
+
+** Defmacros may now have docstrings.
+
+Indeed, any macro may have a docstring. `object-documentation' from
+`(ice-9 documentation)' may be used to retrieve the docstring, once you
+have a macro value -- but see the above note about first-class macros.
+Docstrings are associated with the syntax transformer procedures.
+
+** The psyntax expander now knows how to interpret the @ and @@ special
+ forms.
+
+** The psyntax expander is now hygienic with respect to modules.
+
+Free variables in a macro are scoped in the module that the macro was
+defined in, not in the module the macro is used in. For example, code
+like this works now:
+
+ (define-module (foo) #:export (bar))
+ (define (helper x) ...)
+ (define-syntax bar
+ (syntax-rules () ((_ x) (helper x))))
+
+ (define-module (baz) #:use-module (foo))
+ (bar qux)
+
+It used to be you had to export `helper' from `(foo)' as well.
+Thankfully, this has been fixed.
+
+** New function, `procedure-module'
+
+While useful on its own, `procedure-module' is used by psyntax on syntax
+transformers to determine the module in which to scope introduced
+identifiers.
+
+** `eval-case' has been deprecated, and replaced by `eval-when'.
+
+The semantics of `eval-when' are easier to understand. It is still
+missing documentation, however.
+
+** Guile is now more strict about prohibiting definitions in expression
+ contexts.
+
+Although previous versions of Guile accepted it, the following
+expression is not valid, in R5RS or R6RS:
+
+ (if test (define foo 'bar) (define foo 'baz))
+
+In this specific case, it would be better to do:
+
+ (define foo (if test 'bar 'baz))
+
+It is certainly possible to circumvent this resriction with e.g.
+`(module-define! (current-module) 'foo 'baz)'. We would appreciate
+feedback about this change (a consequence of using psyntax as the
+default expander), and may choose to revisit this situation before 2.0
+in response to user feedback.
+
+** Defmacros must now produce valid Scheme expressions.
+
+It used to be that defmacros could unquote in Scheme values, as a way of
+supporting partial evaluation, and avoiding some hygiene issues. For
+example:
+
+ (define (helper x) ...)
+ (define-macro (foo bar)
+ `(,helper ,bar))
+
+Assuming this macro is in the `(baz)' module, the direct translation of
+this code would be:
+
+ (define (helper x) ...)
+ (define-macro (foo bar)
+ `((@@ (baz) helper) ,bar))
+
+Of course, one could just use a hygienic macro instead:
+
+ (define-syntax foo
+ (syntax-rules ()
+ ((_ bar) (helper bar))))
+
+** Guile's psyntax now supports docstrings and internal definitions.
+
+The following Scheme is not strictly legal:
+
+ (define (foo)
+ "bar"
+ (define (baz) ...)
+ (baz))
+
+However its intent is fairly clear. Guile interprets "bar" to be the
+docstring of `foo', and the definition of `baz' is still in definition
+context.
+
+** Macros need to be defined before their first use.
+
+It used to be that with lazy memoization, this might work:
+
+ (define (foo x)
+ (ref x))
+ (define-macro (ref x) x)
+ (foo 1) => 1
+
+But now, the body of `foo' is interpreted to mean a call to the toplevel
+`ref' function, instead of a macro expansion. The solution is to define
+macros before code that uses them.
+
+** Functions needed by macros at expand-time need to be present at
+ expand-time.
+
+For example, this code will work at the REPL:
+
+ (define (double-helper x) (* x x))
+ (define-macro (double-literal x) (double-helper x))
+ (double-literal 2) => 4
+
+But it will not work when a file is compiled, because the definition of
+`double-helper' is not present at expand-time. The solution is to wrap
+the definition of `double-helper' in `eval-when':
+
+ (eval-when (load compile eval)
+ (define (double-helper x) (* x x)))
+ (define-macro (double-literal x) (double-helper x))
+ (double-literal 2) => 4
+
+See the (currently missing) documentation for eval-when for more
+information.
+
+** New variable, %pre-modules-transformer
+
+Need to document this one some more.
+
+** Temporarily removed functions: `macroexpand', `macroexpand-1'
+
+`macroexpand' will be added back before 2.0. It is unclear how to
+implement `macroexpand-1' with syntax-case, though PLT Scheme does prove
+that it is possible.
** New reader macros: #' #` #, #,@
@@ -253,211 +448,61 @@ XXX Need to decide whether to document this for 2.0, probably should:
make-syncase-macro, make-extended-syncase-macro, macro-type,
syncase-macro-type, syncase-macro-binding
-** `(ice-9 syncase)' has been deprecated.
-
-As syntax-case is available by default, importing `(ice-9 syncase)' has
-no effect, and will trigger a deprecation warning.
-
-** Fix bug in `module-bound?'.
-
-`module-bound?' was returning true if a module did have a local
-variable, but one that was unbound, but another imported module bound
-the variable. This was an error, and was fixed.
-
-** BUG: Automatic compilation will be attempted when it shouldn't.
-
-For example, the old (lang elisp) modules are meant to be interpreted,
-not compiled. This bug will be fixed before 2.0. FIXME 2.0: Should say
-something here about module-transformer called for compile.
-
-** Defmacros may now have docstrings.
-
-Indeed, any macro may have a docstring. `object-documentation' from
-`(ice-9 documentation)' may be used to retrieve the docstring, once you
-have a macro value -- but see the above note about first-class macros.
-Docstrings are associated with the syntax transformer procedures.
-
-** `eval-case' has been deprecated, and replaced by `eval-when'.
-
-The semantics of `eval-when' are easier to understand. It is still
-missing documentation, however.
-
-** Guile is now more strict about prohibiting definitions in expression
- contexts.
-
-Although previous versions of Guile accepted it, the following
-expression is not valid, in R5RS or R6RS:
-
- (if test (define foo 'bar) (define foo 'baz))
-
-In this specific case, it would be better to do:
-
- (define foo (if test 'bar 'baz))
-
-It is certainly possible to circumvent this resriction with e.g.
-`(module-define! (current-module) 'foo 'baz)'. We would appreciate
-feedback about this change (a consequence of using psyntax as the
-default expander), and may choose to revisit this situation before 2.0
-in response to user feedback.
-
-** Defmacros must now produce valid Scheme expressions.
-
-It used to be that defmacros could unquote in Scheme values, as a way of
-supporting partial evaluation, and avoiding some hygiene issues. For
-example:
-
- (define (helper x) ...)
- (define-macro (foo bar)
- `(,helper ,bar))
-
-Assuming this macro is in the `(baz)' module, the direct translation of
-this code would be:
-
- (define (helper x) ...)
- (define-macro (foo bar)
- `((@@ (baz) helper) ,bar))
-
-Of course, one could just use a hygienic macro instead:
-
- (define-syntax foo
- (syntax-rules ()
- ((_ bar) (helper bar))))
-
-** Guile's psyntax now supports docstrings and internal definitions.
-
-The following Scheme is not strictly legal:
-
- (define (foo)
- "bar"
- (define (baz) ...)
- (baz))
-
-However its intent is fairly clear. Guile interprets "bar" to be the
-docstring of `foo', and the definition of `baz' is still in definition
-context.
-
-** Macros need to be defined before their first use.
-
-It used to be that with lazy memoization, this might work:
-
- (define (foo x)
- (ref x))
- (define-macro (ref x) x)
- (foo 1) => 1
-
-But now, the body of `foo' is interpreted to mean a call to the toplevel
-`ref' function, instead of a macro expansion. The solution is to define
-macros before code that uses them.
-
-** Functions needed by macros at expand-time need to be present at
- expand-time.
-
-For example, this code will work at the REPL:
-
- (define (double-helper x) (* x x))
- (define-macro (double-literal x) (double-helper x))
- (double-literal 2) => 4
-
-But it will not work when a file is compiled, because the definition of
-`double-helper' is not present at expand-time. The solution is to wrap
-the definition of `double-helper' in `eval-when':
-
- (eval-when (load compile eval)
- (define (double-helper x) (* x x)))
- (define-macro (double-literal x) (double-helper x))
- (double-literal 2) => 4
-
-See the (currently missing) documentation for eval-when for more
-information.
-
-** New variable, %pre-modules-transformer
-
-Need to document this one some more.
-
-** Temporarily removed functions: `macroexpand', `macroexpand-1'
-
-`macroexpand' will be added back before 2.0. It is unclear how to
-implement `macroexpand-1' with syntax-case, though PLT Scheme does prove
-that it is possible.
-
-** New module: (rnrs bytevector)
-
-See the R6RS for more information.
-
-** New dependency: GNU libunistring.
-
-
-FIXME bytevectors.
-
-FIXME unistring.
-
-more robust threading support.
-
-syncase knows about @/@@
-
-macros and hygiene and modules
-
-eval-closure-module? what?
-
-procedure-module / scm_procedure_module
-
-guile-config info sitedir change -- 922d369
-
-guile-config and pkg-config
-
-(system xref), procedure-callers, procedure-callees, can work as
-variables get redefined
+** A new 'memoize-symbol evaluator trap has been added. This trap can
+be used for efficiently implementing a Scheme code coverage.
-getrlimit and setrlimit wrappers
+** Duplicate bindings among used modules are resolved lazily.
+This slightly improves program startup times.
-FIXME: getrlimit crazy namespaces...
+** New thread cancellation and thread cleanup API
+See `cancel-thread', `set-thread-cleanup!', and `thread-cleanup'.
-add method-formals
+** Fix bad interaction between `false-if-exception' and stack-call.
-BUG? procedure-property 'arity on compiled procedures will be wrong
+Exceptions thrown by `false-if-exception' were erronously causing the
+stack to be saved, causing later errors to show the incorrectly-saved
+backtrace. This has been fixed.
-BUG: SCM_SNAME -> SCM_SUBR_NAME
+** New global variables: %load-compiled-path, %load-compiled-extensions
-(ice-9 session):
-add-value-help-handler! remove-value-help-handler!
-add-name-help-handler! remove-name-help-handler!
-export module-commentary
-procedure-arguments
+These are analogous to %load-path and %load-extensions.
-procedure->memoizing-macro, procedure->syntax totally superdeprecated?
+** New procedure, `make-promise'
-FIXME: update copyrights
+`(make-promise (lambda () foo))' is equivalent to `(delay foo)'.
-ecmascript support?
+** New entry into %guile-build-info: `ccachedir'
-new repl...
+** Fix bug in `module-bound?'.
-guile-tools compile, guile-tools disassemble (does that work?)
+`module-bound?' was returning true if a module did have a local
+variable, but one that was unbound, but another imported module bound
+the variable. This was an error, and was fixed.
-BUG: stack walks to see number of frames, then fills those frames.
-sometimes those numbers differ, warning to console, a test case would be
-nice.
+** `(ice-9 syncase)' has been deprecated.
-FIXME: dance disassembly bug
+As syntax-case is available by default, importing `(ice-9 syncase)' has
+no effect, and will trigger a deprecation warning.
-srfi-18
+* Changes to the C interface
-<method> has formals, body slots; (make-procedure & procedure ?)
+** The GH interface (deprecated in version 1.6, 2001) was removed.
-FIXME: rewrite while
+** Internal `scm_i_' functions now have "hidden" linkage with GCC/ELF
-removed (the-environment)
+This makes these internal functions technically not callable from
+application code.
-new function: scm_module_public_interface
+** Functions for handling `scm_option' now no longer require an argument
+indicating length of the `scm_t_option' array.
-BUG: help at guile prompt
+** scm_primitive_load_path has additional argument, exception_on_error
-new procedure, make-promise
+** New C function: scm_module_public_interface
-* New modules (see the manual for details)
+This procedure corresponds to Scheme's `module-public-interface'.
-** `(srfi srfi-18)', multithreading support
-** The `(ice-9 i18n)' module provides internationalization support
+** scm_stat has additional argument, exception_on_error
* Changes to the distribution
@@ -467,29 +512,23 @@ In other words the GNU Lesser General Public License, version 3 or
later (at the discretion of each person that chooses to redistribute
part of Guile).
-* Changes to the stand-alone interpreter
-* Changes to Scheme functions and syntax
-
-** A new 'memoize-symbol evaluator trap has been added. This trap can
-be used for efficiently implementing a Scheme code coverage.
+** `guile-config' will be deprecated in favor of `pkg-config'
-** Duplicate bindings among used modules are resolved lazily.
-This slightly improves program startup times.
-
-** New thread cancellation and thread cleanup API
-See `cancel-thread', `set-thread-cleanup!', and `thread-cleanup'.
+`guile-config' has been rewritten to get its information from
+pkg-config, so this should be a transparent change. Note however that
+guile.m4 has yet to be modified to call pkg-config instead of
+guile-config.
-* Changes to the C interface
+** New installation directory: $(pkglibdir)/1.9/ccache
-** The GH interface (deprecated in version 1.6, 2001) was removed.
+If $(libdir) is /usr/lib, for example, Guile will install its .go files
+to /usr/lib/guile/1.9/ccache. These files are architecture-specific.
-** Internal `scm_i_' functions now have "hidden" linkage with GCC/ELF
+** New dependency: GNU libunistring.
-This makes these internal functions technically not callable from
-application code.
+See http://www.gnu.org/software/libunistring/. We hope to merge in
+Unicode support in the next prerelease.
-** Functions for handling `scm_option' now no longer require an argument
-indicating length of the `scm_t_option' array.
Changes in 1.8.7 (since 1.8.6)