* Changes to the distribution
-** As per RELEASE directions, deprecated items have been removed
+** Guile now uses a versioning scheme similar to that of the Linux kernel.
-*** Macros removed
+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.
- SCM_INPORTP, SCM_OUTPORTP SCM_ICHRP, SCM_ICHR, SCM_MAKICHR
- SCM_SETJMPBUF SCM_NSTRINGP SCM_NRWSTRINGP SCM_NVECTORP SCM_DOUBLE_CELLP
+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.
-*** C Functions removed
+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.
- 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.
+In addition, ./GUILE-VERSION now defines GUILE_MICRO_VERSION.
-*** scheme functions removed:
+** Guile now actively warns about deprecated features.
- tag - no replacement.
- fseek - replaced by seek.
- list* - replaced by cons*.
+The new configure option `--enable-deprecated=LEVEL' and the
+environment variable GUILE_WARN_DEPRECATED control this mechanism.
+See INSTALL and README for more information.
** New SRFI modules have been added:
+SRFI-0 `cond-expand' is now supported in Guile, without requiring
+using a module.
+
(srfi srfi-2) exports and-let*.
(srfi srfi-6) is a dummy module for now, since guile already provides
(srfi srfi-9) exports define-record-type.
+(srfi srfi-10) exports define-reader-ctor and implements the reader
+ extension #,().
+
(srfi srfi-11) exports let-values and let*-values.
(srfi srfi-13) implements the SRFI String Library.
(srfi srfi-14) implements the SRFI Character-Set Library.
-(srfi srfi-14) implements the SRFI Time/Date Library.
+(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.)
+
+(srfi srfi-19) implements the SRFI Time/Date Library.
** New scripts / "executable modules"
doc-snarf
generate-autoload
punify
+ read-scheme-source
use2dot
See README there for more info.
(oop goops composite-slot)
The Guile Object Oriented Programming System (GOOPS) has been
-integrated into Guile.
-
-Type
-
- (use-modules (oop goops))
-
-access GOOPS bindings.
-
-We're now ready to try some basic GOOPS functionality.
-
-Generic functions
-
- (define-method (+ (x <string>) (y <string>))
- (string-append x y))
-
- (+ 1 2) --> 3
- (+ "abc" "de") --> "abcde"
-
-User-defined types
-
- (define-class <2D-vector> ()
- (x #:init-value 0 #:accessor x-component #:init-keyword #:x)
- (y #:init-value 0 #:accessor y-component #:init-keyword #:y))
-
- (define-method write ((obj <2D-vector>) port)
- (display (format #f "<~S, ~S>" (x-component obj) (y-component obj))
- port))
-
- (define v (make <2D-vector> #:x 3 #:y 4))
- v --> <3, 4>
-
- (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))))
-
- (+ v v) --> <6, 8>
-
-Asking for the type of an object
-
- (class-of v) --> #<<class> <2D-vector> 40241ac0>
- <2D-vector> --> #<<class> <2D-vector> 40241ac0>
- (class-of 1) --> #<<class> <integer> 401b2a98>
- <integer> --> #<<class> <integer> 401b2a98>
-
- (is-a? v <2D-vector>) --> #t
-
-See further in the GOOPS manual and tutorial in the `doc' directory,
-in info (goops.info) and texinfo formats.
+integrated into Guile. For further information, consult the GOOPS
+manual and tutorial in the `doc' directory.
** New module (ice-9 rdelim).
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]]]
+*** 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
+ large strings.
** New module (ice-9 match)
-This module includes Andrew K. Wright's pattern matcher:
-
-(use-modules (ice-9 match))
+This module includes Andrew K. Wright's pattern matcher. See
+ice-9/match.scm for brief description or
-(match '(+ 1 2)
- (('+ x) x)
- (('+ x y) `(add ,x ,y))
- (('- x y) `(sub ,x ,y))) => (add 1 2)
+ http://www.star-lab.com/wright/code.html
-See ice-9/match.scm for brief description or
-http://www.star-lab.com/wright/code.html for complete documentation.
+for complete documentation.
This module requires SLIB to be installed and available from Guile.
* Changes to the stand-alone interpreter
-** Evaluation of "()", the empty list, is now an error.
+** New command line option `--use-srfi'
-Previously, you could for example write (cons 1 ()); now you need to
-be more explicit and write (cons 1 '()).
+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:
+
+ 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
"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)
-The file name passed to `dynamic-link' should not contain an
-extension. It will be provided automatically.
+or
+
+ 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
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 `issue-deprecation-warning'
-This function is used to displaying the deprecation messages that are
+This function is used to display the deprecation messages that are
controlled by GUILE_WARN_DEPRECATION as explained in the README.
(define (id x)
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))
-
-;;; Note that we're pure R5RS below this point!
+ (define-module (foo)
+ :pure
+ :use-module (ice-9 r5rs)
+ :export (bar))
-(define (bar)
- ...)
+ ;;; Note that we're pure R5RS below this point!
-** 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.
+ (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
** Deprecated: return-it
-Use `noop' instead.
+Do without it.
** Deprecated: string-character-length
(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)
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.
+
+** Deprecated typedefs: long_long, ulong_long.
+
+They are of questionable utility and they pollute the global
+namespace.
+
+** New macro: SCM_BITS_LENGTH.
+
+The bit size of an SCM.
+
+** Deprecated typedef: scm_sizet
+
+It is of questionable utility now that Guile requires ANSI C, and is
+oddly named.
+
+** Deprecated typedefs: scm_port_rw_active, scm_port,
+ scm_ptob_descriptor, scm_debug_info, scm_debug_frame, scm_fport,
+ scm_option, scm_rstate, scm_rng, scm_array, scm_array_dim.
+
+Made more compliant with the naming policy by adding a _t at the end.
+
+** Deprecated functions: scm_mkbig, scm_big2num, scm_adjbig,
+ scm_normbig, scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl
+
+With the exception of the misterious scm_2ulong2big, they are still
+available under new names (scm_i_mkbig etc). These functions are not
+intended to be used in user code. You should avoid dealing with
+bignums directly, and should deal with numbers in general (which can
+be bignums).
+
+** New functions: scm_short2num, scm_ushort2num, scm_int2num,
+ scm_uint2num, scm_bits2num, scm_ubits2num, scm_size2num,
+ scm_ptrdiff2num, scm_num2short, scm_num2ushort, scm_num2int,
+ scm_num2uint, scm_num2bits, scm_num2ubits, scm_num2ptrdiff,
+ scm_num2size.
+
+These are conversion functions between the various ANSI C integral
+types and Scheme numbers.
+
+** New number validation macros:
+ SCM_NUM2{SIZE,PTRDIFF,SHORT,USHORT,BITS,UBITS,INT,UINT}[_DEF]
+
+See above.
+
\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