* Changes to the distribution
-** New module (srfi srfi-11):
+** Guile now uses a versioning scheme similar to that of the Linux kernel.
-This module exports let-values and let*-values.
+Guile now always uses three numbers to represent the version,
+i.e. "1.6.5". The first number, 1, is the major version number, the
+second number, 6, is the minor version number, and the third number,
+5, is the micro version number. Changes in major version number
+indicate major changes in Guile.
-** New module (srfi srfi-6):
+Minor version numbers that are even denote stable releases, and odd
+minor version numbers denote development versions (which may be
+unstable). The micro version number indicates a minor sub-revision of
+a given MAJOR.MINOR release.
-This is a dummy file for now, since guile already provides all of the
-srfi-6 procedures by default: open-input-string, open-output-string,
-get-output-string.
+In keeping with the new scheme, (minor-version) and scm_minor_version
+no longer return everything but the major version number. They now
+just return the minor version number. Two new functions
+(micro-version) and scm_micro_version have been added to report the
+micro version number.
-** New module (srfi srfi-8):
+In addition, ./GUILE-VERSION now defines GUILE_MICRO_VERSION.
-This module exports receive.
+** Guile now actively warns about deprecated features.
-** New module (srfi srfi-2):
+The new configure option `--enable-deprecated=LEVEL' and the
+environment variable GUILE_WARN_DEPRECATED control this mechanism.
+See INSTALL and README for more information.
-This module exports and-let*.
+** New SRFI modules have been added:
-** New module (ice-9 stack-catch):
+SRFI-0 `cond-expand' is now supported in Guile, without requiring
+using a module.
-stack-catch is like catch, but saves the current state of the stack in
-the the-last-stack fluid for the debugger to inspect or in able to
-re-throw an error.
+(srfi srfi-2) exports and-let*.
-** The module (ice-9 and-let*) has been renamed to (ice-9 and-let-star)
+(srfi srfi-6) is a dummy module for now, since guile already provides
+ all of the srfi-6 procedures by default: open-input-string,
+ open-output-string, get-output-string.
-This has been done to prevent problems on lesser operating systems
-that can't tolerate `*'s in file names. The exported macro continues
-to be named `and-let*', of course.
+(srfi srfi-8) exports receive.
-On systems that support it, there is also a compatibility module named
-(ice-9 and-let*). It will go away in the next release.
-
-** New modules (oop goops) etc.:
+(srfi srfi-9) exports define-record-type.
- (oop goops)
- (oop goops describe)
- (oop goops save)
- (oop goops active-slot)
- (oop goops composite-slot)
+(srfi srfi-10) exports define-reader-ctor and implements the reader
+ extension #,().
-The Guile Object Oriented Programming System (GOOPS) has been
-integrated into Guile.
+(srfi srfi-11) exports let-values and let*-values.
-Type
+(srfi srfi-13) implements the SRFI String Library.
- (use-modules (oop goops))
+(srfi srfi-14) implements the SRFI Character-Set Library.
-access GOOPS bindings.
+(srfi srfi-17) implements setter and getter-with-setter and redefines
+ some accessor procedures as procedures with getters. (such as car,
+ cdr, vector-ref etc.)
-We're now ready to try some basic GOOPS functionality.
+(srfi srfi-19) implements the SRFI Time/Date Library.
-Generic functions
+** New scripts / "executable modules"
- (define-method (+ (x <string>) (y <string>))
- (string-append x y))
+Subdirectory "scripts" contains Scheme modules that are packaged to
+also be executable as scripts. At this time, these scripts are available:
- (+ 1 2) --> 3
- (+ "abc" "de") --> "abcde"
+ display-commentary
+ doc-snarf
+ generate-autoload
+ punify
+ read-scheme-source
+ use2dot
-User-defined types
+See README there for more info.
- (define-class <2D-vector> ()
- (x #:init-value 0 #:accessor x-component #:init-keyword #:x)
- (y #:init-value 0 #:accessor y-component #:init-keyword #:y))
+These scripts can be invoked from the shell with the new program
+"guile-tools", which keeps track of installation directory for you.
+For example:
- (define-method write ((obj <2D-vector>) port)
- (display (format #f "<~S, ~S>" (x-component obj) (y-component obj))
- port))
+ $ guile-tools display-commentary srfi/*.scm
- (define v (make <2D-vector> #:x 3 #:y 4))
- v --> <3, 4>
+guile-tools is copied to the standard $bindir on "make install".
- (define-method + ((x <2D-vector>) (y <2D-vector>))
- (make <2D-vector>
- #:x (+ (x-component x) (x-component y))
- #:y (+ (y-component x) (y-component y))))
+** New module (ice-9 stack-catch):
+
+stack-catch is like catch, but saves the current state of the stack in
+the fluid the-last-stack. This fluid can be useful when using the
+debugger and when re-throwing an error.
+
+** The module (ice-9 and-let*) has been renamed to (ice-9 and-let-star)
- (+ v v) --> <6, 8>
+This has been done to prevent problems on lesser operating systems
+that can't tolerate `*'s in file names. The exported macro continues
+to be named `and-let*', of course.
-Asking for the type of an object
+On systems that support it, there is also a compatibility module named
+(ice-9 and-let*). It will go away in the next release.
- (class-of v) --> #<<class> <2D-vector> 40241ac0>
- <2D-vector> --> #<<class> <2D-vector> 40241ac0>
- (class-of 1) --> #<<class> <integer> 401b2a98>
- <integer> --> #<<class> <integer> 401b2a98>
+** New modules (oop goops) etc.:
- (is-a? v <2D-vector>) --> #t
+ (oop goops)
+ (oop goops describe)
+ (oop goops save)
+ (oop goops active-slot)
+ (oop goops composite-slot)
-See further in the GOOPS manual and tutorial in the `doc' directory,
-in info (goops.info) and texinfo formats.
+The Guile Object Oriented Programming System (GOOPS) has been
+integrated into Guile. For further information, consult the GOOPS
+manual and tutorial in the `doc' directory.
** New module (ice-9 rdelim).
Alternatively, if guile-scsh is installed, the (scsh rdelim) module
can be used for similar functionality.
-** New module (ice-9 match)
+** New module (ice-9 rw)
+
+This is a subset of the (scsh rw) module from guile-scsh. Currently
+it defines a single procedure:
+
+*** New function: read-string!/partial str [port_or_fdes [start [end]]]
-This module includes Andrew K. Wright's pattern matcher:
+ Read characters from an fport or file descriptor into a string
+ STR. This procedure is scsh-compatible and can efficiently read
+ large strings.
-(use-modules (ice-9 match))
+** New module (ice-9 match)
-(match '(+ 1 2)
- (('+ x) x)
- (('+ x y) `(add ,x ,y))
- (('- x y) `(sub ,x ,y))) => (add 1 2)
+This module includes Andrew K. Wright's pattern matcher. See
+ice-9/match.scm for brief description or
-See ice-9/match.scm for brief description or
-http://www.star-lab.com/wright/code.html for complete documentation.
+ http://www.star-lab.com/wright/code.html
+
+for complete documentation.
This module requires SLIB to be installed and available from Guile.
reference documentation for using GOOPS, Guile's Object Oriented
Programming System.
-- The Revised^4 and Revised^5 Reports on the Algorithmic Language
- Scheme (r4rs.texi and r5rs.texi).
+- The Revised^5 Report on the Algorithmic Language Scheme
+ (r5rs.texi).
See the README file in the `doc' directory for more details.
* Changes to the stand-alone interpreter
-** Evaluation of "()", the empty list, is now an error.
+** New command line option `--use-srfi'
+
+Using this option, SRFI modules can be loaded on startup and be
+available right from the beginning. This makes programming portable
+Scheme programs easier.
+
+The option `--use-srfi' expects a comma-separated list of numbers,
+each representing a SRFI number to be loaded into the interpreter
+before starting evaluating a script file or the REPL. Additionally,
+the feature identifier for the loaded SRFIs is recognized by
+`cond-expand' when using this option.
+
+Example:
+$ guile --use-srfi=8,13
+guile> (receive (x z) (values 1 2) (+ 1 2))
+3
+guile> (string-pad "bla" 20)
+" bla"
+
+
+* Changes to Scheme functions and syntax
+
+** Previously deprecated Scheme functions have been removed:
-Previously, you could for example write (cons 1 ()); now you need to
-be more explicit and write (cons 1 '()).
+ tag - no replacement.
+ fseek - replaced by seek.
+ list* - replaced by cons*.
** It's now possible to create modules with controlled environments
(eval '(+ 1 2) m) --> 3
(eval 'load m) --> ERROR: Unbound variable: load
-* Changes to Scheme functions and syntax
-
-** The empty combination is no longer valid syntax.
+** Evaluation of "()", the empty list, is now an error.
Previously, the expression "()" evaluated to the empty list. This has
been changed to signal a "missing expression" error. The correct way
to write the empty list as a literal constant is to use quote: "'()".
+** New concept of `Guile Extensions'.
+
+A Guile Extension is just a ordinary shared library that can be linked
+at run-time. We found it advantageous to give this simple concept a
+dedicated name to distinguish the issues related to shared libraries
+from the issues related to the module system.
+
+*** New function: load-extension
+
+Executing (load-extension lib init) is mostly equivalent to
+
+ (dynamic-call init (dynamic-link lib))
+
+except when scm_register_extension has been called previously.
+Whenever appropriate, you should use `load-extension' instead of
+dynamic-link and dynamic-call.
+
+*** New C function: scm_c_register_extension
+
+This function registers a initialization function for use by
+`load-extension'. Use it when you don't want specific extensions to
+be loaded as shared libraries (for example on platforms that don't
+support dynamic linking).
+
** Auto-loading of compiled-code modules is deprecated.
Guile used to be able to automatically find and link a shared
-libraries to satisfy requests for a module. For example, the module
+library to satisfy requests for a module. For example, the module
`(foo bar)' could be implemented by placing a shared library named
"foo/libbar.so" (or with a different extension) in a directory on the
load path of Guile.
-This has been found to be too tricky, and is no longer supported.
-What you should do instead now is to write a small Scheme file that
-explicitly calls `dynamic-link' to load the shared library and
-`dynamic-call' to initialize it.
+This has been found to be too tricky, and is no longer supported. The
+shared libraries are now called "extensions". You should now write a
+small Scheme file that calls `load-extension' to load the shared
+library and initialize it explicitely.
The shared libraries themselves should be installed in the usual
places for shared libraries, with names like "libguile-foo-bar".
(define-module (foo bar))
- (dynamic-call "foobar_init" (dynamic-link "libguile-foo-bar"))
+ (load-extension "libguile-foo-bar" "foobar_init")
+
+** Backward incompatible change: eval EXP ENVIRONMENT-SPECIFIER
+
+`eval' is now R5RS, that is it takes two arguments.
+The second argument is an environment specifier, i.e. either
+
+ (scheme-report-environment 5)
+ (null-environment 5)
+ (interaction-environment)
+
+or
-The file name passed to `dynamic-link' should not contain an
-extension. It will be provided automatically.
+ any module.
** The module system has been made more disciplined.
-The function `eval' will now save and restore the current module
-around the evaluation of the specified expression. While this
-expression is evaluated, `(current-module)' will now return the right
-module, which is the module specified as the second argument to
-`eval'.
+The function `eval' will save and restore the current module around
+the evaluation of the specified expression. While this expression is
+evaluated, `(current-module)' will now return the right module, which
+is the module specified as the second argument to `eval'.
-A consequence of this change is that `eval' is not particularily
+A consequence of this change is that `eval' is not particularly
useful when you want allow the evaluated code to change what module is
designated as the current module and have this change persist from one
call to `eval' to the next. The read-eval-print-loop is an example
etc. did not respect changes to the current module although these
subforms are at the top-level as well.
-To prevent strange behaviour, the forms `define-module',
+To prevent strange behavior, the forms `define-module',
`use-modules', `use-syntax', and `export' have been restricted to only
work on the top level. The forms `define-public' and
`defmacro-public' only export the new binding on the top level. They
** The semantics of guardians have changed.
The changes are for the most part compatible. An important criterion
-was to keep the typical usage of guardians as simple as before, but to
+was to keep the typical usage of guardians as simple as before, but to
make the semantics safer and (as a result) more useful.
*** All objects returned from guardians are now properly alive.
Note that all this hair is hardly very important, since guardian
objects are usually permanent.
-** Escape procedures created by call-with-current-continuation now
-accept any number of arguments, as required by R5RS.
+** Continuations created by call-with-current-continuation now accept
+any number of arguments, as required by R5RS.
-** New function `call-with-deprecation'
+** New function `issue-deprecation-warning'
-Call a thunk, displaying a deprecation message at the first call:
+This function is used to display the deprecation messages that are
+controlled by GUILE_WARN_DEPRECATION as explained in the README.
(define (id x)
- (call-with-deprecation "`id' is deprecated. Use `identity' instead."
- (lambda ()
- (identity x))))
+ (issue-deprecation-warning "`id' is deprecated. Use `identity' instead.")
+ (identity x))
guile> (id 1)
;; `id' is deprecated. Use `identity' instead.
guile> (id 1)
1
+** New syntax `begin-deprecated'
+
+When deprecated features are included (as determined by the configure
+option --enable-deprecated), `begin-deprecated' is identical to
+`begin'. When deprecated features are excluded, it always evaluates
+to `#f', ignoring the body forms.
+
** New function `make-object-property'
This function returns a new `procedure with setter' P that can be used
The old reader syntax `#&' is still supported, but deprecated. It
will be removed in the next release.
-** Backward incompatible change: eval EXP ENVIRONMENT-SPECIFIER
-
-`eval' is now R5RS, that is it takes two arguments.
-The second argument is an environment specifier, i.e. either
-
- (scheme-report-environment 5)
- (null-environment 5)
- (interaction-environment)
-
-or
-
- any module.
-
** New define-module option: pure
Tells the module system not to include any bindings from the root
Example:
-(define-module (foo)
- :pure
- :use-module (ice-9 r5rs)
- :export (bar))
+ (define-module (foo)
+ :pure
+ :use-module (ice-9 r5rs)
+ :export (bar))
-;;; Note that we're pure R5RS below this point!
+ ;;; Note that we're pure R5RS below this point!
-(define (bar)
- ...)
-
-** Deprecated: scm_make_shared_substring
-
-Explicit shared substrings will disappear from Guile.
-
-Instead, "normal" strings will be implemented using sharing
-internally, combined with a copy-on-write strategy.
-
-** Deprecated: scm_read_only_string_p
-
-The concept of read-only strings will disappear in next release of
-Guile.
-
-** Deprecated: scm_sloppy_memq, scm_sloppy_memv, scm_sloppy_member
-
-Instead, use scm_c_memq or scm_memq, scm_memv, scm_member.
-
-** New function: read-string!/partial str [port_or_fdes [start [end]]]
-
- Read characters from an fport or file descriptor into a string
- STR. This procedure is scsh-compatible and can efficiently read
- large strings. It will:
-
- * attempt to fill the entire string, unless the START and/or
- END arguments are supplied. i.e., START defaults to 0 and
- END defaults to `(string-length str)'
-
- * use the current input port if PORT_OR_FDES is not supplied.
-
- * read any characters that are currently available, without
- waiting for the rest (short reads are possible).
-
- * wait for as long as it needs to for the first character to
- become available, unless the port is in non-blocking mode
-
- * return `#f' if end-of-file is encountered before reading any
- characters, otherwise return the number of characters read.
-
- * return 0 if the port is in non-blocking mode and no characters
- are immediately available.
-
- * return 0 if the request is for 0 bytes, with no end-of-file
- check
+ (define (bar)
+ ...)
** New function: object->string OBJ
** New function: port-for-each proc
- Apply PROC to each port in the Guile port table in turn. The
- return value is unspecified. More specifically, PROC is applied
- exactly once to every port that exists in the system at the time
- PORT-FOR-EACH is invoked. Changes to the port table while
- PORT-FOR-EACH is running have no effect as far as PORT-FOR-EACH is
- concerned.
+Apply PROC to each port in the Guile port table in turn. The return
+value is unspecified. More specifically, PROC is applied exactly once
+to every port that exists in the system at the time PORT-FOR-EACH is
+invoked. Changes to the port table while PORT-FOR-EACH is running
+have no effect as far as PORT-FOR-EACH is concerned.
** New function: dup2 oldfd newfd
** New function: inet-pton family address
- Convert a printable string network address into an integer. Note
- that unlike the C version of this function, the result is an
- integer with normal host byte ordering. FAMILY can be `AF_INET'
- or `AF_INET6'. e.g.,
- (inet-pton AF_INET "127.0.0.1") => 2130706433
- (inet-pton AF_INET6 "::1") => 1
+Convert a printable string network address into an integer. Note that
+unlike the C version of this function, the result is an integer with
+normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
+e.g.,
+
+ (inet-pton AF_INET "127.0.0.1") => 2130706433
+ (inet-pton AF_INET6 "::1") => 1
** New function: inet-ntop family address
- Convert an integer network address into a printable string. Note
- that unlike the C version of this function, the input is an
- integer with normal host byte ordering. FAMILY can be `AF_INET'
- or `AF_INET6'. e.g.,
- (inet-ntop AF_INET 2130706433) => "127.0.0.1"
- (inet-ntop AF_INET6 (- (expt 2 128) 1)) =>
+Convert an integer network address into a printable string. Note that
+unlike the C version of this function, the input is an integer with
+normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
+e.g.,
+
+ (inet-ntop AF_INET 2130706433) => "127.0.0.1"
+ (inet-ntop AF_INET6 (- (expt 2 128) 1)) =>
ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
** Deprecated: id
Use `identity' instead.
+** Deprecated: -1+
+
+Use `1-' instead.
+
+** Deprecated: return-it
+
+Do without it.
+
+** Deprecated: string-character-length
+
+Use `string-length' instead.
+
+** Deprecated: flags
+
+Use `logior' instead.
+
** Deprecated: close-all-ports-except.
This was intended for closing ports in a child process after a fork,
(use-modules (oop goops old-define-method) (oop goops))
-* Changes to the gh_ interface
+** Deprecated function: builtin-variable
+ Removed function: builtin-bindings
-* Changes to the scm_ interface
+There is no longer a distinction between builtin or other variables.
+Use module system operations for all variables.
+
+** Lazy-catch handlers are no longer allowed to return.
+
+That is, a call to `throw', `error', etc is now guaranteed to not
+return.
+
+* Changes to the C interface
+
+** Deprecated feature have been removed.
+
+*** Macros removed
+
+ SCM_INPORTP, SCM_OUTPORTP SCM_ICHRP, SCM_ICHR, SCM_MAKICHR
+ SCM_SETJMPBUF SCM_NSTRINGP SCM_NRWSTRINGP SCM_NVECTORP SCM_DOUBLE_CELLP
+
+*** C Functions removed
+
+ scm_sysmissing scm_tag scm_tc16_flo scm_tc_flo
+ scm_fseek - replaced by scm_seek.
+ gc-thunk - replaced by after-gc-hook.
+ gh_int2scmb - replaced by gh_bool2scm.
+ scm_tc_dblr - replaced by scm_tc16_real.
+ scm_tc_dblc - replaced by scm_tc16_complex.
+ scm_list_star - replaced by scm_cons_star.
+
+** Deprecated: scm_make_shared_substring
+
+Explicit shared substrings will disappear from Guile.
+
+Instead, "normal" strings will be implemented using sharing
+internally, combined with a copy-on-write strategy.
+
+** Deprecated: scm_read_only_string_p
+
+The concept of read-only strings will disappear in next release of
+Guile.
+
+** Deprecated: scm_sloppy_memq, scm_sloppy_memv, scm_sloppy_member
+
+Instead, use scm_c_memq or scm_memq, scm_memv, scm_member.
** New function: scm_c_read (SCM port, void *buffer, scm_sizet size)
the case that the object is not found in the list, scm_c_memq returns #f which
is similar to scm_memq, but different from scm_sloppy_memq's behaviour.
-** New functions: scm_remember_upto_here_1, scm_remember_upto_here_2,
+** New functions: scm_remember_upto_here_1, scm_remember_upto_here_2,
scm_remember_upto_here
These functions replace the function scm_remember.
Use these instead of SCM_LENGTH_MAX.
-** New macros: SCM_CONTINUATION_LENGTH, SCM_CCLO_LENGTH, SCM_STACK_LENGTH,
+** New macros: SCM_CONTINUATION_LENGTH, SCM_CCLO_LENGTH, SCM_STACK_LENGTH,
SCM_STRING_LENGTH, SCM_SYMBOL_LENGTH, SCM_UVECTOR_LENGTH,
SCM_BITVECTOR_LENGTH, SCM_VECTOR_LENGTH.
Use these instead of SCM_LENGTH.
-** New macros: SCM_SET_CONTINUATION_LENGTH, SCM_SET_STRING_LENGTH,
+** New macros: SCM_SET_CONTINUATION_LENGTH, SCM_SET_STRING_LENGTH,
SCM_SET_SYMBOL_LENGTH, SCM_SET_VECTOR_LENGTH, SCM_SET_UVECTOR_LENGTH,
SCM_SET_BITVECTOR_LENGTH
Use these instead of SCM_SETLENGTH
-** New macros: SCM_STRING_CHARS, SCM_SYMBOL_CHARS, SCM_CCLO_BASE,
+** New macros: SCM_STRING_CHARS, SCM_SYMBOL_CHARS, SCM_CCLO_BASE,
SCM_VECTOR_BASE, SCM_UVECTOR_BASE, SCM_BITVECTOR_BASE, SCM_COMPLEX_MEM,
SCM_ARRAY_MEM
Use these instead of SCM_CHARS, SCM_UCHARS, SCM_ROCHARS, SCM_ROUCHARS or
SCM_VELTS.
-** New macros: SCM_SET_BIGNUM_BASE, SCM_SET_STRING_CHARS,
+** New macros: SCM_SET_BIGNUM_BASE, SCM_SET_STRING_CHARS,
SCM_SET_SYMBOL_CHARS, SCM_SET_UVECTOR_BASE, SCM_SET_BITVECTOR_BASE,
SCM_SET_VECTOR_BASE
For directory objects, use these instead of SCM_OPDIRP and SCM_OPN.
-** Deprecated macros: SCM_OUTOFRANGE, SCM_NALLOC, SCM_HUP_SIGNAL,
-SCM_INT_SIGNAL, SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL,
-SCM_ALRM_SIGNAL, SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD,
+** Deprecated macros: SCM_OUTOFRANGE, SCM_NALLOC, SCM_HUP_SIGNAL,
+SCM_INT_SIGNAL, SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL,
+SCM_ALRM_SIGNAL, SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD,
SCM_ORD_SIG, SCM_NUM_SIGS, SCM_SYMBOL_SLOTS, SCM_SLOTS, SCM_SLOPPY_STRINGP,
SCM_VALIDATE_STRINGORSUBSTR, SCM_FREEP, SCM_NFREEP, SCM_CHARS, SCM_UCHARS,
SCM_VALIDATE_ROSTRING, SCM_VALIDATE_ROSTRING_COPY,
Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_STRINGORSUBSTR.
Use SCM_FREE_CELL_P instead of SCM_FREEP/SCM_NFREEP
Use a type specific accessor macro instead of SCM_CHARS/SCM_UCHARS.
-Use a type specific accessor instead of SCM(_|_RO|_HUGE_)LENGTH.
+Use a type specific accessor instead of SCM(_|_RO|_HUGE_)LENGTH.
Use SCM_VALIDATE_(SYMBOL|STRING) instead of SCM_VALIDATE_ROSTRING.
Use SCM_STRING_COERCE_0TERMINATION_X instead of SCM_COERCE_SUBSTR.
Use SCM_STRINGP or SCM_SYMBOLP instead of SCM_ROSTRINGP.
scm_gensym now only takes one argument.
-** New function: scm_gentemp (SCM prefix, SCM obarray)
-
-The builtin `gentemp' has now become a primitive.
-
** Deprecated type tags: scm_tc7_ssymbol, scm_tc7_msymbol, scm_tcs_symbols,
scm_tc7_lvector
Use scm_wrong_type_arg, or another appropriate error signalling function
instead.
+** Explicit support for obarrays has been deprecated.
+
+Use `scm_str2symbol' and the generic hashtable functions instead.
+
+** The concept of `vcells' has been deprecated.
+
+The data type `variable' is now used exclusively. `Vcells' have been
+a low-level concept so you are likely not affected by this change.
+
+*** Deprecated functions: scm_sym2vcell, scm_sysintern,
+ scm_sysintern0, scm_symbol_value0, scm_intern, scm_intern0.
+
+Use scm_c_define or scm_c_lookup instead, as appropriate.
+
+*** New functions: scm_c_module_lookup, scm_c_lookup,
+ scm_c_module_define, scm_c_define, scm_module_lookup, scm_lookup,
+ scm_module_define, scm_define.
+
+These functions work with variables instead of with vcells.
+
+** New functions for creating and defining `subr's and `gsubr's.
+
+The new functions more clearly distinguish between creating a subr (or
+gsubr) object and adding it to the current module.
+
+These new functions are available: scm_c_make_subr, scm_c_define_subr,
+scm_c_make_subr_with_generic, scm_c_define_subr_with_generic,
+scm_c_make_gsubr, scm_c_define_gsubr, scm_c_make_gsubr_with_generic,
+scm_c_define_gsubr_with_generic.
+
+** Deprecated functions: scm_make_subr, scm_make_subr_opt,
+ scm_make_subr_with_generic, scm_make_gsubr,
+ scm_make_gsubr_with_generic.
+
+Use the new ones from above instead.
+
+** C interface to the module system has changed.
+
+While we suggest that you avoid as many explicit module system
+operations from C as possible for the time being, the C interface has
+been made more similar to the high-level Scheme module system.
+
+*** New functions: scm_c_define_module, scm_c_use_module,
+ scm_c_export, scm_c_resolve_module.
+
+They mostly work like their Scheme namesakes. scm_c_define_module
+takes a function that is called a context where the new module is
+current.
+
+*** Deprecated functions: scm_the_root_module, scm_make_module,
+ scm_ensure_user_module, scm_load_scheme_module.
+
+Use the new functions instead.
+
+** Renamed function: scm_internal_with_fluids becomes
+ scm_c_with_fluids.
+
+scm_internal_with_fluids is available as a deprecated function.
+
+** New function: scm_c_with_fluid.
+
+Just like scm_c_with_fluids, but takes one fluid and one value instead
+of lists of same.
+
\f
Changes since Guile 1.3.4:
Usage: (help NAME) gives documentation about objects named NAME (a symbol)
(help REGEXP) ditto for objects with names matching REGEXP (a string)
+ (help 'NAME) gives documentation for NAME, even if it is not an object
(help ,EXPR) gives documentation for object returned by EXPR
+ (help (my module)) gives module commentary for `(my module)'
(help) gives this text
`help' searches among bindings exported from loaded modules, while
thread context. This has now been fixed with a workaround which uses
the pthreads to allocate the stack.
-** New primitives: `pkgdata-dir', `site-dir', `library-dir'
+** New primitives: `pkgdata-dir', `site-dir', `library-dir'
** Positions of erring expression in scripts
** The initial default output port is now unbuffered if it's using a
tty device. Previously in this situation it was line-buffered.
-** gc-thunk is deprecated
-
-gc-thunk will be removed in next release of Guile. It has been
-replaced by after-gc-hook.
-
** New hook: after-gc-hook
after-gc-hook takes over the role of gc-thunk. This hook is run at
You can emulate this feature by using object properties.
-** Deprecated macros: SCM_INPORTP, SCM_OUTPORTP, SCM_CRDY, SCM_ICHRP,
+** Deprecated macros: SCM_INPORTP, SCM_OUTPORTP, SCM_CRDY, SCM_ICHRP,
SCM_ICHR, SCM_MAKICHR, SCM_SETJMPBUF, SCM_NSTRINGP, SCM_NRWSTRINGP,
SCM_NVECTORP
These macros will be removed in a future release of Guile.
-** The following types, functions and macros from numbers.h are deprecated:
+** The following types, functions and macros from numbers.h are deprecated:
scm_dblproc, SCM_UNEGFIXABLE, SCM_FLOBUFLEN, SCM_INEXP, SCM_CPLXP, SCM_REAL,
SCM_IMAG, SCM_REALPART, scm_makdbl, SCM_SINGP, SCM_NUM2DBL, SCM_NO_BIGDIG
available.
** Procedures which depend on the timezone should now give the correct
-result on systems which cache the TZ environment variable, even if TZ
+result on systems which cache the TZ environment variable, even if TZ
is changed without calling tzset.
* Changes to the networking interfaces:
in a regular expression will still match before a line-break or
end-of-file. The default is `regexp/noteol'.
-*** The expect-strings macro now uses a variable
+*** The expect-strings macro now uses a variable
`expect-strings-compile-flags' for the flags to be supplied to
`make-regexp'. The default is `regexp/newline', which was previously
hard-coded.
cases, the function behaves as if all the characters were copied
simultanously.
-*** Extended functions: substring-move-left! substring-move-right!
+*** Extended functions: substring-move-left! substring-move-right!
These functions now correctly copy arbitrarily overlapping substrings;
they are both synonyms for substring-move!.
(value BOOL) --- If BOOL is #t, the option accepts a value; if
it is #f, it does not; and if it is the symbol
`optional', the option may appear in ARGS with or
- without a value.
+ without a value.
(predicate FUNC) --- If the option accepts a value (i.e. you
specified `(value #t)' for this option), then getopt
will apply FUNC to the value, and throw an exception
(single-char #\v)
(value #f))
(x-includes (single-char #\x))
- (rnet-server (single-char #\y)
+ (rnet-server (single-char #\y)
(predicate ,string?))))
-(getopt-long '("my-prog" "-vk" "/tmp" "foo1" "--x-includes=/usr/include"
+(getopt-long '("my-prog" "-vk" "/tmp" "foo1" "--x-includes=/usr/include"
"--rnet-server=lamprod" "--" "-fred" "foo2" "foo3")
grammar)
=> ((() "foo1" "-fred" "foo2" "foo3")
** New syntax: lambda*
** New syntax: define*
-** New syntax: define*-public
+** New syntax: define*-public
** New syntax: defmacro*
** New syntax: defmacro*-public
-Guile now supports optional arguments.
+Guile now supports optional arguments.
`lambda*', `define*', `define*-public', `defmacro*' and
`defmacro*-public' are identical to the non-* versions except that
and `*', `+' and `?' have the usual meaning):
ext-param-list ::= ( [identifier]* [#&optional [ext-var-decl]+]?
- [#&key [ext-var-decl]+ [#&allow-other-keys]?]?
+ [#&key [ext-var-decl]+ [#&allow-other-keys]?]?
[[#&rest identifier]|[. identifier]]? ) | [identifier]
- ext-var-decl ::= identifier | ( identifier expression )
+ ext-var-decl ::= identifier | ( identifier expression )
The semantics are best illustrated with the following documentation
and examples for `lambda*':
lambda* args . body
lambda extended for optional and keyword arguments
-
+
lambda* creates a procedure that takes optional arguments. These
are specified by putting them inside brackets at the end of the
paramater list, but before any dotted rest argument. For example,
Optional and keyword arguments can also be given default values
which they take on when they are not present in a call, by giving a
two-item list in place of an optional argument, for example in:
- (lambda* (foo #&optional (bar 42) #&key (baz 73)) (list foo bar baz))
+ (lambda* (foo #&optional (bar 42) #&key (baz 73)) (list foo bar baz))
foo is a fixed argument, bar is an optional argument with default
value 42, and baz is a keyword argument with default value 73.
Default value expressions are not evaluated unless they are needed
- and until the procedure is called.
+ and until the procedure is called.
lambda* now supports two more special parameter list keywords.
creating instances of the type. If SIZE is 0, then no memory will
be allocated when instances of the smob are created, and nothing
will be freed by the default free function.
-
+
*** Function: void scm_set_smob_mark (long tc, SCM (*mark) (SCM))
This function sets the smob marking procedure for the smob type
specified by the tag TC. TC is the tag returned by
the-scm-module: backtrace #<primitive-procedure backtrace>
the-scm-module: after-backtrace-hook ()
the-scm-module: has-shown-backtrace-hint? #f
- guile>
+ guile>
** There are new functions and syntax for working with macros.
The symbol `syntax' --- a macro created by procedure->syntax.
The symbol `macro' --- a macro created by procedure->macro.
The symbol `macro!' --- a macro created by procedure->memoizing-macro.
- The boolean #f --- if OBJ is not a macro object.
+ The boolean #f --- if OBJ is not a macro object.
*** New function: (macro-name MACRO)
Return the name of the macro object MACRO's procedure, as returned by
resulting environment which must yield a procedure to use as the
module's eval transformer: every expression evaluated in this module
is passed to this function, and the result passed to the Guile
-interpreter.
+interpreter.
*** macro-eval! is removed. Use local-eval instead.
FLUIDS is a list of fluids and VALUES a corresponding list of
values for these fluids. Before THUNK gets called the values are
- installed in the fluids and the old values of the fluids are
+ installed in the fluids and the old values of the fluids are
saved in the VALUES list. When the flow of control leaves THUNK
or reenters it, the values get swapped again. You might think of
this as a `safe-fluid-excursion'. Note that the VALUES list is
See the file `libguile/DYNAMIC-LINKING' for additional comments.
** The #/ syntax for module names is depreciated, and will be removed
-in a future version of Guile. Instead of
+in a future version of Guile. Instead of
#/foo/bar/baz
** Changes to I/O functions
-*** The functions `read', `primitive-load', `read-and-eval!', and
+*** The functions `read', `primitive-load', `read-and-eval!', and
`primitive-load-path' no longer take optional arguments controlling
case insensitivity and a `#' parser.
The reader applies PROC to two arguments: CHAR and an input port.
-*** The new functions read-delimited and read-delimited! provide a
+*** The new functions read-delimited and read-delimited! provide a
general mechanism for doing delimited input on streams.
(read-delimited DELIMS [PORT HANDLE-DELIM])
you must pass a string to hold the received value. They no longer
return the buffer. Instead, `recv' returns the length of the message
received, and `recvfrom' returns a pair containing the packet's length
-and originating address.
+and originating address.
*** The file descriptor datatype has been removed, as have the
`read-fd', `write-fd', `close', `lseek', and `dup' functions.
Component Accessor
========================= ===============
- official service name servent:name
+ official service name servent:name
alias list servent:aliases
- port number servent:port
- protocol to use servent:proto
+ port number servent:port
+ protocol to use servent:proto
*** There are new accessors for the sockaddr structures returned by
`accept', `getsockname', `getpeername', `recvfrom!':
Component Accessor
======================================== ===============
- address format (`family') sockaddr:fam
+ address format (`family') sockaddr:fam
path, for file domain addresses sockaddr:path
address, for internet domain addresses sockaddr:addr
TCP or UDP port, for internet sockaddr:port
interpreter" above.
** The new functions scm_get_meta_args and scm_count_argv help you
-implement the SCSH-style meta-argument, `\'.
+implement the SCSH-style meta-argument, `\'.
char **scm_get_meta_args (int ARGC, char **ARGV)
If the second element of ARGV is a string consisting of a single
named by the following argument, parse arguments from it, and return
the spliced command line. The returned array is terminated by a
null pointer.
-
+
For details of argument parsing, see above, under "guile now accepts
command-line arguments compatible with SCSH..."
\f
Copyright information:
-Copyright (C) 1996,1997 Free Software Foundation, Inc.
+Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
Permission is granted to anyone to make or distribute verbatim copies
of this document as received, in any medium, provided that the