Guile 1.4.x NEWS --- history of user-visible changes Copyright (C) 2007, 2008 Thien-Thi Nguyen See the end for copying conditions. Please send Guile 1.4.x bug reports to . - 1.4.1.118 | 2008-07-16 - bugfix: guile.m4 macro GUILE_TOOLS_PROG handles missing program This macro used to erroneously set the shell-variable to a null string in the case where the requested program was unavailable. - some guile.m4 macros use config.cache - GUILE_FLAGS - GUILE_SITE_DIR - GUILE_LIBSITE_DIR - GUILE_TOOLS_PROG These macros now use AC_CACHE_CHECK, so subsequent invocations of the configure script execute faster (if -C is specified). - 1.4.1.117 | 2008-04-26 - bugfix: AF_UNIX filename for socket ops can now be a shared substring Previously, such ops (full set: `connect', 'bind', `sendto') would signal a "No such file or directory" error if the shared substring did not happen to be followed by a #\nul in memory. - changes to guile-tools - dropped option: --scriptsdir - dropped option: --guileversion - dropped option: --help-all No Big Deal (these misfeatures were never used internally; a query to the guile-user mailing list about --scriptsdir received no responses). - new option: --probe (or -p) This allows the idiom: if guile-tools | grep -q foo ; then guile-tools foo bar baz fi to be condensed to: foo=$(guile-tools -p foo) || foo=: $foo bar baz (presuming `bar baz' evaluates w/o undesirable side-effects). - new guile.m4 macro: GUILE_TOOLS_PROG This builds on new "guile-tools -p" support (see above). A typical usage would be: # configure.ac GUILE_TOOLS_PROG([mmc],[make-module-catalog]) # Makefile.am install-data-hook: $(mmc) $(GUILE_SITELIB) - `simple-format' now understands ~a, ~s, ~~, ~% This is in addition to handling ~A and ~S, as before. Any other tilde-escape (excluding tilde at end of format string) results in an "unsupported format option" error. Also, `simple-format' now signals a "missing argument" error if there are fewer arguments than tilde-escapes. Compatibility note: This change brings `simple-format' into line with other Guile versions. - 1.4.1.116 | 2008-04-18 - dropped configure option: --disable-dynamic-linking Maybe this will return later, but probably not. - bugfix: dynamic linking arranges for RTLD_GLOBAL The libltdl distributed w/ Libtool 1.5.26 (used by Guile 1.4.1.114 and prior) specifies RTLD_GLOBAL automatically. The Libtool 2.2.2 libltdl, on the other hand, supplies a so-called compatability interface, but barring extra information (i.e., specification via `advise' structure), lets the system choose the default flags. This may result in your system choosing RTLD_LOCAL, breaking modules downstream from non-leaf modules. Example: (sdl gfx) needs symbols from (sdl sdl), so we see: $ guile -c '(use-modules (sdl sdl))' ; echo $? 0 $ guile -c '(use-modules (sdl gfx))' ; echo $? ERROR: In procedure dynamic-link: ERROR: file not found 2 This actually demonstrates another problem (unresolved for this Guile release), namely that the actual error "unresolved symbol gsdl_smob_tags" is not propagated correctly from the system layer (dlopen, in my case) through libltdl to Guile. Meh. Anyway, the point is that previously working stuff no longer works. So, for the time being, for backward compatibility and until a finer-grained Scheme interface shows up, we explicitly construct an `advise' structure and specify `is_symglobal'. NB: This has been tested ONLY with the configure option `--enable-ltdl-install'. YMMV otherwise. - 1.4.1.115 | 2008-04-15 - dropped configure option: --enable-htmldir=DIR Previously this would arrange for "make install" to also install HTML documentation in DIR. To achieve the same result now, use: ./configure --htmldir=DIR make install-html - bugfix: handle (string->number "200000" 8) w/o numeric overflow - dropped module: (ice-9 md-data) Announced in Guile 1.4.1.111 (2007-09-27). - dropped (scripts PROGRAM) proc: script-MAIN NB: This is a backward-incompatible change (but probably with little practical impact -- the proc was has been unused in Guile and gnuvola.org projects since 2003 or so, and documentation was dropped since Guile 1.4.1.100 (2004-10-22)). Use `HVQC-MAIN' from that module, instead. - maintenance uses Autoconf 2.62, Automake 1.10.1, Libtool 2.2.2 - 1.4.1.114 | 2008-03-06 - bugfix: add-to-load-path! synchronizes This proc from module (ice-9 session) now properly updates internal state (module catalog cache) for new directories. - bugfix: fortune cookie file handling more robust Previously, the procs in module (database fcookie) would fail ungracefully if the cookie file did not strictly begin and end with a "delimiter line", that is, for N cookies, there must be N+1 delim-lines. Now, there can be N-1, N or N+1 delim-lines. - bugfix: SRFI 4 u64vector elements w/ high bit set Previously, reading, writing and internal processing of such numbers would incorrectly handle them as negative. Now they are correctly handled as unsigned. - incompatible change: run-all-tests no longer supports "--log FILE" This option proved to be problematic in the presence of tests that (mis)managed their output streams. - extension to substring and make-shared-substring arg handling These procedures now take negative indices. A negative index N is taken as -N counted from the end of the string. For example: (substring "abcde" -4 -2) === (substring "abcde" 1 3) => "bc". - 1.4.1.113 | 2007-10-23 - refinement of -lFOO config/usage Configuration no longer adds "-lgdbm", "-lpthread" and (if enabled) "-lreadline" to the var `LIBS'. Thus, "guile-config link" no longer shows those elements, and the respective libs are no longer loaded on interpreter startup. - 1.4.1.112 | 2007-10-11 - bugfix: scan-md-module regression Starting with Guile 1.4.1.111 (released 2007-09-27), when scan-md-module detected names of upstream modules in backward compatibility mode, it would erroneously save the name as a string instead of as a proper module name (list of symbols). Now it DTRT (again). - 1.4.1.111 | 2007-09-27 - scheduled for removal: module (ice-9 md-data) by 2008-01-01 This was introduced in Guile 1.4.1.100 (2004-10-22), but is superseded by functionality in module (scripts scan-md-module). - new (scripts scan-md-module) proc: attach A poor man's (nm(1)-, objdump(1)-, and strings(1)-based) libbfd wannabe, this proc does file-format lookup and (if recognized) returns a command-delegating closure you can use to mine out a compiled module's #:access-info or #:exports-list. - new (database tmpfile) proc: mkstemp Return a new port open on a temporary file named using string BASE. The actual assigned filename, available via procedure `port-filename', is BASE appended with six random characters. For example: (define p (mkstemp "/tmp/foo-")) (port-filename p) => "/tmp/foo-hoQtxh" - new (ice-9 session) proc: set-fancy-repl-prompt! E.g, to include the current module name in the prompt: (set-fancy-repl-prompt! "\n~M ") - new (ice-9 optargs-kw) proc: remove-keys - 1.4.1.110 | 2007-09-22 - bugfix: scan-md-module handles new ABI more robustly Previously, the module ABI (introduced with Guile 1.4.1.108) would not be recognized in the case where objdump(1) decides to actually disassemble "data" (as requested by scan-md-module). Now, scan-md-module requests full section hexdump and no longer requests disassebly. This is slower but less error-prone. - new EXPERIMENTAL member to scm_smob_descriptor: tcset - new EXPERIMENTAL member to scm_module_initspec: smobs More precisely, the smob descriptor now has `long int *tcset' and the module initspec has `scm_smob_descriptor *smobs'. Together, these extend the module ABI to allow fully-declarative specification of smob types required by the module. Outside this particular context, you can convert, for example: long foo = scm_make_smob_type ("foo", 0); scm_set_smob_mark (foo, mark_foo); scm_set_smob_print (foo, print_foo); to: long foo; scm_smob_descriptor s = { "foo", 0, mark_foo, NULL, print_foo, NULL, &foo }; *s.tcset = scm_make_smob_type_mfpe (s.name, s.size, s.mark, s.free, s.print, s.equalp); Feel the table-driven power! - 1.4.1.109 | 2007-09-15 - bugfix: `-L DIR' maintains module catalog info for each DIR - bugfix: scm_exit_status no longer assumes ARGS is a list If it is a non-empty list, the first element is taken to be the ARG. The return value is a number if ARG is an integer (ie., satisfying SCM_INUMP), EXIT_FAILURE if #f, else EXIT_SUCCESS. - manual includes user-visible copyright notices (Via texinfo commands @copying and @insertcopying.) - 1.4.1.108 | 2007-09-12 - license now straight GPL NB: This differs from other versions of Guile which provide libguile under the GNU Lesser General Public License (LGPL). Guile 1.4.1.108 and derivatives are not to be lessened so. - new dependency: libgdbm This is to support new module (database gnudbm), a transplant of Guile-GDBM . Note that this is a hard-dependency; there is presently no option to disable it. - bugfix: SRFI-19 `date->julian-day' accounts for timezone offset - boot-9.scm procs now autoloaded + new module: (ice-9 cmdline-opts) These procs used to be available on boot, from module (guile): get-option for-next-option display-usage-report transform-usage-lambda They are now autoloaded into module (guile-user) from new module (ice-9 cmdline-opts). NB: Autoloading of (ice-9 cmdline-opts) into (guile-user) is a transition-easing feature and will be removed after 2008-04-20. Callers should arrange to import the module explicitly. - false-if-exception can take a sequence of expressions Before, somewhat strangely, you might see: (false-if-exception (write-line 1) 2) =| ERROR: Wrong number of arguments to # Now, you see: (false-if-exception (write-line 1) 2) =| 1 => 2 - new interpreter command-line option: -L DIR This prefixes DIR to `%load-path'. If specified multiple times, the directories accumulate in the order given. DIRs specified thusly take precedence over those in env var `GUILE_LOAD_PATH', but only after ~/.guile processing. - new (ice-9 rw) proc: read-string!/partial/never-fewer - new (ice-9 rw) proc: write-string!/partial/never-fewer Note that for reading, the interface is different than that of `read-string!/partial'. These procs are basically loops around their more-concisely-named sibling procs. - changes to (ice-9 gap-buffer) - make-gap-buffer now also takes integer or port INIT An integer specifies how much memory (in bytes) to allocate. (The user-visible buffer contents remains empty, however.) A port is read until drained. See "editing-buffer" below. - new procs: gb-char-after, gb-char-before These are also reflected in (ice-9 editing-buffer) bodies. See Emacs funcs `char-after' and `char-before' for details. - new (ice-9 editing-buffer) object property: filename: - new (ice-9 editing-buffer) proc: find-file-read-only - new (ice-9 editing-buffer) proc: find-file These are convenience procedures that make use of the new port INIT feature of the underlying gap-buffer. - changes to executable modules (scripts) - twerp2texi - better error if given -d but no -o The case where auto*-tools compatible dependency tracking is enabled but no output file is specified used to signal a mysterious wrong-type-arg error (because it is impossible to write a Makefile fragment without knowing a filename). Now, the situation is detected earlier and the error message is more to the point: "missing -o OUTFILE". - no more initial "generated file" comment This comment used to be output as the first line. Unfortunately, that interfered with `\input texinfo'. - new command-line option: --scheme-implied Procedure and variable entries used to unconditionally say "Scheme Procedure" or "Scheme Macro". Now, if the documentation is for a Scheme-only package (no C API), the "Scheme " part can be omitted by specifying `--scheme-implied' to the twerp2texi program, yielding simply "Procedure" or "Macro", respectively. - setsearchpath elements may be symbols You can now say `@twerpsetsearchpath (top_srcdir)', for example, to specify the environment variable `top_srcdir' in the search path. Null values, where (getenv VAR) => #f, are omitted. - nontrivial REQ/OPT/VAR output after "C Function" signature For "trivial" -- defined as either (zero? (+ req opt var)) or (zero? (+ opt var)) -- the output is as before. Otherwise, the output looks something like: -- C Function: scm_getpwuid (user) |0 |1 |0 -- C Function: scm_append (args) |0 |0 |1 - mkpimmc temporary catalog names based on output filename Previously, the temporary catalog names were hardcoded as .module-catalog, which interferes when the output filename is also .module-catalog. Now, the temporary catalog names are constructed by appending "TEM" to the output filename. - new command-line option for generate-autoload: --sexp This option inhibits display of the `define-module' form. Instead, the program displays (RESULT ...), with each RESULT being the form produced by applying `module-name/exports' to the respective arg. - default catalog for module-doc-coverage now ".module-catalog" It used to be "pre-inst.merged-module-catalog". - punify handles `(quote foo)' Such forms are now output as " 'foo" (note preceding space). - read-scheme-source includes line number for comments and whitespace - gxsed bugfixes Although it still fails many tests from the GNU Sed 4.1.5 test-suite (see Commentary for partial list), gxsed can be used for many "non-guru" stream editing tasks. NB: YMMV. - lint - bugfix: handle `(do (A B C) ...)' w/ non-pair C correctly Previously, C was assumed to be a parenthesized form, e.g., `(1+ i)', and lint died otherwise. Now a non-pair form in that position is handled as well. - new test: roaming A "roaming guest" is an imported binding that is unused and not re-exported (i.e., "not seated at the table"). If roaming guests are found, lint lists all guests, w/ status "-" (roaming) or "+" (situated somewhere). - c2doc changes - bugfix: no longer trip on SCM_REGISTER_PROC This C macro expands, like SCM_DEFINE, into a declaration that includes a count of the required, optional and variable arguments. Unlike SCM_DEFINE, however, the expansion does not include variable names. Previously, c2doc would signal a "sig not clean" error due to the mismatch between total argument count and the parsed arglist (which is always empty when via SCM_REGISTER_PROC). Now, this error is suppressed, and dummy args (arg1, arg2, ...) generated. - new support for "Emacs-style doc: comments" Less quoting, less pain. See database/gdbm.c for example (the extra asterisks help convince Emacs's CC Mode `c-indent-sexp' on the column-0 opening paren to take a break and leave things alone). See (info "(guile) guile-tools c2doc") for details. - formatted arglist includes "#(REQ OPT VAR)" suffix Before: (getpw [user]) (append [args ...]) Now: (getpw [user]#(0 1 0)) (append [args ...]#(0 0 1)) - changes to read-text-outline - uses pretty-print for display The parsed TREE used to be displayed with `write'. Now this is done with `(pretty-print TREE #:escape-strings? #t)'. - new spec: more-lines? BOOL Normally, only header lines are considered. Use `more-lines?' with a non-#f value to specify that non-header lines be included as well. The structure of the output will be the same, however a header that is not immediately followed by another will result in a string with embedded (and possibly trailing) newline chars. - pretty-print can return the string instead of sending it to PORT If PORT is #f, `pretty-print' from module (ice-9 pretty-print) returns the formatted-object string. - module (ice-9 testing-lib) outputs `misc-error' args prettily The reporter used to say: ... - arguments: ((misc-error "foo" "bad ~A: ~S" ("bar" "baz") #f)) Now it says: ... - in procedure foo: bad bar: "baz" - new (ice-9 gumm) proc: module-catalog-manager This proc accepts a keyword command with which you can interact with (query, config, rehash) Guile's module catalog subsystem. - GH_MODULE_LINK_FUNC and GH_NEEDY_MODULE_LINK_FUNC make forward decls These macros, installed in , now generate a forward declaration for the function immediately prior to its definition. This silences "gcc -Wmissing-prototypes" warnings. - more efficient support for compiled-module exports extraction Previously, scripts c2x and generate-autoload conspired (along w/ the help of guile-snarf.in for modules distributed w/ Guile) to embed into, and subsequently read out of, a compiled module the list of "exported procedures". This was implemented w/ a long C string and the external program strings(1), which was functional but not very pretty, especially since C strings over 509 bytes provoke a gcc warning. Now, embedding is subsumed by walking `scm_make_gsubr' over a table (actually a pair of tables, see libguile/modsup.h) and extraction from the name-table is done using only the external program `objdump' (plus some grotty text crawling). Thus we undo the bloatage introduced w/ Guile 1.4.1.103, although the approach still loses once the compiled module is stripped (so don't do that, or do it only after scanning). We hope someone will write module (database bfd) RSN, so as to be able to drop external program dependency altogether, thus transforming the grotty text crawling into grotty bfd_section crawling... - new boot-9.scm proc: unspecified This returns the "unspecified value". - new module: (ice-9 accumulate) - new config.status command: module-catalog-clean-local This is defined when you use macro GUILE_MODULE_CATALOG_PREP from guile.m4. See node "Autoconf Macros" in the manual. - new EXPERIMENTAL support for spec-based compiled-module loading A compiled module is a dynamically shared object library that follows certain conventions. Previously (and still to be supported for the forseeable future), the "version 0" of these conventions specifies a single opaque C thunk to be called to init the module. With this Guile release, we introduce a completely declarative mechanism comprising lots of C structs gathered into a single `struct scm_module_initspec', and appropriate module system (and guile-tools) support for mining this out of the module both at catalog-making (installation) and at run- (load/link-) time. The following can now be initialized by including in the initspec entries that specify their name and storage info: gsubrs (normal SCM* -> SCM as by GH_DEFPROC, for example), strings, symbols, keywords, "imported" objects. The latter covers both interpreter-provided objects (such as the proc `seek' or the number `SEEK_SET') as well as those that require upstream modules to be loaded prior to use (such as the procs from `(ice-9 q) q?' or `(database tmpfile) tmpfile'). Note that `(database tmpfile)' is itself a compiled module. Additionally, non-gsubr objects can also be declared for export. NB: This feature is considered VERY EXPERIMENTAL. Most likely after some real-world thrashing things will change incompatibly to better handle some currently unforseen situation or other. To underscore this status, there is (as yet) no documentation; see libguile/modules.[hc] and ice-9/boot-9/module-system.scm for the gory details. Use w/ caution! Remember to exhale! - maintenance uses GNU Autoconf 2.61 and GNU Libtool 1.5.24 - 1.4.1.107 | 2006-01-28 - bugfixes - module (ice-9 editing-buffer) transforms all `let' forms correctly The transforms internal to the `editing-buffer' macro used to misidentify (and subsequently wrongly rewrite) a `let' form with a null binding list, i.e, `(let () ...)', as a named-let form, by using `(not (pair? ...))'. Now it uses `(symbol? ...)'. - reading a floating point number can underflow to 0.0 Guile used throw an argument-out-of-range error reading a floating point number with a negative exponent less than the value of -SCM_MAXEXP. Now, the result is 0.0. This change is arguably not a bugfix. However, the former behavior proved problematic for the (now withdrawn, sigh) SRFI-56 reference implementation, so that's the basis for this NEWS entry's placement. - availability change for proc: single-active-thread? This proc, aka `scm_single_thread_p' from C, used to throw a "!scm_qtdl" error if `(use-modules (ice-9 threads))' had not yet been evaluated, indicating that the quickthreads shared-object library was not loaded. Now, it returns #t in that case. (After quickthreads is loaded, it uses the loaded routine as usual.) - docs tweaking - guile.m4 macro `GUILE_CHECK': "exit convention" explained - module (ice-9 and-let-star) added to Module Index - maintenance uses GNU Automake 1.9.6 - copyright information Copyright (C) 2006, 2007 Thien-Thi Nguyen Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and this permission notice are preserved, thus giving the recipient permission to redistribute in turn. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last changed them. - etc Local Variables: mode: outline outline-regexp: "\\([ ][ ]\\)*- " fill-column: 72 fill-prefix: "\t" End: