tests: Fix file name canonicalization tests for when $srcdir contains symlinks.
[bpt/guile.git] / NEWS
CommitLineData
b2cbe8d8 1Guile NEWS --- history of user-visible changes.
de2811cc 2Copyright (C) 1996-2013 Free Software Foundation, Inc.
5c54da76
JB
3See the end for copying conditions.
4
1e457544 5Please send Guile bug reports to bug-guile@gnu.org.
5ebbe4ef 6
66ad445d 7
de2811cc
AW
8Changes in 2.0.8 (since 2.0.7):
9
10* TODO
11
12Reorder points in order of importance and make comprehensible
13
14Assemble thanks
15
f361bb93 16file name docs
de2811cc 17
f361bb93 18gnulib version
de2811cc 19
01b83dbd
AW
20--language docs
21
f361bb93 22* Notable changes
de2811cc 23
01b83dbd 24** New guile.m4.
de2811cc 25
f361bb93
AW
26The `guile.m4' autoconf macros have been rewritten to use `guild' and
27`pkg-config' instead of the deprecated `guile-config' (which itself
28calls pkg-config).
de2811cc 29
f361bb93
AW
30There is also a new macro, `GUILE_PKG', which allows packages to select
31the version of Guile that they want to compile against. See "Autoconf
32Macros" in the manual, for more information.
de2811cc 33
01b83dbd 34** Better Windows support.
de2811cc 35
f361bb93
AW
36Guile now correctly identifies absolute paths on Windows (MinGW), and
37creates files on that platform according to its path conventions. See
38XXX in the manual, for all details.
de2811cc 39
f361bb93
AW
40In addition, the new Gnulib imports provide `select' and `poll' on
41Windows builds.
de2811cc 42
f361bb93
AW
43As an incompatible change, systems that are missing <sys/select.h> were
44previously provided a public `scm_std_select' C function that defined a
45version of `select', but unhappily it also provided its own incompatible
46definitions for FD_SET, FD_ZERO, and other system interface. Guile
47should not be setting these macros in public API, so this interface was
48removed on those plaforms (basically only MinGW).
de2811cc 49
01b83dbd 50** Gnulib update.
de2811cc 51
8d6e3dd8
LC
52Guile's copy of Gnulib was updated to v0.0-7865-ga828bb2. The following
53modules were imported from Gnulib: select, times, pipe-posix, fstat,
54getlogin, and poll.
de2811cc 55
01b83dbd 56** New optimizations.
de2811cc 57
f361bb93 58There were a number of improvements to the partial evaluator, allowing
01b83dbd 59complete reduction of forms such as:
de2811cc 60
f361bb93 61 ((let ((_ 10)) (lambda () _)))
de2811cc 62
f361bb93 63 ((lambda _ _))
de2811cc 64
f361bb93 65 (apply (lambda _) 1 2 3 4)
de2811cc 66
f361bb93 67 (call-with-values (lambda () (values 1 2)) (lambda _ _))
de2811cc 68
f361bb93
AW
69A number (ahem) of numeric operations on have been made faster, among
70them GCD and logarithms.
de2811cc 71
f361bb93
AW
72Finally, `array-ref' and `array-set!' on arrays of rank 1 or 2 is now
73faster, because it avoids building a rest list.
de2811cc 74
01b83dbd 75** `include' resolves relative file names relative to including file.
de2811cc 76
f361bb93
AW
77Given a relative file name, `include' will look for it relative to the
78directory of the including file. This harmonizes the behavior of
79`include' with that of `load'.
de2811cc 80
01b83dbd 81** SLIB compatibility restored.
de2811cc 82
f361bb93
AW
83Guile 2.0.8 is now compatible with SLIB. You will have to use a
84development version of SLIB, however, until a new version of SLIB is
85released.
de2811cc 86
01b83dbd 87** Better ,trace REPL command.
f361bb93
AW
88
89Sometimes the ,trace output for nested function calls could overflow the
90terminal width, which wasn't useful. Now there is a limit to the amount
91of space the prefix will take. See the documentation for ",trace" for
92more information.
de2811cc 93
01b83dbd 94** Update predefined character sets to Unicode 6.2.
de2811cc
AW
95
96* Manual updates
97
01b83dbd 98** Better SXML documentation.
de2811cc 99
f361bb93
AW
100The documentation for SXML modules was much improved, though there is
101still far to go. See "SXML" in manual.
de2811cc 102
01b83dbd 103** Style updates.
de2811cc 104
f361bb93
AW
105Use of "iff" was replaced with standard English. Keyword arguments are
106now documented consistently, along with their default values.
de2811cc 107
01b83dbd 108** An end to the generated-documentation experiment.
de2811cc 109
f361bb93
AW
110When Guile 2.0 imported some modules from Guile-Lib, they came with a
111system that generated documentation from docstrings and module
112commentaries. This produced terrible documentation. We finally bit the
113bullet and incorporated these modules into the main text, and will be
114improving them manually over time, as is the case with SXML. Help is
115appreciated.
de2811cc 116
01b83dbd 117** New documentation.
de2811cc 118
f361bb93
AW
119There is now documentation for `scm_array_type', and `scm_array_ref', as
120well as for the new `array-length' / 'scm_c_array_length' /
121`scm_array_length' functions. `array-in-bounds?' has better
122documentation as well. The `program-arguments-alist' and
123`program-lambda-list' functions are now documented. Finally, the GOOPS
124class hierarchy diagram has been regenerated for the web and print
125output formats.
de2811cc 126
f361bb93 127* New deprecations
de2811cc 128
01b83dbd 129** Deprecate generalized vector interface.
de2811cc 130
f361bb93
AW
131The generalized vector interface, introduced in 1.8.0, is simply a
132redundant, verbose interface to arrays of rank 1. `array-ref' and
133similar functions are entirely sufficient. Thus,
134`scm_generalized_vector_p', `scm_generalized_vector_length',
135`scm_generalized_vector_ref', `scm_generalized_vector_set_x', and
136`scm_generalized_vector_to_list' are now deprecated.
de2811cc 137
01b83dbd 138** Deprecate SCM_CHAR_CODE_LIMIT and char-code-limit.
de2811cc 139
f361bb93
AW
140These constants were defined to 256, which is not the highest codepoint
141supported by Guile. Given that they were useless and incorrect, they
142have been deprecated.
de2811cc 143
01b83dbd 144** Deprecate `http-get*'.
de2811cc 145
f361bb93 146The new `#:streaming?' argument to `http-get' subsumes the functionality
ed4aa264
LC
147of `http-get*' (introduced in 2.0.7). Also, the `#:extra-headers'
148argument is deprecated in favor of `#:headers'.
de2811cc 149
01b83dbd 150** Deprecate (ice-9 mapping).
de2811cc 151
f361bb93
AW
152This module, present in Guile since 1996 but never used or documented,
153has never worked in Guile 2.0. It has now been deprecated and will be
154removed in Guile 2.2.
de2811cc
AW
155
156* New interfaces
157
01b83dbd 158** `round-ash', a bit-shifting operator that rounds on right-shift.
de2811cc 159
01b83dbd 160See "Bitwise Operations".
de2811cc 161
01b83dbd 162** New environment variables: `GUILE_STACK_SIZE', `GUILE_INSTALL_LOCALE'.
de2811cc 163
01b83dbd 164See "Environment Variables".
de2811cc 165
ed4aa264
LC
166** New procedure `sendfile'.
167
168See "File System".
169
01b83dbd 170** New procedures for dealing with file names.
de2811cc 171
01b83dbd
AW
172See XXX for documentation on `system-file-name-convention',
173`file-name-separator?', `absolute-file-name?', and
174`file-name-separator-string'.
de2811cc 175
01b83dbd 176** `array-length', an array's first dimension.
de2811cc 177
01b83dbd 178See "Array Procedures".
de2811cc 179
01b83dbd 180** `hash-count', for hash tables.
de2811cc 181
01b83dbd 182See "Hash Tables".
de2811cc 183
01b83dbd 184** New foreign types: `ssize_t', `ptrdiff_t'.
de2811cc 185
01b83dbd 186See "Foreign Types".
de2811cc 187
01b83dbd 188** New C helpers: `scm_from_ptrdiff_t', `scm_to_ptrdiff_t'.
de2811cc 189
01b83dbd 190See "Integers".
de2811cc 191
01b83dbd 192** Much more capable `xml->sxml'
de2811cc 193
01b83dbd
AW
194See "Reading and Writing XML" for information on how the `xml->sxml'
195parser deals with namespaces, processed entities, doctypes, and literal
196strings. Incidentally, `current-ssax-error-port' is now a parameter
197object.
de2811cc 198
01b83dbd 199** New command-line argument: `--language'
de2811cc 200
01b83dbd 201See XXX in the manual.
de2811cc 202
01b83dbd 203** `current-language' in default environment.
de2811cc 204
01b83dbd
AW
205Previously defined only in `(system base language)', `current-language'
206is now defined in the default environment, and is used to determine the
207language for the REPL, and for `compile-and-load'.
de2811cc 208
01b83dbd 209** New procedure: `fluid->parameter'
de2811cc 210
01b83dbd
AW
211See "Parameters", for information on how to convert a fluid to a
212parameter.
de2811cc 213
01b83dbd 214** New procedures to read all characters from a port
de2811cc 215
01b83dbd
AW
216See "Line/Delimited" in the manual for documentation on `read-string'
217 and `read-string!'.
de2811cc 218
01b83dbd 219** New HTTP client procedures.
de2811cc 220
01b83dbd
AW
221See "Web Client" for documentation on the new `http-head', `http-post',
222`http-put', `http-delete', `http-trace', and `http-options' procedures,
223and also for more options to `http-get'.
de2811cc 224
01b83dbd 225** New procedures for converting strings to and from bytevectors.
de2811cc 226
01b83dbd
AW
227See "Representing Strings as Bytes" for documention on the new `(ice-9
228iconv)' module and its `bytevector->string' and `string->bytevector'
229procedures.
de2811cc 230
01b83dbd 231** New `print' REPL option.
de2811cc 232
01b83dbd
AW
233See "REPL Commands" in the manual for information on the new
234user-customizable REPL printer.
de2811cc 235
01b83dbd 236** New variable: %site-ccache-dir.
de2811cc 237
01b83dbd
AW
238The "Installing Site Packages" and "Build Config" manual sections now
239refer to this variable to describe where users should install their
240`.go' files.
de2811cc
AW
241
242* Build fixes
243
f361bb93 244** Fix compilation against libgc 7.3.
de2811cc 245** Fix cross-compilation of `c-tokenize.o'.
f361bb93
AW
246** Fix warning when compiling against glibc 2.17.
247** Fix documentation build against Texinfo 5.0.
01b83dbd
AW
248** Fix building Guile from a directory with non-ASCII characters.
249** Fix native MinGW build.
250** Fix --disable-posix build.
251** Fix MinGW builds with networking, POSIX, and thread support.
de2811cc
AW
252
253* Bug fixes
254
ed4aa264
LC
255** SRFI-37: Fix infinite loop when parsing optional-argument short options
256 (http://bugs.gnu.org/13176)
257** web: Support non-GMT date headers in the HTTP client
258 (http://bugs.gnu.org/13544)
259** Avoid stack overflows with `par-map' and nested futures in general
260 (http://bugs.gnu.org/13188)
01b83dbd
AW
261** A fork when multiple threads are running will now print a warning.
262** Allow for spurious wakeups from pthread_cond_wait.
de2811cc 263 (http://bugs.gnu.org/10641)
01b83dbd 264** Warn and ignore module autoload failures.
de2811cc 265 (http://bugs.gnu.org/12202)
01b83dbd
AW
266** Use chmod portably in (system base compile).
267 (http://bugs.gnu.org/10474)
268** Fix response-body-port for responses without content-length.
269 (http://bugs.gnu.org/13857)
270** Allow case-lambda expressions with no clauses.
271 (http://bugs.gnu.org/9776)
de2811cc
AW
272** Improve standards conformance of string->number.
273 (http://bugs.gnu.org/11887)
01b83dbd
AW
274** Support calls and tail-calls with more than 255 formals.
275** ,option evaluates its right-hand-side.
de2811cc 276 (http://bugs.gnu.org/13076)
01b83dbd 277** Structs with tail arrays are not simple.
de2811cc
AW
278 (http://bugs.gnu.org/12808)
279** Make `SCM_LONG_BIT' usable in preprocessor conditionals.
280 (http://bugs.gnu.org/13848)
281** Fix thread-unsafe lazy initializations.
01b83dbd 282** Allow SMOB mark procedures to be called from parallel markers.
de2811cc
AW
283 (http://bugs.gnu.org/13611)
284** Fix later-bindings-win logic in with-fluids.
285 (http://bugs.gnu.org/13843)
286** Fix duplicate removal of with-fluids.
287 (http://bugs.gnu.org/13838)
288** Support calling foreign functions of 10 arguments or more.
01b83dbd
AW
289 (http://bugs.gnu.org/13809)
290** Let reverse! accept arbitrary types as second argument.
291 (http://bugs.gnu.org/13835)
de2811cc
AW
292** Recognize the `x86_64.*-gnux32' triplet.
293** Check whether a triplet's OS part specifies an ABI.
294** Recognize mips64* as having 32-bit pointers by default.
01b83dbd
AW
295** Remove language/glil/decompile-assembly.scm.
296 (http://bugs.gnu.org/10622)
297** Use O_BINARY in `copy-file', `load-objcode', `mkstemp'.
298** Fix compilation of functions with more than 255 local variables.
de2811cc 299** Fix `getgroups' for when zero supplementary group IDs exist.
01b83dbd
AW
300** Allow (define-macro name (lambda ...)).
301** Various fixes to the (texinfo) modules.
de2811cc 302** guild: Gracefully handle failures to install the locale.
01b83dbd
AW
303** Fix format string warnings for ~!, ~|, ~/, ~q, ~Q, and ~^.
304 (http://bugs.gnu.org/13485)
de2811cc 305** Fix source annotation bug in psyntax 'expand-body'.
01b83dbd
AW
306** Ecmascript: Fix conversion to boolean for non-numbers.
307** A failure to find a module's file does not prevent future loading.
308** Many (oop goops save) fixes.
309** `http-get': don't shutdown write end of socket.
310 (http://bugs.gnu.org/13095)
311** Avoid signed integer overflow in scm_product.
312** http: read-response-body always returns bytevector or #f (not EOF in one case).
de2811cc
AW
313** web: Correctly detect "No route to host" conditions.
314** `system*': failure to execvp no longer leaks dangling processes
315 (http://bugs.gnu.org/13166)
316** More sensible case-lambda* dispatch
01b83dbd 317 (http://bugs.gnu.org/12929)
de2811cc
AW
318** Do not defer expansion of internal define-syntax forms.
319 (http://bugs.gnu.org/13509)
320
321
322\f
13fac282
LC
323Changes in 2.0.7 (since 2.0.6):
324
325* Notable changes
326
327** SRFI-105 curly infix expressions are supported
328
329Curly infix expressions as described at
330http://srfi.schemers.org/srfi-105/srfi-105.html are now supported by
331Guile's reader. This allows users to write things like {a * {b + c}}
332instead of (* a (+ b c)). SRFI-105 support is enabled by using the
333`#!curly-infix' directive in source code, or the `curly-infix' reader
334option. See the manual for details.
335
336** Reader options may now be per-port
337
338Historically, `read-options' and related procedures would manipulate
339global options, affecting the `read' procedure for all threads, and all
340current uses of `read'.
341
342Guile can now associate `read' options with specific ports, allowing
343different ports to use different options. For instance, the
344`#!fold-case' and `#!no-fold-case' reader directives have been
345implemented, and their effect is to modify the current read options of
346the current port only; similarly for `#!curly-infix'. Thus, it is
347possible, for instance, to have one port reading case-sensitive code,
348while another port reads case-insensitive code.
349
350** Futures may now be nested
351
352Futures may now be nested: a future can itself spawn and then `touch'
353other futures. In addition, any thread that touches a future that has
354not completed now processes other futures while waiting for the touched
355future to completed. This allows all threads to be kept busy, and was
356made possible by the use of delimited continuations (see the manual for
357details.)
358
2813d725
MW
359Consequently, `par-map' and `par-for-each' have been rewritten and can
360now use all cores.
13fac282 361
3919585f
MW
362** `GUILE_LOAD_PATH' et al can now add directories to the end of the path
363
364`GUILE_LOAD_PATH' and `GUILE_LOAD_COMPILED_PATH' can now be used to add
365directories to both ends of the load path. If the special path
366component `...' (ellipsis) is present in these environment variables,
367then the default path is put in place of the ellipsis, otherwise the
368default path is placed at the end. See "Environment Variables" in the
369manual for details.
370
13fac282
LC
371** `load-in-vicinity' search for `.go' files in `%load-compiled-path'
372
373Previously, `load-in-vicinity' would look for compiled files in the
374auto-compilation cache, but not in `%load-compiled-path'. This is now
375fixed. This affects `load', and the `-l' command-line flag. See
376<http://bugs.gnu.org/12519> for details.
377
378** Extension search order fixed, and LD_LIBRARY_PATH preserved
379
380Up to 2.0.6, Guile would modify the `LD_LIBRARY_PATH' environment
381variable (or whichever is relevant for the host OS) to insert its own
382default extension directories in the search path (using GNU libltdl
383facilities was not possible here.) This approach was problematic in two
384ways.
385
386First, the `LD_LIBRARY_PATH' modification would be visible to
387sub-processes, and would also affect future calls to `dlopen', which
388could lead to subtle bugs in the application or sub-processes. Second,
a94e7d85
MW
389when the installation prefix is /usr, the `LD_LIBRARY_PATH' modification
390would typically end up inserting /usr/lib before /usr/local/lib in the
391search path, which is often the opposite of system-wide settings such as
392`ld.so.conf'.
13fac282
LC
393
394Both issues have now been fixed.
395
396** `make-vtable-vtable' is now deprecated
397
398Programs should instead use `make-vtable' and `<standard-vtable>'.
399
400** The `-Wduplicate-case-datum' and `-Wbad-case-datum' are enabled
401
402These recently introduced warnings have been documented and are now
403enabled by default when auto-compiling.
404
a94e7d85 405** Optimize calls to `equal?' or `eqv?' with a constant argument
13fac282 406
a94e7d85
MW
407The compiler simplifies calls to `equal?' or `eqv?' with a constant
408argument to use `eq?' instead, when applicable.
13fac282
LC
409
410* Manual updates
411
412** SRFI-9 records now documented under "Compound Data Types"
413
414The documentation of SRFI-9 record types has been moved in the "Compound
415Data Types", next to Guile's other record APIs. A new section
416introduces the various record APIs, and describes the trade-offs they
417make. These changes were made in an attempt to better guide users
418through the maze of records API, and to recommend SRFI-9 as the main
419API.
420
421The documentation of Guile's raw `struct' API has also been improved.
422
423** (ice-9 and-let-star) and (ice-9 curried-definitions) now documented
424
425These modules were missing from the manual.
426
427* New interfaces
428
429** New "functional record setters" as a GNU extension of SRFI-9
430
431The (srfi srfi-9 gnu) module now provides three new macros to deal with
432"updates" of immutable records: `define-immutable-record-type',
433`set-field', and `set-fields'.
434
435The first one allows record type "functional setters" to be defined;
436such setters keep the record unchanged, and instead return a new record
437with only one different field. The remaining macros provide the same
438functionality, and also optimize updates of multiple or nested fields.
439See the manual for details.
440
441** web: New `http-get*', `response-body-port', and `text-content-type?'
442 procedures
443
444These procedures return a port from which to read the response's body.
445Unlike `http-get' and `read-response-body', they allow the body to be
446processed incrementally instead of being stored entirely in memory.
447
448The `text-content-type?' predicate allows users to determine whether the
449content type of a response is textual.
450
451See the manual for details.
452
453** `string-split' accepts character sets and predicates
454
455The `string-split' procedure can now be given a SRFI-14 character set or
456a predicate, instead of just a character.
457
3b539098 458** R6RS SRFI support
13fac282 459
3b539098
LC
460Previously, in R6RS modules, Guile incorrectly ignored components of
461SRFI module names after the SRFI number, making it impossible to specify
462sub-libraries. This release corrects this, bringing us into accordance
463with SRFI 97.
13fac282
LC
464
465** `define-public' is no a longer curried definition by default
466
467The (ice-9 curried-definitions) should be used for such uses. See the
468manual for details.
469
470* Build fixes
471
472** Remove reference to `scm_init_popen' when `fork' is unavailable
473
474This fixes a MinGW build issue (http://bugs.gnu.org/12477).
475
476** Fix race between installing `guild' and the `guile-tools' symlink
477
478* Bug fixes
479
480** Procedures returned by `eval' now have docstrings
481 (http://bugs.gnu.org/12173)
482** web client: correctly handle uri-query, etc. in relative URI headers
483 (http://bugs.gnu.org/12827)
484** Fix docs for R6RS `hashtable-copy'
485** R6RS `string-for-each' now accepts multiple string arguments
486** Fix out-of-range error in the compiler's CSE pass
487 (http://bugs.gnu.org/12883)
488** Add missing R6RS `open-file-input/output-port' procedure
489** Futures: Avoid creating the worker pool more than once
490** Fix invalid assertion about mutex ownership in threads.c
491 (http://bugs.gnu.org/12719)
492** Have `SCM_NUM2FLOAT' and `SCM_NUM2DOUBLE' use `scm_to_double'
493** The `scandir' procedure now uses `lstat' instead of `stat'
494** Fix `generalized-vector->list' indexing bug with shared arrays
495 (http://bugs.gnu.org/12465)
496** web: Change `http-get' to try all the addresses for the given URI
497** Implement `hash' for structs
498 (http://lists.gnu.org/archive/html/guile-devel/2012-10/msg00031.html)
499** `read' now adds source properties for data types beyond pairs
500** Improve error reporting in `append!'
501** In fold-matches, set regexp/notbol unless matching string start
502** Don't stat(2) and access(2) the .go location before using it
503** SRFI-19: use zero padding for hours in ISO 8601 format, not blanks
504** web: Fix uri-encoding for strings with no unreserved chars, and octets 0-15
505** More robust texinfo alias handling
506** Optimize `format' and `simple-format'
507 (http://bugs.gnu.org/12033)
508** Angle of -0.0 is pi, not zero
509
510\f
d2e35793
AW
511Changes in 2.0.6 (since 2.0.5):
512
513* Notable changes
514
515** New optimization pass: common subexpression elimination (CSE)
516
517Guile's optimizer will now run a CSE pass after partial evaluation.
518This pass propagates static information about branches taken, bound
519lexicals, and effects from an expression's dominators. It can replace
520common subexpressions with their boolean values (potentially enabling
521dead code elimination), equivalent bound lexicals, or it can elide them
522entirely, depending on the context in which they are executed. This
523pass is especially useful in removing duplicate type checks, such as
d7a33b64 524those produced by SRFI-9 record accessors.
d2e35793
AW
525
526** Improvements to the partial evaluator
527
528Peval can now hoist tests that are common to both branches of a
529conditional into the test. This can help with long chains of
530conditionals, such as those generated by the `match' macro. Peval can
531now do simple beta-reductions of procedures with rest arguments. It
532also avoids residualizing degenerate lexical aliases, even when full
533inlining is not possible. Finally, peval now uses the effects analysis
534introduced for the CSE pass. More precise effects analysis allows peval
535to move more code.
536
537** Run finalizers asynchronously in asyncs
538
539Finalizers are now run asynchronously, via an async. See Asyncs in the
540manual. This allows Guile and user code to safely allocate memory while
541holding a mutex.
542
543** Update SRFI-14 character sets to Unicode 6.1
544
545Note that this update causes the Latin-1 characters `§' and `¶' to be
546reclassified as punctuation. They were previously considered to be part
547of `char-set:symbol'.
548
549** Better source information for datums
550
551When the `positions' reader option is on, as it is by default, Guile's
552reader will record source information for more kinds of datums.
553
554** Improved error and warning messages
555
d7a33b64
LC
556`syntax-violation' errors now prefer `subform' for source info, with
557`form' as fallback. Syntactic errors in `cond' and `case' now produce
d2e35793
AW
558better errors. `case' can now warn on duplicate datums, or datums that
559cannot be usefully compared with `eqv?'. `-Warity-mismatch' now handles
560applicable structs. `-Wformat' is more robust in the presence of
561`gettext'. Finally, various exceptions thrown by the Web modules now
562define appropriate exception printers.
563
564** A few important bug fixes in the HTTP modules.
565
566Guile's web server framework now checks if an application returns a body
d7a33b64 567where it is not permitted, for example in response to a HEAD request,
d2e35793
AW
568and warn or truncate the response as appropriate. Bad requests now
569cause a 400 Bad Request response to be printed before closing the port.
570Finally, some date-printing and URL-parsing bugs were fixed.
571
572** Pretty-print improvements
573
574When Guile needs to pretty-print Tree-IL, it will try to reconstruct
575`cond', `or`, and other derived syntax forms from the primitive tree-IL
576forms. It also uses the original names instead of the fresh unique
577names, when it is unambiguous to do so. This can be seen in the output
578of REPL commands like `,optimize'.
579
580Also, the `pretty-print' procedure has a new keyword argument,
581`#:max-expr-width'.
582
583** Fix memory leak involving applicable SMOBs
584
585At some point in the 1.9.x series, Guile began leaking any applicable
586SMOB that was actually applied. (There was a weak-key map from SMOB to
587trampoline functions, where the value had a strong reference on the
588key.) This has been fixed. There was much rejoicing!
589
32299e49
AW
590** Support for HTTP/1.1 chunked transfer coding
591
592See "Transfer Codings" in the manual, for more.
593
d2e35793
AW
594** Micro-optimizations
595
596A pile of micro-optimizations: the `string-trim' function when called
597with `char-set:whitespace'; the `(web http)' parsers; SMOB application;
598conversion of raw UTF-8 and UTF-32 data to and from SCM strings; vlists
599and vhashes; `read' when processing string literals.
600
601** Incompatible change to `scandir'
602
603As was the original intention, `scandir' now runs the `select?'
604procedure on all items, including subdirectories and the `.' and `..'
605entries. It receives the basename of the file in question instead of
606the full name. We apologize for this incompatible change to this
607function introduced in the 2.0.4 release.
608
609* Manual updates
610
611The manual has been made much more consistent in its naming conventions
612with regards to formal parameters of functions. Thanks to Bake Timmons.
613
614* New interfaces
615
616** New C function: `scm_to_pointer'
32299e49 617** New C inline functions: `scm_new_smob', `scm_new_double_smob'
d2e35793
AW
618** (ice-9 format): Add ~h specifier for localized number output.
619** (web response): New procedure: `response-must-not-include-body?'
620** New predicate: 'supports-source-properties?'
8898f43c 621** New C helpers: `scm_c_values', `scm_c_nvalues'
d2e35793
AW
622** Newly public inline C function: `scm_unget_byte'
623** (language tree-il): New functions: `tree-il=?', `tree-il-hash'
624** New fluid: `%default-port-conversion-strategy'
625** New syntax: `=>' within `case'
32299e49
AW
626** (web http): `make-chunked-input-port', `make-chunked-output-port'
627** (web http): `declare-opaque-header!'
d2e35793
AW
628
629Search the manual for these identifiers, for more information.
630
631* New deprecations
632
633** `close-io-port' deprecated
634
635Use `close-port'.
636
637** `scm_sym2var' deprecated
638
639In most cases, replace with `scm_lookup' or `scm_module_variable'. Use
640`scm_define' or `scm_module_ensure_local_variable' if the second
641argument is nonzero. See "Accessing Modules from C" in the manual, for
642full details.
643
644** Lookup closures deprecated
645
646These were never documented. See "Module System Reflection" in the
647manual for replacements.
648
649* Build fixes
650
651** Fix compilation against uninstalled Guile on non-GNU platforms.
652** Fix `SCM_I_ERROR' definition for MinGW without networking.
653** Fix compilation with the Sun C compiler.
654** Fix check for `clock_gettime' on OpenBSD and some other systems.
655** Fix build with --enable-debug-malloc.
656** Honor $(program_transform_name) for the `guile-tools' symlink.
657** Fix cross-compilation of GOOPS-using code.
658
659* Bug fixes
660
661** Fix use of unitialized stat buffer in search-path of absolute paths.
662** Avoid calling `freelocale' with a NULL argument.
663** Work around erroneous tr_TR locale in Darwin 8 in tests.
664** Fix `getaddrinfo' test for Darwin 8.
665** Use Gnulib's `regex' module for better regex portability.
666** `source-properties' and friends work on any object
667** Rewrite open-process in C, for robustness related to threads and fork
668** Fix <TAG>vector-length when applied to other uniform vector types
669** Fix escape-only prompt optimization (was disabled previously)
670** Fix a segfault when /dev/urandom is not accessible
671** Fix flush on soft ports, so that it actually runs.
672** Better compatibility of SRFI-9 records with core records
673** Fix and clarify documentation of `sorted?'.
674** Fix IEEE-754 endianness conversion in bytevectors.
675** Correct thunk check in the `wind' instruction.
676** Add @acronym support to texinfo modules
677** Fix docbook->texi for <ulink> without URL
678** Fix `setvbuf' to leave the line/column number unchanged.
679** Add missing public declaration for `scm_take_from_input_buffers'.
680** Fix relative file name canonicalization with empty %LOAD-PATH entries.
681** Import newer (ice-9 match) from Chibi-Scheme.
682** Fix unbound variables and unbound values in ECMAScript runtime.
683** Make SRFI-6 string ports Unicode-capable.
684
685\f
f7cf5898
LC
686Changes in 2.0.5 (since 2.0.4):
687
688This release fixes the binary interface information (SONAME) of
689libguile, which was incorrect in 2.0.4. It does not contain other
690changes.
691
692\f
f43622a2
AW
693Changes in 2.0.4 (since 2.0.3):
694
f41ef416 695* Notable changes
f43622a2 696
f41ef416 697** Better debuggability for interpreted procedures.
f43622a2
AW
698
699Guile 2.0 came with a great debugging experience for compiled
700procedures, but the story for interpreted procedures was terrible. Now,
486bd70d
AW
701at least, interpreted procedures have names, and the `arity' procedure
702property is always correct (or, as correct as it can be, in the presence
703of `case-lambda').
f43622a2
AW
704
705** Support for cross-compilation.
706
707One can now use a native Guile to cross-compile `.go' files for a
708different architecture. See the documentation for `--target' in the
486bd70d
AW
709"Compilation" section of the manual, for information on how to use the
710cross-compiler. See the "Cross building Guile" section of the README,
711for more on how to cross-compile Guile itself.
f43622a2 712
d4b5c773
AW
713** The return of `local-eval'.
714
715Back by popular demand, `the-environment' and `local-eval' allow the
716user to capture a lexical environment, and then evaluate arbitrary
717expressions in that context. There is also a new `local-compile'
718command. See "Local Evaluation" in the manual, for more. Special
719thanks to Mark Weaver for an initial implementation of this feature.
720
f43622a2
AW
721** Fluids can now have default values.
722
723Fluids are used for dynamic and thread-local binding. They have always
724inherited their values from the context or thread that created them.
725However, there was a case in which a new thread would enter Guile, and
726the default values of all the fluids would be `#f' for that thread.
727
728This has now been fixed so that `make-fluid' has an optional default
486bd70d 729value for fluids in unrelated dynamic roots, which defaults to `#f'.
f43622a2
AW
730
731** Garbage collector tuning.
732
733The garbage collector has now been tuned to run more often under some
734circumstances.
735
736*** Unmanaged allocation
737
738The new `scm_gc_register_allocation' function will notify the collector
739of unmanaged allocation. This will cause the collector to run sooner.
740Guile's `scm_malloc', `scm_calloc', and `scm_realloc' unmanaged
741allocators eventually call this function. This leads to better
742performance under steady-state unmanaged allocation.
743
744*** Transient allocation
745
746When the collector runs, it will try to record the total memory
747footprint of a process, if the platform supports this information. If
748the memory footprint is growing, the collector will run more frequently.
749This reduces the increase of the resident size of a process in response
750to a transient increase in allocation.
751
752*** Management of threads, bignums
753
754Creating a thread will allocate a fair amount of memory. Guile now does
755some GC work (using `GC_collect_a_little') when allocating a thread.
756This leads to a better memory footprint when creating many short-lived
757threads.
758
759Similarly, bignums can occupy a lot of memory. Guile now offers hooks
760to enable custom GMP allocators that end up calling
486bd70d 761`scm_gc_register_allocation'. These allocators are enabled by default
f43622a2
AW
762when running Guile from the command-line. To enable them in libraries,
763set the `scm_install_gmp_memory_functions' variable to a nonzero value
764before loading Guile.
765
f43622a2
AW
766** SRFI-39 parameters are available by default.
767
f41ef416
AW
768Guile now includes support for parameters, as defined by SRFI-39, in the
769default environment. See "Parameters" in the manual, for more
770information. `current-input-port', `current-output-port', and
771`current-error-port' are now parameters.
f43622a2 772
d4b5c773 773** Add `current-warning-port'.
f43622a2 774
f41ef416
AW
775Guile now outputs warnings on a separate port, `current-warning-port',
776initialized to the value that `current-error-port' has on startup.
f43622a2 777
f41ef416 778** Syntax parameters.
f43622a2 779
f41ef416
AW
780Following Racket's lead, Guile now supports syntax parameters. See
781"Syntax parameters" in the manual, for more.
f43622a2 782
f41ef416
AW
783Also see Barzilay, Culpepper, and Flatt's 2011 SFP workshop paper,
784"Keeping it Clean with syntax-parameterize".
f43622a2 785
f41ef416 786** Parse command-line arguments from the locale encoding.
f43622a2 787
f41ef416
AW
788Guile now attempts to parse command-line arguments using the user's
789locale. However for backwards compatibility with other 2.0.x releases,
790it does so without actually calling `setlocale'. Please report any bugs
791in this facility to bug-guile@gnu.org.
f43622a2 792
d4b5c773
AW
793** One-armed conditionals: `when' and `unless'
794
795Guile finally has `when' and `unless' in the default environment. Use
796them whenever you would use an `if' with only one branch. See
797"Conditionals" in the manual, for more.
798
799** `current-filename', `add-to-load-path'
800
801There is a new form, `(current-filename)', which expands out to the
802source file in which it occurs. Combined with the new
803`add-to-load-path', this allows simple scripts to easily add nearby
804directories to the load path. See "Load Paths" in the manual, for more.
805
806** `random-state-from-platform'
807
808This procedure initializes a random seed using good random sources
809available on your platform, such as /dev/urandom. See "Random Number
810Generation" in the manual, for more.
811
7cb11224
LC
812** Warn about unsupported `simple-format' options.
813
814The `-Wformat' compilation option now reports unsupported format options
815passed to `simple-format'.
816
241247e8
AW
817** Manual updates
818
819Besides the sections already mentioned, the following manual sections
820are new in this release: "Modules and the File System", "Module System
821Reflection", "Syntax Transformer Helpers", and "Local Inclusion".
822
f41ef416
AW
823* New interfaces
824
825** (ice-9 session): `apropos-hook'
826** New print option: `escape-newlines', defaults to #t.
827** (ice-9 ftw): `file-system-fold', `file-system-tree', `scandir'
d4b5c773 828** `scm_c_value_ref': access to multiple returned values from C
07c2ca0f 829** scm_call (a varargs version), scm_call_7, scm_call_8, scm_call_9
d4b5c773
AW
830** Some new syntax helpers in (system syntax)
831
832Search the manual for these identifiers and modules, for more.
833
834* Build fixes
835
836** FreeBSD build fixes.
837** OpenBSD compilation fixes.
838** Solaris 2.10 test suite fixes.
839** IA64 compilation fix.
840** MinGW build fixes.
841** Work around instruction reordering on SPARC and HPPA in the VM.
842** Gnulib updates: added `dirfd', `setenv' modules.
f43622a2 843
f43622a2
AW
844* Bug fixes
845
d4b5c773
AW
846** Add a deprecated alias for $expt.
847** Add an exception printer for `getaddrinfo-error'.
848** Add deprecated shim for `scm_display_error' with stack as first argument.
849** Add warnings for unsupported `simple-format' options.
850** Allow overlapping regions to be passed to `bytevector-copy!'.
d4b5c773
AW
851** Better function prologue disassembly
852** Compiler: fix miscompilation of (values foo ...) in some contexts.
853** Compiler: fix serialization of #nil-terminated lists.
854** Compiler: allow values bound in non-tail let expressions to be collected.
855** Deprecate SCM_ASRTGO.
856** Document invalidity of (begin) as expression; add back-compat shim.
857** Don't leak file descriptors when mmaping objcode.
858** Empty substrings no longer reference the original stringbuf.
859** FFI: Fix `set-pointer-finalizer!' to leave the type cell unchanged.
f43622a2 860** FFI: Hold a weak reference to the CIF made by `procedure->pointer'.
f41ef416
AW
861** FFI: Hold a weak reference to the procedure passed to `procedure->pointer'.
862** FFI: Properly unpack small integer return values in closure call.
d4b5c773 863** Fix R6RS `fold-left' so the accumulator is the first argument.
d4b5c773
AW
864** Fix bit-set*! bug from 2005.
865** Fix bug in `make-repl' when `lang' is actually a <language>.
866** Fix bugs related to mutation, the null string, and shared substrings.
867** Fix <dynwind> serialization.
868** Fix erroneous check in `set-procedure-properties!'.
869** Fix generalized-vector-{ref,set!} for slices.
40e92f09 870** Fix error messages involving definition forms.
adb8054c 871** Fix primitive-eval to return #<unspecified> for definitions.
f41ef416 872** HTTP: Extend handling of "Cache-Control" header.
f43622a2 873** HTTP: Fix qstring writing of cache-extension values
d4b5c773 874** HTTP: Fix validators for various list-style headers.
f41ef416 875** HTTP: Permit non-date values for Expires header.
d4b5c773
AW
876** HTTP: `write-request-line' writes absolute paths, not absolute URIs.
877** Hack the port-column of current-output-port after printing a prompt.
d4b5c773
AW
878** Make sure `regexp-quote' tests use Unicode-capable string ports.
879** Peval: Fix bugs in the new optimizer.
d4b5c773
AW
880** Statistically unique marks and labels, for robust hygiene across sessions.
881** Web: Allow URIs with empty authorities, like "file:///etc/hosts".
882** `,language' at REPL sets the current-language fluid.
883** `primitive-load' returns the value(s) of the last expression.
f41ef416 884** `scm_from_stringn' always returns unique strings.
f41ef416 885** `scm_i_substring_copy' tries to narrow the substring.
d4b5c773 886** i18n: Fix gc_malloc/free mismatch on non-GNU systems.
f43622a2 887
7cb11224 888\f
02f91898
AW
889Changes in 2.0.3 (since 2.0.2):
890
891* Speed improvements
892
893** Guile has a new optimizer, `peval'.
894
895`Peval' is a partial evaluator that performs constant folding, dead code
896elimination, copy propagation, and inlining. By default it runs on
897every piece of code that Guile compiles, to fold computations that can
898happen at compile-time, so they don't have to happen at runtime.
899
900If we did our job right, the only impact you would see would be your
901programs getting faster. But if you notice slowdowns or bloated code,
902please send a mail to bug-guile@gnu.org with details.
903
904Thanks to William R. Cook, Oscar Waddell, and Kent Dybvig for inspiring
905peval and its implementation.
906
907You can see what peval does on a given piece of code by running the new
908`,optimize' REPL meta-command, and comparing it to the output of
909`,expand'. See "Compile Commands" in the manual, for more.
910
911** Fewer calls to `stat'.
912
913Guile now stats only the .go file and the .scm file when loading a fresh
914compiled file.
915
916* Notable changes
917
918** New module: `(web client)', a simple synchronous web client.
919
920See "Web Client" in the manual, for more.
921
922** Users can now install compiled `.go' files.
923
924See "Installing Site Packages" in the manual.
925
926** Remove Front-Cover and Back-Cover text from the manual.
927
928The manual is still under the GNU Free Documentation License, but no
929longer has any invariant sections.
930
931** More helpful `guild help'.
932
933`guild' is Guile's multi-tool, for use in shell scripting. Now it has a
934nicer interface for querying the set of existing commands, and getting
935help on those commands. Try it out and see!
936
937** New macro: `define-syntax-rule'
938
939`define-syntax-rule' is a shorthand to make a `syntax-rules' macro with
940one clause. See "Syntax Rules" in the manual, for more.
941
942** The `,time' REPL meta-command now has more precision.
943
944The output of this command now has microsecond precision, instead of
94510-millisecond precision.
946
947** `(ice-9 match)' can now match records.
948
949See "Pattern Matching" in the manual, for more on matching records.
950
951** New module: `(language tree-il debug)'.
952
953This module provides a tree-il verifier. This is useful for people that
954generate tree-il, usually as part of a language compiler.
955
956** New functions: `scm_is_exact', `scm_is_inexact'.
957
958These provide a nice C interface for Scheme's `exact?' and `inexact?',
959respectively.
960
961* Bugs fixed
962
963See the git log (or the ChangeLog) for more details on these bugs.
964
965** Fix order of importing modules and resolving duplicates handlers.
966** Fix a number of bugs involving extended (merged) generics.
967** Fix invocation of merge-generics duplicate handler.
968** Fix write beyond array end in arrays.c.
969** Fix read beyond end of hashtable size array in hashtab.c.
970** (web http): Locale-independent parsing and serialization of dates.
971** Ensure presence of Host header in HTTP/1.1 requests.
972** Fix take-right and drop-right for improper lists.
973** Fix leak in get_current_locale().
974** Fix recursive define-inlinable expansions.
975** Check that srfi-1 procedure arguments are procedures.
976** Fix r6rs `map' for multiple returns.
977** Fix scm_tmpfile leak on POSIX platforms.
978** Fix a couple of leaks (objcode->bytecode, make-boot-program).
979** Fix guile-lib back-compatibility for module-stexi-documentation.
980** Fix --listen option to allow other ports.
981** Fix scm_to_latin1_stringn for substrings.
982** Fix compilation of untyped arrays of rank not 1.
983** Fix unparse-tree-il of <dynset>.
984** Fix reading of #||||#.
2be3feb1
LC
985** Fix segfault in GOOPS when class fields are redefined.
986** Prefer poll(2) over select(2) to allow file descriptors above FD_SETSIZE.
02f91898
AW
987
988\f
e4a2807e
AW
989Changes in 2.0.2 (since 2.0.1):
990
991* Notable changes
992
2dd49486
AW
993** `guile-tools' renamed to `guild'
994
995The new name is shorter. Its intended future use is for a CPAN-like
996system for Guile wizards and journeyfolk to band together to share code;
997hence the name. `guile-tools' is provided as a backward-compatible
998symbolic link. See "Using Guile Tools" in the manual, for more.
999
e4a2807e
AW
1000** New control operators: `shift' and `reset'
1001
1002See "Shift and Reset" in the manual, for more information.
1003
1004** `while' as an expression
1005
1006Previously the return value of `while' was unspecified. Now its
1007values are specified both in the case of normal termination, and via
1008termination by invoking `break', possibly with arguments. See "while
1009do" in the manual for more.
1010
1011** Disallow access to handles of weak hash tables
1012
1013`hash-get-handle' and `hash-create-handle!' are no longer permitted to
1014be called on weak hash tables, because the fields in a weak handle could
1015be nulled out by the garbage collector at any time, but yet they are
1016otherwise indistinguishable from pairs. Use `hash-ref' and `hash-set!'
1017instead.
1018
1019** More precision for `get-internal-run-time', `get-internal-real-time'
1020
1021On 64-bit systems which support POSIX clocks, Guile's internal timing
1022procedures offer nanosecond resolution instead of the 10-millisecond
1023resolution previously available. 32-bit systems now use 1-millisecond
1024timers.
1025
1026** Guile now measures time spent in GC
1027
1028`gc-stats' now returns a meaningful value for `gc-time-taken'.
1029
1030** Add `gcprof'
1031
1032The statprof profiler now exports a `gcprof' procedure, driven by the
1033`after-gc-hook', to see which parts of your program are causing GC. Let
1034us know if you find it useful.
1035
1036** `map', `for-each' and some others now implemented in Scheme
1037
1038We would not mention this in NEWS, as it is not a user-visible change,
1039if it were not for one thing: `map' and `for-each' are no longer
1040primitive generics. Instead they are normal bindings, which can be
1041wrapped by normal generics. This fixes some modularity issues between
1042core `map', SRFI-1 `map', and GOOPS.
1043
1044Also it's pretty cool that we can do this without a performance impact.
1045
1046** Add `scm_peek_byte_or_eof'.
1047
1048This helper is like `scm_peek_char_or_eof', but for bytes instead of
1049full characters.
1050
1051** Implement #:stop-at-first-non-option option for getopt-long
1052
1053See "getopt-long Reference" in the manual, for more information.
1054
1055** Improve R6RS conformance for conditions in the I/O libraries
1056
1057The `(rnrs io simple)' module now raises the correct R6RS conditions in
1058error cases. `(rnrs io ports)' is also more correct now, though it is
1059still a work in progress.
1060
1061** All deprecated routines emit warnings
1062
1063A few deprecated routines were lacking deprecation warnings. This has
1064been fixed now.
1065
1066* Speed improvements
1067
1068** Constants in compiled code now share state better
1069
1070Constants with shared state, like `("foo")' and `"foo"', now share state
1071as much as possible, in the entire compilation unit. This cuts compiled
1072`.go' file sizes in half, generally, and speeds startup.
1073
1074** VLists: optimize `vlist-fold-right', and add `vhash-fold-right'
1075
1076These procedures are now twice as fast as they were.
1077
1078** UTF-8 ports to bypass `iconv' entirely
1079
1080This reduces memory usage in a very common case.
1081
1082** Compiler speedups
1083
1084The compiler is now about 40% faster. (Note that this is only the case
1085once the compiler is itself compiled, so the build still takes as long
1086as it did before.)
1087
1088** VM speed tuning
1089
1090Some assertions that were mostly useful for sanity-checks on the
1091bytecode compiler are now off for both "regular" and "debug" engines.
1092This together with a fix to cache a TLS access and some other tweaks
1093improve the VM's performance by about 20%.
1094
1095** SRFI-1 list-set optimizations
1096
1097lset-adjoin and lset-union now have fast paths for eq? sets.
1098
1099** `memq', `memv' optimizations
1100
1101These procedures are now at least twice as fast than in 2.0.1.
1102
1103* Deprecations
1104
1105** Deprecate scm_whash API
1106
1107`scm_whash_get_handle', `SCM_WHASHFOUNDP', `SCM_WHASHREF',
1108`SCM_WHASHSET', `scm_whash_create_handle', `scm_whash_lookup', and
1109`scm_whash_insert' are now deprecated. Use the normal hash table API
1110instead.
1111
1112** Deprecate scm_struct_table
1113
1114`SCM_STRUCT_TABLE_NAME', `SCM_SET_STRUCT_TABLE_NAME',
1115`SCM_STRUCT_TABLE_CLASS', `SCM_SET_STRUCT_TABLE_CLASS',
1116`scm_struct_table', and `scm_struct_create_handle' are now deprecated.
1117These routines formed part of the internals of the map between structs
1118and classes.
1119
1120** Deprecate scm_internal_dynamic_wind
1121
1122The `scm_t_inner' type and `scm_internal_dynamic_wind' are deprecated,
1123as the `scm_dynwind' API is better, and this API encourages users to
1124stuff SCM values into pointers.
1125
1126** Deprecate scm_immutable_cell, scm_immutable_double_cell
1127
1128These routines are deprecated, as the GC_STUBBORN API doesn't do
1129anything any more.
1130
1131* Manual updates
1132
1133Andreas Rottman kindly transcribed the missing parts of the `(rnrs io
1134ports)' documentation from the R6RS documentation. Thanks Andreas!
1135
1136* Bugs fixed
1137
1138** Fix double-loading of script in -ds case
1139** -x error message fix
1140** iconveh-related cross-compilation fixes
1141** Fix small integer return value packing on big endian machines.
1142** Fix hash-set! in weak-value table from non-immediate to immediate
1143** Fix call-with-input-file & relatives for multiple values
1144** Fix `hash' for inf and nan
1145** Fix libguile internal type errors caught by typing-strictness==2
f39779b1
LC
1146** Fix compile error in MinGW fstat socket detection
1147** Fix generation of auto-compiled file names on MinGW
e4a2807e
AW
1148** Fix multithreaded access to internal hash tables
1149** Emit a 1-based line number in error messages
1150** Fix define-module ordering
7505c6e0 1151** Fix several POSIX functions to use the locale encoding
f39779b1
LC
1152** Add type and range checks to the complex generalized vector accessors
1153** Fix unaligned accesses for bytevectors of complex numbers
1154** Fix '(a #{.} b)
1155** Fix erroneous VM stack overflow for canceled threads
e4a2807e
AW
1156
1157\f
882c8963
MW
1158Changes in 2.0.1 (since 2.0.0):
1159
7c81eba2 1160* Notable changes
9d6a151f 1161
7c81eba2 1162** guile.m4 supports linking with rpath
9d6a151f 1163
7c81eba2
AW
1164The GUILE_FLAGS macro now sets GUILE_LIBS and GUILE_LTLIBS, which
1165include appropriate directives to the linker to include libguile-2.0.so
1166in the runtime library lookup path.
9d6a151f 1167
7c81eba2 1168** `begin' expands macros in its body before other expressions
9d6a151f 1169
7c81eba2 1170This enables support for programs like the following:
9d6a151f 1171
7c81eba2
AW
1172 (begin
1173 (define even?
1174 (lambda (x)
1175 (or (= x 0) (odd? (- x 1)))))
1176 (define-syntax odd?
1177 (syntax-rules ()
1178 ((odd? x) (not (even? x)))))
1179 (even? 10))
9d6a151f 1180
7c81eba2 1181** REPL reader usability enhancements
9d6a151f 1182
7c81eba2
AW
1183The REPL now flushes input after a read error, which should prevent one
1184error from causing other errors. The REPL also now interprets comments
1185as whitespace.
9d6a151f 1186
7c81eba2 1187** REPL output has configurable width
9d6a151f 1188
7c81eba2
AW
1189The REPL now defaults to output with the current terminal's width, in
1190columns. See "Debug Commands" in the manual for more information on
1191the ,width command.
9d6a151f 1192
7c81eba2 1193** Better C access to the module system
9d6a151f 1194
7c81eba2
AW
1195Guile now has convenient C accessors to look up variables or values in
1196modules and their public interfaces. See `scm_c_public_ref' and friends
1197in "Accessing Modules from C" in the manual.
9d6a151f 1198
7c81eba2 1199** Added `scm_call_5', `scm_call_6'
9d6a151f 1200
7c81eba2 1201See "Fly Evaluation" in the manual.
9d6a151f 1202
7c81eba2 1203** Added `scm_from_latin1_keyword', `scm_from_utf8_keyword'
9d6a151f 1204
7c81eba2
AW
1205See "Keyword Procedures" in the manual, for more. Note that
1206`scm_from_locale_keyword' should not be used when the name is a C string
1207constant.
9d6a151f 1208
7c81eba2 1209** R6RS unicode and string I/O work
9d6a151f 1210
7c81eba2
AW
1211Added efficient implementations of `get-string-n' and `get-string-n!'
1212for binary ports. Exported `current-input-port', `current-output-port'
1213and `current-error-port' from `(rnrs io ports)', and enhanced support
1214for transcoders.
9d6a151f 1215
7c81eba2 1216** Added `pointer->scm', `scm->pointer' to `(system foreign)'
9d6a151f 1217
7c81eba2
AW
1218These procedure are useful if one needs to pass and receive SCM values
1219to and from foreign functions. See "Foreign Variables" in the manual,
1220for more.
9d6a151f 1221
7c81eba2 1222** Added `heap-allocated-since-gc' to `(gc-stats)'
9d6a151f 1223
7c81eba2 1224Also fixed the long-standing bug in the REPL `,stat' command.
9d6a151f 1225
7c81eba2 1226** Add `on-error' REPL option
9d6a151f 1227
7c81eba2
AW
1228This option controls what happens when an error occurs at the REPL, and
1229defaults to `debug', indicating that Guile should enter the debugger.
1230Other values include `report', which will simply print a backtrace
1231without entering the debugger. See "System Commands" in the manual.
9d6a151f 1232
7c81eba2 1233** Enforce immutability of string literals
9d6a151f 1234
7c81eba2 1235Attempting to mutate a string literal now causes a runtime error.
9d6a151f 1236
7c81eba2 1237** Fix pthread redirection
9d6a151f 1238
7c81eba2
AW
1239Guile 2.0.0 shipped with headers that, if configured with pthread
1240support, would re-define `pthread_create', `pthread_join', and other API
1241to redirect to the BDW-GC wrappers, `GC_pthread_create', etc. This was
1242unintended, and not necessary: because threads must enter Guile with
2e6829d2 1243`scm_with_guile', Guile can handle thread registration itself, without
7c81eba2
AW
1244needing to make the GC aware of all threads. This oversight has been
1245fixed.
9d6a151f 1246
7c81eba2 1247** `with-continuation-barrier' now unwinds on `quit'
9d6a151f 1248
7c81eba2
AW
1249A throw to `quit' in a continuation barrier will cause Guile to exit.
1250Before, it would do so before unwinding to the barrier, which would
1251prevent cleanup handlers from running. This has been fixed so that it
1252exits only after unwinding.
9d6a151f 1253
7c81eba2 1254** `string->pointer' and `pointer->string' have optional encoding arg
9d6a151f 1255
7c81eba2
AW
1256This allows users of the FFI to more easily deal in strings with
1257particular (non-locale) encodings, like "utf-8". See "Void Pointers and
1258Byte Access" in the manual, for more.
9d6a151f 1259
7c81eba2 1260** R6RS fixnum arithmetic optimizations
9d6a151f 1261
7c81eba2
AW
1262R6RS fixnum operations are are still slower than generic arithmetic,
1263however.
9d6a151f 1264
7c81eba2 1265** New procedure: `define-inlinable'
9d6a151f 1266
7c81eba2 1267See "Inlinable Procedures" in the manual, for more.
9d6a151f 1268
7c81eba2 1269** New procedure: `exact-integer-sqrt'
9d6a151f 1270
7c81eba2 1271See "Integer Operations" in the manual, for more.
9d6a151f 1272
7c81eba2 1273** "Extended read syntax" for symbols parses better
9d6a151f 1274
7c81eba2
AW
1275In #{foo}# symbols, backslashes are now treated as escapes, as the
1276symbol-printing code intended. Additionally, "\x" within #{foo}# is now
1277interpreted as starting an R6RS hex escape. This is backward compatible
1278because the symbol printer would never produce a "\x" before. The
1279printer also works better too.
9d6a151f 1280
6b480ced 1281** Added `--fresh-auto-compile' option
1e56cff2
AW
1282
1283This allows a user to invalidate the auto-compilation cache. It's
1284usually not needed. See "Compilation" in the manual, for a discussion.
1285
7c81eba2 1286* Manual updates
9d6a151f 1287
7c81eba2 1288** GOOPS documentation updates
9d6a151f 1289
7c81eba2 1290** New man page
9d6a151f 1291
7c81eba2 1292Thanks to Mark Harig for improvements to guile.1.
9d6a151f 1293
7c81eba2 1294** SRFI-23 documented
9d6a151f 1295
7c81eba2 1296The humble `error' SRFI now has an entry in the manual.
9d6a151f 1297
7c81eba2 1298* New modules
9d6a151f 1299
de424d95 1300** `(ice-9 binary-ports)': "R6RS I/O Ports", in the manual
7c81eba2 1301** `(ice-9 eval-string)': "Fly Evaluation", in the manual
2e6829d2 1302** `(ice-9 command-line)', not documented yet
9d6a151f 1303
882c8963
MW
1304* Bugs fixed
1305
2e6829d2 1306** Fixed `iconv_t' memory leak on close-port
7c81eba2
AW
1307** Fixed some leaks with weak hash tables
1308** Export `vhash-delq' and `vhash-delv' from `(ice-9 vlist)'
1309** `after-gc-hook' works again
1310** `define-record-type' now allowed in nested contexts
1311** `exact-integer-sqrt' now handles large integers correctly
1312** Fixed C extension examples in manual
1313** `vhash-delete' honors HASH argument
1314** Make `locale-digit-grouping' more robust
1315** Default exception printer robustness fixes
1316** Fix presence of non-I CPPFLAGS in `guile-2.0.pc'
1317** `read' updates line/column numbers when reading SCSH block comments
1318** Fix imports of multiple custom interfaces of same module
1319** Fix encoding scanning for non-seekable ports
1320** Fix `setter' when called with a non-setter generic
1321** Fix f32 and f64 bytevectors to not accept rationals
1322** Fix description of the R6RS `finite?' in manual
1323** Quotient, remainder and modulo accept inexact integers again
1324** Fix `continue' within `while' to take zero arguments
1325** Fix alignment for structures in FFI
1326** Fix port-filename of stdin, stdout, stderr to match the docs
1327** Fix weak hash table-related bug in `define-wrapped-pointer-type'
1328** Fix partial continuation application with pending procedure calls
1329** scm_{to,from}_locale_string use current locale, not current ports
1330** Fix thread cleanup, by using a pthread_key destructor
1331** Fix `quit' at the REPL
1332** Fix a failure to sync regs in vm bytevector ops
1333** Fix (texinfo reflection) to handle nested structures like syntax patterns
1334** Fix stexi->html double translation
1335** Fix tree-il->scheme fix for <prompt>
1336** Fix compilation of <prompt> in <fix> in single-value context
1337** Fix race condition in ensure-writable-dir
1338** Fix error message on ,disassemble "non-procedure"
1339** Fix prompt and abort with the boot evaluator
1340** Fix `procedure->pointer' for functions returning `void'
1341** Fix error reporting in dynamic-pointer
1342** Fix problems detecting coding: in block comments
1343** Fix duplicate load-path and load-compiled-path in compilation environment
1344** Add fallback read(2) suppport for .go files if mmap(2) unavailable
1345** Fix c32vector-set!, c64vector-set!
1346** Fix mistakenly deprecated read syntax for uniform complex vectors
1347** Fix parsing of exact numbers with negative exponents
1348** Ignore SIGPIPE in (system repl server)
1349** Fix optional second arg to R6RS log function
1350** Fix R6RS `assert' to return true value.
1351** Fix fencepost error when seeking in bytevector input ports
2e6829d2
LC
1352** Gracefully handle `setlocale' errors when starting the REPL
1353** Improve support of the `--disable-posix' configure option
1354** Make sure R6RS binary ports pass `binary-port?' regardless of the locale
1355** Gracefully handle unterminated UTF-8 sequences instead of hitting an `assert'
882c8963 1356
882c8963
MW
1357
1358\f
d9f46472 1359Changes in 2.0.0 (changes since the 1.8.x series):
96b73e84
AW
1360
1361* New modules (see the manual for details)
1362
1363** `(srfi srfi-18)', more sophisticated multithreading support
ef6b0e8d 1364** `(srfi srfi-27)', sources of random bits
7cd99cba 1365** `(srfi srfi-38)', External Representation for Data With Shared Structure
ef6b0e8d
AW
1366** `(srfi srfi-42)', eager comprehensions
1367** `(srfi srfi-45)', primitives for expressing iterative lazy algorithms
1368** `(srfi srfi-67)', compare procedures
96b73e84 1369** `(ice-9 i18n)', internationalization support
7cd99cba 1370** `(ice-9 futures)', fine-grain parallelism
0f13fcde 1371** `(rnrs bytevectors)', the R6RS bytevector API
93617170 1372** `(rnrs io ports)', a subset of the R6RS I/O port API
96b73e84 1373** `(system xref)', a cross-referencing facility (FIXME undocumented)
dbd9532e 1374** `(ice-9 vlist)', lists with constant-time random access; hash lists
fb53c347 1375** `(system foreign)', foreign function interface
18e90860
AW
1376** `(sxml match)', a pattern matcher for SXML
1377** `(srfi srfi-9 gnu)', extensions to the SRFI-9 record library
1378** `(system vm coverage)', a line-by-line code coverage library
7cd99cba
AW
1379** `(web uri)', URI data type, parser, and unparser
1380** `(web http)', HTTP header parsers and unparsers
1381** `(web request)', HTTP request data type, reader, and writer
1382** `(web response)', HTTP response data type, reader, and writer
1383** `(web server)', Generic HTTP server
1384** `(ice-9 poll)', a poll wrapper
1385** `(web server http)', HTTP-over-TCP web server implementation
66ad445d 1386
51cb0cca
AW
1387** Replaced `(ice-9 match)' with Alex Shinn's compatible, hygienic matcher.
1388
1389Guile's copy of Andrew K. Wright's `match' library has been replaced by
1390a compatible hygienic implementation by Alex Shinn. It is now
1391documented, see "Pattern Matching" in the manual.
1392
1393Compared to Andrew K. Wright's `match', the new `match' lacks
1394`match-define', `match:error-control', `match:set-error-control',
1395`match:error', `match:set-error', and all structure-related procedures.
1396
cf8ec359
AW
1397** Imported statprof, SSAX, and texinfo modules from Guile-Lib
1398
1399The statprof statistical profiler, the SSAX XML toolkit, and the texinfo
1400toolkit from Guile-Lib have been imported into Guile proper. See
1401"Standard Library" in the manual for more details.
1402
139fa149
AW
1403** Integration of lalr-scm, a parser generator
1404
1405Guile has included Dominique Boucher's fine `lalr-scm' parser generator
1406as `(system base lalr)'. See "LALR(1) Parsing" in the manual, for more
1407information.
1408
96b73e84
AW
1409* Changes to the stand-alone interpreter
1410
1411** Guile now can compile Scheme to bytecode for a custom virtual machine.
1412
1413Compiled code loads much faster than Scheme source code, and runs around
14143 or 4 times as fast, generating much less garbage in the process.
fa1804e9 1415
29b98fb2 1416** Evaluating Scheme code does not use the C stack.
fa1804e9 1417
29b98fb2
AW
1418Besides when compiling Guile itself, Guile no longer uses a recursive C
1419function as an evaluator. This obviates the need to check the C stack
1420pointer for overflow. Continuations still capture the C stack, however.
fa1804e9 1421
96b73e84
AW
1422** New environment variables: GUILE_LOAD_COMPILED_PATH,
1423 GUILE_SYSTEM_LOAD_COMPILED_PATH
fa1804e9 1424
96b73e84
AW
1425GUILE_LOAD_COMPILED_PATH is for compiled files what GUILE_LOAD_PATH is
1426for source files. It is a different path, however, because compiled
1427files are architecture-specific. GUILE_SYSTEM_LOAD_COMPILED_PATH is like
1428GUILE_SYSTEM_PATH.
1429
1430** New read-eval-print loop (REPL) implementation
1431
51cb0cca
AW
1432Running Guile with no arguments drops the user into the new REPL. See
1433"Using Guile Interactively" in the manual, for more information.
96b73e84 1434
51cb0cca
AW
1435** Remove old Emacs interface
1436
1437Guile had an unused `--emacs' command line argument that was supposed to
1438help when running Guile inside Emacs. This option has been removed, and
1439the helper functions `named-module-use!' and `load-emacs-interface' have
1440been deprecated.
1441
ef6b0e8d
AW
1442** Add `(system repl server)' module and `--listen' command-line argument
1443
1444The `(system repl server)' module exposes procedures to listen on
1445sockets for connections, and serve REPLs to those clients. The --listen
1446command-line argument allows any Guile program to thus be remotely
1447debuggable.
1448
1449See "Invoking Guile" for more information on `--listen'.
1450
7cd99cba
AW
1451** Command line additions
1452
1453The guile binary now supports a new switch "-x", which can be used to
1454extend the list of filename extensions tried when loading files
1455(%load-extensions).
1456
487bacf4
AW
1457** New reader options: `square-brackets', `r6rs-hex-escapes',
1458 `hungry-eol-escapes'
6bf927ab
LC
1459
1460The reader supports a new option (changeable via `read-options'),
1461`square-brackets', which instructs it to interpret square brackets as
29b98fb2 1462parentheses. This option is on by default.
6bf927ab
LC
1463
1464When the new `r6rs-hex-escapes' reader option is enabled, the reader
51cb0cca
AW
1465will recognize string escape sequences as defined in R6RS. R6RS string
1466escape sequences are incompatible with Guile's existing escapes, though,
1467so this option is off by default.
6bf927ab 1468
487bacf4
AW
1469Additionally, Guile follows the R6RS newline escaping rules when the
1470`hungry-eol-escapes' option is enabled.
1471
1472See "String Syntax" in the manual, for more information.
1473
cf8ec359
AW
1474** Function profiling and tracing at the REPL
1475
1476The `,profile FORM' REPL meta-command can now be used to statistically
1477profile execution of a form, to see which functions are taking the most
1478time. See `,help profile' for more information.
1479
1480Similarly, `,trace FORM' traces all function applications that occur
1481during the execution of `FORM'. See `,help trace' for more information.
1482
51cb0cca
AW
1483** Recursive debugging REPL on error
1484
1485When Guile sees an error at the REPL, instead of saving the stack, Guile
1486will directly enter a recursive REPL in the dynamic context of the
1487error. See "Error Handling" in the manual, for more information.
1488
1489A recursive REPL is the same as any other REPL, except that it
1490has been augmented with debugging information, so that one can inspect
1491the context of the error. The debugger has been integrated with the REPL
1492via a set of debugging meta-commands.
cf8ec359 1493
51cb0cca
AW
1494For example, one may access a backtrace with `,backtrace' (or
1495`,bt'). See "Interactive Debugging" in the manual, for more
1496information.
cf8ec359 1497
96b73e84
AW
1498** New `guile-tools' commands: `compile', `disassemble'
1499
93617170 1500Pass the `--help' command-line option to these commands for more
96b73e84
AW
1501information.
1502
b0217d17
AW
1503** Guile now adds its install prefix to the LTDL_LIBRARY_PATH
1504
1505Users may now install Guile to nonstandard prefixes and just run
1506`/path/to/bin/guile', instead of also having to set LTDL_LIBRARY_PATH to
1507include `/path/to/lib'.
1508
1509** Guile's Emacs integration is now more keyboard-friendly
1510
1511Backtraces may now be disclosed with the keyboard in addition to the
1512mouse.
1513
cf8ec359
AW
1514** Load path change: search in version-specific paths before site paths
1515
1516When looking for a module, Guile now searches first in Guile's
1517version-specific path (the library path), *then* in the site dir. This
1518allows Guile's copy of SSAX to override any Guile-Lib copy the user has
1519installed. Also it should cut the number of `stat' system calls by half,
1520in the common case.
1521
51cb0cca
AW
1522** Value history in the REPL on by default
1523
1524By default, the REPL will save computed values in variables like `$1',
1525`$2', and the like. There are programmatic and interactive interfaces to
1526control this. See "Value History" in the manual, for more information.
1527
1528** Readline tab completion for arguments
1529
1530When readline is enabled, tab completion works for arguments too, not
1531just for the operator position.
1532
7cd99cba
AW
1533** Expression-oriented readline history
1534
1535Guile's readline history now tries to operate on expressions instead of
1536input lines. Let us know what you think!
1537
139fa149
AW
1538** Interactive Guile follows GNU conventions
1539
1540As recommended by the GPL, Guile now shows a brief copyright and
1541warranty disclaimer on startup, along with pointers to more information.
cf8ec359 1542
96b73e84
AW
1543* Changes to Scheme functions and syntax
1544
18e90860
AW
1545** Support for R6RS libraries
1546
1547The `library' and `import' forms from the latest Scheme report have been
1548added to Guile, in such a way that R6RS libraries share a namespace with
1549Guile modules. R6RS modules may import Guile modules, and are available
1550for Guile modules to import via use-modules and all the rest. See "R6RS
1551Libraries" in the manual for more information.
1552
1553** Implementations of R6RS libraries
1554
1555Guile now has implementations for all of the libraries defined in the
1556R6RS. Thanks to Julian Graham for this excellent hack. See "R6RS
1557Standard Libraries" in the manual for a full list of libraries.
1558
1559** Partial R6RS compatibility
1560
1561Guile now has enough support for R6RS to run a reasonably large subset
1562of R6RS programs.
1563
1564Guile is not fully R6RS compatible. Many incompatibilities are simply
1565bugs, though some parts of Guile will remain R6RS-incompatible for the
1566foreseeable future. See "R6RS Incompatibilities" in the manual, for more
1567information.
1568
1569Please contact bug-guile@gnu.org if you have found an issue not
1570mentioned in that compatibility list.
1571
4a457691
AW
1572** New implementation of `primitive-eval'
1573
1574Guile's `primitive-eval' is now implemented in Scheme. Actually there is
1575still a C evaluator, used when building a fresh Guile to interpret the
1576compiler, so we can compile eval.scm. Thereafter all calls to
1577primitive-eval are implemented by VM-compiled code.
1578
1579This allows all of Guile's procedures, be they interpreted or compiled,
1580to execute on the same stack, unifying multiple-value return semantics,
1581providing for proper tail recursion between interpreted and compiled
1582code, and simplifying debugging.
1583
1584As part of this change, the evaluator no longer mutates the internal
1585representation of the code being evaluated in a thread-unsafe manner.
1586
1587There are two negative aspects of this change, however. First, Guile
1588takes a lot longer to compile now. Also, there is less debugging
1589information available for debugging interpreted code. We hope to improve
1590both of these situations.
1591
1592There are many changes to the internal C evalator interface, but all
1593public interfaces should be the same. See the ChangeLog for details. If
1594we have inadvertantly changed an interface that you were using, please
1595contact bug-guile@gnu.org.
1596
96b73e84
AW
1597** Procedure removed: `the-environment'
1598
1599This procedure was part of the interpreter's execution model, and does
1600not apply to the compiler.
fa1804e9 1601
4a457691
AW
1602** No more `local-eval'
1603
1604`local-eval' used to exist so that one could evaluate code in the
1605lexical context of a function. Since there is no way to get the lexical
1606environment any more, as that concept has no meaning for the compiler,
1607and a different meaning for the interpreter, we have removed the
1608function.
1609
1610If you think you need `local-eval', you should probably implement your
1611own metacircular evaluator. It will probably be as fast as Guile's
1612anyway.
1613
139fa149 1614** Scheme source files will now be compiled automatically.
fa1804e9
AW
1615
1616If a compiled .go file corresponding to a .scm file is not found or is
1617not fresh, the .scm file will be compiled on the fly, and the resulting
1618.go file stored away. An advisory note will be printed on the console.
1619
51cb0cca
AW
1620Note that this mechanism depends on the timestamp of the .go file being
1621newer than that of the .scm file; if the .scm or .go files are moved
1622after installation, care should be taken to preserve their original
fa1804e9
AW
1623timestamps.
1624
6f06e8d3 1625Auto-compiled files will be stored in the $XDG_CACHE_HOME/guile/ccache
19fef497
AW
1626directory, where $XDG_CACHE_HOME defaults to ~/.cache. This directory
1627will be created if needed.
fa1804e9 1628
6f06e8d3
AW
1629To inhibit automatic compilation, set the GUILE_AUTO_COMPILE environment
1630variable to 0, or pass --no-auto-compile on the Guile command line.
fa1804e9 1631
96b73e84 1632** New POSIX procedures: `getrlimit' and `setrlimit'
fa1804e9 1633
96b73e84
AW
1634Note however that the interface of these functions is likely to change
1635in the next prerelease.
fa1804e9 1636
4a457691
AW
1637** New POSIX procedure: `getsid'
1638
1639Scheme binding for the `getsid' C library call.
1640
dbd9532e
LC
1641** New POSIX procedure: `getaddrinfo'
1642
1643Scheme binding for the `getaddrinfo' C library function.
1644
7cd99cba
AW
1645** Multicast socket options
1646
1647Support was added for the IP_MULTICAST_TTL and IP_MULTICAST_IF socket
1648options. See "Network Sockets and Communication" in the manual, for
1649more information.
1650
487bacf4
AW
1651** `recv!', `recvfrom!', `send', `sendto' now deal in bytevectors
1652
1653These socket procedures now take bytevectors as arguments, instead of
1654strings. There is some deprecated string support, however.
1655
7cd99cba
AW
1656** New GNU procedures: `setaffinity' and `getaffinity'.
1657
1658See "Processes" in the manual, for more information.
1659
1660** New procedures: `compose', `negate', and `const'
1661
1662See "Higher-Order Functions" in the manual, for more information.
1663
96b73e84 1664** New procedure in `(oops goops)': `method-formals'
fa1804e9 1665
96b73e84
AW
1666** New procedures in (ice-9 session): `add-value-help-handler!',
1667 `remove-value-help-handler!', `add-name-help-handler!'
29b98fb2 1668 `remove-name-help-handler!', `procedure-arguments'
fa1804e9 1669
96b73e84
AW
1670The value and name help handlers provide some minimal extensibility to
1671the help interface. Guile-lib's `(texinfo reflection)' uses them, for
1672example, to make stexinfo help documentation available. See those
1673procedures' docstrings for more information.
1674
1675`procedure-arguments' describes the arguments that a procedure can take,
1676combining arity and formals. For example:
1677
1678 (procedure-arguments resolve-interface)
1679 => ((required . (name)) (rest . args))
fa1804e9 1680
96b73e84
AW
1681Additionally, `module-commentary' is now publically exported from
1682`(ice-9 session).
1683
cf8ec359 1684** Removed: `procedure->memoizing-macro', `procedure->syntax'
96b73e84 1685
cf8ec359
AW
1686These procedures created primitive fexprs for the old evaluator, and are
1687no longer supported. If you feel that you need these functions, you
1688probably need to write your own metacircular evaluator (which will
1689probably be as fast as Guile's, anyway).
96b73e84
AW
1690
1691** New language: ECMAScript
1692
1693Guile now ships with one other high-level language supported,
1694ECMAScript. The goal is to support all of version 3.1 of the standard,
1695but not all of the libraries are there yet. This support is not yet
1696documented; ask on the mailing list if you are interested.
1697
19fef497
AW
1698** New language: Brainfuck
1699
1700Brainfuck is a toy language that closely models Turing machines. Guile's
1701brainfuck compiler is meant to be an example of implementing other
1702languages. See the manual for details, or
1703http://en.wikipedia.org/wiki/Brainfuck for more information about the
1704Brainfuck language itself.
1705
4a457691
AW
1706** New language: Elisp
1707
1708Guile now has an experimental Emacs Lisp compiler and runtime. You can
1709now switch to Elisp at the repl: `,language elisp'. All kudos to Daniel
7cd99cba 1710Kraft and Brian Templeton, and all bugs to bug-guile@gnu.org.
4a457691 1711
139fa149
AW
1712** Better documentation infrastructure for macros
1713
1714It is now possible to introspect on the type of a macro, e.g.
1715syntax-rules, identifier-syntax, etc, and extract information about that
1716macro, such as the syntax-rules patterns or the defmacro arguments.
1717`(texinfo reflection)' takes advantage of this to give better macro
1718documentation.
1719
139fa149
AW
1720** Support for arbitrary procedure metadata
1721
1722Building on its support for docstrings, Guile now supports multiple
1723docstrings, adding them to the tail of a compiled procedure's
1724properties. For example:
1725
1726 (define (foo)
1727 "one"
1728 "two"
1729 3)
29b98fb2 1730 (procedure-properties foo)
139fa149
AW
1731 => ((name . foo) (documentation . "one") (documentation . "two"))
1732
1733Also, vectors of pairs are now treated as additional metadata entries:
1734
1735 (define (bar)
1736 #((quz . #f) (docstring . "xyzzy"))
1737 3)
29b98fb2 1738 (procedure-properties bar)
139fa149
AW
1739 => ((name . bar) (quz . #f) (docstring . "xyzzy"))
1740
1741This allows arbitrary literals to be embedded as metadata in a compiled
1742procedure.
1743
96b73e84
AW
1744** The psyntax expander now knows how to interpret the @ and @@ special
1745 forms.
1746
1747** The psyntax expander is now hygienic with respect to modules.
1748
1749Free variables in a macro are scoped in the module that the macro was
1750defined in, not in the module the macro is used in. For example, code
1751like this works now:
1752
1753 (define-module (foo) #:export (bar))
1754 (define (helper x) ...)
1755 (define-syntax bar
1756 (syntax-rules () ((_ x) (helper x))))
1757
1758 (define-module (baz) #:use-module (foo))
1759 (bar qux)
1760
1761It used to be you had to export `helper' from `(foo)' as well.
1762Thankfully, this has been fixed.
1763
51cb0cca 1764** Support for version information in Guile's `module' form
cf8ec359 1765
51cb0cca
AW
1766Guile modules now have a `#:version' field. See "R6RS Version
1767References", "General Information about Modules", "Using Guile Modules",
1768and "Creating Guile Modules" in the manual for more information.
96b73e84 1769
cf8ec359
AW
1770** Support for renaming bindings on module export
1771
1772Wherever Guile accepts a symbol as an argument to specify a binding to
1773export, it now also accepts a pair of symbols, indicating that a binding
1774should be renamed on export. See "Creating Guile Modules" in the manual
1775for more information.
96b73e84 1776
18e90860
AW
1777** New procedure: `module-export-all!'
1778
1779This procedure exports all current and future bindings from a module.
1780Use as `(module-export-all! (current-module))'.
1781
7cd99cba
AW
1782** New procedure `reload-module', and `,reload' REPL command
1783
1784See "Module System Reflection" and "Module Commands" in the manual, for
1785more information.
1786
96b73e84
AW
1787** `eval-case' has been deprecated, and replaced by `eval-when'.
1788
29b98fb2
AW
1789The semantics of `eval-when' are easier to understand. See "Eval When"
1790in the manual, for more information.
96b73e84
AW
1791
1792** Guile is now more strict about prohibiting definitions in expression
1793 contexts.
1794
1795Although previous versions of Guile accepted it, the following
1796expression is not valid, in R5RS or R6RS:
1797
1798 (if test (define foo 'bar) (define foo 'baz))
1799
1800In this specific case, it would be better to do:
1801
1802 (define foo (if test 'bar 'baz))
1803
79b3863d
AW
1804It is possible to circumvent this restriction with e.g.
1805`(module-define! (current-module) 'foo 'baz)'. Contact the list if you
1806have any questions.
96b73e84 1807
51cb0cca
AW
1808** Support for `letrec*'
1809
1810Guile now supports `letrec*', a recursive lexical binding operator in
1811which the identifiers are bound in order. See "Local Bindings" in the
1812manual, for more details.
1813
1814** Internal definitions now expand to `letrec*'
1815
1816Following the R6RS, internal definitions now expand to letrec* instead
1817of letrec. The following program is invalid for R5RS, but valid for
1818R6RS:
1819
1820 (define (foo)
1821 (define bar 10)
1822 (define baz (+ bar 20))
1823 baz)
1824
1825 ;; R5RS and Guile <= 1.8:
1826 (foo) => Unbound variable: bar
1827 ;; R6RS and Guile >= 2.0:
1828 (foo) => 30
1829
1830This change should not affect correct R5RS programs, or programs written
1831in earlier Guile dialects.
1832
18e90860
AW
1833** Macro expansion produces structures instead of s-expressions
1834
1835In the olden days, macroexpanding an s-expression would yield another
1836s-expression. Though the lexical variables were renamed, expansions of
1837core forms like `if' and `begin' were still non-hygienic, as they relied
1838on the toplevel definitions of `if' et al being the conventional ones.
1839
1840The solution is to expand to structures instead of s-expressions. There
1841is an `if' structure, a `begin' structure, a `toplevel-ref' structure,
1842etc. The expander already did this for compilation, producing Tree-IL
1843directly; it has been changed now to do so when expanding for the
1844evaluator as well.
1845
96b73e84
AW
1846** Defmacros must now produce valid Scheme expressions.
1847
1848It used to be that defmacros could unquote in Scheme values, as a way of
1849supporting partial evaluation, and avoiding some hygiene issues. For
1850example:
1851
1852 (define (helper x) ...)
1853 (define-macro (foo bar)
1854 `(,helper ,bar))
1855
1856Assuming this macro is in the `(baz)' module, the direct translation of
1857this code would be:
1858
1859 (define (helper x) ...)
1860 (define-macro (foo bar)
1861 `((@@ (baz) helper) ,bar))
1862
1863Of course, one could just use a hygienic macro instead:
1864
1865 (define-syntax foo
1866 (syntax-rules ()
1867 ((_ bar) (helper bar))))
1868
1869** Guile's psyntax now supports docstrings and internal definitions.
1870
1871The following Scheme is not strictly legal:
1872
1873 (define (foo)
1874 "bar"
1875 (define (baz) ...)
1876 (baz))
1877
1878However its intent is fairly clear. Guile interprets "bar" to be the
1879docstring of `foo', and the definition of `baz' is still in definition
1880context.
1881
51cb0cca
AW
1882** Support for settable identifier syntax
1883
1884Following the R6RS, "variable transformers" are settable
1885identifier-syntax. See "Identifier macros" in the manual, for more
1886information.
1887
1888** syntax-case treats `_' as a placeholder
1889
1890Following R6RS, a `_' in a syntax-rules or syntax-case pattern matches
1891anything, and binds no pattern variables. Unlike the R6RS, Guile also
1892permits `_' to be in the literals list for a pattern.
1893
96b73e84
AW
1894** Macros need to be defined before their first use.
1895
1896It used to be that with lazy memoization, this might work:
1897
1898 (define (foo x)
1899 (ref x))
1900 (define-macro (ref x) x)
1901 (foo 1) => 1
1902
1903But now, the body of `foo' is interpreted to mean a call to the toplevel
1904`ref' function, instead of a macro expansion. The solution is to define
1905macros before code that uses them.
1906
1907** Functions needed by macros at expand-time need to be present at
1908 expand-time.
1909
1910For example, this code will work at the REPL:
1911
1912 (define (double-helper x) (* x x))
1913 (define-macro (double-literal x) (double-helper x))
1914 (double-literal 2) => 4
1915
1916But it will not work when a file is compiled, because the definition of
1917`double-helper' is not present at expand-time. The solution is to wrap
1918the definition of `double-helper' in `eval-when':
1919
1920 (eval-when (load compile eval)
1921 (define (double-helper x) (* x x)))
1922 (define-macro (double-literal x) (double-helper x))
1923 (double-literal 2) => 4
1924
29b98fb2 1925See the documentation for eval-when for more information.
96b73e84 1926
29b98fb2 1927** `macroexpand' produces structures, not S-expressions.
96b73e84 1928
29b98fb2
AW
1929Given the need to maintain referential transparency, both lexically and
1930modular, the result of expanding Scheme expressions is no longer itself
1931an s-expression. If you want a human-readable approximation of the
1932result of `macroexpand', call `tree-il->scheme' from `(language
1933tree-il)'.
96b73e84 1934
29b98fb2 1935** Removed function: `macroexpand-1'
96b73e84 1936
29b98fb2
AW
1937It is unclear how to implement `macroexpand-1' with syntax-case, though
1938PLT Scheme does prove that it is possible.
fa1804e9
AW
1939
1940** New reader macros: #' #` #, #,@
1941
1942These macros translate, respectively, to `syntax', `quasisyntax',
1943`unsyntax', and `unsyntax-splicing'. See the R6RS for more information.
1944These reader macros may be overridden by `read-hash-extend'.
1945
1946** Incompatible change to #'
1947
1948Guile did have a #' hash-extension, by default, which just returned the
1949subsequent datum: #'foo => foo. In the unlikely event that anyone
1950actually used this, this behavior may be reinstated via the
1951`read-hash-extend' mechanism.
1952
b47fea09
AW
1953** `unquote' and `unquote-splicing' accept multiple expressions
1954
1955As per the R6RS, these syntax operators can now accept any number of
1956expressions to unquote.
1957
fa1804e9
AW
1958** Scheme expresssions may be commented out with #;
1959
93617170
LC
1960#; comments out an entire expression. See SRFI-62 or the R6RS for more
1961information.
fa1804e9 1962
b0abbaa7
AW
1963** Prompts: Delimited, composable continuations
1964
1965Guile now has prompts as part of its primitive language. See "Prompts"
1966in the manual, for more information.
1967
1968Expressions entered in at the REPL, or from the command line, are
1969surrounded by a prompt with the default prompt tag.
1970
93617170 1971** `make-stack' with a tail-called procedural narrowing argument no longer
fa1804e9
AW
1972 works (with compiled procedures)
1973
1974It used to be the case that a captured stack could be narrowed to select
1975calls only up to or from a certain procedure, even if that procedure
1976already tail-called another procedure. This was because the debug
1977information from the original procedure was kept on the stack.
1978
1979Now with the new compiler, the stack only contains active frames from
1980the current continuation. A narrow to a procedure that is not in the
1981stack will result in an empty stack. To fix this, narrow to a procedure
1982that is active in the current continuation, or narrow to a specific
1983number of stack frames.
1984
29b98fb2 1985** Backtraces through compiled procedures only show procedures that are
fa1804e9
AW
1986 active in the current continuation
1987
1988Similarly to the previous issue, backtraces in compiled code may be
1989different from backtraces in interpreted code. There are no semantic
1990differences, however. Please mail bug-guile@gnu.org if you see any
1991deficiencies with Guile's backtraces.
1992
b47fea09
AW
1993** `positions' reader option enabled by default
1994
1995This change allows primitive-load without --auto-compile to also
1996propagate source information through the expander, for better errors and
1997to let macros know their source locations. The compiler was already
1998turning it on anyway.
1999
51cb0cca
AW
2000** New macro: `current-source-location'
2001
2002The macro returns the current source location (to be documented).
2003
fa1804e9
AW
2004** syntax-rules and syntax-case macros now propagate source information
2005 through to the expanded code
2006
2007This should result in better backtraces.
2008
2009** The currying behavior of `define' has been removed.
2010
2011Before, `(define ((f a) b) (* a b))' would translate to
2012
2013 (define f (lambda (a) (lambda (b) (* a b))))
2014
93617170 2015Now a syntax error is signaled, as this syntax is not supported by
29b98fb2
AW
2016default. Use the `(ice-9 curried-definitions)' module to get back the
2017old behavior.
fa1804e9 2018
4a457691
AW
2019** New procedure, `define!'
2020
2021`define!' is a procedure that takes two arguments, a symbol and a value,
2022and binds the value to the symbol in the current module. It's useful to
2023programmatically make definitions in the current module, and is slightly
2024less verbose than `module-define!'.
2025
fa1804e9
AW
2026** All modules have names now
2027
2028Before, you could have anonymous modules: modules without names. Now,
2029because of hygiene and macros, all modules have names. If a module was
2030created without a name, the first time `module-name' is called on it, a
2031fresh name will be lazily generated for it.
2032
18e90860
AW
2033** The module namespace is now separate from the value namespace
2034
2035It was a little-known implementation detail of Guile's module system
2036that it was built on a single hierarchical namespace of values -- that
2037if there was a module named `(foo bar)', then in the module named
2038`(foo)' there was a binding from `bar' to the `(foo bar)' module.
2039
2040This was a neat trick, but presented a number of problems. One problem
2041was that the bindings in a module were not apparent from the module
2042itself; perhaps the `(foo)' module had a private binding for `bar', and
2043then an external contributor defined `(foo bar)'. In the end there can
2044be only one binding, so one of the two will see the wrong thing, and
2045produce an obtuse error of unclear provenance.
2046
2047Also, the public interface of a module was also bound in the value
2048namespace, as `%module-public-interface'. This was a hack from the early
2049days of Guile's modules.
2050
2051Both of these warts have been fixed by the addition of fields in the
2052`module' data type. Access to modules and their interfaces from the
2053value namespace has been deprecated, and all accessors use the new
2054record accessors appropriately.
2055
2056When Guile is built with support for deprecated code, as is the default,
2057the value namespace is still searched for modules and public interfaces,
2058and a deprecation warning is raised as appropriate.
2059
2060Finally, to support lazy loading of modules as one used to be able to do
2061with module binder procedures, Guile now has submodule binders, called
2062if a given submodule is not found. See boot-9.scm for more information.
2063
2064** New procedures: module-ref-submodule, module-define-submodule,
2065 nested-ref-module, nested-define-module!, local-ref-module,
2066 local-define-module
2067
2068These new accessors are like their bare variants, but operate on
2069namespaces instead of values.
2070
2071** The (app modules) module tree is officially deprecated
2072
2073It used to be that one could access a module named `(foo bar)' via
2074`(nested-ref the-root-module '(app modules foo bar))'. The `(app
2075modules)' bit was a never-used and never-documented abstraction, and has
2076been deprecated. See the following mail for a full discussion:
2077
2078 http://lists.gnu.org/archive/html/guile-devel/2010-04/msg00168.html
2079
2080The `%app' binding is also deprecated.
2081
51cb0cca
AW
2082** `module-filename' field and accessor
2083
2084Modules now record the file in which they are defined. This field may be
2085accessed with the new `module-filename' procedure.
2086
2087** Modules load within a known environment
2088
2089It takes a few procedure calls to define a module, and those procedure
2090calls need to be in scope. Now we ensure that the current module when
2091loading a module is one that has the needed bindings, instead of relying
2092on chance.
2093
b47fea09
AW
2094** `load' is a macro (!) that resolves paths relative to source file dir
2095
2096The familiar Schem `load' procedure is now a macro that captures the
2097name of the source file being expanded, and dispatches to the new
2098`load-in-vicinity'. Referencing `load' by bare name returns a closure
2099that embeds the current source file name.
2100
2101This fix allows `load' of relative paths to be resolved with respect to
2102the location of the file that calls `load'.
2103
fa1804e9
AW
2104** Many syntax errors have different texts now
2105
2106Syntax errors still throw to the `syntax-error' key, but the arguments
2107are often different now. Perhaps in the future, Guile will switch to
93617170 2108using standard SRFI-35 conditions.
fa1804e9
AW
2109
2110** Returning multiple values to compiled code will silently truncate the
2111 values to the expected number
2112
2113For example, the interpreter would raise an error evaluating the form,
2114`(+ (values 1 2) (values 3 4))', because it would see the operands as
2115being two compound "values" objects, to which `+' does not apply.
2116
2117The compiler, on the other hand, receives multiple values on the stack,
2118not as a compound object. Given that it must check the number of values
2119anyway, if too many values are provided for a continuation, it chooses
2120to truncate those values, effectively evaluating `(+ 1 3)' instead.
2121
2122The idea is that the semantics that the compiler implements is more
2123intuitive, and the use of the interpreter will fade out with time.
2124This behavior is allowed both by the R5RS and the R6RS.
2125
2126** Multiple values in compiled code are not represented by compound
2127 objects
2128
2129This change may manifest itself in the following situation:
2130
2131 (let ((val (foo))) (do-something) val)
2132
2133In the interpreter, if `foo' returns multiple values, multiple values
2134are produced from the `let' expression. In the compiler, those values
2135are truncated to the first value, and that first value is returned. In
2136the compiler, if `foo' returns no values, an error will be raised, while
2137the interpreter would proceed.
2138
2139Both of these behaviors are allowed by R5RS and R6RS. The compiler's
2140behavior is more correct, however. If you wish to preserve a potentially
2141multiply-valued return, you will need to set up a multiple-value
2142continuation, using `call-with-values'.
2143
2144** Defmacros are now implemented in terms of syntax-case.
2145
2146The practical ramification of this is that the `defmacro?' predicate has
2147been removed, along with `defmacro-transformer', `macro-table',
2148`xformer-table', `assert-defmacro?!', `set-defmacro-transformer!' and
2149`defmacro:transformer'. This is because defmacros are simply macros. If
2150any of these procedures provided useful facilities to you, we encourage
2151you to contact the Guile developers.
2152
139fa149
AW
2153** Hygienic macros documented as the primary syntactic extension mechanism.
2154
2155The macro documentation was finally fleshed out with some documentation
29b98fb2
AW
2156on `syntax-rules' and `syntax-case' macros, and other parts of the macro
2157expansion process. See "Macros" in the manual, for details.
139fa149 2158
fa1804e9
AW
2159** psyntax is now the default expander
2160
2161Scheme code is now expanded by default by the psyntax hygienic macro
2162expander. Expansion is performed completely before compilation or
2163interpretation.
2164
2165Notably, syntax errors will be signalled before interpretation begins.
2166In the past, many syntax errors were only detected at runtime if the
2167code in question was memoized.
2168
2169As part of its expansion, psyntax renames all lexically-bound
2170identifiers. Original identifier names are preserved and given to the
2171compiler, but the interpreter will see the renamed variables, e.g.,
2172`x432' instead of `x'.
2173
2174Note that the psyntax that Guile uses is a fork, as Guile already had
2175modules before incompatible modules were added to psyntax -- about 10
2176years ago! Thus there are surely a number of bugs that have been fixed
2177in psyntax since then. If you find one, please notify bug-guile@gnu.org.
2178
2179** syntax-rules and syntax-case are available by default.
2180
2181There is no longer any need to import the `(ice-9 syncase)' module
2182(which is now deprecated). The expander may be invoked directly via
29b98fb2 2183`macroexpand', though it is normally searched for via the current module
fa1804e9
AW
2184transformer.
2185
2186Also, the helper routines for syntax-case are available in the default
2187environment as well: `syntax->datum', `datum->syntax',
2188`bound-identifier=?', `free-identifier=?', `generate-temporaries',
2189`identifier?', and `syntax-violation'. See the R6RS for documentation.
2190
4a457691
AW
2191** Tail patterns in syntax-case
2192
2193Guile has pulled in some more recent changes from the psyntax portable
2194syntax expander, to implement support for "tail patterns". Such patterns
2195are supported by syntax-rules and syntax-case. This allows a syntax-case
2196match clause to have ellipses, then a pattern at the end. For example:
2197
2198 (define-syntax case
2199 (syntax-rules (else)
2200 ((_ val match-clause ... (else e e* ...))
2201 [...])))
2202
2203Note how there is MATCH-CLAUSE, which is ellipsized, then there is a
2204tail pattern for the else clause. Thanks to Andreas Rottmann for the
2205patch, and Kent Dybvig for the code.
2206
fa1804e9
AW
2207** Lexical bindings introduced by hygienic macros may not be referenced
2208 by nonhygienic macros.
2209
2210If a lexical binding is introduced by a hygienic macro, it may not be
2211referenced by a nonhygienic macro. For example, this works:
2212
2213 (let ()
2214 (define-macro (bind-x val body)
2215 `(let ((x ,val)) ,body))
2216 (define-macro (ref x)
2217 x)
2218 (bind-x 10 (ref x)))
2219
2220But this does not:
2221
2222 (let ()
2223 (define-syntax bind-x
2224 (syntax-rules ()
2225 ((_ val body) (let ((x val)) body))))
2226 (define-macro (ref x)
2227 x)
2228 (bind-x 10 (ref x)))
2229
2230It is not normal to run into this situation with existing code. However,
51cb0cca 2231if you have defmacros that expand to hygienic macros, it is possible to
66ad445d
AW
2232run into situations like this. For example, if you have a defmacro that
2233generates a `while' expression, the `break' bound by the `while' may not
2234be visible within other parts of your defmacro. The solution is to port
2235from defmacros to syntax-rules or syntax-case.
fa1804e9
AW
2236
2237** Macros may no longer be referenced as first-class values.
2238
2239In the past, you could evaluate e.g. `if', and get its macro value. Now,
2240expanding this form raises a syntax error.
2241
2242Macros still /exist/ as first-class values, but they must be
2243/referenced/ via the module system, e.g. `(module-ref (current-module)
2244'if)'.
2245
29b98fb2
AW
2246** Macros may now have docstrings.
2247
2248`object-documentation' from `(ice-9 documentation)' may be used to
2249retrieve the docstring, once you have a macro value -- but see the above
2250note about first-class macros. Docstrings are associated with the syntax
2251transformer procedures.
fa1804e9 2252
e614d375
AW
2253** `case-lambda' is now available in the default environment.
2254
2255The binding in the default environment is equivalent to the one from the
2256`(srfi srfi-16)' module. Use the srfi-16 module explicitly if you wish
2257to maintain compatibility with Guile 1.8 and earlier.
2258
29b98fb2 2259** Procedures may now have more than one arity.
5bb408cc
AW
2260
2261This can be the case, for example, in case-lambda procedures. The
2262arities of compiled procedures may be accessed via procedures from the
2263`(system vm program)' module; see "Compiled Procedures", "Optional
2264Arguments", and "Case-lambda" in the manual.
2265
18e90860
AW
2266** Deprecate arity access via (procedure-properties proc 'arity)
2267
2268Instead of accessing a procedure's arity as a property, use the new
2269`procedure-minimum-arity' function, which gives the most permissive
b3da54d1 2270arity that the function has, in the same format as the old arity
18e90860
AW
2271accessor.
2272
e614d375
AW
2273** `lambda*' and `define*' are now available in the default environment
2274
2275As with `case-lambda', `(ice-9 optargs)' continues to be supported, for
2276compatibility purposes. No semantic change has been made (we hope).
2277Optional and keyword arguments now dispatch via special VM operations,
2278without the need to cons rest arguments, making them very fast.
2279
487bacf4
AW
2280** New syntax: define-once
2281
2282`define-once' is like Lisp's `defvar': it creates a toplevel binding,
2283but only if one does not exist already.
2284
cf8ec359
AW
2285** New function, `truncated-print', with `format' support
2286
2287`(ice-9 pretty-print)' now exports `truncated-print', a printer that
2288will ensure that the output stays within a certain width, truncating the
2289output in what is hopefully an intelligent manner. See the manual for
2290more details.
2291
2292There is a new `format' specifier, `~@y', for doing a truncated
2293print (as opposed to `~y', which does a pretty-print). See the `format'
2294documentation for more details.
2295
7cd99cba
AW
2296** Better pretty-printing
2297
2298Indentation recognizes more special forms, like `syntax-case', and read
2299macros like `quote' are printed better.
2300
51cb0cca
AW
2301** Passing a number as the destination of `format' is deprecated
2302
2303The `format' procedure in `(ice-9 format)' now emits a deprecation
2304warning if a number is passed as its first argument.
2305
487bacf4
AW
2306Also, it used to be that you could omit passing a port to `format', in
2307some cases. This still works, but has been formally deprecated.
2308
cf8ec359
AW
2309** SRFI-4 vectors reimplemented in terms of R6RS bytevectors
2310
2311Guile now implements SRFI-4 vectors using bytevectors. Often when you
2312have a numeric vector, you end up wanting to write its bytes somewhere,
2313or have access to the underlying bytes, or read in bytes from somewhere
2314else. Bytevectors are very good at this sort of thing. But the SRFI-4
2315APIs are nicer to use when doing number-crunching, because they are
2316addressed by element and not by byte.
2317
2318So as a compromise, Guile allows all bytevector functions to operate on
2319numeric vectors. They address the underlying bytes in the native
2320endianness, as one would expect.
2321
2322Following the same reasoning, that it's just bytes underneath, Guile
2323also allows uniform vectors of a given type to be accessed as if they
2324were of any type. One can fill a u32vector, and access its elements with
2325u8vector-ref. One can use f64vector-ref on bytevectors. It's all the
2326same to Guile.
2327
2328In this way, uniform numeric vectors may be written to and read from
2329input/output ports using the procedures that operate on bytevectors.
2330
2331Calls to SRFI-4 accessors (ref and set functions) from Scheme are now
2332inlined to the VM instructions for bytevector access.
2333
2334See "SRFI-4" in the manual, for more information.
2335
2336** Nonstandard SRFI-4 procedures now available from `(srfi srfi-4 gnu)'
2337
2338Guile's `(srfi srfi-4)' now only exports those srfi-4 procedures that
2339are part of the standard. Complex uniform vectors and the
2340`any->FOOvector' family are now available only from `(srfi srfi-4 gnu)'.
2341
2342Guile's default environment imports `(srfi srfi-4)', and probably should
2343import `(srfi srfi-4 gnu)' as well.
2344
2345See "SRFI-4 Extensions" in the manual, for more information.
2346
e614d375
AW
2347** New syntax: include-from-path.
2348
2349`include-from-path' is like `include', except it looks for its file in
2350the load path. It can be used to compile other files into a file.
2351
2352** New syntax: quasisyntax.
2353
2354`quasisyntax' is to `syntax' as `quasiquote' is to `quote'. See the R6RS
2355documentation for more information. Thanks to Andre van Tonder for the
2356implementation.
2357
51cb0cca
AW
2358** `*unspecified*' is identifier syntax
2359
2360`*unspecified*' is no longer a variable, so it is optimized properly by
2361the compiler, and is not `set!'-able.
2362
487bacf4
AW
2363** Changes and bugfixes in numerics code
2364
2365*** Added six new sets of fast quotient and remainder operators
2366
2367Added six new sets of fast quotient and remainder operator pairs with
2368different semantics than the R5RS operators. They support not only
2369integers, but all reals, including exact rationals and inexact
2370floating point numbers.
2371
2372These procedures accept two real numbers N and D, where the divisor D
2373must be non-zero. Each set of operators computes an integer quotient
2374Q and a real remainder R such that N = Q*D + R and |R| < |D|. They
2375differ only in how N/D is rounded to produce Q.
2376
2377`euclidean-quotient' returns the integer Q and `euclidean-remainder'
2378returns the real R such that N = Q*D + R and 0 <= R < |D|. `euclidean/'
2379returns both Q and R, and is more efficient than computing each
2380separately. Note that when D > 0, `euclidean-quotient' returns
2381floor(N/D), and when D < 0 it returns ceiling(N/D).
2382
2383`centered-quotient', `centered-remainder', and `centered/' are similar
2384except that the range of remainders is -abs(D/2) <= R < abs(D/2), and
2385`centered-quotient' rounds N/D to the nearest integer. Note that these
2386operators are equivalent to the R6RS integer division operators `div',
2387`mod', `div-and-mod', `div0', `mod0', and `div0-and-mod0'.
2388
2389`floor-quotient' and `floor-remainder' compute Q and R, respectively,
2390where Q has been rounded toward negative infinity. `floor/' returns
2391both Q and R, and is more efficient than computing each separately.
2392Note that when applied to integers, `floor-remainder' is equivalent to
2393the R5RS integer-only `modulo' operator. `ceiling-quotient',
2394`ceiling-remainder', and `ceiling/' are similar except that Q is
2395rounded toward positive infinity.
2396
2397For `truncate-quotient', `truncate-remainder', and `truncate/', Q is
2398rounded toward zero. Note that when applied to integers,
2399`truncate-quotient' and `truncate-remainder' are equivalent to the
2400R5RS integer-only operators `quotient' and `remainder'.
2401
2402For `round-quotient', `round-remainder', and `round/', Q is rounded to
2403the nearest integer, with ties going to the nearest even integer.
2404
2405*** Complex number changes
2406
2407Guile is now able to represent non-real complex numbers whose
2408imaginary part is an _inexact_ zero (0.0 or -0.0), per R6RS.
2409Previously, such numbers were immediately changed into inexact reals.
2410
2411(real? 0.0+0.0i) now returns #f, per R6RS, although (zero? 0.0+0.0i)
2412still returns #t, per R6RS. (= 0 0.0+0.0i) and (= 0.0 0.0+0.0i) are
2413#t, but the same comparisons using `eqv?' or `equal?' are #f.
2414
2415Like other non-real numbers, these complex numbers with inexact zero
2416imaginary part will raise exceptions is passed to procedures requiring
2417reals, such as `<', `>', `<=', `>=', `min', `max', `positive?',
2418`negative?', `inf?', `nan?', `finite?', etc.
2419
2420**** `make-rectangular' changes
2421
2422scm_make_rectangular `make-rectangular' now returns a real number only
2423if the imaginary part is an _exact_ 0. Previously, it would return a
2424real number if the imaginary part was an inexact zero.
2425
2426scm_c_make_rectangular now always returns a non-real complex number,
2427even if the imaginary part is zero. Previously, it would return a
2428real number if the imaginary part was zero.
2429
2430**** `make-polar' changes
2431
2432scm_make_polar `make-polar' now returns a real number only if the
2433angle or magnitude is an _exact_ 0. If the magnitude is an exact 0,
2434it now returns an exact 0. Previously, it would return a real
2435number if the imaginary part was an inexact zero.
2436
2437scm_c_make_polar now always returns a non-real complex number, even if
2438the imaginary part is 0.0. Previously, it would return a real number
2439if the imaginary part was 0.0.
2440
2441**** `imag-part' changes
2442
2443scm_imag_part `imag-part' now returns an exact 0 if applied to an
2444inexact real number. Previously it returned an inexact zero in this
2445case.
2446
2447*** `eqv?' and `equal?' now compare numbers equivalently
2448
2449scm_equal_p `equal?' now behaves equivalently to scm_eqv_p `eqv?' for
2450numeric values, per R5RS. Previously, equal? worked differently,
2451e.g. `(equal? 0.0 -0.0)' returned #t but `(eqv? 0.0 -0.0)' returned #f,
2452and `(equal? +nan.0 +nan.0)' returned #f but `(eqv? +nan.0 +nan.0)'
2453returned #t.
2454
2455*** `(equal? +nan.0 +nan.0)' now returns #t
2456
2457Previously, `(equal? +nan.0 +nan.0)' returned #f, although
2458`(let ((x +nan.0)) (equal? x x))' and `(eqv? +nan.0 +nan.0)'
2459both returned #t. R5RS requires that `equal?' behave like
2460`eqv?' when comparing numbers.
2461
2462*** Change in handling products `*' involving exact 0
2463
2464scm_product `*' now handles exact 0 differently. A product containing
2465an exact 0 now returns an exact 0 if and only if the other arguments
2466are all exact. An inexact zero is returned if and only if the other
2467arguments are all finite but not all exact. If an infinite or NaN
2468value is present, a NaN value is returned. Previously, any product
2469containing an exact 0 yielded an exact 0, regardless of the other
2470arguments.
2471
2472*** `expt' and `integer-expt' changes when the base is 0
2473
2474While `(expt 0 0)' is still 1, and `(expt 0 N)' for N > 0 is still
2475zero, `(expt 0 N)' for N < 0 is now a NaN value, and likewise for
2476integer-expt. This is more correct, and conforming to R6RS, but seems
2477to be incompatible with R5RS, which would return 0 for all non-zero
2478values of N.
2479
2480*** `expt' and `integer-expt' are more generic, less strict
2481
2482When raising to an exact non-negative integer exponent, `expt' and
2483`integer-expt' are now able to exponentiate any object that can be
2484multiplied using `*'. They can also raise an object to an exact
2485negative integer power if its reciprocal can be taken using `/'.
2486In order to allow this, the type of the first argument is no longer
2487checked when raising to an exact integer power. If the exponent is 0
2488or 1, the first parameter is not manipulated at all, and need not
2489even support multiplication.
2490
2491*** Infinities are no longer integers, nor rationals
2492
2493scm_integer_p `integer?' and scm_rational_p `rational?' now return #f
2494for infinities, per R6RS. Previously they returned #t for real
2495infinities. The real infinities and NaNs are still considered real by
2496scm_real `real?' however, per R6RS.
2497
2498*** NaNs are no longer rationals
2499
2500scm_rational_p `rational?' now returns #f for NaN values, per R6RS.
2501Previously it returned #t for real NaN values. They are still
2502considered real by scm_real `real?' however, per R6RS.
2503
2504*** `inf?' and `nan?' now throw exceptions for non-reals
2505
2506The domain of `inf?' and `nan?' is the real numbers. Guile now signals
2507an error when a non-real number or non-number is passed to these
2508procedures. (Note that NaNs _are_ considered numbers by scheme, despite
2509their name).
2510
2511*** `rationalize' bugfixes and changes
2512
2513Fixed bugs in scm_rationalize `rationalize'. Previously, it returned
2514exact integers unmodified, although that was incorrect if the epsilon
2515was at least 1 or inexact, e.g. (rationalize 4 1) should return 3 per
2516R5RS and R6RS, but previously it returned 4. It also now handles
2517cases involving infinities and NaNs properly, per R6RS.
2518
2519*** Trigonometric functions now return exact numbers in some cases
2520
2521scm_sin `sin', scm_cos `cos', scm_tan `tan', scm_asin `asin', scm_acos
2522`acos', scm_atan `atan', scm_sinh `sinh', scm_cosh `cosh', scm_tanh
2523`tanh', scm_sys_asinh `asinh', scm_sys_acosh `acosh', and
2524scm_sys_atanh `atanh' now return exact results in some cases.
2525
2526*** New procedure: `finite?'
2527
2528Add scm_finite_p `finite?' from R6RS to guile core, which returns #t
2529if and only if its argument is neither infinite nor a NaN. Note that
2530this is not the same as (not (inf? x)) or (not (infinite? x)), since
2531NaNs are neither finite nor infinite.
2532
2533*** Improved exactness handling for complex number parsing
2534
2535When parsing non-real complex numbers, exactness specifiers are now
2536applied to each component, as is done in PLT Scheme. For complex
2537numbers written in rectangular form, exactness specifiers are applied
2538to the real and imaginary parts before calling scm_make_rectangular.
2539For complex numbers written in polar form, exactness specifiers are
2540applied to the magnitude and angle before calling scm_make_polar.
2541
2542Previously, exactness specifiers were applied to the number as a whole
2543_after_ calling scm_make_rectangular or scm_make_polar.
2544
2545For example, (string->number "#i5.0+0i") now does the equivalent of:
2546
2547 (make-rectangular (exact->inexact 5.0) (exact->inexact 0))
2548
2549which yields 5.0+0.0i. Previously it did the equivalent of:
2550
2551 (exact->inexact (make-rectangular 5.0 0))
2552
2553which yielded 5.0.
2554
108e18b1
AW
2555** Unicode characters
2556
2557Unicode characters may be entered in octal format via e.g. `#\454', or
2558created via (integer->char 300). A hex external representation will
2559probably be introduced at some point.
2560
2561** Unicode strings
2562
2563Internally, strings are now represented either in the `latin-1'
2564encoding, one byte per character, or in UTF-32, with four bytes per
2565character. Strings manage their own allocation, switching if needed.
2566
99e31c32
AW
2567Extended characters may be written in a literal string using the
2568hexadecimal escapes `\xXX', `\uXXXX', or `\UXXXXXX', for 8-bit, 16-bit,
2569or 24-bit codepoints, respectively, or entered directly in the native
2570encoding of the port on which the string is read.
2571
56664c08
AW
2572** Unicode symbols
2573
2574One may now use U+03BB (GREEK SMALL LETTER LAMBDA) as an identifier.
2575
99e31c32
AW
2576** Support for non-ASCII source code files
2577
2578The default reader now handles source code files for some of the
2579non-ASCII character encodings, such as UTF-8. A non-ASCII source file
2580should have an encoding declaration near the top of the file. Also,
2581there is a new function, `file-encoding', that scans a port for a coding
2582declaration. See the section of the manual entitled, "Character Encoding
2583of Source Files".
2584
2585The pre-1.9.3 reader handled 8-bit clean but otherwise unspecified source
51cb0cca
AW
2586code. This use is now discouraged. Binary input and output is
2587currently supported by opening ports in the ISO-8859-1 locale.
99e31c32 2588
487bacf4
AW
2589** Source files default to UTF-8.
2590
2591If source files do not specify their encoding via a `coding:' block,
2592the default encoding is UTF-8, instead of being taken from the current
2593locale.
2594
2595** Interactive Guile installs the current locale.
2596
2597Instead of leaving the user in the "C" locale, running the Guile REPL
2598installs the current locale. [FIXME xref?]
2599
99e31c32
AW
2600** Support for locale transcoding when reading from and writing to ports
2601
2602Ports now have an associated character encoding, and port read and write
2603operations do conversion to and from locales automatically. Ports also
2604have an associated strategy for how to deal with locale conversion
2605failures.
2606
2607See the documentation in the manual for the four new support functions,
2608`set-port-encoding!', `port-encoding', `set-port-conversion-strategy!',
2609and `port-conversion-strategy'.
2610
2611** String and SRFI-13 functions can operate on Unicode strings
2612
2613** Unicode support for SRFI-14 character sets
2614
2615The default character sets are no longer locale dependent and contain
2616characters from the whole Unicode range. There is a new predefined
2617character set, `char-set:designated', which contains all assigned
2618Unicode characters. There is a new debugging function, `%char-set-dump'.
2619
2620** Character functions operate on Unicode characters
2621
2622`char-upcase' and `char-downcase' use default Unicode casing rules.
2623Character comparisons such as `char<?' and `char-ci<?' now sort based on
2624Unicode code points.
108e18b1
AW
2625
2626** Global variables `scm_charnames' and `scm_charnums' are removed
2627
2628These variables contained the names of control characters and were
2629used when writing characters. While these were global, they were
2630never intended to be public API. They have been replaced with private
2631functions.
2632
2633** EBCDIC support is removed
2634
2635There was an EBCDIC compile flag that altered some of the character
2636processing. It appeared that full EBCDIC support was never completed
2637and was unmaintained.
2638
6bf927ab 2639** Compile-time warnings
b0217d17
AW
2640
2641Guile can warn about potentially unbound free variables. Pass the
2642-Wunbound-variable on the `guile-tools compile' command line, or add
2643`#:warnings '(unbound-variable)' to your `compile' or `compile-file'
51cb0cca
AW
2644invocation. Warnings are also enabled by default for expressions entered
2645at the REPL.
b0217d17 2646
6cf43047
AW
2647Guile can also warn when you pass the wrong number of arguments to a
2648procedure, with -Warity-mismatch, or `arity-mismatch' in the
2649`#:warnings' as above.
2650
6bf927ab 2651Other warnings include `-Wunused-variable' and `-Wunused-toplevel', to
ef6b0e8d
AW
2652warn about unused local or global (top-level) variables, and `-Wformat',
2653to check for various errors related to the `format' procedure.
6bf927ab 2654
93617170
LC
2655** A new `memoize-symbol' evaluator trap has been added.
2656
2657This trap can be used for efficiently implementing a Scheme code
2658coverage.
fa1804e9 2659
96b73e84 2660** Duplicate bindings among used modules are resolved lazily.
93617170 2661
96b73e84 2662This slightly improves program startup times.
fa1804e9 2663
96b73e84 2664** New thread cancellation and thread cleanup API
93617170 2665
96b73e84 2666See `cancel-thread', `set-thread-cleanup!', and `thread-cleanup'.
fa1804e9 2667
51cb0cca
AW
2668** New threads are in `(guile-user)' by default, not `(guile)'
2669
2670It used to be that a new thread entering Guile would do so in the
2671`(guile)' module, unless this was the first time Guile was initialized,
2672in which case it was `(guile-user)'. This has been fixed to have all
2673new threads unknown to Guile default to `(guile-user)'.
2674
b47fea09
AW
2675** New helpers: `print-exception', `set-exception-printer!'
2676
2677These functions implement an extensible exception printer. Guile
2678registers printers for all of the exceptions it throws. Users may add
2679their own printers. There is also `scm_print_exception', for use by C
2680programs. Pleasantly, this allows SRFI-35 and R6RS exceptions to be
2681printed appropriately.
2682
4a457691
AW
2683** GOOPS dispatch in scheme
2684
2685As an implementation detail, GOOPS dispatch is no longer implemented by
2686special evaluator bytecodes, but rather directly via a Scheme function
2687associated with an applicable struct. There is some VM support for the
2688underlying primitives, like `class-of'.
2689
2690This change will in the future allow users to customize generic function
2691dispatch without incurring a performance penalty, and allow us to
2692implement method combinations.
2693
4a457691
AW
2694** Applicable struct support
2695
2696One may now make structs from Scheme that may be applied as procedures.
2697To do so, make a struct whose vtable is `<applicable-struct-vtable>'.
2698That struct will be the vtable of your applicable structs; instances of
2699that new struct are assumed to have the procedure in their first slot.
2700`<applicable-struct-vtable>' is like Common Lisp's
2701`funcallable-standard-class'. Likewise there is
2702`<applicable-struct-with-setter-vtable>', which looks for the setter in
2703the second slot. This needs to be better documented.
2704
29b98fb2
AW
2705** GOOPS cleanups.
2706
2707GOOPS had a number of concepts that were relevant to the days of Tcl,
2708but not any more: operators and entities, mainly. These objects were
2709never documented, and it is unlikely that they were ever used. Operators
2710were a kind of generic specific to the Tcl support. Entities were
2711replaced by applicable structs, mentioned above.
2712
4a457691
AW
2713** New struct slot allocation: "hidden"
2714
2715A hidden slot is readable and writable, but will not be initialized by a
2716call to make-struct. For example in your layout you would say "ph"
2717instead of "pw". Hidden slots are useful for adding new slots to a
2718vtable without breaking existing invocations to make-struct.
2719
2720** eqv? not a generic
2721
2722One used to be able to extend `eqv?' as a primitive-generic, but no
2723more. Because `eqv?' is in the expansion of `case' (via `memv'), which
2724should be able to compile to static dispatch tables, it doesn't make
2725sense to allow extensions that would subvert this optimization.
2726
e614d375
AW
2727** `inet-ntop' and `inet-pton' are always available.
2728
2729Guile now use a portable implementation of `inet_pton'/`inet_ntop', so
2730there is no more need to use `inet-aton'/`inet-ntoa'. The latter
2731functions are deprecated.
2732
b47fea09
AW
2733** `getopt-long' parsing errors throw to `quit', not `misc-error'
2734
2735This change should inhibit backtraces on argument parsing errors.
2736`getopt-long' has been modified to print out the error that it throws
2737itself.
2738
51cb0cca
AW
2739** New primitive: `tmpfile'.
2740
2741See "File System" in the manual.
2742
2743** Random generator state may be serialized to a datum
2744
2745`random-state->datum' will serialize a random state to a datum, which
2746may be written out, read back in later, and revivified using
2747`datum->random-state'. See "Random" in the manual, for more details.
2748
2749** Fix random number generator on 64-bit platforms
2750
2751There was a nasty bug on 64-bit platforms in which asking for a random
2752integer with a range between 2**32 and 2**64 caused a segfault. After
2753many embarrassing iterations, this was fixed.
2754
5bb408cc
AW
2755** Fast bit operations.
2756
2757The bit-twiddling operations `ash', `logand', `logior', and `logxor' now
2758have dedicated bytecodes. Guile is not just for symbolic computation,
2759it's for number crunching too.
2760
4a457691
AW
2761** Faster SRFI-9 record access
2762
2763SRFI-9 records are now implemented directly on top of Guile's structs,
2764and their accessors are defined in such a way that normal call-sites
2765inline to special VM opcodes, while still allowing for the general case
2766(e.g. passing a record accessor to `apply').
2767
e614d375
AW
2768** R6RS block comment support
2769
2770Guile now supports R6RS nested block comments. The start of a comment is
2771marked with `#|', and the end with `|#'.
2772
2773** `guile-2' cond-expand feature
2774
2775To test if your code is running under Guile 2.0 (or its alpha releases),
2776test for the `guile-2' cond-expand feature. Like this:
2777
2778 (cond-expand (guile-2 (eval-when (compile)
2779 ;; This must be evaluated at compile time.
2780 (fluid-set! current-reader my-reader)))
2781 (guile
2782 ;; Earlier versions of Guile do not have a
2783 ;; separate compilation phase.
2784 (fluid-set! current-reader my-reader)))
2785
96b73e84 2786** New global variables: %load-compiled-path, %load-compiled-extensions
fa1804e9 2787
96b73e84 2788These are analogous to %load-path and %load-extensions.
fa1804e9 2789
18e90860
AW
2790** New fluid: `%file-port-name-canonicalization'
2791
2792This fluid parameterizes the file names that are associated with file
2793ports. If %file-port-name-canonicalization is 'absolute, then file names
2794are canonicalized to be absolute paths. If it is 'relative, then the
2795name is canonicalized, but any prefix corresponding to a member of
2796`%load-path' is stripped off. Otherwise the names are passed through
2797unchanged.
2798
2799In addition, the `compile-file' and `compile-and-load' procedures bind
2800%file-port-name-canonicalization to their `#:canonicalization' keyword
2801argument, which defaults to 'relative. In this way, one might compile
2802"../module/ice-9/boot-9.scm", but the path that gets residualized into
2803the .go is "ice-9/boot-9.scm".
2804
96b73e84 2805** New procedure, `make-promise'
fa1804e9 2806
96b73e84 2807`(make-promise (lambda () foo))' is equivalent to `(delay foo)'.
fa1804e9 2808
108e18b1
AW
2809** `defined?' may accept a module as its second argument
2810
2811Previously it only accepted internal structures from the evaluator.
2812
96b73e84 2813** New entry into %guile-build-info: `ccachedir'
fa1804e9 2814
96b73e84 2815** Fix bug in `module-bound?'.
fa1804e9 2816
96b73e84
AW
2817`module-bound?' was returning true if a module did have a local
2818variable, but one that was unbound, but another imported module bound
2819the variable. This was an error, and was fixed.
fa1804e9 2820
96b73e84 2821** `(ice-9 syncase)' has been deprecated.
fa1804e9 2822
96b73e84
AW
2823As syntax-case is available by default, importing `(ice-9 syncase)' has
2824no effect, and will trigger a deprecation warning.
fa1804e9 2825
b0217d17
AW
2826** New readline history functions
2827
2828The (ice-9 readline) module now provides add-history, read-history,
2829write-history and clear-history, which wrap the corresponding GNU
2830History library functions.
2831
86d88a22
AW
2832** Removed deprecated uniform array procedures:
2833 dimensions->uniform-array, list->uniform-array, array-prototype
2834
2835Instead, use make-typed-array, list->typed-array, or array-type,
2836respectively.
2837
51cb0cca
AW
2838** Deprecate the old `scm-style-repl'
2839
2840The following bindings from boot-9 are now found in `(ice-9
2841scm-style-repl)': `scm-style-repl', `error-catching-loop',
2842`error-catching-repl', `bad-throw', `scm-repl-silent'
2843`assert-repl-silence', `repl-print-unspecified',
2844`assert-repl-print-unspecified', `scm-repl-verbose',
2845`assert-repl-verbosity', `scm-repl-prompt', `set-repl-prompt!', `repl',
2846`default-pre-unwind-handler', `handle-system-error',
2847
2848The following bindings have been deprecated, with no replacement:
2849`pre-unwind-handler-dispatch'.
2850
2851The following bindings have been totally removed:
2852`before-signal-stack'.
2853
2854Deprecated forwarding shims have been installed so that users that
2855expect these bindings in the main namespace will still work, but receive
2856a deprecation warning.
2857
2858** `set-batch-mode?!' replaced by `ensure-batch-mode!'
2859
2860"Batch mode" is a flag used to tell a program that it is not running
2861interactively. One usually turns it on after a fork. It may not be
2862turned off. `ensure-batch-mode!' deprecates the old `set-batch-mode?!',
2863because it is a better interface, as it can only turn on batch mode, not
2864turn it off.
2865
2866** Deprecate `save-stack', `the-last-stack'
2867
2868It used to be that the way to debug programs in Guile was to capture the
2869stack at the time of error, drop back to the REPL, then debug that
2870stack. But this approach didn't compose, was tricky to get right in the
2871presence of threads, and was not very powerful.
2872
2873So `save-stack', `stack-saved?', and `the-last-stack' have been moved to
2874`(ice-9 save-stack)', with deprecated bindings left in the root module.
2875
2876** `top-repl' has its own module
2877
2878The `top-repl' binding, called with Guile is run interactively, is now
2879is its own module, `(ice-9 top-repl)'. A deprecated forwarding shim was
2880left in the default environment.
2881
2882** `display-error' takes a frame
2883
2884The `display-error' / `scm_display_error' helper now takes a frame as an
2885argument instead of a stack. Stacks are still supported in deprecated
2886builds. Additionally, `display-error' will again source location
2887information for the error.
2888
2889** No more `(ice-9 debug)'
2890
2891This module had some debugging helpers that are no longer applicable to
2892the current debugging model. Importing this module will produce a
2893deprecation warning. Users should contact bug-guile for support.
2894
ef6b0e8d
AW
2895** Remove obsolete debug-options
2896
2897Removed `breakpoints', `trace', `procnames', `indent', `frames',
2898`maxdepth', and `debug' debug-options.
2899
2900** `backtrace' debug option on by default
2901
2902Given that Guile 2.0 can always give you a backtrace, backtraces are now
2903on by default.
2904
2905** `turn-on-debugging' deprecated
2906
2907** Remove obsolete print-options
2908
2909The `source' and `closure-hook' print options are obsolete, and have
2910been removed.
2911
2912** Remove obsolete read-options
2913
2914The "elisp-strings" and "elisp-vectors" read options were unused and
2915obsolete, so they have been removed.
2916
2917** Remove eval-options and trap-options
2918
2919Eval-options and trap-options are obsolete with the new VM and
2920evaluator.
2921
2922** Remove (ice-9 debugger) and (ice-9 debugging)
2923
2924See "Traps" and "Interactive Debugging" in the manual, for information
2925on their replacements.
2926
2927** Remove the GDS Emacs integration
2928
2929See "Using Guile in Emacs" in the manual, for info on how we think you
2930should use Guile with Emacs.
2931
b0abbaa7
AW
2932** Deprecated: `lazy-catch'
2933
2934`lazy-catch' was a form that captured the stack at the point of a
2935`throw', but the dynamic state at the point of the `catch'. It was a bit
2936crazy. Please change to use `catch', possibly with a throw-handler, or
2937`with-throw-handler'.
2938
487bacf4
AW
2939** Deprecated: primitive properties
2940
2941The `primitive-make-property', `primitive-property-set!',
2942`primitive-property-ref', and `primitive-property-del!' procedures were
2943crufty and only used to implement object properties, which has a new,
2944threadsafe implementation. Use object properties or weak hash tables
2945instead.
2946
18e90860
AW
2947** Deprecated `@bind' syntax
2948
2949`@bind' was part of an older implementation of the Emacs Lisp language,
2950and is no longer used.
2951
51cb0cca
AW
2952** Miscellaneous other deprecations
2953
7cd99cba
AW
2954`cuserid' has been deprecated, as it only returns 8 bytes of a user's
2955login. Use `(passwd:name (getpwuid (geteuid)))' instead.
2956
487bacf4
AW
2957Additionally, the procedures `apply-to-args', `has-suffix?', `scheme-file-suffix'
2958`get-option', `for-next-option', `display-usage-report',
2959`transform-usage-lambda', `collect', and `set-batch-mode?!' have all
2960been deprecated.
2961
7cd99cba
AW
2962** Add support for unbound fluids
2963
2964See `make-unbound-fluid', `fluid-unset!', and `fluid-bound?' in the
2965manual.
2966
2967** Add `variable-unset!'
2968
2969See "Variables" in the manual, for more details.
51cb0cca 2970
87e00370
LC
2971** Last but not least, the `λ' macro can be used in lieu of `lambda'
2972
96b73e84 2973* Changes to the C interface
fa1804e9 2974
7b96f3dd
LC
2975** Guile now uses libgc, the Boehm-Demers-Weiser garbage collector
2976
2977The semantics of `scm_gc_malloc ()' have been changed, in a
2978backward-compatible way. A new allocation routine,
2979`scm_gc_malloc_pointerless ()', was added.
2980
2981Libgc is a conservative GC, which we hope will make interaction with C
2982code easier and less error-prone.
2983
487bacf4
AW
2984** New procedures: `scm_to_stringn', `scm_from_stringn'
2985** New procedures: scm_{to,from}_{utf8,latin1}_symbol{n,}
2986** New procedures: scm_{to,from}_{utf8,utf32,latin1}_string{n,}
2987
2988These new procedures convert to and from string representations in
2989particular encodings.
ef6b0e8d 2990
487bacf4
AW
2991Users should continue to use locale encoding for user input, user
2992output, or interacting with the C library.
ef6b0e8d 2993
487bacf4 2994Use the Latin-1 functions for ASCII, and for literals in source code.
ef6b0e8d 2995
487bacf4
AW
2996Use UTF-8 functions for interaction with modern libraries which deal in
2997UTF-8, and UTF-32 for interaction with utf32-using libraries.
2998
2999Otherwise, use scm_to_stringn or scm_from_stringn with a specific
3000encoding.
ef6b0e8d 3001
4a457691
AW
3002** New type definitions for `scm_t_intptr' and friends.
3003
3004`SCM_T_UINTPTR_MAX', `SCM_T_INTPTR_MIN', `SCM_T_INTPTR_MAX',
3005`SIZEOF_SCM_T_BITS', `scm_t_intptr' and `scm_t_uintptr' are now
3006available to C. Have fun!
3007
96b73e84 3008** The GH interface (deprecated in version 1.6, 2001) was removed.
fa1804e9 3009
96b73e84 3010** Internal `scm_i_' functions now have "hidden" linkage with GCC/ELF
fa1804e9 3011
96b73e84
AW
3012This makes these internal functions technically not callable from
3013application code.
fa1804e9 3014
96b73e84
AW
3015** Functions for handling `scm_option' now no longer require an argument
3016indicating length of the `scm_t_option' array.
fa1804e9 3017
4a457691
AW
3018** Procedures-with-setters are now implemented using applicable structs
3019
3020From a user's perspective this doesn't mean very much. But if, for some
3021odd reason, you used the SCM_PROCEDURE_WITH_SETTER_P, SCM_PROCEDURE, or
3022SCM_SETTER macros, know that they're deprecated now. Also, scm_tc7_pws
3023is gone.
3024
3025** Remove old evaluator closures
3026
3027There used to be ranges of typecodes allocated to interpreted data
3028structures, but that it no longer the case, given that interpreted
3029procedure are now just regular VM closures. As a result, there is a
3030newly free tc3, and a number of removed macros. See the ChangeLog for
3031details.
3032
cf8ec359 3033** Primitive procedures are now VM trampoline procedures
4a457691
AW
3034
3035It used to be that there were something like 12 different typecodes
3036allocated to primitive procedures, each with its own calling convention.
3037Now there is only one, the gsubr. This may affect user code if you were
3038defining a procedure using scm_c_make_subr rather scm_c_make_gsubr. The
3039solution is to switch to use scm_c_make_gsubr. This solution works well
b3da54d1 3040both with the old 1.8 and with the current 1.9 branch.
4a457691 3041
cf8ec359
AW
3042Guile's old evaluator used to have special cases for applying "gsubrs",
3043primitive procedures with specified numbers of required, optional, and
3044rest arguments. Now, however, Guile represents gsubrs as normal VM
3045procedures, with appropriate bytecode to parse out the correct number of
3046arguments, including optional and rest arguments, and then with a
3047special bytecode to apply the gsubr.
3048
3049This allows primitive procedures to appear on the VM stack, allowing
3050them to be accurately counted in profiles. Also they now have more
3051debugging information attached to them -- their number of arguments, for
3052example. In addition, the VM can completely inline the application
3053mechanics, allowing for faster primitive calls.
3054
3055However there are some changes on the C level. There is no more
3056`scm_tc7_gsubr' or `scm_tcs_subrs' typecode for primitive procedures, as
3057they are just VM procedures. Likewise the macros `SCM_GSUBR_TYPE',
3058`SCM_GSUBR_MAKTYPE', `SCM_GSUBR_REQ', `SCM_GSUBR_OPT', and
3059`SCM_GSUBR_REST' are gone, as are `SCM_SUBR_META_INFO', `SCM_SUBR_PROPS'
3060`SCM_SET_SUBR_GENERIC_LOC', and `SCM_SUBR_ARITY_TO_TYPE'.
3061
3062Perhaps more significantly, `scm_c_make_subr',
3063`scm_c_make_subr_with_generic', `scm_c_define_subr', and
3064`scm_c_define_subr_with_generic'. They all operated on subr typecodes,
3065and there are no more subr typecodes. Use the scm_c_make_gsubr family
3066instead.
3067
3068Normal users of gsubrs should not be affected, though, as the
3069scm_c_make_gsubr family still is the correct way to create primitive
3070procedures.
3071
3072** Remove deprecated array C interfaces
3073
3074Removed the deprecated array functions `scm_i_arrayp',
3075`scm_i_array_ndim', `scm_i_array_mem', `scm_i_array_v',
3076`scm_i_array_base', `scm_i_array_dims', and the deprecated macros
3077`SCM_ARRAYP', `SCM_ARRAY_NDIM', `SCM_ARRAY_CONTP', `SCM_ARRAY_MEM',
3078`SCM_ARRAY_V', `SCM_ARRAY_BASE', and `SCM_ARRAY_DIMS'.
3079
3080** Remove unused snarf macros
3081
3082`SCM_DEFINE1', `SCM_PRIMITIVE_GENERIC_1', `SCM_PROC1, and `SCM_GPROC1'
3083are no more. Use SCM_DEFINE or SCM_PRIMITIVE_GENERIC instead.
3084
cf8ec359
AW
3085** New functions: `scm_call_n', `scm_c_run_hookn'
3086
3087`scm_call_n' applies to apply a function to an array of arguments.
3088`scm_c_run_hookn' runs a hook with an array of arguments.
3089
4a457691
AW
3090** Some SMOB types changed to have static typecodes
3091
3092Fluids, dynamic states, and hash tables used to be SMOB objects, but now
3093they have statically allocated tc7 typecodes.
3094
3095** Preparations for changing SMOB representation
3096
3097If things go right, we'll be changing the SMOB representation soon. To
3098that end, we did a lot of cleanups to calls to e.g. SCM_CELL_WORD_2(x) when
3099the code meant SCM_SMOB_DATA_2(x); user code will need similar changes
3100in the future. Code accessing SMOBs using SCM_CELL macros was never
3101correct, but until now things still worked. Users should be aware of
3102such changes.
fa1804e9 3103
cf8ec359
AW
3104** Changed invocation mechanics of applicable SMOBs
3105
3106Guile's old evaluator used to have special cases for applying SMOB
3107objects. Now, with the VM, when Guile sees a SMOB, it looks up a VM
3108trampoline procedure for it, and use the normal mechanics to apply the
3109trampoline. This simplifies procedure application in the normal,
3110non-SMOB case.
3111
3112The upshot is that the mechanics used to apply a SMOB are different from
31131.8. Descriptors no longer have `apply_0', `apply_1', `apply_2', and
3114`apply_3' functions, and the macros SCM_SMOB_APPLY_0 and friends are now
3115deprecated. Just use the scm_call_0 family of procedures.
3116
ef6b0e8d
AW
3117** Removed support shlibs for SRFIs 1, 4, 13, 14, and 60
3118
3119Though these SRFI support libraries did expose API, they encoded a
3120strange version string into their library names. That version was never
3121programmatically exported, so there was no way people could use the
3122libs.
3123
3124This was a fortunate oversight, as it allows us to remove the need for
3125extra, needless shared libraries --- the C support code for SRFIs 4, 13,
3126and 14 was already in core --- and allow us to incrementally return the
3127SRFI implementation to Scheme.
3128
96b73e84 3129** New C function: scm_module_public_interface
a4f1c77d 3130
96b73e84 3131This procedure corresponds to Scheme's `module-public-interface'.
24d6fae8 3132
4a457691
AW
3133** Undeprecate `scm_the_root_module ()'
3134
3135It's useful to be able to get the root module from C without doing a
3136full module lookup.
3137
e614d375
AW
3138** Inline vector allocation
3139
3140Instead of having vectors point out into the heap for their data, their
3141data is now allocated inline to the vector object itself. The same is
3142true for bytevectors, by default, though there is an indirection
3143available which should allow for making a bytevector from an existing
3144memory region.
3145
4a457691
AW
3146** New struct constructors that don't involve making lists
3147
3148`scm_c_make_struct' and `scm_c_make_structv' are new varargs and array
3149constructors, respectively, for structs. You might find them useful.
3150
3151** Stack refactor
3152
3153In Guile 1.8, there were debugging frames on the C stack. Now there is
3154no more need to explicitly mark the stack in this way, because Guile has
3155a VM stack that it knows how to walk, which simplifies the C API
3156considerably. See the ChangeLog for details; the relevant interface is
3157in libguile/stacks.h. The Scheme API has not been changed significantly.
3158
e614d375
AW
3159** Removal of Guile's primitive object system.
3160
3161There were a number of pieces in `objects.[ch]' that tried to be a
3162minimal object system, but were never documented, and were quickly
3163obseleted by GOOPS' merge into Guile proper. So `scm_make_class_object',
3164`scm_make_subclass_object', `scm_metaclass_standard', and like symbols
3165from objects.h are no more. In the very unlikely case in which these
3166were useful to you, we urge you to contact guile-devel.
3167
3168** No future.
3169
3170Actually the future is still in the state that it was, is, and ever
3171shall be, Amen, except that `futures.c' and `futures.h' are no longer a
3172part of it. These files were experimental, never compiled, and would be
3173better implemented in Scheme anyway. In the future, that is.
3174
4a457691
AW
3175** Deprecate trampolines
3176
3177There used to be C functions `scm_trampoline_0', `scm_trampoline_1', and
3178so on. The point was to do some precomputation on the type of the
3179procedure, then return a specialized "call" procedure. However this
3180optimization wasn't actually an optimization, so it is now deprecated.
3181Just use `scm_call_0', etc instead.
3182
18e90860
AW
3183** Deprecated `scm_badargsp'
3184
3185This function is unused in Guile, but was part of its API.
3186
5bb408cc
AW
3187** Better support for Lisp `nil'.
3188
3189The bit representation of `nil' has been tweaked so that it is now very
3190efficient to check e.g. if a value is equal to Scheme's end-of-list or
3191Lisp's nil. Additionally there are a heap of new, specific predicates
b390b008 3192like scm_is_null_or_nil.
5bb408cc 3193
139fa149
AW
3194** Better integration of Lisp `nil'.
3195
3196`scm_is_boolean', `scm_is_false', and `scm_is_null' all return true now
3197for Lisp's `nil'. This shouldn't affect any Scheme code at this point,
3198but when we start to integrate more with Emacs, it is possible that we
3199break code that assumes that, for example, `(not x)' implies that `x' is
3200`eq?' to `#f'. This is not a common assumption. Refactoring affected
3201code to rely on properties instead of identities will improve code
3202correctness. See "Nil" in the manual, for more details.
3203
e614d375
AW
3204** Support for static allocation of strings, symbols, and subrs.
3205
3206Calls to snarfing CPP macros like SCM_DEFINE macro will now allocate
3207much of their associated data as static variables, reducing Guile's
3208memory footprint.
3209
93617170
LC
3210** `scm_stat' has an additional argument, `exception_on_error'
3211** `scm_primitive_load_path' has an additional argument `exception_on_not_found'
24d6fae8 3212
f1ce9199
LC
3213** `scm_set_port_seek' and `scm_set_port_truncate' use the `scm_t_off' type
3214
3215Previously they would use the `off_t' type, which is fragile since its
3216definition depends on the application's value for `_FILE_OFFSET_BITS'.
3217
ba4c43dc
LC
3218** The `long_long' C type, deprecated in 1.8, has been removed
3219
86d88a22
AW
3220** Removed deprecated uniform array procedures: scm_make_uve,
3221 scm_array_prototype, scm_list_to_uniform_array,
3222 scm_dimensions_to_uniform_array, scm_make_ra, scm_shap2ra, scm_cvref,
3223 scm_ra_set_contp, scm_aind, scm_raprin1
3224
3225These functions have been deprecated since early 2005.
3226
a4f1c77d 3227* Changes to the distribution
6caac03c 3228
53befeb7
NJ
3229** Guile's license is now LGPLv3+
3230
3231In other words the GNU Lesser General Public License, version 3 or
3232later (at the discretion of each person that chooses to redistribute
3233part of Guile).
3234
51cb0cca
AW
3235** AM_SILENT_RULES
3236
3237Guile's build is visually quieter, due to the use of Automake 1.11's
3238AM_SILENT_RULES. Build as `make V=1' to see all of the output.
3239
56664c08
AW
3240** GOOPS documentation folded into Guile reference manual
3241
3242GOOPS, Guile's object system, used to be documented in separate manuals.
3243This content is now included in Guile's manual directly.
3244
96b73e84 3245** `guile-config' will be deprecated in favor of `pkg-config'
8a9faebc 3246
96b73e84 3247`guile-config' has been rewritten to get its information from
93617170 3248`pkg-config', so this should be a transparent change. Note however that
96b73e84
AW
3249guile.m4 has yet to be modified to call pkg-config instead of
3250guile-config.
2e77f720 3251
54dd0ca5
LC
3252** Guile now provides `guile-2.0.pc' instead of `guile-1.8.pc'
3253
3254Programs that use `pkg-config' to find Guile or one of its Autoconf
3255macros should now require `guile-2.0' instead of `guile-1.8'.
3256
96b73e84 3257** New installation directory: $(pkglibdir)/1.9/ccache
62560650 3258
96b73e84
AW
3259If $(libdir) is /usr/lib, for example, Guile will install its .go files
3260to /usr/lib/guile/1.9/ccache. These files are architecture-specific.
89bc270d 3261
b0abbaa7
AW
3262** Parallel installability fixes
3263
3264Guile now installs its header files to a effective-version-specific
3265directory, and includes the effective version (e.g. 2.0) in the library
3266name (e.g. libguile-2.0.so).
3267
3268This change should be transparent to users, who should detect Guile via
3269the guile.m4 macro, or the guile-2.0.pc pkg-config file. It will allow
3270parallel installs for multiple versions of Guile development
3271environments.
3272
b0217d17
AW
3273** Dynamically loadable extensions may be placed in a Guile-specific path
3274
3275Before, Guile only searched the system library paths for extensions
3276(e.g. /usr/lib), which meant that the names of Guile extensions had to
3277be globally unique. Installing them to a Guile-specific extensions
66ad445d 3278directory is cleaner. Use `pkg-config --variable=extensiondir
b0217d17
AW
3279guile-2.0' to get the location of the extensions directory.
3280
51cb0cca
AW
3281** User Scheme code may be placed in a version-specific path
3282
3283Before, there was only one way to install user Scheme code to a
3284version-specific Guile directory: install to Guile's own path,
3285e.g. /usr/share/guile/2.0. The site directory,
3286e.g. /usr/share/guile/site, was unversioned. This has been changed to
3287add a version-specific site directory, e.g. /usr/share/guile/site/2.0,
3288searched before the global site directory.
3289
7b96f3dd
LC
3290** New dependency: libgc
3291
3292See http://www.hpl.hp.com/personal/Hans_Boehm/gc/, for more information.
3293
3294** New dependency: GNU libunistring
32e29e24 3295
108e18b1 3296See http://www.gnu.org/software/libunistring/, for more information. Our
7b96f3dd 3297Unicode support uses routines from libunistring.
32e29e24 3298
dbd9532e
LC
3299** New dependency: libffi
3300
3301See http://sourceware.org/libffi/, for more information.
3302
a4f1c77d 3303
dc686d7b 3304\f
9957b1c7
LC
3305Changes in 1.8.8 (since 1.8.7)
3306
3307* Bugs fixed
3308
3309** Fix possible buffer overruns when parsing numbers
c15d8e6a 3310** Avoid clash with system setjmp/longjmp on IA64
1ff4da65 3311** Fix `wrong type arg' exceptions with IPv6 addresses
9957b1c7
LC
3312
3313\f
dc686d7b
NJ
3314Changes in 1.8.7 (since 1.8.6)
3315
922d417b
JG
3316* New modules (see the manual for details)
3317
3318** `(srfi srfi-98)', an interface to access environment variables
3319
dc686d7b
NJ
3320* Bugs fixed
3321
f5851b89 3322** Fix compilation with `--disable-deprecated'
dc686d7b 3323** Fix %fast-slot-ref/set!, to avoid possible segmentation fault
cbee5075 3324** Fix MinGW build problem caused by HAVE_STRUCT_TIMESPEC confusion
ab878b0f 3325** Fix build problem when scm_t_timespec is different from struct timespec
95a040cd 3326** Fix build when compiled with -Wundef -Werror
1bcf7993 3327** More build fixes for `alphaev56-dec-osf5.1b' (Tru64)
5374ec9c 3328** Build fixes for `powerpc-ibm-aix5.3.0.0' (AIX 5.3)
5c006c3f
LC
3329** With GCC, always compile with `-mieee' on `alpha*' and `sh*'
3330** Better diagnose broken `(strftime "%z" ...)' in `time.test' (bug #24130)
fc76c08d 3331** Fix parsing of SRFI-88/postfix keywords longer than 128 characters
40f89215 3332** Fix reading of complex numbers where both parts are inexact decimals
d41668fa 3333
ad5f5ada
NJ
3334** Allow @ macro to work with (ice-9 syncase)
3335
3336Previously, use of the @ macro in a module whose code is being
3337transformed by (ice-9 syncase) would cause an "Invalid syntax" error.
3338Now it works as you would expect (giving the value of the specified
3339module binding).
3340
05588a1a
LC
3341** Have `scm_take_locale_symbol ()' return an interned symbol (bug #25865)
3342
d41668fa 3343\f
8c40b75d
LC
3344Changes in 1.8.6 (since 1.8.5)
3345
071bb6a8
LC
3346* New features (see the manual for details)
3347
3348** New convenience function `scm_c_symbol_length ()'
3349
091baf9e
NJ
3350** Single stepping through code from Emacs
3351
3352When you use GDS to evaluate Scheme code from Emacs, you can now use
3353`C-u' to indicate that you want to single step through that code. See
3354`Evaluating Scheme Code' in the manual for more details.
3355
9e4db0ef
LC
3356** New "guile(1)" man page!
3357
242ebeaf
LC
3358* Changes to the distribution
3359
3360** Automake's `AM_MAINTAINER_MODE' is no longer used
3361
3362Thus, the `--enable-maintainer-mode' configure option is no longer
3363available: Guile is now always configured in "maintainer mode".
3364
e0063477
LC
3365** `ChangeLog' files are no longer updated
3366
3367Instead, changes are detailed in the version control system's logs. See
3368the top-level `ChangeLog' files for details.
3369
3370
8c40b75d
LC
3371* Bugs fixed
3372
fd2b17b9 3373** `symbol->string' now returns a read-only string, as per R5RS
c6333102 3374** Fix incorrect handling of the FLAGS argument of `fold-matches'
589d9eb8 3375** `guile-config link' now prints `-L$libdir' before `-lguile'
4a1db3a9 3376** Fix memory corruption involving GOOPS' `class-redefinition'
191e7165 3377** Fix possible deadlock in `mutex-lock'
95c6523b 3378** Fix build issue on Tru64 and ia64-hp-hpux11.23 (`SCM_UNPACK' macro)
4696a666 3379** Fix build issue on mips, mipsel, powerpc and ia64 (stack direction)
450be18d 3380** Fix build issue on hppa2.0w-hp-hpux11.11 (`dirent64' and `readdir64_r')
88cefbc7 3381** Fix build issue on i386-unknown-freebsd7.0 ("break strict-aliasing rules")
76dae881 3382** Fix misleading output from `(help rationalize)'
5ea8e76e 3383** Fix build failure on Debian hppa architecture (bad stack growth detection)
1dd79792 3384** Fix `gcd' when called with a single, negative argument.
d8b6e191 3385** Fix `Stack overflow' errors seen when building on some platforms
ccf1ca4a
LC
3386** Fix bug when `scm_with_guile ()' was called several times from the
3387 same thread
76350432
LC
3388** The handler of SRFI-34 `with-exception-handler' is now invoked in the
3389 dynamic environment of the call to `raise'
cb823e63 3390** Fix potential deadlock in `make-struct'
691343ea 3391** Fix compilation problem with libltdl from Libtool 2.2.x
3ae3166b 3392** Fix sloppy bound checking in `string-{ref,set!}' with the empty string
6eadcdab 3393
8c40b75d 3394\f
5305df84
LC
3395Changes in 1.8.5 (since 1.8.4)
3396
4b824aae
LC
3397* Infrastructure changes
3398
3399** Guile repository switched from CVS to Git
3400
3401The new repository can be accessed using
3402"git-clone git://git.sv.gnu.org/guile.git", or can be browsed on-line at
3403http://git.sv.gnu.org/gitweb/?p=guile.git . See `README' for details.
3404
92826dd0
LC
3405** Add support for `pkg-config'
3406
3407See "Autoconf Support" in the manual for details.
3408
189681f5
LC
3409* New modules (see the manual for details)
3410
3411** `(srfi srfi-88)'
3412
ef4cbc08
LC
3413* New features (see the manual for details)
3414
3415** New `postfix' read option, for SRFI-88 keyword syntax
f5c2af4b 3416** Some I/O primitives have been inlined, which improves I/O performance
b20ef3a6 3417** New object-based traps infrastructure
ef4cbc08 3418
b20ef3a6
NJ
3419This is a GOOPS-based infrastructure that builds on Guile's low-level
3420evaluator trap calls and facilitates the development of debugging
3421features like single-stepping, breakpoints, tracing and profiling.
3422See the `Traps' node of the manual for details.
3423
3424** New support for working on Guile code from within Emacs
3425
3426Guile now incorporates the `GDS' library (previously distributed
3427separately) for working on Guile code from within Emacs. See the
3428`Using Guile In Emacs' node of the manual for details.
3429
5305df84
LC
3430* Bugs fixed
3431
e27d2495
LC
3432** `scm_add_slot ()' no longer segfaults (fixes bug #22369)
3433** Fixed `(ice-9 match)' for patterns like `((_ ...) ...)'
3434
3435Previously, expressions like `(match '((foo) (bar)) (((_ ...) ...) #t))'
3436would trigger an unbound variable error for `match:andmap'.
3437
62c5382b
LC
3438** `(oop goops describe)' now properly provides the `describe' feature
3439** Fixed `args-fold' from `(srfi srfi-37)'
3440
3441Previously, parsing short option names of argument-less options would
3442lead to a stack overflow.
3443
816e3edf 3444** `(srfi srfi-35)' is now visible through `cond-expand'
61b6542a 3445** Fixed type-checking for the second argument of `eval'
0fb11ae4 3446** Fixed type-checking for SRFI-1 `partition'
f1c212b1
LC
3447** Fixed `struct-ref' and `struct-set!' on "light structs"
3448** Honor struct field access rights in GOOPS
be10cba8 3449** Changed the storage strategy of source properties, which fixes a deadlock
979eade6 3450** Allow compilation of Guile-using programs in C99 mode with GCC 4.3 and later
bfb64eb4 3451** Fixed build issue for GNU/Linux on IA64
fa80e280 3452** Fixed build issues on NetBSD 1.6
a2c25234 3453** Fixed build issue on Solaris 2.10 x86_64
3f520967 3454** Fixed build issue with DEC/Compaq/HP's compiler
c2ad98ad
LC
3455** Fixed `scm_from_complex_double' build issue on FreeBSD
3456** Fixed `alloca' build issue on FreeBSD 6
a7286720 3457** Removed use of non-portable makefile constructs
535b3592 3458** Fixed shadowing of libc's <random.h> on Tru64, which broke compilation
eedcb08a 3459** Make sure all tests honor `$TMPDIR'
5305df84
LC
3460
3461\f
d41668fa
LC
3462Changes in 1.8.4 (since 1.8.3)
3463
3464* Bugs fixed
3465
3466** CR (ASCII 0x0d) is (again) recognized as a token delimiter by the reader
6e14de7d
NJ
3467** Fixed a segmentation fault which occurred when displaying the
3468backtrace of a stack with a promise object (made by `delay') in it.
7d1fc872 3469** Make `accept' leave guile mode while blocking
693758d5 3470** `scm_c_read ()' and `scm_c_write ()' now type-check their port argument
378cc645 3471** Fixed a build problem on AIX (use of func_data identifier)
15bd90ea
NJ
3472** Fixed a segmentation fault which occurred when hashx-ref or hashx-set! was
3473called with an associator proc that returns neither a pair nor #f.
3ac8359a 3474** Secondary threads now always return a valid module for (current-module).
d05bcb2e
NJ
3475** Avoid MacOS build problems caused by incorrect combination of "64"
3476system and library calls.
9a6fac59 3477** `guile-snarf' now honors `$TMPDIR'
25a640ca 3478** `guile-config compile' now reports CPPFLAGS used at compile-time
7f74cf9a 3479** Fixed build with Sun Studio (Solaris 9)
4a19ed04
NJ
3480** Fixed wrong-type-arg errors when creating zero length SRFI-4
3481uniform vectors on AIX.
86a597f8 3482** Fixed a deadlock that occurs upon GC with multiple threads.
4b26c03e 3483** Fixed compile problem with GCC on Solaris and AIX (use of _Complex_I)
d4a00708 3484** Fixed autotool-derived build problems on AIX 6.1.
9a6fac59 3485** Fixed NetBSD/alpha support
b226295a 3486** Fixed MacOS build problem caused by use of rl_get_keymap(_name)
7d1fc872
LC
3487
3488* New modules (see the manual for details)
3489
3490** `(srfi srfi-69)'
d41668fa 3491
b226295a
NJ
3492* Documentation fixes and improvements
3493
3494** Removed premature breakpoint documentation
3495
3496The features described are not available in the series of 1.8.x
3497releases, so the documentation was misleading and has been removed.
3498
3499** More about Guile's default *random-state* variable
3500
3501** GOOPS: more about how to use `next-method'
3502
d3cf93bc
NJ
3503* Changes to the distribution
3504
3505** Corrected a few files that referred incorrectly to the old GPL + special exception licence
3506
3507In fact Guile since 1.8.0 has been licensed with the GNU Lesser
3508General Public License, and the few incorrect files have now been
3509fixed to agree with the rest of the Guile distribution.
3510
5e42b8e7
NJ
3511** Removed unnecessary extra copies of COPYING*
3512
3513The distribution now contains a single COPYING.LESSER at its top level.
3514
a4f1c77d 3515\f
d4c38221
LC
3516Changes in 1.8.3 (since 1.8.2)
3517
3518* New modules (see the manual for details)
3519
f50ca8da 3520** `(srfi srfi-35)'
d4c38221
LC
3521** `(srfi srfi-37)'
3522
e08f3f7a
LC
3523* Bugs fixed
3524
dc061a74 3525** The `(ice-9 slib)' module now works as expected
e08f3f7a 3526** Expressions like "(set! 'x #t)" no longer yield a crash
d7c0c26d 3527** Warnings about duplicate bindings now go to stderr
1ac5fb45 3528** A memory leak in `make-socket-address' was fixed
f43f3620 3529** Alignment issues (e.g., on SPARC) in network routines were fixed
29776e85 3530** A threading issue that showed up at least on NetBSD was fixed
66302618 3531** Build problems on Solaris and IRIX fixed
e08f3f7a 3532
1fdd8ffa
LC
3533* Implementation improvements
3534
7ff6c169 3535** The reader is now faster, which reduces startup time
1fdd8ffa
LC
3536** Procedures returned by `record-accessor' and `record-modifier' are faster
3537
d4c38221 3538\f
45c0ff10
KR
3539Changes in 1.8.2 (since 1.8.1):
3540
3541* New procedures (see the manual for details)
3542
3543** set-program-arguments
b3aa4626 3544** make-vtable
45c0ff10 3545
9320e933
LC
3546* Incompatible changes
3547
3548** The body of a top-level `define' no longer sees the binding being created
3549
3550In a top-level `define', the binding being created is no longer visible
3551from the `define' body. This breaks code like
3552"(define foo (begin (set! foo 1) (+ foo 1)))", where `foo' is now
3553unbound in the body. However, such code was not R5RS-compliant anyway,
3554per Section 5.2.1.
3555
45c0ff10
KR
3556* Bugs fixed
3557
3558** Fractions were not `equal?' if stored in unreduced form.
3559(A subtle problem, since printing a value reduced it, making it work.)
3560** srfi-60 `copy-bit' failed on 64-bit systems
3561** "guile --use-srfi" option at the REPL can replace core functions
3562(Programs run with that option were ok, but in the interactive REPL
3563the core bindings got priority, preventing SRFI replacements or
3564extensions.)
3565** `regexp-exec' doesn't abort() on #\nul in the input or bad flags arg
df449722 3566** `kill' on mingw throws an error for a PID other than oneself
45c0ff10
KR
3567** Procedure names are attached to procedure-with-setters
3568** Array read syntax works with negative lower bound
3569** `array-in-bounds?' fix if an array has different lower bounds on each index
3570** `*' returns exact 0 for "(* inexact 0)"
3571This follows what it always did for "(* 0 inexact)".
c122500a 3572** SRFI-19: Value returned by `(current-time time-process)' was incorrect
0867f7ba 3573** SRFI-19: `date->julian-day' did not account for timezone offset
a1ef7406 3574** `ttyname' no longer crashes when passed a non-tty argument
27782696 3575** `inet-ntop' no longer crashes on SPARC when passed an `AF_INET' address
0867f7ba 3576** Small memory leaks have been fixed in `make-fluid' and `add-history'
b1f57ea4 3577** GOOPS: Fixed a bug in `method-more-specific?'
45c0ff10 3578** Build problems on Solaris fixed
df449722
LC
3579** Build problems on HP-UX IA64 fixed
3580** Build problems on MinGW fixed
45c0ff10
KR
3581
3582\f
a4f1c77d
KR
3583Changes in 1.8.1 (since 1.8.0):
3584
8ab3d8a0 3585* LFS functions are now used to access 64-bit files on 32-bit systems.
a4f1c77d 3586
8ab3d8a0 3587* New procedures (see the manual for details)
4f416616 3588
8ab3d8a0
KR
3589** primitive-_exit - [Scheme] the-root-module
3590** scm_primitive__exit - [C]
3591** make-completion-function - [Scheme] (ice-9 readline)
3592** scm_c_locale_stringn_to_number - [C]
3593** scm_srfi1_append_reverse [C]
3594** scm_srfi1_append_reverse_x [C]
3595** scm_log - [C]
3596** scm_log10 - [C]
3597** scm_exp - [C]
3598** scm_sqrt - [C]
3599
3600* Bugs fixed
3601
3602** Build problems have been fixed on MacOS, SunOS, and QNX.
af4f8612 3603
b3aa4626
KR
3604** `strftime' fix sign of %z timezone offset.
3605
534cd148 3606** A one-dimensional array can now be 'equal?' to a vector.
8ab3d8a0 3607
ad97642e 3608** Structures, records, and SRFI-9 records can now be compared with `equal?'.
af4f8612 3609
8ab3d8a0
KR
3610** SRFI-14 standard char sets are recomputed upon a successful `setlocale'.
3611
3612** `record-accessor' and `record-modifier' now have strict type checks.
3613
3614Record accessor and modifier procedures now throw an error if the
3615record type of the record they're given is not the type expected.
3616(Previously accessors returned #f and modifiers silently did nothing).
3617
3618** It is now OK to use both autoload and use-modules on a given module.
3619
3620** `apply' checks the number of arguments more carefully on "0 or 1" funcs.
3621
3622Previously there was no checking on primatives like make-vector that
3623accept "one or two" arguments. Now there is.
3624
3625** The srfi-1 assoc function now calls its equality predicate properly.
3626
3627Previously srfi-1 assoc would call the equality predicate with the key
3628last. According to the SRFI, the key should be first.
3629
3630** A bug in n-par-for-each and n-for-each-par-map has been fixed.
3631
3632** The array-set! procedure no longer segfaults when given a bit vector.
3633
3634** Bugs in make-shared-array have been fixed.
3635
3636** string<? and friends now follow char<? etc order on 8-bit chars.
3637
3638** The format procedure now handles inf and nan values for ~f correctly.
3639
3640** exact->inexact should no longer overflow when given certain large fractions.
3641
3642** srfi-9 accessor and modifier procedures now have strict record type checks.
a4f1c77d 3643
8ab3d8a0 3644This matches the srfi-9 specification.
a4f1c77d 3645
8ab3d8a0 3646** (ice-9 ftw) procedures won't ignore different files with same inode number.
a4f1c77d 3647
8ab3d8a0
KR
3648Previously the (ice-9 ftw) procedures would ignore any file that had
3649the same inode number as a file they had already seen, even if that
3650file was on a different device.
4f416616
KR
3651
3652\f
8ab3d8a0 3653Changes in 1.8.0 (changes since the 1.6.x series):
ee0c7345 3654
4e250ded
MV
3655* Changes to the distribution
3656
eff2965e
MV
3657** Guile is now licensed with the GNU Lesser General Public License.
3658
77e51fd6
MV
3659** The manual is now licensed with the GNU Free Documentation License.
3660
e2d0a649
RB
3661** Guile now requires GNU MP (http://swox.com/gmp).
3662
3663Guile now uses the GNU MP library for arbitrary precision arithmetic.
e2d0a649 3664
5ebbe4ef
RB
3665** Guile now has separate private and public configuration headers.
3666
b0d10ba6
MV
3667That is, things like HAVE_STRING_H no longer leak from Guile's
3668headers.
5ebbe4ef
RB
3669
3670** Guile now provides and uses an "effective" version number.
b2cbe8d8
RB
3671
3672Guile now provides scm_effective_version and effective-version
3673functions which return the "effective" version number. This is just
3674the normal full version string without the final micro-version number,
a4f1c77d 3675so the current effective-version is "1.8". The effective version
b2cbe8d8
RB
3676should remain unchanged during a stable series, and should be used for
3677items like the versioned share directory name
a4f1c77d 3678i.e. /usr/share/guile/1.8.
b2cbe8d8
RB
3679
3680Providing an unchanging version number during a stable release for
3681things like the versioned share directory can be particularly
3682important for Guile "add-on" packages, since it provides a directory
3683that they can install to that won't be changed out from under them
3684with each micro release during a stable series.
3685
8d54e73a 3686** Thread implementation has changed.
f0b4d944
MV
3687
3688When you configure "--with-threads=null", you will get the usual
3689threading API (call-with-new-thread, make-mutex, etc), but you can't
429d88d4
MV
3690actually create new threads. Also, "--with-threads=no" is now
3691equivalent to "--with-threads=null". This means that the thread API
3692is always present, although you might not be able to create new
3693threads.
f0b4d944 3694
8d54e73a
MV
3695When you configure "--with-threads=pthreads" or "--with-threads=yes",
3696you will get threads that are implemented with the portable POSIX
3697threads. These threads can run concurrently (unlike the previous
3698"coop" thread implementation), but need to cooperate for things like
a558cc63 3699the GC.
f0b4d944 3700
8d54e73a
MV
3701The default is "pthreads", unless your platform doesn't have pthreads,
3702in which case "null" threads are used.
2902a459 3703
a6d75e53
MV
3704See the manual for details, nodes "Initialization", "Multi-Threading",
3705"Blocking", and others.
a558cc63 3706
f74bdbd3
MV
3707** There is the new notion of 'discouraged' features.
3708
3709This is a milder form of deprecation.
3710
3711Things that are discouraged should not be used in new code, but it is
3712OK to leave them in old code for now. When a discouraged feature is
3713used, no warning message is printed like there is for 'deprecated'
3714features. Also, things that are merely discouraged are nevertheless
3715implemented efficiently, while deprecated features can be very slow.
3716
3717You can omit discouraged features from libguile by configuring it with
3718the '--disable-discouraged' option.
3719
3720** Deprecation warnings can be controlled at run-time.
3721
3722(debug-enable 'warn-deprecated) switches them on and (debug-disable
3723'warn-deprecated) switches them off.
3724
0f24e75b 3725** Support for SRFI 61, extended cond syntax for multiple values has
a81d0de1
MV
3726 been added.
3727
3728This SRFI is always available.
3729
f7fb2f39 3730** Support for require-extension, SRFI-55, has been added.
9a5fc8c2 3731
f7fb2f39
RB
3732The SRFI-55 special form `require-extension' has been added. It is
3733available at startup, and provides a portable way to load Scheme
3734extensions. SRFI-55 only requires support for one type of extension,
3735"srfi"; so a set of SRFIs may be loaded via (require-extension (srfi 1
373613 14)).
3737
3738** New module (srfi srfi-26) provides support for `cut' and `cute'.
3739
3740The (srfi srfi-26) module is an implementation of SRFI-26 which
3741provides the `cut' and `cute' syntax. These may be used to specialize
3742parameters without currying.
9a5fc8c2 3743
f5d54eb7
RB
3744** New module (srfi srfi-31)
3745
3746This is an implementation of SRFI-31 which provides a special form
3747`rec' for recursive evaluation.
3748
7b1574ed
MV
3749** The modules (srfi srfi-13), (srfi srfi-14) and (srfi srfi-4) have
3750 been merged with the core, making their functionality always
3751 available.
c5080b51 3752
ce7c0293
MV
3753The modules are still available, tho, and you could use them together
3754with a renaming import, for example.
c5080b51 3755
6191ccec 3756** Guile no longer includes its own version of libltdl.
4e250ded 3757
6191ccec 3758The official version is good enough now.
4e250ded 3759
ae7ded56
MV
3760** The --enable-htmldoc option has been removed from 'configure'.
3761
3762Support for translating the documentation into HTML is now always
3763provided. Use 'make html'.
3764
0f24e75b
MV
3765** New module (ice-9 serialize):
3766
3767(serialize FORM1 ...) and (parallelize FORM1 ...) are useful when you
3768don't trust the thread safety of most of your program, but where you
3769have some section(s) of code which you consider can run in parallel to
3770other sections. See ice-9/serialize.scm for more information.
3771
c34e5780
MV
3772** The configure option '--disable-arrays' has been removed.
3773
3774Support for arrays and uniform numeric arrays is now always included
3775in Guile.
3776
328dc9a3 3777* Changes to the stand-alone interpreter
f12ef3fd 3778
3ece39d6
MV
3779** New command line option `-L'.
3780
3781This option adds a directory to the front of the load path.
3782
f12ef3fd
MV
3783** New command line option `--no-debug'.
3784
3785Specifying `--no-debug' on the command line will keep the debugging
3786evaluator turned off, even for interactive sessions.
3787
3788** User-init file ~/.guile is now loaded with the debugging evaluator.
3789
3790Previously, the normal evaluator would have been used. Using the
3791debugging evaluator gives better error messages.
3792
aff7e166
MV
3793** The '-e' option now 'read's its argument.
3794
3795This is to allow the new '(@ MODULE-NAME VARIABLE-NAME)' construct to
3796be used with '-e'. For example, you can now write a script like
3797
3798 #! /bin/sh
3799 exec guile -e '(@ (demo) main)' -s "$0" "$@"
3800 !#
3801
3802 (define-module (demo)
3803 :export (main))
3804
3805 (define (main args)
3806 (format #t "Demo: ~a~%" args))
3807
3808
f12ef3fd
MV
3809* Changes to Scheme functions and syntax
3810
930888e8
MV
3811** Guardians have changed back to their original semantics
3812
3813Guardians now behave like described in the paper by Dybvig et al. In
3814particular, they no longer make guarantees about the order in which
3815they return objects, and they can no longer be greedy.
3816
3817They no longer drop cyclic data structures.
3818
3819The C function scm_make_guardian has been changed incompatibly and no
3820longer takes the 'greedy_p' argument.
3821
87bdbdbc
MV
3822** New function hashx-remove!
3823
3824This function completes the set of 'hashx' functions.
3825
a558cc63
MV
3826** The concept of dynamic roots has been factored into continuation
3827 barriers and dynamic states.
3828
3829Each thread has a current dynamic state that carries the values of the
3830fluids. You can create and copy dynamic states and use them as the
3831second argument for 'eval'. See "Fluids and Dynamic States" in the
3832manual.
3833
3834To restrict the influence that captured continuations can have on the
3835control flow, you can errect continuation barriers. See "Continuation
3836Barriers" in the manual.
3837
3838The function call-with-dynamic-root now essentially temporarily
3839installs a new dynamic state and errects a continuation barrier.
3840
a2b6a0e7
MV
3841** The default load path no longer includes "." at the end.
3842
3843Automatically loading modules from the current directory should not
3844happen by default. If you want to allow it in a more controlled
3845manner, set the environment variable GUILE_LOAD_PATH or the Scheme
3846variable %load-path.
3847
7b1574ed
MV
3848** The uniform vector and array support has been overhauled.
3849
3850It now complies with SRFI-4 and the weird prototype based uniform
3851array creation has been deprecated. See the manual for more details.
3852
d233b123
MV
3853Some non-compatible changes have been made:
3854 - characters can no longer be stored into byte arrays.
0f24e75b
MV
3855 - strings and bit vectors are no longer considered to be uniform numeric
3856 vectors.
3167d5e4
MV
3857 - array-rank throws an error for non-arrays instead of returning zero.
3858 - array-ref does no longer accept non-arrays when no indices are given.
d233b123
MV
3859
3860There is the new notion of 'generalized vectors' and corresponding
3861procedures like 'generalized-vector-ref'. Generalized vectors include
c34e5780 3862strings, bitvectors, ordinary vectors, and uniform numeric vectors.
d233b123 3863
a558cc63
MV
3864Arrays use generalized vectors as their storage, so that you still
3865have arrays of characters, bits, etc. However, uniform-array-read!
3866and uniform-array-write can no longer read/write strings and
3867bitvectors.
bb9f50ae 3868
ce7c0293
MV
3869** There is now support for copy-on-write substrings, mutation-sharing
3870 substrings and read-only strings.
3ff9283d 3871
ce7c0293
MV
3872Three new procedures are related to this: substring/shared,
3873substring/copy, and substring/read-only. See the manual for more
3874information.
3875
6a1d27ea
MV
3876** Backtraces will now highlight the value that caused the error.
3877
3878By default, these values are enclosed in "{...}", such as in this
3879example:
3880
3881 guile> (car 'a)
3882
3883 Backtrace:
3884 In current input:
3885 1: 0* [car {a}]
3886
3887 <unnamed port>:1:1: In procedure car in expression (car (quote a)):
3888 <unnamed port>:1:1: Wrong type (expecting pair): a
3889 ABORT: (wrong-type-arg)
3890
3891The prefix and suffix used for highlighting can be set via the two new
3892printer options 'highlight-prefix' and 'highlight-suffix'. For
3893example, putting this into ~/.guile will output the bad value in bold
3894on an ANSI terminal:
3895
3896 (print-set! highlight-prefix "\x1b[1m")
3897 (print-set! highlight-suffix "\x1b[22m")
3898
3899
8dbafacd
MV
3900** 'gettext' support for internationalization has been added.
3901
3902See the manual for details.
3903
aff7e166
MV
3904** New syntax '@' and '@@':
3905
3906You can now directly refer to variables exported from a module by
3907writing
3908
3909 (@ MODULE-NAME VARIABLE-NAME)
3910
3911For example (@ (ice-9 pretty-print) pretty-print) will directly access
3912the pretty-print variable exported from the (ice-9 pretty-print)
3913module. You don't need to 'use' that module first. You can also use
b0d10ba6 3914'@' as a target of 'set!', as in (set! (@ mod var) val).
aff7e166
MV
3915
3916The related syntax (@@ MODULE-NAME VARIABLE-NAME) works just like '@',
3917but it can also access variables that have not been exported. It is
3918intended only for kluges and temporary fixes and for debugging, not
3919for ordinary code.
3920
aef0bdb4
MV
3921** Keyword syntax has been made more disciplined.
3922
3923Previously, the name of a keyword was read as a 'token' but printed as
3924a symbol. Now, it is read as a general Scheme datum which must be a
3925symbol.
3926
3927Previously:
3928
3929 guile> #:12
3930 #:#{12}#
3931 guile> #:#{12}#
3932 #:#{\#{12}\#}#
3933 guile> #:(a b c)
3934 #:#{}#
3935 ERROR: In expression (a b c):
3936 Unbound variable: a
3937 guile> #: foo
3938 #:#{}#
3939 ERROR: Unbound variable: foo
3940
3941Now:
3942
3943 guile> #:12
3944 ERROR: Wrong type (expecting symbol): 12
3945 guile> #:#{12}#
3946 #:#{12}#
3947 guile> #:(a b c)
3948 ERROR: Wrong type (expecting symbol): (a b c)
3949 guile> #: foo
3950 #:foo
3951
227eafdb
MV
3952** The printing of symbols that might look like keywords can be
3953 controlled.
3954
3955The new printer option 'quote-keywordish-symbols' controls how symbols
3956are printed that have a colon as their first or last character. The
3957default now is to only quote a symbol with #{...}# when the read
3958option 'keywords' is not '#f'. Thus:
3959
3960 guile> (define foo (string->symbol ":foo"))
3961 guile> (read-set! keywords #f)
3962 guile> foo
3963 :foo
3964 guile> (read-set! keywords 'prefix)
3965 guile> foo
3966 #{:foo}#
3967 guile> (print-set! quote-keywordish-symbols #f)
3968 guile> foo
3969 :foo
3970
1363e3e7
KR
3971** 'while' now provides 'break' and 'continue'
3972
3973break and continue were previously bound in a while loop, but not
3974documented, and continue didn't quite work properly. The undocumented
3975parameter to break which gave a return value for the while has been
3976dropped.
3977
570b5b14
MV
3978** 'call-with-current-continuation' is now also available under the name
3979 'call/cc'.
3980
b0d10ba6 3981** The module system now checks for duplicate bindings.
7b07e5ef 3982
fe6ee052
MD
3983The module system now can check for name conflicts among imported
3984bindings.
f595ccfe 3985
b0d10ba6 3986The behavior can be controlled by specifying one or more 'duplicates'
fe6ee052
MD
3987handlers. For example, to make Guile return an error for every name
3988collision, write:
7b07e5ef
MD
3989
3990(define-module (foo)
3991 :use-module (bar)
3992 :use-module (baz)
fe6ee052 3993 :duplicates check)
f595ccfe 3994
fe6ee052
MD
3995The new default behavior of the module system when a name collision
3996has been detected is to
3997
3998 1. Give priority to bindings marked as a replacement.
6496a663 3999 2. Issue a warning (different warning if overriding core binding).
fe6ee052
MD
4000 3. Give priority to the last encountered binding (this corresponds to
4001 the old behavior).
4002
4003If you want the old behavior back without replacements or warnings you
4004can add the line:
f595ccfe 4005
70a9dc9c 4006 (default-duplicate-binding-handler 'last)
7b07e5ef 4007
fe6ee052 4008to your .guile init file.
7b07e5ef 4009
f595ccfe
MD
4010** New define-module option: :replace
4011
4012:replace works as :export, but, in addition, marks the binding as a
4013replacement.
4014
4015A typical example is `format' in (ice-9 format) which is a replacement
4016for the core binding `format'.
7b07e5ef 4017
70da0033
MD
4018** Adding prefixes to imported bindings in the module system
4019
4020There is now a new :use-module option :prefix. It can be used to add
4021a prefix to all imported bindings.
4022
4023 (define-module (foo)
4024 :use-module ((bar) :prefix bar:))
4025
4026will import all bindings exported from bar, but rename them by adding
4027the prefix `bar:'.
4028
b0d10ba6
MV
4029** Conflicting generic functions can be automatically merged.
4030
4031When two imported bindings conflict and they are both generic
4032functions, the two functions can now be merged automatically. This is
4033activated with the 'duplicates' handler 'merge-generics'.
4034
b2cbe8d8
RB
4035** New function: effective-version
4036
4037Returns the "effective" version number. This is just the normal full
4038version string without the final micro-version number. See "Changes
4039to the distribution" above.
4040
382053e9 4041** New threading functions: parallel, letpar, par-map, and friends
dbe30084 4042
382053e9
KR
4043These are convenient ways to run calculations in parallel in new
4044threads. See "Parallel forms" in the manual for details.
359aab24 4045
e2d820a1
MV
4046** New function 'try-mutex'.
4047
4048This function will attempt to lock a mutex but will return immediately
0f24e75b 4049instead of blocking and indicate failure.
e2d820a1
MV
4050
4051** Waiting on a condition variable can have a timeout.
4052
0f24e75b 4053The function 'wait-condition-variable' now takes a third, optional
e2d820a1
MV
4054argument that specifies the point in time where the waiting should be
4055aborted.
4056
4057** New function 'broadcast-condition-variable'.
4058
5e405a60
MV
4059** New functions 'all-threads' and 'current-thread'.
4060
4061** Signals and system asyncs work better with threads.
4062
4063The function 'sigaction' now takes a fourth, optional, argument that
4064specifies the thread that the handler should run in. When the
4065argument is omitted, the handler will run in the thread that called
4066'sigaction'.
4067
4068Likewise, 'system-async-mark' takes a second, optional, argument that
4069specifies the thread that the async should run in. When it is
4070omitted, the async will run in the thread that called
4071'system-async-mark'.
4072
4073C code can use the new functions scm_sigaction_for_thread and
4074scm_system_async_mark_for_thread to pass the new thread argument.
4075
a558cc63
MV
4076When a thread blocks on a mutex, a condition variable or is waiting
4077for IO to be possible, it will still execute system asyncs. This can
4078be used to interrupt such a thread by making it execute a 'throw', for
4079example.
4080
5e405a60
MV
4081** The function 'system-async' is deprecated.
4082
4083You can now pass any zero-argument procedure to 'system-async-mark'.
4084The function 'system-async' will just return its argument unchanged
4085now.
4086
acfa1f52
MV
4087** New functions 'call-with-blocked-asyncs' and
4088 'call-with-unblocked-asyncs'
4089
4090The expression (call-with-blocked-asyncs PROC) will call PROC and will
4091block execution of system asyncs for the current thread by one level
4092while PROC runs. Likewise, call-with-unblocked-asyncs will call a
4093procedure and will unblock the execution of system asyncs by one
4094level for the current thread.
4095
4096Only system asyncs are affected by these functions.
4097
4098** The functions 'mask-signals' and 'unmask-signals' are deprecated.
4099
4100Use 'call-with-blocked-asyncs' or 'call-with-unblocked-asyncs'
4101instead. Those functions are easier to use correctly and can be
4102nested.
4103
7b232758
MV
4104** New function 'unsetenv'.
4105
f30482f3
MV
4106** New macro 'define-syntax-public'.
4107
4108It works like 'define-syntax' and also exports the defined macro (but
4109only on top-level).
4110
1ee34062
MV
4111** There is support for Infinity and NaNs.
4112
4113Following PLT Scheme, Guile can now work with infinite numbers, and
4114'not-a-numbers'.
4115
4116There is new syntax for numbers: "+inf.0" (infinity), "-inf.0"
4117(negative infinity), "+nan.0" (not-a-number), and "-nan.0" (same as
4118"+nan.0"). These numbers are inexact and have no exact counterpart.
4119
4120Dividing by an inexact zero returns +inf.0 or -inf.0, depending on the
4121sign of the dividend. The infinities are integers, and they answer #t
4122for both 'even?' and 'odd?'. The +nan.0 value is not an integer and is
4123not '=' to itself, but '+nan.0' is 'eqv?' to itself.
4124
4125For example
4126
4127 (/ 1 0.0)
4128 => +inf.0
4129
4130 (/ 0 0.0)
4131 => +nan.0
4132
4133 (/ 0)
4134 ERROR: Numerical overflow
4135
7b232758
MV
4136Two new predicates 'inf?' and 'nan?' can be used to test for the
4137special values.
4138
ba1b077b
MV
4139** Inexact zero can have a sign.
4140
4141Guile can now distinguish between plus and minus inexact zero, if your
4142platform supports this, too. The two zeros are equal according to
4143'=', but not according to 'eqv?'. For example
4144
4145 (- 0.0)
4146 => -0.0
4147
4148 (= 0.0 (- 0.0))
4149 => #t
4150
4151 (eqv? 0.0 (- 0.0))
4152 => #f
4153
bdf26b60
MV
4154** Guile now has exact rationals.
4155
4156Guile can now represent fractions such as 1/3 exactly. Computing with
4157them is also done exactly, of course:
4158
4159 (* 1/3 3/2)
4160 => 1/2
4161
4162** 'floor', 'ceiling', 'round' and 'truncate' now return exact numbers
4163 for exact arguments.
4164
4165For example: (floor 2) now returns an exact 2 where in the past it
4166returned an inexact 2.0. Likewise, (floor 5/4) returns an exact 1.
4167
4168** inexact->exact no longer returns only integers.
4169
4170Without exact rationals, the closest exact number was always an
4171integer, but now inexact->exact returns the fraction that is exactly
4172equal to a floating point number. For example:
4173
4174 (inexact->exact 1.234)
4175 => 694680242521899/562949953421312
4176
e299cee2 4177When you want the old behavior, use 'round' explicitly:
bdf26b60
MV
4178
4179 (inexact->exact (round 1.234))
4180 => 1
4181
4182** New function 'rationalize'.
4183
4184This function finds a simple fraction that is close to a given real
4185number. For example (and compare with inexact->exact above):
4186
fb16d26e 4187 (rationalize (inexact->exact 1.234) 1/2000)
bdf26b60
MV
4188 => 58/47
4189
fb16d26e
MV
4190Note that, as required by R5RS, rationalize returns only then an exact
4191result when both its arguments are exact.
4192
bdf26b60
MV
4193** 'odd?' and 'even?' work also for inexact integers.
4194
4195Previously, (odd? 1.0) would signal an error since only exact integers
4196were recognized as integers. Now (odd? 1.0) returns #t, (odd? 2.0)
4197returns #f and (odd? 1.5) signals an error.
4198
b0d10ba6 4199** Guile now has uninterned symbols.
610922b2 4200
b0d10ba6 4201The new function 'make-symbol' will return an uninterned symbol. This
610922b2
MV
4202is a symbol that is unique and is guaranteed to remain unique.
4203However, uninterned symbols can not yet be read back in.
4204
4205Use the new function 'symbol-interned?' to check whether a symbol is
4206interned or not.
4207
0e6f7775
MV
4208** pretty-print has more options.
4209
4210The function pretty-print from the (ice-9 pretty-print) module can now
4211also be invoked with keyword arguments that control things like
71f271b2 4212maximum output width. See the manual for details.
0e6f7775 4213
8c84b81e 4214** Variables have no longer a special behavior for `equal?'.
ee0c7345
MV
4215
4216Previously, comparing two variables with `equal?' would recursivly
4217compare their values. This is no longer done. Variables are now only
4218`equal?' if they are `eq?'.
4219
4e21fa60
MV
4220** `(begin)' is now valid.
4221
4222You can now use an empty `begin' form. It will yield #<unspecified>
4223when evaluated and simply be ignored in a definition context.
4224
3063e30a
DH
4225** Deprecated: procedure->macro
4226
b0d10ba6
MV
4227Change your code to use 'define-macro' or r5rs macros. Also, be aware
4228that macro expansion will not be done during evaluation, but prior to
4229evaluation.
3063e30a 4230
0a50eeaa
NJ
4231** Soft ports now allow a `char-ready?' procedure
4232
4233The vector argument to `make-soft-port' can now have a length of
4234either 5 or 6. (Previously the length had to be 5.) The optional 6th
4235element is interpreted as an `input-waiting' thunk -- i.e. a thunk
4236that returns the number of characters that can be read immediately
4237without the soft port blocking.
4238
63dd3413
DH
4239** Deprecated: undefine
4240
4241There is no replacement for undefine.
4242
9abd541e
NJ
4243** The functions make-keyword-from-dash-symbol and keyword-dash-symbol
4244 have been discouraged.
aef0bdb4
MV
4245
4246They are relics from a time where a keyword like #:foo was used
4247directly as a Tcl option "-foo" and thus keywords were internally
4248stored as a symbol with a starting dash. We now store a symbol
4249without the dash.
4250
4251Use symbol->keyword and keyword->symbol instead.
4252
9abd541e
NJ
4253** The `cheap' debug option is now obsolete
4254
4255Evaluator trap calls are now unconditionally "cheap" - in other words,
4256they pass a debug object to the trap handler rather than a full
4257continuation. The trap handler code can capture a full continuation
4258by using `call-with-current-continuation' in the usual way, if it so
4259desires.
4260
4261The `cheap' option is retained for now so as not to break existing
4262code which gets or sets it, but setting it now has no effect. It will
4263be removed in the next major Guile release.
4264
4265** Evaluator trap calls now support `tweaking'
4266
4267`Tweaking' means that the trap handler code can modify the Scheme
4268expression that is about to be evaluated (in the case of an
4269enter-frame trap) or the value that is being returned (in the case of
4270an exit-frame trap). The trap handler code indicates that it wants to
4271do this by returning a pair whose car is the symbol 'instead and whose
4272cdr is the modified expression or return value.
36a9b236 4273
b00418df
DH
4274* Changes to the C interface
4275
87bdbdbc
MV
4276** The functions scm_hash_fn_remove_x and scm_hashx_remove_x no longer
4277 take a 'delete' function argument.
4278
4279This argument makes no sense since the delete function is used to
4280remove a pair from an alist, and this must not be configurable.
4281
4282This is an incompatible change.
4283
1cf1bb95
MV
4284** The GH interface is now subject to the deprecation mechanism
4285
4286The GH interface has been deprecated for quite some time but now it is
4287actually removed from Guile when it is configured with
4288--disable-deprecated.
4289
4290See the manual "Transitioning away from GH" for more information.
4291
f7f3964e
MV
4292** A new family of functions for converting between C values and
4293 Scheme values has been added.
4294
4295These functions follow a common naming scheme and are designed to be
4296easier to use, thread-safe and more future-proof than the older
4297alternatives.
4298
4299 - int scm_is_* (...)
4300
4301 These are predicates that return a C boolean: 1 or 0. Instead of
4302 SCM_NFALSEP, you can now use scm_is_true, for example.
4303
4304 - <type> scm_to_<type> (SCM val, ...)
4305
4306 These are functions that convert a Scheme value into an appropriate
4307 C value. For example, you can use scm_to_int to safely convert from
4308 a SCM to an int.
4309
a2b6a0e7 4310 - SCM scm_from_<type> (<type> val, ...)
f7f3964e
MV
4311
4312 These functions convert from a C type to a SCM value; for example,
4313 scm_from_int for ints.
4314
4315There is a huge number of these functions, for numbers, strings,
4316symbols, vectors, etc. They are documented in the reference manual in
4317the API section together with the types that they apply to.
4318
96d8c217
MV
4319** New functions for dealing with complex numbers in C have been added.
4320
4321The new functions are scm_c_make_rectangular, scm_c_make_polar,
4322scm_c_real_part, scm_c_imag_part, scm_c_magnitude and scm_c_angle.
4323They work like scm_make_rectangular etc but take or return doubles
4324directly.
4325
4326** The function scm_make_complex has been discouraged.
4327
4328Use scm_c_make_rectangular instead.
4329
f7f3964e
MV
4330** The INUM macros have been deprecated.
4331
4332A lot of code uses these macros to do general integer conversions,
b0d10ba6
MV
4333although the macros only work correctly with fixnums. Use the
4334following alternatives.
f7f3964e
MV
4335
4336 SCM_INUMP -> scm_is_integer or similar
4337 SCM_NINUMP -> !scm_is_integer or similar
4338 SCM_MAKINUM -> scm_from_int or similar
4339 SCM_INUM -> scm_to_int or similar
4340
b0d10ba6 4341 SCM_VALIDATE_INUM_* -> Do not use these; scm_to_int, etc. will
f7f3964e
MV
4342 do the validating for you.
4343
f9656a9f
MV
4344** The scm_num2<type> and scm_<type>2num functions and scm_make_real
4345 have been discouraged.
f7f3964e
MV
4346
4347Use the newer scm_to_<type> and scm_from_<type> functions instead for
4348new code. The functions have been discouraged since they don't fit
4349the naming scheme.
4350
4351** The 'boolean' macros SCM_FALSEP etc have been discouraged.
4352
4353They have strange names, especially SCM_NFALSEP, and SCM_BOOLP
4354evaluates its argument twice. Use scm_is_true, etc. instead for new
4355code.
4356
4357** The macro SCM_EQ_P has been discouraged.
4358
4359Use scm_is_eq for new code, which fits better into the naming
4360conventions.
d5b203a6 4361
d5ac9b2a
MV
4362** The macros SCM_CONSP, SCM_NCONSP, SCM_NULLP, and SCM_NNULLP have
4363 been discouraged.
4364
4365Use the function scm_is_pair or scm_is_null instead.
4366
409eb4e5
MV
4367** The functions scm_round and scm_truncate have been deprecated and
4368 are now available as scm_c_round and scm_c_truncate, respectively.
4369
4370These functions occupy the names that scm_round_number and
4371scm_truncate_number should have.
4372
3ff9283d
MV
4373** The functions scm_c_string2str, scm_c_substring2str, and
4374 scm_c_symbol2str have been deprecated.
c41acab3
MV
4375
4376Use scm_to_locale_stringbuf or similar instead, maybe together with
4377scm_substring.
4378
3ff9283d
MV
4379** New functions scm_c_make_string, scm_c_string_length,
4380 scm_c_string_ref, scm_c_string_set_x, scm_c_substring,
4381 scm_c_substring_shared, scm_c_substring_copy.
4382
4383These are like scm_make_string, scm_length, etc. but are slightly
4384easier to use from C.
4385
4386** The macros SCM_STRINGP, SCM_STRING_CHARS, SCM_STRING_LENGTH,
4387 SCM_SYMBOL_CHARS, and SCM_SYMBOL_LENGTH have been deprecated.
4388
4389They export too many assumptions about the implementation of strings
4390and symbols that are no longer true in the presence of
b0d10ba6
MV
4391mutation-sharing substrings and when Guile switches to some form of
4392Unicode.
3ff9283d
MV
4393
4394When working with strings, it is often best to use the normal string
4395functions provided by Guile, such as scm_c_string_ref,
b0d10ba6
MV
4396scm_c_string_set_x, scm_string_append, etc. Be sure to look in the
4397manual since many more such functions are now provided than
4398previously.
3ff9283d
MV
4399
4400When you want to convert a SCM string to a C string, use the
4401scm_to_locale_string function or similar instead. For symbols, use
4402scm_symbol_to_string and then work with that string. Because of the
4403new string representation, scm_symbol_to_string does not need to copy
4404and is thus quite efficient.
4405
aef0bdb4 4406** Some string, symbol and keyword functions have been discouraged.
3ff9283d 4407
b0d10ba6 4408They don't fit into the uniform naming scheme and are not explicit
3ff9283d
MV
4409about the character encoding.
4410
4411Replace according to the following table:
4412
4413 scm_allocate_string -> scm_c_make_string
4414 scm_take_str -> scm_take_locale_stringn
4415 scm_take0str -> scm_take_locale_string
4416 scm_mem2string -> scm_from_locale_stringn
4417 scm_str2string -> scm_from_locale_string
4418 scm_makfrom0str -> scm_from_locale_string
4419 scm_mem2symbol -> scm_from_locale_symboln
b0d10ba6 4420 scm_mem2uninterned_symbol -> scm_from_locale_stringn + scm_make_symbol
3ff9283d
MV
4421 scm_str2symbol -> scm_from_locale_symbol
4422
4423 SCM_SYMBOL_HASH -> scm_hashq
4424 SCM_SYMBOL_INTERNED_P -> scm_symbol_interned_p
4425
aef0bdb4
MV
4426 scm_c_make_keyword -> scm_from_locale_keyword
4427
4428** The functions scm_keyword_to_symbol and sym_symbol_to_keyword are
4429 now also available to C code.
4430
4431** SCM_KEYWORDP and SCM_KEYWORDSYM have been deprecated.
4432
4433Use scm_is_keyword and scm_keyword_to_symbol instead, but note that
4434the latter returns the true name of the keyword, not the 'dash name',
4435as SCM_KEYWORDSYM used to do.
4436
dc91d8de
MV
4437** A new way to access arrays in a thread-safe and efficient way has
4438 been added.
4439
4440See the manual, node "Accessing Arrays From C".
4441
3167d5e4
MV
4442** The old uniform vector and bitvector implementations have been
4443 unceremoniously removed.
d4ea47c8 4444
a558cc63 4445This implementation exposed the details of the tagging system of
d4ea47c8 4446Guile. Use the new C API explained in the manual in node "Uniform
c34e5780 4447Numeric Vectors" and "Bit Vectors", respectively.
d4ea47c8
MV
4448
4449The following macros are gone: SCM_UVECTOR_BASE, SCM_SET_UVECTOR_BASE,
4450SCM_UVECTOR_MAXLENGTH, SCM_UVECTOR_LENGTH, SCM_MAKE_UVECTOR_TAG,
3167d5e4
MV
4451SCM_SET_UVECTOR_LENGTH, SCM_BITVECTOR_P, SCM_BITVECTOR_BASE,
4452SCM_SET_BITVECTOR_BASE, SCM_BITVECTOR_MAX_LENGTH,
4453SCM_BITVECTOR_LENGTH, SCM_MAKE_BITVECTOR_TAG,
0b63c1ee
MV
4454SCM_SET_BITVECTOR_LENGTH, SCM_BITVEC_REF, SCM_BITVEC_SET,
4455SCM_BITVEC_CLR.
d4ea47c8 4456
c34e5780
MV
4457** The macros dealing with vectors have been deprecated.
4458
4459Use the new functions scm_is_vector, scm_vector_elements,
0b63c1ee
MV
4460scm_vector_writable_elements, etc, or scm_is_simple_vector,
4461SCM_SIMPLE_VECTOR_REF, SCM_SIMPLE_VECTOR_SET, etc instead. See the
4462manual for more details.
c34e5780
MV
4463
4464Deprecated are SCM_VECTORP, SCM_VELTS, SCM_VECTOR_MAX_LENGTH,
4465SCM_VECTOR_LENGTH, SCM_VECTOR_REF, SCM_VECTOR_SET, SCM_WRITABLE_VELTS.
4466
4467The following macros have been removed: SCM_VECTOR_BASE,
4468SCM_SET_VECTOR_BASE, SCM_MAKE_VECTOR_TAG, SCM_SET_VECTOR_LENGTH,
4469SCM_VELTS_AS_STACKITEMS, SCM_SETVELTS, SCM_GC_WRITABLE_VELTS.
4470
0c7a5cab 4471** Some C functions and macros related to arrays have been deprecated.
dc91d8de
MV
4472
4473Migrate according to the following table:
4474
e94d0be2 4475 scm_make_uve -> scm_make_typed_array, scm_make_u8vector etc.
dc91d8de
MV
4476 scm_make_ra -> scm_make_array
4477 scm_shap2ra -> scm_make_array
4478 scm_cvref -> scm_c_generalized_vector_ref
4479 scm_ra_set_contp -> do not use
4480 scm_aind -> scm_array_handle_pos
4481 scm_raprin1 -> scm_display or scm_write
4482
0c7a5cab
MV
4483 SCM_ARRAYP -> scm_is_array
4484 SCM_ARRAY_NDIM -> scm_c_array_rank
4485 SCM_ARRAY_DIMS -> scm_array_handle_dims
4486 SCM_ARRAY_CONTP -> do not use
4487 SCM_ARRAY_MEM -> do not use
4488 SCM_ARRAY_V -> scm_array_handle_elements or similar
4489 SCM_ARRAY_BASE -> do not use
4490
c1e7caf7
MV
4491** SCM_CELL_WORD_LOC has been deprecated.
4492
b0d10ba6 4493Use the new macro SCM_CELL_OBJECT_LOC instead, which returns a pointer
c1e7caf7
MV
4494to a SCM, as opposed to a pointer to a scm_t_bits.
4495
4496This was done to allow the correct use of pointers into the Scheme
4497heap. Previously, the heap words were of type scm_t_bits and local
4498variables and function arguments were of type SCM, making it
4499non-standards-conformant to have a pointer that can point to both.
4500
3ff9283d 4501** New macros SCM_SMOB_DATA_2, SCM_SMOB_DATA_3, etc.
27968825
MV
4502
4503These macros should be used instead of SCM_CELL_WORD_2/3 to access the
4504second and third words of double smobs. Likewise for
4505SCM_SET_SMOB_DATA_2 and SCM_SET_SMOB_DATA_3.
4506
4507Also, there is SCM_SMOB_FLAGS and SCM_SET_SMOB_FLAGS that should be
4508used to get and set the 16 exra bits in the zeroth word of a smob.
4509
4510And finally, there is SCM_SMOB_OBJECT and SCM_SMOB_SET_OBJECT for
4511accesing the first immediate word of a smob as a SCM value, and there
4512is SCM_SMOB_OBJECT_LOC for getting a pointer to the first immediate
b0d10ba6 4513smob word. Like wise for SCM_SMOB_OBJECT_2, etc.
27968825 4514
b0d10ba6 4515** New way to deal with non-local exits and re-entries.
9879d390
MV
4516
4517There is a new set of functions that essentially do what
fc6bb283
MV
4518scm_internal_dynamic_wind does, but in a way that is more convenient
4519for C code in some situations. Here is a quick example of how to
4520prevent a potential memory leak:
9879d390
MV
4521
4522 void
4523 foo ()
4524 {
4525 char *mem;
4526
661ae7ab 4527 scm_dynwind_begin (0);
9879d390
MV
4528
4529 mem = scm_malloc (100);
661ae7ab 4530 scm_dynwind_unwind_handler (free, mem, SCM_F_WIND_EXPLICITLY);
f1da8e4e
MV
4531
4532 /* MEM would leak if BAR throws an error.
661ae7ab 4533 SCM_DYNWIND_UNWIND_HANDLER frees it nevertheless.
c41acab3 4534 */
9879d390 4535
9879d390
MV
4536 bar ();
4537
661ae7ab 4538 scm_dynwind_end ();
9879d390 4539
e299cee2 4540 /* Because of SCM_F_WIND_EXPLICITLY, MEM will be freed by
661ae7ab 4541 SCM_DYNWIND_END as well.
9879d390
MV
4542 */
4543 }
4544
661ae7ab 4545For full documentation, see the node "Dynamic Wind" in the manual.
9879d390 4546
661ae7ab 4547** New function scm_dynwind_free
c41acab3 4548
661ae7ab
MV
4549This function calls 'free' on a given pointer when a dynwind context
4550is left. Thus the call to scm_dynwind_unwind_handler above could be
4551replaced with simply scm_dynwind_free (mem).
c41acab3 4552
a6d75e53
MV
4553** New functions scm_c_call_with_blocked_asyncs and
4554 scm_c_call_with_unblocked_asyncs
4555
4556Like scm_call_with_blocked_asyncs etc. but for C functions.
4557
661ae7ab 4558** New functions scm_dynwind_block_asyncs and scm_dynwind_unblock_asyncs
49c00ecc
MV
4559
4560In addition to scm_c_call_with_blocked_asyncs you can now also use
661ae7ab
MV
4561scm_dynwind_block_asyncs in a 'dynwind context' (see above). Likewise for
4562scm_c_call_with_unblocked_asyncs and scm_dynwind_unblock_asyncs.
49c00ecc 4563
a558cc63
MV
4564** The macros SCM_DEFER_INTS, SCM_ALLOW_INTS, SCM_REDEFER_INTS,
4565 SCM_REALLOW_INTS have been deprecated.
4566
4567They do no longer fulfill their original role of blocking signal
4568delivery. Depending on what you want to achieve, replace a pair of
661ae7ab
MV
4569SCM_DEFER_INTS and SCM_ALLOW_INTS with a dynwind context that locks a
4570mutex, blocks asyncs, or both. See node "Critical Sections" in the
4571manual.
a6d75e53
MV
4572
4573** The value 'scm_mask_ints' is no longer writable.
4574
4575Previously, you could set scm_mask_ints directly. This is no longer
4576possible. Use scm_c_call_with_blocked_asyncs and
4577scm_c_call_with_unblocked_asyncs instead.
a558cc63 4578
49c00ecc
MV
4579** New way to temporarily set the current input, output or error ports
4580
661ae7ab 4581C code can now use scm_dynwind_current_<foo>_port in a 'dynwind
0f24e75b 4582context' (see above). <foo> is one of "input", "output" or "error".
49c00ecc 4583
fc6bb283
MV
4584** New way to temporarily set fluids
4585
661ae7ab 4586C code can now use scm_dynwind_fluid in a 'dynwind context' (see
fc6bb283
MV
4587above) to temporarily set the value of a fluid.
4588
89fcf1b4
MV
4589** New types scm_t_intmax and scm_t_uintmax.
4590
4591On platforms that have them, these types are identical to intmax_t and
4592uintmax_t, respectively. On other platforms, they are identical to
4593the largest integer types that Guile knows about.
4594
b0d10ba6 4595** The functions scm_unmemocopy and scm_unmemoize have been removed.
9fcf3cbb 4596
b0d10ba6 4597You should not have used them.
9fcf3cbb 4598
5ebbe4ef
RB
4599** Many public #defines with generic names have been made private.
4600
4601#defines with generic names like HAVE_FOO or SIZEOF_FOO have been made
b0d10ba6 4602private or renamed with a more suitable public name.
f03314f9
DH
4603
4604** The macro SCM_TYP16S has been deprecated.
4605
b0d10ba6 4606This macro is not intended for public use.
f03314f9 4607
0d5e3480
DH
4608** The macro SCM_SLOPPY_INEXACTP has been deprecated.
4609
b0d10ba6 4610Use scm_is_true (scm_inexact_p (...)) instead.
0d5e3480
DH
4611
4612** The macro SCM_SLOPPY_REALP has been deprecated.
4613
b0d10ba6 4614Use scm_is_real instead.
0d5e3480
DH
4615
4616** The macro SCM_SLOPPY_COMPLEXP has been deprecated.
4617
b0d10ba6 4618Use scm_is_complex instead.
5ebbe4ef 4619
b0d10ba6 4620** Some preprocessor defines have been deprecated.
5ebbe4ef 4621
b0d10ba6
MV
4622These defines indicated whether a certain feature was present in Guile
4623or not. Going forward, assume that the features are always present.
5ebbe4ef 4624
b0d10ba6
MV
4625The macros are: USE_THREADS, GUILE_ISELECT, READER_EXTENSIONS,
4626DEBUG_EXTENSIONS, DYNAMIC_LINKING.
5ebbe4ef 4627
b0d10ba6
MV
4628The following macros have been removed completely: MEMOIZE_LOCALS,
4629SCM_RECKLESS, SCM_CAUTIOUS.
5ebbe4ef
RB
4630
4631** The preprocessor define STACK_DIRECTION has been deprecated.
4632
4633There should be no need to know about the stack direction for ordinary
b0d10ba6 4634programs.
5ebbe4ef 4635
b2cbe8d8
RB
4636** New function: scm_effective_version
4637
4638Returns the "effective" version number. This is just the normal full
4639version string without the final micro-version number. See "Changes
4640to the distribution" above.
4641
2902a459
MV
4642** The function scm_call_with_new_thread has a new prototype.
4643
4644Instead of taking a list with the thunk and handler, these two
4645arguments are now passed directly:
4646
4647 SCM scm_call_with_new_thread (SCM thunk, SCM handler);
4648
4649This is an incompatible change.
4650
ffd0ef3b
MV
4651** New snarfer macro SCM_DEFINE_PUBLIC.
4652
4653This is like SCM_DEFINE, but also calls scm_c_export for the defined
4654function in the init section.
4655
8734ce02
MV
4656** The snarfer macro SCM_SNARF_INIT is now officially supported.
4657
39e8f371
HWN
4658** Garbage collector rewrite.
4659
4660The garbage collector is cleaned up a lot, and now uses lazy
4661sweeping. This is reflected in the output of (gc-stats); since cells
4662are being freed when they are allocated, the cells-allocated field
4663stays roughly constant.
4664
4665For malloc related triggers, the behavior is changed. It uses the same
4666heuristic as the cell-triggered collections. It may be tuned with the
4667environment variables GUILE_MIN_YIELD_MALLOC. This is the percentage
4668for minimum yield of malloc related triggers. The default is 40.
4669GUILE_INIT_MALLOC_LIMIT sets the initial trigger for doing a GC. The
4670default is 200 kb.
4671
4672Debugging operations for the freelist have been deprecated, along with
4673the C variables that control garbage collection. The environment
4674variables GUILE_MAX_SEGMENT_SIZE, GUILE_INIT_SEGMENT_SIZE_2,
4675GUILE_INIT_SEGMENT_SIZE_1, and GUILE_MIN_YIELD_2 should be used.
4676
1367aa5e
HWN
4677For understanding the memory usage of a GUILE program, the routine
4678gc-live-object-stats returns an alist containing the number of live
4679objects for every type.
4680
4681
5ec1d2c8
DH
4682** The function scm_definedp has been renamed to scm_defined_p
4683
4684The name scm_definedp is deprecated.
4685
b0d10ba6 4686** The struct scm_cell type has been renamed to scm_t_cell
228a24ef
DH
4687
4688This is in accordance to Guile's naming scheme for types. Note that
4689the name scm_cell is now used for a function that allocates and
4690initializes a new cell (see below).
4691
0906625f
MV
4692** New functions for memory management
4693
4694A new set of functions for memory management has been added since the
4695old way (scm_must_malloc, scm_must_free, etc) was error prone and
4696indeed, Guile itself contained some long standing bugs that could
4697cause aborts in long running programs.
4698
4699The new functions are more symmetrical and do not need cooperation
4700from smob free routines, among other improvements.
4701
eab1b259
HWN
4702The new functions are scm_malloc, scm_realloc, scm_calloc, scm_strdup,
4703scm_strndup, scm_gc_malloc, scm_gc_calloc, scm_gc_realloc,
4704scm_gc_free, scm_gc_register_collectable_memory, and
0906625f
MV
4705scm_gc_unregister_collectable_memory. Refer to the manual for more
4706details and for upgrading instructions.
4707
4708The old functions for memory management have been deprecated. They
4709are: scm_must_malloc, scm_must_realloc, scm_must_free,
4710scm_must_strdup, scm_must_strndup, scm_done_malloc, scm_done_free.
4711
4aa104a4
MV
4712** Declarations of exported features are marked with SCM_API.
4713
4714Every declaration of a feature that belongs to the exported Guile API
4715has been marked by adding the macro "SCM_API" to the start of the
4716declaration. This macro can expand into different things, the most
4717common of which is just "extern" for Unix platforms. On Win32, it can
4718be used to control which symbols are exported from a DLL.
4719
8f99e3f3 4720If you `#define SCM_IMPORT' before including <libguile.h>, SCM_API
4aa104a4
MV
4721will expand into "__declspec (dllimport) extern", which is needed for
4722linking to the Guile DLL in Windows.
4723
b0d10ba6 4724There are also SCM_RL_IMPORT, SCM_SRFI1314_IMPORT, and
8f99e3f3 4725SCM_SRFI4_IMPORT, for the corresponding libraries.
4aa104a4 4726
a9930d22
MV
4727** SCM_NEWCELL and SCM_NEWCELL2 have been deprecated.
4728
b0d10ba6
MV
4729Use the new functions scm_cell and scm_double_cell instead. The old
4730macros had problems because with them allocation and initialization
4731was separated and the GC could sometimes observe half initialized
4732cells. Only careful coding by the user of SCM_NEWCELL and
4733SCM_NEWCELL2 could make this safe and efficient.
a9930d22 4734
5132eef0
DH
4735** CHECK_ENTRY, CHECK_APPLY and CHECK_EXIT have been deprecated.
4736
4737Use the variables scm_check_entry_p, scm_check_apply_p and scm_check_exit_p
4738instead.
4739
bc76d628
DH
4740** SRCBRKP has been deprecated.
4741
4742Use scm_c_source_property_breakpoint_p instead.
4743
3063e30a
DH
4744** Deprecated: scm_makmacro
4745
b0d10ba6
MV
4746Change your code to use either scm_makmmacro or to define macros in
4747Scheme, using 'define-macro'.
1e5f92ce 4748
1a61d41b
MV
4749** New function scm_c_port_for_each.
4750
4751This function is like scm_port_for_each but takes a pointer to a C
4752function as the callback instead of a SCM value.
4753
1f834c95
MV
4754** The names scm_internal_select, scm_thread_sleep, and
4755 scm_thread_usleep have been discouraged.
4756
4757Use scm_std_select, scm_std_sleep, scm_std_usleep instead.
4758
aa9200e5
MV
4759** The GC can no longer be blocked.
4760
4761The global flags scm_gc_heap_lock and scm_block_gc have been removed.
4762The GC can now run (partially) concurrently with other code and thus
4763blocking it is not well defined.
4764
b0d10ba6
MV
4765** Many definitions have been removed that were previously deprecated.
4766
4767scm_lisp_nil, scm_lisp_t, s_nil_ify, scm_m_nil_ify, s_t_ify,
4768scm_m_t_ify, s_0_cond, scm_m_0_cond, s_0_ify, scm_m_0_ify, s_1_ify,
4769scm_m_1_ify, scm_debug_newcell, scm_debug_newcell2,
4770scm_tc16_allocated, SCM_SET_SYMBOL_HASH, SCM_IM_NIL_IFY, SCM_IM_T_IFY,
4771SCM_IM_0_COND, SCM_IM_0_IFY, SCM_IM_1_IFY, SCM_GC_SET_ALLOCATED,
4772scm_debug_newcell, scm_debug_newcell2, SCM_HUP_SIGNAL, SCM_INT_SIGNAL,
4773SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL, SCM_ALRM_SIGNAL,
4774SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD, SCM_ORD_SIG,
4775SCM_NUM_SIGS, scm_top_level_lookup_closure_var,
4776*top-level-lookup-closure*, scm_system_transformer, scm_eval_3,
4777scm_eval2, root_module_lookup_closure, SCM_SLOPPY_STRINGP,
4778SCM_RWSTRINGP, scm_read_only_string_p, scm_make_shared_substring,
4779scm_tc7_substring, sym_huh, SCM_VARVCELL, SCM_UDVARIABLEP,
4780SCM_DEFVARIABLEP, scm_mkbig, scm_big2inum, scm_adjbig, scm_normbig,
4781scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl, SCM_FIXNUM_BIT,
4782SCM_SETCHARS, SCM_SLOPPY_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET,
4783SCM_LENGTH_MAX, SCM_SETLENGTH, SCM_ROSTRINGP, SCM_ROLENGTH,
4784SCM_ROCHARS, SCM_ROUCHARS, SCM_SUBSTRP, SCM_COERCE_SUBSTR,
4785scm_sym2vcell, scm_intern, scm_intern0, scm_sysintern, scm_sysintern0,
66c8ded2 4786scm_sysintern0_no_module_lookup, scm_init_symbols_deprecated,
2109da78 4787scm_vector_set_length_x, scm_contregs, scm_debug_info,
983e697d
MV
4788scm_debug_frame, SCM_DSIDEVAL, SCM_CONST_LONG, SCM_VCELL,
4789SCM_GLOBAL_VCELL, SCM_VCELL_INIT, SCM_GLOBAL_VCELL_INIT,
4790SCM_HUGE_LENGTH, SCM_VALIDATE_STRINGORSUBSTR, SCM_VALIDATE_ROSTRING,
4791SCM_VALIDATE_ROSTRING_COPY, SCM_VALIDATE_NULLORROSTRING_COPY,
4792SCM_VALIDATE_RWSTRING, DIGITS, scm_small_istr2int, scm_istr2int,
2109da78
MV
4793scm_istr2flo, scm_istring2number, scm_istr2int, scm_istr2flo,
4794scm_istring2number, scm_vtable_index_vcell, scm_si_vcell, SCM_ECONSP,
4795SCM_NECONSP, SCM_GLOC_VAR, SCM_GLOC_VAL, SCM_GLOC_SET_VAL,
c41acab3
MV
4796SCM_GLOC_VAL_LOC, scm_make_gloc, scm_gloc_p, scm_tc16_variable,
4797SCM_CHARS, SCM_LENGTH, SCM_SET_STRING_CHARS, SCM_SET_STRING_LENGTH.
b51bad08 4798
09172f9c
NJ
4799* Changes to bundled modules
4800
4801** (ice-9 debug)
4802
4803Using the (ice-9 debug) module no longer automatically switches Guile
4804to use the debugging evaluator. If you want to switch to the
4805debugging evaluator (which is needed for backtrace information if you
4806hit an error), please add an explicit "(debug-enable 'debug)" to your
4807code just after the code to use (ice-9 debug).
4808
328dc9a3 4809\f
c299f186
MD
4810Changes since Guile 1.4:
4811
4812* Changes to the distribution
4813
32d6f999
TTN
4814** A top-level TODO file is included.
4815
311b6a3c 4816** Guile now uses a versioning scheme similar to that of the Linux kernel.
c81ea65d
RB
4817
4818Guile now always uses three numbers to represent the version,
4819i.e. "1.6.5". The first number, 1, is the major version number, the
4820second number, 6, is the minor version number, and the third number,
48215, is the micro version number. Changes in major version number
4822indicate major changes in Guile.
4823
4824Minor version numbers that are even denote stable releases, and odd
4825minor version numbers denote development versions (which may be
4826unstable). The micro version number indicates a minor sub-revision of
4827a given MAJOR.MINOR release.
4828
4829In keeping with the new scheme, (minor-version) and scm_minor_version
4830no longer return everything but the major version number. They now
4831just return the minor version number. Two new functions
4832(micro-version) and scm_micro_version have been added to report the
4833micro version number.
4834
4835In addition, ./GUILE-VERSION now defines GUILE_MICRO_VERSION.
4836
5c790b44
RB
4837** New preprocessor definitions are available for checking versions.
4838
4839version.h now #defines SCM_MAJOR_VERSION, SCM_MINOR_VERSION, and
4840SCM_MICRO_VERSION to the appropriate integer values.
4841
311b6a3c
MV
4842** Guile now actively warns about deprecated features.
4843
4844The new configure option `--enable-deprecated=LEVEL' and the
4845environment variable GUILE_WARN_DEPRECATED control this mechanism.
4846See INSTALL and README for more information.
4847
0b073f0f
RB
4848** Guile is much more likely to work on 64-bit architectures.
4849
4850Guile now compiles and passes "make check" with only two UNRESOLVED GC
5e137c65
RB
4851cases on Alpha and ia64 based machines now. Thanks to John Goerzen
4852for the use of a test machine, and thanks to Stefan Jahn for ia64
4853patches.
0b073f0f 4854
e658215a
RB
4855** New functions: setitimer and getitimer.
4856
4857These implement a fairly direct interface to the libc functions of the
4858same name.
4859
8630fdfc
RB
4860** The #. reader extension is now disabled by default.
4861
4862For safety reasons, #. evaluation is disabled by default. To
4863re-enable it, set the fluid read-eval? to #t. For example:
4864
67b7dd9e 4865 (fluid-set! read-eval? #t)
8630fdfc
RB
4866
4867but make sure you realize the potential security risks involved. With
4868read-eval? enabled, reading a data file from an untrusted source can
4869be dangerous.
4870
f2a75d81 4871** New SRFI modules have been added:
4df36934 4872
dfdf5826
MG
4873SRFI-0 `cond-expand' is now supported in Guile, without requiring
4874using a module.
4875
e8bb0476
MG
4876(srfi srfi-1) is a library containing many useful pair- and list-processing
4877 procedures.
4878
7adc2c58 4879(srfi srfi-2) exports and-let*.
4df36934 4880
b74a7ec8
MG
4881(srfi srfi-4) implements homogeneous numeric vector datatypes.
4882
7adc2c58
RB
4883(srfi srfi-6) is a dummy module for now, since guile already provides
4884 all of the srfi-6 procedures by default: open-input-string,
4885 open-output-string, get-output-string.
4df36934 4886
7adc2c58 4887(srfi srfi-8) exports receive.
4df36934 4888
7adc2c58 4889(srfi srfi-9) exports define-record-type.
4df36934 4890
dfdf5826
MG
4891(srfi srfi-10) exports define-reader-ctor and implements the reader
4892 extension #,().
4893
7adc2c58 4894(srfi srfi-11) exports let-values and let*-values.
4df36934 4895
7adc2c58 4896(srfi srfi-13) implements the SRFI String Library.
53e29a1e 4897
7adc2c58 4898(srfi srfi-14) implements the SRFI Character-Set Library.
53e29a1e 4899
dfdf5826
MG
4900(srfi srfi-17) implements setter and getter-with-setter and redefines
4901 some accessor procedures as procedures with getters. (such as car,
4902 cdr, vector-ref etc.)
4903
4904(srfi srfi-19) implements the SRFI Time/Date Library.
2b60bc95 4905
466bb4b3
TTN
4906** New scripts / "executable modules"
4907
4908Subdirectory "scripts" contains Scheme modules that are packaged to
4909also be executable as scripts. At this time, these scripts are available:
4910
4911 display-commentary
4912 doc-snarf
4913 generate-autoload
4914 punify
58e5b910 4915 read-scheme-source
466bb4b3
TTN
4916 use2dot
4917
4918See README there for more info.
4919
54c17ccb
TTN
4920These scripts can be invoked from the shell with the new program
4921"guile-tools", which keeps track of installation directory for you.
4922For example:
4923
4924 $ guile-tools display-commentary srfi/*.scm
4925
4926guile-tools is copied to the standard $bindir on "make install".
4927
0109c4bf
MD
4928** New module (ice-9 stack-catch):
4929
4930stack-catch is like catch, but saves the current state of the stack in
3c1d1301
RB
4931the fluid the-last-stack. This fluid can be useful when using the
4932debugger and when re-throwing an error.
0109c4bf 4933
fbf0c8c7
MV
4934** The module (ice-9 and-let*) has been renamed to (ice-9 and-let-star)
4935
4936This has been done to prevent problems on lesser operating systems
4937that can't tolerate `*'s in file names. The exported macro continues
4938to be named `and-let*', of course.
4939
4f60cc33 4940On systems that support it, there is also a compatibility module named
fbf0c8c7 4941(ice-9 and-let*). It will go away in the next release.
6c0201ad 4942
9d774814 4943** New modules (oop goops) etc.:
14f1d9fe
MD
4944
4945 (oop goops)
4946 (oop goops describe)
4947 (oop goops save)
4948 (oop goops active-slot)
4949 (oop goops composite-slot)
4950
9d774814 4951The Guile Object Oriented Programming System (GOOPS) has been
311b6a3c
MV
4952integrated into Guile. For further information, consult the GOOPS
4953manual and tutorial in the `doc' directory.
14f1d9fe 4954
9d774814
GH
4955** New module (ice-9 rdelim).
4956
4957This exports the following procedures which were previously defined
1c8cbd62 4958in the default environment:
9d774814 4959
1c8cbd62
GH
4960read-line read-line! read-delimited read-delimited! %read-delimited!
4961%read-line write-line
9d774814 4962
1c8cbd62
GH
4963For backwards compatibility the definitions are still imported into the
4964default environment in this version of Guile. However you should add:
9d774814
GH
4965
4966(use-modules (ice-9 rdelim))
4967
1c8cbd62
GH
4968to any program which uses the definitions, since this may change in
4969future.
9d774814
GH
4970
4971Alternatively, if guile-scsh is installed, the (scsh rdelim) module
4972can be used for similar functionality.
4973
7e267da1
GH
4974** New module (ice-9 rw)
4975
4976This is a subset of the (scsh rw) module from guile-scsh. Currently
373f4948 4977it defines two procedures:
7e267da1 4978
311b6a3c 4979*** New function: read-string!/partial str [port_or_fdes [start [end]]]
7e267da1 4980
4bcdfe46
GH
4981 Read characters from a port or file descriptor into a string STR.
4982 A port must have an underlying file descriptor -- a so-called
4983 fport. This procedure is scsh-compatible and can efficiently read
311b6a3c 4984 large strings.
7e267da1 4985
4bcdfe46
GH
4986*** New function: write-string/partial str [port_or_fdes [start [end]]]
4987
4988 Write characters from a string STR to a port or file descriptor.
4989 A port must have an underlying file descriptor -- a so-called
4990 fport. This procedure is mostly compatible and can efficiently
4991 write large strings.
4992
e5005373
KN
4993** New module (ice-9 match)
4994
311b6a3c
MV
4995This module includes Andrew K. Wright's pattern matcher. See
4996ice-9/match.scm for brief description or
e5005373 4997
311b6a3c 4998 http://www.star-lab.com/wright/code.html
e5005373 4999
311b6a3c 5000for complete documentation.
e5005373 5001
4f60cc33
NJ
5002** New module (ice-9 buffered-input)
5003
5004This module provides procedures to construct an input port from an
5005underlying source of input that reads and returns its input in chunks.
5006The underlying input source is a Scheme procedure, specified by the
5007caller, which the port invokes whenever it needs more input.
5008
5009This is useful when building an input port whose back end is Readline
5010or a UI element such as the GtkEntry widget.
5011
5012** Documentation
5013
5014The reference and tutorial documentation that was previously
5015distributed separately, as `guile-doc', is now included in the core
5016Guile distribution. The documentation consists of the following
5017manuals.
5018
5019- The Guile Tutorial (guile-tut.texi) contains a tutorial introduction
5020 to using Guile.
5021
5022- The Guile Reference Manual (guile.texi) contains (or is intended to
5023 contain) reference documentation on all aspects of Guile.
5024
5025- The GOOPS Manual (goops.texi) contains both tutorial-style and
5026 reference documentation for using GOOPS, Guile's Object Oriented
5027 Programming System.
5028
c3e62877
NJ
5029- The Revised^5 Report on the Algorithmic Language Scheme
5030 (r5rs.texi).
4f60cc33
NJ
5031
5032See the README file in the `doc' directory for more details.
5033
094a67bb
MV
5034** There are a couple of examples in the examples/ directory now.
5035
9d774814
GH
5036* Changes to the stand-alone interpreter
5037
e7e58018
MG
5038** New command line option `--use-srfi'
5039
5040Using this option, SRFI modules can be loaded on startup and be
5041available right from the beginning. This makes programming portable
5042Scheme programs easier.
5043
5044The option `--use-srfi' expects a comma-separated list of numbers,
5045each representing a SRFI number to be loaded into the interpreter
5046before starting evaluating a script file or the REPL. Additionally,
5047the feature identifier for the loaded SRFIs is recognized by
5048`cond-expand' when using this option.
5049
5050Example:
5051$ guile --use-srfi=8,13
5052guile> (receive (x z) (values 1 2) (+ 1 2))
50533
58e5b910 5054guile> (string-pad "bla" 20)
e7e58018
MG
5055" bla"
5056
094a67bb
MV
5057** Guile now always starts up in the `(guile-user)' module.
5058
6e9382f1 5059Previously, scripts executed via the `-s' option would run in the
094a67bb
MV
5060`(guile)' module and the repl would run in the `(guile-user)' module.
5061Now every user action takes place in the `(guile-user)' module by
5062default.
e7e58018 5063
c299f186
MD
5064* Changes to Scheme functions and syntax
5065
720e1c30
MV
5066** Character classifiers work for non-ASCII characters.
5067
5068The predicates `char-alphabetic?', `char-numeric?',
5069`char-whitespace?', `char-lower?', `char-upper?' and `char-is-both?'
5070no longer check whether their arguments are ASCII characters.
5071Previously, a character would only be considered alphabetic when it
5072was also ASCII, for example.
5073
311b6a3c
MV
5074** Previously deprecated Scheme functions have been removed:
5075
5076 tag - no replacement.
5077 fseek - replaced by seek.
5078 list* - replaced by cons*.
5079
5080** It's now possible to create modules with controlled environments
5081
5082Example:
5083
5084(use-modules (ice-9 safe))
5085(define m (make-safe-module))
5086;;; m will now be a module containing only a safe subset of R5RS
5087(eval '(+ 1 2) m) --> 3
5088(eval 'load m) --> ERROR: Unbound variable: load
5089
5090** Evaluation of "()", the empty list, is now an error.
8c2c9967
MV
5091
5092Previously, the expression "()" evaluated to the empty list. This has
5093been changed to signal a "missing expression" error. The correct way
5094to write the empty list as a literal constant is to use quote: "'()".
5095
311b6a3c
MV
5096** New concept of `Guile Extensions'.
5097
5098A Guile Extension is just a ordinary shared library that can be linked
5099at run-time. We found it advantageous to give this simple concept a
5100dedicated name to distinguish the issues related to shared libraries
5101from the issues related to the module system.
5102
5103*** New function: load-extension
5104
5105Executing (load-extension lib init) is mostly equivalent to
5106
5107 (dynamic-call init (dynamic-link lib))
5108
5109except when scm_register_extension has been called previously.
5110Whenever appropriate, you should use `load-extension' instead of
5111dynamic-link and dynamic-call.
5112
5113*** New C function: scm_c_register_extension
5114
5115This function registers a initialization function for use by
5116`load-extension'. Use it when you don't want specific extensions to
5117be loaded as shared libraries (for example on platforms that don't
5118support dynamic linking).
5119
8c2c9967
MV
5120** Auto-loading of compiled-code modules is deprecated.
5121
5122Guile used to be able to automatically find and link a shared
c10ecc4c 5123library to satisfy requests for a module. For example, the module
8c2c9967
MV
5124`(foo bar)' could be implemented by placing a shared library named
5125"foo/libbar.so" (or with a different extension) in a directory on the
5126load path of Guile.
5127
311b6a3c
MV
5128This has been found to be too tricky, and is no longer supported. The
5129shared libraries are now called "extensions". You should now write a
5130small Scheme file that calls `load-extension' to load the shared
e299cee2 5131library and initialize it explicitly.
8c2c9967
MV
5132
5133The shared libraries themselves should be installed in the usual
5134places for shared libraries, with names like "libguile-foo-bar".
5135
5136For example, place this into a file "foo/bar.scm"
5137
5138 (define-module (foo bar))
5139
311b6a3c
MV
5140 (load-extension "libguile-foo-bar" "foobar_init")
5141
5142** Backward incompatible change: eval EXP ENVIRONMENT-SPECIFIER
5143
5144`eval' is now R5RS, that is it takes two arguments.
5145The second argument is an environment specifier, i.e. either
5146
5147 (scheme-report-environment 5)
5148 (null-environment 5)
5149 (interaction-environment)
5150
5151or
8c2c9967 5152
311b6a3c 5153 any module.
8c2c9967 5154
6f76852b
MV
5155** The module system has been made more disciplined.
5156
311b6a3c
MV
5157The function `eval' will save and restore the current module around
5158the evaluation of the specified expression. While this expression is
5159evaluated, `(current-module)' will now return the right module, which
5160is the module specified as the second argument to `eval'.
6f76852b 5161
311b6a3c 5162A consequence of this change is that `eval' is not particularly
6f76852b
MV
5163useful when you want allow the evaluated code to change what module is
5164designated as the current module and have this change persist from one
5165call to `eval' to the next. The read-eval-print-loop is an example
5166where `eval' is now inadequate. To compensate, there is a new
5167function `primitive-eval' that does not take a module specifier and
5168that does not save/restore the current module. You should use this
5169function together with `set-current-module', `current-module', etc
5170when you want to have more control over the state that is carried from
5171one eval to the next.
5172
5173Additionally, it has been made sure that forms that are evaluated at
5174the top level are always evaluated with respect to the current module.
5175Previously, subforms of top-level forms such as `begin', `case',
5176etc. did not respect changes to the current module although these
5177subforms are at the top-level as well.
5178
311b6a3c 5179To prevent strange behavior, the forms `define-module',
6f76852b
MV
5180`use-modules', `use-syntax', and `export' have been restricted to only
5181work on the top level. The forms `define-public' and
5182`defmacro-public' only export the new binding on the top level. They
5183behave just like `define' and `defmacro', respectively, when they are
5184used in a lexical environment.
5185
0a892a2c
MV
5186Also, `export' will no longer silently re-export bindings imported
5187from a used module. It will emit a `deprecation' warning and will
5188cease to perform any re-export in the next version. If you actually
5189want to re-export bindings, use the new `re-export' in place of
5190`export'. The new `re-export' will not make copies of variables when
5191rexporting them, as `export' did wrongly.
5192
047dc3ae
TTN
5193** Module system now allows selection and renaming of imported bindings
5194
5195Previously, when using `use-modules' or the `#:use-module' clause in
5196the `define-module' form, all the bindings (association of symbols to
5197values) for imported modules were added to the "current module" on an
5198as-is basis. This has been changed to allow finer control through two
5199new facilities: selection and renaming.
5200
5201You can now select which of the imported module's bindings are to be
5202visible in the current module by using the `:select' clause. This
5203clause also can be used to rename individual bindings. For example:
5204
5205 ;; import all bindings no questions asked
5206 (use-modules (ice-9 common-list))
5207
5208 ;; import four bindings, renaming two of them;
5209 ;; the current module sees: every some zonk-y zonk-n
5210 (use-modules ((ice-9 common-list)
5211 :select (every some
5212 (remove-if . zonk-y)
5213 (remove-if-not . zonk-n))))
5214
5215You can also programmatically rename all selected bindings using the
5216`:renamer' clause, which specifies a proc that takes a symbol and
5217returns another symbol. Because it is common practice to use a prefix,
5218we now provide the convenience procedure `symbol-prefix-proc'. For
5219example:
5220
5221 ;; import four bindings, renaming two of them specifically,
5222 ;; and all four w/ prefix "CL:";
5223 ;; the current module sees: CL:every CL:some CL:zonk-y CL:zonk-n
5224 (use-modules ((ice-9 common-list)
5225 :select (every some
5226 (remove-if . zonk-y)
5227 (remove-if-not . zonk-n))
5228 :renamer (symbol-prefix-proc 'CL:)))
5229
5230 ;; import four bindings, renaming two of them specifically,
5231 ;; and all four by upcasing.
5232 ;; the current module sees: EVERY SOME ZONK-Y ZONK-N
5233 (define (upcase-symbol sym)
5234 (string->symbol (string-upcase (symbol->string sym))))
5235
5236 (use-modules ((ice-9 common-list)
5237 :select (every some
5238 (remove-if . zonk-y)
5239 (remove-if-not . zonk-n))
5240 :renamer upcase-symbol))
5241
5242Note that programmatic renaming is done *after* individual renaming.
5243Also, the above examples show `use-modules', but the same facilities are
5244available for the `#:use-module' clause of `define-module'.
5245
5246See manual for more info.
5247
b7d69200 5248** The semantics of guardians have changed.
56495472 5249
b7d69200 5250The changes are for the most part compatible. An important criterion
6c0201ad 5251was to keep the typical usage of guardians as simple as before, but to
c0a5d888 5252make the semantics safer and (as a result) more useful.
56495472 5253
c0a5d888 5254*** All objects returned from guardians are now properly alive.
56495472 5255
c0a5d888
ML
5256It is now guaranteed that any object referenced by an object returned
5257from a guardian is alive. It's now impossible for a guardian to
5258return a "contained" object before its "containing" object.
56495472
ML
5259
5260One incompatible (but probably not very important) change resulting
5261from this is that it is no longer possible to guard objects that
5262indirectly reference themselves (i.e. are parts of cycles). If you do
5263so accidentally, you'll get a warning.
5264
c0a5d888
ML
5265*** There are now two types of guardians: greedy and sharing.
5266
5267If you call (make-guardian #t) or just (make-guardian), you'll get a
5268greedy guardian, and for (make-guardian #f) a sharing guardian.
5269
5270Greedy guardians are the default because they are more "defensive".
5271You can only greedily guard an object once. If you guard an object
5272more than once, once in a greedy guardian and the rest of times in
5273sharing guardians, then it is guaranteed that the object won't be
5274returned from sharing guardians as long as it is greedily guarded
5275and/or alive.
5276
5277Guardians returned by calls to `make-guardian' can now take one more
5278optional parameter, which says whether to throw an error in case an
5279attempt is made to greedily guard an object that is already greedily
5280guarded. The default is true, i.e. throw an error. If the parameter
5281is false, the guardian invocation returns #t if guarding was
5282successful and #f if it wasn't.
5283
5284Also, since greedy guarding is, in effect, a side-effecting operation
5285on objects, a new function is introduced: `destroy-guardian!'.
5286Invoking this function on a guardian renders it unoperative and, if
5287the guardian is greedy, clears the "greedily guarded" property of the
5288objects that were guarded by it, thus undoing the side effect.
5289
5290Note that all this hair is hardly very important, since guardian
5291objects are usually permanent.
5292
311b6a3c
MV
5293** Continuations created by call-with-current-continuation now accept
5294any number of arguments, as required by R5RS.
818febc0 5295
c10ecc4c 5296** New function `issue-deprecation-warning'
56426fdb 5297
311b6a3c 5298This function is used to display the deprecation messages that are
c10ecc4c 5299controlled by GUILE_WARN_DEPRECATION as explained in the README.
56426fdb
KN
5300
5301 (define (id x)
c10ecc4c
MV
5302 (issue-deprecation-warning "`id' is deprecated. Use `identity' instead.")
5303 (identity x))
56426fdb
KN
5304
5305 guile> (id 1)
5306 ;; `id' is deprecated. Use `identity' instead.
5307 1
5308 guile> (id 1)
5309 1
5310
c10ecc4c
MV
5311** New syntax `begin-deprecated'
5312
5313When deprecated features are included (as determined by the configure
5314option --enable-deprecated), `begin-deprecated' is identical to
5315`begin'. When deprecated features are excluded, it always evaluates
5316to `#f', ignoring the body forms.
5317
17f367e0
MV
5318** New function `make-object-property'
5319
5320This function returns a new `procedure with setter' P that can be used
5321to attach a property to objects. When calling P as
5322
5323 (set! (P obj) val)
5324
5325where `obj' is any kind of object, it attaches `val' to `obj' in such
5326a way that it can be retrieved by calling P as
5327
5328 (P obj)
5329
5330This function will replace procedure properties, symbol properties and
5331source properties eventually.
5332
76ef92f3
MV
5333** Module (ice-9 optargs) now uses keywords instead of `#&'.
5334
5335Instead of #&optional, #&key, etc you should now use #:optional,
5336#:key, etc. Since #:optional is a keyword, you can write it as just
5337:optional when (read-set! keywords 'prefix) is active.
5338
5339The old reader syntax `#&' is still supported, but deprecated. It
5340will be removed in the next release.
5341
c0997079
MD
5342** New define-module option: pure
5343
5344Tells the module system not to include any bindings from the root
5345module.
5346
5347Example:
5348
5349(define-module (totally-empty-module)
5350 :pure)
5351
5352** New define-module option: export NAME1 ...
5353
5354Export names NAME1 ...
5355
5356This option is required if you want to be able to export bindings from
5357a module which doesn't import one of `define-public' or `export'.
5358
5359Example:
5360
311b6a3c
MV
5361 (define-module (foo)
5362 :pure
5363 :use-module (ice-9 r5rs)
5364 :export (bar))
69b5f65a 5365
311b6a3c 5366 ;;; Note that we're pure R5RS below this point!
69b5f65a 5367
311b6a3c
MV
5368 (define (bar)
5369 ...)
daa6ba18 5370
1f3908c4
KN
5371** New function: object->string OBJ
5372
5373Return a Scheme string obtained by printing a given object.
5374
eb5c0a2a
GH
5375** New function: port? X
5376
5377Returns a boolean indicating whether X is a port. Equivalent to
5378`(or (input-port? X) (output-port? X))'.
5379
efa40607
DH
5380** New function: file-port?
5381
5382Determines whether a given object is a port that is related to a file.
5383
34b56ec4
GH
5384** New function: port-for-each proc
5385
311b6a3c
MV
5386Apply PROC to each port in the Guile port table in turn. The return
5387value is unspecified. More specifically, PROC is applied exactly once
5388to every port that exists in the system at the time PORT-FOR-EACH is
5389invoked. Changes to the port table while PORT-FOR-EACH is running
5390have no effect as far as PORT-FOR-EACH is concerned.
34b56ec4
GH
5391
5392** New function: dup2 oldfd newfd
5393
5394A simple wrapper for the `dup2' system call. Copies the file
5395descriptor OLDFD to descriptor number NEWFD, replacing the
5396previous meaning of NEWFD. Both OLDFD and NEWFD must be integers.
5397Unlike for dup->fdes or primitive-move->fdes, no attempt is made
264e9cbc 5398to move away ports which are using NEWFD. The return value is
34b56ec4
GH
5399unspecified.
5400
5401** New function: close-fdes fd
5402
5403A simple wrapper for the `close' system call. Close file
5404descriptor FD, which must be an integer. Unlike close (*note
5405close: Ports and File Descriptors.), the file descriptor will be
5406closed even if a port is using it. The return value is
5407unspecified.
5408
94e6d793
MG
5409** New function: crypt password salt
5410
5411Encrypts `password' using the standard unix password encryption
5412algorithm.
5413
5414** New function: chroot path
5415
5416Change the root directory of the running process to `path'.
5417
5418** New functions: getlogin, cuserid
5419
5420Return the login name or the user name of the current effective user
5421id, respectively.
5422
5423** New functions: getpriority which who, setpriority which who prio
5424
5425Get or set the priority of the running process.
5426
5427** New function: getpass prompt
5428
5429Read a password from the terminal, first displaying `prompt' and
5430disabling echoing.
5431
5432** New function: flock file operation
5433
5434Set/remove an advisory shared or exclusive lock on `file'.
5435
5436** New functions: sethostname name, gethostname
5437
5438Set or get the hostname of the machine the current process is running
5439on.
5440
6d163216 5441** New function: mkstemp! tmpl
4f60cc33 5442
6d163216
GH
5443mkstemp creates a new unique file in the file system and returns a
5444new buffered port open for reading and writing to the file. TMPL
5445is a string specifying where the file should be created: it must
5446end with `XXXXXX' and will be changed in place to return the name
5447of the temporary file.
5448
62e63ba9
MG
5449** New function: open-input-string string
5450
5451Return an input string port which delivers the characters from
4f60cc33 5452`string'. This procedure, together with `open-output-string' and
62e63ba9
MG
5453`get-output-string' implements SRFI-6.
5454
5455** New function: open-output-string
5456
5457Return an output string port which collects all data written to it.
5458The data can then be retrieved by `get-output-string'.
5459
5460** New function: get-output-string
5461
5462Return the contents of an output string port.
5463
56426fdb
KN
5464** New function: identity
5465
5466Return the argument.
5467
5bef627d
GH
5468** socket, connect, accept etc., now have support for IPv6. IPv6 addresses
5469 are represented in Scheme as integers with normal host byte ordering.
5470
5471** New function: inet-pton family address
5472
311b6a3c
MV
5473Convert a printable string network address into an integer. Note that
5474unlike the C version of this function, the result is an integer with
5475normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
5476e.g.,
5477
5478 (inet-pton AF_INET "127.0.0.1") => 2130706433
5479 (inet-pton AF_INET6 "::1") => 1
5bef627d
GH
5480
5481** New function: inet-ntop family address
5482
311b6a3c
MV
5483Convert an integer network address into a printable string. Note that
5484unlike the C version of this function, the input is an integer with
5485normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
5486e.g.,
5487
5488 (inet-ntop AF_INET 2130706433) => "127.0.0.1"
5489 (inet-ntop AF_INET6 (- (expt 2 128) 1)) =>
5bef627d
GH
5490 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
5491
56426fdb
KN
5492** Deprecated: id
5493
5494Use `identity' instead.
5495
5cd06d5e
DH
5496** Deprecated: -1+
5497
5498Use `1-' instead.
5499
5500** Deprecated: return-it
5501
311b6a3c 5502Do without it.
5cd06d5e
DH
5503
5504** Deprecated: string-character-length
5505
5506Use `string-length' instead.
5507
5508** Deprecated: flags
5509
5510Use `logior' instead.
5511
4f60cc33
NJ
5512** Deprecated: close-all-ports-except.
5513
5514This was intended for closing ports in a child process after a fork,
5515but it has the undesirable side effect of flushing buffers.
5516port-for-each is more flexible.
34b56ec4
GH
5517
5518** The (ice-9 popen) module now attempts to set up file descriptors in
5519the child process from the current Scheme ports, instead of using the
5520current values of file descriptors 0, 1, and 2 in the parent process.
5521
b52e071b
DH
5522** Removed function: builtin-weak-bindings
5523
5524There is no such concept as a weak binding any more.
5525
9d774814 5526** Removed constants: bignum-radix, scm-line-incrementors
0f979f3f 5527
7d435120
MD
5528** define-method: New syntax mandatory.
5529
5530The new method syntax is now mandatory:
5531
5532(define-method (NAME ARG-SPEC ...) BODY ...)
5533(define-method (NAME ARG-SPEC ... . REST-ARG) BODY ...)
5534
5535 ARG-SPEC ::= ARG-NAME | (ARG-NAME TYPE)
5536 REST-ARG ::= ARG-NAME
5537
5538If you have old code using the old syntax, import
5539(oop goops old-define-method) before (oop goops) as in:
5540
5541 (use-modules (oop goops old-define-method) (oop goops))
5542
f3f9dcbc
MV
5543** Deprecated function: builtin-variable
5544 Removed function: builtin-bindings
5545
5546There is no longer a distinction between builtin or other variables.
5547Use module system operations for all variables.
5548
311b6a3c
MV
5549** Lazy-catch handlers are no longer allowed to return.
5550
5551That is, a call to `throw', `error', etc is now guaranteed to not
5552return.
5553
a583bf1e 5554** Bugfixes for (ice-9 getopt-long)
8c84b81e 5555
a583bf1e
TTN
5556This module is now tested using test-suite/tests/getopt-long.test.
5557The following bugs have been fixed:
5558
5559*** Parsing for options that are specified to have `optional' args now checks
5560if the next element is an option instead of unconditionally taking it as the
8c84b81e
TTN
5561option arg.
5562
a583bf1e
TTN
5563*** An error is now thrown for `--opt=val' when the option description
5564does not specify `(value #t)' or `(value optional)'. This condition used to
5565be accepted w/o error, contrary to the documentation.
5566
5567*** The error message for unrecognized options is now more informative.
5568It used to be "not a record", an artifact of the implementation.
5569
5570*** The error message for `--opt' terminating the arg list (no value), when
5571`(value #t)' is specified, is now more informative. It used to be "not enough
5572args".
5573
5574*** "Clumped" single-char args now preserve trailing string, use it as arg.
5575The expansion used to be like so:
5576
5577 ("-abc5d" "--xyz") => ("-a" "-b" "-c" "--xyz")
5578
5579Note that the "5d" is dropped. Now it is like so:
5580
5581 ("-abc5d" "--xyz") => ("-a" "-b" "-c" "5d" "--xyz")
5582
5583This enables single-char options to have adjoining arguments as long as their
5584constituent characters are not potential single-char options.
8c84b81e 5585
998bfc70
TTN
5586** (ice-9 session) procedure `arity' now works with (ice-9 optargs) `lambda*'
5587
5588The `lambda*' and derivative forms in (ice-9 optargs) now set a procedure
5589property `arglist', which can be retrieved by `arity'. The result is that
5590`arity' can give more detailed information than before:
5591
5592Before:
5593
5594 guile> (use-modules (ice-9 optargs))
5595 guile> (define* (foo #:optional a b c) a)
5596 guile> (arity foo)
5597 0 or more arguments in `lambda*:G0'.
5598
5599After:
5600
5601 guile> (arity foo)
5602 3 optional arguments: `a', `b' and `c'.
5603 guile> (define* (bar a b #:key c d #:allow-other-keys) a)
5604 guile> (arity bar)
5605 2 required arguments: `a' and `b', 2 keyword arguments: `c'
5606 and `d', other keywords allowed.
5607 guile> (define* (baz a b #:optional c #:rest r) a)
5608 guile> (arity baz)
5609 2 required arguments: `a' and `b', 1 optional argument: `c',
5610 the rest in `r'.
5611
311b6a3c
MV
5612* Changes to the C interface
5613
c81c130e
MV
5614** Types have been renamed from scm_*_t to scm_t_*.
5615
5616This has been done for POSIX sake. It reserves identifiers ending
5617with "_t". What a concept.
5618
5619The old names are still available with status `deprecated'.
5620
5621** scm_t_bits (former scm_bits_t) is now a unsigned type.
5622
6e9382f1 5623** Deprecated features have been removed.
e6c9e497
MV
5624
5625*** Macros removed
5626
5627 SCM_INPORTP, SCM_OUTPORTP SCM_ICHRP, SCM_ICHR, SCM_MAKICHR
5628 SCM_SETJMPBUF SCM_NSTRINGP SCM_NRWSTRINGP SCM_NVECTORP SCM_DOUBLE_CELLP
5629
5630*** C Functions removed
5631
5632 scm_sysmissing scm_tag scm_tc16_flo scm_tc_flo
5633 scm_fseek - replaced by scm_seek.
5634 gc-thunk - replaced by after-gc-hook.
5635 gh_int2scmb - replaced by gh_bool2scm.
5636 scm_tc_dblr - replaced by scm_tc16_real.
5637 scm_tc_dblc - replaced by scm_tc16_complex.
5638 scm_list_star - replaced by scm_cons_star.
5639
36284627
DH
5640** Deprecated: scm_makfromstr
5641
5642Use scm_mem2string instead.
5643
311b6a3c
MV
5644** Deprecated: scm_make_shared_substring
5645
5646Explicit shared substrings will disappear from Guile.
5647
5648Instead, "normal" strings will be implemented using sharing
5649internally, combined with a copy-on-write strategy.
5650
5651** Deprecated: scm_read_only_string_p
5652
5653The concept of read-only strings will disappear in next release of
5654Guile.
5655
5656** Deprecated: scm_sloppy_memq, scm_sloppy_memv, scm_sloppy_member
c299f186 5657
311b6a3c 5658Instead, use scm_c_memq or scm_memq, scm_memv, scm_member.
c299f186 5659
dd0e04ed
KN
5660** New functions: scm_call_0, scm_call_1, scm_call_2, scm_call_3
5661
83dbedcc
KR
5662Call a procedure with the indicated number of arguments. See "Fly
5663Evaluation" in the manual.
dd0e04ed
KN
5664
5665** New functions: scm_apply_0, scm_apply_1, scm_apply_2, scm_apply_3
5666
83dbedcc
KR
5667Call a procedure with the indicated number of arguments and a list of
5668further arguments. See "Fly Evaluation" in the manual.
dd0e04ed 5669
e235f2a6
KN
5670** New functions: scm_list_1, scm_list_2, scm_list_3, scm_list_4, scm_list_5
5671
83dbedcc
KR
5672Create a list of the given number of elements. See "List
5673Constructors" in the manual.
e235f2a6
KN
5674
5675** Renamed function: scm_listify has been replaced by scm_list_n.
5676
5677** Deprecated macros: SCM_LIST0, SCM_LIST1, SCM_LIST2, SCM_LIST3, SCM_LIST4,
5678SCM_LIST5, SCM_LIST6, SCM_LIST7, SCM_LIST8, SCM_LIST9.
5679
5680Use functions scm_list_N instead.
5681
6fe692e9
MD
5682** New function: scm_c_read (SCM port, void *buffer, scm_sizet size)
5683
5684Used by an application to read arbitrary number of bytes from a port.
5685Same semantics as libc read, except that scm_c_read only returns less
5686than SIZE bytes if at end-of-file.
5687
5688Warning: Doesn't update port line and column counts!
5689
5690** New function: scm_c_write (SCM port, const void *ptr, scm_sizet size)
5691
5692Used by an application to write arbitrary number of bytes to an SCM
5693port. Similar semantics as libc write. However, unlike libc
5694write, scm_c_write writes the requested number of bytes and has no
5695return value.
5696
5697Warning: Doesn't update port line and column counts!
5698
17f367e0
MV
5699** New function: scm_init_guile ()
5700
5701In contrast to scm_boot_guile, scm_init_guile will return normally
5702after initializing Guile. It is not available on all systems, tho.
5703
23ade5e7
DH
5704** New functions: scm_str2symbol, scm_mem2symbol
5705
5706The function scm_str2symbol takes a const char* pointing to a zero-terminated
5707field of characters and creates a scheme symbol object from that C string.
5708The function scm_mem2symbol takes a const char* and a number of characters and
5709creates a symbol from the characters in that memory area.
5710
17f367e0
MV
5711** New functions: scm_primitive_make_property
5712 scm_primitive_property_ref
5713 scm_primitive_property_set_x
5714 scm_primitive_property_del_x
5715
5716These functions implement a new way to deal with object properties.
5717See libguile/properties.c for their documentation.
5718
9d47a1e6
ML
5719** New function: scm_done_free (long size)
5720
5721This function is the inverse of scm_done_malloc. Use it to report the
5722amount of smob memory you free. The previous method, which involved
5723calling scm_done_malloc with negative argument, was somewhat
5724unintuitive (and is still available, of course).
5725
79a3dafe
DH
5726** New function: scm_c_memq (SCM obj, SCM list)
5727
5728This function provides a fast C level alternative for scm_memq for the case
5729that the list parameter is known to be a proper list. The function is a
5730replacement for scm_sloppy_memq, but is stricter in its requirements on its
5731list input parameter, since for anything else but a proper list the function's
5732behaviour is undefined - it may even crash or loop endlessly. Further, for
5733the case that the object is not found in the list, scm_c_memq returns #f which
5734is similar to scm_memq, but different from scm_sloppy_memq's behaviour.
5735
6c0201ad 5736** New functions: scm_remember_upto_here_1, scm_remember_upto_here_2,
5d2b97cd
DH
5737scm_remember_upto_here
5738
5739These functions replace the function scm_remember.
5740
5741** Deprecated function: scm_remember
5742
5743Use one of the new functions scm_remember_upto_here_1,
5744scm_remember_upto_here_2 or scm_remember_upto_here instead.
5745
be54b15d
DH
5746** New function: scm_allocate_string
5747
5748This function replaces the function scm_makstr.
5749
5750** Deprecated function: scm_makstr
5751
5752Use the new function scm_allocate_string instead.
5753
32d0d4b1
DH
5754** New global variable scm_gc_running_p introduced.
5755
5756Use this variable to find out if garbage collection is being executed. Up to
5757now applications have used scm_gc_heap_lock to test if garbage collection was
5758running, which also works because of the fact that up to know only the garbage
5759collector has set this variable. But, this is an implementation detail that
5760may change. Further, scm_gc_heap_lock is not set throughout gc, thus the use
5761of this variable is (and has been) not fully safe anyway.
5762
5b9eb8ae
DH
5763** New macros: SCM_BITVECTOR_MAX_LENGTH, SCM_UVECTOR_MAX_LENGTH
5764
5765Use these instead of SCM_LENGTH_MAX.
5766
6c0201ad 5767** New macros: SCM_CONTINUATION_LENGTH, SCM_CCLO_LENGTH, SCM_STACK_LENGTH,
a6d9e5ab
DH
5768SCM_STRING_LENGTH, SCM_SYMBOL_LENGTH, SCM_UVECTOR_LENGTH,
5769SCM_BITVECTOR_LENGTH, SCM_VECTOR_LENGTH.
5770
5771Use these instead of SCM_LENGTH.
5772
6c0201ad 5773** New macros: SCM_SET_CONTINUATION_LENGTH, SCM_SET_STRING_LENGTH,
93778877
DH
5774SCM_SET_SYMBOL_LENGTH, SCM_SET_VECTOR_LENGTH, SCM_SET_UVECTOR_LENGTH,
5775SCM_SET_BITVECTOR_LENGTH
bc0eaf7b
DH
5776
5777Use these instead of SCM_SETLENGTH
5778
6c0201ad 5779** New macros: SCM_STRING_CHARS, SCM_SYMBOL_CHARS, SCM_CCLO_BASE,
a6d9e5ab
DH
5780SCM_VECTOR_BASE, SCM_UVECTOR_BASE, SCM_BITVECTOR_BASE, SCM_COMPLEX_MEM,
5781SCM_ARRAY_MEM
5782
e51fe79c
DH
5783Use these instead of SCM_CHARS, SCM_UCHARS, SCM_ROCHARS, SCM_ROUCHARS or
5784SCM_VELTS.
a6d9e5ab 5785
6c0201ad 5786** New macros: SCM_SET_BIGNUM_BASE, SCM_SET_STRING_CHARS,
6a0476fd
DH
5787SCM_SET_SYMBOL_CHARS, SCM_SET_UVECTOR_BASE, SCM_SET_BITVECTOR_BASE,
5788SCM_SET_VECTOR_BASE
5789
5790Use these instead of SCM_SETCHARS.
5791
a6d9e5ab
DH
5792** New macro: SCM_BITVECTOR_P
5793
5794** New macro: SCM_STRING_COERCE_0TERMINATION_X
5795
5796Use instead of SCM_COERCE_SUBSTR.
5797
30ea841d
DH
5798** New macros: SCM_DIR_OPEN_P, SCM_DIR_FLAG_OPEN
5799
5800For directory objects, use these instead of SCM_OPDIRP and SCM_OPN.
5801
6c0201ad
TTN
5802** Deprecated macros: SCM_OUTOFRANGE, SCM_NALLOC, SCM_HUP_SIGNAL,
5803SCM_INT_SIGNAL, SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL,
5804SCM_ALRM_SIGNAL, SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD,
d1ca2c64 5805SCM_ORD_SIG, SCM_NUM_SIGS, SCM_SYMBOL_SLOTS, SCM_SLOTS, SCM_SLOPPY_STRINGP,
a6d9e5ab
DH
5806SCM_VALIDATE_STRINGORSUBSTR, SCM_FREEP, SCM_NFREEP, SCM_CHARS, SCM_UCHARS,
5807SCM_VALIDATE_ROSTRING, SCM_VALIDATE_ROSTRING_COPY,
5808SCM_VALIDATE_NULLORROSTRING_COPY, SCM_ROLENGTH, SCM_LENGTH, SCM_HUGE_LENGTH,
b24b5e13 5809SCM_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET, SCM_COERCE_SUBSTR,
34f0f2b8 5810SCM_ROSTRINGP, SCM_RWSTRINGP, SCM_VALIDATE_RWSTRING, SCM_ROCHARS,
fd336365 5811SCM_ROUCHARS, SCM_SETLENGTH, SCM_SETCHARS, SCM_LENGTH_MAX, SCM_GC8MARKP,
30ea841d 5812SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR, SCM_SUBR_DOC,
b3fcac34
DH
5813SCM_OPDIRP, SCM_VALIDATE_OPDIR, SCM_WTA, RETURN_SCM_WTA, SCM_CONST_LONG,
5814SCM_WNA, SCM_FUNC_NAME, SCM_VALIDATE_NUMBER_COPY,
61045190 5815SCM_VALIDATE_NUMBER_DEF_COPY, SCM_SLOPPY_CONSP, SCM_SLOPPY_NCONSP,
e038c042 5816SCM_SETAND_CDR, SCM_SETOR_CDR, SCM_SETAND_CAR, SCM_SETOR_CAR
b63a956d
DH
5817
5818Use SCM_ASSERT_RANGE or SCM_VALIDATE_XXX_RANGE instead of SCM_OUTOFRANGE.
5819Use scm_memory_error instead of SCM_NALLOC.
c1aef037 5820Use SCM_STRINGP instead of SCM_SLOPPY_STRINGP.
d1ca2c64
DH
5821Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_STRINGORSUBSTR.
5822Use SCM_FREE_CELL_P instead of SCM_FREEP/SCM_NFREEP
a6d9e5ab 5823Use a type specific accessor macro instead of SCM_CHARS/SCM_UCHARS.
6c0201ad 5824Use a type specific accessor instead of SCM(_|_RO|_HUGE_)LENGTH.
a6d9e5ab
DH
5825Use SCM_VALIDATE_(SYMBOL|STRING) instead of SCM_VALIDATE_ROSTRING.
5826Use SCM_STRING_COERCE_0TERMINATION_X instead of SCM_COERCE_SUBSTR.
b24b5e13 5827Use SCM_STRINGP or SCM_SYMBOLP instead of SCM_ROSTRINGP.
f0942910
DH
5828Use SCM_STRINGP instead of SCM_RWSTRINGP.
5829Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_RWSTRING.
34f0f2b8
DH
5830Use SCM_STRING_CHARS instead of SCM_ROCHARS.
5831Use SCM_STRING_UCHARS instead of SCM_ROUCHARS.
93778877 5832Use a type specific setter macro instead of SCM_SETLENGTH.
6a0476fd 5833Use a type specific setter macro instead of SCM_SETCHARS.
5b9eb8ae 5834Use a type specific length macro instead of SCM_LENGTH_MAX.
fd336365
DH
5835Use SCM_GCMARKP instead of SCM_GC8MARKP.
5836Use SCM_SETGCMARK instead of SCM_SETGC8MARK.
5837Use SCM_CLRGCMARK instead of SCM_CLRGC8MARK.
5838Use SCM_TYP16 instead of SCM_GCTYP16.
5839Use SCM_CDR instead of SCM_GCCDR.
30ea841d 5840Use SCM_DIR_OPEN_P instead of SCM_OPDIRP.
276dd677
DH
5841Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of SCM_WTA.
5842Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of RETURN_SCM_WTA.
8dea8611 5843Use SCM_VCELL_INIT instead of SCM_CONST_LONG.
b3fcac34 5844Use SCM_WRONG_NUM_ARGS instead of SCM_WNA.
ced99e92
DH
5845Use SCM_CONSP instead of SCM_SLOPPY_CONSP.
5846Use !SCM_CONSP instead of SCM_SLOPPY_NCONSP.
b63a956d 5847
f7620510
DH
5848** Removed function: scm_struct_init
5849
93d40df2
DH
5850** Removed variable: scm_symhash_dim
5851
818febc0
GH
5852** Renamed function: scm_make_cont has been replaced by
5853scm_make_continuation, which has a different interface.
5854
cc4feeca
DH
5855** Deprecated function: scm_call_catching_errors
5856
5857Use scm_catch or scm_lazy_catch from throw.[ch] instead.
5858
28b06554
DH
5859** Deprecated function: scm_strhash
5860
5861Use scm_string_hash instead.
5862
1b9be268
DH
5863** Deprecated function: scm_vector_set_length_x
5864
5865Instead, create a fresh vector of the desired size and copy the contents.
5866
302f229e
MD
5867** scm_gensym has changed prototype
5868
5869scm_gensym now only takes one argument.
5870
1660782e
DH
5871** Deprecated type tags: scm_tc7_ssymbol, scm_tc7_msymbol, scm_tcs_symbols,
5872scm_tc7_lvector
28b06554
DH
5873
5874There is now only a single symbol type scm_tc7_symbol.
1660782e 5875The tag scm_tc7_lvector was not used anyway.
28b06554 5876
2f6fb7c5
KN
5877** Deprecated function: scm_make_smob_type_mfpe, scm_set_smob_mfpe.
5878
5879Use scm_make_smob_type and scm_set_smob_XXX instead.
5880
5881** New function scm_set_smob_apply.
5882
5883This can be used to set an apply function to a smob type.
5884
1f3908c4
KN
5885** Deprecated function: scm_strprint_obj
5886
5887Use scm_object_to_string instead.
5888
b3fcac34
DH
5889** Deprecated function: scm_wta
5890
5891Use scm_wrong_type_arg, or another appropriate error signalling function
5892instead.
5893
f3f9dcbc
MV
5894** Explicit support for obarrays has been deprecated.
5895
5896Use `scm_str2symbol' and the generic hashtable functions instead.
5897
5898** The concept of `vcells' has been deprecated.
5899
5900The data type `variable' is now used exclusively. `Vcells' have been
5901a low-level concept so you are likely not affected by this change.
5902
5903*** Deprecated functions: scm_sym2vcell, scm_sysintern,
5904 scm_sysintern0, scm_symbol_value0, scm_intern, scm_intern0.
5905
5906Use scm_c_define or scm_c_lookup instead, as appropriate.
5907
5908*** New functions: scm_c_module_lookup, scm_c_lookup,
5909 scm_c_module_define, scm_c_define, scm_module_lookup, scm_lookup,
5910 scm_module_define, scm_define.
5911
5912These functions work with variables instead of with vcells.
5913
311b6a3c
MV
5914** New functions for creating and defining `subr's and `gsubr's.
5915
5916The new functions more clearly distinguish between creating a subr (or
5917gsubr) object and adding it to the current module.
5918
5919These new functions are available: scm_c_make_subr, scm_c_define_subr,
5920scm_c_make_subr_with_generic, scm_c_define_subr_with_generic,
5921scm_c_make_gsubr, scm_c_define_gsubr, scm_c_make_gsubr_with_generic,
5922scm_c_define_gsubr_with_generic.
5923
5924** Deprecated functions: scm_make_subr, scm_make_subr_opt,
5925 scm_make_subr_with_generic, scm_make_gsubr,
5926 scm_make_gsubr_with_generic.
5927
5928Use the new ones from above instead.
5929
5930** C interface to the module system has changed.
5931
5932While we suggest that you avoid as many explicit module system
5933operations from C as possible for the time being, the C interface has
5934been made more similar to the high-level Scheme module system.
5935
5936*** New functions: scm_c_define_module, scm_c_use_module,
5937 scm_c_export, scm_c_resolve_module.
5938
5939They mostly work like their Scheme namesakes. scm_c_define_module
5940takes a function that is called a context where the new module is
5941current.
5942
5943*** Deprecated functions: scm_the_root_module, scm_make_module,
5944 scm_ensure_user_module, scm_load_scheme_module.
5945
5946Use the new functions instead.
5947
5948** Renamed function: scm_internal_with_fluids becomes
5949 scm_c_with_fluids.
5950
5951scm_internal_with_fluids is available as a deprecated function.
5952
5953** New function: scm_c_with_fluid.
5954
5955Just like scm_c_with_fluids, but takes one fluid and one value instead
5956of lists of same.
5957
1be6b49c
ML
5958** Deprecated typedefs: long_long, ulong_long.
5959
5960They are of questionable utility and they pollute the global
5961namespace.
5962
1be6b49c
ML
5963** Deprecated typedef: scm_sizet
5964
5965It is of questionable utility now that Guile requires ANSI C, and is
5966oddly named.
5967
5968** Deprecated typedefs: scm_port_rw_active, scm_port,
5969 scm_ptob_descriptor, scm_debug_info, scm_debug_frame, scm_fport,
5970 scm_option, scm_rstate, scm_rng, scm_array, scm_array_dim.
5971
5972Made more compliant with the naming policy by adding a _t at the end.
5973
5974** Deprecated functions: scm_mkbig, scm_big2num, scm_adjbig,
5975 scm_normbig, scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl
5976
373f4948 5977With the exception of the mysterious scm_2ulong2big, they are still
1be6b49c
ML
5978available under new names (scm_i_mkbig etc). These functions are not
5979intended to be used in user code. You should avoid dealing with
5980bignums directly, and should deal with numbers in general (which can
5981be bignums).
5982
147c18a0
MD
5983** Change in behavior: scm_num2long, scm_num2ulong
5984
5985The scm_num2[u]long functions don't any longer accept an inexact
5986argument. This change in behavior is motivated by concordance with
5987R5RS: It is more common that a primitive doesn't want to accept an
5988inexact for an exact.
5989
1be6b49c 5990** New functions: scm_short2num, scm_ushort2num, scm_int2num,
f3f70257
ML
5991 scm_uint2num, scm_size2num, scm_ptrdiff2num, scm_num2short,
5992 scm_num2ushort, scm_num2int, scm_num2uint, scm_num2ptrdiff,
1be6b49c
ML
5993 scm_num2size.
5994
5995These are conversion functions between the various ANSI C integral
147c18a0
MD
5996types and Scheme numbers. NOTE: The scm_num2xxx functions don't
5997accept an inexact argument.
1be6b49c 5998
5437598b
MD
5999** New functions: scm_float2num, scm_double2num,
6000 scm_num2float, scm_num2double.
6001
6002These are conversion functions between the two ANSI C float types and
6003Scheme numbers.
6004
1be6b49c 6005** New number validation macros:
f3f70257 6006 SCM_NUM2{SIZE,PTRDIFF,SHORT,USHORT,INT,UINT}[_DEF]
1be6b49c
ML
6007
6008See above.
6009
fc62c86a
ML
6010** New functions: scm_gc_protect_object, scm_gc_unprotect_object
6011
6012These are just nicer-named old scm_protect_object and
6013scm_unprotect_object.
6014
6015** Deprecated functions: scm_protect_object, scm_unprotect_object
6016
6017** New functions: scm_gc_[un]register_root, scm_gc_[un]register_roots
6018
6019These functions can be used to register pointers to locations that
6020hold SCM values.
6021
5b2ad23b
ML
6022** Deprecated function: scm_create_hook.
6023
6024Its sins are: misleading name, non-modularity and lack of general
6025usefulness.
6026
c299f186 6027\f
cc36e791
JB
6028Changes since Guile 1.3.4:
6029
80f27102
JB
6030* Changes to the distribution
6031
ce358662
JB
6032** Trees from nightly snapshots and CVS now require you to run autogen.sh.
6033
6034We've changed the way we handle generated files in the Guile source
6035repository. As a result, the procedure for building trees obtained
6036from the nightly FTP snapshots or via CVS has changed:
6037- You must have appropriate versions of autoconf, automake, and
6038 libtool installed on your system. See README for info on how to
6039 obtain these programs.
6040- Before configuring the tree, you must first run the script
6041 `autogen.sh' at the top of the source tree.
6042
6043The Guile repository used to contain not only source files, written by
6044humans, but also some generated files, like configure scripts and
6045Makefile.in files. Even though the contents of these files could be
6046derived mechanically from other files present, we thought it would
6047make the tree easier to build if we checked them into CVS.
6048
6049However, this approach means that minor differences between
6050developer's installed tools and habits affected the whole team.
6051So we have removed the generated files from the repository, and
6052added the autogen.sh script, which will reconstruct them
6053appropriately.
6054
6055
dc914156
GH
6056** configure now has experimental options to remove support for certain
6057features:
52cfc69b 6058
dc914156
GH
6059--disable-arrays omit array and uniform array support
6060--disable-posix omit posix interfaces
6061--disable-networking omit networking interfaces
6062--disable-regex omit regular expression interfaces
52cfc69b
GH
6063
6064These are likely to become separate modules some day.
6065
9764c29b 6066** New configure option --enable-debug-freelist
e1b0d0ac 6067
38a15cfd
GB
6068This enables a debugging version of SCM_NEWCELL(), and also registers
6069an extra primitive, the setter `gc-set-debug-check-freelist!'.
6070
6071Configure with the --enable-debug-freelist option to enable
6072the gc-set-debug-check-freelist! primitive, and then use:
6073
6074(gc-set-debug-check-freelist! #t) # turn on checking of the freelist
6075(gc-set-debug-check-freelist! #f) # turn off checking
6076
6077Checking of the freelist forces a traversal of the freelist and
6078a garbage collection before each allocation of a cell. This can
6079slow down the interpreter dramatically, so the setter should be used to
6080turn on this extra processing only when necessary.
e1b0d0ac 6081
9764c29b
MD
6082** New configure option --enable-debug-malloc
6083
6084Include code for debugging of calls to scm_must_malloc/realloc/free.
6085
6086Checks that
6087
60881. objects freed by scm_must_free has been mallocated by scm_must_malloc
60892. objects reallocated by scm_must_realloc has been allocated by
6090 scm_must_malloc
60913. reallocated objects are reallocated with the same what string
6092
6093But, most importantly, it records the number of allocated objects of
6094each kind. This is useful when searching for memory leaks.
6095
6096A Guile compiled with this option provides the primitive
6097`malloc-stats' which returns an alist with pairs of kind and the
6098number of objects of that kind.
6099
e415cb06
MD
6100** All includes are now referenced relative to the root directory
6101
6102Since some users have had problems with mixups between Guile and
6103system headers, we have decided to always refer to Guile headers via
6104their parent directories. This essentially creates a "private name
6105space" for Guile headers. This means that the compiler only is given
6106-I options for the root build and root source directory.
6107
341f78c9
MD
6108** Header files kw.h and genio.h have been removed.
6109
6110** The module (ice-9 getopt-gnu-style) has been removed.
6111
e8855f8d
MD
6112** New module (ice-9 documentation)
6113
6114Implements the interface to documentation strings associated with
6115objects.
6116
0c0ffe09
KN
6117** New module (ice-9 time)
6118
6119Provides a macro `time', which displays execution time of a given form.
6120
cf7a5ee5
KN
6121** New module (ice-9 history)
6122
6123Loading this module enables value history in the repl.
6124
0af43c4a 6125* Changes to the stand-alone interpreter
bd9e24b3 6126
67ef2dca
MD
6127** New command line option --debug
6128
6129Start Guile with debugging evaluator and backtraces enabled.
6130
6131This is useful when debugging your .guile init file or scripts.
6132
aa4bb95d
MD
6133** New help facility
6134
341f78c9
MD
6135Usage: (help NAME) gives documentation about objects named NAME (a symbol)
6136 (help REGEXP) ditto for objects with names matching REGEXP (a string)
58e5b910 6137 (help 'NAME) gives documentation for NAME, even if it is not an object
341f78c9 6138 (help ,EXPR) gives documentation for object returned by EXPR
6c0201ad 6139 (help (my module)) gives module commentary for `(my module)'
341f78c9
MD
6140 (help) gives this text
6141
6142`help' searches among bindings exported from loaded modules, while
6143`apropos' searches among bindings visible from the "current" module.
6144
6145Examples: (help help)
6146 (help cons)
6147 (help "output-string")
aa4bb95d 6148
e8855f8d
MD
6149** `help' and `apropos' now prints full module names
6150
0af43c4a 6151** Dynamic linking now uses libltdl from the libtool package.
bd9e24b3 6152
0af43c4a
MD
6153The old system dependent code for doing dynamic linking has been
6154replaced with calls to the libltdl functions which do all the hairy
6155details for us.
bd9e24b3 6156
0af43c4a
MD
6157The major improvement is that you can now directly pass libtool
6158library names like "libfoo.la" to `dynamic-link' and `dynamic-link'
6159will be able to do the best shared library job you can get, via
6160libltdl.
bd9e24b3 6161
0af43c4a
MD
6162The way dynamic libraries are found has changed and is not really
6163portable across platforms, probably. It is therefore recommended to
6164use absolute filenames when possible.
6165
6166If you pass a filename without an extension to `dynamic-link', it will
6167try a few appropriate ones. Thus, the most platform ignorant way is
6168to specify a name like "libfoo", without any directories and
6169extensions.
0573ddae 6170
91163914
MD
6171** Guile COOP threads are now compatible with LinuxThreads
6172
6173Previously, COOP threading wasn't possible in applications linked with
6174Linux POSIX threads due to their use of the stack pointer to find the
6175thread context. This has now been fixed with a workaround which uses
6176the pthreads to allocate the stack.
6177
6c0201ad 6178** New primitives: `pkgdata-dir', `site-dir', `library-dir'
62b82274 6179
9770d235
MD
6180** Positions of erring expression in scripts
6181
6182With version 1.3.4, the location of the erring expression in Guile
6183scipts is no longer automatically reported. (This should have been
6184documented before the 1.3.4 release.)
6185
6186You can get this information by enabling recording of positions of
6187source expressions and running the debugging evaluator. Put this at
6188the top of your script (or in your "site" file):
6189
6190 (read-enable 'positions)
6191 (debug-enable 'debug)
6192
0573ddae
MD
6193** Backtraces in scripts
6194
6195It is now possible to get backtraces in scripts.
6196
6197Put
6198
6199 (debug-enable 'debug 'backtrace)
6200
6201at the top of the script.
6202
6203(The first options enables the debugging evaluator.
6204 The second enables backtraces.)
6205
e8855f8d
MD
6206** Part of module system symbol lookup now implemented in C
6207
6208The eval closure of most modules is now implemented in C. Since this
6209was one of the bottlenecks for loading speed, Guile now loads code
6210substantially faster than before.
6211
f25f761d
GH
6212** Attempting to get the value of an unbound variable now produces
6213an exception with a key of 'unbound-variable instead of 'misc-error.
6214
1a35eadc
GH
6215** The initial default output port is now unbuffered if it's using a
6216tty device. Previously in this situation it was line-buffered.
6217
820920e6
MD
6218** New hook: after-gc-hook
6219
6220after-gc-hook takes over the role of gc-thunk. This hook is run at
6221the first SCM_TICK after a GC. (Thus, the code is run at the same
6222point during evaluation as signal handlers.)
6223
6224Note that this hook should be used only for diagnostic and debugging
6225purposes. It is not certain that it will continue to be well-defined
6226when this hook is run in the future.
6227
6228C programmers: Note the new C level hooks scm_before_gc_c_hook,
6229scm_before_sweep_c_hook, scm_after_gc_c_hook.
6230
b5074b23
MD
6231** Improvements to garbage collector
6232
6233Guile 1.4 has a new policy for triggering heap allocation and
6234determining the sizes of heap segments. It fixes a number of problems
6235in the old GC.
6236
62371. The new policy can handle two separate pools of cells
6238 (2-word/4-word) better. (The old policy would run wild, allocating
6239 more and more memory for certain programs.)
6240
62412. The old code would sometimes allocate far too much heap so that the
6242 Guile process became gigantic. The new code avoids this.
6243
62443. The old code would sometimes allocate too little so that few cells
6245 were freed at GC so that, in turn, too much time was spent in GC.
6246
62474. The old code would often trigger heap allocation several times in a
6248 row. (The new scheme predicts how large the segments needs to be
6249 in order not to need further allocation.)
6250
e8855f8d
MD
6251All in all, the new GC policy will make larger applications more
6252efficient.
6253
b5074b23
MD
6254The new GC scheme also is prepared for POSIX threading. Threads can
6255allocate private pools of cells ("clusters") with just a single
6256function call. Allocation of single cells from such a cluster can
6257then proceed without any need of inter-thread synchronization.
6258
6259** New environment variables controlling GC parameters
6260
6261GUILE_MAX_SEGMENT_SIZE Maximal segment size
6262 (default = 2097000)
6263
6264Allocation of 2-word cell heaps:
6265
6266GUILE_INIT_SEGMENT_SIZE_1 Size of initial heap segment in bytes
6267 (default = 360000)
6268
6269GUILE_MIN_YIELD_1 Minimum number of freed cells at each
6270 GC in percent of total heap size
6271 (default = 40)
6272
6273Allocation of 4-word cell heaps
6274(used for real numbers and misc other objects):
6275
6276GUILE_INIT_SEGMENT_SIZE_2, GUILE_MIN_YIELD_2
6277
6278(See entry "Way for application to customize GC parameters" under
6279 section "Changes to the scm_ interface" below.)
6280
67ef2dca
MD
6281** Guile now implements reals using 4-word cells
6282
6283This speeds up computation with reals. (They were earlier allocated
6284with `malloc'.) There is still some room for optimizations, however.
6285
6286** Some further steps toward POSIX thread support have been taken
6287
6288*** Guile's critical sections (SCM_DEFER/ALLOW_INTS)
6289don't have much effect any longer, and many of them will be removed in
6290next release.
6291
6292*** Signals
6293are only handled at the top of the evaluator loop, immediately after
6294I/O, and in scm_equalp.
6295
6296*** The GC can allocate thread private pools of pairs.
6297
0af43c4a
MD
6298* Changes to Scheme functions and syntax
6299
a0128ebe 6300** close-input-port and close-output-port are now R5RS
7c1e0b12 6301
a0128ebe 6302These procedures have been turned into primitives and have R5RS behaviour.
7c1e0b12 6303
0af43c4a
MD
6304** New procedure: simple-format PORT MESSAGE ARG1 ...
6305
6306(ice-9 boot) makes `format' an alias for `simple-format' until possibly
6307extended by the more sophisticated version in (ice-9 format)
6308
6309(simple-format port message . args)
6310Write MESSAGE to DESTINATION, defaulting to `current-output-port'.
6311MESSAGE can contain ~A (was %s) and ~S (was %S) escapes. When printed,
6312the escapes are replaced with corresponding members of ARGS:
6313~A formats using `display' and ~S formats using `write'.
6314If DESTINATION is #t, then use the `current-output-port',
6315if DESTINATION is #f, then return a string containing the formatted text.
6316Does not add a trailing newline."
6317
6318** string-ref: the second argument is no longer optional.
6319
6320** string, list->string: no longer accept strings in their arguments,
6321only characters, for compatibility with R5RS.
6322
6323** New procedure: port-closed? PORT
6324Returns #t if PORT is closed or #f if it is open.
6325
0a9e521f
MD
6326** Deprecated: list*
6327
6328The list* functionality is now provided by cons* (SRFI-1 compliant)
6329
b5074b23
MD
6330** New procedure: cons* ARG1 ARG2 ... ARGn
6331
6332Like `list', but the last arg provides the tail of the constructed list,
6333returning (cons ARG1 (cons ARG2 (cons ... ARGn))).
6334
6335Requires at least one argument. If given one argument, that argument
6336is returned as result.
6337
6338This function is called `list*' in some other Schemes and in Common LISP.
6339
341f78c9
MD
6340** Removed deprecated: serial-map, serial-array-copy!, serial-array-map!
6341
e8855f8d
MD
6342** New procedure: object-documentation OBJECT
6343
6344Returns the documentation string associated with OBJECT. The
6345procedure uses a caching mechanism so that subsequent lookups are
6346faster.
6347
6348Exported by (ice-9 documentation).
6349
6350** module-name now returns full names of modules
6351
6352Previously, only the last part of the name was returned (`session' for
6353`(ice-9 session)'). Ex: `(ice-9 session)'.
6354
894a712b
DH
6355* Changes to the gh_ interface
6356
6357** Deprecated: gh_int2scmb
6358
6359Use gh_bool2scm instead.
6360
a2349a28
GH
6361* Changes to the scm_ interface
6362
810e1aec
MD
6363** Guile primitives now carry docstrings!
6364
6365Thanks to Greg Badros!
6366
0a9e521f 6367** Guile primitives are defined in a new way: SCM_DEFINE/SCM_DEFINE1/SCM_PROC
0af43c4a 6368
0a9e521f
MD
6369Now Guile primitives are defined using the SCM_DEFINE/SCM_DEFINE1/SCM_PROC
6370macros and must contain a docstring that is extracted into foo.doc using a new
0af43c4a
MD
6371guile-doc-snarf script (that uses guile-doc-snarf.awk).
6372
0a9e521f
MD
6373However, a major overhaul of these macros is scheduled for the next release of
6374guile.
6375
0af43c4a
MD
6376** Guile primitives use a new technique for validation of arguments
6377
6378SCM_VALIDATE_* macros are defined to ease the redundancy and improve
6379the readability of argument checking.
6380
6381** All (nearly?) K&R prototypes for functions replaced with ANSI C equivalents.
6382
894a712b 6383** New macros: SCM_PACK, SCM_UNPACK
f8a72ca4
MD
6384
6385Compose/decompose an SCM value.
6386
894a712b
DH
6387The SCM type is now treated as an abstract data type and may be defined as a
6388long, a void* or as a struct, depending on the architecture and compile time
6389options. This makes it easier to find several types of bugs, for example when
6390SCM values are treated as integers without conversion. Values of the SCM type
6391should be treated as "atomic" values. These macros are used when
f8a72ca4
MD
6392composing/decomposing an SCM value, either because you want to access
6393individual bits, or because you want to treat it as an integer value.
6394
6395E.g., in order to set bit 7 in an SCM value x, use the expression
6396
6397 SCM_PACK (SCM_UNPACK (x) | 0x80)
6398
e11f8b42
DH
6399** The name property of hooks is deprecated.
6400Thus, the use of SCM_HOOK_NAME and scm_make_hook_with_name is deprecated.
6401
6402You can emulate this feature by using object properties.
6403
6c0201ad 6404** Deprecated macros: SCM_INPORTP, SCM_OUTPORTP, SCM_CRDY, SCM_ICHRP,
894a712b
DH
6405SCM_ICHR, SCM_MAKICHR, SCM_SETJMPBUF, SCM_NSTRINGP, SCM_NRWSTRINGP,
6406SCM_NVECTORP
f8a72ca4 6407
894a712b 6408These macros will be removed in a future release of Guile.
7c1e0b12 6409
6c0201ad 6410** The following types, functions and macros from numbers.h are deprecated:
0a9e521f
MD
6411scm_dblproc, SCM_UNEGFIXABLE, SCM_FLOBUFLEN, SCM_INEXP, SCM_CPLXP, SCM_REAL,
6412SCM_IMAG, SCM_REALPART, scm_makdbl, SCM_SINGP, SCM_NUM2DBL, SCM_NO_BIGDIG
6413
a2349a28
GH
6414** Port internals: the rw_random variable in the scm_port structure
6415must be set to non-zero in any random access port. In recent Guile
6416releases it was only set for bidirectional random-access ports.
6417
7dcb364d
GH
6418** Port internals: the seek ptob procedure is now responsible for
6419resetting the buffers if required. The change was made so that in the
6420special case of reading the current position (i.e., seek p 0 SEEK_CUR)
6421the fport and strport ptobs can avoid resetting the buffers,
6422in particular to avoid discarding unread chars. An existing port
6423type can be fixed by adding something like the following to the
6424beginning of the ptob seek procedure:
6425
6426 if (pt->rw_active == SCM_PORT_READ)
6427 scm_end_input (object);
6428 else if (pt->rw_active == SCM_PORT_WRITE)
6429 ptob->flush (object);
6430
6431although to actually avoid resetting the buffers and discard unread
6432chars requires further hacking that depends on the characteristics
6433of the ptob.
6434
894a712b
DH
6435** Deprecated functions: scm_fseek, scm_tag
6436
6437These functions are no longer used and will be removed in a future version.
6438
f25f761d
GH
6439** The scm_sysmissing procedure is no longer used in libguile.
6440Unless it turns out to be unexpectedly useful to somebody, it will be
6441removed in a future version.
6442
0af43c4a
MD
6443** The format of error message strings has changed
6444
6445The two C procedures: scm_display_error and scm_error, as well as the
6446primitive `scm-error', now use scm_simple_format to do their work.
6447This means that the message strings of all code must be updated to use
6448~A where %s was used before, and ~S where %S was used before.
6449
6450During the period when there still are a lot of old Guiles out there,
6451you might want to support both old and new versions of Guile.
6452
6453There are basically two methods to achieve this. Both methods use
6454autoconf. Put
6455
6456 AC_CHECK_FUNCS(scm_simple_format)
6457
6458in your configure.in.
6459
6460Method 1: Use the string concatenation features of ANSI C's
6461 preprocessor.
6462
6463In C:
6464
6465#ifdef HAVE_SCM_SIMPLE_FORMAT
6466#define FMT_S "~S"
6467#else
6468#define FMT_S "%S"
6469#endif
6470
6471Then represent each of your error messages using a preprocessor macro:
6472
6473#define E_SPIDER_ERROR "There's a spider in your " ## FMT_S ## "!!!"
6474
6475In Scheme:
6476
6477(define fmt-s (if (defined? 'simple-format) "~S" "%S"))
6478(define make-message string-append)
6479
6480(define e-spider-error (make-message "There's a spider in your " fmt-s "!!!"))
6481
6482Method 2: Use the oldfmt function found in doc/oldfmt.c.
6483
6484In C:
6485
6486scm_misc_error ("picnic", scm_c_oldfmt0 ("There's a spider in your ~S!!!"),
6487 ...);
6488
6489In Scheme:
6490
6491(scm-error 'misc-error "picnic" (oldfmt "There's a spider in your ~S!!!")
6492 ...)
6493
6494
f3b5e185
MD
6495** Deprecated: coop_mutex_init, coop_condition_variable_init
6496
6497Don't use the functions coop_mutex_init and
6498coop_condition_variable_init. They will change.
6499
6500Use scm_mutex_init and scm_cond_init instead.
6501
f3b5e185
MD
6502** New function: int scm_cond_timedwait (scm_cond_t *COND, scm_mutex_t *MUTEX, const struct timespec *ABSTIME)
6503 `scm_cond_timedwait' atomically unlocks MUTEX and waits on
6504 COND, as `scm_cond_wait' does, but it also bounds the duration
6505 of the wait. If COND has not been signaled before time ABSTIME,
6506 the mutex MUTEX is re-acquired and `scm_cond_timedwait'
6507 returns the error code `ETIMEDOUT'.
6508
6509 The ABSTIME parameter specifies an absolute time, with the same
6510 origin as `time' and `gettimeofday': an ABSTIME of 0 corresponds
6511 to 00:00:00 GMT, January 1, 1970.
6512
6513** New function: scm_cond_broadcast (scm_cond_t *COND)
6514 `scm_cond_broadcast' restarts all the threads that are waiting
6515 on the condition variable COND. Nothing happens if no threads are
6516 waiting on COND.
6517
6518** New function: scm_key_create (scm_key_t *KEY, void (*destr_function) (void *))
6519 `scm_key_create' allocates a new TSD key. The key is stored in
6520 the location pointed to by KEY. There is no limit on the number
6521 of keys allocated at a given time. The value initially associated
6522 with the returned key is `NULL' in all currently executing threads.
6523
6524 The DESTR_FUNCTION argument, if not `NULL', specifies a destructor
6525 function associated with the key. When a thread terminates,
6526 DESTR_FUNCTION is called on the value associated with the key in
6527 that thread. The DESTR_FUNCTION is not called if a key is deleted
6528 with `scm_key_delete' or a value is changed with
6529 `scm_setspecific'. The order in which destructor functions are
6530 called at thread termination time is unspecified.
6531
6532 Destructors are not yet implemented.
6533
6534** New function: scm_setspecific (scm_key_t KEY, const void *POINTER)
6535 `scm_setspecific' changes the value associated with KEY in the
6536 calling thread, storing the given POINTER instead.
6537
6538** New function: scm_getspecific (scm_key_t KEY)
6539 `scm_getspecific' returns the value currently associated with
6540 KEY in the calling thread.
6541
6542** New function: scm_key_delete (scm_key_t KEY)
6543 `scm_key_delete' deallocates a TSD key. It does not check
6544 whether non-`NULL' values are associated with that key in the
6545 currently executing threads, nor call the destructor function
6546 associated with the key.
6547
820920e6
MD
6548** New function: scm_c_hook_init (scm_c_hook_t *HOOK, void *HOOK_DATA, scm_c_hook_type_t TYPE)
6549
6550Initialize a C level hook HOOK with associated HOOK_DATA and type
6551TYPE. (See scm_c_hook_run ().)
6552
6553** New function: scm_c_hook_add (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA, int APPENDP)
6554
6555Add hook function FUNC with associated FUNC_DATA to HOOK. If APPENDP
6556is true, add it last, otherwise first. The same FUNC can be added
6557multiple times if FUNC_DATA differ and vice versa.
6558
6559** New function: scm_c_hook_remove (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA)
6560
6561Remove hook function FUNC with associated FUNC_DATA from HOOK. A
6562function is only removed if both FUNC and FUNC_DATA matches.
6563
6564** New function: void *scm_c_hook_run (scm_c_hook_t *HOOK, void *DATA)
6565
6566Run hook HOOK passing DATA to the hook functions.
6567
6568If TYPE is SCM_C_HOOK_NORMAL, all hook functions are run. The value
6569returned is undefined.
6570
6571If TYPE is SCM_C_HOOK_OR, hook functions are run until a function
6572returns a non-NULL value. This value is returned as the result of
6573scm_c_hook_run. If all functions return NULL, NULL is returned.
6574
6575If TYPE is SCM_C_HOOK_AND, hook functions are run until a function
6576returns a NULL value, and NULL is returned. If all functions returns
6577a non-NULL value, the last value is returned.
6578
6579** New C level GC hooks
6580
6581Five new C level hooks has been added to the garbage collector.
6582
6583 scm_before_gc_c_hook
6584 scm_after_gc_c_hook
6585
6586are run before locking and after unlocking the heap. The system is
6587thus in a mode where evaluation can take place. (Except that
6588scm_before_gc_c_hook must not allocate new cells.)
6589
6590 scm_before_mark_c_hook
6591 scm_before_sweep_c_hook
6592 scm_after_sweep_c_hook
6593
6594are run when the heap is locked. These are intended for extension of
6595the GC in a modular fashion. Examples are the weaks and guardians
6596modules.
6597
b5074b23
MD
6598** Way for application to customize GC parameters
6599
6600The application can set up other default values for the GC heap
6601allocation parameters
6602
6603 GUILE_INIT_HEAP_SIZE_1, GUILE_MIN_YIELD_1,
6604 GUILE_INIT_HEAP_SIZE_2, GUILE_MIN_YIELD_2,
6605 GUILE_MAX_SEGMENT_SIZE,
6606
6607by setting
6608
6609 scm_default_init_heap_size_1, scm_default_min_yield_1,
6610 scm_default_init_heap_size_2, scm_default_min_yield_2,
6611 scm_default_max_segment_size
6612
6613respectively before callong scm_boot_guile.
6614
6615(See entry "New environment variables ..." in section
6616"Changes to the stand-alone interpreter" above.)
6617
9704841c
MD
6618** scm_protect_object/scm_unprotect_object now nest
6619
67ef2dca
MD
6620This means that you can call scm_protect_object multiple times on an
6621object and count on the object being protected until
6622scm_unprotect_object has been call the same number of times.
6623
6624The functions also have better time complexity.
6625
6626Still, it is usually possible to structure the application in a way
6627that you don't need to use these functions. For example, if you use a
6628protected standard Guile list to keep track of live objects rather
6629than some custom data type, objects will die a natural death when they
6630are no longer needed.
6631
0a9e521f
MD
6632** Deprecated type tags: scm_tc16_flo, scm_tc_flo, scm_tc_dblr, scm_tc_dblc
6633
6634Guile does not provide the float representation for inexact real numbers any
6635more. Now, only doubles are used to represent inexact real numbers. Further,
6636the tag names scm_tc_dblr and scm_tc_dblc have been changed to scm_tc16_real
6637and scm_tc16_complex, respectively.
6638
341f78c9
MD
6639** Removed deprecated type scm_smobfuns
6640
6641** Removed deprecated function scm_newsmob
6642
b5074b23
MD
6643** Warning: scm_make_smob_type_mfpe might become deprecated in a future release
6644
6645There is an ongoing discussion among the developers whether to
6646deprecate `scm_make_smob_type_mfpe' or not. Please use the current
6647standard interface (scm_make_smob_type, scm_set_smob_XXX) in new code
6648until this issue has been settled.
6649
341f78c9
MD
6650** Removed deprecated type tag scm_tc16_kw
6651
2728d7f4
MD
6652** Added type tag scm_tc16_keyword
6653
6654(This was introduced already in release 1.3.4 but was not documented
6655 until now.)
6656
67ef2dca
MD
6657** gdb_print now prints "*** Guile not initialized ***" until Guile initialized
6658
f25f761d
GH
6659* Changes to system call interfaces:
6660
28d77376
GH
6661** The "select" procedure now tests port buffers for the ability to
6662provide input or accept output. Previously only the underlying file
6663descriptors were checked.
6664
bd9e24b3
GH
6665** New variable PIPE_BUF: the maximum number of bytes that can be
6666atomically written to a pipe.
6667
f25f761d
GH
6668** If a facility is not available on the system when Guile is
6669compiled, the corresponding primitive procedure will not be defined.
6670Previously it would have been defined but would throw a system-error
6671exception if called. Exception handlers which catch this case may
6672need minor modification: an error will be thrown with key
6673'unbound-variable instead of 'system-error. Alternatively it's
6674now possible to use `defined?' to check whether the facility is
6675available.
6676
38c1d3c4 6677** Procedures which depend on the timezone should now give the correct
6c0201ad 6678result on systems which cache the TZ environment variable, even if TZ
38c1d3c4
GH
6679is changed without calling tzset.
6680
5c11cc9d
GH
6681* Changes to the networking interfaces:
6682
6683** New functions: htons, ntohs, htonl, ntohl: for converting short and
6684long integers between network and host format. For now, it's not
6685particularly convenient to do this kind of thing, but consider:
6686
6687(define write-network-long
6688 (lambda (value port)
6689 (let ((v (make-uniform-vector 1 1 0)))
6690 (uniform-vector-set! v 0 (htonl value))
6691 (uniform-vector-write v port))))
6692
6693(define read-network-long
6694 (lambda (port)
6695 (let ((v (make-uniform-vector 1 1 0)))
6696 (uniform-vector-read! v port)
6697 (ntohl (uniform-vector-ref v 0)))))
6698
6699** If inet-aton fails, it now throws an error with key 'misc-error
6700instead of 'system-error, since errno is not relevant.
6701
6702** Certain gethostbyname/gethostbyaddr failures now throw errors with
6703specific keys instead of 'system-error. The latter is inappropriate
6704since errno will not have been set. The keys are:
afe5177e 6705'host-not-found, 'try-again, 'no-recovery and 'no-data.
5c11cc9d
GH
6706
6707** sethostent, setnetent, setprotoent, setservent: now take an
6708optional argument STAYOPEN, which specifies whether the database
6709remains open after a database entry is accessed randomly (e.g., using
6710gethostbyname for the hosts database.) The default is #f. Previously
6711#t was always used.
6712
cc36e791 6713\f
43fa9a05
JB
6714Changes since Guile 1.3.2:
6715
0fdcbcaa
MD
6716* Changes to the stand-alone interpreter
6717
6718** Debugger
6719
6720An initial version of the Guile debugger written by Chris Hanson has
6721been added. The debugger is still under development but is included
6722in the distribution anyway since it is already quite useful.
6723
6724Type
6725
6726 (debug)
6727
6728after an error to enter the debugger. Type `help' inside the debugger
6729for a description of available commands.
6730
6731If you prefer to have stack frames numbered and printed in
6732anti-chronological order and prefer up in the stack to be down on the
6733screen as is the case in gdb, you can put
6734
6735 (debug-enable 'backwards)
6736
6737in your .guile startup file. (However, this means that Guile can't
6738use indentation to indicate stack level.)
6739
6740The debugger is autoloaded into Guile at the first use.
6741
6742** Further enhancements to backtraces
6743
6744There is a new debug option `width' which controls the maximum width
6745on the screen of printed stack frames. Fancy printing parameters
6746("level" and "length" as in Common LISP) are adaptively adjusted for
6747each stack frame to give maximum information while still fitting
6748within the bounds. If the stack frame can't be made to fit by
6749adjusting parameters, it is simply cut off at the end. This is marked
6750with a `$'.
6751
6752** Some modules are now only loaded when the repl is started
6753
6754The modules (ice-9 debug), (ice-9 session), (ice-9 threads) and (ice-9
6755regex) are now loaded into (guile-user) only if the repl has been
6756started. The effect is that the startup time for scripts has been
6757reduced to 30% of what it was previously.
6758
6759Correctly written scripts load the modules they require at the top of
6760the file and should not be affected by this change.
6761
ece41168
MD
6762** Hooks are now represented as smobs
6763
6822fe53
MD
6764* Changes to Scheme functions and syntax
6765
0ce204b0
MV
6766** Readline support has changed again.
6767
6768The old (readline-activator) module is gone. Use (ice-9 readline)
6769instead, which now contains all readline functionality. So the code
6770to activate readline is now
6771
6772 (use-modules (ice-9 readline))
6773 (activate-readline)
6774
6775This should work at any time, including from the guile prompt.
6776
5d195868
JB
6777To avoid confusion about the terms of Guile's license, please only
6778enable readline for your personal use; please don't make it the
6779default for others. Here is why we make this rather odd-sounding
6780request:
6781
6782Guile is normally licensed under a weakened form of the GNU General
6783Public License, which allows you to link code with Guile without
6784placing that code under the GPL. This exception is important to some
6785people.
6786
6787However, since readline is distributed under the GNU General Public
6788License, when you link Guile with readline, either statically or
6789dynamically, you effectively change Guile's license to the strict GPL.
6790Whenever you link any strictly GPL'd code into Guile, uses of Guile
6791which are normally permitted become forbidden. This is a rather
6792non-obvious consequence of the licensing terms.
6793
6794So, to make sure things remain clear, please let people choose for
6795themselves whether to link GPL'd libraries like readline with Guile.
6796
25b0654e
JB
6797** regexp-substitute/global has changed slightly, but incompatibly.
6798
6799If you include a function in the item list, the string of the match
6800object it receives is the same string passed to
6801regexp-substitute/global, not some suffix of that string.
6802Correspondingly, the match's positions are relative to the entire
6803string, not the suffix.
6804
6805If the regexp can match the empty string, the way matches are chosen
6806from the string has changed. regexp-substitute/global recognizes the
6807same set of matches that list-matches does; see below.
6808
6809** New function: list-matches REGEXP STRING [FLAGS]
6810
6811Return a list of match objects, one for every non-overlapping, maximal
6812match of REGEXP in STRING. The matches appear in left-to-right order.
6813list-matches only reports matches of the empty string if there are no
6814other matches which begin on, end at, or include the empty match's
6815position.
6816
6817If present, FLAGS is passed as the FLAGS argument to regexp-exec.
6818
6819** New function: fold-matches REGEXP STRING INIT PROC [FLAGS]
6820
6821For each match of REGEXP in STRING, apply PROC to the match object,
6822and the last value PROC returned, or INIT for the first call. Return
6823the last value returned by PROC. We apply PROC to the matches as they
6824appear from left to right.
6825
6826This function recognizes matches according to the same criteria as
6827list-matches.
6828
6829Thus, you could define list-matches like this:
6830
6831 (define (list-matches regexp string . flags)
6832 (reverse! (apply fold-matches regexp string '() cons flags)))
6833
6834If present, FLAGS is passed as the FLAGS argument to regexp-exec.
6835
bc848f7f
MD
6836** Hooks
6837
6838*** New function: hook? OBJ
6839
6840Return #t if OBJ is a hook, otherwise #f.
6841
ece41168
MD
6842*** New function: make-hook-with-name NAME [ARITY]
6843
6844Return a hook with name NAME and arity ARITY. The default value for
6845ARITY is 0. The only effect of NAME is that it will appear when the
6846hook object is printed to ease debugging.
6847
bc848f7f
MD
6848*** New function: hook-empty? HOOK
6849
6850Return #t if HOOK doesn't contain any procedures, otherwise #f.
6851
6852*** New function: hook->list HOOK
6853
6854Return a list of the procedures that are called when run-hook is
6855applied to HOOK.
6856
b074884f
JB
6857** `map' signals an error if its argument lists are not all the same length.
6858
6859This is the behavior required by R5RS, so this change is really a bug
6860fix. But it seems to affect a lot of people's code, so we're
6861mentioning it here anyway.
6862
6822fe53
MD
6863** Print-state handling has been made more transparent
6864
6865Under certain circumstances, ports are represented as a port with an
6866associated print state. Earlier, this pair was represented as a pair
6867(see "Some magic has been added to the printer" below). It is now
6868indistinguishable (almost; see `get-print-state') from a port on the
6869user level.
6870
6871*** New function: port-with-print-state OUTPUT-PORT PRINT-STATE
6872
6873Return a new port with the associated print state PRINT-STATE.
6874
6875*** New function: get-print-state OUTPUT-PORT
6876
6877Return the print state associated with this port if it exists,
6878otherwise return #f.
6879
340a8770 6880*** New function: directory-stream? OBJECT
77242ff9 6881
340a8770 6882Returns true iff OBJECT is a directory stream --- the sort of object
77242ff9
GH
6883returned by `opendir'.
6884
0fdcbcaa
MD
6885** New function: using-readline?
6886
6887Return #t if readline is in use in the current repl.
6888
26405bc1
MD
6889** structs will be removed in 1.4
6890
6891Structs will be replaced in Guile 1.4. We will merge GOOPS into Guile
6892and use GOOPS objects as the fundamental record type.
6893
49199eaa
MD
6894* Changes to the scm_ interface
6895
26405bc1
MD
6896** structs will be removed in 1.4
6897
6898The entire current struct interface (struct.c, struct.h) will be
6899replaced in Guile 1.4. We will merge GOOPS into libguile and use
6900GOOPS objects as the fundamental record type.
6901
49199eaa
MD
6902** The internal representation of subr's has changed
6903
6904Instead of giving a hint to the subr name, the CAR field of the subr
6905now contains an index to a subr entry in scm_subr_table.
6906
6907*** New variable: scm_subr_table
6908
6909An array of subr entries. A subr entry contains the name, properties
6910and documentation associated with the subr. The properties and
6911documentation slots are not yet used.
6912
6913** A new scheme for "forwarding" calls to a builtin to a generic function
6914
6915It is now possible to extend the functionality of some Guile
6916primitives by letting them defer a call to a GOOPS generic function on
240ed66f 6917argument mismatch. This means that there is no loss of efficiency in
daf516d6 6918normal evaluation.
49199eaa
MD
6919
6920Example:
6921
daf516d6 6922 (use-modules (oop goops)) ; Must be GOOPS version 0.2.
49199eaa
MD
6923 (define-method + ((x <string>) (y <string>))
6924 (string-append x y))
6925
86a4d62e
MD
6926+ will still be as efficient as usual in numerical calculations, but
6927can also be used for concatenating strings.
49199eaa 6928
86a4d62e 6929Who will be the first one to extend Guile's numerical tower to
daf516d6
MD
6930rationals? :) [OK, there a few other things to fix before this can
6931be made in a clean way.]
49199eaa
MD
6932
6933*** New snarf macros for defining primitives: SCM_GPROC, SCM_GPROC1
6934
6935 New macro: SCM_GPROC (CNAME, SNAME, REQ, OPT, VAR, CFUNC, GENERIC)
6936
6937 New macro: SCM_GPROC1 (CNAME, SNAME, TYPE, CFUNC, GENERIC)
6938
d02cafe7 6939These do the same job as SCM_PROC and SCM_PROC1, but they also define
49199eaa
MD
6940a variable GENERIC which can be used by the dispatch macros below.
6941
6942[This is experimental code which may change soon.]
6943
6944*** New macros for forwarding control to a generic on arg type error
6945
6946 New macro: SCM_WTA_DISPATCH_1 (GENERIC, ARG1, POS, SUBR)
6947
6948 New macro: SCM_WTA_DISPATCH_2 (GENERIC, ARG1, ARG2, POS, SUBR)
6949
6950These correspond to the scm_wta function call, and have the same
6951behaviour until the user has called the GOOPS primitive
6952`enable-primitive-generic!'. After that, these macros will apply the
6953generic function GENERIC to the argument(s) instead of calling
6954scm_wta.
6955
6956[This is experimental code which may change soon.]
6957
6958*** New macros for argument testing with generic dispatch
6959
6960 New macro: SCM_GASSERT1 (COND, GENERIC, ARG1, POS, SUBR)
6961
6962 New macro: SCM_GASSERT2 (COND, GENERIC, ARG1, ARG2, POS, SUBR)
6963
6964These correspond to the SCM_ASSERT macro, but will defer control to
6965GENERIC on error after `enable-primitive-generic!' has been called.
6966
6967[This is experimental code which may change soon.]
6968
6969** New function: SCM scm_eval_body (SCM body, SCM env)
6970
6971Evaluates the body of a special form.
6972
6973** The internal representation of struct's has changed
6974
6975Previously, four slots were allocated for the procedure(s) of entities
6976and operators. The motivation for this representation had to do with
6977the structure of the evaluator, the wish to support tail-recursive
6978generic functions, and efficiency. Since the generic function
6979dispatch mechanism has changed, there is no longer a need for such an
6980expensive representation, and the representation has been simplified.
6981
6982This should not make any difference for most users.
6983
6984** GOOPS support has been cleaned up.
6985
6986Some code has been moved from eval.c to objects.c and code in both of
6987these compilation units has been cleaned up and better structured.
6988
6989*** New functions for applying generic functions
6990
6991 New function: SCM scm_apply_generic (GENERIC, ARGS)
6992 New function: SCM scm_call_generic_0 (GENERIC)
6993 New function: SCM scm_call_generic_1 (GENERIC, ARG1)
6994 New function: SCM scm_call_generic_2 (GENERIC, ARG1, ARG2)
6995 New function: SCM scm_call_generic_3 (GENERIC, ARG1, ARG2, ARG3)
6996
ece41168
MD
6997** Deprecated function: scm_make_named_hook
6998
6999It is now replaced by:
7000
7001** New function: SCM scm_create_hook (const char *name, int arity)
7002
7003Creates a hook in the same way as make-hook above but also
7004binds a variable named NAME to it.
7005
7006This is the typical way of creating a hook from C code.
7007
7008Currently, the variable is created in the "current" module.
7009This might change when we get the new module system.
7010
7011[The behaviour is identical to scm_make_named_hook.]
7012
7013
43fa9a05 7014\f
f3227c7a
JB
7015Changes since Guile 1.3:
7016
6ca345f3
JB
7017* Changes to mailing lists
7018
7019** Some of the Guile mailing lists have moved to sourceware.cygnus.com.
7020
7021See the README file to find current addresses for all the Guile
7022mailing lists.
7023
d77fb593
JB
7024* Changes to the distribution
7025
1d335863
JB
7026** Readline support is no longer included with Guile by default.
7027
7028Based on the different license terms of Guile and Readline, we
7029concluded that Guile should not *by default* cause the linking of
7030Readline into an application program. Readline support is now offered
7031as a separate module, which is linked into an application only when
7032you explicitly specify it.
7033
7034Although Guile is GNU software, its distribution terms add a special
7035exception to the usual GNU General Public License (GPL). Guile's
7036license includes a clause that allows you to link Guile with non-free
7037programs. We add this exception so as not to put Guile at a
7038disadvantage vis-a-vis other extensibility packages that support other
7039languages.
7040
7041In contrast, the GNU Readline library is distributed under the GNU
7042General Public License pure and simple. This means that you may not
7043link Readline, even dynamically, into an application unless it is
7044distributed under a free software license that is compatible the GPL.
7045
7046Because of this difference in distribution terms, an application that
7047can use Guile may not be able to use Readline. Now users will be
7048explicitly offered two independent decisions about the use of these
7049two packages.
d77fb593 7050
0e8a8468
MV
7051You can activate the readline support by issuing
7052
7053 (use-modules (readline-activator))
7054 (activate-readline)
7055
7056from your ".guile" file, for example.
7057
e4eae9b1
MD
7058* Changes to the stand-alone interpreter
7059
67ad463a
MD
7060** All builtins now print as primitives.
7061Previously builtin procedures not belonging to the fundamental subr
7062types printed as #<compiled closure #<primitive-procedure gsubr-apply>>.
7063Now, they print as #<primitive-procedure NAME>.
7064
7065** Backtraces slightly more intelligible.
7066gsubr-apply and macro transformer application frames no longer appear
7067in backtraces.
7068
69c6acbb
JB
7069* Changes to Scheme functions and syntax
7070
2a52b429
MD
7071** Guile now correctly handles internal defines by rewriting them into
7072their equivalent letrec. Previously, internal defines would
7073incrementally add to the innermost environment, without checking
7074whether the restrictions specified in RnRS were met. This lead to the
7075correct behaviour when these restriction actually were met, but didn't
7076catch all illegal uses. Such an illegal use could lead to crashes of
b3da54d1 7077the Guile interpreter or other unwanted results. An example of
2a52b429
MD
7078incorrect internal defines that made Guile behave erratically:
7079
7080 (let ()
7081 (define a 1)
7082 (define (b) a)
7083 (define c (1+ (b)))
7084 (define d 3)
7085
7086 (b))
7087
7088 => 2
7089
7090The problem with this example is that the definition of `c' uses the
7091value of `b' directly. This confuses the meoization machine of Guile
7092so that the second call of `b' (this time in a larger environment that
7093also contains bindings for `c' and `d') refers to the binding of `c'
7094instead of `a'. You could also make Guile crash with a variation on
7095this theme:
7096
7097 (define (foo flag)
7098 (define a 1)
7099 (define (b flag) (if flag a 1))
7100 (define c (1+ (b flag)))
7101 (define d 3)
7102
7103 (b #t))
7104
7105 (foo #f)
7106 (foo #t)
7107
7108From now on, Guile will issue an `Unbound variable: b' error message
7109for both examples.
7110
36d3d540
MD
7111** Hooks
7112
7113A hook contains a list of functions which should be called on
7114particular occasions in an existing program. Hooks are used for
7115customization.
7116
7117A window manager might have a hook before-window-map-hook. The window
7118manager uses the function run-hooks to call all functions stored in
7119before-window-map-hook each time a window is mapped. The user can
7120store functions in the hook using add-hook!.
7121
7122In Guile, hooks are first class objects.
7123
7124*** New function: make-hook [N_ARGS]
7125
7126Return a hook for hook functions which can take N_ARGS arguments.
7127The default value for N_ARGS is 0.
7128
ad91d6c3
MD
7129(See also scm_make_named_hook below.)
7130
36d3d540
MD
7131*** New function: add-hook! HOOK PROC [APPEND_P]
7132
7133Put PROC at the beginning of the list of functions stored in HOOK.
7134If APPEND_P is supplied, and non-false, put PROC at the end instead.
7135
7136PROC must be able to take the number of arguments specified when the
7137hook was created.
7138
7139If PROC already exists in HOOK, then remove it first.
7140
7141*** New function: remove-hook! HOOK PROC
7142
7143Remove PROC from the list of functions in HOOK.
7144
7145*** New function: reset-hook! HOOK
7146
7147Clear the list of hook functions stored in HOOK.
7148
7149*** New function: run-hook HOOK ARG1 ...
7150
7151Run all hook functions stored in HOOK with arguments ARG1 ... .
7152The number of arguments supplied must correspond to the number given
7153when the hook was created.
7154
56a19408
MV
7155** The function `dynamic-link' now takes optional keyword arguments.
7156 The only keyword argument that is currently defined is `:global
7157 BOOL'. With it, you can control whether the shared library will be
7158 linked in global mode or not. In global mode, the symbols from the
7159 linked library can be used to resolve references from other
7160 dynamically linked libraries. In non-global mode, the linked
7161 library is essentially invisible and can only be accessed via
7162 `dynamic-func', etc. The default is now to link in global mode.
7163 Previously, the default has been non-global mode.
7164
7165 The `#:global' keyword is only effective on platforms that support
7166 the dlopen family of functions.
7167
ad226f25 7168** New function `provided?'
b7e13f65
JB
7169
7170 - Function: provided? FEATURE
7171 Return true iff FEATURE is supported by this installation of
7172 Guile. FEATURE must be a symbol naming a feature; the global
7173 variable `*features*' is a list of available features.
7174
ad226f25
JB
7175** Changes to the module (ice-9 expect):
7176
7177*** The expect-strings macro now matches `$' in a regular expression
7178 only at a line-break or end-of-file by default. Previously it would
ab711359
JB
7179 match the end of the string accumulated so far. The old behaviour
7180 can be obtained by setting the variable `expect-strings-exec-flags'
7181 to 0.
ad226f25
JB
7182
7183*** The expect-strings macro now uses a variable `expect-strings-exec-flags'
7184 for the regexp-exec flags. If `regexp/noteol' is included, then `$'
7185 in a regular expression will still match before a line-break or
7186 end-of-file. The default is `regexp/noteol'.
7187
6c0201ad 7188*** The expect-strings macro now uses a variable
ad226f25
JB
7189 `expect-strings-compile-flags' for the flags to be supplied to
7190 `make-regexp'. The default is `regexp/newline', which was previously
7191 hard-coded.
7192
7193*** The expect macro now supplies two arguments to a match procedure:
ab711359
JB
7194 the current accumulated string and a flag to indicate whether
7195 end-of-file has been reached. Previously only the string was supplied.
7196 If end-of-file is reached, the match procedure will be called an
7197 additional time with the same accumulated string as the previous call
7198 but with the flag set.
ad226f25 7199
b7e13f65
JB
7200** New module (ice-9 format), implementing the Common Lisp `format' function.
7201
7202This code, and the documentation for it that appears here, was
7203borrowed from SLIB, with minor adaptations for Guile.
7204
7205 - Function: format DESTINATION FORMAT-STRING . ARGUMENTS
7206 An almost complete implementation of Common LISP format description
7207 according to the CL reference book `Common LISP' from Guy L.
7208 Steele, Digital Press. Backward compatible to most of the
7209 available Scheme format implementations.
7210
7211 Returns `#t', `#f' or a string; has side effect of printing
7212 according to FORMAT-STRING. If DESTINATION is `#t', the output is
7213 to the current output port and `#t' is returned. If DESTINATION
7214 is `#f', a formatted string is returned as the result of the call.
7215 NEW: If DESTINATION is a string, DESTINATION is regarded as the
7216 format string; FORMAT-STRING is then the first argument and the
7217 output is returned as a string. If DESTINATION is a number, the
7218 output is to the current error port if available by the
7219 implementation. Otherwise DESTINATION must be an output port and
7220 `#t' is returned.
7221
7222 FORMAT-STRING must be a string. In case of a formatting error
7223 format returns `#f' and prints a message on the current output or
7224 error port. Characters are output as if the string were output by
7225 the `display' function with the exception of those prefixed by a
7226 tilde (~). For a detailed description of the FORMAT-STRING syntax
7227 please consult a Common LISP format reference manual. For a test
7228 suite to verify this format implementation load `formatst.scm'.
7229 Please send bug reports to `lutzeb@cs.tu-berlin.de'.
7230
7231 Note: `format' is not reentrant, i.e. only one `format'-call may
7232 be executed at a time.
7233
7234
7235*** Format Specification (Format version 3.0)
7236
7237 Please consult a Common LISP format reference manual for a detailed
7238description of the format string syntax. For a demonstration of the
7239implemented directives see `formatst.scm'.
7240
7241 This implementation supports directive parameters and modifiers (`:'
7242and `@' characters). Multiple parameters must be separated by a comma
7243(`,'). Parameters can be numerical parameters (positive or negative),
7244character parameters (prefixed by a quote character (`''), variable
7245parameters (`v'), number of rest arguments parameter (`#'), empty and
7246default parameters. Directive characters are case independent. The
7247general form of a directive is:
7248
7249DIRECTIVE ::= ~{DIRECTIVE-PARAMETER,}[:][@]DIRECTIVE-CHARACTER
7250
7251DIRECTIVE-PARAMETER ::= [ [-|+]{0-9}+ | 'CHARACTER | v | # ]
7252
7253*** Implemented CL Format Control Directives
7254
7255 Documentation syntax: Uppercase characters represent the
7256corresponding control directive characters. Lowercase characters
7257represent control directive parameter descriptions.
7258
7259`~A'
7260 Any (print as `display' does).
7261 `~@A'
7262 left pad.
7263
7264 `~MINCOL,COLINC,MINPAD,PADCHARA'
7265 full padding.
7266
7267`~S'
7268 S-expression (print as `write' does).
7269 `~@S'
7270 left pad.
7271
7272 `~MINCOL,COLINC,MINPAD,PADCHARS'
7273 full padding.
7274
7275`~D'
7276 Decimal.
7277 `~@D'
7278 print number sign always.
7279
7280 `~:D'
7281 print comma separated.
7282
7283 `~MINCOL,PADCHAR,COMMACHARD'
7284 padding.
7285
7286`~X'
7287 Hexadecimal.
7288 `~@X'
7289 print number sign always.
7290
7291 `~:X'
7292 print comma separated.
7293
7294 `~MINCOL,PADCHAR,COMMACHARX'
7295 padding.
7296
7297`~O'
7298 Octal.
7299 `~@O'
7300 print number sign always.
7301
7302 `~:O'
7303 print comma separated.
7304
7305 `~MINCOL,PADCHAR,COMMACHARO'
7306 padding.
7307
7308`~B'
7309 Binary.
7310 `~@B'
7311 print number sign always.
7312
7313 `~:B'
7314 print comma separated.
7315
7316 `~MINCOL,PADCHAR,COMMACHARB'
7317 padding.
7318
7319`~NR'
7320 Radix N.
7321 `~N,MINCOL,PADCHAR,COMMACHARR'
7322 padding.
7323
7324`~@R'
7325 print a number as a Roman numeral.
7326
7327`~:@R'
7328 print a number as an "old fashioned" Roman numeral.
7329
7330`~:R'
7331 print a number as an ordinal English number.
7332
7333`~:@R'
7334 print a number as a cardinal English number.
7335
7336`~P'
7337 Plural.
7338 `~@P'
7339 prints `y' and `ies'.
7340
7341 `~:P'
7342 as `~P but jumps 1 argument backward.'
7343
7344 `~:@P'
7345 as `~@P but jumps 1 argument backward.'
7346
7347`~C'
7348 Character.
7349 `~@C'
7350 prints a character as the reader can understand it (i.e. `#\'
7351 prefixing).
7352
7353 `~:C'
7354 prints a character as emacs does (eg. `^C' for ASCII 03).
7355
7356`~F'
7357 Fixed-format floating-point (prints a flonum like MMM.NNN).
7358 `~WIDTH,DIGITS,SCALE,OVERFLOWCHAR,PADCHARF'
7359 `~@F'
7360 If the number is positive a plus sign is printed.
7361
7362`~E'
7363 Exponential floating-point (prints a flonum like MMM.NNN`E'EE).
7364 `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARE'
7365 `~@E'
7366 If the number is positive a plus sign is printed.
7367
7368`~G'
7369 General floating-point (prints a flonum either fixed or
7370 exponential).
7371 `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARG'
7372 `~@G'
7373 If the number is positive a plus sign is printed.
7374
7375`~$'
7376 Dollars floating-point (prints a flonum in fixed with signs
7377 separated).
7378 `~DIGITS,SCALE,WIDTH,PADCHAR$'
7379 `~@$'
7380 If the number is positive a plus sign is printed.
7381
7382 `~:@$'
7383 A sign is always printed and appears before the padding.
7384
7385 `~:$'
7386 The sign appears before the padding.
7387
7388`~%'
7389 Newline.
7390 `~N%'
7391 print N newlines.
7392
7393`~&'
7394 print newline if not at the beginning of the output line.
7395 `~N&'
7396 prints `~&' and then N-1 newlines.
7397
7398`~|'
7399 Page Separator.
7400 `~N|'
7401 print N page separators.
7402
7403`~~'
7404 Tilde.
7405 `~N~'
7406 print N tildes.
7407
7408`~'<newline>
7409 Continuation Line.
7410 `~:'<newline>
7411 newline is ignored, white space left.
7412
7413 `~@'<newline>
7414 newline is left, white space ignored.
7415
7416`~T'
7417 Tabulation.
7418 `~@T'
7419 relative tabulation.
7420
7421 `~COLNUM,COLINCT'
7422 full tabulation.
7423
7424`~?'
7425 Indirection (expects indirect arguments as a list).
7426 `~@?'
7427 extracts indirect arguments from format arguments.
7428
7429`~(STR~)'
7430 Case conversion (converts by `string-downcase').
7431 `~:(STR~)'
7432 converts by `string-capitalize'.
7433
7434 `~@(STR~)'
7435 converts by `string-capitalize-first'.
7436
7437 `~:@(STR~)'
7438 converts by `string-upcase'.
7439
7440`~*'
7441 Argument Jumping (jumps 1 argument forward).
7442 `~N*'
7443 jumps N arguments forward.
7444
7445 `~:*'
7446 jumps 1 argument backward.
7447
7448 `~N:*'
7449 jumps N arguments backward.
7450
7451 `~@*'
7452 jumps to the 0th argument.
7453
7454 `~N@*'
7455 jumps to the Nth argument (beginning from 0)
7456
7457`~[STR0~;STR1~;...~;STRN~]'
7458 Conditional Expression (numerical clause conditional).
7459 `~N['
7460 take argument from N.
7461
7462 `~@['
7463 true test conditional.
7464
7465 `~:['
7466 if-else-then conditional.
7467
7468 `~;'
7469 clause separator.
7470
7471 `~:;'
7472 default clause follows.
7473
7474`~{STR~}'
7475 Iteration (args come from the next argument (a list)).
7476 `~N{'
7477 at most N iterations.
7478
7479 `~:{'
7480 args from next arg (a list of lists).
7481
7482 `~@{'
7483 args from the rest of arguments.
7484
7485 `~:@{'
7486 args from the rest args (lists).
7487
7488`~^'
7489 Up and out.
7490 `~N^'
7491 aborts if N = 0
7492
7493 `~N,M^'
7494 aborts if N = M
7495
7496 `~N,M,K^'
7497 aborts if N <= M <= K
7498
7499*** Not Implemented CL Format Control Directives
7500
7501`~:A'
7502 print `#f' as an empty list (see below).
7503
7504`~:S'
7505 print `#f' as an empty list (see below).
7506
7507`~<~>'
7508 Justification.
7509
7510`~:^'
7511 (sorry I don't understand its semantics completely)
7512
7513*** Extended, Replaced and Additional Control Directives
7514
7515`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHD'
7516`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHX'
7517`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHO'
7518`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHB'
7519`~N,MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHR'
7520 COMMAWIDTH is the number of characters between two comma
7521 characters.
7522
7523`~I'
7524 print a R4RS complex number as `~F~@Fi' with passed parameters for
7525 `~F'.
7526
7527`~Y'
7528 Pretty print formatting of an argument for scheme code lists.
7529
7530`~K'
7531 Same as `~?.'
7532
7533`~!'
7534 Flushes the output if format DESTINATION is a port.
7535
7536`~_'
7537 Print a `#\space' character
7538 `~N_'
7539 print N `#\space' characters.
7540
7541`~/'
7542 Print a `#\tab' character
7543 `~N/'
7544 print N `#\tab' characters.
7545
7546`~NC'
7547 Takes N as an integer representation for a character. No arguments
7548 are consumed. N is converted to a character by `integer->char'. N
7549 must be a positive decimal number.
7550
7551`~:S'
7552 Print out readproof. Prints out internal objects represented as
7553 `#<...>' as strings `"#<...>"' so that the format output can always
7554 be processed by `read'.
7555
7556`~:A'
7557 Print out readproof. Prints out internal objects represented as
7558 `#<...>' as strings `"#<...>"' so that the format output can always
7559 be processed by `read'.
7560
7561`~Q'
7562 Prints information and a copyright notice on the format
7563 implementation.
7564 `~:Q'
7565 prints format version.
7566
7567`~F, ~E, ~G, ~$'
7568 may also print number strings, i.e. passing a number as a string
7569 and format it accordingly.
7570
7571*** Configuration Variables
7572
7573 The format module exports some configuration variables to suit the
7574systems and users needs. There should be no modification necessary for
7575the configuration that comes with Guile. Format detects automatically
7576if the running scheme system implements floating point numbers and
7577complex numbers.
7578
7579format:symbol-case-conv
7580 Symbols are converted by `symbol->string' so the case type of the
7581 printed symbols is implementation dependent.
7582 `format:symbol-case-conv' is a one arg closure which is either
7583 `#f' (no conversion), `string-upcase', `string-downcase' or
7584 `string-capitalize'. (default `#f')
7585
7586format:iobj-case-conv
7587 As FORMAT:SYMBOL-CASE-CONV but applies for the representation of
7588 implementation internal objects. (default `#f')
7589
7590format:expch
7591 The character prefixing the exponent value in `~E' printing.
7592 (default `#\E')
7593
7594*** Compatibility With Other Format Implementations
7595
7596SLIB format 2.x:
7597 See `format.doc'.
7598
7599SLIB format 1.4:
7600 Downward compatible except for padding support and `~A', `~S',
7601 `~P', `~X' uppercase printing. SLIB format 1.4 uses C-style
7602 `printf' padding support which is completely replaced by the CL
7603 `format' padding style.
7604
7605MIT C-Scheme 7.1:
7606 Downward compatible except for `~', which is not documented
7607 (ignores all characters inside the format string up to a newline
7608 character). (7.1 implements `~a', `~s', ~NEWLINE, `~~', `~%',
7609 numerical and variable parameters and `:/@' modifiers in the CL
7610 sense).
7611
7612Elk 1.5/2.0:
7613 Downward compatible except for `~A' and `~S' which print in
7614 uppercase. (Elk implements `~a', `~s', `~~', and `~%' (no
7615 directive parameters or modifiers)).
7616
7617Scheme->C 01nov91:
7618 Downward compatible except for an optional destination parameter:
7619 S2C accepts a format call without a destination which returns a
7620 formatted string. This is equivalent to a #f destination in S2C.
7621 (S2C implements `~a', `~s', `~c', `~%', and `~~' (no directive
7622 parameters or modifiers)).
7623
7624
e7d37b0a 7625** Changes to string-handling functions.
b7e13f65 7626
e7d37b0a 7627These functions were added to support the (ice-9 format) module, above.
b7e13f65 7628
e7d37b0a
JB
7629*** New function: string-upcase STRING
7630*** New function: string-downcase STRING
b7e13f65 7631
e7d37b0a
JB
7632These are non-destructive versions of the existing string-upcase! and
7633string-downcase! functions.
b7e13f65 7634
e7d37b0a
JB
7635*** New function: string-capitalize! STRING
7636*** New function: string-capitalize STRING
7637
7638These functions convert the first letter of each word in the string to
7639upper case. Thus:
7640
7641 (string-capitalize "howdy there")
7642 => "Howdy There"
7643
7644As with the other functions, string-capitalize! modifies the string in
7645place, while string-capitalize returns a modified copy of its argument.
7646
7647*** New function: string-ci->symbol STRING
7648
7649Return a symbol whose name is STRING, but having the same case as if
7650the symbol had be read by `read'.
7651
7652Guile can be configured to be sensitive or insensitive to case
7653differences in Scheme identifiers. If Guile is case-insensitive, all
7654symbols are converted to lower case on input. The `string-ci->symbol'
7655function returns a symbol whose name in STRING, transformed as Guile
7656would if STRING were input.
7657
7658*** New function: substring-move! STRING1 START END STRING2 START
7659
7660Copy the substring of STRING1 from START (inclusive) to END
7661(exclusive) to STRING2 at START. STRING1 and STRING2 may be the same
7662string, and the source and destination areas may overlap; in all
7663cases, the function behaves as if all the characters were copied
7664simultanously.
7665
6c0201ad 7666*** Extended functions: substring-move-left! substring-move-right!
e7d37b0a
JB
7667
7668These functions now correctly copy arbitrarily overlapping substrings;
7669they are both synonyms for substring-move!.
b7e13f65 7670
b7e13f65 7671
deaceb4e
JB
7672** New module (ice-9 getopt-long), with the function `getopt-long'.
7673
7674getopt-long is a function for parsing command-line arguments in a
7675manner consistent with other GNU programs.
7676
7677(getopt-long ARGS GRAMMAR)
7678Parse the arguments ARGS according to the argument list grammar GRAMMAR.
7679
7680ARGS should be a list of strings. Its first element should be the
7681name of the program; subsequent elements should be the arguments
7682that were passed to the program on the command line. The
7683`program-arguments' procedure returns a list of this form.
7684
7685GRAMMAR is a list of the form:
7686((OPTION (PROPERTY VALUE) ...) ...)
7687
7688Each OPTION should be a symbol. `getopt-long' will accept a
7689command-line option named `--OPTION'.
7690Each option can have the following (PROPERTY VALUE) pairs:
7691
7692 (single-char CHAR) --- Accept `-CHAR' as a single-character
7693 equivalent to `--OPTION'. This is how to specify traditional
7694 Unix-style flags.
7695 (required? BOOL) --- If BOOL is true, the option is required.
7696 getopt-long will raise an error if it is not found in ARGS.
7697 (value BOOL) --- If BOOL is #t, the option accepts a value; if
7698 it is #f, it does not; and if it is the symbol
7699 `optional', the option may appear in ARGS with or
6c0201ad 7700 without a value.
deaceb4e
JB
7701 (predicate FUNC) --- If the option accepts a value (i.e. you
7702 specified `(value #t)' for this option), then getopt
7703 will apply FUNC to the value, and throw an exception
7704 if it returns #f. FUNC should be a procedure which
7705 accepts a string and returns a boolean value; you may
7706 need to use quasiquotes to get it into GRAMMAR.
7707
7708The (PROPERTY VALUE) pairs may occur in any order, but each
7709property may occur only once. By default, options do not have
7710single-character equivalents, are not required, and do not take
7711values.
7712
7713In ARGS, single-character options may be combined, in the usual
7714Unix fashion: ("-x" "-y") is equivalent to ("-xy"). If an option
7715accepts values, then it must be the last option in the
7716combination; the value is the next argument. So, for example, using
7717the following grammar:
7718 ((apples (single-char #\a))
7719 (blimps (single-char #\b) (value #t))
7720 (catalexis (single-char #\c) (value #t)))
7721the following argument lists would be acceptable:
7722 ("-a" "-b" "bang" "-c" "couth") ("bang" and "couth" are the values
7723 for "blimps" and "catalexis")
7724 ("-ab" "bang" "-c" "couth") (same)
7725 ("-ac" "couth" "-b" "bang") (same)
7726 ("-abc" "couth" "bang") (an error, since `-b' is not the
7727 last option in its combination)
7728
7729If an option's value is optional, then `getopt-long' decides
7730whether it has a value by looking at what follows it in ARGS. If
7731the next element is a string, and it does not appear to be an
7732option itself, then that string is the option's value.
7733
7734The value of a long option can appear as the next element in ARGS,
7735or it can follow the option name, separated by an `=' character.
7736Thus, using the same grammar as above, the following argument lists
7737are equivalent:
7738 ("--apples" "Braeburn" "--blimps" "Goodyear")
7739 ("--apples=Braeburn" "--blimps" "Goodyear")
7740 ("--blimps" "Goodyear" "--apples=Braeburn")
7741
7742If the option "--" appears in ARGS, argument parsing stops there;
7743subsequent arguments are returned as ordinary arguments, even if
7744they resemble options. So, in the argument list:
7745 ("--apples" "Granny Smith" "--" "--blimp" "Goodyear")
7746`getopt-long' will recognize the `apples' option as having the
7747value "Granny Smith", but it will not recognize the `blimp'
7748option; it will return the strings "--blimp" and "Goodyear" as
7749ordinary argument strings.
7750
7751The `getopt-long' function returns the parsed argument list as an
7752assocation list, mapping option names --- the symbols from GRAMMAR
7753--- onto their values, or #t if the option does not accept a value.
7754Unused options do not appear in the alist.
7755
7756All arguments that are not the value of any option are returned
7757as a list, associated with the empty list.
7758
7759`getopt-long' throws an exception if:
7760- it finds an unrecognized option in ARGS
7761- a required option is omitted
7762- an option that requires an argument doesn't get one
7763- an option that doesn't accept an argument does get one (this can
7764 only happen using the long option `--opt=value' syntax)
7765- an option predicate fails
7766
7767So, for example:
7768
7769(define grammar
7770 `((lockfile-dir (required? #t)
7771 (value #t)
7772 (single-char #\k)
7773 (predicate ,file-is-directory?))
7774 (verbose (required? #f)
7775 (single-char #\v)
7776 (value #f))
7777 (x-includes (single-char #\x))
6c0201ad 7778 (rnet-server (single-char #\y)
deaceb4e
JB
7779 (predicate ,string?))))
7780
6c0201ad 7781(getopt-long '("my-prog" "-vk" "/tmp" "foo1" "--x-includes=/usr/include"
deaceb4e
JB
7782 "--rnet-server=lamprod" "--" "-fred" "foo2" "foo3")
7783 grammar)
7784=> ((() "foo1" "-fred" "foo2" "foo3")
7785 (rnet-server . "lamprod")
7786 (x-includes . "/usr/include")
7787 (lockfile-dir . "/tmp")
7788 (verbose . #t))
7789
7790** The (ice-9 getopt-gnu-style) module is obsolete; use (ice-9 getopt-long).
7791
7792It will be removed in a few releases.
7793
08394899
MS
7794** New syntax: lambda*
7795** New syntax: define*
6c0201ad 7796** New syntax: define*-public
08394899
MS
7797** New syntax: defmacro*
7798** New syntax: defmacro*-public
6c0201ad 7799Guile now supports optional arguments.
08394899
MS
7800
7801`lambda*', `define*', `define*-public', `defmacro*' and
7802`defmacro*-public' are identical to the non-* versions except that
7803they use an extended type of parameter list that has the following BNF
7804syntax (parentheses are literal, square brackets indicate grouping,
7805and `*', `+' and `?' have the usual meaning):
7806
7807 ext-param-list ::= ( [identifier]* [#&optional [ext-var-decl]+]?
6c0201ad 7808 [#&key [ext-var-decl]+ [#&allow-other-keys]?]?
08394899
MS
7809 [[#&rest identifier]|[. identifier]]? ) | [identifier]
7810
6c0201ad 7811 ext-var-decl ::= identifier | ( identifier expression )
08394899
MS
7812
7813The semantics are best illustrated with the following documentation
7814and examples for `lambda*':
7815
7816 lambda* args . body
7817 lambda extended for optional and keyword arguments
6c0201ad 7818
08394899
MS
7819 lambda* creates a procedure that takes optional arguments. These
7820 are specified by putting them inside brackets at the end of the
7821 paramater list, but before any dotted rest argument. For example,
7822 (lambda* (a b #&optional c d . e) '())
7823 creates a procedure with fixed arguments a and b, optional arguments c
7824 and d, and rest argument e. If the optional arguments are omitted
7825 in a call, the variables for them are unbound in the procedure. This
7826 can be checked with the bound? macro.
7827
7828 lambda* can also take keyword arguments. For example, a procedure
7829 defined like this:
7830 (lambda* (#&key xyzzy larch) '())
7831 can be called with any of the argument lists (#:xyzzy 11)
7832 (#:larch 13) (#:larch 42 #:xyzzy 19) (). Whichever arguments
7833 are given as keywords are bound to values.
7834
7835 Optional and keyword arguments can also be given default values
7836 which they take on when they are not present in a call, by giving a
7837 two-item list in place of an optional argument, for example in:
6c0201ad 7838 (lambda* (foo #&optional (bar 42) #&key (baz 73)) (list foo bar baz))
08394899
MS
7839 foo is a fixed argument, bar is an optional argument with default
7840 value 42, and baz is a keyword argument with default value 73.
7841 Default value expressions are not evaluated unless they are needed
6c0201ad 7842 and until the procedure is called.
08394899
MS
7843
7844 lambda* now supports two more special parameter list keywords.
7845
7846 lambda*-defined procedures now throw an error by default if a
7847 keyword other than one of those specified is found in the actual
7848 passed arguments. However, specifying #&allow-other-keys
7849 immediately after the kyword argument declarations restores the
7850 previous behavior of ignoring unknown keywords. lambda* also now
7851 guarantees that if the same keyword is passed more than once, the
7852 last one passed is the one that takes effect. For example,
7853 ((lambda* (#&key (heads 0) (tails 0)) (display (list heads tails)))
7854 #:heads 37 #:tails 42 #:heads 99)
7855 would result in (99 47) being displayed.
7856
7857 #&rest is also now provided as a synonym for the dotted syntax rest
7858 argument. The argument lists (a . b) and (a #&rest b) are equivalent in
7859 all respects to lambda*. This is provided for more similarity to DSSSL,
7860 MIT-Scheme and Kawa among others, as well as for refugees from other
7861 Lisp dialects.
7862
7863Further documentation may be found in the optargs.scm file itself.
7864
7865The optional argument module also exports the macros `let-optional',
7866`let-optional*', `let-keywords', `let-keywords*' and `bound?'. These
7867are not documented here because they may be removed in the future, but
7868full documentation is still available in optargs.scm.
7869
2e132553
JB
7870** New syntax: and-let*
7871Guile now supports the `and-let*' form, described in the draft SRFI-2.
7872
7873Syntax: (land* (<clause> ...) <body> ...)
7874Each <clause> should have one of the following forms:
7875 (<variable> <expression>)
7876 (<expression>)
7877 <bound-variable>
7878Each <variable> or <bound-variable> should be an identifier. Each
7879<expression> should be a valid expression. The <body> should be a
7880possibly empty sequence of expressions, like the <body> of a
7881lambda form.
7882
7883Semantics: A LAND* expression is evaluated by evaluating the
7884<expression> or <bound-variable> of each of the <clause>s from
7885left to right. The value of the first <expression> or
7886<bound-variable> that evaluates to a false value is returned; the
7887remaining <expression>s and <bound-variable>s are not evaluated.
7888The <body> forms are evaluated iff all the <expression>s and
7889<bound-variable>s evaluate to true values.
7890
7891The <expression>s and the <body> are evaluated in an environment
7892binding each <variable> of the preceding (<variable> <expression>)
7893clauses to the value of the <expression>. Later bindings
7894shadow earlier bindings.
7895
7896Guile's and-let* macro was contributed by Michael Livshin.
7897
36d3d540
MD
7898** New sorting functions
7899
7900*** New function: sorted? SEQUENCE LESS?
ed8c8636
MD
7901Returns `#t' when the sequence argument is in non-decreasing order
7902according to LESS? (that is, there is no adjacent pair `... x y
7903...' for which `(less? y x)').
7904
7905Returns `#f' when the sequence contains at least one out-of-order
7906pair. It is an error if the sequence is neither a list nor a
7907vector.
7908
36d3d540 7909*** New function: merge LIST1 LIST2 LESS?
ed8c8636
MD
7910LIST1 and LIST2 are sorted lists.
7911Returns the sorted list of all elements in LIST1 and LIST2.
7912
7913Assume that the elements a and b1 in LIST1 and b2 in LIST2 are "equal"
7914in the sense that (LESS? x y) --> #f for x, y in {a, b1, b2},
7915and that a < b1 in LIST1. Then a < b1 < b2 in the result.
7916(Here "<" should read "comes before".)
7917
36d3d540 7918*** New procedure: merge! LIST1 LIST2 LESS?
ed8c8636
MD
7919Merges two lists, re-using the pairs of LIST1 and LIST2 to build
7920the result. If the code is compiled, and LESS? constructs no new
7921pairs, no pairs at all will be allocated. The first pair of the
7922result will be either the first pair of LIST1 or the first pair of
7923LIST2.
7924
36d3d540 7925*** New function: sort SEQUENCE LESS?
ed8c8636
MD
7926Accepts either a list or a vector, and returns a new sequence
7927which is sorted. The new sequence is the same type as the input.
7928Always `(sorted? (sort sequence less?) less?)'. The original
7929sequence is not altered in any way. The new sequence shares its
7930elements with the old one; no elements are copied.
7931
36d3d540 7932*** New procedure: sort! SEQUENCE LESS
ed8c8636
MD
7933Returns its sorted result in the original boxes. No new storage is
7934allocated at all. Proper usage: (set! slist (sort! slist <))
7935
36d3d540 7936*** New function: stable-sort SEQUENCE LESS?
ed8c8636
MD
7937Similar to `sort' but stable. That is, if "equal" elements are
7938ordered a < b in the original sequence, they will have the same order
7939in the result.
7940
36d3d540 7941*** New function: stable-sort! SEQUENCE LESS?
ed8c8636
MD
7942Similar to `sort!' but stable.
7943Uses temporary storage when sorting vectors.
7944
36d3d540 7945*** New functions: sort-list, sort-list!
ed8c8636
MD
7946Added for compatibility with scsh.
7947
36d3d540
MD
7948** New built-in random number support
7949
7950*** New function: random N [STATE]
3e8370c3
MD
7951Accepts a positive integer or real N and returns a number of the
7952same type between zero (inclusive) and N (exclusive). The values
7953returned have a uniform distribution.
7954
7955The optional argument STATE must be of the type produced by
416075f1
MD
7956`copy-random-state' or `seed->random-state'. It defaults to the value
7957of the variable `*random-state*'. This object is used to maintain the
7958state of the pseudo-random-number generator and is altered as a side
7959effect of the `random' operation.
3e8370c3 7960
36d3d540 7961*** New variable: *random-state*
3e8370c3
MD
7962Holds a data structure that encodes the internal state of the
7963random-number generator that `random' uses by default. The nature
7964of this data structure is implementation-dependent. It may be
7965printed out and successfully read back in, but may or may not
7966function correctly as a random-number state object in another
7967implementation.
7968
36d3d540 7969*** New function: copy-random-state [STATE]
3e8370c3
MD
7970Returns a new object of type suitable for use as the value of the
7971variable `*random-state*' and as a second argument to `random'.
7972If argument STATE is given, a copy of it is returned. Otherwise a
7973copy of `*random-state*' is returned.
416075f1 7974
36d3d540 7975*** New function: seed->random-state SEED
416075f1
MD
7976Returns a new object of type suitable for use as the value of the
7977variable `*random-state*' and as a second argument to `random'.
7978SEED is a string or a number. A new state is generated and
7979initialized using SEED.
3e8370c3 7980
36d3d540 7981*** New function: random:uniform [STATE]
3e8370c3
MD
7982Returns an uniformly distributed inexact real random number in the
7983range between 0 and 1.
7984
36d3d540 7985*** New procedure: random:solid-sphere! VECT [STATE]
3e8370c3
MD
7986Fills VECT with inexact real random numbers the sum of whose
7987squares is less than 1.0. Thinking of VECT as coordinates in
7988space of dimension N = `(vector-length VECT)', the coordinates are
7989uniformly distributed within the unit N-shere. The sum of the
7990squares of the numbers is returned. VECT can be either a vector
7991or a uniform vector of doubles.
7992
36d3d540 7993*** New procedure: random:hollow-sphere! VECT [STATE]
3e8370c3
MD
7994Fills VECT with inexact real random numbers the sum of whose squares
7995is equal to 1.0. Thinking of VECT as coordinates in space of
7996dimension n = `(vector-length VECT)', the coordinates are uniformly
7997distributed over the surface of the unit n-shere. VECT can be either
7998a vector or a uniform vector of doubles.
7999
36d3d540 8000*** New function: random:normal [STATE]
3e8370c3
MD
8001Returns an inexact real in a normal distribution with mean 0 and
8002standard deviation 1. For a normal distribution with mean M and
8003standard deviation D use `(+ M (* D (random:normal)))'.
8004
36d3d540 8005*** New procedure: random:normal-vector! VECT [STATE]
3e8370c3
MD
8006Fills VECT with inexact real random numbers which are independent and
8007standard normally distributed (i.e., with mean 0 and variance 1).
8008VECT can be either a vector or a uniform vector of doubles.
8009
36d3d540 8010*** New function: random:exp STATE
3e8370c3
MD
8011Returns an inexact real in an exponential distribution with mean 1.
8012For an exponential distribution with mean U use (* U (random:exp)).
8013
69c6acbb
JB
8014** The range of logand, logior, logxor, logtest, and logbit? have changed.
8015
8016These functions now operate on numbers in the range of a C unsigned
8017long.
8018
8019These functions used to operate on numbers in the range of a C signed
8020long; however, this seems inappropriate, because Guile integers don't
8021overflow.
8022
ba4ee0d6
MD
8023** New function: make-guardian
8024This is an implementation of guardians as described in
8025R. Kent Dybvig, Carl Bruggeman, and David Eby (1993) "Guardians in a
8026Generation-Based Garbage Collector" ACM SIGPLAN Conference on
8027Programming Language Design and Implementation, June 1993
8028ftp://ftp.cs.indiana.edu/pub/scheme-repository/doc/pubs/guardians.ps.gz
8029
88ceea5c
MD
8030** New functions: delq1!, delv1!, delete1!
8031These procedures behave similar to delq! and friends but delete only
8032one object if at all.
8033
55254a6a
MD
8034** New function: unread-string STRING PORT
8035Unread STRING to PORT, that is, push it back onto the port so that
8036next read operation will work on the pushed back characters.
8037
8038** unread-char can now be called multiple times
8039If unread-char is called multiple times, the unread characters will be
8040read again in last-in first-out order.
8041
9e97c52d
GH
8042** the procedures uniform-array-read! and uniform-array-write! now
8043work on any kind of port, not just ports which are open on a file.
8044
b074884f 8045** Now 'l' in a port mode requests line buffering.
9e97c52d 8046
69bc9ff3
GH
8047** The procedure truncate-file now works on string ports as well
8048as file ports. If the size argument is omitted, the current
1b9c3dae 8049file position is used.
9e97c52d 8050
c94577b4 8051** new procedure: seek PORT/FDES OFFSET WHENCE
9e97c52d
GH
8052The arguments are the same as for the old fseek procedure, but it
8053works on string ports as well as random-access file ports.
8054
8055** the fseek procedure now works on string ports, since it has been
c94577b4 8056redefined using seek.
9e97c52d
GH
8057
8058** the setvbuf procedure now uses a default size if mode is _IOFBF and
8059size is not supplied.
8060
8061** the newline procedure no longer flushes the port if it's not
8062line-buffered: previously it did if it was the current output port.
8063
8064** open-pipe and close-pipe are no longer primitive procedures, but
8065an emulation can be obtained using `(use-modules (ice-9 popen))'.
8066
8067** the freopen procedure has been removed.
8068
8069** new procedure: drain-input PORT
8070Drains PORT's read buffers (including any pushed-back characters)
8071and returns the contents as a single string.
8072
67ad463a 8073** New function: map-in-order PROC LIST1 LIST2 ...
d41b3904
MD
8074Version of `map' which guarantees that the procedure is applied to the
8075lists in serial order.
8076
67ad463a
MD
8077** Renamed `serial-array-copy!' and `serial-array-map!' to
8078`array-copy-in-order!' and `array-map-in-order!'. The old names are
8079now obsolete and will go away in release 1.5.
8080
cf7132b3 8081** New syntax: collect BODY1 ...
d41b3904
MD
8082Version of `begin' which returns a list of the results of the body
8083forms instead of the result of the last body form. In contrast to
cf7132b3 8084`begin', `collect' allows an empty body.
d41b3904 8085
e4eae9b1
MD
8086** New functions: read-history FILENAME, write-history FILENAME
8087Read/write command line history from/to file. Returns #t on success
8088and #f if an error occured.
8089
d21ffe26
JB
8090** `ls' and `lls' in module (ice-9 ls) now handle no arguments.
8091
8092These procedures return a list of definitions available in the specified
8093argument, a relative module reference. In the case of no argument,
8094`(current-module)' is now consulted for definitions to return, instead
8095of simply returning #f, the former behavior.
8096
f8c9d497
JB
8097** The #/ syntax for lists is no longer supported.
8098
8099Earlier versions of Scheme accepted this syntax, but printed a
8100warning.
8101
8102** Guile no longer consults the SCHEME_LOAD_PATH environment variable.
8103
8104Instead, you should set GUILE_LOAD_PATH to tell Guile where to find
8105modules.
8106
3ffc7a36
MD
8107* Changes to the gh_ interface
8108
8109** gh_scm2doubles
8110
8111Now takes a second argument which is the result array. If this
8112pointer is NULL, a new array is malloced (the old behaviour).
8113
8114** gh_chars2byvect, gh_shorts2svect, gh_floats2fvect, gh_scm2chars,
8115 gh_scm2shorts, gh_scm2longs, gh_scm2floats
8116
8117New functions.
8118
3e8370c3
MD
8119* Changes to the scm_ interface
8120
ad91d6c3
MD
8121** Function: scm_make_named_hook (char* name, int n_args)
8122
8123Creates a hook in the same way as make-hook above but also
8124binds a variable named NAME to it.
8125
8126This is the typical way of creating a hook from C code.
8127
ece41168
MD
8128Currently, the variable is created in the "current" module. This
8129might change when we get the new module system.
ad91d6c3 8130
16a5a9a4
MD
8131** The smob interface
8132
8133The interface for creating smobs has changed. For documentation, see
8134data-rep.info (made from guile-core/doc/data-rep.texi).
8135
8136*** Deprecated function: SCM scm_newsmob (scm_smobfuns *)
8137
8138>>> This function will be removed in 1.3.4. <<<
8139
8140It is replaced by:
8141
8142*** Function: SCM scm_make_smob_type (const char *name, scm_sizet size)
8143This function adds a new smob type, named NAME, with instance size
8144SIZE to the system. The return value is a tag that is used in
8145creating instances of the type. If SIZE is 0, then no memory will
8146be allocated when instances of the smob are created, and nothing
8147will be freed by the default free function.
6c0201ad 8148
16a5a9a4
MD
8149*** Function: void scm_set_smob_mark (long tc, SCM (*mark) (SCM))
8150This function sets the smob marking procedure for the smob type
8151specified by the tag TC. TC is the tag returned by
8152`scm_make_smob_type'.
8153
8154*** Function: void scm_set_smob_free (long tc, SCM (*mark) (SCM))
8155This function sets the smob freeing procedure for the smob type
8156specified by the tag TC. TC is the tag returned by
8157`scm_make_smob_type'.
8158
8159*** Function: void scm_set_smob_print (tc, print)
8160
8161 - Function: void scm_set_smob_print (long tc,
8162 scm_sizet (*print) (SCM,
8163 SCM,
8164 scm_print_state *))
8165
8166This function sets the smob printing procedure for the smob type
8167specified by the tag TC. TC is the tag returned by
8168`scm_make_smob_type'.
8169
8170*** Function: void scm_set_smob_equalp (long tc, SCM (*equalp) (SCM, SCM))
8171This function sets the smob equality-testing predicate for the
8172smob type specified by the tag TC. TC is the tag returned by
8173`scm_make_smob_type'.
8174
8175*** Macro: void SCM_NEWSMOB (SCM var, long tc, void *data)
8176Make VALUE contain a smob instance of the type with type code TC and
8177smob data DATA. VALUE must be previously declared as C type `SCM'.
8178
8179*** Macro: fn_returns SCM_RETURN_NEWSMOB (long tc, void *data)
8180This macro expands to a block of code that creates a smob instance
8181of the type with type code TC and smob data DATA, and returns that
8182`SCM' value. It should be the last piece of code in a block.
8183
9e97c52d
GH
8184** The interfaces for using I/O ports and implementing port types
8185(ptobs) have changed significantly. The new interface is based on
8186shared access to buffers and a new set of ptob procedures.
8187
16a5a9a4
MD
8188*** scm_newptob has been removed
8189
8190It is replaced by:
8191
8192*** Function: SCM scm_make_port_type (type_name, fill_buffer, write_flush)
8193
8194- Function: SCM scm_make_port_type (char *type_name,
8195 int (*fill_buffer) (SCM port),
8196 void (*write_flush) (SCM port));
8197
8198Similarly to the new smob interface, there is a set of function
8199setters by which the user can customize the behaviour of his port
544e9093 8200type. See ports.h (scm_set_port_XXX).
16a5a9a4 8201
9e97c52d
GH
8202** scm_strport_to_string: New function: creates a new string from
8203a string port's buffer.
8204
3e8370c3
MD
8205** Plug in interface for random number generators
8206The variable `scm_the_rng' in random.c contains a value and three
8207function pointers which together define the current random number
8208generator being used by the Scheme level interface and the random
8209number library functions.
8210
8211The user is free to replace the default generator with the generator
8212of his own choice.
8213
8214*** Variable: size_t scm_the_rng.rstate_size
8215The size of the random state type used by the current RNG
8216measured in chars.
8217
8218*** Function: unsigned long scm_the_rng.random_bits (scm_rstate *STATE)
8219Given the random STATE, return 32 random bits.
8220
8221*** Function: void scm_the_rng.init_rstate (scm_rstate *STATE, chars *S, int N)
8222Seed random state STATE using string S of length N.
8223
8224*** Function: scm_rstate *scm_the_rng.copy_rstate (scm_rstate *STATE)
8225Given random state STATE, return a malloced copy.
8226
8227** Default RNG
8228The default RNG is the MWC (Multiply With Carry) random number
8229generator described by George Marsaglia at the Department of
8230Statistics and Supercomputer Computations Research Institute, The
8231Florida State University (http://stat.fsu.edu/~geo).
8232
8233It uses 64 bits, has a period of 4578426017172946943 (4.6e18), and
8234passes all tests in the DIEHARD test suite
8235(http://stat.fsu.edu/~geo/diehard.html). The generation of 32 bits
8236costs one multiply and one add on platforms which either supports long
8237longs (gcc does this on most systems) or have 64 bit longs. The cost
8238is four multiply on other systems but this can be optimized by writing
8239scm_i_uniform32 in assembler.
8240
8241These functions are provided through the scm_the_rng interface for use
8242by libguile and the application.
8243
8244*** Function: unsigned long scm_i_uniform32 (scm_i_rstate *STATE)
8245Given the random STATE, return 32 random bits.
8246Don't use this function directly. Instead go through the plugin
8247interface (see "Plug in interface" above).
8248
8249*** Function: void scm_i_init_rstate (scm_i_rstate *STATE, char *SEED, int N)
8250Initialize STATE using SEED of length N.
8251
8252*** Function: scm_i_rstate *scm_i_copy_rstate (scm_i_rstate *STATE)
8253Return a malloc:ed copy of STATE. This function can easily be re-used
8254in the interfaces to other RNGs.
8255
8256** Random number library functions
8257These functions use the current RNG through the scm_the_rng interface.
8258It might be a good idea to use these functions from your C code so
8259that only one random generator is used by all code in your program.
8260
259529f2 8261The default random state is stored in:
3e8370c3
MD
8262
8263*** Variable: SCM scm_var_random_state
8264Contains the vcell of the Scheme variable "*random-state*" which is
8265used as default state by all random number functions in the Scheme
8266level interface.
8267
8268Example:
8269
259529f2 8270 double x = scm_c_uniform01 (SCM_RSTATE (SCM_CDR (scm_var_random_state)));
3e8370c3 8271
259529f2
MD
8272*** Function: scm_rstate *scm_c_default_rstate (void)
8273This is a convenience function which returns the value of
8274scm_var_random_state. An error message is generated if this value
8275isn't a random state.
8276
8277*** Function: scm_rstate *scm_c_make_rstate (char *SEED, int LENGTH)
8278Make a new random state from the string SEED of length LENGTH.
8279
8280It is generally not a good idea to use multiple random states in a
8281program. While subsequent random numbers generated from one random
8282state are guaranteed to be reasonably independent, there is no such
8283guarantee for numbers generated from different random states.
8284
8285*** Macro: unsigned long scm_c_uniform32 (scm_rstate *STATE)
8286Return 32 random bits.
8287
8288*** Function: double scm_c_uniform01 (scm_rstate *STATE)
3e8370c3
MD
8289Return a sample from the uniform(0,1) distribution.
8290
259529f2 8291*** Function: double scm_c_normal01 (scm_rstate *STATE)
3e8370c3
MD
8292Return a sample from the normal(0,1) distribution.
8293
259529f2 8294*** Function: double scm_c_exp1 (scm_rstate *STATE)
3e8370c3
MD
8295Return a sample from the exp(1) distribution.
8296
259529f2
MD
8297*** Function: unsigned long scm_c_random (scm_rstate *STATE, unsigned long M)
8298Return a sample from the discrete uniform(0,M) distribution.
8299
8300*** Function: SCM scm_c_random_bignum (scm_rstate *STATE, SCM M)
3e8370c3 8301Return a sample from the discrete uniform(0,M) distribution.
259529f2 8302M must be a bignum object. The returned value may be an INUM.
3e8370c3 8303
9e97c52d 8304
f3227c7a 8305\f
d23bbf3e 8306Changes in Guile 1.3 (released Monday, October 19, 1998):
c484bf7f
JB
8307
8308* Changes to the distribution
8309
e2d6569c
JB
8310** We renamed the SCHEME_LOAD_PATH environment variable to GUILE_LOAD_PATH.
8311To avoid conflicts, programs should name environment variables after
8312themselves, except when there's a common practice establishing some
8313other convention.
8314
8315For now, Guile supports both GUILE_LOAD_PATH and SCHEME_LOAD_PATH,
8316giving the former precedence, and printing a warning message if the
8317latter is set. Guile 1.4 will not recognize SCHEME_LOAD_PATH at all.
8318
8319** The header files related to multi-byte characters have been removed.
8320They were: libguile/extchrs.h and libguile/mbstrings.h. Any C code
8321which referred to these explicitly will probably need to be rewritten,
8322since the support for the variant string types has been removed; see
8323below.
8324
8325** The header files append.h and sequences.h have been removed. These
8326files implemented non-R4RS operations which would encourage
8327non-portable programming style and less easy-to-read code.
3a97e020 8328
c484bf7f
JB
8329* Changes to the stand-alone interpreter
8330
2e368582 8331** New procedures have been added to implement a "batch mode":
ec4ab4fd 8332
2e368582 8333*** Function: batch-mode?
ec4ab4fd
GH
8334
8335 Returns a boolean indicating whether the interpreter is in batch
8336 mode.
8337
2e368582 8338*** Function: set-batch-mode?! ARG
ec4ab4fd
GH
8339
8340 If ARG is true, switches the interpreter to batch mode. The `#f'
8341 case has not been implemented.
8342
2e368582
JB
8343** Guile now provides full command-line editing, when run interactively.
8344To use this feature, you must have the readline library installed.
8345The Guile build process will notice it, and automatically include
8346support for it.
8347
8348The readline library is available via anonymous FTP from any GNU
8349mirror site; the canonical location is "ftp://prep.ai.mit.edu/pub/gnu".
8350
a5d6d578
MD
8351** the-last-stack is now a fluid.
8352
c484bf7f
JB
8353* Changes to the procedure for linking libguile with your programs
8354
71f20534 8355** You can now use the `guile-config' utility to build programs that use Guile.
2e368582 8356
2adfe1c0 8357Guile now includes a command-line utility called `guile-config', which
71f20534
JB
8358can provide information about how to compile and link programs that
8359use Guile.
8360
8361*** `guile-config compile' prints any C compiler flags needed to use Guile.
8362You should include this command's output on the command line you use
8363to compile C or C++ code that #includes the Guile header files. It's
8364usually just a `-I' flag to help the compiler find the Guile headers.
8365
8366
8367*** `guile-config link' prints any linker flags necessary to link with Guile.
8aa5c148 8368
71f20534 8369This command writes to its standard output a list of flags which you
8aa5c148
JB
8370must pass to the linker to link your code against the Guile library.
8371The flags include '-lguile' itself, any other libraries the Guile
8372library depends upon, and any `-L' flags needed to help the linker
8373find those libraries.
2e368582
JB
8374
8375For example, here is a Makefile rule that builds a program named 'foo'
8376from the object files ${FOO_OBJECTS}, and links them against Guile:
8377
8378 foo: ${FOO_OBJECTS}
2adfe1c0 8379 ${CC} ${CFLAGS} ${FOO_OBJECTS} `guile-config link` -o foo
2e368582 8380
e2d6569c
JB
8381Previous Guile releases recommended that you use autoconf to detect
8382which of a predefined set of libraries were present on your system.
2adfe1c0 8383It is more robust to use `guile-config', since it records exactly which
e2d6569c
JB
8384libraries the installed Guile library requires.
8385
2adfe1c0
JB
8386This was originally called `build-guile', but was renamed to
8387`guile-config' before Guile 1.3 was released, to be consistent with
8388the analogous script for the GTK+ GUI toolkit, which is called
8389`gtk-config'.
8390
2e368582 8391
8aa5c148
JB
8392** Use the GUILE_FLAGS macro in your configure.in file to find Guile.
8393
8394If you are using the GNU autoconf package to configure your program,
8395you can use the GUILE_FLAGS autoconf macro to call `guile-config'
8396(described above) and gather the necessary values for use in your
8397Makefiles.
8398
8399The GUILE_FLAGS macro expands to configure script code which runs the
8400`guile-config' script, to find out where Guile's header files and
8401libraries are installed. It sets two variables, marked for
8402substitution, as by AC_SUBST.
8403
8404 GUILE_CFLAGS --- flags to pass to a C or C++ compiler to build
8405 code that uses Guile header files. This is almost always just a
8406 -I flag.
8407
8408 GUILE_LDFLAGS --- flags to pass to the linker to link a
8409 program against Guile. This includes `-lguile' for the Guile
8410 library itself, any libraries that Guile itself requires (like
8411 -lqthreads), and so on. It may also include a -L flag to tell the
8412 compiler where to find the libraries.
8413
8414GUILE_FLAGS is defined in the file guile.m4, in the top-level
8415directory of the Guile distribution. You can copy it into your
8416package's aclocal.m4 file, and then use it in your configure.in file.
8417
8418If you are using the `aclocal' program, distributed with GNU automake,
8419to maintain your aclocal.m4 file, the Guile installation process
8420installs guile.m4 where aclocal will find it. All you need to do is
8421use GUILE_FLAGS in your configure.in file, and then run `aclocal';
8422this will copy the definition of GUILE_FLAGS into your aclocal.m4
8423file.
8424
8425
c484bf7f 8426* Changes to Scheme functions and syntax
7ad3c1e7 8427
02755d59 8428** Multi-byte strings have been removed, as have multi-byte and wide
e2d6569c
JB
8429ports. We felt that these were the wrong approach to
8430internationalization support.
02755d59 8431
2e368582
JB
8432** New function: readline [PROMPT]
8433Read a line from the terminal, and allow the user to edit it,
8434prompting with PROMPT. READLINE provides a large set of Emacs-like
8435editing commands, lets the user recall previously typed lines, and
8436works on almost every kind of terminal, including dumb terminals.
8437
8438READLINE assumes that the cursor is at the beginning of the line when
8439it is invoked. Thus, you can't print a prompt yourself, and then call
8440READLINE; you need to package up your prompt as a string, pass it to
8441the function, and let READLINE print the prompt itself. This is
8442because READLINE needs to know the prompt's screen width.
8443
8cd57bd0
JB
8444For Guile to provide this function, you must have the readline
8445library, version 2.1 or later, installed on your system. Readline is
8446available via anonymous FTP from prep.ai.mit.edu in pub/gnu, or from
8447any GNU mirror site.
2e368582
JB
8448
8449See also ADD-HISTORY function.
8450
8451** New function: add-history STRING
8452Add STRING as the most recent line in the history used by the READLINE
8453command. READLINE does not add lines to the history itself; you must
8454call ADD-HISTORY to make previous input available to the user.
8455
8cd57bd0
JB
8456** The behavior of the read-line function has changed.
8457
8458This function now uses standard C library functions to read the line,
8459for speed. This means that it doesn not respect the value of
8460scm-line-incrementors; it assumes that lines are delimited with
8461#\newline.
8462
8463(Note that this is read-line, the function that reads a line of text
8464from a port, not readline, the function that reads a line from a
8465terminal, providing full editing capabilities.)
8466
1a0106ef
JB
8467** New module (ice-9 getopt-gnu-style): Parse command-line arguments.
8468
8469This module provides some simple argument parsing. It exports one
8470function:
8471
8472Function: getopt-gnu-style ARG-LS
8473 Parse a list of program arguments into an alist of option
8474 descriptions.
8475
8476 Each item in the list of program arguments is examined to see if
8477 it meets the syntax of a GNU long-named option. An argument like
8478 `--MUMBLE' produces an element of the form (MUMBLE . #t) in the
8479 returned alist, where MUMBLE is a keyword object with the same
8480 name as the argument. An argument like `--MUMBLE=FROB' produces
8481 an element of the form (MUMBLE . FROB), where FROB is a string.
8482
8483 As a special case, the returned alist also contains a pair whose
8484 car is the symbol `rest'. The cdr of this pair is a list
8485 containing all the items in the argument list that are not options
8486 of the form mentioned above.
8487
8488 The argument `--' is treated specially: all items in the argument
8489 list appearing after such an argument are not examined, and are
8490 returned in the special `rest' list.
8491
8492 This function does not parse normal single-character switches.
8493 You will need to parse them out of the `rest' list yourself.
8494
8cd57bd0
JB
8495** The read syntax for byte vectors and short vectors has changed.
8496
8497Instead of #bytes(...), write #y(...).
8498
8499Instead of #short(...), write #h(...).
8500
8501This may seem nutty, but, like the other uniform vectors, byte vectors
8502and short vectors want to have the same print and read syntax (and,
8503more basic, want to have read syntax!). Changing the read syntax to
8504use multiple characters after the hash sign breaks with the
8505conventions used in R5RS and the conventions used for the other
8506uniform vectors. It also introduces complexity in the current reader,
8507both on the C and Scheme levels. (The Right solution is probably to
8508change the syntax and prototypes for uniform vectors entirely.)
8509
8510
8511** The new module (ice-9 session) provides useful interactive functions.
8512
8513*** New procedure: (apropos REGEXP OPTION ...)
8514
8515Display a list of top-level variables whose names match REGEXP, and
8516the modules they are imported from. Each OPTION should be one of the
8517following symbols:
8518
8519 value --- Show the value of each matching variable.
8520 shadow --- Show bindings shadowed by subsequently imported modules.
8521 full --- Same as both `shadow' and `value'.
8522
8523For example:
8524
8525 guile> (apropos "trace" 'full)
8526 debug: trace #<procedure trace args>
8527 debug: untrace #<procedure untrace args>
8528 the-scm-module: display-backtrace #<compiled-closure #<primitive-procedure gsubr-apply>>
8529 the-scm-module: before-backtrace-hook ()
8530 the-scm-module: backtrace #<primitive-procedure backtrace>
8531 the-scm-module: after-backtrace-hook ()
8532 the-scm-module: has-shown-backtrace-hint? #f
6c0201ad 8533 guile>
8cd57bd0
JB
8534
8535** There are new functions and syntax for working with macros.
8536
8537Guile implements macros as a special object type. Any variable whose
8538top-level binding is a macro object acts as a macro. The macro object
8539specifies how the expression should be transformed before evaluation.
8540
8541*** Macro objects now print in a reasonable way, resembling procedures.
8542
8543*** New function: (macro? OBJ)
8544True iff OBJ is a macro object.
8545
8546*** New function: (primitive-macro? OBJ)
8547Like (macro? OBJ), but true only if OBJ is one of the Guile primitive
8548macro transformers, implemented in eval.c rather than Scheme code.
8549
dbdd0c16
JB
8550Why do we have this function?
8551- For symmetry with procedure? and primitive-procedure?,
8552- to allow custom print procedures to tell whether a macro is
8553 primitive, and display it differently, and
8554- to allow compilers and user-written evaluators to distinguish
8555 builtin special forms from user-defined ones, which could be
8556 compiled.
8557
8cd57bd0
JB
8558*** New function: (macro-type OBJ)
8559Return a value indicating what kind of macro OBJ is. Possible return
8560values are:
8561
8562 The symbol `syntax' --- a macro created by procedure->syntax.
8563 The symbol `macro' --- a macro created by procedure->macro.
8564 The symbol `macro!' --- a macro created by procedure->memoizing-macro.
6c0201ad 8565 The boolean #f --- if OBJ is not a macro object.
8cd57bd0
JB
8566
8567*** New function: (macro-name MACRO)
8568Return the name of the macro object MACRO's procedure, as returned by
8569procedure-name.
8570
8571*** New function: (macro-transformer MACRO)
8572Return the transformer procedure for MACRO.
8573
8574*** New syntax: (use-syntax MODULE ... TRANSFORMER)
8575
8576Specify a new macro expander to use in the current module. Each
8577MODULE is a module name, with the same meaning as in the `use-modules'
8578form; each named module's exported bindings are added to the current
8579top-level environment. TRANSFORMER is an expression evaluated in the
8580resulting environment which must yield a procedure to use as the
8581module's eval transformer: every expression evaluated in this module
8582is passed to this function, and the result passed to the Guile
6c0201ad 8583interpreter.
8cd57bd0
JB
8584
8585*** macro-eval! is removed. Use local-eval instead.
29521173 8586
8d9dcb3c
MV
8587** Some magic has been added to the printer to better handle user
8588written printing routines (like record printers, closure printers).
8589
8590The problem is that these user written routines must have access to
7fbd77df 8591the current `print-state' to be able to handle fancy things like
8d9dcb3c
MV
8592detection of circular references. These print-states have to be
8593passed to the builtin printing routines (display, write, etc) to
8594properly continue the print chain.
8595
8596We didn't want to change all existing print code so that it
8cd57bd0 8597explicitly passes thru a print state in addition to a port. Instead,
8d9dcb3c
MV
8598we extented the possible values that the builtin printing routines
8599accept as a `port'. In addition to a normal port, they now also take
8600a pair of a normal port and a print-state. Printing will go to the
8601port and the print-state will be used to control the detection of
8602circular references, etc. If the builtin function does not care for a
8603print-state, it is simply ignored.
8604
8605User written callbacks are now called with such a pair as their
8606`port', but because every function now accepts this pair as a PORT
8607argument, you don't have to worry about that. In fact, it is probably
8608safest to not check for these pairs.
8609
8610However, it is sometimes necessary to continue a print chain on a
8611different port, for example to get a intermediate string
8612representation of the printed value, mangle that string somehow, and
8613then to finally print the mangled string. Use the new function
8614
8615 inherit-print-state OLD-PORT NEW-PORT
8616
8617for this. It constructs a new `port' that prints to NEW-PORT but
8618inherits the print-state of OLD-PORT.
8619
ef1ea498
MD
8620** struct-vtable-offset renamed to vtable-offset-user
8621
8622** New constants: vtable-index-layout, vtable-index-vtable, vtable-index-printer
8623
e478dffa
MD
8624** There is now a third optional argument to make-vtable-vtable
8625 (and fourth to make-struct) when constructing new types (vtables).
8626 This argument initializes field vtable-index-printer of the vtable.
ef1ea498 8627
4851dc57
MV
8628** The detection of circular references has been extended to structs.
8629That is, a structure that -- in the process of being printed -- prints
8630itself does not lead to infinite recursion.
8631
8632** There is now some basic support for fluids. Please read
8633"libguile/fluid.h" to find out more. It is accessible from Scheme with
8634the following functions and macros:
8635
9c3fb66f
MV
8636Function: make-fluid
8637
8638 Create a new fluid object. Fluids are not special variables or
8639 some other extension to the semantics of Scheme, but rather
8640 ordinary Scheme objects. You can store them into variables (that
8641 are still lexically scoped, of course) or into any other place you
8642 like. Every fluid has a initial value of `#f'.
04c76b58 8643
9c3fb66f 8644Function: fluid? OBJ
04c76b58 8645
9c3fb66f 8646 Test whether OBJ is a fluid.
04c76b58 8647
9c3fb66f
MV
8648Function: fluid-ref FLUID
8649Function: fluid-set! FLUID VAL
04c76b58
MV
8650
8651 Access/modify the fluid FLUID. Modifications are only visible
8652 within the current dynamic root (that includes threads).
8653
9c3fb66f
MV
8654Function: with-fluids* FLUIDS VALUES THUNK
8655
8656 FLUIDS is a list of fluids and VALUES a corresponding list of
8657 values for these fluids. Before THUNK gets called the values are
6c0201ad 8658 installed in the fluids and the old values of the fluids are
9c3fb66f
MV
8659 saved in the VALUES list. When the flow of control leaves THUNK
8660 or reenters it, the values get swapped again. You might think of
8661 this as a `safe-fluid-excursion'. Note that the VALUES list is
8662 modified by `with-fluids*'.
8663
8664Macro: with-fluids ((FLUID VALUE) ...) FORM ...
8665
8666 The same as `with-fluids*' but with a different syntax. It looks
8667 just like `let', but both FLUID and VALUE are evaluated. Remember,
8668 fluids are not special variables but ordinary objects. FLUID
8669 should evaluate to a fluid.
04c76b58 8670
e2d6569c 8671** Changes to system call interfaces:
64d01d13 8672
e2d6569c 8673*** close-port, close-input-port and close-output-port now return a
64d01d13
GH
8674boolean instead of an `unspecified' object. #t means that the port
8675was successfully closed, while #f means it was already closed. It is
8676also now possible for these procedures to raise an exception if an
8677error occurs (some errors from write can be delayed until close.)
8678
e2d6569c 8679*** the first argument to chmod, fcntl, ftell and fseek can now be a
6afcd3b2
GH
8680file descriptor.
8681
e2d6569c 8682*** the third argument to fcntl is now optional.
6afcd3b2 8683
e2d6569c 8684*** the first argument to chown can now be a file descriptor or a port.
6afcd3b2 8685
e2d6569c 8686*** the argument to stat can now be a port.
6afcd3b2 8687
e2d6569c 8688*** The following new procedures have been added (most use scsh
64d01d13
GH
8689interfaces):
8690
e2d6569c 8691*** procedure: close PORT/FD
ec4ab4fd
GH
8692 Similar to close-port (*note close-port: Closing Ports.), but also
8693 works on file descriptors. A side effect of closing a file
8694 descriptor is that any ports using that file descriptor are moved
8695 to a different file descriptor and have their revealed counts set
8696 to zero.
8697
e2d6569c 8698*** procedure: port->fdes PORT
ec4ab4fd
GH
8699 Returns the integer file descriptor underlying PORT. As a side
8700 effect the revealed count of PORT is incremented.
8701
e2d6569c 8702*** procedure: fdes->ports FDES
ec4ab4fd
GH
8703 Returns a list of existing ports which have FDES as an underlying
8704 file descriptor, without changing their revealed counts.
8705
e2d6569c 8706*** procedure: fdes->inport FDES
ec4ab4fd
GH
8707 Returns an existing input port which has FDES as its underlying
8708 file descriptor, if one exists, and increments its revealed count.
8709 Otherwise, returns a new input port with a revealed count of 1.
8710
e2d6569c 8711*** procedure: fdes->outport FDES
ec4ab4fd
GH
8712 Returns an existing output port which has FDES as its underlying
8713 file descriptor, if one exists, and increments its revealed count.
8714 Otherwise, returns a new output port with a revealed count of 1.
8715
8716 The next group of procedures perform a `dup2' system call, if NEWFD
8717(an integer) is supplied, otherwise a `dup'. The file descriptor to be
8718duplicated can be supplied as an integer or contained in a port. The
64d01d13
GH
8719type of value returned varies depending on which procedure is used.
8720
ec4ab4fd
GH
8721 All procedures also have the side effect when performing `dup2' that
8722any ports using NEWFD are moved to a different file descriptor and have
64d01d13
GH
8723their revealed counts set to zero.
8724
e2d6569c 8725*** procedure: dup->fdes PORT/FD [NEWFD]
ec4ab4fd 8726 Returns an integer file descriptor.
64d01d13 8727
e2d6569c 8728*** procedure: dup->inport PORT/FD [NEWFD]
ec4ab4fd 8729 Returns a new input port using the new file descriptor.
64d01d13 8730
e2d6569c 8731*** procedure: dup->outport PORT/FD [NEWFD]
ec4ab4fd 8732 Returns a new output port using the new file descriptor.
64d01d13 8733
e2d6569c 8734*** procedure: dup PORT/FD [NEWFD]
ec4ab4fd
GH
8735 Returns a new port if PORT/FD is a port, with the same mode as the
8736 supplied port, otherwise returns an integer file descriptor.
64d01d13 8737
e2d6569c 8738*** procedure: dup->port PORT/FD MODE [NEWFD]
ec4ab4fd
GH
8739 Returns a new port using the new file descriptor. MODE supplies a
8740 mode string for the port (*note open-file: File Ports.).
64d01d13 8741
e2d6569c 8742*** procedure: setenv NAME VALUE
ec4ab4fd
GH
8743 Modifies the environment of the current process, which is also the
8744 default environment inherited by child processes.
64d01d13 8745
ec4ab4fd
GH
8746 If VALUE is `#f', then NAME is removed from the environment.
8747 Otherwise, the string NAME=VALUE is added to the environment,
8748 replacing any existing string with name matching NAME.
64d01d13 8749
ec4ab4fd 8750 The return value is unspecified.
956055a9 8751
e2d6569c 8752*** procedure: truncate-file OBJ SIZE
6afcd3b2
GH
8753 Truncates the file referred to by OBJ to at most SIZE bytes. OBJ
8754 can be a string containing a file name or an integer file
8755 descriptor or port open for output on the file. The underlying
8756 system calls are `truncate' and `ftruncate'.
8757
8758 The return value is unspecified.
8759
e2d6569c 8760*** procedure: setvbuf PORT MODE [SIZE]
7a6f1ffa
GH
8761 Set the buffering mode for PORT. MODE can be:
8762 `_IONBF'
8763 non-buffered
8764
8765 `_IOLBF'
8766 line buffered
8767
8768 `_IOFBF'
8769 block buffered, using a newly allocated buffer of SIZE bytes.
8770 However if SIZE is zero or unspecified, the port will be made
8771 non-buffered.
8772
8773 This procedure should not be used after I/O has been performed with
8774 the port.
8775
8776 Ports are usually block buffered by default, with a default buffer
8777 size. Procedures e.g., *Note open-file: File Ports, which accept a
8778 mode string allow `0' to be added to request an unbuffered port.
8779
e2d6569c 8780*** procedure: fsync PORT/FD
6afcd3b2
GH
8781 Copies any unwritten data for the specified output file descriptor
8782 to disk. If PORT/FD is a port, its buffer is flushed before the
8783 underlying file descriptor is fsync'd. The return value is
8784 unspecified.
8785
e2d6569c 8786*** procedure: open-fdes PATH FLAGS [MODES]
6afcd3b2
GH
8787 Similar to `open' but returns a file descriptor instead of a port.
8788
e2d6569c 8789*** procedure: execle PATH ENV [ARG] ...
6afcd3b2
GH
8790 Similar to `execl', but the environment of the new process is
8791 specified by ENV, which must be a list of strings as returned by
8792 the `environ' procedure.
8793
8794 This procedure is currently implemented using the `execve' system
8795 call, but we call it `execle' because of its Scheme calling
8796 interface.
8797
e2d6569c 8798*** procedure: strerror ERRNO
ec4ab4fd
GH
8799 Returns the Unix error message corresponding to ERRNO, an integer.
8800
e2d6569c 8801*** procedure: primitive-exit [STATUS]
6afcd3b2
GH
8802 Terminate the current process without unwinding the Scheme stack.
8803 This is would typically be useful after a fork. The exit status
8804 is STATUS if supplied, otherwise zero.
8805
e2d6569c 8806*** procedure: times
6afcd3b2
GH
8807 Returns an object with information about real and processor time.
8808 The following procedures accept such an object as an argument and
8809 return a selected component:
8810
8811 `tms:clock'
8812 The current real time, expressed as time units relative to an
8813 arbitrary base.
8814
8815 `tms:utime'
8816 The CPU time units used by the calling process.
8817
8818 `tms:stime'
8819 The CPU time units used by the system on behalf of the
8820 calling process.
8821
8822 `tms:cutime'
8823 The CPU time units used by terminated child processes of the
8824 calling process, whose status has been collected (e.g., using
8825 `waitpid').
8826
8827 `tms:cstime'
8828 Similarly, the CPU times units used by the system on behalf of
8829 terminated child processes.
7ad3c1e7 8830
e2d6569c
JB
8831** Removed: list-length
8832** Removed: list-append, list-append!
8833** Removed: list-reverse, list-reverse!
8834
8835** array-map renamed to array-map!
8836
8837** serial-array-map renamed to serial-array-map!
8838
660f41fa
MD
8839** catch doesn't take #f as first argument any longer
8840
8841Previously, it was possible to pass #f instead of a key to `catch'.
8842That would cause `catch' to pass a jump buffer object to the procedure
8843passed as second argument. The procedure could then use this jump
8844buffer objekt as an argument to throw.
8845
8846This mechanism has been removed since its utility doesn't motivate the
8847extra complexity it introduces.
8848
332d00f6
JB
8849** The `#/' notation for lists now provokes a warning message from Guile.
8850This syntax will be removed from Guile in the near future.
8851
8852To disable the warning message, set the GUILE_HUSH environment
8853variable to any non-empty value.
8854
8cd57bd0
JB
8855** The newline character now prints as `#\newline', following the
8856normal Scheme notation, not `#\nl'.
8857
c484bf7f
JB
8858* Changes to the gh_ interface
8859
8986901b
JB
8860** The gh_enter function now takes care of loading the Guile startup files.
8861gh_enter works by calling scm_boot_guile; see the remarks below.
8862
5424b4f7
MD
8863** Function: void gh_write (SCM x)
8864
8865Write the printed representation of the scheme object x to the current
8866output port. Corresponds to the scheme level `write'.
8867
3a97e020
MD
8868** gh_list_length renamed to gh_length.
8869
8d6787b6
MG
8870** vector handling routines
8871
8872Several major changes. In particular, gh_vector() now resembles
8873(vector ...) (with a caveat -- see manual), and gh_make_vector() now
956328d2
MG
8874exists and behaves like (make-vector ...). gh_vset() and gh_vref()
8875have been renamed gh_vector_set_x() and gh_vector_ref(). Some missing
8d6787b6
MG
8876vector-related gh_ functions have been implemented.
8877
7fee59bd
MG
8878** pair and list routines
8879
8880Implemented several of the R4RS pair and list functions that were
8881missing.
8882
171422a9
MD
8883** gh_scm2doubles, gh_doubles2scm, gh_doubles2dvect
8884
8885New function. Converts double arrays back and forth between Scheme
8886and C.
8887
c484bf7f
JB
8888* Changes to the scm_ interface
8889
8986901b
JB
8890** The function scm_boot_guile now takes care of loading the startup files.
8891
8892Guile's primary initialization function, scm_boot_guile, now takes
8893care of loading `boot-9.scm', in the `ice-9' module, to initialize
8894Guile, define the module system, and put together some standard
8895bindings. It also loads `init.scm', which is intended to hold
8896site-specific initialization code.
8897
8898Since Guile cannot operate properly until boot-9.scm is loaded, there
8899is no reason to separate loading boot-9.scm from Guile's other
8900initialization processes.
8901
8902This job used to be done by scm_compile_shell_switches, which didn't
8903make much sense; in particular, it meant that people using Guile for
8904non-shell-like applications had to jump through hoops to get Guile
8905initialized properly.
8906
8907** The function scm_compile_shell_switches no longer loads the startup files.
8908Now, Guile always loads the startup files, whenever it is initialized;
8909see the notes above for scm_boot_guile and scm_load_startup_files.
8910
8911** Function: scm_load_startup_files
8912This new function takes care of loading Guile's initialization file
8913(`boot-9.scm'), and the site initialization file, `init.scm'. Since
8914this is always called by the Guile initialization process, it's
8915probably not too useful to call this yourself, but it's there anyway.
8916
87148d9e
JB
8917** The semantics of smob marking have changed slightly.
8918
8919The smob marking function (the `mark' member of the scm_smobfuns
8920structure) is no longer responsible for setting the mark bit on the
8921smob. The generic smob handling code in the garbage collector will
8922set this bit. The mark function need only ensure that any other
8923objects the smob refers to get marked.
8924
8925Note that this change means that the smob's GC8MARK bit is typically
8926already set upon entry to the mark function. Thus, marking functions
8927which look like this:
8928
8929 {
8930 if (SCM_GC8MARKP (ptr))
8931 return SCM_BOOL_F;
8932 SCM_SETGC8MARK (ptr);
8933 ... mark objects to which the smob refers ...
8934 }
8935
8936are now incorrect, since they will return early, and fail to mark any
8937other objects the smob refers to. Some code in the Guile library used
8938to work this way.
8939
1cf84ea5
JB
8940** The semantics of the I/O port functions in scm_ptobfuns have changed.
8941
8942If you have implemented your own I/O port type, by writing the
8943functions required by the scm_ptobfuns and then calling scm_newptob,
8944you will need to change your functions slightly.
8945
8946The functions in a scm_ptobfuns structure now expect the port itself
8947as their argument; they used to expect the `stream' member of the
8948port's scm_port_table structure. This allows functions in an
8949scm_ptobfuns structure to easily access the port's cell (and any flags
8950it its CAR), and the port's scm_port_table structure.
8951
8952Guile now passes the I/O port itself as the `port' argument in the
8953following scm_ptobfuns functions:
8954
8955 int (*free) (SCM port);
8956 int (*fputc) (int, SCM port);
8957 int (*fputs) (char *, SCM port);
8958 scm_sizet (*fwrite) SCM_P ((char *ptr,
8959 scm_sizet size,
8960 scm_sizet nitems,
8961 SCM port));
8962 int (*fflush) (SCM port);
8963 int (*fgetc) (SCM port);
8964 int (*fclose) (SCM port);
8965
8966The interfaces to the `mark', `print', `equalp', and `fgets' methods
8967are unchanged.
8968
8969If you have existing code which defines its own port types, it is easy
8970to convert your code to the new interface; simply apply SCM_STREAM to
8971the port argument to yield the value you code used to expect.
8972
8973Note that since both the port and the stream have the same type in the
8974C code --- they are both SCM values --- the C compiler will not remind
8975you if you forget to update your scm_ptobfuns functions.
8976
8977
933a7411
MD
8978** Function: int scm_internal_select (int fds,
8979 SELECT_TYPE *rfds,
8980 SELECT_TYPE *wfds,
8981 SELECT_TYPE *efds,
8982 struct timeval *timeout);
8983
8984This is a replacement for the `select' function provided by the OS.
8985It enables I/O blocking and sleeping to happen for one cooperative
8986thread without blocking other threads. It also avoids busy-loops in
8987these situations. It is intended that all I/O blocking and sleeping
8988will finally go through this function. Currently, this function is
8989only available on systems providing `gettimeofday' and `select'.
8990
5424b4f7
MD
8991** Function: SCM scm_internal_stack_catch (SCM tag,
8992 scm_catch_body_t body,
8993 void *body_data,
8994 scm_catch_handler_t handler,
8995 void *handler_data)
8996
8997A new sibling to the other two C level `catch' functions
8998scm_internal_catch and scm_internal_lazy_catch. Use it if you want
8999the stack to be saved automatically into the variable `the-last-stack'
9000(scm_the_last_stack_var) on error. This is necessary if you want to
9001use advanced error reporting, such as calling scm_display_error and
9002scm_display_backtrace. (They both take a stack object as argument.)
9003
df366c26
MD
9004** Function: SCM scm_spawn_thread (scm_catch_body_t body,
9005 void *body_data,
9006 scm_catch_handler_t handler,
9007 void *handler_data)
9008
9009Spawns a new thread. It does a job similar to
9010scm_call_with_new_thread but takes arguments more suitable when
9011spawning threads from application C code.
9012
88482b31
MD
9013** The hook scm_error_callback has been removed. It was originally
9014intended as a way for the user to install his own error handler. But
9015that method works badly since it intervenes between throw and catch,
9016thereby changing the semantics of expressions like (catch #t ...).
9017The correct way to do it is to use one of the C level catch functions
9018in throw.c: scm_internal_catch/lazy_catch/stack_catch.
9019
3a97e020
MD
9020** Removed functions:
9021
9022scm_obj_length, scm_list_length, scm_list_append, scm_list_append_x,
9023scm_list_reverse, scm_list_reverse_x
9024
9025** New macros: SCM_LISTn where n is one of the integers 0-9.
9026
9027These can be used for pretty list creation from C. The idea is taken
9028from Erick Gallesio's STk.
9029
298aa6e3
MD
9030** scm_array_map renamed to scm_array_map_x
9031
527da704
MD
9032** mbstrings are now removed
9033
9034This means that the type codes scm_tc7_mb_string and
9035scm_tc7_mb_substring has been removed.
9036
8cd57bd0
JB
9037** scm_gen_putc, scm_gen_puts, scm_gen_write, and scm_gen_getc have changed.
9038
9039Since we no longer support multi-byte strings, these I/O functions
9040have been simplified, and renamed. Here are their old names, and
9041their new names and arguments:
9042
9043scm_gen_putc -> void scm_putc (int c, SCM port);
9044scm_gen_puts -> void scm_puts (char *s, SCM port);
9045scm_gen_write -> void scm_lfwrite (char *ptr, scm_sizet size, SCM port);
9046scm_gen_getc -> void scm_getc (SCM port);
9047
9048
527da704
MD
9049** The macros SCM_TYP7D and SCM_TYP7SD has been removed.
9050
9051** The macro SCM_TYP7S has taken the role of the old SCM_TYP7D
9052
9053SCM_TYP7S now masks away the bit which distinguishes substrings from
9054strings.
9055
660f41fa
MD
9056** scm_catch_body_t: Backward incompatible change!
9057
9058Body functions to scm_internal_catch and friends do not any longer
9059take a second argument. This is because it is no longer possible to
9060pass a #f arg to catch.
9061
a8e05009
JB
9062** Calls to scm_protect_object and scm_unprotect now nest properly.
9063
9064The function scm_protect_object protects its argument from being freed
9065by the garbage collector. scm_unprotect_object removes that
9066protection.
9067
9068These functions now nest properly. That is, for every object O, there
9069is a counter which scm_protect_object(O) increments and
9070scm_unprotect_object(O) decrements, if the counter is greater than
9071zero. Every object's counter is zero when it is first created. If an
9072object's counter is greater than zero, the garbage collector will not
9073reclaim its storage.
9074
9075This allows you to use scm_protect_object in your code without
9076worrying that some other function you call will call
9077scm_unprotect_object, and allow it to be freed. Assuming that the
9078functions you call are well-behaved, and unprotect only those objects
9079they protect, you can follow the same rule and have confidence that
9080objects will be freed only at appropriate times.
9081
c484bf7f
JB
9082\f
9083Changes in Guile 1.2 (released Tuesday, June 24 1997):
cf78e9e8 9084
737c9113
JB
9085* Changes to the distribution
9086
832b09ed
JB
9087** Nightly snapshots are now available from ftp.red-bean.com.
9088The old server, ftp.cyclic.com, has been relinquished to its rightful
9089owner.
9090
9091Nightly snapshots of the Guile development sources are now available via
9092anonymous FTP from ftp.red-bean.com, as /pub/guile/guile-snap.tar.gz.
9093
9094Via the web, that's: ftp://ftp.red-bean.com/pub/guile/guile-snap.tar.gz
9095For getit, that's: ftp.red-bean.com:/pub/guile/guile-snap.tar.gz
9096
0fcab5ed
JB
9097** To run Guile without installing it, the procedure has changed a bit.
9098
9099If you used a separate build directory to compile Guile, you'll need
9100to include the build directory in SCHEME_LOAD_PATH, as well as the
9101source directory. See the `INSTALL' file for examples.
9102
737c9113
JB
9103* Changes to the procedure for linking libguile with your programs
9104
94982a4e
JB
9105** The standard Guile load path for Scheme code now includes
9106$(datadir)/guile (usually /usr/local/share/guile). This means that
9107you can install your own Scheme files there, and Guile will find them.
9108(Previous versions of Guile only checked a directory whose name
9109contained the Guile version number, so you had to re-install or move
9110your Scheme sources each time you installed a fresh version of Guile.)
9111
9112The load path also includes $(datadir)/guile/site; we recommend
9113putting individual Scheme files there. If you want to install a
9114package with multiple source files, create a directory for them under
9115$(datadir)/guile.
9116
9117** Guile 1.2 will now use the Rx regular expression library, if it is
9118installed on your system. When you are linking libguile into your own
9119programs, this means you will have to link against -lguile, -lqt (if
9120you configured Guile with thread support), and -lrx.
27590f82
JB
9121
9122If you are using autoconf to generate configuration scripts for your
9123application, the following lines should suffice to add the appropriate
9124libraries to your link command:
9125
9126### Find Rx, quickthreads and libguile.
9127AC_CHECK_LIB(rx, main)
9128AC_CHECK_LIB(qt, main)
9129AC_CHECK_LIB(guile, scm_shell)
9130
94982a4e
JB
9131The Guile 1.2 distribution does not contain sources for the Rx
9132library, as Guile 1.0 did. If you want to use Rx, you'll need to
9133retrieve it from a GNU FTP site and install it separately.
9134
b83b8bee
JB
9135* Changes to Scheme functions and syntax
9136
e035e7e6
MV
9137** The dynamic linking features of Guile are now enabled by default.
9138You can disable them by giving the `--disable-dynamic-linking' option
9139to configure.
9140
e035e7e6
MV
9141 (dynamic-link FILENAME)
9142
9143 Find the object file denoted by FILENAME (a string) and link it
9144 into the running Guile application. When everything works out,
9145 return a Scheme object suitable for representing the linked object
9146 file. Otherwise an error is thrown. How object files are
9147 searched is system dependent.
9148
9149 (dynamic-object? VAL)
9150
9151 Determine whether VAL represents a dynamically linked object file.
9152
9153 (dynamic-unlink DYNOBJ)
9154
9155 Unlink the indicated object file from the application. DYNOBJ
9156 should be one of the values returned by `dynamic-link'.
9157
9158 (dynamic-func FUNCTION DYNOBJ)
9159
9160 Search the C function indicated by FUNCTION (a string or symbol)
9161 in DYNOBJ and return some Scheme object that can later be used
9162 with `dynamic-call' to actually call this function. Right now,
9163 these Scheme objects are formed by casting the address of the
9164 function to `long' and converting this number to its Scheme
9165 representation.
9166
9167 (dynamic-call FUNCTION DYNOBJ)
9168
9169 Call the C function indicated by FUNCTION and DYNOBJ. The
9170 function is passed no arguments and its return value is ignored.
9171 When FUNCTION is something returned by `dynamic-func', call that
9172 function and ignore DYNOBJ. When FUNCTION is a string (or symbol,
9173 etc.), look it up in DYNOBJ; this is equivalent to
9174
9175 (dynamic-call (dynamic-func FUNCTION DYNOBJ) #f)
9176
9177 Interrupts are deferred while the C function is executing (with
9178 SCM_DEFER_INTS/SCM_ALLOW_INTS).
9179
9180 (dynamic-args-call FUNCTION DYNOBJ ARGS)
9181
9182 Call the C function indicated by FUNCTION and DYNOBJ, but pass it
9183 some arguments and return its return value. The C function is
9184 expected to take two arguments and return an `int', just like
9185 `main':
9186
9187 int c_func (int argc, char **argv);
9188
9189 ARGS must be a list of strings and is converted into an array of
9190 `char *'. The array is passed in ARGV and its size in ARGC. The
9191 return value is converted to a Scheme number and returned from the
9192 call to `dynamic-args-call'.
9193
0fcab5ed
JB
9194When dynamic linking is disabled or not supported on your system,
9195the above functions throw errors, but they are still available.
9196
e035e7e6
MV
9197Here is a small example that works on GNU/Linux:
9198
9199 (define libc-obj (dynamic-link "libc.so"))
9200 (dynamic-args-call 'rand libc-obj '())
9201
9202See the file `libguile/DYNAMIC-LINKING' for additional comments.
9203
27590f82 9204** The #/ syntax for module names is depreciated, and will be removed
6c0201ad 9205in a future version of Guile. Instead of
27590f82
JB
9206
9207 #/foo/bar/baz
9208
9209instead write
9210
9211 (foo bar baz)
9212
9213The latter syntax is more consistent with existing Lisp practice.
9214
5dade857
MV
9215** Guile now does fancier printing of structures. Structures are the
9216underlying implementation for records, which in turn are used to
9217implement modules, so all of these object now print differently and in
9218a more informative way.
9219
161029df
JB
9220The Scheme printer will examine the builtin variable *struct-printer*
9221whenever it needs to print a structure object. When this variable is
9222not `#f' it is deemed to be a procedure and will be applied to the
9223structure object and the output port. When *struct-printer* is `#f'
9224or the procedure return `#f' the structure object will be printed in
9225the boring #<struct 80458270> form.
5dade857
MV
9226
9227This hook is used by some routines in ice-9/boot-9.scm to implement
9228type specific printing routines. Please read the comments there about
9229"printing structs".
9230
9231One of the more specific uses of structs are records. The printing
9232procedure that could be passed to MAKE-RECORD-TYPE is now actually
9233called. It should behave like a *struct-printer* procedure (described
9234above).
9235
b83b8bee
JB
9236** Guile now supports a new R4RS-compliant syntax for keywords. A
9237token of the form #:NAME, where NAME has the same syntax as a Scheme
9238symbol, is the external representation of the keyword named NAME.
9239Keyword objects print using this syntax as well, so values containing
1e5afba0
JB
9240keyword objects can be read back into Guile. When used in an
9241expression, keywords are self-quoting objects.
b83b8bee
JB
9242
9243Guile suports this read syntax, and uses this print syntax, regardless
9244of the current setting of the `keyword' read option. The `keyword'
9245read option only controls whether Guile recognizes the `:NAME' syntax,
9246which is incompatible with R4RS. (R4RS says such token represent
9247symbols.)
737c9113
JB
9248
9249** Guile has regular expression support again. Guile 1.0 included
9250functions for matching regular expressions, based on the Rx library.
9251In Guile 1.1, the Guile/Rx interface was removed to simplify the
9252distribution, and thus Guile had no regular expression support. Guile
94982a4e
JB
92531.2 again supports the most commonly used functions, and supports all
9254of SCSH's regular expression functions.
2409cdfa 9255
94982a4e
JB
9256If your system does not include a POSIX regular expression library,
9257and you have not linked Guile with a third-party regexp library such as
9258Rx, these functions will not be available. You can tell whether your
9259Guile installation includes regular expression support by checking
9260whether the `*features*' list includes the `regex' symbol.
737c9113 9261
94982a4e 9262*** regexp functions
161029df 9263
94982a4e
JB
9264By default, Guile supports POSIX extended regular expressions. That
9265means that the characters `(', `)', `+' and `?' are special, and must
9266be escaped if you wish to match the literal characters.
e1a191a8 9267
94982a4e
JB
9268This regular expression interface was modeled after that implemented
9269by SCSH, the Scheme Shell. It is intended to be upwardly compatible
9270with SCSH regular expressions.
9271
9272**** Function: string-match PATTERN STR [START]
9273 Compile the string PATTERN into a regular expression and compare
9274 it with STR. The optional numeric argument START specifies the
9275 position of STR at which to begin matching.
9276
9277 `string-match' returns a "match structure" which describes what,
9278 if anything, was matched by the regular expression. *Note Match
9279 Structures::. If STR does not match PATTERN at all,
9280 `string-match' returns `#f'.
9281
9282 Each time `string-match' is called, it must compile its PATTERN
9283argument into a regular expression structure. This operation is
9284expensive, which makes `string-match' inefficient if the same regular
9285expression is used several times (for example, in a loop). For better
9286performance, you can compile a regular expression in advance and then
9287match strings against the compiled regexp.
9288
9289**** Function: make-regexp STR [FLAGS]
9290 Compile the regular expression described by STR, and return the
9291 compiled regexp structure. If STR does not describe a legal
9292 regular expression, `make-regexp' throws a
9293 `regular-expression-syntax' error.
9294
9295 FLAGS may be the bitwise-or of one or more of the following:
9296
9297**** Constant: regexp/extended
9298 Use POSIX Extended Regular Expression syntax when interpreting
9299 STR. If not set, POSIX Basic Regular Expression syntax is used.
9300 If the FLAGS argument is omitted, we assume regexp/extended.
9301
9302**** Constant: regexp/icase
9303 Do not differentiate case. Subsequent searches using the
9304 returned regular expression will be case insensitive.
9305
9306**** Constant: regexp/newline
9307 Match-any-character operators don't match a newline.
9308
9309 A non-matching list ([^...]) not containing a newline matches a
9310 newline.
9311
9312 Match-beginning-of-line operator (^) matches the empty string
9313 immediately after a newline, regardless of whether the FLAGS
9314 passed to regexp-exec contain regexp/notbol.
9315
9316 Match-end-of-line operator ($) matches the empty string
9317 immediately before a newline, regardless of whether the FLAGS
9318 passed to regexp-exec contain regexp/noteol.
9319
9320**** Function: regexp-exec REGEXP STR [START [FLAGS]]
9321 Match the compiled regular expression REGEXP against `str'. If
9322 the optional integer START argument is provided, begin matching
9323 from that position in the string. Return a match structure
9324 describing the results of the match, or `#f' if no match could be
9325 found.
9326
9327 FLAGS may be the bitwise-or of one or more of the following:
9328
9329**** Constant: regexp/notbol
9330 The match-beginning-of-line operator always fails to match (but
9331 see the compilation flag regexp/newline above) This flag may be
9332 used when different portions of a string are passed to
9333 regexp-exec and the beginning of the string should not be
9334 interpreted as the beginning of the line.
9335
9336**** Constant: regexp/noteol
9337 The match-end-of-line operator always fails to match (but see the
9338 compilation flag regexp/newline above)
9339
9340**** Function: regexp? OBJ
9341 Return `#t' if OBJ is a compiled regular expression, or `#f'
9342 otherwise.
9343
9344 Regular expressions are commonly used to find patterns in one string
9345and replace them with the contents of another string.
9346
9347**** Function: regexp-substitute PORT MATCH [ITEM...]
9348 Write to the output port PORT selected contents of the match
9349 structure MATCH. Each ITEM specifies what should be written, and
9350 may be one of the following arguments:
9351
9352 * A string. String arguments are written out verbatim.
9353
9354 * An integer. The submatch with that number is written.
9355
9356 * The symbol `pre'. The portion of the matched string preceding
9357 the regexp match is written.
9358
9359 * The symbol `post'. The portion of the matched string
9360 following the regexp match is written.
9361
9362 PORT may be `#f', in which case nothing is written; instead,
9363 `regexp-substitute' constructs a string from the specified ITEMs
9364 and returns that.
9365
9366**** Function: regexp-substitute/global PORT REGEXP TARGET [ITEM...]
9367 Similar to `regexp-substitute', but can be used to perform global
9368 substitutions on STR. Instead of taking a match structure as an
9369 argument, `regexp-substitute/global' takes two string arguments: a
9370 REGEXP string describing a regular expression, and a TARGET string
9371 which should be matched against this regular expression.
9372
9373 Each ITEM behaves as in REGEXP-SUBSTITUTE, with the following
9374 exceptions:
9375
9376 * A function may be supplied. When this function is called, it
9377 will be passed one argument: a match structure for a given
9378 regular expression match. It should return a string to be
9379 written out to PORT.
9380
9381 * The `post' symbol causes `regexp-substitute/global' to recurse
9382 on the unmatched portion of STR. This *must* be supplied in
9383 order to perform global search-and-replace on STR; if it is
9384 not present among the ITEMs, then `regexp-substitute/global'
9385 will return after processing a single match.
9386
9387*** Match Structures
9388
9389 A "match structure" is the object returned by `string-match' and
9390`regexp-exec'. It describes which portion of a string, if any, matched
9391the given regular expression. Match structures include: a reference to
9392the string that was checked for matches; the starting and ending
9393positions of the regexp match; and, if the regexp included any
9394parenthesized subexpressions, the starting and ending positions of each
9395submatch.
9396
9397 In each of the regexp match functions described below, the `match'
9398argument must be a match structure returned by a previous call to
9399`string-match' or `regexp-exec'. Most of these functions return some
9400information about the original target string that was matched against a
9401regular expression; we will call that string TARGET for easy reference.
9402
9403**** Function: regexp-match? OBJ
9404 Return `#t' if OBJ is a match structure returned by a previous
9405 call to `regexp-exec', or `#f' otherwise.
9406
9407**** Function: match:substring MATCH [N]
9408 Return the portion of TARGET matched by subexpression number N.
9409 Submatch 0 (the default) represents the entire regexp match. If
9410 the regular expression as a whole matched, but the subexpression
9411 number N did not match, return `#f'.
9412
9413**** Function: match:start MATCH [N]
9414 Return the starting position of submatch number N.
9415
9416**** Function: match:end MATCH [N]
9417 Return the ending position of submatch number N.
9418
9419**** Function: match:prefix MATCH
9420 Return the unmatched portion of TARGET preceding the regexp match.
9421
9422**** Function: match:suffix MATCH
9423 Return the unmatched portion of TARGET following the regexp match.
9424
9425**** Function: match:count MATCH
9426 Return the number of parenthesized subexpressions from MATCH.
9427 Note that the entire regular expression match itself counts as a
9428 subexpression, and failed submatches are included in the count.
9429
9430**** Function: match:string MATCH
9431 Return the original TARGET string.
9432
9433*** Backslash Escapes
9434
9435 Sometimes you will want a regexp to match characters like `*' or `$'
9436exactly. For example, to check whether a particular string represents
9437a menu entry from an Info node, it would be useful to match it against
9438a regexp like `^* [^:]*::'. However, this won't work; because the
9439asterisk is a metacharacter, it won't match the `*' at the beginning of
9440the string. In this case, we want to make the first asterisk un-magic.
9441
9442 You can do this by preceding the metacharacter with a backslash
9443character `\'. (This is also called "quoting" the metacharacter, and
9444is known as a "backslash escape".) When Guile sees a backslash in a
9445regular expression, it considers the following glyph to be an ordinary
9446character, no matter what special meaning it would ordinarily have.
9447Therefore, we can make the above example work by changing the regexp to
9448`^\* [^:]*::'. The `\*' sequence tells the regular expression engine
9449to match only a single asterisk in the target string.
9450
9451 Since the backslash is itself a metacharacter, you may force a
9452regexp to match a backslash in the target string by preceding the
9453backslash with itself. For example, to find variable references in a
9454TeX program, you might want to find occurrences of the string `\let\'
9455followed by any number of alphabetic characters. The regular expression
9456`\\let\\[A-Za-z]*' would do this: the double backslashes in the regexp
9457each match a single backslash in the target string.
9458
9459**** Function: regexp-quote STR
9460 Quote each special character found in STR with a backslash, and
9461 return the resulting string.
9462
9463 *Very important:* Using backslash escapes in Guile source code (as
9464in Emacs Lisp or C) can be tricky, because the backslash character has
9465special meaning for the Guile reader. For example, if Guile encounters
9466the character sequence `\n' in the middle of a string while processing
9467Scheme code, it replaces those characters with a newline character.
9468Similarly, the character sequence `\t' is replaced by a horizontal tab.
9469Several of these "escape sequences" are processed by the Guile reader
9470before your code is executed. Unrecognized escape sequences are
9471ignored: if the characters `\*' appear in a string, they will be
9472translated to the single character `*'.
9473
9474 This translation is obviously undesirable for regular expressions,
9475since we want to be able to include backslashes in a string in order to
9476escape regexp metacharacters. Therefore, to make sure that a backslash
9477is preserved in a string in your Guile program, you must use *two*
9478consecutive backslashes:
9479
9480 (define Info-menu-entry-pattern (make-regexp "^\\* [^:]*"))
9481
9482 The string in this example is preprocessed by the Guile reader before
9483any code is executed. The resulting argument to `make-regexp' is the
9484string `^\* [^:]*', which is what we really want.
9485
9486 This also means that in order to write a regular expression that
9487matches a single backslash character, the regular expression string in
9488the source code must include *four* backslashes. Each consecutive pair
9489of backslashes gets translated by the Guile reader to a single
9490backslash, and the resulting double-backslash is interpreted by the
9491regexp engine as matching a single backslash character. Hence:
9492
9493 (define tex-variable-pattern (make-regexp "\\\\let\\\\=[A-Za-z]*"))
9494
9495 The reason for the unwieldiness of this syntax is historical. Both
9496regular expression pattern matchers and Unix string processing systems
9497have traditionally used backslashes with the special meanings described
9498above. The POSIX regular expression specification and ANSI C standard
9499both require these semantics. Attempting to abandon either convention
9500would cause other kinds of compatibility problems, possibly more severe
9501ones. Therefore, without extending the Scheme reader to support
9502strings with different quoting conventions (an ungainly and confusing
9503extension when implemented in other languages), we must adhere to this
9504cumbersome escape syntax.
9505
7ad3c1e7
GH
9506* Changes to the gh_ interface
9507
9508* Changes to the scm_ interface
9509
9510* Changes to system call interfaces:
94982a4e 9511
7ad3c1e7 9512** The value returned by `raise' is now unspecified. It throws an exception
e1a191a8
GH
9513if an error occurs.
9514
94982a4e 9515*** A new procedure `sigaction' can be used to install signal handlers
115b09a5
GH
9516
9517(sigaction signum [action] [flags])
9518
9519signum is the signal number, which can be specified using the value
9520of SIGINT etc.
9521
9522If action is omitted, sigaction returns a pair: the CAR is the current
9523signal hander, which will be either an integer with the value SIG_DFL
9524(default action) or SIG_IGN (ignore), or the Scheme procedure which
9525handles the signal, or #f if a non-Scheme procedure handles the
9526signal. The CDR contains the current sigaction flags for the handler.
9527
9528If action is provided, it is installed as the new handler for signum.
9529action can be a Scheme procedure taking one argument, or the value of
9530SIG_DFL (default action) or SIG_IGN (ignore), or #f to restore
9531whatever signal handler was installed before sigaction was first used.
9532Flags can optionally be specified for the new handler (SA_RESTART is
9533always used if the system provides it, so need not be specified.) The
9534return value is a pair with information about the old handler as
9535described above.
9536
9537This interface does not provide access to the "signal blocking"
9538facility. Maybe this is not needed, since the thread support may
9539provide solutions to the problem of consistent access to data
9540structures.
e1a191a8 9541
94982a4e 9542*** A new procedure `flush-all-ports' is equivalent to running
89ea5b7c
GH
9543`force-output' on every port open for output.
9544
94982a4e
JB
9545** Guile now provides information on how it was built, via the new
9546global variable, %guile-build-info. This variable records the values
9547of the standard GNU makefile directory variables as an assocation
9548list, mapping variable names (symbols) onto directory paths (strings).
9549For example, to find out where the Guile link libraries were
9550installed, you can say:
9551
9552guile -c "(display (assq-ref %guile-build-info 'libdir)) (newline)"
9553
9554
9555* Changes to the scm_ interface
9556
9557** The new function scm_handle_by_message_noexit is just like the
9558existing scm_handle_by_message function, except that it doesn't call
9559exit to terminate the process. Instead, it prints a message and just
9560returns #f. This might be a more appropriate catch-all handler for
9561new dynamic roots and threads.
9562
cf78e9e8 9563\f
c484bf7f 9564Changes in Guile 1.1 (released Friday, May 16 1997):
f3b1485f
JB
9565
9566* Changes to the distribution.
9567
9568The Guile 1.0 distribution has been split up into several smaller
9569pieces:
9570guile-core --- the Guile interpreter itself.
9571guile-tcltk --- the interface between the Guile interpreter and
9572 Tcl/Tk; Tcl is an interpreter for a stringy language, and Tk
9573 is a toolkit for building graphical user interfaces.
9574guile-rgx-ctax --- the interface between Guile and the Rx regular
9575 expression matcher, and the translator for the Ctax
9576 programming language. These are packaged together because the
9577 Ctax translator uses Rx to parse Ctax source code.
9578
095936d2
JB
9579This NEWS file describes the changes made to guile-core since the 1.0
9580release.
9581
48d224d7
JB
9582We no longer distribute the documentation, since it was either out of
9583date, or incomplete. As soon as we have current documentation, we
9584will distribute it.
9585
0fcab5ed
JB
9586
9587
f3b1485f
JB
9588* Changes to the stand-alone interpreter
9589
48d224d7
JB
9590** guile now accepts command-line arguments compatible with SCSH, Olin
9591Shivers' Scheme Shell.
9592
9593In general, arguments are evaluated from left to right, but there are
9594exceptions. The following switches stop argument processing, and
9595stash all remaining command-line arguments as the value returned by
9596the (command-line) function.
9597 -s SCRIPT load Scheme source code from FILE, and exit
9598 -c EXPR evalute Scheme expression EXPR, and exit
9599 -- stop scanning arguments; run interactively
9600
9601The switches below are processed as they are encountered.
9602 -l FILE load Scheme source code from FILE
9603 -e FUNCTION after reading script, apply FUNCTION to
9604 command line arguments
9605 -ds do -s script at this point
9606 --emacs enable Emacs protocol (experimental)
9607 -h, --help display this help and exit
9608 -v, --version display version information and exit
9609 \ read arguments from following script lines
9610
9611So, for example, here is a Guile script named `ekko' (thanks, Olin)
9612which re-implements the traditional "echo" command:
9613
9614#!/usr/local/bin/guile -s
9615!#
9616(define (main args)
9617 (map (lambda (arg) (display arg) (display " "))
9618 (cdr args))
9619 (newline))
9620
9621(main (command-line))
9622
9623Suppose we invoke this script as follows:
9624
9625 ekko a speckled gecko
9626
9627Through the magic of Unix script processing (triggered by the `#!'
9628token at the top of the file), /usr/local/bin/guile receives the
9629following list of command-line arguments:
9630
9631 ("-s" "./ekko" "a" "speckled" "gecko")
9632
9633Unix inserts the name of the script after the argument specified on
9634the first line of the file (in this case, "-s"), and then follows that
9635with the arguments given to the script. Guile loads the script, which
9636defines the `main' function, and then applies it to the list of
9637remaining command-line arguments, ("a" "speckled" "gecko").
9638
095936d2
JB
9639In Unix, the first line of a script file must take the following form:
9640
9641#!INTERPRETER ARGUMENT
9642
9643where INTERPRETER is the absolute filename of the interpreter
9644executable, and ARGUMENT is a single command-line argument to pass to
9645the interpreter.
9646
9647You may only pass one argument to the interpreter, and its length is
9648limited. These restrictions can be annoying to work around, so Guile
9649provides a general mechanism (borrowed from, and compatible with,
9650SCSH) for circumventing them.
9651
9652If the ARGUMENT in a Guile script is a single backslash character,
9653`\', Guile will open the script file, parse arguments from its second
9654and subsequent lines, and replace the `\' with them. So, for example,
9655here is another implementation of the `ekko' script:
9656
9657#!/usr/local/bin/guile \
9658-e main -s
9659!#
9660(define (main args)
9661 (for-each (lambda (arg) (display arg) (display " "))
9662 (cdr args))
9663 (newline))
9664
9665If the user invokes this script as follows:
9666
9667 ekko a speckled gecko
9668
9669Unix expands this into
9670
9671 /usr/local/bin/guile \ ekko a speckled gecko
9672
9673When Guile sees the `\' argument, it replaces it with the arguments
9674read from the second line of the script, producing:
9675
9676 /usr/local/bin/guile -e main -s ekko a speckled gecko
9677
9678This tells Guile to load the `ekko' script, and apply the function
9679`main' to the argument list ("a" "speckled" "gecko").
9680
9681Here is how Guile parses the command-line arguments:
9682- Each space character terminates an argument. This means that two
9683 spaces in a row introduce an empty-string argument.
9684- The tab character is not permitted (unless you quote it with the
9685 backslash character, as described below), to avoid confusion.
9686- The newline character terminates the sequence of arguments, and will
9687 also terminate a final non-empty argument. (However, a newline
9688 following a space will not introduce a final empty-string argument;
9689 it only terminates the argument list.)
9690- The backslash character is the escape character. It escapes
9691 backslash, space, tab, and newline. The ANSI C escape sequences
9692 like \n and \t are also supported. These produce argument
9693 constituents; the two-character combination \n doesn't act like a
9694 terminating newline. The escape sequence \NNN for exactly three
9695 octal digits reads as the character whose ASCII code is NNN. As
9696 above, characters produced this way are argument constituents.
9697 Backslash followed by other characters is not allowed.
9698
48d224d7
JB
9699* Changes to the procedure for linking libguile with your programs
9700
9701** Guile now builds and installs a shared guile library, if your
9702system support shared libraries. (It still builds a static library on
9703all systems.) Guile automatically detects whether your system
9704supports shared libraries. To prevent Guile from buildisg shared
9705libraries, pass the `--disable-shared' flag to the configure script.
9706
9707Guile takes longer to compile when it builds shared libraries, because
9708it must compile every file twice --- once to produce position-
9709independent object code, and once to produce normal object code.
9710
9711** The libthreads library has been merged into libguile.
9712
9713To link a program against Guile, you now need only link against
9714-lguile and -lqt; -lthreads is no longer needed. If you are using
9715autoconf to generate configuration scripts for your application, the
9716following lines should suffice to add the appropriate libraries to
9717your link command:
9718
9719### Find quickthreads and libguile.
9720AC_CHECK_LIB(qt, main)
9721AC_CHECK_LIB(guile, scm_shell)
f3b1485f
JB
9722
9723* Changes to Scheme functions
9724
095936d2
JB
9725** Guile Scheme's special syntax for keyword objects is now optional,
9726and disabled by default.
9727
9728The syntax variation from R4RS made it difficult to port some
9729interesting packages to Guile. The routines which accepted keyword
9730arguments (mostly in the module system) have been modified to also
9731accept symbols whose names begin with `:'.
9732
9733To change the keyword syntax, you must first import the (ice-9 debug)
9734module:
9735 (use-modules (ice-9 debug))
9736
9737Then you can enable the keyword syntax as follows:
9738 (read-set! keywords 'prefix)
9739
9740To disable keyword syntax, do this:
9741 (read-set! keywords #f)
9742
9743** Many more primitive functions accept shared substrings as
9744arguments. In the past, these functions required normal, mutable
9745strings as arguments, although they never made use of this
9746restriction.
9747
9748** The uniform array functions now operate on byte vectors. These
9749functions are `array-fill!', `serial-array-copy!', `array-copy!',
9750`serial-array-map', `array-map', `array-for-each', and
9751`array-index-map!'.
9752
9753** The new functions `trace' and `untrace' implement simple debugging
9754support for Scheme functions.
9755
9756The `trace' function accepts any number of procedures as arguments,
9757and tells the Guile interpreter to display each procedure's name and
9758arguments each time the procedure is invoked. When invoked with no
9759arguments, `trace' returns the list of procedures currently being
9760traced.
9761
9762The `untrace' function accepts any number of procedures as arguments,
9763and tells the Guile interpreter not to trace them any more. When
9764invoked with no arguments, `untrace' untraces all curretly traced
9765procedures.
9766
9767The tracing in Guile has an advantage over most other systems: we
9768don't create new procedure objects, but mark the procedure objects
9769themselves. This means that anonymous and internal procedures can be
9770traced.
9771
9772** The function `assert-repl-prompt' has been renamed to
9773`set-repl-prompt!'. It takes one argument, PROMPT.
9774- If PROMPT is #f, the Guile read-eval-print loop will not prompt.
9775- If PROMPT is a string, we use it as a prompt.
9776- If PROMPT is a procedure accepting no arguments, we call it, and
9777 display the result as a prompt.
9778- Otherwise, we display "> ".
9779
9780** The new function `eval-string' reads Scheme expressions from a
9781string and evaluates them, returning the value of the last expression
9782in the string. If the string contains no expressions, it returns an
9783unspecified value.
9784
9785** The new function `thunk?' returns true iff its argument is a
9786procedure of zero arguments.
9787
9788** `defined?' is now a builtin function, instead of syntax. This
9789means that its argument should be quoted. It returns #t iff its
9790argument is bound in the current module.
9791
9792** The new syntax `use-modules' allows you to add new modules to your
9793environment without re-typing a complete `define-module' form. It
9794accepts any number of module names as arguments, and imports their
9795public bindings into the current module.
9796
9797** The new function (module-defined? NAME MODULE) returns true iff
9798NAME, a symbol, is defined in MODULE, a module object.
9799
9800** The new function `builtin-bindings' creates and returns a hash
9801table containing copies of all the root module's bindings.
9802
9803** The new function `builtin-weak-bindings' does the same as
9804`builtin-bindings', but creates a doubly-weak hash table.
9805
9806** The `equal?' function now considers variable objects to be
9807equivalent if they have the same name and the same value.
9808
9809** The new function `command-line' returns the command-line arguments
9810given to Guile, as a list of strings.
9811
9812When using guile as a script interpreter, `command-line' returns the
9813script's arguments; those processed by the interpreter (like `-s' or
9814`-c') are omitted. (In other words, you get the normal, expected
9815behavior.) Any application that uses scm_shell to process its
9816command-line arguments gets this behavior as well.
9817
9818** The new function `load-user-init' looks for a file called `.guile'
9819in the user's home directory, and loads it if it exists. This is
9820mostly for use by the code generated by scm_compile_shell_switches,
9821but we thought it might also be useful in other circumstances.
9822
9823** The new function `log10' returns the base-10 logarithm of its
9824argument.
9825
9826** Changes to I/O functions
9827
6c0201ad 9828*** The functions `read', `primitive-load', `read-and-eval!', and
095936d2
JB
9829`primitive-load-path' no longer take optional arguments controlling
9830case insensitivity and a `#' parser.
9831
9832Case sensitivity is now controlled by a read option called
9833`case-insensitive'. The user can add new `#' syntaxes with the
9834`read-hash-extend' function (see below).
9835
9836*** The new function `read-hash-extend' allows the user to change the
9837syntax of Guile Scheme in a somewhat controlled way.
9838
9839(read-hash-extend CHAR PROC)
9840 When parsing S-expressions, if we read a `#' character followed by
9841 the character CHAR, use PROC to parse an object from the stream.
9842 If PROC is #f, remove any parsing procedure registered for CHAR.
9843
9844 The reader applies PROC to two arguments: CHAR and an input port.
9845
6c0201ad 9846*** The new functions read-delimited and read-delimited! provide a
095936d2
JB
9847general mechanism for doing delimited input on streams.
9848
9849(read-delimited DELIMS [PORT HANDLE-DELIM])
9850 Read until we encounter one of the characters in DELIMS (a string),
9851 or end-of-file. PORT is the input port to read from; it defaults to
9852 the current input port. The HANDLE-DELIM parameter determines how
9853 the terminating character is handled; it should be one of the
9854 following symbols:
9855
9856 'trim omit delimiter from result
9857 'peek leave delimiter character in input stream
9858 'concat append delimiter character to returned value
9859 'split return a pair: (RESULT . TERMINATOR)
9860
9861 HANDLE-DELIM defaults to 'peek.
9862
9863(read-delimited! DELIMS BUF [PORT HANDLE-DELIM START END])
9864 A side-effecting variant of `read-delimited'.
9865
9866 The data is written into the string BUF at the indices in the
9867 half-open interval [START, END); the default interval is the whole
9868 string: START = 0 and END = (string-length BUF). The values of
9869 START and END must specify a well-defined interval in BUF, i.e.
9870 0 <= START <= END <= (string-length BUF).
9871
9872 It returns NBYTES, the number of bytes read. If the buffer filled
9873 up without a delimiter character being found, it returns #f. If the
9874 port is at EOF when the read starts, it returns the EOF object.
9875
9876 If an integer is returned (i.e., the read is successfully terminated
9877 by reading a delimiter character), then the HANDLE-DELIM parameter
9878 determines how to handle the terminating character. It is described
9879 above, and defaults to 'peek.
9880
9881(The descriptions of these functions were borrowed from the SCSH
9882manual, by Olin Shivers and Brian Carlstrom.)
9883
9884*** The `%read-delimited!' function is the primitive used to implement
9885`read-delimited' and `read-delimited!'.
9886
9887(%read-delimited! DELIMS BUF GOBBLE? [PORT START END])
9888
9889This returns a pair of values: (TERMINATOR . NUM-READ).
9890- TERMINATOR describes why the read was terminated. If it is a
9891 character or the eof object, then that is the value that terminated
9892 the read. If it is #f, the function filled the buffer without finding
9893 a delimiting character.
9894- NUM-READ is the number of characters read into BUF.
9895
9896If the read is successfully terminated by reading a delimiter
9897character, then the gobble? parameter determines what to do with the
9898terminating character. If true, the character is removed from the
9899input stream; if false, the character is left in the input stream
9900where a subsequent read operation will retrieve it. In either case,
9901the character is also the first value returned by the procedure call.
9902
9903(The descriptions of this function was borrowed from the SCSH manual,
9904by Olin Shivers and Brian Carlstrom.)
9905
9906*** The `read-line' and `read-line!' functions have changed; they now
9907trim the terminator by default; previously they appended it to the
9908returned string. For the old behavior, use (read-line PORT 'concat).
9909
9910*** The functions `uniform-array-read!' and `uniform-array-write!' now
9911take new optional START and END arguments, specifying the region of
9912the array to read and write.
9913
f348c807
JB
9914*** The `ungetc-char-ready?' function has been removed. We feel it's
9915inappropriate for an interface to expose implementation details this
9916way.
095936d2
JB
9917
9918** Changes to the Unix library and system call interface
9919
9920*** The new fcntl function provides access to the Unix `fcntl' system
9921call.
9922
9923(fcntl PORT COMMAND VALUE)
9924 Apply COMMAND to PORT's file descriptor, with VALUE as an argument.
9925 Values for COMMAND are:
9926
9927 F_DUPFD duplicate a file descriptor
9928 F_GETFD read the descriptor's close-on-exec flag
9929 F_SETFD set the descriptor's close-on-exec flag to VALUE
9930 F_GETFL read the descriptor's flags, as set on open
9931 F_SETFL set the descriptor's flags, as set on open to VALUE
9932 F_GETOWN return the process ID of a socket's owner, for SIGIO
9933 F_SETOWN set the process that owns a socket to VALUE, for SIGIO
9934 FD_CLOEXEC not sure what this is
9935
9936For details, see the documentation for the fcntl system call.
9937
9938*** The arguments to `select' have changed, for compatibility with
9939SCSH. The TIMEOUT parameter may now be non-integral, yielding the
9940expected behavior. The MILLISECONDS parameter has been changed to
9941MICROSECONDS, to more closely resemble the underlying system call.
9942The RVEC, WVEC, and EVEC arguments can now be vectors; the type of the
9943corresponding return set will be the same.
9944
9945*** The arguments to the `mknod' system call have changed. They are
9946now:
9947
9948(mknod PATH TYPE PERMS DEV)
9949 Create a new file (`node') in the file system. PATH is the name of
9950 the file to create. TYPE is the kind of file to create; it should
9951 be 'fifo, 'block-special, or 'char-special. PERMS specifies the
9952 permission bits to give the newly created file. If TYPE is
9953 'block-special or 'char-special, DEV specifies which device the
9954 special file refers to; its interpretation depends on the kind of
9955 special file being created.
9956
9957*** The `fork' function has been renamed to `primitive-fork', to avoid
9958clashing with various SCSH forks.
9959
9960*** The `recv' and `recvfrom' functions have been renamed to `recv!'
9961and `recvfrom!'. They no longer accept a size for a second argument;
9962you must pass a string to hold the received value. They no longer
9963return the buffer. Instead, `recv' returns the length of the message
9964received, and `recvfrom' returns a pair containing the packet's length
6c0201ad 9965and originating address.
095936d2
JB
9966
9967*** The file descriptor datatype has been removed, as have the
9968`read-fd', `write-fd', `close', `lseek', and `dup' functions.
9969We plan to replace these functions with a SCSH-compatible interface.
9970
9971*** The `create' function has been removed; it's just a special case
9972of `open'.
9973
9974*** There are new functions to break down process termination status
9975values. In the descriptions below, STATUS is a value returned by
9976`waitpid'.
9977
9978(status:exit-val STATUS)
9979 If the child process exited normally, this function returns the exit
9980 code for the child process (i.e., the value passed to exit, or
9981 returned from main). If the child process did not exit normally,
9982 this function returns #f.
9983
9984(status:stop-sig STATUS)
9985 If the child process was suspended by a signal, this function
9986 returns the signal that suspended the child. Otherwise, it returns
9987 #f.
9988
9989(status:term-sig STATUS)
9990 If the child process terminated abnormally, this function returns
9991 the signal that terminated the child. Otherwise, this function
9992 returns false.
9993
9994POSIX promises that exactly one of these functions will return true on
9995a valid STATUS value.
9996
9997These functions are compatible with SCSH.
9998
9999*** There are new accessors and setters for the broken-out time vectors
48d224d7
JB
10000returned by `localtime', `gmtime', and that ilk. They are:
10001
10002 Component Accessor Setter
10003 ========================= ============ ============
10004 seconds tm:sec set-tm:sec
10005 minutes tm:min set-tm:min
10006 hours tm:hour set-tm:hour
10007 day of the month tm:mday set-tm:mday
10008 month tm:mon set-tm:mon
10009 year tm:year set-tm:year
10010 day of the week tm:wday set-tm:wday
10011 day in the year tm:yday set-tm:yday
10012 daylight saving time tm:isdst set-tm:isdst
10013 GMT offset, seconds tm:gmtoff set-tm:gmtoff
10014 name of time zone tm:zone set-tm:zone
10015
095936d2
JB
10016*** There are new accessors for the vectors returned by `uname',
10017describing the host system:
48d224d7
JB
10018
10019 Component Accessor
10020 ============================================== ================
10021 name of the operating system implementation utsname:sysname
10022 network name of this machine utsname:nodename
10023 release level of the operating system utsname:release
10024 version level of the operating system utsname:version
10025 machine hardware platform utsname:machine
10026
095936d2
JB
10027*** There are new accessors for the vectors returned by `getpw',
10028`getpwnam', `getpwuid', and `getpwent', describing entries from the
10029system's user database:
10030
10031 Component Accessor
10032 ====================== =================
10033 user name passwd:name
10034 user password passwd:passwd
10035 user id passwd:uid
10036 group id passwd:gid
10037 real name passwd:gecos
10038 home directory passwd:dir
10039 shell program passwd:shell
10040
10041*** There are new accessors for the vectors returned by `getgr',
10042`getgrnam', `getgrgid', and `getgrent', describing entries from the
10043system's group database:
10044
10045 Component Accessor
10046 ======================= ============
10047 group name group:name
10048 group password group:passwd
10049 group id group:gid
10050 group members group:mem
10051
10052*** There are new accessors for the vectors returned by `gethost',
10053`gethostbyaddr', `gethostbyname', and `gethostent', describing
10054internet hosts:
10055
10056 Component Accessor
10057 ========================= ===============
10058 official name of host hostent:name
10059 alias list hostent:aliases
10060 host address type hostent:addrtype
10061 length of address hostent:length
10062 list of addresses hostent:addr-list
10063
10064*** There are new accessors for the vectors returned by `getnet',
10065`getnetbyaddr', `getnetbyname', and `getnetent', describing internet
10066networks:
10067
10068 Component Accessor
10069 ========================= ===============
10070 official name of net netent:name
10071 alias list netent:aliases
10072 net number type netent:addrtype
10073 net number netent:net
10074
10075*** There are new accessors for the vectors returned by `getproto',
10076`getprotobyname', `getprotobynumber', and `getprotoent', describing
10077internet protocols:
10078
10079 Component Accessor
10080 ========================= ===============
10081 official protocol name protoent:name
10082 alias list protoent:aliases
10083 protocol number protoent:proto
10084
10085*** There are new accessors for the vectors returned by `getserv',
10086`getservbyname', `getservbyport', and `getservent', describing
10087internet protocols:
10088
10089 Component Accessor
10090 ========================= ===============
6c0201ad 10091 official service name servent:name
095936d2 10092 alias list servent:aliases
6c0201ad
TTN
10093 port number servent:port
10094 protocol to use servent:proto
095936d2
JB
10095
10096*** There are new accessors for the sockaddr structures returned by
10097`accept', `getsockname', `getpeername', `recvfrom!':
10098
10099 Component Accessor
10100 ======================================== ===============
6c0201ad 10101 address format (`family') sockaddr:fam
095936d2
JB
10102 path, for file domain addresses sockaddr:path
10103 address, for internet domain addresses sockaddr:addr
10104 TCP or UDP port, for internet sockaddr:port
10105
10106*** The `getpwent', `getgrent', `gethostent', `getnetent',
10107`getprotoent', and `getservent' functions now return #f at the end of
10108the user database. (They used to throw an exception.)
10109
10110Note that calling MUMBLEent function is equivalent to calling the
10111corresponding MUMBLE function with no arguments.
10112
10113*** The `setpwent', `setgrent', `sethostent', `setnetent',
10114`setprotoent', and `setservent' routines now take no arguments.
10115
10116*** The `gethost', `getproto', `getnet', and `getserv' functions now
10117provide more useful information when they throw an exception.
10118
10119*** The `lnaof' function has been renamed to `inet-lnaof'.
10120
10121*** Guile now claims to have the `current-time' feature.
10122
10123*** The `mktime' function now takes an optional second argument ZONE,
10124giving the time zone to use for the conversion. ZONE should be a
10125string, in the same format as expected for the "TZ" environment variable.
10126
10127*** The `strptime' function now returns a pair (TIME . COUNT), where
10128TIME is the parsed time as a vector, and COUNT is the number of
10129characters from the string left unparsed. This function used to
10130return the remaining characters as a string.
10131
10132*** The `gettimeofday' function has replaced the old `time+ticks' function.
10133The return value is now (SECONDS . MICROSECONDS); the fractional
10134component is no longer expressed in "ticks".
10135
10136*** The `ticks/sec' constant has been removed, in light of the above change.
6685dc83 10137
ea00ecba
MG
10138* Changes to the gh_ interface
10139
10140** gh_eval_str() now returns an SCM object which is the result of the
10141evaluation
10142
aaef0d2a
MG
10143** gh_scm2str() now copies the Scheme data to a caller-provided C
10144array
10145
10146** gh_scm2newstr() now makes a C array, copies the Scheme data to it,
10147and returns the array
10148
10149** gh_scm2str0() is gone: there is no need to distinguish
10150null-terminated from non-null-terminated, since gh_scm2newstr() allows
10151the user to interpret the data both ways.
10152
f3b1485f
JB
10153* Changes to the scm_ interface
10154
095936d2
JB
10155** The new function scm_symbol_value0 provides an easy way to get a
10156symbol's value from C code:
10157
10158SCM scm_symbol_value0 (char *NAME)
10159 Return the value of the symbol named by the null-terminated string
10160 NAME in the current module. If the symbol named NAME is unbound in
10161 the current module, return SCM_UNDEFINED.
10162
10163** The new function scm_sysintern0 creates new top-level variables,
10164without assigning them a value.
10165
10166SCM scm_sysintern0 (char *NAME)
10167 Create a new Scheme top-level variable named NAME. NAME is a
10168 null-terminated string. Return the variable's value cell.
10169
10170** The function scm_internal_catch is the guts of catch. It handles
10171all the mechanics of setting up a catch target, invoking the catch
10172body, and perhaps invoking the handler if the body does a throw.
10173
10174The function is designed to be usable from C code, but is general
10175enough to implement all the semantics Guile Scheme expects from throw.
10176
10177TAG is the catch tag. Typically, this is a symbol, but this function
10178doesn't actually care about that.
10179
10180BODY is a pointer to a C function which runs the body of the catch;
10181this is the code you can throw from. We call it like this:
10182 BODY (BODY_DATA, JMPBUF)
10183where:
10184 BODY_DATA is just the BODY_DATA argument we received; we pass it
10185 through to BODY as its first argument. The caller can make
10186 BODY_DATA point to anything useful that BODY might need.
10187 JMPBUF is the Scheme jmpbuf object corresponding to this catch,
10188 which we have just created and initialized.
10189
10190HANDLER is a pointer to a C function to deal with a throw to TAG,
10191should one occur. We call it like this:
10192 HANDLER (HANDLER_DATA, THROWN_TAG, THROW_ARGS)
10193where
10194 HANDLER_DATA is the HANDLER_DATA argument we recevied; it's the
10195 same idea as BODY_DATA above.
10196 THROWN_TAG is the tag that the user threw to; usually this is
10197 TAG, but it could be something else if TAG was #t (i.e., a
10198 catch-all), or the user threw to a jmpbuf.
10199 THROW_ARGS is the list of arguments the user passed to the THROW
10200 function.
10201
10202BODY_DATA is just a pointer we pass through to BODY. HANDLER_DATA
10203is just a pointer we pass through to HANDLER. We don't actually
10204use either of those pointers otherwise ourselves. The idea is
10205that, if our caller wants to communicate something to BODY or
10206HANDLER, it can pass a pointer to it as MUMBLE_DATA, which BODY and
10207HANDLER can then use. Think of it as a way to make BODY and
10208HANDLER closures, not just functions; MUMBLE_DATA points to the
10209enclosed variables.
10210
10211Of course, it's up to the caller to make sure that any data a
10212MUMBLE_DATA needs is protected from GC. A common way to do this is
10213to make MUMBLE_DATA a pointer to data stored in an automatic
10214structure variable; since the collector must scan the stack for
10215references anyway, this assures that any references in MUMBLE_DATA
10216will be found.
10217
10218** The new function scm_internal_lazy_catch is exactly like
10219scm_internal_catch, except:
10220
10221- It does not unwind the stack (this is the major difference).
10222- If handler returns, its value is returned from the throw.
10223- BODY always receives #f as its JMPBUF argument (since there's no
10224 jmpbuf associated with a lazy catch, because we don't unwind the
10225 stack.)
10226
10227** scm_body_thunk is a new body function you can pass to
10228scm_internal_catch if you want the body to be like Scheme's `catch'
10229--- a thunk, or a function of one argument if the tag is #f.
10230
10231BODY_DATA is a pointer to a scm_body_thunk_data structure, which
10232contains the Scheme procedure to invoke as the body, and the tag
10233we're catching. If the tag is #f, then we pass JMPBUF (created by
10234scm_internal_catch) to the body procedure; otherwise, the body gets
10235no arguments.
10236
10237** scm_handle_by_proc is a new handler function you can pass to
10238scm_internal_catch if you want the handler to act like Scheme's catch
10239--- call a procedure with the tag and the throw arguments.
10240
10241If the user does a throw to this catch, this function runs a handler
10242procedure written in Scheme. HANDLER_DATA is a pointer to an SCM
10243variable holding the Scheme procedure object to invoke. It ought to
10244be a pointer to an automatic variable (i.e., one living on the stack),
10245or the procedure object should be otherwise protected from GC.
10246
10247** scm_handle_by_message is a new handler function to use with
10248`scm_internal_catch' if you want Guile to print a message and die.
10249It's useful for dealing with throws to uncaught keys at the top level.
10250
10251HANDLER_DATA, if non-zero, is assumed to be a char * pointing to a
10252message header to print; if zero, we use "guile" instead. That
10253text is followed by a colon, then the message described by ARGS.
10254
10255** The return type of scm_boot_guile is now void; the function does
10256not return a value, and indeed, never returns at all.
10257
f3b1485f
JB
10258** The new function scm_shell makes it easy for user applications to
10259process command-line arguments in a way that is compatible with the
10260stand-alone guile interpreter (which is in turn compatible with SCSH,
10261the Scheme shell).
10262
10263To use the scm_shell function, first initialize any guile modules
10264linked into your application, and then call scm_shell with the values
7ed46dc8 10265of ARGC and ARGV your `main' function received. scm_shell will add
f3b1485f
JB
10266any SCSH-style meta-arguments from the top of the script file to the
10267argument vector, and then process the command-line arguments. This
10268generally means loading a script file or starting up an interactive
10269command interpreter. For details, see "Changes to the stand-alone
10270interpreter" above.
10271
095936d2 10272** The new functions scm_get_meta_args and scm_count_argv help you
6c0201ad 10273implement the SCSH-style meta-argument, `\'.
095936d2
JB
10274
10275char **scm_get_meta_args (int ARGC, char **ARGV)
10276 If the second element of ARGV is a string consisting of a single
10277 backslash character (i.e. "\\" in Scheme notation), open the file
10278 named by the following argument, parse arguments from it, and return
10279 the spliced command line. The returned array is terminated by a
10280 null pointer.
6c0201ad 10281
095936d2
JB
10282 For details of argument parsing, see above, under "guile now accepts
10283 command-line arguments compatible with SCSH..."
10284
10285int scm_count_argv (char **ARGV)
10286 Count the arguments in ARGV, assuming it is terminated by a null
10287 pointer.
10288
10289For an example of how these functions might be used, see the source
10290code for the function scm_shell in libguile/script.c.
10291
10292You will usually want to use scm_shell instead of calling this
10293function yourself.
10294
10295** The new function scm_compile_shell_switches turns an array of
10296command-line arguments into Scheme code to carry out the actions they
10297describe. Given ARGC and ARGV, it returns a Scheme expression to
10298evaluate, and calls scm_set_program_arguments to make any remaining
10299command-line arguments available to the Scheme code. For example,
10300given the following arguments:
10301
10302 -e main -s ekko a speckled gecko
10303
10304scm_set_program_arguments will return the following expression:
10305
10306 (begin (load "ekko") (main (command-line)) (quit))
10307
10308You will usually want to use scm_shell instead of calling this
10309function yourself.
10310
10311** The function scm_shell_usage prints a usage message appropriate for
10312an interpreter that uses scm_compile_shell_switches to handle its
10313command-line arguments.
10314
10315void scm_shell_usage (int FATAL, char *MESSAGE)
10316 Print a usage message to the standard error output. If MESSAGE is
10317 non-zero, write it before the usage message, followed by a newline.
10318 If FATAL is non-zero, exit the process, using FATAL as the
10319 termination status. (If you want to be compatible with Guile,
10320 always use 1 as the exit status when terminating due to command-line
10321 usage problems.)
10322
10323You will usually want to use scm_shell instead of calling this
10324function yourself.
48d224d7
JB
10325
10326** scm_eval_0str now returns SCM_UNSPECIFIED if the string contains no
095936d2
JB
10327expressions. It used to return SCM_EOL. Earth-shattering.
10328
10329** The macros for declaring scheme objects in C code have been
10330rearranged slightly. They are now:
10331
10332SCM_SYMBOL (C_NAME, SCHEME_NAME)
10333 Declare a static SCM variable named C_NAME, and initialize it to
10334 point to the Scheme symbol whose name is SCHEME_NAME. C_NAME should
10335 be a C identifier, and SCHEME_NAME should be a C string.
10336
10337SCM_GLOBAL_SYMBOL (C_NAME, SCHEME_NAME)
10338 Just like SCM_SYMBOL, but make C_NAME globally visible.
10339
10340SCM_VCELL (C_NAME, SCHEME_NAME)
10341 Create a global variable at the Scheme level named SCHEME_NAME.
10342 Declare a static SCM variable named C_NAME, and initialize it to
10343 point to the Scheme variable's value cell.
10344
10345SCM_GLOBAL_VCELL (C_NAME, SCHEME_NAME)
10346 Just like SCM_VCELL, but make C_NAME globally visible.
10347
10348The `guile-snarf' script writes initialization code for these macros
10349to its standard output, given C source code as input.
10350
10351The SCM_GLOBAL macro is gone.
10352
10353** The scm_read_line and scm_read_line_x functions have been replaced
10354by Scheme code based on the %read-delimited! procedure (known to C
10355code as scm_read_delimited_x). See its description above for more
10356information.
48d224d7 10357
095936d2
JB
10358** The function scm_sys_open has been renamed to scm_open. It now
10359returns a port instead of an FD object.
ea00ecba 10360
095936d2
JB
10361* The dynamic linking support has changed. For more information, see
10362libguile/DYNAMIC-LINKING.
ea00ecba 10363
f7b47737
JB
10364\f
10365Guile 1.0b3
3065a62a 10366
f3b1485f
JB
10367User-visible changes from Thursday, September 5, 1996 until Guile 1.0
10368(Sun 5 Jan 1997):
3065a62a 10369
4b521edb 10370* Changes to the 'guile' program:
3065a62a 10371
4b521edb
JB
10372** Guile now loads some new files when it starts up. Guile first
10373searches the load path for init.scm, and loads it if found. Then, if
10374Guile is not being used to execute a script, and the user's home
10375directory contains a file named `.guile', Guile loads that.
c6486f8a 10376
4b521edb 10377** You can now use Guile as a shell script interpreter.
3065a62a
JB
10378
10379To paraphrase the SCSH manual:
10380
10381 When Unix tries to execute an executable file whose first two
10382 characters are the `#!', it treats the file not as machine code to
10383 be directly executed by the native processor, but as source code
10384 to be executed by some interpreter. The interpreter to use is
10385 specified immediately after the #! sequence on the first line of
10386 the source file. The kernel reads in the name of the interpreter,
10387 and executes that instead. It passes the interpreter the source
10388 filename as its first argument, with the original arguments
10389 following. Consult the Unix man page for the `exec' system call
10390 for more information.
10391
1a1945be
JB
10392Now you can use Guile as an interpreter, using a mechanism which is a
10393compatible subset of that provided by SCSH.
10394
3065a62a
JB
10395Guile now recognizes a '-s' command line switch, whose argument is the
10396name of a file of Scheme code to load. It also treats the two
10397characters `#!' as the start of a comment, terminated by `!#'. Thus,
10398to make a file of Scheme code directly executable by Unix, insert the
10399following two lines at the top of the file:
10400
10401#!/usr/local/bin/guile -s
10402!#
10403
10404Guile treats the argument of the `-s' command-line switch as the name
10405of a file of Scheme code to load, and treats the sequence `#!' as the
10406start of a block comment, terminated by `!#'.
10407
10408For example, here's a version of 'echo' written in Scheme:
10409
10410#!/usr/local/bin/guile -s
10411!#
10412(let loop ((args (cdr (program-arguments))))
10413 (if (pair? args)
10414 (begin
10415 (display (car args))
10416 (if (pair? (cdr args))
10417 (display " "))
10418 (loop (cdr args)))))
10419(newline)
10420
10421Why does `#!' start a block comment terminated by `!#', instead of the
10422end of the line? That is the notation SCSH uses, and although we
10423don't yet support the other SCSH features that motivate that choice,
10424we would like to be backward-compatible with any existing Guile
3763761c
JB
10425scripts once we do. Furthermore, if the path to Guile on your system
10426is too long for your kernel, you can start the script with this
10427horrible hack:
10428
10429#!/bin/sh
10430exec /really/long/path/to/guile -s "$0" ${1+"$@"}
10431!#
3065a62a
JB
10432
10433Note that some very old Unix systems don't support the `#!' syntax.
10434
c6486f8a 10435
4b521edb 10436** You can now run Guile without installing it.
6685dc83
JB
10437
10438Previous versions of the interactive Guile interpreter (`guile')
10439couldn't start up unless Guile's Scheme library had been installed;
10440they used the value of the environment variable `SCHEME_LOAD_PATH'
10441later on in the startup process, but not to find the startup code
10442itself. Now Guile uses `SCHEME_LOAD_PATH' in all searches for Scheme
10443code.
10444
10445To run Guile without installing it, build it in the normal way, and
10446then set the environment variable `SCHEME_LOAD_PATH' to a
10447colon-separated list of directories, including the top-level directory
10448of the Guile sources. For example, if you unpacked Guile so that the
10449full filename of this NEWS file is /home/jimb/guile-1.0b3/NEWS, then
10450you might say
10451
10452 export SCHEME_LOAD_PATH=/home/jimb/my-scheme:/home/jimb/guile-1.0b3
10453
c6486f8a 10454
4b521edb
JB
10455** Guile's read-eval-print loop no longer prints #<unspecified>
10456results. If the user wants to see this, she can evaluate the
10457expression (assert-repl-print-unspecified #t), perhaps in her startup
48d224d7 10458file.
6685dc83 10459
4b521edb
JB
10460** Guile no longer shows backtraces by default when an error occurs;
10461however, it does display a message saying how to get one, and how to
10462request that they be displayed by default. After an error, evaluate
10463 (backtrace)
10464to see a backtrace, and
10465 (debug-enable 'backtrace)
10466to see them by default.
6685dc83 10467
6685dc83 10468
d9fb83d9 10469
4b521edb
JB
10470* Changes to Guile Scheme:
10471
10472** Guile now distinguishes between #f and the empty list.
10473
10474This is for compatibility with the IEEE standard, the (possibly)
10475upcoming Revised^5 Report on Scheme, and many extant Scheme
10476implementations.
10477
10478Guile used to have #f and '() denote the same object, to make Scheme's
10479type system more compatible with Emacs Lisp's. However, the change
10480caused too much trouble for Scheme programmers, and we found another
10481way to reconcile Emacs Lisp with Scheme that didn't require this.
10482
10483
10484** Guile's delq, delv, delete functions, and their destructive
c6486f8a
JB
10485counterparts, delq!, delv!, and delete!, now remove all matching
10486elements from the list, not just the first. This matches the behavior
10487of the corresponding Emacs Lisp functions, and (I believe) the Maclisp
10488functions which inspired them.
10489
10490I recognize that this change may break code in subtle ways, but it
10491seems best to make the change before the FSF's first Guile release,
10492rather than after.
10493
10494
4b521edb 10495** The compiled-library-path function has been deleted from libguile.
6685dc83 10496
4b521edb 10497** The facilities for loading Scheme source files have changed.
c6486f8a 10498
4b521edb 10499*** The variable %load-path now tells Guile which directories to search
6685dc83
JB
10500for Scheme code. Its value is a list of strings, each of which names
10501a directory.
10502
4b521edb
JB
10503*** The variable %load-extensions now tells Guile which extensions to
10504try appending to a filename when searching the load path. Its value
10505is a list of strings. Its default value is ("" ".scm").
10506
10507*** (%search-load-path FILENAME) searches the directories listed in the
10508value of the %load-path variable for a Scheme file named FILENAME,
10509with all the extensions listed in %load-extensions. If it finds a
10510match, then it returns its full filename. If FILENAME is absolute, it
10511returns it unchanged. Otherwise, it returns #f.
6685dc83 10512
4b521edb
JB
10513%search-load-path will not return matches that refer to directories.
10514
10515*** (primitive-load FILENAME :optional CASE-INSENSITIVE-P SHARP)
10516uses %seach-load-path to find a file named FILENAME, and loads it if
10517it finds it. If it can't read FILENAME for any reason, it throws an
10518error.
6685dc83
JB
10519
10520The arguments CASE-INSENSITIVE-P and SHARP are interpreted as by the
4b521edb
JB
10521`read' function.
10522
10523*** load uses the same searching semantics as primitive-load.
10524
10525*** The functions %try-load, try-load-with-path, %load, load-with-path,
10526basic-try-load-with-path, basic-load-with-path, try-load-module-with-
10527path, and load-module-with-path have been deleted. The functions
10528above should serve their purposes.
10529
10530*** If the value of the variable %load-hook is a procedure,
10531`primitive-load' applies its value to the name of the file being
10532loaded (without the load path directory name prepended). If its value
10533is #f, it is ignored. Otherwise, an error occurs.
10534
10535This is mostly useful for printing load notification messages.
10536
10537
10538** The function `eval!' is no longer accessible from the scheme level.
10539We can't allow operations which introduce glocs into the scheme level,
10540because Guile's type system can't handle these as data. Use `eval' or
10541`read-and-eval!' (see below) as replacement.
10542
10543** The new function read-and-eval! reads an expression from PORT,
10544evaluates it, and returns the result. This is more efficient than
10545simply calling `read' and `eval', since it is not necessary to make a
10546copy of the expression for the evaluator to munge.
10547
10548Its optional arguments CASE_INSENSITIVE_P and SHARP are interpreted as
10549for the `read' function.
10550
10551
10552** The function `int?' has been removed; its definition was identical
10553to that of `integer?'.
10554
10555** The functions `<?', `<?', `<=?', `=?', `>?', and `>=?'. Code should
10556use the R4RS names for these functions.
10557
10558** The function object-properties no longer returns the hash handle;
10559it simply returns the object's property list.
10560
10561** Many functions have been changed to throw errors, instead of
10562returning #f on failure. The point of providing exception handling in
10563the language is to simplify the logic of user code, but this is less
10564useful if Guile's primitives don't throw exceptions.
10565
10566** The function `fileno' has been renamed from `%fileno'.
10567
10568** The function primitive-mode->fdes returns #t or #f now, not 1 or 0.
10569
10570
10571* Changes to Guile's C interface:
10572
10573** The library's initialization procedure has been simplified.
10574scm_boot_guile now has the prototype:
10575
10576void scm_boot_guile (int ARGC,
10577 char **ARGV,
10578 void (*main_func) (),
10579 void *closure);
10580
10581scm_boot_guile calls MAIN_FUNC, passing it CLOSURE, ARGC, and ARGV.
10582MAIN_FUNC should do all the work of the program (initializing other
10583packages, reading user input, etc.) before returning. When MAIN_FUNC
10584returns, call exit (0); this function never returns. If you want some
10585other exit value, MAIN_FUNC may call exit itself.
10586
10587scm_boot_guile arranges for program-arguments to return the strings
10588given by ARGC and ARGV. If MAIN_FUNC modifies ARGC/ARGV, should call
10589scm_set_program_arguments with the final list, so Scheme code will
10590know which arguments have been processed.
10591
10592scm_boot_guile establishes a catch-all catch handler which prints an
10593error message and exits the process. This means that Guile exits in a
10594coherent way when system errors occur and the user isn't prepared to
10595handle it. If the user doesn't like this behavior, they can establish
10596their own universal catcher in MAIN_FUNC to shadow this one.
10597
10598Why must the caller do all the real work from MAIN_FUNC? The garbage
10599collector assumes that all local variables of type SCM will be above
10600scm_boot_guile's stack frame on the stack. If you try to manipulate
10601SCM values after this function returns, it's the luck of the draw
10602whether the GC will be able to find the objects you allocate. So,
10603scm_boot_guile function exits, rather than returning, to discourage
10604people from making that mistake.
10605
10606The IN, OUT, and ERR arguments were removed; there are other
10607convenient ways to override these when desired.
10608
10609The RESULT argument was deleted; this function should never return.
10610
10611The BOOT_CMD argument was deleted; the MAIN_FUNC argument is more
10612general.
10613
10614
10615** Guile's header files should no longer conflict with your system's
10616header files.
10617
10618In order to compile code which #included <libguile.h>, previous
10619versions of Guile required you to add a directory containing all the
10620Guile header files to your #include path. This was a problem, since
10621Guile's header files have names which conflict with many systems'
10622header files.
10623
10624Now only <libguile.h> need appear in your #include path; you must
10625refer to all Guile's other header files as <libguile/mumble.h>.
10626Guile's installation procedure puts libguile.h in $(includedir), and
10627the rest in $(includedir)/libguile.
10628
10629
10630** Two new C functions, scm_protect_object and scm_unprotect_object,
10631have been added to the Guile library.
10632
10633scm_protect_object (OBJ) protects OBJ from the garbage collector.
10634OBJ will not be freed, even if all other references are dropped,
10635until someone does scm_unprotect_object (OBJ). Both functions
10636return OBJ.
10637
10638Note that calls to scm_protect_object do not nest. You can call
10639scm_protect_object any number of times on a given object, and the
10640next call to scm_unprotect_object will unprotect it completely.
10641
10642Basically, scm_protect_object and scm_unprotect_object just
10643maintain a list of references to things. Since the GC knows about
10644this list, all objects it mentions stay alive. scm_protect_object
10645adds its argument to the list; scm_unprotect_object remove its
10646argument from the list.
10647
10648
10649** scm_eval_0str now returns the value of the last expression
10650evaluated.
10651
10652** The new function scm_read_0str reads an s-expression from a
10653null-terminated string, and returns it.
10654
10655** The new function `scm_stdio_to_port' converts a STDIO file pointer
10656to a Scheme port object.
10657
10658** The new function `scm_set_program_arguments' allows C code to set
e80c8fea 10659the value returned by the Scheme `program-arguments' function.
6685dc83 10660
6685dc83 10661\f
1a1945be
JB
10662Older changes:
10663
10664* Guile no longer includes sophisticated Tcl/Tk support.
10665
10666The old Tcl/Tk support was unsatisfying to us, because it required the
10667user to link against the Tcl library, as well as Tk and Guile. The
10668interface was also un-lispy, in that it preserved Tcl/Tk's practice of
10669referring to widgets by names, rather than exporting widgets to Scheme
10670code as a special datatype.
10671
10672In the Usenix Tk Developer's Workshop held in July 1996, the Tcl/Tk
10673maintainers described some very interesting changes in progress to the
10674Tcl/Tk internals, which would facilitate clean interfaces between lone
10675Tk and other interpreters --- even for garbage-collected languages
10676like Scheme. They expected the new Tk to be publicly available in the
10677fall of 1996.
10678
10679Since it seems that Guile might soon have a new, cleaner interface to
10680lone Tk, and that the old Guile/Tk glue code would probably need to be
10681completely rewritten, we (Jim Blandy and Richard Stallman) have
10682decided not to support the old code. We'll spend the time instead on
10683a good interface to the newer Tk, as soon as it is available.
5c54da76 10684
8512dea6 10685Until then, gtcltk-lib provides trivial, low-maintenance functionality.
deb95d71 10686
5c54da76
JB
10687\f
10688Copyright information:
10689
4f416616 10690Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2006 Free Software Foundation, Inc.
5c54da76
JB
10691
10692 Permission is granted to anyone to make or distribute verbatim copies
10693 of this document as received, in any medium, provided that the
10694 copyright notice and this permission notice are preserved,
10695 thus giving the recipient permission to redistribute in turn.
10696
10697 Permission is granted to distribute modified versions
10698 of this document, or of portions of it,
10699 under the above conditions, provided also that they
10700 carry prominent notices stating who last changed them.
10701
48d224d7
JB
10702\f
10703Local variables:
10704mode: outline
10705paragraph-separate: "[ \f]*$"
10706end: