X-Git-Url: http://git.hcoop.net/bpt/guile.git/blobdiff_plain/466bb4b35006d48011016b338afb80b0d13a9eb2..f4e0611e9937d9b9abb34495b49c17c4a3576c2e:/NEWS diff --git a/NEWS b/NEWS index 7f6aa8469..9238563d1 100644 --- a/NEWS +++ b/NEWS @@ -8,31 +8,38 @@ Changes since Guile 1.4: * 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 @@ -43,12 +50,21 @@ Changes since Guile 1.4: (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-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" Subdirectory "scripts" contains Scheme modules that are packaged to @@ -58,10 +74,19 @@ also be executable as scripts. At this time, these scripts are available: doc-snarf generate-autoload punify + read-scheme-source use2dot See README there for more info. +These scripts can be invoked from the shell with the new program +"guile-tools", which keeps track of installation directory for you. +For example: + + $ guile-tools display-commentary srfi/*.scm + +guile-tools is copied to the standard $bindir on "make install". + ** New module (ice-9 stack-catch): stack-catch is like catch, but saves the current state of the stack in @@ -86,55 +111,8 @@ On systems that support it, there is also a compatibility module named (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 ) (y )) - (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) --> #< <2D-vector> 40241ac0> - <2D-vector> --> #< <2D-vector> 40241ac0> - (class-of 1) --> #< 401b2a98> - --> #< 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). @@ -160,46 +138,20 @@ can be used for similar functionality. 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: +This module includes Andrew K. Wright's pattern matcher. See +ice-9/match.scm for brief description or -(use-modules (ice-9 match)) + http://www.star-lab.com/wright/code.html -(match '(+ 1 2) - (('+ x) x) - (('+ x y) `(add ,x ,y)) - (('- x y) `(sub ,x ,y))) => (add 1 2) - -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. @@ -237,10 +189,33 @@ 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. -Previously, you could for example write (cons 1 ()); now you need to -be more explicit and write (cons 1 '()). +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 @@ -252,26 +227,48 @@ Example: (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". @@ -280,20 +277,29 @@ For example, place this into a file "foo/bar.scm" (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 @@ -310,7 +316,7 @@ Previously, subforms of top-level forms such as `begin', `case', 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 @@ -362,17 +368,17 @@ objects that were guarded by it, thus undoing the side effect. 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. @@ -380,6 +386,13 @@ Call a thunk, displaying a deprecation message at the first call: 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 @@ -404,19 +417,6 @@ Instead of #&optional, #&key, etc you should now use #:optional, 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 @@ -436,31 +436,15 @@ a module which doesn't import one of `define-public' or `export'. 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 @@ -477,12 +461,11 @@ Determines whether a given object is a port that is related to a file. ** 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 @@ -565,27 +548,45 @@ Return the argument. ** 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, @@ -617,9 +618,51 @@ If you have old code using the old syntax, import (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) @@ -810,10 +853,6 @@ Instead, create a fresh vector of the desired size and copy the contents. 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 @@ -837,6 +876,113 @@ Use scm_object_to_string instead. 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. + Changes since Guile 1.3.4: @@ -947,6 +1093,7 @@ This is useful when debugging your .guile init file or scripts. 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