,frame and related commands handle for-trap? appropriately
[bpt/guile.git] / NEWS
CommitLineData
b2cbe8d8 1Guile NEWS --- history of user-visible changes.
4a457691 2Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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
4f969117
AW
8Note: During the 1.9 series, we will keep an incremental NEWS for the
9latest prerelease, and a full NEWS corresponding to 1.8 -> 2.0.
ef283979 10
46088b26 11
77b13912
AR
12Changes in 1.9.12 (since the 1.9.11 prerelease):
13
fdc8fd46 14** SRFI support
56ec46a7 15
fdc8fd46
AR
16The following SRFIs have been added:
17
18- SRFI-27 "Sources of Random Bits"
19- SRFI-42 "Eager Comprehensions"
f16a2007 20- SRFI-45 "Primitives for Expressing Iterative Lazy Algorithms"
56ec46a7 21
66ad445d
AW
22** Many R6RS bugfixes
23
24`(rnrs bytevectors)' and `(rnrs io ports)' now have version information,
25like the rest of the modules. The `(rnrs unicode)' module is now
26re-exported by `(rnrs)'. Top-level `import' forms may have more than one
27clause. Warnings about duplicate bindings have been fixed, along with
28some typos in the modules. There were a number of other bugfixes as well.
29
30For the current list of known R6RS incompatibilities, see "R6RS
31Incompatibilities" in the manual.
32
33** Documentation for standard R6RS libraries
34
35See "R6RS Standard Libraries" in the manual, for more details.
36
37** Support for `letrec*'
38
46088b26
AW
39Guile now supports `letrec*', a recursive lexical binding operator in
40which the identifiers are bound in order. See "Local Bindings" in the
41manual, for more details.
66ad445d
AW
42
43** Internal definitions now expand to `letrec*'
44
45Following the R6RS, internal definitions now expand to letrec* instead
46of letrec. The following program is invalid for R5RS, but valid for
47R6RS:
48
49 (define (foo)
50 (define bar 10)
51 (define baz (+ bar 20))
52 baz)
53
54 ;; R5RS and Guile <= 1.8:
55 (foo) => Unbound variable: bar
56 ;; R6RS and Guile >= 2.0:
57 (foo) => 30
58
59This change should not affect correct R5RS programs, or programs written
60in earlier Guile dialects.
61
62** Recursive debugging REPL on error
63
64When Guile sees an error, instead of dropping into a special debugging
65prompt, it will enter a recursive REPL in the dynamic context of the
66error. See "Error Handling" in the manual, for more information.
67
68A recursive REPL is the same as any other REPL, except that it
69has been augmented with debugging information, so that one can inspect
70the context of the error. The debugger has been integrated with the REPL
71via a set of debugging meta-commands.
72
73For example, one may access a backtrace with `,backtrace' (or
74`,bt'). See "Interactive Debugging" in the manual, for more
75information.
76
1d3aa2ba
LC
77** New `error-message' meta-command at the REPL
78
79The new `error-message' meta-command displays the message associated
80with the error that started the current debugging REPL. See "Debug
81Commands" in the manual.
82
66ad445d
AW
83** Readline tab completion for arguments
84
85When readline is enabled, tab completion works for arguments too, not
86just for the operator position.
87
88** Various REPL robustness fixes
89
90The REPL no longer enters the debugger when an error occurs at read-time
91and compile-time, or when executing meta-commands. Additionally, the
92REPL is more strict about the ports that it uses, saving the current
93input and output ports at startup and using those ports when entering
94recursive prompts. This allows debugging of an error within
95e.g. `call-with-input-port'.
96
97Finally, Ctrl-d can now be used to exit a recursive REPL, dropping the
98user back to the parent REPL.
99
100** Better procedure name and source location propagation
101
102There was a bug in 1.9.11 which would leave most procedures un-named;
103this and other previous deficiencies have been fixed.
104
105** New macro: `current-source-location'
106
1d3aa2ba 107The macro returns the current source location (to be documented).
66ad445d 108
1d3aa2ba 109** `module-filename' field and accessor
66ad445d
AW
110
111Modules now record the file in which they are defined. This field may be
112accessed with the new `module-filename' procedure.
113
1d3aa2ba 114** Deprecate the old `scm-style-repl'
66ad445d
AW
115
116The following bindings from boot-9 are now found in `(ice-9
117scm-style-repl)': `scm-style-repl', `error-catching-loop',
118`error-catching-repl', `bad-throw', `scm-repl-silent'
119`assert-repl-silence', `repl-print-unspecified',
120`assert-repl-print-unspecified', `scm-repl-verbose',
121`assert-repl-verbosity', `scm-repl-prompt', `set-repl-prompt!', `repl',
122`default-pre-unwind-handler', `handle-system-error',
123
124The following bindings have been deprecated, with no replacement:
125`pre-unwind-handler-dispatch'.
126
127The following bindings have been totally removed:
128`before-signal-stack'.
129
130Deprecated forwarding shims have been installed so that users that
131expect these bindings in the main namespace will still work, but receive
132a deprecation warning.
133
1d3aa2ba
LC
134** Passing a number as the destination of `format' is deprecated
135
136The `format' procedure in `(ice-9 format)' now emits a deprecation
137warning if a number is passed as its first argument.
138
66ad445d
AW
139** Miscellaneous other deprecations
140
141`apply-to-args', `has-suffix?', `scheme-file-suffix'
142`get-option', `for-next-option', `display-usage-report',
143`transform-usage-lambda', `collect', `set-batch-mode?!'
144
145** All core defmacros reimplemented hygienically
146
147All macros present in the default environment are now implemented with
148syntax-case. This should not have practical ramifications, beyond those
149listed below in "Lexical bindings introduced by hygienic macros may not
150be referenced by nonhygienic macros".
151
18e90860 152** Random generator state may be serialized to a datum
77b13912 153
18e90860 154`random-state->datum' will serialize a random state to a datum, which
66ad445d
AW
155may be written out, read back in later, and revivified using
156`datum->random-state'. See "Random" in the manual, for more details.
157
158** New primitive: `tmpfile'.
159
160See "File System" in the manual.
161
162** Modules load within a known environment
163
164It takes a few procedure calls to define a module, and those procedure
165calls need to be in scope. Now we ensure that the current module when
166loading a module is one that has the needed bindings, instead of relying
167on chance.
168
169** Remove encoding of versions into the file system
170
171It used to be that, when loading a module, if the user specified a
93003b16 172version, Guile would grovel about in the file system to find the
66ad445d
AW
173module. This process was slow and not robust. This support has been
174removed: modules are once more always loaded via `primitive-load-path'.
175
93003b16 176Module versions in the file system may be added again in the future, in
66ad445d
AW
177an extensible way. Contact bug-guile@gnu.org with patches.
178
179** Alex Shinn's pattern matcher for (ice-9 match).
180
181Guile's copy of Andrew K. Wright's `match' library has been replaced by
1d3aa2ba
LC
182a compatible hygienic implementation by Alex Shinn. It is now
183documented, see "Pattern Matching" in the manual.
66ad445d
AW
184
185Compared to Andrew K. Wright's `match', the new `match' lacks
186`match-define', `match:error-control', `match:set-error-control',
187`match:error', `match:set-error', and all structure-related procedures.
188
189** Better debugging for psyntax
190
191We now build psyntax-pp.go directly from psyntax.scm, which allows us to
192preserve the original source locations and variable names. Git users
1d3aa2ba 193will also be pleased to note that psyntax-pp.scm is no longer
66ad445d
AW
194automatically regenerated from a normal `make' invocation.
195
196** AM_SILENT_RULES
197
198Guile's build is visually quieter, due to the use of Automake 1.11's
199AM_SILENT_RULES. Build as `make V=1' to see all of the output.
200
201** Better REPL options interface
202
203The set of REPL options is now fixed and typechecked -- you can't
204mistakenly set an option that doesn't exist, or set an value with an
205incorrect type. The following options have been added: `prompt',
206`compile-options', and `value-history'.
207
208The new `repl-default-option-set!' procedure from `(system repl common)'
209can set default options for future REPLs. `repl-default-prompt-set!' is
210a convenience procedure to set default prompts.
211
212** `*unspecified*' is identifier syntax
213
214`*unspecified*' is no longer a variable, so it is optimized properly by
215the compiler, and is not `set!'-able.
216
217** `set-batch-mode?!' replaced by `ensure-batch-mode!'
218
219"Batch mode" is a flag used to tell a program that it is not running
220interactively. One usually turns it on after a fork. It may not be
221turned off. `ensure-batch-mode!' deprecates the old `set-batch-mode?!',
222because it is a better interface, as it can only turn on batch mode, not
223turn it off.
224
66ad445d
AW
225** Support for settable identifier syntax
226
227Following the R6RS, "variable transformers" are settable
228identifier-syntax. See "Identifier macros" in the manual, for more
229information.
230
231** Deprecate `save-stack', `the-last-stack'
232
233It used to be that the way to debug programs in Guile was to capture the
234stack at the time of error, drop back to the REPL, then debug that
235stack. But this approach didn't compose, was tricky to get right in the
236presence of threads, and was not very powerful.
237
238So `save-stack', `stack-saved?', and `the-last-stack' have been moved to
239`(ice-9 save-stack)', with deprecated bindings left in the root module.
240
241** Compilation warnings at the REPL
242
243By default, Guile now prints compile-time warnings for code entered at
244the REPL. Current warnings are for unbound variables and mismatched
245arities.
246
247** syntax-case treats `_' as a placeholder
248
249Following R6RS, a `_' in a syntax-rules or syntax-case pattern matches
250anything, and binds no pattern variables. Unlike the R6RS, Guile also
251permits `_' to be in the literals list for a pattern.
252
253** Remove old Emacs interface
254
255Guile had an unused `--emacs' command line argument that was supposed to
256help when running Guile inside Emacs. This option has been removed, and
257the helper functions `named-module-use!' and `load-emacs-interface' have
258been deprecated.
259
260** `top-repl' has its own module
261
262The `top-repl' binding, called with Guile is run interactively, is now
263is its own module, `(ice-9 top-repl)'. A deprecated forwarding shim was
264left in the default environment.
265
266** Value history in the REPL on by default
267
268By default, the REPL will save computed values in variables like `$1',
269`$2', and the like. There are programmatic and interactive interfaces to
270control this. See "Value History" in the manual, for more information.
271
272** New threads are in `(guile-user)' by default, not `(guile)'
273
274It used to be that a new thread entering Guile would do so in the
275`(guile)' module, unless this was the first time Guile was initialized,
276in which case it was `(guile-user)'. This has been fixed to have all
277new threads unknown to Guile default to `(guile-user)'.
278
279** Backtrace improvements
280
281It used to be that backtraces showed a couple of extra frames, from the
282implementation of prompts. This has been fixed. Also, backtraces now
283print column numbers in addition to line numbers, if possible.
284
285** `display-error' takes a frame
286
287The `display-error' / `scm_display_error' helper now takes a frame as an
288argument instead of a stack. Stacks are still supported in deprecated
289builds. Additionally, `display-error' will again source location
290information for the error.
291
292** Better error reporting from the VM
293
294If a value of the wrong type is passed to `car', `cdr', `set-car!',
295`set-cdr!', `apply', a struct accessor, or a bytevector accessors, the
296error from the VM now indicates which procedure failed, instead of
297lumping them all into the non-helpful "VM error". In addition, unbound
298variable reporting is now more helpful.
299
300** No more `(ice-9 debug)'
301
302This module had some debugging helpers that are no longer applicable to
303the current debugging model. Importing this module will produce a
304deprecation warning. Users should contact bug-guile for support.
305
306** No more `(system vm debug)'
307
308This module is replaced by the recursive debugging REPL.
309
310** File ports handle binary mode and coding declarations
311
312Binary file ports are supported again, by opening files in the
313ISO-8859-1 encoding. If an encoding is not specified for textual ports,
314Guile now grovels the file for a "coding:" directive, and uses that if
315possible. See the documentation for `open-file', for more information.
316
317** R6RS character hex escapes on by default
318
319However, R6RS character escapes within strings are incompatible with
320older Guile escape sequences, so they still need the reader option
321turned on. See "Reader Options" in the manual, for more information.
322
323** Fix random number generator on 64-bit platforms
324
325There was a nasty bug on 64-bit platforms in which asking for a random
326integer with a range between 2**32 and 2**64 caused a segfault. After
327many embarrassing iterations, this was fixed.
328
1d3aa2ba 329** Add `vhash-fold*' in `(ice-9 vlist)'
66ad445d
AW
330
331See "VLists" in the manual, for more information.
332
333** Timestamps on autocompiled files checked for freshness, not equality
334
335It used to be that to load a `.go' file instead of a `.scm' file, we
336required that the timestamp of the `.go' file be equal to that of the
337`.scm'. This has been relaxed to accept newer `.go' files, to integrate
338better with `make' tools.
339
1d3aa2ba
LC
340** Use of nanosecond-resolution timestamps
341
342The auto-compilation logic now compares the source and compiled file
343timestamps using nano-second resolution, when available.
344
345** Simplifications and callback support added to the `(system foreign)'.
66ad445d
AW
346
347Guile's foreign function interface was simplified a great
4f969117
AW
348deal. Interested users should see "Foreign Function Interface" in the
349manual, for full details.
66ad445d 350
1d3aa2ba
LC
351In addition, the new procedure `procedure->pointer' makes it possible to
352use Scheme procedures as "callbacks" to C functions.
353
66ad445d
AW
354** User Scheme code may be placed in a version-specific path
355
356Before, there was only one way to install user Scheme code to a
357version-specific Guile directory: install to Guile's own path,
358e.g. /usr/share/guile/2.0. The site directory,
359e.g. /usr/share/guile/site, was unversioned. This has been changed to
360add a version-specific site directory, e.g. /usr/share/guile/site/2.0,
361searched before the global site directory.
8a302245 362
1d3aa2ba
LC
363** Docstrings for `syntax-rules' macros
364
365The `syntax-rules' form now accepts a docstring between the literals and
366the first clause.
367
368** SRFI-1 partly rewritten in Scheme
369
370Some of the SRFI-1 procedures that were written in C "for efficiency"
371have been rewritten in Scheme.
372
acf04ab4
AW
373** And of course, the usual collection of bugfixes
374
19fef497
AW
375Interested users should see the ChangeLog for more information.
376
acf04ab4 377
7b96f3dd 378\f
ef283979 379Changes in 1.9.x (since the 1.8.x series):
96b73e84
AW
380
381* New modules (see the manual for details)
382
383** `(srfi srfi-18)', more sophisticated multithreading support
384** `(ice-9 i18n)', internationalization support
0f13fcde 385** `(rnrs bytevectors)', the R6RS bytevector API
93617170 386** `(rnrs io ports)', a subset of the R6RS I/O port API
96b73e84 387** `(system xref)', a cross-referencing facility (FIXME undocumented)
dbd9532e 388** `(ice-9 vlist)', lists with constant-time random access; hash lists
fb53c347 389** `(system foreign)', foreign function interface
18e90860
AW
390** `(sxml match)', a pattern matcher for SXML
391** `(srfi srfi-9 gnu)', extensions to the SRFI-9 record library
392** `(system vm coverage)', a line-by-line code coverage library
66ad445d 393
cf8ec359
AW
394** Imported statprof, SSAX, and texinfo modules from Guile-Lib
395
396The statprof statistical profiler, the SSAX XML toolkit, and the texinfo
397toolkit from Guile-Lib have been imported into Guile proper. See
398"Standard Library" in the manual for more details.
399
139fa149
AW
400** Integration of lalr-scm, a parser generator
401
402Guile has included Dominique Boucher's fine `lalr-scm' parser generator
403as `(system base lalr)'. See "LALR(1) Parsing" in the manual, for more
404information.
405
96b73e84
AW
406* Changes to the stand-alone interpreter
407
408** Guile now can compile Scheme to bytecode for a custom virtual machine.
409
410Compiled code loads much faster than Scheme source code, and runs around
4113 or 4 times as fast, generating much less garbage in the process.
fa1804e9 412
29b98fb2 413** Evaluating Scheme code does not use the C stack.
fa1804e9 414
29b98fb2
AW
415Besides when compiling Guile itself, Guile no longer uses a recursive C
416function as an evaluator. This obviates the need to check the C stack
417pointer for overflow. Continuations still capture the C stack, however.
fa1804e9 418
96b73e84
AW
419** New environment variables: GUILE_LOAD_COMPILED_PATH,
420 GUILE_SYSTEM_LOAD_COMPILED_PATH
fa1804e9 421
96b73e84
AW
422GUILE_LOAD_COMPILED_PATH is for compiled files what GUILE_LOAD_PATH is
423for source files. It is a different path, however, because compiled
424files are architecture-specific. GUILE_SYSTEM_LOAD_COMPILED_PATH is like
425GUILE_SYSTEM_PATH.
426
427** New read-eval-print loop (REPL) implementation
428
429Running Guile with no arguments drops the user into the new REPL. While
430it is self-documenting to an extent, the new REPL has not yet been
431documented in the manual. This will be fixed before 2.0.
432
6bf927ab
LC
433** New reader options: `square-brackets' and `r6rs-hex-escapes'
434
435The reader supports a new option (changeable via `read-options'),
436`square-brackets', which instructs it to interpret square brackets as
29b98fb2 437parentheses. This option is on by default.
6bf927ab
LC
438
439When the new `r6rs-hex-escapes' reader option is enabled, the reader
440will recognize string escape sequences as defined in R6RS.
441
cf8ec359
AW
442** Function profiling and tracing at the REPL
443
444The `,profile FORM' REPL meta-command can now be used to statistically
445profile execution of a form, to see which functions are taking the most
446time. See `,help profile' for more information.
447
448Similarly, `,trace FORM' traces all function applications that occur
449during the execution of `FORM'. See `,help trace' for more information.
450
451** New debugger
452
453By default, if an exception is raised at the REPL and not caught by user
454code, Guile will drop the user into a debugger. The user may request a
455backtrace, inspect frames, or continue raising the exception. Full
456documentation is available from within the debugger.
457
96b73e84
AW
458** New `guile-tools' commands: `compile', `disassemble'
459
93617170 460Pass the `--help' command-line option to these commands for more
96b73e84
AW
461information.
462
b0217d17
AW
463** Guile now adds its install prefix to the LTDL_LIBRARY_PATH
464
465Users may now install Guile to nonstandard prefixes and just run
466`/path/to/bin/guile', instead of also having to set LTDL_LIBRARY_PATH to
467include `/path/to/lib'.
468
469** Guile's Emacs integration is now more keyboard-friendly
470
471Backtraces may now be disclosed with the keyboard in addition to the
472mouse.
473
cf8ec359
AW
474** Load path change: search in version-specific paths before site paths
475
476When looking for a module, Guile now searches first in Guile's
477version-specific path (the library path), *then* in the site dir. This
478allows Guile's copy of SSAX to override any Guile-Lib copy the user has
479installed. Also it should cut the number of `stat' system calls by half,
480in the common case.
481
139fa149
AW
482** Interactive Guile follows GNU conventions
483
484As recommended by the GPL, Guile now shows a brief copyright and
485warranty disclaimer on startup, along with pointers to more information.
cf8ec359 486
96b73e84
AW
487* Changes to Scheme functions and syntax
488
18e90860
AW
489** Support for R6RS libraries
490
491The `library' and `import' forms from the latest Scheme report have been
492added to Guile, in such a way that R6RS libraries share a namespace with
493Guile modules. R6RS modules may import Guile modules, and are available
494for Guile modules to import via use-modules and all the rest. See "R6RS
495Libraries" in the manual for more information.
496
497** Implementations of R6RS libraries
498
499Guile now has implementations for all of the libraries defined in the
500R6RS. Thanks to Julian Graham for this excellent hack. See "R6RS
501Standard Libraries" in the manual for a full list of libraries.
502
503** Partial R6RS compatibility
504
505Guile now has enough support for R6RS to run a reasonably large subset
506of R6RS programs.
507
508Guile is not fully R6RS compatible. Many incompatibilities are simply
509bugs, though some parts of Guile will remain R6RS-incompatible for the
510foreseeable future. See "R6RS Incompatibilities" in the manual, for more
511information.
512
513Please contact bug-guile@gnu.org if you have found an issue not
514mentioned in that compatibility list.
515
4a457691
AW
516** New implementation of `primitive-eval'
517
518Guile's `primitive-eval' is now implemented in Scheme. Actually there is
519still a C evaluator, used when building a fresh Guile to interpret the
520compiler, so we can compile eval.scm. Thereafter all calls to
521primitive-eval are implemented by VM-compiled code.
522
523This allows all of Guile's procedures, be they interpreted or compiled,
524to execute on the same stack, unifying multiple-value return semantics,
525providing for proper tail recursion between interpreted and compiled
526code, and simplifying debugging.
527
528As part of this change, the evaluator no longer mutates the internal
529representation of the code being evaluated in a thread-unsafe manner.
530
531There are two negative aspects of this change, however. First, Guile
532takes a lot longer to compile now. Also, there is less debugging
533information available for debugging interpreted code. We hope to improve
534both of these situations.
535
536There are many changes to the internal C evalator interface, but all
537public interfaces should be the same. See the ChangeLog for details. If
538we have inadvertantly changed an interface that you were using, please
539contact bug-guile@gnu.org.
540
96b73e84
AW
541** Procedure removed: `the-environment'
542
543This procedure was part of the interpreter's execution model, and does
544not apply to the compiler.
fa1804e9 545
4a457691
AW
546** No more `local-eval'
547
548`local-eval' used to exist so that one could evaluate code in the
549lexical context of a function. Since there is no way to get the lexical
550environment any more, as that concept has no meaning for the compiler,
551and a different meaning for the interpreter, we have removed the
552function.
553
554If you think you need `local-eval', you should probably implement your
555own metacircular evaluator. It will probably be as fast as Guile's
556anyway.
557
139fa149 558** Scheme source files will now be compiled automatically.
fa1804e9
AW
559
560If a compiled .go file corresponding to a .scm file is not found or is
561not fresh, the .scm file will be compiled on the fly, and the resulting
562.go file stored away. An advisory note will be printed on the console.
563
564Note that this mechanism depends on preservation of the .scm and .go
565modification times; if the .scm or .go files are moved after
566installation, care should be taken to preserve their original
567timestamps.
568
19fef497
AW
569Autocompiled files will be stored in the $XDG_CACHE_HOME/guile/ccache
570directory, where $XDG_CACHE_HOME defaults to ~/.cache. This directory
571will be created if needed.
fa1804e9
AW
572
573To inhibit autocompilation, set the GUILE_AUTO_COMPILE environment
574variable to 0, or pass --no-autocompile on the Guile command line.
575
96b73e84 576** New POSIX procedures: `getrlimit' and `setrlimit'
fa1804e9 577
96b73e84
AW
578Note however that the interface of these functions is likely to change
579in the next prerelease.
fa1804e9 580
4a457691
AW
581** New POSIX procedure: `getsid'
582
583Scheme binding for the `getsid' C library call.
584
dbd9532e
LC
585** New POSIX procedure: `getaddrinfo'
586
587Scheme binding for the `getaddrinfo' C library function.
588
96b73e84 589** New procedure in `(oops goops)': `method-formals'
fa1804e9 590
96b73e84
AW
591** New procedures in (ice-9 session): `add-value-help-handler!',
592 `remove-value-help-handler!', `add-name-help-handler!'
29b98fb2 593 `remove-name-help-handler!', `procedure-arguments'
fa1804e9 594
96b73e84
AW
595The value and name help handlers provide some minimal extensibility to
596the help interface. Guile-lib's `(texinfo reflection)' uses them, for
597example, to make stexinfo help documentation available. See those
598procedures' docstrings for more information.
599
600`procedure-arguments' describes the arguments that a procedure can take,
601combining arity and formals. For example:
602
603 (procedure-arguments resolve-interface)
604 => ((required . (name)) (rest . args))
fa1804e9 605
96b73e84
AW
606Additionally, `module-commentary' is now publically exported from
607`(ice-9 session).
608
cf8ec359 609** Removed: `procedure->memoizing-macro', `procedure->syntax'
96b73e84 610
cf8ec359
AW
611These procedures created primitive fexprs for the old evaluator, and are
612no longer supported. If you feel that you need these functions, you
613probably need to write your own metacircular evaluator (which will
614probably be as fast as Guile's, anyway).
96b73e84
AW
615
616** New language: ECMAScript
617
618Guile now ships with one other high-level language supported,
619ECMAScript. The goal is to support all of version 3.1 of the standard,
620but not all of the libraries are there yet. This support is not yet
621documented; ask on the mailing list if you are interested.
622
19fef497
AW
623** New language: Brainfuck
624
625Brainfuck is a toy language that closely models Turing machines. Guile's
626brainfuck compiler is meant to be an example of implementing other
627languages. See the manual for details, or
628http://en.wikipedia.org/wiki/Brainfuck for more information about the
629Brainfuck language itself.
630
4a457691
AW
631** New language: Elisp
632
633Guile now has an experimental Emacs Lisp compiler and runtime. You can
634now switch to Elisp at the repl: `,language elisp'. All kudos to Daniel
635Kraft, and all bugs to bug-guile@gnu.org.
636
139fa149
AW
637** Better documentation infrastructure for macros
638
639It is now possible to introspect on the type of a macro, e.g.
640syntax-rules, identifier-syntax, etc, and extract information about that
641macro, such as the syntax-rules patterns or the defmacro arguments.
642`(texinfo reflection)' takes advantage of this to give better macro
643documentation.
644
139fa149
AW
645** Support for arbitrary procedure metadata
646
647Building on its support for docstrings, Guile now supports multiple
648docstrings, adding them to the tail of a compiled procedure's
649properties. For example:
650
651 (define (foo)
652 "one"
653 "two"
654 3)
29b98fb2 655 (procedure-properties foo)
139fa149
AW
656 => ((name . foo) (documentation . "one") (documentation . "two"))
657
658Also, vectors of pairs are now treated as additional metadata entries:
659
660 (define (bar)
661 #((quz . #f) (docstring . "xyzzy"))
662 3)
29b98fb2 663 (procedure-properties bar)
139fa149
AW
664 => ((name . bar) (quz . #f) (docstring . "xyzzy"))
665
666This allows arbitrary literals to be embedded as metadata in a compiled
667procedure.
668
96b73e84
AW
669** The psyntax expander now knows how to interpret the @ and @@ special
670 forms.
671
672** The psyntax expander is now hygienic with respect to modules.
673
674Free variables in a macro are scoped in the module that the macro was
675defined in, not in the module the macro is used in. For example, code
676like this works now:
677
678 (define-module (foo) #:export (bar))
679 (define (helper x) ...)
680 (define-syntax bar
681 (syntax-rules () ((_ x) (helper x))))
682
683 (define-module (baz) #:use-module (foo))
684 (bar qux)
685
686It used to be you had to export `helper' from `(foo)' as well.
687Thankfully, this has been fixed.
688
cf8ec359
AW
689** Complete support for version information in Guile's `module' form
690
691Guile modules now have a `#:version' field. They may be loaded by
692version as well. See "R6RS Version References", "General Information
693about Modules", "Using Guile Modules", and "Creating Guile Modules" in
694the manual for more information.
96b73e84 695
cf8ec359
AW
696** Support for renaming bindings on module export
697
698Wherever Guile accepts a symbol as an argument to specify a binding to
699export, it now also accepts a pair of symbols, indicating that a binding
700should be renamed on export. See "Creating Guile Modules" in the manual
701for more information.
96b73e84 702
18e90860
AW
703** New procedure: `module-export-all!'
704
705This procedure exports all current and future bindings from a module.
706Use as `(module-export-all! (current-module))'.
707
96b73e84
AW
708** `eval-case' has been deprecated, and replaced by `eval-when'.
709
29b98fb2
AW
710The semantics of `eval-when' are easier to understand. See "Eval When"
711in the manual, for more information.
96b73e84
AW
712
713** Guile is now more strict about prohibiting definitions in expression
714 contexts.
715
716Although previous versions of Guile accepted it, the following
717expression is not valid, in R5RS or R6RS:
718
719 (if test (define foo 'bar) (define foo 'baz))
720
721In this specific case, it would be better to do:
722
723 (define foo (if test 'bar 'baz))
724
725It is certainly possible to circumvent this resriction with e.g.
726`(module-define! (current-module) 'foo 'baz)'. We would appreciate
727feedback about this change (a consequence of using psyntax as the
728default expander), and may choose to revisit this situation before 2.0
729in response to user feedback.
730
18e90860
AW
731** Macro expansion produces structures instead of s-expressions
732
733In the olden days, macroexpanding an s-expression would yield another
734s-expression. Though the lexical variables were renamed, expansions of
735core forms like `if' and `begin' were still non-hygienic, as they relied
736on the toplevel definitions of `if' et al being the conventional ones.
737
738The solution is to expand to structures instead of s-expressions. There
739is an `if' structure, a `begin' structure, a `toplevel-ref' structure,
740etc. The expander already did this for compilation, producing Tree-IL
741directly; it has been changed now to do so when expanding for the
742evaluator as well.
743
96b73e84
AW
744** Defmacros must now produce valid Scheme expressions.
745
746It used to be that defmacros could unquote in Scheme values, as a way of
747supporting partial evaluation, and avoiding some hygiene issues. For
748example:
749
750 (define (helper x) ...)
751 (define-macro (foo bar)
752 `(,helper ,bar))
753
754Assuming this macro is in the `(baz)' module, the direct translation of
755this code would be:
756
757 (define (helper x) ...)
758 (define-macro (foo bar)
759 `((@@ (baz) helper) ,bar))
760
761Of course, one could just use a hygienic macro instead:
762
763 (define-syntax foo
764 (syntax-rules ()
765 ((_ bar) (helper bar))))
766
767** Guile's psyntax now supports docstrings and internal definitions.
768
769The following Scheme is not strictly legal:
770
771 (define (foo)
772 "bar"
773 (define (baz) ...)
774 (baz))
775
776However its intent is fairly clear. Guile interprets "bar" to be the
777docstring of `foo', and the definition of `baz' is still in definition
778context.
779
780** Macros need to be defined before their first use.
781
782It used to be that with lazy memoization, this might work:
783
784 (define (foo x)
785 (ref x))
786 (define-macro (ref x) x)
787 (foo 1) => 1
788
789But now, the body of `foo' is interpreted to mean a call to the toplevel
790`ref' function, instead of a macro expansion. The solution is to define
791macros before code that uses them.
792
793** Functions needed by macros at expand-time need to be present at
794 expand-time.
795
796For example, this code will work at the REPL:
797
798 (define (double-helper x) (* x x))
799 (define-macro (double-literal x) (double-helper x))
800 (double-literal 2) => 4
801
802But it will not work when a file is compiled, because the definition of
803`double-helper' is not present at expand-time. The solution is to wrap
804the definition of `double-helper' in `eval-when':
805
806 (eval-when (load compile eval)
807 (define (double-helper x) (* x x)))
808 (define-macro (double-literal x) (double-helper x))
809 (double-literal 2) => 4
810
29b98fb2 811See the documentation for eval-when for more information.
96b73e84 812
29b98fb2 813** `macroexpand' produces structures, not S-expressions.
96b73e84 814
29b98fb2
AW
815Given the need to maintain referential transparency, both lexically and
816modular, the result of expanding Scheme expressions is no longer itself
817an s-expression. If you want a human-readable approximation of the
818result of `macroexpand', call `tree-il->scheme' from `(language
819tree-il)'.
96b73e84 820
29b98fb2 821** Removed function: `macroexpand-1'
96b73e84 822
29b98fb2
AW
823It is unclear how to implement `macroexpand-1' with syntax-case, though
824PLT Scheme does prove that it is possible.
fa1804e9
AW
825
826** New reader macros: #' #` #, #,@
827
828These macros translate, respectively, to `syntax', `quasisyntax',
829`unsyntax', and `unsyntax-splicing'. See the R6RS for more information.
830These reader macros may be overridden by `read-hash-extend'.
831
832** Incompatible change to #'
833
834Guile did have a #' hash-extension, by default, which just returned the
835subsequent datum: #'foo => foo. In the unlikely event that anyone
836actually used this, this behavior may be reinstated via the
837`read-hash-extend' mechanism.
838
839** Scheme expresssions may be commented out with #;
840
93617170
LC
841#; comments out an entire expression. See SRFI-62 or the R6RS for more
842information.
fa1804e9 843
b0abbaa7
AW
844** Prompts: Delimited, composable continuations
845
846Guile now has prompts as part of its primitive language. See "Prompts"
847in the manual, for more information.
848
849Expressions entered in at the REPL, or from the command line, are
850surrounded by a prompt with the default prompt tag.
851
93617170 852** `make-stack' with a tail-called procedural narrowing argument no longer
fa1804e9
AW
853 works (with compiled procedures)
854
855It used to be the case that a captured stack could be narrowed to select
856calls only up to or from a certain procedure, even if that procedure
857already tail-called another procedure. This was because the debug
858information from the original procedure was kept on the stack.
859
860Now with the new compiler, the stack only contains active frames from
861the current continuation. A narrow to a procedure that is not in the
862stack will result in an empty stack. To fix this, narrow to a procedure
863that is active in the current continuation, or narrow to a specific
864number of stack frames.
865
29b98fb2 866** Backtraces through compiled procedures only show procedures that are
fa1804e9
AW
867 active in the current continuation
868
869Similarly to the previous issue, backtraces in compiled code may be
870different from backtraces in interpreted code. There are no semantic
871differences, however. Please mail bug-guile@gnu.org if you see any
872deficiencies with Guile's backtraces.
873
874** syntax-rules and syntax-case macros now propagate source information
875 through to the expanded code
876
877This should result in better backtraces.
878
879** The currying behavior of `define' has been removed.
880
881Before, `(define ((f a) b) (* a b))' would translate to
882
883 (define f (lambda (a) (lambda (b) (* a b))))
884
93617170 885Now a syntax error is signaled, as this syntax is not supported by
29b98fb2
AW
886default. Use the `(ice-9 curried-definitions)' module to get back the
887old behavior.
fa1804e9 888
4a457691
AW
889** New procedure, `define!'
890
891`define!' is a procedure that takes two arguments, a symbol and a value,
892and binds the value to the symbol in the current module. It's useful to
893programmatically make definitions in the current module, and is slightly
894less verbose than `module-define!'.
895
fa1804e9
AW
896** All modules have names now
897
898Before, you could have anonymous modules: modules without names. Now,
899because of hygiene and macros, all modules have names. If a module was
900created without a name, the first time `module-name' is called on it, a
901fresh name will be lazily generated for it.
902
18e90860
AW
903** The module namespace is now separate from the value namespace
904
905It was a little-known implementation detail of Guile's module system
906that it was built on a single hierarchical namespace of values -- that
907if there was a module named `(foo bar)', then in the module named
908`(foo)' there was a binding from `bar' to the `(foo bar)' module.
909
910This was a neat trick, but presented a number of problems. One problem
911was that the bindings in a module were not apparent from the module
912itself; perhaps the `(foo)' module had a private binding for `bar', and
913then an external contributor defined `(foo bar)'. In the end there can
914be only one binding, so one of the two will see the wrong thing, and
915produce an obtuse error of unclear provenance.
916
917Also, the public interface of a module was also bound in the value
918namespace, as `%module-public-interface'. This was a hack from the early
919days of Guile's modules.
920
921Both of these warts have been fixed by the addition of fields in the
922`module' data type. Access to modules and their interfaces from the
923value namespace has been deprecated, and all accessors use the new
924record accessors appropriately.
925
926When Guile is built with support for deprecated code, as is the default,
927the value namespace is still searched for modules and public interfaces,
928and a deprecation warning is raised as appropriate.
929
930Finally, to support lazy loading of modules as one used to be able to do
931with module binder procedures, Guile now has submodule binders, called
932if a given submodule is not found. See boot-9.scm for more information.
933
934** New procedures: module-ref-submodule, module-define-submodule,
935 nested-ref-module, nested-define-module!, local-ref-module,
936 local-define-module
937
938These new accessors are like their bare variants, but operate on
939namespaces instead of values.
940
941** The (app modules) module tree is officially deprecated
942
943It used to be that one could access a module named `(foo bar)' via
944`(nested-ref the-root-module '(app modules foo bar))'. The `(app
945modules)' bit was a never-used and never-documented abstraction, and has
946been deprecated. See the following mail for a full discussion:
947
948 http://lists.gnu.org/archive/html/guile-devel/2010-04/msg00168.html
949
950The `%app' binding is also deprecated.
951
fa1804e9
AW
952** Many syntax errors have different texts now
953
954Syntax errors still throw to the `syntax-error' key, but the arguments
955are often different now. Perhaps in the future, Guile will switch to
93617170 956using standard SRFI-35 conditions.
fa1804e9
AW
957
958** Returning multiple values to compiled code will silently truncate the
959 values to the expected number
960
961For example, the interpreter would raise an error evaluating the form,
962`(+ (values 1 2) (values 3 4))', because it would see the operands as
963being two compound "values" objects, to which `+' does not apply.
964
965The compiler, on the other hand, receives multiple values on the stack,
966not as a compound object. Given that it must check the number of values
967anyway, if too many values are provided for a continuation, it chooses
968to truncate those values, effectively evaluating `(+ 1 3)' instead.
969
970The idea is that the semantics that the compiler implements is more
971intuitive, and the use of the interpreter will fade out with time.
972This behavior is allowed both by the R5RS and the R6RS.
973
974** Multiple values in compiled code are not represented by compound
975 objects
976
977This change may manifest itself in the following situation:
978
979 (let ((val (foo))) (do-something) val)
980
981In the interpreter, if `foo' returns multiple values, multiple values
982are produced from the `let' expression. In the compiler, those values
983are truncated to the first value, and that first value is returned. In
984the compiler, if `foo' returns no values, an error will be raised, while
985the interpreter would proceed.
986
987Both of these behaviors are allowed by R5RS and R6RS. The compiler's
988behavior is more correct, however. If you wish to preserve a potentially
989multiply-valued return, you will need to set up a multiple-value
990continuation, using `call-with-values'.
991
992** Defmacros are now implemented in terms of syntax-case.
993
994The practical ramification of this is that the `defmacro?' predicate has
995been removed, along with `defmacro-transformer', `macro-table',
996`xformer-table', `assert-defmacro?!', `set-defmacro-transformer!' and
997`defmacro:transformer'. This is because defmacros are simply macros. If
998any of these procedures provided useful facilities to you, we encourage
999you to contact the Guile developers.
1000
139fa149
AW
1001** Hygienic macros documented as the primary syntactic extension mechanism.
1002
1003The macro documentation was finally fleshed out with some documentation
29b98fb2
AW
1004on `syntax-rules' and `syntax-case' macros, and other parts of the macro
1005expansion process. See "Macros" in the manual, for details.
139fa149 1006
fa1804e9
AW
1007** psyntax is now the default expander
1008
1009Scheme code is now expanded by default by the psyntax hygienic macro
1010expander. Expansion is performed completely before compilation or
1011interpretation.
1012
1013Notably, syntax errors will be signalled before interpretation begins.
1014In the past, many syntax errors were only detected at runtime if the
1015code in question was memoized.
1016
1017As part of its expansion, psyntax renames all lexically-bound
1018identifiers. Original identifier names are preserved and given to the
1019compiler, but the interpreter will see the renamed variables, e.g.,
1020`x432' instead of `x'.
1021
1022Note that the psyntax that Guile uses is a fork, as Guile already had
1023modules before incompatible modules were added to psyntax -- about 10
1024years ago! Thus there are surely a number of bugs that have been fixed
1025in psyntax since then. If you find one, please notify bug-guile@gnu.org.
1026
1027** syntax-rules and syntax-case are available by default.
1028
1029There is no longer any need to import the `(ice-9 syncase)' module
1030(which is now deprecated). The expander may be invoked directly via
29b98fb2 1031`macroexpand', though it is normally searched for via the current module
fa1804e9
AW
1032transformer.
1033
1034Also, the helper routines for syntax-case are available in the default
1035environment as well: `syntax->datum', `datum->syntax',
1036`bound-identifier=?', `free-identifier=?', `generate-temporaries',
1037`identifier?', and `syntax-violation'. See the R6RS for documentation.
1038
4a457691
AW
1039** Tail patterns in syntax-case
1040
1041Guile has pulled in some more recent changes from the psyntax portable
1042syntax expander, to implement support for "tail patterns". Such patterns
1043are supported by syntax-rules and syntax-case. This allows a syntax-case
1044match clause to have ellipses, then a pattern at the end. For example:
1045
1046 (define-syntax case
1047 (syntax-rules (else)
1048 ((_ val match-clause ... (else e e* ...))
1049 [...])))
1050
1051Note how there is MATCH-CLAUSE, which is ellipsized, then there is a
1052tail pattern for the else clause. Thanks to Andreas Rottmann for the
1053patch, and Kent Dybvig for the code.
1054
fa1804e9
AW
1055** Lexical bindings introduced by hygienic macros may not be referenced
1056 by nonhygienic macros.
1057
1058If a lexical binding is introduced by a hygienic macro, it may not be
1059referenced by a nonhygienic macro. For example, this works:
1060
1061 (let ()
1062 (define-macro (bind-x val body)
1063 `(let ((x ,val)) ,body))
1064 (define-macro (ref x)
1065 x)
1066 (bind-x 10 (ref x)))
1067
1068But this does not:
1069
1070 (let ()
1071 (define-syntax bind-x
1072 (syntax-rules ()
1073 ((_ val body) (let ((x val)) body))))
1074 (define-macro (ref x)
1075 x)
1076 (bind-x 10 (ref x)))
1077
1078It is not normal to run into this situation with existing code. However,
1079as code is ported over from defmacros to syntax-case, it is possible to
66ad445d
AW
1080run into situations like this. For example, if you have a defmacro that
1081generates a `while' expression, the `break' bound by the `while' may not
1082be visible within other parts of your defmacro. The solution is to port
1083from defmacros to syntax-rules or syntax-case.
fa1804e9
AW
1084
1085** Macros may no longer be referenced as first-class values.
1086
1087In the past, you could evaluate e.g. `if', and get its macro value. Now,
1088expanding this form raises a syntax error.
1089
1090Macros still /exist/ as first-class values, but they must be
1091/referenced/ via the module system, e.g. `(module-ref (current-module)
1092'if)'.
1093
29b98fb2
AW
1094** Macros may now have docstrings.
1095
1096`object-documentation' from `(ice-9 documentation)' may be used to
1097retrieve the docstring, once you have a macro value -- but see the above
1098note about first-class macros. Docstrings are associated with the syntax
1099transformer procedures.
fa1804e9 1100
e614d375
AW
1101** `case-lambda' is now available in the default environment.
1102
1103The binding in the default environment is equivalent to the one from the
1104`(srfi srfi-16)' module. Use the srfi-16 module explicitly if you wish
1105to maintain compatibility with Guile 1.8 and earlier.
1106
29b98fb2 1107** Procedures may now have more than one arity.
5bb408cc
AW
1108
1109This can be the case, for example, in case-lambda procedures. The
1110arities of compiled procedures may be accessed via procedures from the
1111`(system vm program)' module; see "Compiled Procedures", "Optional
1112Arguments", and "Case-lambda" in the manual.
1113
18e90860
AW
1114** Deprecate arity access via (procedure-properties proc 'arity)
1115
1116Instead of accessing a procedure's arity as a property, use the new
1117`procedure-minimum-arity' function, which gives the most permissive
1118arity that the the function has, in the same format as the old arity
1119accessor.
1120
e614d375
AW
1121** `lambda*' and `define*' are now available in the default environment
1122
1123As with `case-lambda', `(ice-9 optargs)' continues to be supported, for
1124compatibility purposes. No semantic change has been made (we hope).
1125Optional and keyword arguments now dispatch via special VM operations,
1126without the need to cons rest arguments, making them very fast.
1127
cf8ec359
AW
1128** New function, `truncated-print', with `format' support
1129
1130`(ice-9 pretty-print)' now exports `truncated-print', a printer that
1131will ensure that the output stays within a certain width, truncating the
1132output in what is hopefully an intelligent manner. See the manual for
1133more details.
1134
1135There is a new `format' specifier, `~@y', for doing a truncated
1136print (as opposed to `~y', which does a pretty-print). See the `format'
1137documentation for more details.
1138
1139** SRFI-4 vectors reimplemented in terms of R6RS bytevectors
1140
1141Guile now implements SRFI-4 vectors using bytevectors. Often when you
1142have a numeric vector, you end up wanting to write its bytes somewhere,
1143or have access to the underlying bytes, or read in bytes from somewhere
1144else. Bytevectors are very good at this sort of thing. But the SRFI-4
1145APIs are nicer to use when doing number-crunching, because they are
1146addressed by element and not by byte.
1147
1148So as a compromise, Guile allows all bytevector functions to operate on
1149numeric vectors. They address the underlying bytes in the native
1150endianness, as one would expect.
1151
1152Following the same reasoning, that it's just bytes underneath, Guile
1153also allows uniform vectors of a given type to be accessed as if they
1154were of any type. One can fill a u32vector, and access its elements with
1155u8vector-ref. One can use f64vector-ref on bytevectors. It's all the
1156same to Guile.
1157
1158In this way, uniform numeric vectors may be written to and read from
1159input/output ports using the procedures that operate on bytevectors.
1160
1161Calls to SRFI-4 accessors (ref and set functions) from Scheme are now
1162inlined to the VM instructions for bytevector access.
1163
1164See "SRFI-4" in the manual, for more information.
1165
1166** Nonstandard SRFI-4 procedures now available from `(srfi srfi-4 gnu)'
1167
1168Guile's `(srfi srfi-4)' now only exports those srfi-4 procedures that
1169are part of the standard. Complex uniform vectors and the
1170`any->FOOvector' family are now available only from `(srfi srfi-4 gnu)'.
1171
1172Guile's default environment imports `(srfi srfi-4)', and probably should
1173import `(srfi srfi-4 gnu)' as well.
1174
1175See "SRFI-4 Extensions" in the manual, for more information.
1176
e614d375
AW
1177** New syntax: include-from-path.
1178
1179`include-from-path' is like `include', except it looks for its file in
1180the load path. It can be used to compile other files into a file.
1181
1182** New syntax: quasisyntax.
1183
1184`quasisyntax' is to `syntax' as `quasiquote' is to `quote'. See the R6RS
1185documentation for more information. Thanks to Andre van Tonder for the
1186implementation.
1187
108e18b1
AW
1188** Unicode characters
1189
1190Unicode characters may be entered in octal format via e.g. `#\454', or
1191created via (integer->char 300). A hex external representation will
1192probably be introduced at some point.
1193
1194** Unicode strings
1195
1196Internally, strings are now represented either in the `latin-1'
1197encoding, one byte per character, or in UTF-32, with four bytes per
1198character. Strings manage their own allocation, switching if needed.
1199
99e31c32
AW
1200Extended characters may be written in a literal string using the
1201hexadecimal escapes `\xXX', `\uXXXX', or `\UXXXXXX', for 8-bit, 16-bit,
1202or 24-bit codepoints, respectively, or entered directly in the native
1203encoding of the port on which the string is read.
1204
56664c08
AW
1205** Unicode symbols
1206
1207One may now use U+03BB (GREEK SMALL LETTER LAMBDA) as an identifier.
1208
99e31c32
AW
1209** Support for non-ASCII source code files
1210
1211The default reader now handles source code files for some of the
1212non-ASCII character encodings, such as UTF-8. A non-ASCII source file
1213should have an encoding declaration near the top of the file. Also,
1214there is a new function, `file-encoding', that scans a port for a coding
1215declaration. See the section of the manual entitled, "Character Encoding
1216of Source Files".
1217
1218The pre-1.9.3 reader handled 8-bit clean but otherwise unspecified source
1219code. This use is now discouraged.
1220
1221** Support for locale transcoding when reading from and writing to ports
1222
1223Ports now have an associated character encoding, and port read and write
1224operations do conversion to and from locales automatically. Ports also
1225have an associated strategy for how to deal with locale conversion
1226failures.
1227
1228See the documentation in the manual for the four new support functions,
1229`set-port-encoding!', `port-encoding', `set-port-conversion-strategy!',
1230and `port-conversion-strategy'.
1231
1232** String and SRFI-13 functions can operate on Unicode strings
1233
1234** Unicode support for SRFI-14 character sets
1235
1236The default character sets are no longer locale dependent and contain
1237characters from the whole Unicode range. There is a new predefined
1238character set, `char-set:designated', which contains all assigned
1239Unicode characters. There is a new debugging function, `%char-set-dump'.
1240
1241** Character functions operate on Unicode characters
1242
1243`char-upcase' and `char-downcase' use default Unicode casing rules.
1244Character comparisons such as `char<?' and `char-ci<?' now sort based on
1245Unicode code points.
108e18b1
AW
1246
1247** Global variables `scm_charnames' and `scm_charnums' are removed
1248
1249These variables contained the names of control characters and were
1250used when writing characters. While these were global, they were
1251never intended to be public API. They have been replaced with private
1252functions.
1253
1254** EBCDIC support is removed
1255
1256There was an EBCDIC compile flag that altered some of the character
1257processing. It appeared that full EBCDIC support was never completed
1258and was unmaintained.
1259
6bf927ab 1260** Compile-time warnings
b0217d17
AW
1261
1262Guile can warn about potentially unbound free variables. Pass the
1263-Wunbound-variable on the `guile-tools compile' command line, or add
1264`#:warnings '(unbound-variable)' to your `compile' or `compile-file'
1265invocation.
1266
6cf43047
AW
1267Guile can also warn when you pass the wrong number of arguments to a
1268procedure, with -Warity-mismatch, or `arity-mismatch' in the
1269`#:warnings' as above.
1270
6bf927ab
LC
1271Other warnings include `-Wunused-variable' and `-Wunused-toplevel', to
1272warn about unused local or global (top-level) variables.
1273
93617170
LC
1274** A new `memoize-symbol' evaluator trap has been added.
1275
1276This trap can be used for efficiently implementing a Scheme code
1277coverage.
fa1804e9 1278
96b73e84 1279** Duplicate bindings among used modules are resolved lazily.
93617170 1280
96b73e84 1281This slightly improves program startup times.
fa1804e9 1282
96b73e84 1283** New thread cancellation and thread cleanup API
93617170 1284
96b73e84 1285See `cancel-thread', `set-thread-cleanup!', and `thread-cleanup'.
fa1804e9 1286
4a457691
AW
1287** GOOPS dispatch in scheme
1288
1289As an implementation detail, GOOPS dispatch is no longer implemented by
1290special evaluator bytecodes, but rather directly via a Scheme function
1291associated with an applicable struct. There is some VM support for the
1292underlying primitives, like `class-of'.
1293
1294This change will in the future allow users to customize generic function
1295dispatch without incurring a performance penalty, and allow us to
1296implement method combinations.
1297
4a457691
AW
1298** Applicable struct support
1299
1300One may now make structs from Scheme that may be applied as procedures.
1301To do so, make a struct whose vtable is `<applicable-struct-vtable>'.
1302That struct will be the vtable of your applicable structs; instances of
1303that new struct are assumed to have the procedure in their first slot.
1304`<applicable-struct-vtable>' is like Common Lisp's
1305`funcallable-standard-class'. Likewise there is
1306`<applicable-struct-with-setter-vtable>', which looks for the setter in
1307the second slot. This needs to be better documented.
1308
29b98fb2
AW
1309** GOOPS cleanups.
1310
1311GOOPS had a number of concepts that were relevant to the days of Tcl,
1312but not any more: operators and entities, mainly. These objects were
1313never documented, and it is unlikely that they were ever used. Operators
1314were a kind of generic specific to the Tcl support. Entities were
1315replaced by applicable structs, mentioned above.
1316
4a457691
AW
1317** New struct slot allocation: "hidden"
1318
1319A hidden slot is readable and writable, but will not be initialized by a
1320call to make-struct. For example in your layout you would say "ph"
1321instead of "pw". Hidden slots are useful for adding new slots to a
1322vtable without breaking existing invocations to make-struct.
1323
1324** eqv? not a generic
1325
1326One used to be able to extend `eqv?' as a primitive-generic, but no
1327more. Because `eqv?' is in the expansion of `case' (via `memv'), which
1328should be able to compile to static dispatch tables, it doesn't make
1329sense to allow extensions that would subvert this optimization.
1330
e614d375
AW
1331** `inet-ntop' and `inet-pton' are always available.
1332
1333Guile now use a portable implementation of `inet_pton'/`inet_ntop', so
1334there is no more need to use `inet-aton'/`inet-ntoa'. The latter
1335functions are deprecated.
1336
5bb408cc
AW
1337** Fast bit operations.
1338
1339The bit-twiddling operations `ash', `logand', `logior', and `logxor' now
1340have dedicated bytecodes. Guile is not just for symbolic computation,
1341it's for number crunching too.
1342
4a457691
AW
1343** Faster SRFI-9 record access
1344
1345SRFI-9 records are now implemented directly on top of Guile's structs,
1346and their accessors are defined in such a way that normal call-sites
1347inline to special VM opcodes, while still allowing for the general case
1348(e.g. passing a record accessor to `apply').
1349
e614d375
AW
1350** R6RS block comment support
1351
1352Guile now supports R6RS nested block comments. The start of a comment is
1353marked with `#|', and the end with `|#'.
1354
1355** `guile-2' cond-expand feature
1356
1357To test if your code is running under Guile 2.0 (or its alpha releases),
1358test for the `guile-2' cond-expand feature. Like this:
1359
1360 (cond-expand (guile-2 (eval-when (compile)
1361 ;; This must be evaluated at compile time.
1362 (fluid-set! current-reader my-reader)))
1363 (guile
1364 ;; Earlier versions of Guile do not have a
1365 ;; separate compilation phase.
1366 (fluid-set! current-reader my-reader)))
1367
96b73e84 1368** Fix bad interaction between `false-if-exception' and stack-call.
fa1804e9 1369
96b73e84
AW
1370Exceptions thrown by `false-if-exception' were erronously causing the
1371stack to be saved, causing later errors to show the incorrectly-saved
1372backtrace. This has been fixed.
fa1804e9 1373
96b73e84 1374** New global variables: %load-compiled-path, %load-compiled-extensions
fa1804e9 1375
96b73e84 1376These are analogous to %load-path and %load-extensions.
fa1804e9 1377
18e90860
AW
1378** New fluid: `%file-port-name-canonicalization'
1379
1380This fluid parameterizes the file names that are associated with file
1381ports. If %file-port-name-canonicalization is 'absolute, then file names
1382are canonicalized to be absolute paths. If it is 'relative, then the
1383name is canonicalized, but any prefix corresponding to a member of
1384`%load-path' is stripped off. Otherwise the names are passed through
1385unchanged.
1386
1387In addition, the `compile-file' and `compile-and-load' procedures bind
1388%file-port-name-canonicalization to their `#:canonicalization' keyword
1389argument, which defaults to 'relative. In this way, one might compile
1390"../module/ice-9/boot-9.scm", but the path that gets residualized into
1391the .go is "ice-9/boot-9.scm".
1392
96b73e84 1393** New procedure, `make-promise'
fa1804e9 1394
96b73e84 1395`(make-promise (lambda () foo))' is equivalent to `(delay foo)'.
fa1804e9 1396
108e18b1
AW
1397** `defined?' may accept a module as its second argument
1398
1399Previously it only accepted internal structures from the evaluator.
1400
96b73e84 1401** New entry into %guile-build-info: `ccachedir'
fa1804e9 1402
96b73e84 1403** Fix bug in `module-bound?'.
fa1804e9 1404
96b73e84
AW
1405`module-bound?' was returning true if a module did have a local
1406variable, but one that was unbound, but another imported module bound
1407the variable. This was an error, and was fixed.
fa1804e9 1408
96b73e84 1409** `(ice-9 syncase)' has been deprecated.
fa1804e9 1410
96b73e84
AW
1411As syntax-case is available by default, importing `(ice-9 syncase)' has
1412no effect, and will trigger a deprecation warning.
fa1804e9 1413
b0217d17
AW
1414** New readline history functions
1415
1416The (ice-9 readline) module now provides add-history, read-history,
1417write-history and clear-history, which wrap the corresponding GNU
1418History library functions.
1419
86d88a22
AW
1420** Removed deprecated uniform array procedures:
1421 dimensions->uniform-array, list->uniform-array, array-prototype
1422
1423Instead, use make-typed-array, list->typed-array, or array-type,
1424respectively.
1425
b0abbaa7
AW
1426** Deprecated: `lazy-catch'
1427
1428`lazy-catch' was a form that captured the stack at the point of a
1429`throw', but the dynamic state at the point of the `catch'. It was a bit
1430crazy. Please change to use `catch', possibly with a throw-handler, or
1431`with-throw-handler'.
1432
18e90860
AW
1433** Deprecated `@bind' syntax
1434
1435`@bind' was part of an older implementation of the Emacs Lisp language,
1436and is no longer used.
1437
87e00370
LC
1438** Last but not least, the `λ' macro can be used in lieu of `lambda'
1439
96b73e84 1440* Changes to the C interface
fa1804e9 1441
7b96f3dd
LC
1442** Guile now uses libgc, the Boehm-Demers-Weiser garbage collector
1443
1444The semantics of `scm_gc_malloc ()' have been changed, in a
1445backward-compatible way. A new allocation routine,
1446`scm_gc_malloc_pointerless ()', was added.
1447
1448Libgc is a conservative GC, which we hope will make interaction with C
1449code easier and less error-prone.
1450
4a457691
AW
1451** New type definitions for `scm_t_intptr' and friends.
1452
1453`SCM_T_UINTPTR_MAX', `SCM_T_INTPTR_MIN', `SCM_T_INTPTR_MAX',
1454`SIZEOF_SCM_T_BITS', `scm_t_intptr' and `scm_t_uintptr' are now
1455available to C. Have fun!
1456
96b73e84 1457** The GH interface (deprecated in version 1.6, 2001) was removed.
fa1804e9 1458
96b73e84 1459** Internal `scm_i_' functions now have "hidden" linkage with GCC/ELF
fa1804e9 1460
96b73e84
AW
1461This makes these internal functions technically not callable from
1462application code.
fa1804e9 1463
96b73e84
AW
1464** Functions for handling `scm_option' now no longer require an argument
1465indicating length of the `scm_t_option' array.
fa1804e9 1466
4a457691
AW
1467** Procedures-with-setters are now implemented using applicable structs
1468
1469From a user's perspective this doesn't mean very much. But if, for some
1470odd reason, you used the SCM_PROCEDURE_WITH_SETTER_P, SCM_PROCEDURE, or
1471SCM_SETTER macros, know that they're deprecated now. Also, scm_tc7_pws
1472is gone.
1473
1474** Remove old evaluator closures
1475
1476There used to be ranges of typecodes allocated to interpreted data
1477structures, but that it no longer the case, given that interpreted
1478procedure are now just regular VM closures. As a result, there is a
1479newly free tc3, and a number of removed macros. See the ChangeLog for
1480details.
1481
cf8ec359 1482** Primitive procedures are now VM trampoline procedures
4a457691
AW
1483
1484It used to be that there were something like 12 different typecodes
1485allocated to primitive procedures, each with its own calling convention.
1486Now there is only one, the gsubr. This may affect user code if you were
1487defining a procedure using scm_c_make_subr rather scm_c_make_gsubr. The
1488solution is to switch to use scm_c_make_gsubr. This solution works well
1489both with the old 1.8 and and with the current 1.9 branch.
1490
cf8ec359
AW
1491Guile's old evaluator used to have special cases for applying "gsubrs",
1492primitive procedures with specified numbers of required, optional, and
1493rest arguments. Now, however, Guile represents gsubrs as normal VM
1494procedures, with appropriate bytecode to parse out the correct number of
1495arguments, including optional and rest arguments, and then with a
1496special bytecode to apply the gsubr.
1497
1498This allows primitive procedures to appear on the VM stack, allowing
1499them to be accurately counted in profiles. Also they now have more
1500debugging information attached to them -- their number of arguments, for
1501example. In addition, the VM can completely inline the application
1502mechanics, allowing for faster primitive calls.
1503
1504However there are some changes on the C level. There is no more
1505`scm_tc7_gsubr' or `scm_tcs_subrs' typecode for primitive procedures, as
1506they are just VM procedures. Likewise the macros `SCM_GSUBR_TYPE',
1507`SCM_GSUBR_MAKTYPE', `SCM_GSUBR_REQ', `SCM_GSUBR_OPT', and
1508`SCM_GSUBR_REST' are gone, as are `SCM_SUBR_META_INFO', `SCM_SUBR_PROPS'
1509`SCM_SET_SUBR_GENERIC_LOC', and `SCM_SUBR_ARITY_TO_TYPE'.
1510
1511Perhaps more significantly, `scm_c_make_subr',
1512`scm_c_make_subr_with_generic', `scm_c_define_subr', and
1513`scm_c_define_subr_with_generic'. They all operated on subr typecodes,
1514and there are no more subr typecodes. Use the scm_c_make_gsubr family
1515instead.
1516
1517Normal users of gsubrs should not be affected, though, as the
1518scm_c_make_gsubr family still is the correct way to create primitive
1519procedures.
1520
1521** Remove deprecated array C interfaces
1522
1523Removed the deprecated array functions `scm_i_arrayp',
1524`scm_i_array_ndim', `scm_i_array_mem', `scm_i_array_v',
1525`scm_i_array_base', `scm_i_array_dims', and the deprecated macros
1526`SCM_ARRAYP', `SCM_ARRAY_NDIM', `SCM_ARRAY_CONTP', `SCM_ARRAY_MEM',
1527`SCM_ARRAY_V', `SCM_ARRAY_BASE', and `SCM_ARRAY_DIMS'.
1528
1529** Remove unused snarf macros
1530
1531`SCM_DEFINE1', `SCM_PRIMITIVE_GENERIC_1', `SCM_PROC1, and `SCM_GPROC1'
1532are no more. Use SCM_DEFINE or SCM_PRIMITIVE_GENERIC instead.
1533
cf8ec359
AW
1534** New functions: `scm_call_n', `scm_c_run_hookn'
1535
1536`scm_call_n' applies to apply a function to an array of arguments.
1537`scm_c_run_hookn' runs a hook with an array of arguments.
1538
4a457691
AW
1539** Some SMOB types changed to have static typecodes
1540
1541Fluids, dynamic states, and hash tables used to be SMOB objects, but now
1542they have statically allocated tc7 typecodes.
1543
1544** Preparations for changing SMOB representation
1545
1546If things go right, we'll be changing the SMOB representation soon. To
1547that end, we did a lot of cleanups to calls to e.g. SCM_CELL_WORD_2(x) when
1548the code meant SCM_SMOB_DATA_2(x); user code will need similar changes
1549in the future. Code accessing SMOBs using SCM_CELL macros was never
1550correct, but until now things still worked. Users should be aware of
1551such changes.
fa1804e9 1552
cf8ec359
AW
1553** Changed invocation mechanics of applicable SMOBs
1554
1555Guile's old evaluator used to have special cases for applying SMOB
1556objects. Now, with the VM, when Guile sees a SMOB, it looks up a VM
1557trampoline procedure for it, and use the normal mechanics to apply the
1558trampoline. This simplifies procedure application in the normal,
1559non-SMOB case.
1560
1561The upshot is that the mechanics used to apply a SMOB are different from
15621.8. Descriptors no longer have `apply_0', `apply_1', `apply_2', and
1563`apply_3' functions, and the macros SCM_SMOB_APPLY_0 and friends are now
1564deprecated. Just use the scm_call_0 family of procedures.
1565
96b73e84 1566** New C function: scm_module_public_interface
a4f1c77d 1567
96b73e84 1568This procedure corresponds to Scheme's `module-public-interface'.
24d6fae8 1569
4a457691
AW
1570** Undeprecate `scm_the_root_module ()'
1571
1572It's useful to be able to get the root module from C without doing a
1573full module lookup.
1574
e614d375
AW
1575** Inline vector allocation
1576
1577Instead of having vectors point out into the heap for their data, their
1578data is now allocated inline to the vector object itself. The same is
1579true for bytevectors, by default, though there is an indirection
1580available which should allow for making a bytevector from an existing
1581memory region.
1582
4a457691
AW
1583** New struct constructors that don't involve making lists
1584
1585`scm_c_make_struct' and `scm_c_make_structv' are new varargs and array
1586constructors, respectively, for structs. You might find them useful.
1587
1588** Stack refactor
1589
1590In Guile 1.8, there were debugging frames on the C stack. Now there is
1591no more need to explicitly mark the stack in this way, because Guile has
1592a VM stack that it knows how to walk, which simplifies the C API
1593considerably. See the ChangeLog for details; the relevant interface is
1594in libguile/stacks.h. The Scheme API has not been changed significantly.
1595
e614d375
AW
1596** Removal of Guile's primitive object system.
1597
1598There were a number of pieces in `objects.[ch]' that tried to be a
1599minimal object system, but were never documented, and were quickly
1600obseleted by GOOPS' merge into Guile proper. So `scm_make_class_object',
1601`scm_make_subclass_object', `scm_metaclass_standard', and like symbols
1602from objects.h are no more. In the very unlikely case in which these
1603were useful to you, we urge you to contact guile-devel.
1604
1605** No future.
1606
1607Actually the future is still in the state that it was, is, and ever
1608shall be, Amen, except that `futures.c' and `futures.h' are no longer a
1609part of it. These files were experimental, never compiled, and would be
1610better implemented in Scheme anyway. In the future, that is.
1611
4a457691
AW
1612** Deprecate trampolines
1613
1614There used to be C functions `scm_trampoline_0', `scm_trampoline_1', and
1615so on. The point was to do some precomputation on the type of the
1616procedure, then return a specialized "call" procedure. However this
1617optimization wasn't actually an optimization, so it is now deprecated.
1618Just use `scm_call_0', etc instead.
1619
18e90860
AW
1620** Deprecated `scm_badargsp'
1621
1622This function is unused in Guile, but was part of its API.
1623
5bb408cc
AW
1624** Better support for Lisp `nil'.
1625
1626The bit representation of `nil' has been tweaked so that it is now very
1627efficient to check e.g. if a value is equal to Scheme's end-of-list or
1628Lisp's nil. Additionally there are a heap of new, specific predicates
b390b008 1629like scm_is_null_or_nil.
5bb408cc 1630
139fa149
AW
1631** Better integration of Lisp `nil'.
1632
1633`scm_is_boolean', `scm_is_false', and `scm_is_null' all return true now
1634for Lisp's `nil'. This shouldn't affect any Scheme code at this point,
1635but when we start to integrate more with Emacs, it is possible that we
1636break code that assumes that, for example, `(not x)' implies that `x' is
1637`eq?' to `#f'. This is not a common assumption. Refactoring affected
1638code to rely on properties instead of identities will improve code
1639correctness. See "Nil" in the manual, for more details.
1640
e614d375
AW
1641** Support for static allocation of strings, symbols, and subrs.
1642
1643Calls to snarfing CPP macros like SCM_DEFINE macro will now allocate
1644much of their associated data as static variables, reducing Guile's
1645memory footprint.
1646
93617170
LC
1647** `scm_stat' has an additional argument, `exception_on_error'
1648** `scm_primitive_load_path' has an additional argument `exception_on_not_found'
24d6fae8 1649
f1ce9199
LC
1650** `scm_set_port_seek' and `scm_set_port_truncate' use the `scm_t_off' type
1651
1652Previously they would use the `off_t' type, which is fragile since its
1653definition depends on the application's value for `_FILE_OFFSET_BITS'.
1654
ba4c43dc
LC
1655** The `long_long' C type, deprecated in 1.8, has been removed
1656
86d88a22
AW
1657** Removed deprecated uniform array procedures: scm_make_uve,
1658 scm_array_prototype, scm_list_to_uniform_array,
1659 scm_dimensions_to_uniform_array, scm_make_ra, scm_shap2ra, scm_cvref,
1660 scm_ra_set_contp, scm_aind, scm_raprin1
1661
1662These functions have been deprecated since early 2005.
1663
a4f1c77d 1664* Changes to the distribution
6caac03c 1665
53befeb7
NJ
1666** Guile's license is now LGPLv3+
1667
1668In other words the GNU Lesser General Public License, version 3 or
1669later (at the discretion of each person that chooses to redistribute
1670part of Guile).
1671
56664c08
AW
1672** GOOPS documentation folded into Guile reference manual
1673
1674GOOPS, Guile's object system, used to be documented in separate manuals.
1675This content is now included in Guile's manual directly.
1676
96b73e84 1677** `guile-config' will be deprecated in favor of `pkg-config'
8a9faebc 1678
96b73e84 1679`guile-config' has been rewritten to get its information from
93617170 1680`pkg-config', so this should be a transparent change. Note however that
96b73e84
AW
1681guile.m4 has yet to be modified to call pkg-config instead of
1682guile-config.
2e77f720 1683
54dd0ca5
LC
1684** Guile now provides `guile-2.0.pc' instead of `guile-1.8.pc'
1685
1686Programs that use `pkg-config' to find Guile or one of its Autoconf
1687macros should now require `guile-2.0' instead of `guile-1.8'.
1688
96b73e84 1689** New installation directory: $(pkglibdir)/1.9/ccache
62560650 1690
96b73e84
AW
1691If $(libdir) is /usr/lib, for example, Guile will install its .go files
1692to /usr/lib/guile/1.9/ccache. These files are architecture-specific.
89bc270d 1693
b0abbaa7
AW
1694** Parallel installability fixes
1695
1696Guile now installs its header files to a effective-version-specific
1697directory, and includes the effective version (e.g. 2.0) in the library
1698name (e.g. libguile-2.0.so).
1699
1700This change should be transparent to users, who should detect Guile via
1701the guile.m4 macro, or the guile-2.0.pc pkg-config file. It will allow
1702parallel installs for multiple versions of Guile development
1703environments.
1704
b0217d17
AW
1705** Dynamically loadable extensions may be placed in a Guile-specific path
1706
1707Before, Guile only searched the system library paths for extensions
1708(e.g. /usr/lib), which meant that the names of Guile extensions had to
1709be globally unique. Installing them to a Guile-specific extensions
66ad445d 1710directory is cleaner. Use `pkg-config --variable=extensiondir
b0217d17
AW
1711guile-2.0' to get the location of the extensions directory.
1712
7b96f3dd
LC
1713** New dependency: libgc
1714
1715See http://www.hpl.hp.com/personal/Hans_Boehm/gc/, for more information.
1716
1717** New dependency: GNU libunistring
32e29e24 1718
108e18b1 1719See http://www.gnu.org/software/libunistring/, for more information. Our
7b96f3dd 1720Unicode support uses routines from libunistring.
32e29e24 1721
dbd9532e
LC
1722** New dependency: libffi
1723
1724See http://sourceware.org/libffi/, for more information.
1725
a4f1c77d 1726
dc686d7b 1727\f
9957b1c7
LC
1728Changes in 1.8.8 (since 1.8.7)
1729
1730* Bugs fixed
1731
1732** Fix possible buffer overruns when parsing numbers
c15d8e6a 1733** Avoid clash with system setjmp/longjmp on IA64
1ff4da65 1734** Fix `wrong type arg' exceptions with IPv6 addresses
9957b1c7
LC
1735
1736\f
dc686d7b
NJ
1737Changes in 1.8.7 (since 1.8.6)
1738
922d417b
JG
1739* New modules (see the manual for details)
1740
1741** `(srfi srfi-98)', an interface to access environment variables
1742
dc686d7b
NJ
1743* Bugs fixed
1744
f5851b89 1745** Fix compilation with `--disable-deprecated'
dc686d7b 1746** Fix %fast-slot-ref/set!, to avoid possible segmentation fault
cbee5075 1747** Fix MinGW build problem caused by HAVE_STRUCT_TIMESPEC confusion
ab878b0f 1748** Fix build problem when scm_t_timespec is different from struct timespec
95a040cd 1749** Fix build when compiled with -Wundef -Werror
1bcf7993 1750** More build fixes for `alphaev56-dec-osf5.1b' (Tru64)
5374ec9c 1751** Build fixes for `powerpc-ibm-aix5.3.0.0' (AIX 5.3)
5c006c3f
LC
1752** With GCC, always compile with `-mieee' on `alpha*' and `sh*'
1753** Better diagnose broken `(strftime "%z" ...)' in `time.test' (bug #24130)
fc76c08d 1754** Fix parsing of SRFI-88/postfix keywords longer than 128 characters
40f89215 1755** Fix reading of complex numbers where both parts are inexact decimals
d41668fa 1756
ad5f5ada
NJ
1757** Allow @ macro to work with (ice-9 syncase)
1758
1759Previously, use of the @ macro in a module whose code is being
1760transformed by (ice-9 syncase) would cause an "Invalid syntax" error.
1761Now it works as you would expect (giving the value of the specified
1762module binding).
1763
05588a1a
LC
1764** Have `scm_take_locale_symbol ()' return an interned symbol (bug #25865)
1765
d41668fa 1766\f
8c40b75d
LC
1767Changes in 1.8.6 (since 1.8.5)
1768
071bb6a8
LC
1769* New features (see the manual for details)
1770
1771** New convenience function `scm_c_symbol_length ()'
1772
091baf9e
NJ
1773** Single stepping through code from Emacs
1774
1775When you use GDS to evaluate Scheme code from Emacs, you can now use
1776`C-u' to indicate that you want to single step through that code. See
1777`Evaluating Scheme Code' in the manual for more details.
1778
9e4db0ef
LC
1779** New "guile(1)" man page!
1780
242ebeaf
LC
1781* Changes to the distribution
1782
1783** Automake's `AM_MAINTAINER_MODE' is no longer used
1784
1785Thus, the `--enable-maintainer-mode' configure option is no longer
1786available: Guile is now always configured in "maintainer mode".
1787
e0063477
LC
1788** `ChangeLog' files are no longer updated
1789
1790Instead, changes are detailed in the version control system's logs. See
1791the top-level `ChangeLog' files for details.
1792
1793
8c40b75d
LC
1794* Bugs fixed
1795
fd2b17b9 1796** `symbol->string' now returns a read-only string, as per R5RS
c6333102 1797** Fix incorrect handling of the FLAGS argument of `fold-matches'
589d9eb8 1798** `guile-config link' now prints `-L$libdir' before `-lguile'
4a1db3a9 1799** Fix memory corruption involving GOOPS' `class-redefinition'
191e7165 1800** Fix possible deadlock in `mutex-lock'
95c6523b 1801** Fix build issue on Tru64 and ia64-hp-hpux11.23 (`SCM_UNPACK' macro)
4696a666 1802** Fix build issue on mips, mipsel, powerpc and ia64 (stack direction)
450be18d 1803** Fix build issue on hppa2.0w-hp-hpux11.11 (`dirent64' and `readdir64_r')
88cefbc7 1804** Fix build issue on i386-unknown-freebsd7.0 ("break strict-aliasing rules")
76dae881 1805** Fix misleading output from `(help rationalize)'
5ea8e76e 1806** Fix build failure on Debian hppa architecture (bad stack growth detection)
1dd79792 1807** Fix `gcd' when called with a single, negative argument.
d8b6e191 1808** Fix `Stack overflow' errors seen when building on some platforms
ccf1ca4a
LC
1809** Fix bug when `scm_with_guile ()' was called several times from the
1810 same thread
76350432
LC
1811** The handler of SRFI-34 `with-exception-handler' is now invoked in the
1812 dynamic environment of the call to `raise'
cb823e63 1813** Fix potential deadlock in `make-struct'
691343ea 1814** Fix compilation problem with libltdl from Libtool 2.2.x
3ae3166b 1815** Fix sloppy bound checking in `string-{ref,set!}' with the empty string
6eadcdab 1816
8c40b75d 1817\f
5305df84
LC
1818Changes in 1.8.5 (since 1.8.4)
1819
4b824aae
LC
1820* Infrastructure changes
1821
1822** Guile repository switched from CVS to Git
1823
1824The new repository can be accessed using
1825"git-clone git://git.sv.gnu.org/guile.git", or can be browsed on-line at
1826http://git.sv.gnu.org/gitweb/?p=guile.git . See `README' for details.
1827
92826dd0
LC
1828** Add support for `pkg-config'
1829
1830See "Autoconf Support" in the manual for details.
1831
189681f5
LC
1832* New modules (see the manual for details)
1833
1834** `(srfi srfi-88)'
1835
ef4cbc08
LC
1836* New features (see the manual for details)
1837
1838** New `postfix' read option, for SRFI-88 keyword syntax
f5c2af4b 1839** Some I/O primitives have been inlined, which improves I/O performance
b20ef3a6 1840** New object-based traps infrastructure
ef4cbc08 1841
b20ef3a6
NJ
1842This is a GOOPS-based infrastructure that builds on Guile's low-level
1843evaluator trap calls and facilitates the development of debugging
1844features like single-stepping, breakpoints, tracing and profiling.
1845See the `Traps' node of the manual for details.
1846
1847** New support for working on Guile code from within Emacs
1848
1849Guile now incorporates the `GDS' library (previously distributed
1850separately) for working on Guile code from within Emacs. See the
1851`Using Guile In Emacs' node of the manual for details.
1852
5305df84
LC
1853* Bugs fixed
1854
e27d2495
LC
1855** `scm_add_slot ()' no longer segfaults (fixes bug #22369)
1856** Fixed `(ice-9 match)' for patterns like `((_ ...) ...)'
1857
1858Previously, expressions like `(match '((foo) (bar)) (((_ ...) ...) #t))'
1859would trigger an unbound variable error for `match:andmap'.
1860
62c5382b
LC
1861** `(oop goops describe)' now properly provides the `describe' feature
1862** Fixed `args-fold' from `(srfi srfi-37)'
1863
1864Previously, parsing short option names of argument-less options would
1865lead to a stack overflow.
1866
816e3edf 1867** `(srfi srfi-35)' is now visible through `cond-expand'
61b6542a 1868** Fixed type-checking for the second argument of `eval'
0fb11ae4 1869** Fixed type-checking for SRFI-1 `partition'
f1c212b1
LC
1870** Fixed `struct-ref' and `struct-set!' on "light structs"
1871** Honor struct field access rights in GOOPS
be10cba8 1872** Changed the storage strategy of source properties, which fixes a deadlock
979eade6 1873** Allow compilation of Guile-using programs in C99 mode with GCC 4.3 and later
bfb64eb4 1874** Fixed build issue for GNU/Linux on IA64
fa80e280 1875** Fixed build issues on NetBSD 1.6
a2c25234 1876** Fixed build issue on Solaris 2.10 x86_64
3f520967 1877** Fixed build issue with DEC/Compaq/HP's compiler
c2ad98ad
LC
1878** Fixed `scm_from_complex_double' build issue on FreeBSD
1879** Fixed `alloca' build issue on FreeBSD 6
a7286720 1880** Removed use of non-portable makefile constructs
535b3592 1881** Fixed shadowing of libc's <random.h> on Tru64, which broke compilation
eedcb08a 1882** Make sure all tests honor `$TMPDIR'
5305df84
LC
1883
1884\f
d41668fa
LC
1885Changes in 1.8.4 (since 1.8.3)
1886
1887* Bugs fixed
1888
1889** CR (ASCII 0x0d) is (again) recognized as a token delimiter by the reader
6e14de7d
NJ
1890** Fixed a segmentation fault which occurred when displaying the
1891backtrace of a stack with a promise object (made by `delay') in it.
7d1fc872 1892** Make `accept' leave guile mode while blocking
693758d5 1893** `scm_c_read ()' and `scm_c_write ()' now type-check their port argument
378cc645 1894** Fixed a build problem on AIX (use of func_data identifier)
15bd90ea
NJ
1895** Fixed a segmentation fault which occurred when hashx-ref or hashx-set! was
1896called with an associator proc that returns neither a pair nor #f.
3ac8359a 1897** Secondary threads now always return a valid module for (current-module).
d05bcb2e
NJ
1898** Avoid MacOS build problems caused by incorrect combination of "64"
1899system and library calls.
9a6fac59 1900** `guile-snarf' now honors `$TMPDIR'
25a640ca 1901** `guile-config compile' now reports CPPFLAGS used at compile-time
7f74cf9a 1902** Fixed build with Sun Studio (Solaris 9)
4a19ed04
NJ
1903** Fixed wrong-type-arg errors when creating zero length SRFI-4
1904uniform vectors on AIX.
86a597f8 1905** Fixed a deadlock that occurs upon GC with multiple threads.
4b26c03e 1906** Fixed compile problem with GCC on Solaris and AIX (use of _Complex_I)
d4a00708 1907** Fixed autotool-derived build problems on AIX 6.1.
9a6fac59 1908** Fixed NetBSD/alpha support
b226295a 1909** Fixed MacOS build problem caused by use of rl_get_keymap(_name)
7d1fc872
LC
1910
1911* New modules (see the manual for details)
1912
1913** `(srfi srfi-69)'
d41668fa 1914
b226295a
NJ
1915* Documentation fixes and improvements
1916
1917** Removed premature breakpoint documentation
1918
1919The features described are not available in the series of 1.8.x
1920releases, so the documentation was misleading and has been removed.
1921
1922** More about Guile's default *random-state* variable
1923
1924** GOOPS: more about how to use `next-method'
1925
d3cf93bc
NJ
1926* Changes to the distribution
1927
1928** Corrected a few files that referred incorrectly to the old GPL + special exception licence
1929
1930In fact Guile since 1.8.0 has been licensed with the GNU Lesser
1931General Public License, and the few incorrect files have now been
1932fixed to agree with the rest of the Guile distribution.
1933
5e42b8e7
NJ
1934** Removed unnecessary extra copies of COPYING*
1935
1936The distribution now contains a single COPYING.LESSER at its top level.
1937
a4f1c77d 1938\f
d4c38221
LC
1939Changes in 1.8.3 (since 1.8.2)
1940
1941* New modules (see the manual for details)
1942
f50ca8da 1943** `(srfi srfi-35)'
d4c38221
LC
1944** `(srfi srfi-37)'
1945
e08f3f7a
LC
1946* Bugs fixed
1947
dc061a74 1948** The `(ice-9 slib)' module now works as expected
e08f3f7a 1949** Expressions like "(set! 'x #t)" no longer yield a crash
d7c0c26d 1950** Warnings about duplicate bindings now go to stderr
1ac5fb45 1951** A memory leak in `make-socket-address' was fixed
f43f3620 1952** Alignment issues (e.g., on SPARC) in network routines were fixed
29776e85 1953** A threading issue that showed up at least on NetBSD was fixed
66302618 1954** Build problems on Solaris and IRIX fixed
e08f3f7a 1955
1fdd8ffa
LC
1956* Implementation improvements
1957
7ff6c169 1958** The reader is now faster, which reduces startup time
1fdd8ffa
LC
1959** Procedures returned by `record-accessor' and `record-modifier' are faster
1960
d4c38221 1961\f
45c0ff10
KR
1962Changes in 1.8.2 (since 1.8.1):
1963
1964* New procedures (see the manual for details)
1965
1966** set-program-arguments
b3aa4626 1967** make-vtable
45c0ff10 1968
9320e933
LC
1969* Incompatible changes
1970
1971** The body of a top-level `define' no longer sees the binding being created
1972
1973In a top-level `define', the binding being created is no longer visible
1974from the `define' body. This breaks code like
1975"(define foo (begin (set! foo 1) (+ foo 1)))", where `foo' is now
1976unbound in the body. However, such code was not R5RS-compliant anyway,
1977per Section 5.2.1.
1978
45c0ff10
KR
1979* Bugs fixed
1980
1981** Fractions were not `equal?' if stored in unreduced form.
1982(A subtle problem, since printing a value reduced it, making it work.)
1983** srfi-60 `copy-bit' failed on 64-bit systems
1984** "guile --use-srfi" option at the REPL can replace core functions
1985(Programs run with that option were ok, but in the interactive REPL
1986the core bindings got priority, preventing SRFI replacements or
1987extensions.)
1988** `regexp-exec' doesn't abort() on #\nul in the input or bad flags arg
df449722 1989** `kill' on mingw throws an error for a PID other than oneself
45c0ff10
KR
1990** Procedure names are attached to procedure-with-setters
1991** Array read syntax works with negative lower bound
1992** `array-in-bounds?' fix if an array has different lower bounds on each index
1993** `*' returns exact 0 for "(* inexact 0)"
1994This follows what it always did for "(* 0 inexact)".
c122500a 1995** SRFI-19: Value returned by `(current-time time-process)' was incorrect
0867f7ba 1996** SRFI-19: `date->julian-day' did not account for timezone offset
a1ef7406 1997** `ttyname' no longer crashes when passed a non-tty argument
27782696 1998** `inet-ntop' no longer crashes on SPARC when passed an `AF_INET' address
0867f7ba 1999** Small memory leaks have been fixed in `make-fluid' and `add-history'
b1f57ea4 2000** GOOPS: Fixed a bug in `method-more-specific?'
45c0ff10 2001** Build problems on Solaris fixed
df449722
LC
2002** Build problems on HP-UX IA64 fixed
2003** Build problems on MinGW fixed
45c0ff10
KR
2004
2005\f
a4f1c77d
KR
2006Changes in 1.8.1 (since 1.8.0):
2007
8ab3d8a0 2008* LFS functions are now used to access 64-bit files on 32-bit systems.
a4f1c77d 2009
8ab3d8a0 2010* New procedures (see the manual for details)
4f416616 2011
8ab3d8a0
KR
2012** primitive-_exit - [Scheme] the-root-module
2013** scm_primitive__exit - [C]
2014** make-completion-function - [Scheme] (ice-9 readline)
2015** scm_c_locale_stringn_to_number - [C]
2016** scm_srfi1_append_reverse [C]
2017** scm_srfi1_append_reverse_x [C]
2018** scm_log - [C]
2019** scm_log10 - [C]
2020** scm_exp - [C]
2021** scm_sqrt - [C]
2022
2023* Bugs fixed
2024
2025** Build problems have been fixed on MacOS, SunOS, and QNX.
af4f8612 2026
b3aa4626
KR
2027** `strftime' fix sign of %z timezone offset.
2028
534cd148 2029** A one-dimensional array can now be 'equal?' to a vector.
8ab3d8a0 2030
ad97642e 2031** Structures, records, and SRFI-9 records can now be compared with `equal?'.
af4f8612 2032
8ab3d8a0
KR
2033** SRFI-14 standard char sets are recomputed upon a successful `setlocale'.
2034
2035** `record-accessor' and `record-modifier' now have strict type checks.
2036
2037Record accessor and modifier procedures now throw an error if the
2038record type of the record they're given is not the type expected.
2039(Previously accessors returned #f and modifiers silently did nothing).
2040
2041** It is now OK to use both autoload and use-modules on a given module.
2042
2043** `apply' checks the number of arguments more carefully on "0 or 1" funcs.
2044
2045Previously there was no checking on primatives like make-vector that
2046accept "one or two" arguments. Now there is.
2047
2048** The srfi-1 assoc function now calls its equality predicate properly.
2049
2050Previously srfi-1 assoc would call the equality predicate with the key
2051last. According to the SRFI, the key should be first.
2052
2053** A bug in n-par-for-each and n-for-each-par-map has been fixed.
2054
2055** The array-set! procedure no longer segfaults when given a bit vector.
2056
2057** Bugs in make-shared-array have been fixed.
2058
2059** string<? and friends now follow char<? etc order on 8-bit chars.
2060
2061** The format procedure now handles inf and nan values for ~f correctly.
2062
2063** exact->inexact should no longer overflow when given certain large fractions.
2064
2065** srfi-9 accessor and modifier procedures now have strict record type checks.
a4f1c77d 2066
8ab3d8a0 2067This matches the srfi-9 specification.
a4f1c77d 2068
8ab3d8a0 2069** (ice-9 ftw) procedures won't ignore different files with same inode number.
a4f1c77d 2070
8ab3d8a0
KR
2071Previously the (ice-9 ftw) procedures would ignore any file that had
2072the same inode number as a file they had already seen, even if that
2073file was on a different device.
4f416616
KR
2074
2075\f
8ab3d8a0 2076Changes in 1.8.0 (changes since the 1.6.x series):
ee0c7345 2077
4e250ded
MV
2078* Changes to the distribution
2079
eff2965e
MV
2080** Guile is now licensed with the GNU Lesser General Public License.
2081
77e51fd6
MV
2082** The manual is now licensed with the GNU Free Documentation License.
2083
e2d0a649
RB
2084** Guile now requires GNU MP (http://swox.com/gmp).
2085
2086Guile now uses the GNU MP library for arbitrary precision arithmetic.
e2d0a649 2087
5ebbe4ef
RB
2088** Guile now has separate private and public configuration headers.
2089
b0d10ba6
MV
2090That is, things like HAVE_STRING_H no longer leak from Guile's
2091headers.
5ebbe4ef
RB
2092
2093** Guile now provides and uses an "effective" version number.
b2cbe8d8
RB
2094
2095Guile now provides scm_effective_version and effective-version
2096functions which return the "effective" version number. This is just
2097the normal full version string without the final micro-version number,
a4f1c77d 2098so the current effective-version is "1.8". The effective version
b2cbe8d8
RB
2099should remain unchanged during a stable series, and should be used for
2100items like the versioned share directory name
a4f1c77d 2101i.e. /usr/share/guile/1.8.
b2cbe8d8
RB
2102
2103Providing an unchanging version number during a stable release for
2104things like the versioned share directory can be particularly
2105important for Guile "add-on" packages, since it provides a directory
2106that they can install to that won't be changed out from under them
2107with each micro release during a stable series.
2108
8d54e73a 2109** Thread implementation has changed.
f0b4d944
MV
2110
2111When you configure "--with-threads=null", you will get the usual
2112threading API (call-with-new-thread, make-mutex, etc), but you can't
429d88d4
MV
2113actually create new threads. Also, "--with-threads=no" is now
2114equivalent to "--with-threads=null". This means that the thread API
2115is always present, although you might not be able to create new
2116threads.
f0b4d944 2117
8d54e73a
MV
2118When you configure "--with-threads=pthreads" or "--with-threads=yes",
2119you will get threads that are implemented with the portable POSIX
2120threads. These threads can run concurrently (unlike the previous
2121"coop" thread implementation), but need to cooperate for things like
a558cc63 2122the GC.
f0b4d944 2123
8d54e73a
MV
2124The default is "pthreads", unless your platform doesn't have pthreads,
2125in which case "null" threads are used.
2902a459 2126
a6d75e53
MV
2127See the manual for details, nodes "Initialization", "Multi-Threading",
2128"Blocking", and others.
a558cc63 2129
f74bdbd3
MV
2130** There is the new notion of 'discouraged' features.
2131
2132This is a milder form of deprecation.
2133
2134Things that are discouraged should not be used in new code, but it is
2135OK to leave them in old code for now. When a discouraged feature is
2136used, no warning message is printed like there is for 'deprecated'
2137features. Also, things that are merely discouraged are nevertheless
2138implemented efficiently, while deprecated features can be very slow.
2139
2140You can omit discouraged features from libguile by configuring it with
2141the '--disable-discouraged' option.
2142
2143** Deprecation warnings can be controlled at run-time.
2144
2145(debug-enable 'warn-deprecated) switches them on and (debug-disable
2146'warn-deprecated) switches them off.
2147
0f24e75b 2148** Support for SRFI 61, extended cond syntax for multiple values has
a81d0de1
MV
2149 been added.
2150
2151This SRFI is always available.
2152
f7fb2f39 2153** Support for require-extension, SRFI-55, has been added.
9a5fc8c2 2154
f7fb2f39
RB
2155The SRFI-55 special form `require-extension' has been added. It is
2156available at startup, and provides a portable way to load Scheme
2157extensions. SRFI-55 only requires support for one type of extension,
2158"srfi"; so a set of SRFIs may be loaded via (require-extension (srfi 1
215913 14)).
2160
2161** New module (srfi srfi-26) provides support for `cut' and `cute'.
2162
2163The (srfi srfi-26) module is an implementation of SRFI-26 which
2164provides the `cut' and `cute' syntax. These may be used to specialize
2165parameters without currying.
9a5fc8c2 2166
f5d54eb7
RB
2167** New module (srfi srfi-31)
2168
2169This is an implementation of SRFI-31 which provides a special form
2170`rec' for recursive evaluation.
2171
7b1574ed
MV
2172** The modules (srfi srfi-13), (srfi srfi-14) and (srfi srfi-4) have
2173 been merged with the core, making their functionality always
2174 available.
c5080b51 2175
ce7c0293
MV
2176The modules are still available, tho, and you could use them together
2177with a renaming import, for example.
c5080b51 2178
6191ccec 2179** Guile no longer includes its own version of libltdl.
4e250ded 2180
6191ccec 2181The official version is good enough now.
4e250ded 2182
ae7ded56
MV
2183** The --enable-htmldoc option has been removed from 'configure'.
2184
2185Support for translating the documentation into HTML is now always
2186provided. Use 'make html'.
2187
0f24e75b
MV
2188** New module (ice-9 serialize):
2189
2190(serialize FORM1 ...) and (parallelize FORM1 ...) are useful when you
2191don't trust the thread safety of most of your program, but where you
2192have some section(s) of code which you consider can run in parallel to
2193other sections. See ice-9/serialize.scm for more information.
2194
c34e5780
MV
2195** The configure option '--disable-arrays' has been removed.
2196
2197Support for arrays and uniform numeric arrays is now always included
2198in Guile.
2199
328dc9a3 2200* Changes to the stand-alone interpreter
f12ef3fd 2201
3ece39d6
MV
2202** New command line option `-L'.
2203
2204This option adds a directory to the front of the load path.
2205
f12ef3fd
MV
2206** New command line option `--no-debug'.
2207
2208Specifying `--no-debug' on the command line will keep the debugging
2209evaluator turned off, even for interactive sessions.
2210
2211** User-init file ~/.guile is now loaded with the debugging evaluator.
2212
2213Previously, the normal evaluator would have been used. Using the
2214debugging evaluator gives better error messages.
2215
aff7e166
MV
2216** The '-e' option now 'read's its argument.
2217
2218This is to allow the new '(@ MODULE-NAME VARIABLE-NAME)' construct to
2219be used with '-e'. For example, you can now write a script like
2220
2221 #! /bin/sh
2222 exec guile -e '(@ (demo) main)' -s "$0" "$@"
2223 !#
2224
2225 (define-module (demo)
2226 :export (main))
2227
2228 (define (main args)
2229 (format #t "Demo: ~a~%" args))
2230
2231
f12ef3fd
MV
2232* Changes to Scheme functions and syntax
2233
930888e8
MV
2234** Guardians have changed back to their original semantics
2235
2236Guardians now behave like described in the paper by Dybvig et al. In
2237particular, they no longer make guarantees about the order in which
2238they return objects, and they can no longer be greedy.
2239
2240They no longer drop cyclic data structures.
2241
2242The C function scm_make_guardian has been changed incompatibly and no
2243longer takes the 'greedy_p' argument.
2244
87bdbdbc
MV
2245** New function hashx-remove!
2246
2247This function completes the set of 'hashx' functions.
2248
a558cc63
MV
2249** The concept of dynamic roots has been factored into continuation
2250 barriers and dynamic states.
2251
2252Each thread has a current dynamic state that carries the values of the
2253fluids. You can create and copy dynamic states and use them as the
2254second argument for 'eval'. See "Fluids and Dynamic States" in the
2255manual.
2256
2257To restrict the influence that captured continuations can have on the
2258control flow, you can errect continuation barriers. See "Continuation
2259Barriers" in the manual.
2260
2261The function call-with-dynamic-root now essentially temporarily
2262installs a new dynamic state and errects a continuation barrier.
2263
a2b6a0e7
MV
2264** The default load path no longer includes "." at the end.
2265
2266Automatically loading modules from the current directory should not
2267happen by default. If you want to allow it in a more controlled
2268manner, set the environment variable GUILE_LOAD_PATH or the Scheme
2269variable %load-path.
2270
7b1574ed
MV
2271** The uniform vector and array support has been overhauled.
2272
2273It now complies with SRFI-4 and the weird prototype based uniform
2274array creation has been deprecated. See the manual for more details.
2275
d233b123
MV
2276Some non-compatible changes have been made:
2277 - characters can no longer be stored into byte arrays.
0f24e75b
MV
2278 - strings and bit vectors are no longer considered to be uniform numeric
2279 vectors.
3167d5e4
MV
2280 - array-rank throws an error for non-arrays instead of returning zero.
2281 - array-ref does no longer accept non-arrays when no indices are given.
d233b123
MV
2282
2283There is the new notion of 'generalized vectors' and corresponding
2284procedures like 'generalized-vector-ref'. Generalized vectors include
c34e5780 2285strings, bitvectors, ordinary vectors, and uniform numeric vectors.
d233b123 2286
a558cc63
MV
2287Arrays use generalized vectors as their storage, so that you still
2288have arrays of characters, bits, etc. However, uniform-array-read!
2289and uniform-array-write can no longer read/write strings and
2290bitvectors.
bb9f50ae 2291
ce7c0293
MV
2292** There is now support for copy-on-write substrings, mutation-sharing
2293 substrings and read-only strings.
3ff9283d 2294
ce7c0293
MV
2295Three new procedures are related to this: substring/shared,
2296substring/copy, and substring/read-only. See the manual for more
2297information.
2298
6a1d27ea
MV
2299** Backtraces will now highlight the value that caused the error.
2300
2301By default, these values are enclosed in "{...}", such as in this
2302example:
2303
2304 guile> (car 'a)
2305
2306 Backtrace:
2307 In current input:
2308 1: 0* [car {a}]
2309
2310 <unnamed port>:1:1: In procedure car in expression (car (quote a)):
2311 <unnamed port>:1:1: Wrong type (expecting pair): a
2312 ABORT: (wrong-type-arg)
2313
2314The prefix and suffix used for highlighting can be set via the two new
2315printer options 'highlight-prefix' and 'highlight-suffix'. For
2316example, putting this into ~/.guile will output the bad value in bold
2317on an ANSI terminal:
2318
2319 (print-set! highlight-prefix "\x1b[1m")
2320 (print-set! highlight-suffix "\x1b[22m")
2321
2322
8dbafacd
MV
2323** 'gettext' support for internationalization has been added.
2324
2325See the manual for details.
2326
aff7e166
MV
2327** New syntax '@' and '@@':
2328
2329You can now directly refer to variables exported from a module by
2330writing
2331
2332 (@ MODULE-NAME VARIABLE-NAME)
2333
2334For example (@ (ice-9 pretty-print) pretty-print) will directly access
2335the pretty-print variable exported from the (ice-9 pretty-print)
2336module. You don't need to 'use' that module first. You can also use
b0d10ba6 2337'@' as a target of 'set!', as in (set! (@ mod var) val).
aff7e166
MV
2338
2339The related syntax (@@ MODULE-NAME VARIABLE-NAME) works just like '@',
2340but it can also access variables that have not been exported. It is
2341intended only for kluges and temporary fixes and for debugging, not
2342for ordinary code.
2343
aef0bdb4
MV
2344** Keyword syntax has been made more disciplined.
2345
2346Previously, the name of a keyword was read as a 'token' but printed as
2347a symbol. Now, it is read as a general Scheme datum which must be a
2348symbol.
2349
2350Previously:
2351
2352 guile> #:12
2353 #:#{12}#
2354 guile> #:#{12}#
2355 #:#{\#{12}\#}#
2356 guile> #:(a b c)
2357 #:#{}#
2358 ERROR: In expression (a b c):
2359 Unbound variable: a
2360 guile> #: foo
2361 #:#{}#
2362 ERROR: Unbound variable: foo
2363
2364Now:
2365
2366 guile> #:12
2367 ERROR: Wrong type (expecting symbol): 12
2368 guile> #:#{12}#
2369 #:#{12}#
2370 guile> #:(a b c)
2371 ERROR: Wrong type (expecting symbol): (a b c)
2372 guile> #: foo
2373 #:foo
2374
227eafdb
MV
2375** The printing of symbols that might look like keywords can be
2376 controlled.
2377
2378The new printer option 'quote-keywordish-symbols' controls how symbols
2379are printed that have a colon as their first or last character. The
2380default now is to only quote a symbol with #{...}# when the read
2381option 'keywords' is not '#f'. Thus:
2382
2383 guile> (define foo (string->symbol ":foo"))
2384 guile> (read-set! keywords #f)
2385 guile> foo
2386 :foo
2387 guile> (read-set! keywords 'prefix)
2388 guile> foo
2389 #{:foo}#
2390 guile> (print-set! quote-keywordish-symbols #f)
2391 guile> foo
2392 :foo
2393
1363e3e7
KR
2394** 'while' now provides 'break' and 'continue'
2395
2396break and continue were previously bound in a while loop, but not
2397documented, and continue didn't quite work properly. The undocumented
2398parameter to break which gave a return value for the while has been
2399dropped.
2400
570b5b14
MV
2401** 'call-with-current-continuation' is now also available under the name
2402 'call/cc'.
2403
b0d10ba6 2404** The module system now checks for duplicate bindings.
7b07e5ef 2405
fe6ee052
MD
2406The module system now can check for name conflicts among imported
2407bindings.
f595ccfe 2408
b0d10ba6 2409The behavior can be controlled by specifying one or more 'duplicates'
fe6ee052
MD
2410handlers. For example, to make Guile return an error for every name
2411collision, write:
7b07e5ef
MD
2412
2413(define-module (foo)
2414 :use-module (bar)
2415 :use-module (baz)
fe6ee052 2416 :duplicates check)
f595ccfe 2417
fe6ee052
MD
2418The new default behavior of the module system when a name collision
2419has been detected is to
2420
2421 1. Give priority to bindings marked as a replacement.
6496a663 2422 2. Issue a warning (different warning if overriding core binding).
fe6ee052
MD
2423 3. Give priority to the last encountered binding (this corresponds to
2424 the old behavior).
2425
2426If you want the old behavior back without replacements or warnings you
2427can add the line:
f595ccfe 2428
70a9dc9c 2429 (default-duplicate-binding-handler 'last)
7b07e5ef 2430
fe6ee052 2431to your .guile init file.
7b07e5ef 2432
f595ccfe
MD
2433** New define-module option: :replace
2434
2435:replace works as :export, but, in addition, marks the binding as a
2436replacement.
2437
2438A typical example is `format' in (ice-9 format) which is a replacement
2439for the core binding `format'.
7b07e5ef 2440
70da0033
MD
2441** Adding prefixes to imported bindings in the module system
2442
2443There is now a new :use-module option :prefix. It can be used to add
2444a prefix to all imported bindings.
2445
2446 (define-module (foo)
2447 :use-module ((bar) :prefix bar:))
2448
2449will import all bindings exported from bar, but rename them by adding
2450the prefix `bar:'.
2451
b0d10ba6
MV
2452** Conflicting generic functions can be automatically merged.
2453
2454When two imported bindings conflict and they are both generic
2455functions, the two functions can now be merged automatically. This is
2456activated with the 'duplicates' handler 'merge-generics'.
2457
b2cbe8d8
RB
2458** New function: effective-version
2459
2460Returns the "effective" version number. This is just the normal full
2461version string without the final micro-version number. See "Changes
2462to the distribution" above.
2463
382053e9 2464** New threading functions: parallel, letpar, par-map, and friends
dbe30084 2465
382053e9
KR
2466These are convenient ways to run calculations in parallel in new
2467threads. See "Parallel forms" in the manual for details.
359aab24 2468
e2d820a1
MV
2469** New function 'try-mutex'.
2470
2471This function will attempt to lock a mutex but will return immediately
0f24e75b 2472instead of blocking and indicate failure.
e2d820a1
MV
2473
2474** Waiting on a condition variable can have a timeout.
2475
0f24e75b 2476The function 'wait-condition-variable' now takes a third, optional
e2d820a1
MV
2477argument that specifies the point in time where the waiting should be
2478aborted.
2479
2480** New function 'broadcast-condition-variable'.
2481
5e405a60
MV
2482** New functions 'all-threads' and 'current-thread'.
2483
2484** Signals and system asyncs work better with threads.
2485
2486The function 'sigaction' now takes a fourth, optional, argument that
2487specifies the thread that the handler should run in. When the
2488argument is omitted, the handler will run in the thread that called
2489'sigaction'.
2490
2491Likewise, 'system-async-mark' takes a second, optional, argument that
2492specifies the thread that the async should run in. When it is
2493omitted, the async will run in the thread that called
2494'system-async-mark'.
2495
2496C code can use the new functions scm_sigaction_for_thread and
2497scm_system_async_mark_for_thread to pass the new thread argument.
2498
a558cc63
MV
2499When a thread blocks on a mutex, a condition variable or is waiting
2500for IO to be possible, it will still execute system asyncs. This can
2501be used to interrupt such a thread by making it execute a 'throw', for
2502example.
2503
5e405a60
MV
2504** The function 'system-async' is deprecated.
2505
2506You can now pass any zero-argument procedure to 'system-async-mark'.
2507The function 'system-async' will just return its argument unchanged
2508now.
2509
acfa1f52
MV
2510** New functions 'call-with-blocked-asyncs' and
2511 'call-with-unblocked-asyncs'
2512
2513The expression (call-with-blocked-asyncs PROC) will call PROC and will
2514block execution of system asyncs for the current thread by one level
2515while PROC runs. Likewise, call-with-unblocked-asyncs will call a
2516procedure and will unblock the execution of system asyncs by one
2517level for the current thread.
2518
2519Only system asyncs are affected by these functions.
2520
2521** The functions 'mask-signals' and 'unmask-signals' are deprecated.
2522
2523Use 'call-with-blocked-asyncs' or 'call-with-unblocked-asyncs'
2524instead. Those functions are easier to use correctly and can be
2525nested.
2526
7b232758
MV
2527** New function 'unsetenv'.
2528
f30482f3
MV
2529** New macro 'define-syntax-public'.
2530
2531It works like 'define-syntax' and also exports the defined macro (but
2532only on top-level).
2533
1ee34062
MV
2534** There is support for Infinity and NaNs.
2535
2536Following PLT Scheme, Guile can now work with infinite numbers, and
2537'not-a-numbers'.
2538
2539There is new syntax for numbers: "+inf.0" (infinity), "-inf.0"
2540(negative infinity), "+nan.0" (not-a-number), and "-nan.0" (same as
2541"+nan.0"). These numbers are inexact and have no exact counterpart.
2542
2543Dividing by an inexact zero returns +inf.0 or -inf.0, depending on the
2544sign of the dividend. The infinities are integers, and they answer #t
2545for both 'even?' and 'odd?'. The +nan.0 value is not an integer and is
2546not '=' to itself, but '+nan.0' is 'eqv?' to itself.
2547
2548For example
2549
2550 (/ 1 0.0)
2551 => +inf.0
2552
2553 (/ 0 0.0)
2554 => +nan.0
2555
2556 (/ 0)
2557 ERROR: Numerical overflow
2558
7b232758
MV
2559Two new predicates 'inf?' and 'nan?' can be used to test for the
2560special values.
2561
ba1b077b
MV
2562** Inexact zero can have a sign.
2563
2564Guile can now distinguish between plus and minus inexact zero, if your
2565platform supports this, too. The two zeros are equal according to
2566'=', but not according to 'eqv?'. For example
2567
2568 (- 0.0)
2569 => -0.0
2570
2571 (= 0.0 (- 0.0))
2572 => #t
2573
2574 (eqv? 0.0 (- 0.0))
2575 => #f
2576
bdf26b60
MV
2577** Guile now has exact rationals.
2578
2579Guile can now represent fractions such as 1/3 exactly. Computing with
2580them is also done exactly, of course:
2581
2582 (* 1/3 3/2)
2583 => 1/2
2584
2585** 'floor', 'ceiling', 'round' and 'truncate' now return exact numbers
2586 for exact arguments.
2587
2588For example: (floor 2) now returns an exact 2 where in the past it
2589returned an inexact 2.0. Likewise, (floor 5/4) returns an exact 1.
2590
2591** inexact->exact no longer returns only integers.
2592
2593Without exact rationals, the closest exact number was always an
2594integer, but now inexact->exact returns the fraction that is exactly
2595equal to a floating point number. For example:
2596
2597 (inexact->exact 1.234)
2598 => 694680242521899/562949953421312
2599
e299cee2 2600When you want the old behavior, use 'round' explicitly:
bdf26b60
MV
2601
2602 (inexact->exact (round 1.234))
2603 => 1
2604
2605** New function 'rationalize'.
2606
2607This function finds a simple fraction that is close to a given real
2608number. For example (and compare with inexact->exact above):
2609
fb16d26e 2610 (rationalize (inexact->exact 1.234) 1/2000)
bdf26b60
MV
2611 => 58/47
2612
fb16d26e
MV
2613Note that, as required by R5RS, rationalize returns only then an exact
2614result when both its arguments are exact.
2615
bdf26b60
MV
2616** 'odd?' and 'even?' work also for inexact integers.
2617
2618Previously, (odd? 1.0) would signal an error since only exact integers
2619were recognized as integers. Now (odd? 1.0) returns #t, (odd? 2.0)
2620returns #f and (odd? 1.5) signals an error.
2621
b0d10ba6 2622** Guile now has uninterned symbols.
610922b2 2623
b0d10ba6 2624The new function 'make-symbol' will return an uninterned symbol. This
610922b2
MV
2625is a symbol that is unique and is guaranteed to remain unique.
2626However, uninterned symbols can not yet be read back in.
2627
2628Use the new function 'symbol-interned?' to check whether a symbol is
2629interned or not.
2630
0e6f7775
MV
2631** pretty-print has more options.
2632
2633The function pretty-print from the (ice-9 pretty-print) module can now
2634also be invoked with keyword arguments that control things like
71f271b2 2635maximum output width. See the manual for details.
0e6f7775 2636
8c84b81e 2637** Variables have no longer a special behavior for `equal?'.
ee0c7345
MV
2638
2639Previously, comparing two variables with `equal?' would recursivly
2640compare their values. This is no longer done. Variables are now only
2641`equal?' if they are `eq?'.
2642
4e21fa60
MV
2643** `(begin)' is now valid.
2644
2645You can now use an empty `begin' form. It will yield #<unspecified>
2646when evaluated and simply be ignored in a definition context.
2647
3063e30a
DH
2648** Deprecated: procedure->macro
2649
b0d10ba6
MV
2650Change your code to use 'define-macro' or r5rs macros. Also, be aware
2651that macro expansion will not be done during evaluation, but prior to
2652evaluation.
3063e30a 2653
0a50eeaa
NJ
2654** Soft ports now allow a `char-ready?' procedure
2655
2656The vector argument to `make-soft-port' can now have a length of
2657either 5 or 6. (Previously the length had to be 5.) The optional 6th
2658element is interpreted as an `input-waiting' thunk -- i.e. a thunk
2659that returns the number of characters that can be read immediately
2660without the soft port blocking.
2661
63dd3413
DH
2662** Deprecated: undefine
2663
2664There is no replacement for undefine.
2665
9abd541e
NJ
2666** The functions make-keyword-from-dash-symbol and keyword-dash-symbol
2667 have been discouraged.
aef0bdb4
MV
2668
2669They are relics from a time where a keyword like #:foo was used
2670directly as a Tcl option "-foo" and thus keywords were internally
2671stored as a symbol with a starting dash. We now store a symbol
2672without the dash.
2673
2674Use symbol->keyword and keyword->symbol instead.
2675
9abd541e
NJ
2676** The `cheap' debug option is now obsolete
2677
2678Evaluator trap calls are now unconditionally "cheap" - in other words,
2679they pass a debug object to the trap handler rather than a full
2680continuation. The trap handler code can capture a full continuation
2681by using `call-with-current-continuation' in the usual way, if it so
2682desires.
2683
2684The `cheap' option is retained for now so as not to break existing
2685code which gets or sets it, but setting it now has no effect. It will
2686be removed in the next major Guile release.
2687
2688** Evaluator trap calls now support `tweaking'
2689
2690`Tweaking' means that the trap handler code can modify the Scheme
2691expression that is about to be evaluated (in the case of an
2692enter-frame trap) or the value that is being returned (in the case of
2693an exit-frame trap). The trap handler code indicates that it wants to
2694do this by returning a pair whose car is the symbol 'instead and whose
2695cdr is the modified expression or return value.
36a9b236 2696
b00418df
DH
2697* Changes to the C interface
2698
87bdbdbc
MV
2699** The functions scm_hash_fn_remove_x and scm_hashx_remove_x no longer
2700 take a 'delete' function argument.
2701
2702This argument makes no sense since the delete function is used to
2703remove a pair from an alist, and this must not be configurable.
2704
2705This is an incompatible change.
2706
1cf1bb95
MV
2707** The GH interface is now subject to the deprecation mechanism
2708
2709The GH interface has been deprecated for quite some time but now it is
2710actually removed from Guile when it is configured with
2711--disable-deprecated.
2712
2713See the manual "Transitioning away from GH" for more information.
2714
f7f3964e
MV
2715** A new family of functions for converting between C values and
2716 Scheme values has been added.
2717
2718These functions follow a common naming scheme and are designed to be
2719easier to use, thread-safe and more future-proof than the older
2720alternatives.
2721
2722 - int scm_is_* (...)
2723
2724 These are predicates that return a C boolean: 1 or 0. Instead of
2725 SCM_NFALSEP, you can now use scm_is_true, for example.
2726
2727 - <type> scm_to_<type> (SCM val, ...)
2728
2729 These are functions that convert a Scheme value into an appropriate
2730 C value. For example, you can use scm_to_int to safely convert from
2731 a SCM to an int.
2732
a2b6a0e7 2733 - SCM scm_from_<type> (<type> val, ...)
f7f3964e
MV
2734
2735 These functions convert from a C type to a SCM value; for example,
2736 scm_from_int for ints.
2737
2738There is a huge number of these functions, for numbers, strings,
2739symbols, vectors, etc. They are documented in the reference manual in
2740the API section together with the types that they apply to.
2741
96d8c217
MV
2742** New functions for dealing with complex numbers in C have been added.
2743
2744The new functions are scm_c_make_rectangular, scm_c_make_polar,
2745scm_c_real_part, scm_c_imag_part, scm_c_magnitude and scm_c_angle.
2746They work like scm_make_rectangular etc but take or return doubles
2747directly.
2748
2749** The function scm_make_complex has been discouraged.
2750
2751Use scm_c_make_rectangular instead.
2752
f7f3964e
MV
2753** The INUM macros have been deprecated.
2754
2755A lot of code uses these macros to do general integer conversions,
b0d10ba6
MV
2756although the macros only work correctly with fixnums. Use the
2757following alternatives.
f7f3964e
MV
2758
2759 SCM_INUMP -> scm_is_integer or similar
2760 SCM_NINUMP -> !scm_is_integer or similar
2761 SCM_MAKINUM -> scm_from_int or similar
2762 SCM_INUM -> scm_to_int or similar
2763
b0d10ba6 2764 SCM_VALIDATE_INUM_* -> Do not use these; scm_to_int, etc. will
f7f3964e
MV
2765 do the validating for you.
2766
f9656a9f
MV
2767** The scm_num2<type> and scm_<type>2num functions and scm_make_real
2768 have been discouraged.
f7f3964e
MV
2769
2770Use the newer scm_to_<type> and scm_from_<type> functions instead for
2771new code. The functions have been discouraged since they don't fit
2772the naming scheme.
2773
2774** The 'boolean' macros SCM_FALSEP etc have been discouraged.
2775
2776They have strange names, especially SCM_NFALSEP, and SCM_BOOLP
2777evaluates its argument twice. Use scm_is_true, etc. instead for new
2778code.
2779
2780** The macro SCM_EQ_P has been discouraged.
2781
2782Use scm_is_eq for new code, which fits better into the naming
2783conventions.
d5b203a6 2784
d5ac9b2a
MV
2785** The macros SCM_CONSP, SCM_NCONSP, SCM_NULLP, and SCM_NNULLP have
2786 been discouraged.
2787
2788Use the function scm_is_pair or scm_is_null instead.
2789
409eb4e5
MV
2790** The functions scm_round and scm_truncate have been deprecated and
2791 are now available as scm_c_round and scm_c_truncate, respectively.
2792
2793These functions occupy the names that scm_round_number and
2794scm_truncate_number should have.
2795
3ff9283d
MV
2796** The functions scm_c_string2str, scm_c_substring2str, and
2797 scm_c_symbol2str have been deprecated.
c41acab3
MV
2798
2799Use scm_to_locale_stringbuf or similar instead, maybe together with
2800scm_substring.
2801
3ff9283d
MV
2802** New functions scm_c_make_string, scm_c_string_length,
2803 scm_c_string_ref, scm_c_string_set_x, scm_c_substring,
2804 scm_c_substring_shared, scm_c_substring_copy.
2805
2806These are like scm_make_string, scm_length, etc. but are slightly
2807easier to use from C.
2808
2809** The macros SCM_STRINGP, SCM_STRING_CHARS, SCM_STRING_LENGTH,
2810 SCM_SYMBOL_CHARS, and SCM_SYMBOL_LENGTH have been deprecated.
2811
2812They export too many assumptions about the implementation of strings
2813and symbols that are no longer true in the presence of
b0d10ba6
MV
2814mutation-sharing substrings and when Guile switches to some form of
2815Unicode.
3ff9283d
MV
2816
2817When working with strings, it is often best to use the normal string
2818functions provided by Guile, such as scm_c_string_ref,
b0d10ba6
MV
2819scm_c_string_set_x, scm_string_append, etc. Be sure to look in the
2820manual since many more such functions are now provided than
2821previously.
3ff9283d
MV
2822
2823When you want to convert a SCM string to a C string, use the
2824scm_to_locale_string function or similar instead. For symbols, use
2825scm_symbol_to_string and then work with that string. Because of the
2826new string representation, scm_symbol_to_string does not need to copy
2827and is thus quite efficient.
2828
aef0bdb4 2829** Some string, symbol and keyword functions have been discouraged.
3ff9283d 2830
b0d10ba6 2831They don't fit into the uniform naming scheme and are not explicit
3ff9283d
MV
2832about the character encoding.
2833
2834Replace according to the following table:
2835
2836 scm_allocate_string -> scm_c_make_string
2837 scm_take_str -> scm_take_locale_stringn
2838 scm_take0str -> scm_take_locale_string
2839 scm_mem2string -> scm_from_locale_stringn
2840 scm_str2string -> scm_from_locale_string
2841 scm_makfrom0str -> scm_from_locale_string
2842 scm_mem2symbol -> scm_from_locale_symboln
b0d10ba6 2843 scm_mem2uninterned_symbol -> scm_from_locale_stringn + scm_make_symbol
3ff9283d
MV
2844 scm_str2symbol -> scm_from_locale_symbol
2845
2846 SCM_SYMBOL_HASH -> scm_hashq
2847 SCM_SYMBOL_INTERNED_P -> scm_symbol_interned_p
2848
aef0bdb4
MV
2849 scm_c_make_keyword -> scm_from_locale_keyword
2850
2851** The functions scm_keyword_to_symbol and sym_symbol_to_keyword are
2852 now also available to C code.
2853
2854** SCM_KEYWORDP and SCM_KEYWORDSYM have been deprecated.
2855
2856Use scm_is_keyword and scm_keyword_to_symbol instead, but note that
2857the latter returns the true name of the keyword, not the 'dash name',
2858as SCM_KEYWORDSYM used to do.
2859
dc91d8de
MV
2860** A new way to access arrays in a thread-safe and efficient way has
2861 been added.
2862
2863See the manual, node "Accessing Arrays From C".
2864
3167d5e4
MV
2865** The old uniform vector and bitvector implementations have been
2866 unceremoniously removed.
d4ea47c8 2867
a558cc63 2868This implementation exposed the details of the tagging system of
d4ea47c8 2869Guile. Use the new C API explained in the manual in node "Uniform
c34e5780 2870Numeric Vectors" and "Bit Vectors", respectively.
d4ea47c8
MV
2871
2872The following macros are gone: SCM_UVECTOR_BASE, SCM_SET_UVECTOR_BASE,
2873SCM_UVECTOR_MAXLENGTH, SCM_UVECTOR_LENGTH, SCM_MAKE_UVECTOR_TAG,
3167d5e4
MV
2874SCM_SET_UVECTOR_LENGTH, SCM_BITVECTOR_P, SCM_BITVECTOR_BASE,
2875SCM_SET_BITVECTOR_BASE, SCM_BITVECTOR_MAX_LENGTH,
2876SCM_BITVECTOR_LENGTH, SCM_MAKE_BITVECTOR_TAG,
0b63c1ee
MV
2877SCM_SET_BITVECTOR_LENGTH, SCM_BITVEC_REF, SCM_BITVEC_SET,
2878SCM_BITVEC_CLR.
d4ea47c8 2879
c34e5780
MV
2880** The macros dealing with vectors have been deprecated.
2881
2882Use the new functions scm_is_vector, scm_vector_elements,
0b63c1ee
MV
2883scm_vector_writable_elements, etc, or scm_is_simple_vector,
2884SCM_SIMPLE_VECTOR_REF, SCM_SIMPLE_VECTOR_SET, etc instead. See the
2885manual for more details.
c34e5780
MV
2886
2887Deprecated are SCM_VECTORP, SCM_VELTS, SCM_VECTOR_MAX_LENGTH,
2888SCM_VECTOR_LENGTH, SCM_VECTOR_REF, SCM_VECTOR_SET, SCM_WRITABLE_VELTS.
2889
2890The following macros have been removed: SCM_VECTOR_BASE,
2891SCM_SET_VECTOR_BASE, SCM_MAKE_VECTOR_TAG, SCM_SET_VECTOR_LENGTH,
2892SCM_VELTS_AS_STACKITEMS, SCM_SETVELTS, SCM_GC_WRITABLE_VELTS.
2893
0c7a5cab 2894** Some C functions and macros related to arrays have been deprecated.
dc91d8de
MV
2895
2896Migrate according to the following table:
2897
e94d0be2 2898 scm_make_uve -> scm_make_typed_array, scm_make_u8vector etc.
dc91d8de
MV
2899 scm_make_ra -> scm_make_array
2900 scm_shap2ra -> scm_make_array
2901 scm_cvref -> scm_c_generalized_vector_ref
2902 scm_ra_set_contp -> do not use
2903 scm_aind -> scm_array_handle_pos
2904 scm_raprin1 -> scm_display or scm_write
2905
0c7a5cab
MV
2906 SCM_ARRAYP -> scm_is_array
2907 SCM_ARRAY_NDIM -> scm_c_array_rank
2908 SCM_ARRAY_DIMS -> scm_array_handle_dims
2909 SCM_ARRAY_CONTP -> do not use
2910 SCM_ARRAY_MEM -> do not use
2911 SCM_ARRAY_V -> scm_array_handle_elements or similar
2912 SCM_ARRAY_BASE -> do not use
2913
c1e7caf7
MV
2914** SCM_CELL_WORD_LOC has been deprecated.
2915
b0d10ba6 2916Use the new macro SCM_CELL_OBJECT_LOC instead, which returns a pointer
c1e7caf7
MV
2917to a SCM, as opposed to a pointer to a scm_t_bits.
2918
2919This was done to allow the correct use of pointers into the Scheme
2920heap. Previously, the heap words were of type scm_t_bits and local
2921variables and function arguments were of type SCM, making it
2922non-standards-conformant to have a pointer that can point to both.
2923
3ff9283d 2924** New macros SCM_SMOB_DATA_2, SCM_SMOB_DATA_3, etc.
27968825
MV
2925
2926These macros should be used instead of SCM_CELL_WORD_2/3 to access the
2927second and third words of double smobs. Likewise for
2928SCM_SET_SMOB_DATA_2 and SCM_SET_SMOB_DATA_3.
2929
2930Also, there is SCM_SMOB_FLAGS and SCM_SET_SMOB_FLAGS that should be
2931used to get and set the 16 exra bits in the zeroth word of a smob.
2932
2933And finally, there is SCM_SMOB_OBJECT and SCM_SMOB_SET_OBJECT for
2934accesing the first immediate word of a smob as a SCM value, and there
2935is SCM_SMOB_OBJECT_LOC for getting a pointer to the first immediate
b0d10ba6 2936smob word. Like wise for SCM_SMOB_OBJECT_2, etc.
27968825 2937
b0d10ba6 2938** New way to deal with non-local exits and re-entries.
9879d390
MV
2939
2940There is a new set of functions that essentially do what
fc6bb283
MV
2941scm_internal_dynamic_wind does, but in a way that is more convenient
2942for C code in some situations. Here is a quick example of how to
2943prevent a potential memory leak:
9879d390
MV
2944
2945 void
2946 foo ()
2947 {
2948 char *mem;
2949
661ae7ab 2950 scm_dynwind_begin (0);
9879d390
MV
2951
2952 mem = scm_malloc (100);
661ae7ab 2953 scm_dynwind_unwind_handler (free, mem, SCM_F_WIND_EXPLICITLY);
f1da8e4e
MV
2954
2955 /* MEM would leak if BAR throws an error.
661ae7ab 2956 SCM_DYNWIND_UNWIND_HANDLER frees it nevertheless.
c41acab3 2957 */
9879d390 2958
9879d390
MV
2959 bar ();
2960
661ae7ab 2961 scm_dynwind_end ();
9879d390 2962
e299cee2 2963 /* Because of SCM_F_WIND_EXPLICITLY, MEM will be freed by
661ae7ab 2964 SCM_DYNWIND_END as well.
9879d390
MV
2965 */
2966 }
2967
661ae7ab 2968For full documentation, see the node "Dynamic Wind" in the manual.
9879d390 2969
661ae7ab 2970** New function scm_dynwind_free
c41acab3 2971
661ae7ab
MV
2972This function calls 'free' on a given pointer when a dynwind context
2973is left. Thus the call to scm_dynwind_unwind_handler above could be
2974replaced with simply scm_dynwind_free (mem).
c41acab3 2975
a6d75e53
MV
2976** New functions scm_c_call_with_blocked_asyncs and
2977 scm_c_call_with_unblocked_asyncs
2978
2979Like scm_call_with_blocked_asyncs etc. but for C functions.
2980
661ae7ab 2981** New functions scm_dynwind_block_asyncs and scm_dynwind_unblock_asyncs
49c00ecc
MV
2982
2983In addition to scm_c_call_with_blocked_asyncs you can now also use
661ae7ab
MV
2984scm_dynwind_block_asyncs in a 'dynwind context' (see above). Likewise for
2985scm_c_call_with_unblocked_asyncs and scm_dynwind_unblock_asyncs.
49c00ecc 2986
a558cc63
MV
2987** The macros SCM_DEFER_INTS, SCM_ALLOW_INTS, SCM_REDEFER_INTS,
2988 SCM_REALLOW_INTS have been deprecated.
2989
2990They do no longer fulfill their original role of blocking signal
2991delivery. Depending on what you want to achieve, replace a pair of
661ae7ab
MV
2992SCM_DEFER_INTS and SCM_ALLOW_INTS with a dynwind context that locks a
2993mutex, blocks asyncs, or both. See node "Critical Sections" in the
2994manual.
a6d75e53
MV
2995
2996** The value 'scm_mask_ints' is no longer writable.
2997
2998Previously, you could set scm_mask_ints directly. This is no longer
2999possible. Use scm_c_call_with_blocked_asyncs and
3000scm_c_call_with_unblocked_asyncs instead.
a558cc63 3001
49c00ecc
MV
3002** New way to temporarily set the current input, output or error ports
3003
661ae7ab 3004C code can now use scm_dynwind_current_<foo>_port in a 'dynwind
0f24e75b 3005context' (see above). <foo> is one of "input", "output" or "error".
49c00ecc 3006
fc6bb283
MV
3007** New way to temporarily set fluids
3008
661ae7ab 3009C code can now use scm_dynwind_fluid in a 'dynwind context' (see
fc6bb283
MV
3010above) to temporarily set the value of a fluid.
3011
89fcf1b4
MV
3012** New types scm_t_intmax and scm_t_uintmax.
3013
3014On platforms that have them, these types are identical to intmax_t and
3015uintmax_t, respectively. On other platforms, they are identical to
3016the largest integer types that Guile knows about.
3017
b0d10ba6 3018** The functions scm_unmemocopy and scm_unmemoize have been removed.
9fcf3cbb 3019
b0d10ba6 3020You should not have used them.
9fcf3cbb 3021
5ebbe4ef
RB
3022** Many public #defines with generic names have been made private.
3023
3024#defines with generic names like HAVE_FOO or SIZEOF_FOO have been made
b0d10ba6 3025private or renamed with a more suitable public name.
f03314f9
DH
3026
3027** The macro SCM_TYP16S has been deprecated.
3028
b0d10ba6 3029This macro is not intended for public use.
f03314f9 3030
0d5e3480
DH
3031** The macro SCM_SLOPPY_INEXACTP has been deprecated.
3032
b0d10ba6 3033Use scm_is_true (scm_inexact_p (...)) instead.
0d5e3480
DH
3034
3035** The macro SCM_SLOPPY_REALP has been deprecated.
3036
b0d10ba6 3037Use scm_is_real instead.
0d5e3480
DH
3038
3039** The macro SCM_SLOPPY_COMPLEXP has been deprecated.
3040
b0d10ba6 3041Use scm_is_complex instead.
5ebbe4ef 3042
b0d10ba6 3043** Some preprocessor defines have been deprecated.
5ebbe4ef 3044
b0d10ba6
MV
3045These defines indicated whether a certain feature was present in Guile
3046or not. Going forward, assume that the features are always present.
5ebbe4ef 3047
b0d10ba6
MV
3048The macros are: USE_THREADS, GUILE_ISELECT, READER_EXTENSIONS,
3049DEBUG_EXTENSIONS, DYNAMIC_LINKING.
5ebbe4ef 3050
b0d10ba6
MV
3051The following macros have been removed completely: MEMOIZE_LOCALS,
3052SCM_RECKLESS, SCM_CAUTIOUS.
5ebbe4ef
RB
3053
3054** The preprocessor define STACK_DIRECTION has been deprecated.
3055
3056There should be no need to know about the stack direction for ordinary
b0d10ba6 3057programs.
5ebbe4ef 3058
b2cbe8d8
RB
3059** New function: scm_effective_version
3060
3061Returns the "effective" version number. This is just the normal full
3062version string without the final micro-version number. See "Changes
3063to the distribution" above.
3064
2902a459
MV
3065** The function scm_call_with_new_thread has a new prototype.
3066
3067Instead of taking a list with the thunk and handler, these two
3068arguments are now passed directly:
3069
3070 SCM scm_call_with_new_thread (SCM thunk, SCM handler);
3071
3072This is an incompatible change.
3073
ffd0ef3b
MV
3074** New snarfer macro SCM_DEFINE_PUBLIC.
3075
3076This is like SCM_DEFINE, but also calls scm_c_export for the defined
3077function in the init section.
3078
8734ce02
MV
3079** The snarfer macro SCM_SNARF_INIT is now officially supported.
3080
39e8f371
HWN
3081** Garbage collector rewrite.
3082
3083The garbage collector is cleaned up a lot, and now uses lazy
3084sweeping. This is reflected in the output of (gc-stats); since cells
3085are being freed when they are allocated, the cells-allocated field
3086stays roughly constant.
3087
3088For malloc related triggers, the behavior is changed. It uses the same
3089heuristic as the cell-triggered collections. It may be tuned with the
3090environment variables GUILE_MIN_YIELD_MALLOC. This is the percentage
3091for minimum yield of malloc related triggers. The default is 40.
3092GUILE_INIT_MALLOC_LIMIT sets the initial trigger for doing a GC. The
3093default is 200 kb.
3094
3095Debugging operations for the freelist have been deprecated, along with
3096the C variables that control garbage collection. The environment
3097variables GUILE_MAX_SEGMENT_SIZE, GUILE_INIT_SEGMENT_SIZE_2,
3098GUILE_INIT_SEGMENT_SIZE_1, and GUILE_MIN_YIELD_2 should be used.
3099
1367aa5e
HWN
3100For understanding the memory usage of a GUILE program, the routine
3101gc-live-object-stats returns an alist containing the number of live
3102objects for every type.
3103
3104
5ec1d2c8
DH
3105** The function scm_definedp has been renamed to scm_defined_p
3106
3107The name scm_definedp is deprecated.
3108
b0d10ba6 3109** The struct scm_cell type has been renamed to scm_t_cell
228a24ef
DH
3110
3111This is in accordance to Guile's naming scheme for types. Note that
3112the name scm_cell is now used for a function that allocates and
3113initializes a new cell (see below).
3114
0906625f
MV
3115** New functions for memory management
3116
3117A new set of functions for memory management has been added since the
3118old way (scm_must_malloc, scm_must_free, etc) was error prone and
3119indeed, Guile itself contained some long standing bugs that could
3120cause aborts in long running programs.
3121
3122The new functions are more symmetrical and do not need cooperation
3123from smob free routines, among other improvements.
3124
eab1b259
HWN
3125The new functions are scm_malloc, scm_realloc, scm_calloc, scm_strdup,
3126scm_strndup, scm_gc_malloc, scm_gc_calloc, scm_gc_realloc,
3127scm_gc_free, scm_gc_register_collectable_memory, and
0906625f
MV
3128scm_gc_unregister_collectable_memory. Refer to the manual for more
3129details and for upgrading instructions.
3130
3131The old functions for memory management have been deprecated. They
3132are: scm_must_malloc, scm_must_realloc, scm_must_free,
3133scm_must_strdup, scm_must_strndup, scm_done_malloc, scm_done_free.
3134
4aa104a4
MV
3135** Declarations of exported features are marked with SCM_API.
3136
3137Every declaration of a feature that belongs to the exported Guile API
3138has been marked by adding the macro "SCM_API" to the start of the
3139declaration. This macro can expand into different things, the most
3140common of which is just "extern" for Unix platforms. On Win32, it can
3141be used to control which symbols are exported from a DLL.
3142
8f99e3f3 3143If you `#define SCM_IMPORT' before including <libguile.h>, SCM_API
4aa104a4
MV
3144will expand into "__declspec (dllimport) extern", which is needed for
3145linking to the Guile DLL in Windows.
3146
b0d10ba6 3147There are also SCM_RL_IMPORT, SCM_SRFI1314_IMPORT, and
8f99e3f3 3148SCM_SRFI4_IMPORT, for the corresponding libraries.
4aa104a4 3149
a9930d22
MV
3150** SCM_NEWCELL and SCM_NEWCELL2 have been deprecated.
3151
b0d10ba6
MV
3152Use the new functions scm_cell and scm_double_cell instead. The old
3153macros had problems because with them allocation and initialization
3154was separated and the GC could sometimes observe half initialized
3155cells. Only careful coding by the user of SCM_NEWCELL and
3156SCM_NEWCELL2 could make this safe and efficient.
a9930d22 3157
5132eef0
DH
3158** CHECK_ENTRY, CHECK_APPLY and CHECK_EXIT have been deprecated.
3159
3160Use the variables scm_check_entry_p, scm_check_apply_p and scm_check_exit_p
3161instead.
3162
bc76d628
DH
3163** SRCBRKP has been deprecated.
3164
3165Use scm_c_source_property_breakpoint_p instead.
3166
3063e30a
DH
3167** Deprecated: scm_makmacro
3168
b0d10ba6
MV
3169Change your code to use either scm_makmmacro or to define macros in
3170Scheme, using 'define-macro'.
1e5f92ce 3171
1a61d41b
MV
3172** New function scm_c_port_for_each.
3173
3174This function is like scm_port_for_each but takes a pointer to a C
3175function as the callback instead of a SCM value.
3176
1f834c95
MV
3177** The names scm_internal_select, scm_thread_sleep, and
3178 scm_thread_usleep have been discouraged.
3179
3180Use scm_std_select, scm_std_sleep, scm_std_usleep instead.
3181
aa9200e5
MV
3182** The GC can no longer be blocked.
3183
3184The global flags scm_gc_heap_lock and scm_block_gc have been removed.
3185The GC can now run (partially) concurrently with other code and thus
3186blocking it is not well defined.
3187
b0d10ba6
MV
3188** Many definitions have been removed that were previously deprecated.
3189
3190scm_lisp_nil, scm_lisp_t, s_nil_ify, scm_m_nil_ify, s_t_ify,
3191scm_m_t_ify, s_0_cond, scm_m_0_cond, s_0_ify, scm_m_0_ify, s_1_ify,
3192scm_m_1_ify, scm_debug_newcell, scm_debug_newcell2,
3193scm_tc16_allocated, SCM_SET_SYMBOL_HASH, SCM_IM_NIL_IFY, SCM_IM_T_IFY,
3194SCM_IM_0_COND, SCM_IM_0_IFY, SCM_IM_1_IFY, SCM_GC_SET_ALLOCATED,
3195scm_debug_newcell, scm_debug_newcell2, SCM_HUP_SIGNAL, SCM_INT_SIGNAL,
3196SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL, SCM_ALRM_SIGNAL,
3197SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD, SCM_ORD_SIG,
3198SCM_NUM_SIGS, scm_top_level_lookup_closure_var,
3199*top-level-lookup-closure*, scm_system_transformer, scm_eval_3,
3200scm_eval2, root_module_lookup_closure, SCM_SLOPPY_STRINGP,
3201SCM_RWSTRINGP, scm_read_only_string_p, scm_make_shared_substring,
3202scm_tc7_substring, sym_huh, SCM_VARVCELL, SCM_UDVARIABLEP,
3203SCM_DEFVARIABLEP, scm_mkbig, scm_big2inum, scm_adjbig, scm_normbig,
3204scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl, SCM_FIXNUM_BIT,
3205SCM_SETCHARS, SCM_SLOPPY_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET,
3206SCM_LENGTH_MAX, SCM_SETLENGTH, SCM_ROSTRINGP, SCM_ROLENGTH,
3207SCM_ROCHARS, SCM_ROUCHARS, SCM_SUBSTRP, SCM_COERCE_SUBSTR,
3208scm_sym2vcell, scm_intern, scm_intern0, scm_sysintern, scm_sysintern0,
66c8ded2 3209scm_sysintern0_no_module_lookup, scm_init_symbols_deprecated,
2109da78 3210scm_vector_set_length_x, scm_contregs, scm_debug_info,
983e697d
MV
3211scm_debug_frame, SCM_DSIDEVAL, SCM_CONST_LONG, SCM_VCELL,
3212SCM_GLOBAL_VCELL, SCM_VCELL_INIT, SCM_GLOBAL_VCELL_INIT,
3213SCM_HUGE_LENGTH, SCM_VALIDATE_STRINGORSUBSTR, SCM_VALIDATE_ROSTRING,
3214SCM_VALIDATE_ROSTRING_COPY, SCM_VALIDATE_NULLORROSTRING_COPY,
3215SCM_VALIDATE_RWSTRING, DIGITS, scm_small_istr2int, scm_istr2int,
2109da78
MV
3216scm_istr2flo, scm_istring2number, scm_istr2int, scm_istr2flo,
3217scm_istring2number, scm_vtable_index_vcell, scm_si_vcell, SCM_ECONSP,
3218SCM_NECONSP, SCM_GLOC_VAR, SCM_GLOC_VAL, SCM_GLOC_SET_VAL,
c41acab3
MV
3219SCM_GLOC_VAL_LOC, scm_make_gloc, scm_gloc_p, scm_tc16_variable,
3220SCM_CHARS, SCM_LENGTH, SCM_SET_STRING_CHARS, SCM_SET_STRING_LENGTH.
b51bad08 3221
09172f9c
NJ
3222* Changes to bundled modules
3223
3224** (ice-9 debug)
3225
3226Using the (ice-9 debug) module no longer automatically switches Guile
3227to use the debugging evaluator. If you want to switch to the
3228debugging evaluator (which is needed for backtrace information if you
3229hit an error), please add an explicit "(debug-enable 'debug)" to your
3230code just after the code to use (ice-9 debug).
3231
328dc9a3 3232\f
c299f186
MD
3233Changes since Guile 1.4:
3234
3235* Changes to the distribution
3236
32d6f999
TTN
3237** A top-level TODO file is included.
3238
311b6a3c 3239** Guile now uses a versioning scheme similar to that of the Linux kernel.
c81ea65d
RB
3240
3241Guile now always uses three numbers to represent the version,
3242i.e. "1.6.5". The first number, 1, is the major version number, the
3243second number, 6, is the minor version number, and the third number,
32445, is the micro version number. Changes in major version number
3245indicate major changes in Guile.
3246
3247Minor version numbers that are even denote stable releases, and odd
3248minor version numbers denote development versions (which may be
3249unstable). The micro version number indicates a minor sub-revision of
3250a given MAJOR.MINOR release.
3251
3252In keeping with the new scheme, (minor-version) and scm_minor_version
3253no longer return everything but the major version number. They now
3254just return the minor version number. Two new functions
3255(micro-version) and scm_micro_version have been added to report the
3256micro version number.
3257
3258In addition, ./GUILE-VERSION now defines GUILE_MICRO_VERSION.
3259
5c790b44
RB
3260** New preprocessor definitions are available for checking versions.
3261
3262version.h now #defines SCM_MAJOR_VERSION, SCM_MINOR_VERSION, and
3263SCM_MICRO_VERSION to the appropriate integer values.
3264
311b6a3c
MV
3265** Guile now actively warns about deprecated features.
3266
3267The new configure option `--enable-deprecated=LEVEL' and the
3268environment variable GUILE_WARN_DEPRECATED control this mechanism.
3269See INSTALL and README for more information.
3270
0b073f0f
RB
3271** Guile is much more likely to work on 64-bit architectures.
3272
3273Guile now compiles and passes "make check" with only two UNRESOLVED GC
5e137c65
RB
3274cases on Alpha and ia64 based machines now. Thanks to John Goerzen
3275for the use of a test machine, and thanks to Stefan Jahn for ia64
3276patches.
0b073f0f 3277
e658215a
RB
3278** New functions: setitimer and getitimer.
3279
3280These implement a fairly direct interface to the libc functions of the
3281same name.
3282
8630fdfc
RB
3283** The #. reader extension is now disabled by default.
3284
3285For safety reasons, #. evaluation is disabled by default. To
3286re-enable it, set the fluid read-eval? to #t. For example:
3287
67b7dd9e 3288 (fluid-set! read-eval? #t)
8630fdfc
RB
3289
3290but make sure you realize the potential security risks involved. With
3291read-eval? enabled, reading a data file from an untrusted source can
3292be dangerous.
3293
f2a75d81 3294** New SRFI modules have been added:
4df36934 3295
dfdf5826
MG
3296SRFI-0 `cond-expand' is now supported in Guile, without requiring
3297using a module.
3298
e8bb0476
MG
3299(srfi srfi-1) is a library containing many useful pair- and list-processing
3300 procedures.
3301
7adc2c58 3302(srfi srfi-2) exports and-let*.
4df36934 3303
b74a7ec8
MG
3304(srfi srfi-4) implements homogeneous numeric vector datatypes.
3305
7adc2c58
RB
3306(srfi srfi-6) is a dummy module for now, since guile already provides
3307 all of the srfi-6 procedures by default: open-input-string,
3308 open-output-string, get-output-string.
4df36934 3309
7adc2c58 3310(srfi srfi-8) exports receive.
4df36934 3311
7adc2c58 3312(srfi srfi-9) exports define-record-type.
4df36934 3313
dfdf5826
MG
3314(srfi srfi-10) exports define-reader-ctor and implements the reader
3315 extension #,().
3316
7adc2c58 3317(srfi srfi-11) exports let-values and let*-values.
4df36934 3318
7adc2c58 3319(srfi srfi-13) implements the SRFI String Library.
53e29a1e 3320
7adc2c58 3321(srfi srfi-14) implements the SRFI Character-Set Library.
53e29a1e 3322
dfdf5826
MG
3323(srfi srfi-17) implements setter and getter-with-setter and redefines
3324 some accessor procedures as procedures with getters. (such as car,
3325 cdr, vector-ref etc.)
3326
3327(srfi srfi-19) implements the SRFI Time/Date Library.
2b60bc95 3328
466bb4b3
TTN
3329** New scripts / "executable modules"
3330
3331Subdirectory "scripts" contains Scheme modules that are packaged to
3332also be executable as scripts. At this time, these scripts are available:
3333
3334 display-commentary
3335 doc-snarf
3336 generate-autoload
3337 punify
58e5b910 3338 read-scheme-source
466bb4b3
TTN
3339 use2dot
3340
3341See README there for more info.
3342
54c17ccb
TTN
3343These scripts can be invoked from the shell with the new program
3344"guile-tools", which keeps track of installation directory for you.
3345For example:
3346
3347 $ guile-tools display-commentary srfi/*.scm
3348
3349guile-tools is copied to the standard $bindir on "make install".
3350
0109c4bf
MD
3351** New module (ice-9 stack-catch):
3352
3353stack-catch is like catch, but saves the current state of the stack in
3c1d1301
RB
3354the fluid the-last-stack. This fluid can be useful when using the
3355debugger and when re-throwing an error.
0109c4bf 3356
fbf0c8c7
MV
3357** The module (ice-9 and-let*) has been renamed to (ice-9 and-let-star)
3358
3359This has been done to prevent problems on lesser operating systems
3360that can't tolerate `*'s in file names. The exported macro continues
3361to be named `and-let*', of course.
3362
4f60cc33 3363On systems that support it, there is also a compatibility module named
fbf0c8c7 3364(ice-9 and-let*). It will go away in the next release.
6c0201ad 3365
9d774814 3366** New modules (oop goops) etc.:
14f1d9fe
MD
3367
3368 (oop goops)
3369 (oop goops describe)
3370 (oop goops save)
3371 (oop goops active-slot)
3372 (oop goops composite-slot)
3373
9d774814 3374The Guile Object Oriented Programming System (GOOPS) has been
311b6a3c
MV
3375integrated into Guile. For further information, consult the GOOPS
3376manual and tutorial in the `doc' directory.
14f1d9fe 3377
9d774814
GH
3378** New module (ice-9 rdelim).
3379
3380This exports the following procedures which were previously defined
1c8cbd62 3381in the default environment:
9d774814 3382
1c8cbd62
GH
3383read-line read-line! read-delimited read-delimited! %read-delimited!
3384%read-line write-line
9d774814 3385
1c8cbd62
GH
3386For backwards compatibility the definitions are still imported into the
3387default environment in this version of Guile. However you should add:
9d774814
GH
3388
3389(use-modules (ice-9 rdelim))
3390
1c8cbd62
GH
3391to any program which uses the definitions, since this may change in
3392future.
9d774814
GH
3393
3394Alternatively, if guile-scsh is installed, the (scsh rdelim) module
3395can be used for similar functionality.
3396
7e267da1
GH
3397** New module (ice-9 rw)
3398
3399This is a subset of the (scsh rw) module from guile-scsh. Currently
373f4948 3400it defines two procedures:
7e267da1 3401
311b6a3c 3402*** New function: read-string!/partial str [port_or_fdes [start [end]]]
7e267da1 3403
4bcdfe46
GH
3404 Read characters from a port or file descriptor into a string STR.
3405 A port must have an underlying file descriptor -- a so-called
3406 fport. This procedure is scsh-compatible and can efficiently read
311b6a3c 3407 large strings.
7e267da1 3408
4bcdfe46
GH
3409*** New function: write-string/partial str [port_or_fdes [start [end]]]
3410
3411 Write characters from a string STR to a port or file descriptor.
3412 A port must have an underlying file descriptor -- a so-called
3413 fport. This procedure is mostly compatible and can efficiently
3414 write large strings.
3415
e5005373
KN
3416** New module (ice-9 match)
3417
311b6a3c
MV
3418This module includes Andrew K. Wright's pattern matcher. See
3419ice-9/match.scm for brief description or
e5005373 3420
311b6a3c 3421 http://www.star-lab.com/wright/code.html
e5005373 3422
311b6a3c 3423for complete documentation.
e5005373 3424
4f60cc33
NJ
3425** New module (ice-9 buffered-input)
3426
3427This module provides procedures to construct an input port from an
3428underlying source of input that reads and returns its input in chunks.
3429The underlying input source is a Scheme procedure, specified by the
3430caller, which the port invokes whenever it needs more input.
3431
3432This is useful when building an input port whose back end is Readline
3433or a UI element such as the GtkEntry widget.
3434
3435** Documentation
3436
3437The reference and tutorial documentation that was previously
3438distributed separately, as `guile-doc', is now included in the core
3439Guile distribution. The documentation consists of the following
3440manuals.
3441
3442- The Guile Tutorial (guile-tut.texi) contains a tutorial introduction
3443 to using Guile.
3444
3445- The Guile Reference Manual (guile.texi) contains (or is intended to
3446 contain) reference documentation on all aspects of Guile.
3447
3448- The GOOPS Manual (goops.texi) contains both tutorial-style and
3449 reference documentation for using GOOPS, Guile's Object Oriented
3450 Programming System.
3451
c3e62877
NJ
3452- The Revised^5 Report on the Algorithmic Language Scheme
3453 (r5rs.texi).
4f60cc33
NJ
3454
3455See the README file in the `doc' directory for more details.
3456
094a67bb
MV
3457** There are a couple of examples in the examples/ directory now.
3458
9d774814
GH
3459* Changes to the stand-alone interpreter
3460
e7e58018
MG
3461** New command line option `--use-srfi'
3462
3463Using this option, SRFI modules can be loaded on startup and be
3464available right from the beginning. This makes programming portable
3465Scheme programs easier.
3466
3467The option `--use-srfi' expects a comma-separated list of numbers,
3468each representing a SRFI number to be loaded into the interpreter
3469before starting evaluating a script file or the REPL. Additionally,
3470the feature identifier for the loaded SRFIs is recognized by
3471`cond-expand' when using this option.
3472
3473Example:
3474$ guile --use-srfi=8,13
3475guile> (receive (x z) (values 1 2) (+ 1 2))
34763
58e5b910 3477guile> (string-pad "bla" 20)
e7e58018
MG
3478" bla"
3479
094a67bb
MV
3480** Guile now always starts up in the `(guile-user)' module.
3481
6e9382f1 3482Previously, scripts executed via the `-s' option would run in the
094a67bb
MV
3483`(guile)' module and the repl would run in the `(guile-user)' module.
3484Now every user action takes place in the `(guile-user)' module by
3485default.
e7e58018 3486
c299f186
MD
3487* Changes to Scheme functions and syntax
3488
720e1c30
MV
3489** Character classifiers work for non-ASCII characters.
3490
3491The predicates `char-alphabetic?', `char-numeric?',
3492`char-whitespace?', `char-lower?', `char-upper?' and `char-is-both?'
3493no longer check whether their arguments are ASCII characters.
3494Previously, a character would only be considered alphabetic when it
3495was also ASCII, for example.
3496
311b6a3c
MV
3497** Previously deprecated Scheme functions have been removed:
3498
3499 tag - no replacement.
3500 fseek - replaced by seek.
3501 list* - replaced by cons*.
3502
3503** It's now possible to create modules with controlled environments
3504
3505Example:
3506
3507(use-modules (ice-9 safe))
3508(define m (make-safe-module))
3509;;; m will now be a module containing only a safe subset of R5RS
3510(eval '(+ 1 2) m) --> 3
3511(eval 'load m) --> ERROR: Unbound variable: load
3512
3513** Evaluation of "()", the empty list, is now an error.
8c2c9967
MV
3514
3515Previously, the expression "()" evaluated to the empty list. This has
3516been changed to signal a "missing expression" error. The correct way
3517to write the empty list as a literal constant is to use quote: "'()".
3518
311b6a3c
MV
3519** New concept of `Guile Extensions'.
3520
3521A Guile Extension is just a ordinary shared library that can be linked
3522at run-time. We found it advantageous to give this simple concept a
3523dedicated name to distinguish the issues related to shared libraries
3524from the issues related to the module system.
3525
3526*** New function: load-extension
3527
3528Executing (load-extension lib init) is mostly equivalent to
3529
3530 (dynamic-call init (dynamic-link lib))
3531
3532except when scm_register_extension has been called previously.
3533Whenever appropriate, you should use `load-extension' instead of
3534dynamic-link and dynamic-call.
3535
3536*** New C function: scm_c_register_extension
3537
3538This function registers a initialization function for use by
3539`load-extension'. Use it when you don't want specific extensions to
3540be loaded as shared libraries (for example on platforms that don't
3541support dynamic linking).
3542
8c2c9967
MV
3543** Auto-loading of compiled-code modules is deprecated.
3544
3545Guile used to be able to automatically find and link a shared
c10ecc4c 3546library to satisfy requests for a module. For example, the module
8c2c9967
MV
3547`(foo bar)' could be implemented by placing a shared library named
3548"foo/libbar.so" (or with a different extension) in a directory on the
3549load path of Guile.
3550
311b6a3c
MV
3551This has been found to be too tricky, and is no longer supported. The
3552shared libraries are now called "extensions". You should now write a
3553small Scheme file that calls `load-extension' to load the shared
e299cee2 3554library and initialize it explicitly.
8c2c9967
MV
3555
3556The shared libraries themselves should be installed in the usual
3557places for shared libraries, with names like "libguile-foo-bar".
3558
3559For example, place this into a file "foo/bar.scm"
3560
3561 (define-module (foo bar))
3562
311b6a3c
MV
3563 (load-extension "libguile-foo-bar" "foobar_init")
3564
3565** Backward incompatible change: eval EXP ENVIRONMENT-SPECIFIER
3566
3567`eval' is now R5RS, that is it takes two arguments.
3568The second argument is an environment specifier, i.e. either
3569
3570 (scheme-report-environment 5)
3571 (null-environment 5)
3572 (interaction-environment)
3573
3574or
8c2c9967 3575
311b6a3c 3576 any module.
8c2c9967 3577
6f76852b
MV
3578** The module system has been made more disciplined.
3579
311b6a3c
MV
3580The function `eval' will save and restore the current module around
3581the evaluation of the specified expression. While this expression is
3582evaluated, `(current-module)' will now return the right module, which
3583is the module specified as the second argument to `eval'.
6f76852b 3584
311b6a3c 3585A consequence of this change is that `eval' is not particularly
6f76852b
MV
3586useful when you want allow the evaluated code to change what module is
3587designated as the current module and have this change persist from one
3588call to `eval' to the next. The read-eval-print-loop is an example
3589where `eval' is now inadequate. To compensate, there is a new
3590function `primitive-eval' that does not take a module specifier and
3591that does not save/restore the current module. You should use this
3592function together with `set-current-module', `current-module', etc
3593when you want to have more control over the state that is carried from
3594one eval to the next.
3595
3596Additionally, it has been made sure that forms that are evaluated at
3597the top level are always evaluated with respect to the current module.
3598Previously, subforms of top-level forms such as `begin', `case',
3599etc. did not respect changes to the current module although these
3600subforms are at the top-level as well.
3601
311b6a3c 3602To prevent strange behavior, the forms `define-module',
6f76852b
MV
3603`use-modules', `use-syntax', and `export' have been restricted to only
3604work on the top level. The forms `define-public' and
3605`defmacro-public' only export the new binding on the top level. They
3606behave just like `define' and `defmacro', respectively, when they are
3607used in a lexical environment.
3608
0a892a2c
MV
3609Also, `export' will no longer silently re-export bindings imported
3610from a used module. It will emit a `deprecation' warning and will
3611cease to perform any re-export in the next version. If you actually
3612want to re-export bindings, use the new `re-export' in place of
3613`export'. The new `re-export' will not make copies of variables when
3614rexporting them, as `export' did wrongly.
3615
047dc3ae
TTN
3616** Module system now allows selection and renaming of imported bindings
3617
3618Previously, when using `use-modules' or the `#:use-module' clause in
3619the `define-module' form, all the bindings (association of symbols to
3620values) for imported modules were added to the "current module" on an
3621as-is basis. This has been changed to allow finer control through two
3622new facilities: selection and renaming.
3623
3624You can now select which of the imported module's bindings are to be
3625visible in the current module by using the `:select' clause. This
3626clause also can be used to rename individual bindings. For example:
3627
3628 ;; import all bindings no questions asked
3629 (use-modules (ice-9 common-list))
3630
3631 ;; import four bindings, renaming two of them;
3632 ;; the current module sees: every some zonk-y zonk-n
3633 (use-modules ((ice-9 common-list)
3634 :select (every some
3635 (remove-if . zonk-y)
3636 (remove-if-not . zonk-n))))
3637
3638You can also programmatically rename all selected bindings using the
3639`:renamer' clause, which specifies a proc that takes a symbol and
3640returns another symbol. Because it is common practice to use a prefix,
3641we now provide the convenience procedure `symbol-prefix-proc'. For
3642example:
3643
3644 ;; import four bindings, renaming two of them specifically,
3645 ;; and all four w/ prefix "CL:";
3646 ;; the current module sees: CL:every CL:some CL:zonk-y CL:zonk-n
3647 (use-modules ((ice-9 common-list)
3648 :select (every some
3649 (remove-if . zonk-y)
3650 (remove-if-not . zonk-n))
3651 :renamer (symbol-prefix-proc 'CL:)))
3652
3653 ;; import four bindings, renaming two of them specifically,
3654 ;; and all four by upcasing.
3655 ;; the current module sees: EVERY SOME ZONK-Y ZONK-N
3656 (define (upcase-symbol sym)
3657 (string->symbol (string-upcase (symbol->string sym))))
3658
3659 (use-modules ((ice-9 common-list)
3660 :select (every some
3661 (remove-if . zonk-y)
3662 (remove-if-not . zonk-n))
3663 :renamer upcase-symbol))
3664
3665Note that programmatic renaming is done *after* individual renaming.
3666Also, the above examples show `use-modules', but the same facilities are
3667available for the `#:use-module' clause of `define-module'.
3668
3669See manual for more info.
3670
b7d69200 3671** The semantics of guardians have changed.
56495472 3672
b7d69200 3673The changes are for the most part compatible. An important criterion
6c0201ad 3674was to keep the typical usage of guardians as simple as before, but to
c0a5d888 3675make the semantics safer and (as a result) more useful.
56495472 3676
c0a5d888 3677*** All objects returned from guardians are now properly alive.
56495472 3678
c0a5d888
ML
3679It is now guaranteed that any object referenced by an object returned
3680from a guardian is alive. It's now impossible for a guardian to
3681return a "contained" object before its "containing" object.
56495472
ML
3682
3683One incompatible (but probably not very important) change resulting
3684from this is that it is no longer possible to guard objects that
3685indirectly reference themselves (i.e. are parts of cycles). If you do
3686so accidentally, you'll get a warning.
3687
c0a5d888
ML
3688*** There are now two types of guardians: greedy and sharing.
3689
3690If you call (make-guardian #t) or just (make-guardian), you'll get a
3691greedy guardian, and for (make-guardian #f) a sharing guardian.
3692
3693Greedy guardians are the default because they are more "defensive".
3694You can only greedily guard an object once. If you guard an object
3695more than once, once in a greedy guardian and the rest of times in
3696sharing guardians, then it is guaranteed that the object won't be
3697returned from sharing guardians as long as it is greedily guarded
3698and/or alive.
3699
3700Guardians returned by calls to `make-guardian' can now take one more
3701optional parameter, which says whether to throw an error in case an
3702attempt is made to greedily guard an object that is already greedily
3703guarded. The default is true, i.e. throw an error. If the parameter
3704is false, the guardian invocation returns #t if guarding was
3705successful and #f if it wasn't.
3706
3707Also, since greedy guarding is, in effect, a side-effecting operation
3708on objects, a new function is introduced: `destroy-guardian!'.
3709Invoking this function on a guardian renders it unoperative and, if
3710the guardian is greedy, clears the "greedily guarded" property of the
3711objects that were guarded by it, thus undoing the side effect.
3712
3713Note that all this hair is hardly very important, since guardian
3714objects are usually permanent.
3715
311b6a3c
MV
3716** Continuations created by call-with-current-continuation now accept
3717any number of arguments, as required by R5RS.
818febc0 3718
c10ecc4c 3719** New function `issue-deprecation-warning'
56426fdb 3720
311b6a3c 3721This function is used to display the deprecation messages that are
c10ecc4c 3722controlled by GUILE_WARN_DEPRECATION as explained in the README.
56426fdb
KN
3723
3724 (define (id x)
c10ecc4c
MV
3725 (issue-deprecation-warning "`id' is deprecated. Use `identity' instead.")
3726 (identity x))
56426fdb
KN
3727
3728 guile> (id 1)
3729 ;; `id' is deprecated. Use `identity' instead.
3730 1
3731 guile> (id 1)
3732 1
3733
c10ecc4c
MV
3734** New syntax `begin-deprecated'
3735
3736When deprecated features are included (as determined by the configure
3737option --enable-deprecated), `begin-deprecated' is identical to
3738`begin'. When deprecated features are excluded, it always evaluates
3739to `#f', ignoring the body forms.
3740
17f367e0
MV
3741** New function `make-object-property'
3742
3743This function returns a new `procedure with setter' P that can be used
3744to attach a property to objects. When calling P as
3745
3746 (set! (P obj) val)
3747
3748where `obj' is any kind of object, it attaches `val' to `obj' in such
3749a way that it can be retrieved by calling P as
3750
3751 (P obj)
3752
3753This function will replace procedure properties, symbol properties and
3754source properties eventually.
3755
76ef92f3
MV
3756** Module (ice-9 optargs) now uses keywords instead of `#&'.
3757
3758Instead of #&optional, #&key, etc you should now use #:optional,
3759#:key, etc. Since #:optional is a keyword, you can write it as just
3760:optional when (read-set! keywords 'prefix) is active.
3761
3762The old reader syntax `#&' is still supported, but deprecated. It
3763will be removed in the next release.
3764
c0997079
MD
3765** New define-module option: pure
3766
3767Tells the module system not to include any bindings from the root
3768module.
3769
3770Example:
3771
3772(define-module (totally-empty-module)
3773 :pure)
3774
3775** New define-module option: export NAME1 ...
3776
3777Export names NAME1 ...
3778
3779This option is required if you want to be able to export bindings from
3780a module which doesn't import one of `define-public' or `export'.
3781
3782Example:
3783
311b6a3c
MV
3784 (define-module (foo)
3785 :pure
3786 :use-module (ice-9 r5rs)
3787 :export (bar))
69b5f65a 3788
311b6a3c 3789 ;;; Note that we're pure R5RS below this point!
69b5f65a 3790
311b6a3c
MV
3791 (define (bar)
3792 ...)
daa6ba18 3793
1f3908c4
KN
3794** New function: object->string OBJ
3795
3796Return a Scheme string obtained by printing a given object.
3797
eb5c0a2a
GH
3798** New function: port? X
3799
3800Returns a boolean indicating whether X is a port. Equivalent to
3801`(or (input-port? X) (output-port? X))'.
3802
efa40607
DH
3803** New function: file-port?
3804
3805Determines whether a given object is a port that is related to a file.
3806
34b56ec4
GH
3807** New function: port-for-each proc
3808
311b6a3c
MV
3809Apply PROC to each port in the Guile port table in turn. The return
3810value is unspecified. More specifically, PROC is applied exactly once
3811to every port that exists in the system at the time PORT-FOR-EACH is
3812invoked. Changes to the port table while PORT-FOR-EACH is running
3813have no effect as far as PORT-FOR-EACH is concerned.
34b56ec4
GH
3814
3815** New function: dup2 oldfd newfd
3816
3817A simple wrapper for the `dup2' system call. Copies the file
3818descriptor OLDFD to descriptor number NEWFD, replacing the
3819previous meaning of NEWFD. Both OLDFD and NEWFD must be integers.
3820Unlike for dup->fdes or primitive-move->fdes, no attempt is made
264e9cbc 3821to move away ports which are using NEWFD. The return value is
34b56ec4
GH
3822unspecified.
3823
3824** New function: close-fdes fd
3825
3826A simple wrapper for the `close' system call. Close file
3827descriptor FD, which must be an integer. Unlike close (*note
3828close: Ports and File Descriptors.), the file descriptor will be
3829closed even if a port is using it. The return value is
3830unspecified.
3831
94e6d793
MG
3832** New function: crypt password salt
3833
3834Encrypts `password' using the standard unix password encryption
3835algorithm.
3836
3837** New function: chroot path
3838
3839Change the root directory of the running process to `path'.
3840
3841** New functions: getlogin, cuserid
3842
3843Return the login name or the user name of the current effective user
3844id, respectively.
3845
3846** New functions: getpriority which who, setpriority which who prio
3847
3848Get or set the priority of the running process.
3849
3850** New function: getpass prompt
3851
3852Read a password from the terminal, first displaying `prompt' and
3853disabling echoing.
3854
3855** New function: flock file operation
3856
3857Set/remove an advisory shared or exclusive lock on `file'.
3858
3859** New functions: sethostname name, gethostname
3860
3861Set or get the hostname of the machine the current process is running
3862on.
3863
6d163216 3864** New function: mkstemp! tmpl
4f60cc33 3865
6d163216
GH
3866mkstemp creates a new unique file in the file system and returns a
3867new buffered port open for reading and writing to the file. TMPL
3868is a string specifying where the file should be created: it must
3869end with `XXXXXX' and will be changed in place to return the name
3870of the temporary file.
3871
62e63ba9
MG
3872** New function: open-input-string string
3873
3874Return an input string port which delivers the characters from
4f60cc33 3875`string'. This procedure, together with `open-output-string' and
62e63ba9
MG
3876`get-output-string' implements SRFI-6.
3877
3878** New function: open-output-string
3879
3880Return an output string port which collects all data written to it.
3881The data can then be retrieved by `get-output-string'.
3882
3883** New function: get-output-string
3884
3885Return the contents of an output string port.
3886
56426fdb
KN
3887** New function: identity
3888
3889Return the argument.
3890
5bef627d
GH
3891** socket, connect, accept etc., now have support for IPv6. IPv6 addresses
3892 are represented in Scheme as integers with normal host byte ordering.
3893
3894** New function: inet-pton family address
3895
311b6a3c
MV
3896Convert a printable string network address into an integer. Note that
3897unlike the C version of this function, the result is an integer with
3898normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
3899e.g.,
3900
3901 (inet-pton AF_INET "127.0.0.1") => 2130706433
3902 (inet-pton AF_INET6 "::1") => 1
5bef627d
GH
3903
3904** New function: inet-ntop family address
3905
311b6a3c
MV
3906Convert an integer network address into a printable string. Note that
3907unlike the C version of this function, the input is an integer with
3908normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
3909e.g.,
3910
3911 (inet-ntop AF_INET 2130706433) => "127.0.0.1"
3912 (inet-ntop AF_INET6 (- (expt 2 128) 1)) =>
5bef627d
GH
3913 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
3914
56426fdb
KN
3915** Deprecated: id
3916
3917Use `identity' instead.
3918
5cd06d5e
DH
3919** Deprecated: -1+
3920
3921Use `1-' instead.
3922
3923** Deprecated: return-it
3924
311b6a3c 3925Do without it.
5cd06d5e
DH
3926
3927** Deprecated: string-character-length
3928
3929Use `string-length' instead.
3930
3931** Deprecated: flags
3932
3933Use `logior' instead.
3934
4f60cc33
NJ
3935** Deprecated: close-all-ports-except.
3936
3937This was intended for closing ports in a child process after a fork,
3938but it has the undesirable side effect of flushing buffers.
3939port-for-each is more flexible.
34b56ec4
GH
3940
3941** The (ice-9 popen) module now attempts to set up file descriptors in
3942the child process from the current Scheme ports, instead of using the
3943current values of file descriptors 0, 1, and 2 in the parent process.
3944
b52e071b
DH
3945** Removed function: builtin-weak-bindings
3946
3947There is no such concept as a weak binding any more.
3948
9d774814 3949** Removed constants: bignum-radix, scm-line-incrementors
0f979f3f 3950
7d435120
MD
3951** define-method: New syntax mandatory.
3952
3953The new method syntax is now mandatory:
3954
3955(define-method (NAME ARG-SPEC ...) BODY ...)
3956(define-method (NAME ARG-SPEC ... . REST-ARG) BODY ...)
3957
3958 ARG-SPEC ::= ARG-NAME | (ARG-NAME TYPE)
3959 REST-ARG ::= ARG-NAME
3960
3961If you have old code using the old syntax, import
3962(oop goops old-define-method) before (oop goops) as in:
3963
3964 (use-modules (oop goops old-define-method) (oop goops))
3965
f3f9dcbc
MV
3966** Deprecated function: builtin-variable
3967 Removed function: builtin-bindings
3968
3969There is no longer a distinction between builtin or other variables.
3970Use module system operations for all variables.
3971
311b6a3c
MV
3972** Lazy-catch handlers are no longer allowed to return.
3973
3974That is, a call to `throw', `error', etc is now guaranteed to not
3975return.
3976
a583bf1e 3977** Bugfixes for (ice-9 getopt-long)
8c84b81e 3978
a583bf1e
TTN
3979This module is now tested using test-suite/tests/getopt-long.test.
3980The following bugs have been fixed:
3981
3982*** Parsing for options that are specified to have `optional' args now checks
3983if the next element is an option instead of unconditionally taking it as the
8c84b81e
TTN
3984option arg.
3985
a583bf1e
TTN
3986*** An error is now thrown for `--opt=val' when the option description
3987does not specify `(value #t)' or `(value optional)'. This condition used to
3988be accepted w/o error, contrary to the documentation.
3989
3990*** The error message for unrecognized options is now more informative.
3991It used to be "not a record", an artifact of the implementation.
3992
3993*** The error message for `--opt' terminating the arg list (no value), when
3994`(value #t)' is specified, is now more informative. It used to be "not enough
3995args".
3996
3997*** "Clumped" single-char args now preserve trailing string, use it as arg.
3998The expansion used to be like so:
3999
4000 ("-abc5d" "--xyz") => ("-a" "-b" "-c" "--xyz")
4001
4002Note that the "5d" is dropped. Now it is like so:
4003
4004 ("-abc5d" "--xyz") => ("-a" "-b" "-c" "5d" "--xyz")
4005
4006This enables single-char options to have adjoining arguments as long as their
4007constituent characters are not potential single-char options.
8c84b81e 4008
998bfc70
TTN
4009** (ice-9 session) procedure `arity' now works with (ice-9 optargs) `lambda*'
4010
4011The `lambda*' and derivative forms in (ice-9 optargs) now set a procedure
4012property `arglist', which can be retrieved by `arity'. The result is that
4013`arity' can give more detailed information than before:
4014
4015Before:
4016
4017 guile> (use-modules (ice-9 optargs))
4018 guile> (define* (foo #:optional a b c) a)
4019 guile> (arity foo)
4020 0 or more arguments in `lambda*:G0'.
4021
4022After:
4023
4024 guile> (arity foo)
4025 3 optional arguments: `a', `b' and `c'.
4026 guile> (define* (bar a b #:key c d #:allow-other-keys) a)
4027 guile> (arity bar)
4028 2 required arguments: `a' and `b', 2 keyword arguments: `c'
4029 and `d', other keywords allowed.
4030 guile> (define* (baz a b #:optional c #:rest r) a)
4031 guile> (arity baz)
4032 2 required arguments: `a' and `b', 1 optional argument: `c',
4033 the rest in `r'.
4034
311b6a3c
MV
4035* Changes to the C interface
4036
c81c130e
MV
4037** Types have been renamed from scm_*_t to scm_t_*.
4038
4039This has been done for POSIX sake. It reserves identifiers ending
4040with "_t". What a concept.
4041
4042The old names are still available with status `deprecated'.
4043
4044** scm_t_bits (former scm_bits_t) is now a unsigned type.
4045
6e9382f1 4046** Deprecated features have been removed.
e6c9e497
MV
4047
4048*** Macros removed
4049
4050 SCM_INPORTP, SCM_OUTPORTP SCM_ICHRP, SCM_ICHR, SCM_MAKICHR
4051 SCM_SETJMPBUF SCM_NSTRINGP SCM_NRWSTRINGP SCM_NVECTORP SCM_DOUBLE_CELLP
4052
4053*** C Functions removed
4054
4055 scm_sysmissing scm_tag scm_tc16_flo scm_tc_flo
4056 scm_fseek - replaced by scm_seek.
4057 gc-thunk - replaced by after-gc-hook.
4058 gh_int2scmb - replaced by gh_bool2scm.
4059 scm_tc_dblr - replaced by scm_tc16_real.
4060 scm_tc_dblc - replaced by scm_tc16_complex.
4061 scm_list_star - replaced by scm_cons_star.
4062
36284627
DH
4063** Deprecated: scm_makfromstr
4064
4065Use scm_mem2string instead.
4066
311b6a3c
MV
4067** Deprecated: scm_make_shared_substring
4068
4069Explicit shared substrings will disappear from Guile.
4070
4071Instead, "normal" strings will be implemented using sharing
4072internally, combined with a copy-on-write strategy.
4073
4074** Deprecated: scm_read_only_string_p
4075
4076The concept of read-only strings will disappear in next release of
4077Guile.
4078
4079** Deprecated: scm_sloppy_memq, scm_sloppy_memv, scm_sloppy_member
c299f186 4080
311b6a3c 4081Instead, use scm_c_memq or scm_memq, scm_memv, scm_member.
c299f186 4082
dd0e04ed
KN
4083** New functions: scm_call_0, scm_call_1, scm_call_2, scm_call_3
4084
83dbedcc
KR
4085Call a procedure with the indicated number of arguments. See "Fly
4086Evaluation" in the manual.
dd0e04ed
KN
4087
4088** New functions: scm_apply_0, scm_apply_1, scm_apply_2, scm_apply_3
4089
83dbedcc
KR
4090Call a procedure with the indicated number of arguments and a list of
4091further arguments. See "Fly Evaluation" in the manual.
dd0e04ed 4092
e235f2a6
KN
4093** New functions: scm_list_1, scm_list_2, scm_list_3, scm_list_4, scm_list_5
4094
83dbedcc
KR
4095Create a list of the given number of elements. See "List
4096Constructors" in the manual.
e235f2a6
KN
4097
4098** Renamed function: scm_listify has been replaced by scm_list_n.
4099
4100** Deprecated macros: SCM_LIST0, SCM_LIST1, SCM_LIST2, SCM_LIST3, SCM_LIST4,
4101SCM_LIST5, SCM_LIST6, SCM_LIST7, SCM_LIST8, SCM_LIST9.
4102
4103Use functions scm_list_N instead.
4104
6fe692e9
MD
4105** New function: scm_c_read (SCM port, void *buffer, scm_sizet size)
4106
4107Used by an application to read arbitrary number of bytes from a port.
4108Same semantics as libc read, except that scm_c_read only returns less
4109than SIZE bytes if at end-of-file.
4110
4111Warning: Doesn't update port line and column counts!
4112
4113** New function: scm_c_write (SCM port, const void *ptr, scm_sizet size)
4114
4115Used by an application to write arbitrary number of bytes to an SCM
4116port. Similar semantics as libc write. However, unlike libc
4117write, scm_c_write writes the requested number of bytes and has no
4118return value.
4119
4120Warning: Doesn't update port line and column counts!
4121
17f367e0
MV
4122** New function: scm_init_guile ()
4123
4124In contrast to scm_boot_guile, scm_init_guile will return normally
4125after initializing Guile. It is not available on all systems, tho.
4126
23ade5e7
DH
4127** New functions: scm_str2symbol, scm_mem2symbol
4128
4129The function scm_str2symbol takes a const char* pointing to a zero-terminated
4130field of characters and creates a scheme symbol object from that C string.
4131The function scm_mem2symbol takes a const char* and a number of characters and
4132creates a symbol from the characters in that memory area.
4133
17f367e0
MV
4134** New functions: scm_primitive_make_property
4135 scm_primitive_property_ref
4136 scm_primitive_property_set_x
4137 scm_primitive_property_del_x
4138
4139These functions implement a new way to deal with object properties.
4140See libguile/properties.c for their documentation.
4141
9d47a1e6
ML
4142** New function: scm_done_free (long size)
4143
4144This function is the inverse of scm_done_malloc. Use it to report the
4145amount of smob memory you free. The previous method, which involved
4146calling scm_done_malloc with negative argument, was somewhat
4147unintuitive (and is still available, of course).
4148
79a3dafe
DH
4149** New function: scm_c_memq (SCM obj, SCM list)
4150
4151This function provides a fast C level alternative for scm_memq for the case
4152that the list parameter is known to be a proper list. The function is a
4153replacement for scm_sloppy_memq, but is stricter in its requirements on its
4154list input parameter, since for anything else but a proper list the function's
4155behaviour is undefined - it may even crash or loop endlessly. Further, for
4156the case that the object is not found in the list, scm_c_memq returns #f which
4157is similar to scm_memq, but different from scm_sloppy_memq's behaviour.
4158
6c0201ad 4159** New functions: scm_remember_upto_here_1, scm_remember_upto_here_2,
5d2b97cd
DH
4160scm_remember_upto_here
4161
4162These functions replace the function scm_remember.
4163
4164** Deprecated function: scm_remember
4165
4166Use one of the new functions scm_remember_upto_here_1,
4167scm_remember_upto_here_2 or scm_remember_upto_here instead.
4168
be54b15d
DH
4169** New function: scm_allocate_string
4170
4171This function replaces the function scm_makstr.
4172
4173** Deprecated function: scm_makstr
4174
4175Use the new function scm_allocate_string instead.
4176
32d0d4b1
DH
4177** New global variable scm_gc_running_p introduced.
4178
4179Use this variable to find out if garbage collection is being executed. Up to
4180now applications have used scm_gc_heap_lock to test if garbage collection was
4181running, which also works because of the fact that up to know only the garbage
4182collector has set this variable. But, this is an implementation detail that
4183may change. Further, scm_gc_heap_lock is not set throughout gc, thus the use
4184of this variable is (and has been) not fully safe anyway.
4185
5b9eb8ae
DH
4186** New macros: SCM_BITVECTOR_MAX_LENGTH, SCM_UVECTOR_MAX_LENGTH
4187
4188Use these instead of SCM_LENGTH_MAX.
4189
6c0201ad 4190** New macros: SCM_CONTINUATION_LENGTH, SCM_CCLO_LENGTH, SCM_STACK_LENGTH,
a6d9e5ab
DH
4191SCM_STRING_LENGTH, SCM_SYMBOL_LENGTH, SCM_UVECTOR_LENGTH,
4192SCM_BITVECTOR_LENGTH, SCM_VECTOR_LENGTH.
4193
4194Use these instead of SCM_LENGTH.
4195
6c0201ad 4196** New macros: SCM_SET_CONTINUATION_LENGTH, SCM_SET_STRING_LENGTH,
93778877
DH
4197SCM_SET_SYMBOL_LENGTH, SCM_SET_VECTOR_LENGTH, SCM_SET_UVECTOR_LENGTH,
4198SCM_SET_BITVECTOR_LENGTH
bc0eaf7b
DH
4199
4200Use these instead of SCM_SETLENGTH
4201
6c0201ad 4202** New macros: SCM_STRING_CHARS, SCM_SYMBOL_CHARS, SCM_CCLO_BASE,
a6d9e5ab
DH
4203SCM_VECTOR_BASE, SCM_UVECTOR_BASE, SCM_BITVECTOR_BASE, SCM_COMPLEX_MEM,
4204SCM_ARRAY_MEM
4205
e51fe79c
DH
4206Use these instead of SCM_CHARS, SCM_UCHARS, SCM_ROCHARS, SCM_ROUCHARS or
4207SCM_VELTS.
a6d9e5ab 4208
6c0201ad 4209** New macros: SCM_SET_BIGNUM_BASE, SCM_SET_STRING_CHARS,
6a0476fd
DH
4210SCM_SET_SYMBOL_CHARS, SCM_SET_UVECTOR_BASE, SCM_SET_BITVECTOR_BASE,
4211SCM_SET_VECTOR_BASE
4212
4213Use these instead of SCM_SETCHARS.
4214
a6d9e5ab
DH
4215** New macro: SCM_BITVECTOR_P
4216
4217** New macro: SCM_STRING_COERCE_0TERMINATION_X
4218
4219Use instead of SCM_COERCE_SUBSTR.
4220
30ea841d
DH
4221** New macros: SCM_DIR_OPEN_P, SCM_DIR_FLAG_OPEN
4222
4223For directory objects, use these instead of SCM_OPDIRP and SCM_OPN.
4224
6c0201ad
TTN
4225** Deprecated macros: SCM_OUTOFRANGE, SCM_NALLOC, SCM_HUP_SIGNAL,
4226SCM_INT_SIGNAL, SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL,
4227SCM_ALRM_SIGNAL, SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD,
d1ca2c64 4228SCM_ORD_SIG, SCM_NUM_SIGS, SCM_SYMBOL_SLOTS, SCM_SLOTS, SCM_SLOPPY_STRINGP,
a6d9e5ab
DH
4229SCM_VALIDATE_STRINGORSUBSTR, SCM_FREEP, SCM_NFREEP, SCM_CHARS, SCM_UCHARS,
4230SCM_VALIDATE_ROSTRING, SCM_VALIDATE_ROSTRING_COPY,
4231SCM_VALIDATE_NULLORROSTRING_COPY, SCM_ROLENGTH, SCM_LENGTH, SCM_HUGE_LENGTH,
b24b5e13 4232SCM_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET, SCM_COERCE_SUBSTR,
34f0f2b8 4233SCM_ROSTRINGP, SCM_RWSTRINGP, SCM_VALIDATE_RWSTRING, SCM_ROCHARS,
fd336365 4234SCM_ROUCHARS, SCM_SETLENGTH, SCM_SETCHARS, SCM_LENGTH_MAX, SCM_GC8MARKP,
30ea841d 4235SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR, SCM_SUBR_DOC,
b3fcac34
DH
4236SCM_OPDIRP, SCM_VALIDATE_OPDIR, SCM_WTA, RETURN_SCM_WTA, SCM_CONST_LONG,
4237SCM_WNA, SCM_FUNC_NAME, SCM_VALIDATE_NUMBER_COPY,
61045190 4238SCM_VALIDATE_NUMBER_DEF_COPY, SCM_SLOPPY_CONSP, SCM_SLOPPY_NCONSP,
e038c042 4239SCM_SETAND_CDR, SCM_SETOR_CDR, SCM_SETAND_CAR, SCM_SETOR_CAR
b63a956d
DH
4240
4241Use SCM_ASSERT_RANGE or SCM_VALIDATE_XXX_RANGE instead of SCM_OUTOFRANGE.
4242Use scm_memory_error instead of SCM_NALLOC.
c1aef037 4243Use SCM_STRINGP instead of SCM_SLOPPY_STRINGP.
d1ca2c64
DH
4244Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_STRINGORSUBSTR.
4245Use SCM_FREE_CELL_P instead of SCM_FREEP/SCM_NFREEP
a6d9e5ab 4246Use a type specific accessor macro instead of SCM_CHARS/SCM_UCHARS.
6c0201ad 4247Use a type specific accessor instead of SCM(_|_RO|_HUGE_)LENGTH.
a6d9e5ab
DH
4248Use SCM_VALIDATE_(SYMBOL|STRING) instead of SCM_VALIDATE_ROSTRING.
4249Use SCM_STRING_COERCE_0TERMINATION_X instead of SCM_COERCE_SUBSTR.
b24b5e13 4250Use SCM_STRINGP or SCM_SYMBOLP instead of SCM_ROSTRINGP.
f0942910
DH
4251Use SCM_STRINGP instead of SCM_RWSTRINGP.
4252Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_RWSTRING.
34f0f2b8
DH
4253Use SCM_STRING_CHARS instead of SCM_ROCHARS.
4254Use SCM_STRING_UCHARS instead of SCM_ROUCHARS.
93778877 4255Use a type specific setter macro instead of SCM_SETLENGTH.
6a0476fd 4256Use a type specific setter macro instead of SCM_SETCHARS.
5b9eb8ae 4257Use a type specific length macro instead of SCM_LENGTH_MAX.
fd336365
DH
4258Use SCM_GCMARKP instead of SCM_GC8MARKP.
4259Use SCM_SETGCMARK instead of SCM_SETGC8MARK.
4260Use SCM_CLRGCMARK instead of SCM_CLRGC8MARK.
4261Use SCM_TYP16 instead of SCM_GCTYP16.
4262Use SCM_CDR instead of SCM_GCCDR.
30ea841d 4263Use SCM_DIR_OPEN_P instead of SCM_OPDIRP.
276dd677
DH
4264Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of SCM_WTA.
4265Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of RETURN_SCM_WTA.
8dea8611 4266Use SCM_VCELL_INIT instead of SCM_CONST_LONG.
b3fcac34 4267Use SCM_WRONG_NUM_ARGS instead of SCM_WNA.
ced99e92
DH
4268Use SCM_CONSP instead of SCM_SLOPPY_CONSP.
4269Use !SCM_CONSP instead of SCM_SLOPPY_NCONSP.
b63a956d 4270
f7620510
DH
4271** Removed function: scm_struct_init
4272
93d40df2
DH
4273** Removed variable: scm_symhash_dim
4274
818febc0
GH
4275** Renamed function: scm_make_cont has been replaced by
4276scm_make_continuation, which has a different interface.
4277
cc4feeca
DH
4278** Deprecated function: scm_call_catching_errors
4279
4280Use scm_catch or scm_lazy_catch from throw.[ch] instead.
4281
28b06554
DH
4282** Deprecated function: scm_strhash
4283
4284Use scm_string_hash instead.
4285
1b9be268
DH
4286** Deprecated function: scm_vector_set_length_x
4287
4288Instead, create a fresh vector of the desired size and copy the contents.
4289
302f229e
MD
4290** scm_gensym has changed prototype
4291
4292scm_gensym now only takes one argument.
4293
1660782e
DH
4294** Deprecated type tags: scm_tc7_ssymbol, scm_tc7_msymbol, scm_tcs_symbols,
4295scm_tc7_lvector
28b06554
DH
4296
4297There is now only a single symbol type scm_tc7_symbol.
1660782e 4298The tag scm_tc7_lvector was not used anyway.
28b06554 4299
2f6fb7c5
KN
4300** Deprecated function: scm_make_smob_type_mfpe, scm_set_smob_mfpe.
4301
4302Use scm_make_smob_type and scm_set_smob_XXX instead.
4303
4304** New function scm_set_smob_apply.
4305
4306This can be used to set an apply function to a smob type.
4307
1f3908c4
KN
4308** Deprecated function: scm_strprint_obj
4309
4310Use scm_object_to_string instead.
4311
b3fcac34
DH
4312** Deprecated function: scm_wta
4313
4314Use scm_wrong_type_arg, or another appropriate error signalling function
4315instead.
4316
f3f9dcbc
MV
4317** Explicit support for obarrays has been deprecated.
4318
4319Use `scm_str2symbol' and the generic hashtable functions instead.
4320
4321** The concept of `vcells' has been deprecated.
4322
4323The data type `variable' is now used exclusively. `Vcells' have been
4324a low-level concept so you are likely not affected by this change.
4325
4326*** Deprecated functions: scm_sym2vcell, scm_sysintern,
4327 scm_sysintern0, scm_symbol_value0, scm_intern, scm_intern0.
4328
4329Use scm_c_define or scm_c_lookup instead, as appropriate.
4330
4331*** New functions: scm_c_module_lookup, scm_c_lookup,
4332 scm_c_module_define, scm_c_define, scm_module_lookup, scm_lookup,
4333 scm_module_define, scm_define.
4334
4335These functions work with variables instead of with vcells.
4336
311b6a3c
MV
4337** New functions for creating and defining `subr's and `gsubr's.
4338
4339The new functions more clearly distinguish between creating a subr (or
4340gsubr) object and adding it to the current module.
4341
4342These new functions are available: scm_c_make_subr, scm_c_define_subr,
4343scm_c_make_subr_with_generic, scm_c_define_subr_with_generic,
4344scm_c_make_gsubr, scm_c_define_gsubr, scm_c_make_gsubr_with_generic,
4345scm_c_define_gsubr_with_generic.
4346
4347** Deprecated functions: scm_make_subr, scm_make_subr_opt,
4348 scm_make_subr_with_generic, scm_make_gsubr,
4349 scm_make_gsubr_with_generic.
4350
4351Use the new ones from above instead.
4352
4353** C interface to the module system has changed.
4354
4355While we suggest that you avoid as many explicit module system
4356operations from C as possible for the time being, the C interface has
4357been made more similar to the high-level Scheme module system.
4358
4359*** New functions: scm_c_define_module, scm_c_use_module,
4360 scm_c_export, scm_c_resolve_module.
4361
4362They mostly work like their Scheme namesakes. scm_c_define_module
4363takes a function that is called a context where the new module is
4364current.
4365
4366*** Deprecated functions: scm_the_root_module, scm_make_module,
4367 scm_ensure_user_module, scm_load_scheme_module.
4368
4369Use the new functions instead.
4370
4371** Renamed function: scm_internal_with_fluids becomes
4372 scm_c_with_fluids.
4373
4374scm_internal_with_fluids is available as a deprecated function.
4375
4376** New function: scm_c_with_fluid.
4377
4378Just like scm_c_with_fluids, but takes one fluid and one value instead
4379of lists of same.
4380
1be6b49c
ML
4381** Deprecated typedefs: long_long, ulong_long.
4382
4383They are of questionable utility and they pollute the global
4384namespace.
4385
1be6b49c
ML
4386** Deprecated typedef: scm_sizet
4387
4388It is of questionable utility now that Guile requires ANSI C, and is
4389oddly named.
4390
4391** Deprecated typedefs: scm_port_rw_active, scm_port,
4392 scm_ptob_descriptor, scm_debug_info, scm_debug_frame, scm_fport,
4393 scm_option, scm_rstate, scm_rng, scm_array, scm_array_dim.
4394
4395Made more compliant with the naming policy by adding a _t at the end.
4396
4397** Deprecated functions: scm_mkbig, scm_big2num, scm_adjbig,
4398 scm_normbig, scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl
4399
373f4948 4400With the exception of the mysterious scm_2ulong2big, they are still
1be6b49c
ML
4401available under new names (scm_i_mkbig etc). These functions are not
4402intended to be used in user code. You should avoid dealing with
4403bignums directly, and should deal with numbers in general (which can
4404be bignums).
4405
147c18a0
MD
4406** Change in behavior: scm_num2long, scm_num2ulong
4407
4408The scm_num2[u]long functions don't any longer accept an inexact
4409argument. This change in behavior is motivated by concordance with
4410R5RS: It is more common that a primitive doesn't want to accept an
4411inexact for an exact.
4412
1be6b49c 4413** New functions: scm_short2num, scm_ushort2num, scm_int2num,
f3f70257
ML
4414 scm_uint2num, scm_size2num, scm_ptrdiff2num, scm_num2short,
4415 scm_num2ushort, scm_num2int, scm_num2uint, scm_num2ptrdiff,
1be6b49c
ML
4416 scm_num2size.
4417
4418These are conversion functions between the various ANSI C integral
147c18a0
MD
4419types and Scheme numbers. NOTE: The scm_num2xxx functions don't
4420accept an inexact argument.
1be6b49c 4421
5437598b
MD
4422** New functions: scm_float2num, scm_double2num,
4423 scm_num2float, scm_num2double.
4424
4425These are conversion functions between the two ANSI C float types and
4426Scheme numbers.
4427
1be6b49c 4428** New number validation macros:
f3f70257 4429 SCM_NUM2{SIZE,PTRDIFF,SHORT,USHORT,INT,UINT}[_DEF]
1be6b49c
ML
4430
4431See above.
4432
fc62c86a
ML
4433** New functions: scm_gc_protect_object, scm_gc_unprotect_object
4434
4435These are just nicer-named old scm_protect_object and
4436scm_unprotect_object.
4437
4438** Deprecated functions: scm_protect_object, scm_unprotect_object
4439
4440** New functions: scm_gc_[un]register_root, scm_gc_[un]register_roots
4441
4442These functions can be used to register pointers to locations that
4443hold SCM values.
4444
5b2ad23b
ML
4445** Deprecated function: scm_create_hook.
4446
4447Its sins are: misleading name, non-modularity and lack of general
4448usefulness.
4449
c299f186 4450\f
cc36e791
JB
4451Changes since Guile 1.3.4:
4452
80f27102
JB
4453* Changes to the distribution
4454
ce358662
JB
4455** Trees from nightly snapshots and CVS now require you to run autogen.sh.
4456
4457We've changed the way we handle generated files in the Guile source
4458repository. As a result, the procedure for building trees obtained
4459from the nightly FTP snapshots or via CVS has changed:
4460- You must have appropriate versions of autoconf, automake, and
4461 libtool installed on your system. See README for info on how to
4462 obtain these programs.
4463- Before configuring the tree, you must first run the script
4464 `autogen.sh' at the top of the source tree.
4465
4466The Guile repository used to contain not only source files, written by
4467humans, but also some generated files, like configure scripts and
4468Makefile.in files. Even though the contents of these files could be
4469derived mechanically from other files present, we thought it would
4470make the tree easier to build if we checked them into CVS.
4471
4472However, this approach means that minor differences between
4473developer's installed tools and habits affected the whole team.
4474So we have removed the generated files from the repository, and
4475added the autogen.sh script, which will reconstruct them
4476appropriately.
4477
4478
dc914156
GH
4479** configure now has experimental options to remove support for certain
4480features:
52cfc69b 4481
dc914156
GH
4482--disable-arrays omit array and uniform array support
4483--disable-posix omit posix interfaces
4484--disable-networking omit networking interfaces
4485--disable-regex omit regular expression interfaces
52cfc69b
GH
4486
4487These are likely to become separate modules some day.
4488
9764c29b 4489** New configure option --enable-debug-freelist
e1b0d0ac 4490
38a15cfd
GB
4491This enables a debugging version of SCM_NEWCELL(), and also registers
4492an extra primitive, the setter `gc-set-debug-check-freelist!'.
4493
4494Configure with the --enable-debug-freelist option to enable
4495the gc-set-debug-check-freelist! primitive, and then use:
4496
4497(gc-set-debug-check-freelist! #t) # turn on checking of the freelist
4498(gc-set-debug-check-freelist! #f) # turn off checking
4499
4500Checking of the freelist forces a traversal of the freelist and
4501a garbage collection before each allocation of a cell. This can
4502slow down the interpreter dramatically, so the setter should be used to
4503turn on this extra processing only when necessary.
e1b0d0ac 4504
9764c29b
MD
4505** New configure option --enable-debug-malloc
4506
4507Include code for debugging of calls to scm_must_malloc/realloc/free.
4508
4509Checks that
4510
45111. objects freed by scm_must_free has been mallocated by scm_must_malloc
45122. objects reallocated by scm_must_realloc has been allocated by
4513 scm_must_malloc
45143. reallocated objects are reallocated with the same what string
4515
4516But, most importantly, it records the number of allocated objects of
4517each kind. This is useful when searching for memory leaks.
4518
4519A Guile compiled with this option provides the primitive
4520`malloc-stats' which returns an alist with pairs of kind and the
4521number of objects of that kind.
4522
e415cb06
MD
4523** All includes are now referenced relative to the root directory
4524
4525Since some users have had problems with mixups between Guile and
4526system headers, we have decided to always refer to Guile headers via
4527their parent directories. This essentially creates a "private name
4528space" for Guile headers. This means that the compiler only is given
4529-I options for the root build and root source directory.
4530
341f78c9
MD
4531** Header files kw.h and genio.h have been removed.
4532
4533** The module (ice-9 getopt-gnu-style) has been removed.
4534
e8855f8d
MD
4535** New module (ice-9 documentation)
4536
4537Implements the interface to documentation strings associated with
4538objects.
4539
0c0ffe09
KN
4540** New module (ice-9 time)
4541
4542Provides a macro `time', which displays execution time of a given form.
4543
cf7a5ee5
KN
4544** New module (ice-9 history)
4545
4546Loading this module enables value history in the repl.
4547
0af43c4a 4548* Changes to the stand-alone interpreter
bd9e24b3 4549
67ef2dca
MD
4550** New command line option --debug
4551
4552Start Guile with debugging evaluator and backtraces enabled.
4553
4554This is useful when debugging your .guile init file or scripts.
4555
aa4bb95d
MD
4556** New help facility
4557
341f78c9
MD
4558Usage: (help NAME) gives documentation about objects named NAME (a symbol)
4559 (help REGEXP) ditto for objects with names matching REGEXP (a string)
58e5b910 4560 (help 'NAME) gives documentation for NAME, even if it is not an object
341f78c9 4561 (help ,EXPR) gives documentation for object returned by EXPR
6c0201ad 4562 (help (my module)) gives module commentary for `(my module)'
341f78c9
MD
4563 (help) gives this text
4564
4565`help' searches among bindings exported from loaded modules, while
4566`apropos' searches among bindings visible from the "current" module.
4567
4568Examples: (help help)
4569 (help cons)
4570 (help "output-string")
aa4bb95d 4571
e8855f8d
MD
4572** `help' and `apropos' now prints full module names
4573
0af43c4a 4574** Dynamic linking now uses libltdl from the libtool package.
bd9e24b3 4575
0af43c4a
MD
4576The old system dependent code for doing dynamic linking has been
4577replaced with calls to the libltdl functions which do all the hairy
4578details for us.
bd9e24b3 4579
0af43c4a
MD
4580The major improvement is that you can now directly pass libtool
4581library names like "libfoo.la" to `dynamic-link' and `dynamic-link'
4582will be able to do the best shared library job you can get, via
4583libltdl.
bd9e24b3 4584
0af43c4a
MD
4585The way dynamic libraries are found has changed and is not really
4586portable across platforms, probably. It is therefore recommended to
4587use absolute filenames when possible.
4588
4589If you pass a filename without an extension to `dynamic-link', it will
4590try a few appropriate ones. Thus, the most platform ignorant way is
4591to specify a name like "libfoo", without any directories and
4592extensions.
0573ddae 4593
91163914
MD
4594** Guile COOP threads are now compatible with LinuxThreads
4595
4596Previously, COOP threading wasn't possible in applications linked with
4597Linux POSIX threads due to their use of the stack pointer to find the
4598thread context. This has now been fixed with a workaround which uses
4599the pthreads to allocate the stack.
4600
6c0201ad 4601** New primitives: `pkgdata-dir', `site-dir', `library-dir'
62b82274 4602
9770d235
MD
4603** Positions of erring expression in scripts
4604
4605With version 1.3.4, the location of the erring expression in Guile
4606scipts is no longer automatically reported. (This should have been
4607documented before the 1.3.4 release.)
4608
4609You can get this information by enabling recording of positions of
4610source expressions and running the debugging evaluator. Put this at
4611the top of your script (or in your "site" file):
4612
4613 (read-enable 'positions)
4614 (debug-enable 'debug)
4615
0573ddae
MD
4616** Backtraces in scripts
4617
4618It is now possible to get backtraces in scripts.
4619
4620Put
4621
4622 (debug-enable 'debug 'backtrace)
4623
4624at the top of the script.
4625
4626(The first options enables the debugging evaluator.
4627 The second enables backtraces.)
4628
e8855f8d
MD
4629** Part of module system symbol lookup now implemented in C
4630
4631The eval closure of most modules is now implemented in C. Since this
4632was one of the bottlenecks for loading speed, Guile now loads code
4633substantially faster than before.
4634
f25f761d
GH
4635** Attempting to get the value of an unbound variable now produces
4636an exception with a key of 'unbound-variable instead of 'misc-error.
4637
1a35eadc
GH
4638** The initial default output port is now unbuffered if it's using a
4639tty device. Previously in this situation it was line-buffered.
4640
820920e6
MD
4641** New hook: after-gc-hook
4642
4643after-gc-hook takes over the role of gc-thunk. This hook is run at
4644the first SCM_TICK after a GC. (Thus, the code is run at the same
4645point during evaluation as signal handlers.)
4646
4647Note that this hook should be used only for diagnostic and debugging
4648purposes. It is not certain that it will continue to be well-defined
4649when this hook is run in the future.
4650
4651C programmers: Note the new C level hooks scm_before_gc_c_hook,
4652scm_before_sweep_c_hook, scm_after_gc_c_hook.
4653
b5074b23
MD
4654** Improvements to garbage collector
4655
4656Guile 1.4 has a new policy for triggering heap allocation and
4657determining the sizes of heap segments. It fixes a number of problems
4658in the old GC.
4659
46601. The new policy can handle two separate pools of cells
4661 (2-word/4-word) better. (The old policy would run wild, allocating
4662 more and more memory for certain programs.)
4663
46642. The old code would sometimes allocate far too much heap so that the
4665 Guile process became gigantic. The new code avoids this.
4666
46673. The old code would sometimes allocate too little so that few cells
4668 were freed at GC so that, in turn, too much time was spent in GC.
4669
46704. The old code would often trigger heap allocation several times in a
4671 row. (The new scheme predicts how large the segments needs to be
4672 in order not to need further allocation.)
4673
e8855f8d
MD
4674All in all, the new GC policy will make larger applications more
4675efficient.
4676
b5074b23
MD
4677The new GC scheme also is prepared for POSIX threading. Threads can
4678allocate private pools of cells ("clusters") with just a single
4679function call. Allocation of single cells from such a cluster can
4680then proceed without any need of inter-thread synchronization.
4681
4682** New environment variables controlling GC parameters
4683
4684GUILE_MAX_SEGMENT_SIZE Maximal segment size
4685 (default = 2097000)
4686
4687Allocation of 2-word cell heaps:
4688
4689GUILE_INIT_SEGMENT_SIZE_1 Size of initial heap segment in bytes
4690 (default = 360000)
4691
4692GUILE_MIN_YIELD_1 Minimum number of freed cells at each
4693 GC in percent of total heap size
4694 (default = 40)
4695
4696Allocation of 4-word cell heaps
4697(used for real numbers and misc other objects):
4698
4699GUILE_INIT_SEGMENT_SIZE_2, GUILE_MIN_YIELD_2
4700
4701(See entry "Way for application to customize GC parameters" under
4702 section "Changes to the scm_ interface" below.)
4703
67ef2dca
MD
4704** Guile now implements reals using 4-word cells
4705
4706This speeds up computation with reals. (They were earlier allocated
4707with `malloc'.) There is still some room for optimizations, however.
4708
4709** Some further steps toward POSIX thread support have been taken
4710
4711*** Guile's critical sections (SCM_DEFER/ALLOW_INTS)
4712don't have much effect any longer, and many of them will be removed in
4713next release.
4714
4715*** Signals
4716are only handled at the top of the evaluator loop, immediately after
4717I/O, and in scm_equalp.
4718
4719*** The GC can allocate thread private pools of pairs.
4720
0af43c4a
MD
4721* Changes to Scheme functions and syntax
4722
a0128ebe 4723** close-input-port and close-output-port are now R5RS
7c1e0b12 4724
a0128ebe 4725These procedures have been turned into primitives and have R5RS behaviour.
7c1e0b12 4726
0af43c4a
MD
4727** New procedure: simple-format PORT MESSAGE ARG1 ...
4728
4729(ice-9 boot) makes `format' an alias for `simple-format' until possibly
4730extended by the more sophisticated version in (ice-9 format)
4731
4732(simple-format port message . args)
4733Write MESSAGE to DESTINATION, defaulting to `current-output-port'.
4734MESSAGE can contain ~A (was %s) and ~S (was %S) escapes. When printed,
4735the escapes are replaced with corresponding members of ARGS:
4736~A formats using `display' and ~S formats using `write'.
4737If DESTINATION is #t, then use the `current-output-port',
4738if DESTINATION is #f, then return a string containing the formatted text.
4739Does not add a trailing newline."
4740
4741** string-ref: the second argument is no longer optional.
4742
4743** string, list->string: no longer accept strings in their arguments,
4744only characters, for compatibility with R5RS.
4745
4746** New procedure: port-closed? PORT
4747Returns #t if PORT is closed or #f if it is open.
4748
0a9e521f
MD
4749** Deprecated: list*
4750
4751The list* functionality is now provided by cons* (SRFI-1 compliant)
4752
b5074b23
MD
4753** New procedure: cons* ARG1 ARG2 ... ARGn
4754
4755Like `list', but the last arg provides the tail of the constructed list,
4756returning (cons ARG1 (cons ARG2 (cons ... ARGn))).
4757
4758Requires at least one argument. If given one argument, that argument
4759is returned as result.
4760
4761This function is called `list*' in some other Schemes and in Common LISP.
4762
341f78c9
MD
4763** Removed deprecated: serial-map, serial-array-copy!, serial-array-map!
4764
e8855f8d
MD
4765** New procedure: object-documentation OBJECT
4766
4767Returns the documentation string associated with OBJECT. The
4768procedure uses a caching mechanism so that subsequent lookups are
4769faster.
4770
4771Exported by (ice-9 documentation).
4772
4773** module-name now returns full names of modules
4774
4775Previously, only the last part of the name was returned (`session' for
4776`(ice-9 session)'). Ex: `(ice-9 session)'.
4777
894a712b
DH
4778* Changes to the gh_ interface
4779
4780** Deprecated: gh_int2scmb
4781
4782Use gh_bool2scm instead.
4783
a2349a28
GH
4784* Changes to the scm_ interface
4785
810e1aec
MD
4786** Guile primitives now carry docstrings!
4787
4788Thanks to Greg Badros!
4789
0a9e521f 4790** Guile primitives are defined in a new way: SCM_DEFINE/SCM_DEFINE1/SCM_PROC
0af43c4a 4791
0a9e521f
MD
4792Now Guile primitives are defined using the SCM_DEFINE/SCM_DEFINE1/SCM_PROC
4793macros and must contain a docstring that is extracted into foo.doc using a new
0af43c4a
MD
4794guile-doc-snarf script (that uses guile-doc-snarf.awk).
4795
0a9e521f
MD
4796However, a major overhaul of these macros is scheduled for the next release of
4797guile.
4798
0af43c4a
MD
4799** Guile primitives use a new technique for validation of arguments
4800
4801SCM_VALIDATE_* macros are defined to ease the redundancy and improve
4802the readability of argument checking.
4803
4804** All (nearly?) K&R prototypes for functions replaced with ANSI C equivalents.
4805
894a712b 4806** New macros: SCM_PACK, SCM_UNPACK
f8a72ca4
MD
4807
4808Compose/decompose an SCM value.
4809
894a712b
DH
4810The SCM type is now treated as an abstract data type and may be defined as a
4811long, a void* or as a struct, depending on the architecture and compile time
4812options. This makes it easier to find several types of bugs, for example when
4813SCM values are treated as integers without conversion. Values of the SCM type
4814should be treated as "atomic" values. These macros are used when
f8a72ca4
MD
4815composing/decomposing an SCM value, either because you want to access
4816individual bits, or because you want to treat it as an integer value.
4817
4818E.g., in order to set bit 7 in an SCM value x, use the expression
4819
4820 SCM_PACK (SCM_UNPACK (x) | 0x80)
4821
e11f8b42
DH
4822** The name property of hooks is deprecated.
4823Thus, the use of SCM_HOOK_NAME and scm_make_hook_with_name is deprecated.
4824
4825You can emulate this feature by using object properties.
4826
6c0201ad 4827** Deprecated macros: SCM_INPORTP, SCM_OUTPORTP, SCM_CRDY, SCM_ICHRP,
894a712b
DH
4828SCM_ICHR, SCM_MAKICHR, SCM_SETJMPBUF, SCM_NSTRINGP, SCM_NRWSTRINGP,
4829SCM_NVECTORP
f8a72ca4 4830
894a712b 4831These macros will be removed in a future release of Guile.
7c1e0b12 4832
6c0201ad 4833** The following types, functions and macros from numbers.h are deprecated:
0a9e521f
MD
4834scm_dblproc, SCM_UNEGFIXABLE, SCM_FLOBUFLEN, SCM_INEXP, SCM_CPLXP, SCM_REAL,
4835SCM_IMAG, SCM_REALPART, scm_makdbl, SCM_SINGP, SCM_NUM2DBL, SCM_NO_BIGDIG
4836
a2349a28
GH
4837** Port internals: the rw_random variable in the scm_port structure
4838must be set to non-zero in any random access port. In recent Guile
4839releases it was only set for bidirectional random-access ports.
4840
7dcb364d
GH
4841** Port internals: the seek ptob procedure is now responsible for
4842resetting the buffers if required. The change was made so that in the
4843special case of reading the current position (i.e., seek p 0 SEEK_CUR)
4844the fport and strport ptobs can avoid resetting the buffers,
4845in particular to avoid discarding unread chars. An existing port
4846type can be fixed by adding something like the following to the
4847beginning of the ptob seek procedure:
4848
4849 if (pt->rw_active == SCM_PORT_READ)
4850 scm_end_input (object);
4851 else if (pt->rw_active == SCM_PORT_WRITE)
4852 ptob->flush (object);
4853
4854although to actually avoid resetting the buffers and discard unread
4855chars requires further hacking that depends on the characteristics
4856of the ptob.
4857
894a712b
DH
4858** Deprecated functions: scm_fseek, scm_tag
4859
4860These functions are no longer used and will be removed in a future version.
4861
f25f761d
GH
4862** The scm_sysmissing procedure is no longer used in libguile.
4863Unless it turns out to be unexpectedly useful to somebody, it will be
4864removed in a future version.
4865
0af43c4a
MD
4866** The format of error message strings has changed
4867
4868The two C procedures: scm_display_error and scm_error, as well as the
4869primitive `scm-error', now use scm_simple_format to do their work.
4870This means that the message strings of all code must be updated to use
4871~A where %s was used before, and ~S where %S was used before.
4872
4873During the period when there still are a lot of old Guiles out there,
4874you might want to support both old and new versions of Guile.
4875
4876There are basically two methods to achieve this. Both methods use
4877autoconf. Put
4878
4879 AC_CHECK_FUNCS(scm_simple_format)
4880
4881in your configure.in.
4882
4883Method 1: Use the string concatenation features of ANSI C's
4884 preprocessor.
4885
4886In C:
4887
4888#ifdef HAVE_SCM_SIMPLE_FORMAT
4889#define FMT_S "~S"
4890#else
4891#define FMT_S "%S"
4892#endif
4893
4894Then represent each of your error messages using a preprocessor macro:
4895
4896#define E_SPIDER_ERROR "There's a spider in your " ## FMT_S ## "!!!"
4897
4898In Scheme:
4899
4900(define fmt-s (if (defined? 'simple-format) "~S" "%S"))
4901(define make-message string-append)
4902
4903(define e-spider-error (make-message "There's a spider in your " fmt-s "!!!"))
4904
4905Method 2: Use the oldfmt function found in doc/oldfmt.c.
4906
4907In C:
4908
4909scm_misc_error ("picnic", scm_c_oldfmt0 ("There's a spider in your ~S!!!"),
4910 ...);
4911
4912In Scheme:
4913
4914(scm-error 'misc-error "picnic" (oldfmt "There's a spider in your ~S!!!")
4915 ...)
4916
4917
f3b5e185
MD
4918** Deprecated: coop_mutex_init, coop_condition_variable_init
4919
4920Don't use the functions coop_mutex_init and
4921coop_condition_variable_init. They will change.
4922
4923Use scm_mutex_init and scm_cond_init instead.
4924
f3b5e185
MD
4925** New function: int scm_cond_timedwait (scm_cond_t *COND, scm_mutex_t *MUTEX, const struct timespec *ABSTIME)
4926 `scm_cond_timedwait' atomically unlocks MUTEX and waits on
4927 COND, as `scm_cond_wait' does, but it also bounds the duration
4928 of the wait. If COND has not been signaled before time ABSTIME,
4929 the mutex MUTEX is re-acquired and `scm_cond_timedwait'
4930 returns the error code `ETIMEDOUT'.
4931
4932 The ABSTIME parameter specifies an absolute time, with the same
4933 origin as `time' and `gettimeofday': an ABSTIME of 0 corresponds
4934 to 00:00:00 GMT, January 1, 1970.
4935
4936** New function: scm_cond_broadcast (scm_cond_t *COND)
4937 `scm_cond_broadcast' restarts all the threads that are waiting
4938 on the condition variable COND. Nothing happens if no threads are
4939 waiting on COND.
4940
4941** New function: scm_key_create (scm_key_t *KEY, void (*destr_function) (void *))
4942 `scm_key_create' allocates a new TSD key. The key is stored in
4943 the location pointed to by KEY. There is no limit on the number
4944 of keys allocated at a given time. The value initially associated
4945 with the returned key is `NULL' in all currently executing threads.
4946
4947 The DESTR_FUNCTION argument, if not `NULL', specifies a destructor
4948 function associated with the key. When a thread terminates,
4949 DESTR_FUNCTION is called on the value associated with the key in
4950 that thread. The DESTR_FUNCTION is not called if a key is deleted
4951 with `scm_key_delete' or a value is changed with
4952 `scm_setspecific'. The order in which destructor functions are
4953 called at thread termination time is unspecified.
4954
4955 Destructors are not yet implemented.
4956
4957** New function: scm_setspecific (scm_key_t KEY, const void *POINTER)
4958 `scm_setspecific' changes the value associated with KEY in the
4959 calling thread, storing the given POINTER instead.
4960
4961** New function: scm_getspecific (scm_key_t KEY)
4962 `scm_getspecific' returns the value currently associated with
4963 KEY in the calling thread.
4964
4965** New function: scm_key_delete (scm_key_t KEY)
4966 `scm_key_delete' deallocates a TSD key. It does not check
4967 whether non-`NULL' values are associated with that key in the
4968 currently executing threads, nor call the destructor function
4969 associated with the key.
4970
820920e6
MD
4971** New function: scm_c_hook_init (scm_c_hook_t *HOOK, void *HOOK_DATA, scm_c_hook_type_t TYPE)
4972
4973Initialize a C level hook HOOK with associated HOOK_DATA and type
4974TYPE. (See scm_c_hook_run ().)
4975
4976** New function: scm_c_hook_add (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA, int APPENDP)
4977
4978Add hook function FUNC with associated FUNC_DATA to HOOK. If APPENDP
4979is true, add it last, otherwise first. The same FUNC can be added
4980multiple times if FUNC_DATA differ and vice versa.
4981
4982** New function: scm_c_hook_remove (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA)
4983
4984Remove hook function FUNC with associated FUNC_DATA from HOOK. A
4985function is only removed if both FUNC and FUNC_DATA matches.
4986
4987** New function: void *scm_c_hook_run (scm_c_hook_t *HOOK, void *DATA)
4988
4989Run hook HOOK passing DATA to the hook functions.
4990
4991If TYPE is SCM_C_HOOK_NORMAL, all hook functions are run. The value
4992returned is undefined.
4993
4994If TYPE is SCM_C_HOOK_OR, hook functions are run until a function
4995returns a non-NULL value. This value is returned as the result of
4996scm_c_hook_run. If all functions return NULL, NULL is returned.
4997
4998If TYPE is SCM_C_HOOK_AND, hook functions are run until a function
4999returns a NULL value, and NULL is returned. If all functions returns
5000a non-NULL value, the last value is returned.
5001
5002** New C level GC hooks
5003
5004Five new C level hooks has been added to the garbage collector.
5005
5006 scm_before_gc_c_hook
5007 scm_after_gc_c_hook
5008
5009are run before locking and after unlocking the heap. The system is
5010thus in a mode where evaluation can take place. (Except that
5011scm_before_gc_c_hook must not allocate new cells.)
5012
5013 scm_before_mark_c_hook
5014 scm_before_sweep_c_hook
5015 scm_after_sweep_c_hook
5016
5017are run when the heap is locked. These are intended for extension of
5018the GC in a modular fashion. Examples are the weaks and guardians
5019modules.
5020
b5074b23
MD
5021** Way for application to customize GC parameters
5022
5023The application can set up other default values for the GC heap
5024allocation parameters
5025
5026 GUILE_INIT_HEAP_SIZE_1, GUILE_MIN_YIELD_1,
5027 GUILE_INIT_HEAP_SIZE_2, GUILE_MIN_YIELD_2,
5028 GUILE_MAX_SEGMENT_SIZE,
5029
5030by setting
5031
5032 scm_default_init_heap_size_1, scm_default_min_yield_1,
5033 scm_default_init_heap_size_2, scm_default_min_yield_2,
5034 scm_default_max_segment_size
5035
5036respectively before callong scm_boot_guile.
5037
5038(See entry "New environment variables ..." in section
5039"Changes to the stand-alone interpreter" above.)
5040
9704841c
MD
5041** scm_protect_object/scm_unprotect_object now nest
5042
67ef2dca
MD
5043This means that you can call scm_protect_object multiple times on an
5044object and count on the object being protected until
5045scm_unprotect_object has been call the same number of times.
5046
5047The functions also have better time complexity.
5048
5049Still, it is usually possible to structure the application in a way
5050that you don't need to use these functions. For example, if you use a
5051protected standard Guile list to keep track of live objects rather
5052than some custom data type, objects will die a natural death when they
5053are no longer needed.
5054
0a9e521f
MD
5055** Deprecated type tags: scm_tc16_flo, scm_tc_flo, scm_tc_dblr, scm_tc_dblc
5056
5057Guile does not provide the float representation for inexact real numbers any
5058more. Now, only doubles are used to represent inexact real numbers. Further,
5059the tag names scm_tc_dblr and scm_tc_dblc have been changed to scm_tc16_real
5060and scm_tc16_complex, respectively.
5061
341f78c9
MD
5062** Removed deprecated type scm_smobfuns
5063
5064** Removed deprecated function scm_newsmob
5065
b5074b23
MD
5066** Warning: scm_make_smob_type_mfpe might become deprecated in a future release
5067
5068There is an ongoing discussion among the developers whether to
5069deprecate `scm_make_smob_type_mfpe' or not. Please use the current
5070standard interface (scm_make_smob_type, scm_set_smob_XXX) in new code
5071until this issue has been settled.
5072
341f78c9
MD
5073** Removed deprecated type tag scm_tc16_kw
5074
2728d7f4
MD
5075** Added type tag scm_tc16_keyword
5076
5077(This was introduced already in release 1.3.4 but was not documented
5078 until now.)
5079
67ef2dca
MD
5080** gdb_print now prints "*** Guile not initialized ***" until Guile initialized
5081
f25f761d
GH
5082* Changes to system call interfaces:
5083
28d77376
GH
5084** The "select" procedure now tests port buffers for the ability to
5085provide input or accept output. Previously only the underlying file
5086descriptors were checked.
5087
bd9e24b3
GH
5088** New variable PIPE_BUF: the maximum number of bytes that can be
5089atomically written to a pipe.
5090
f25f761d
GH
5091** If a facility is not available on the system when Guile is
5092compiled, the corresponding primitive procedure will not be defined.
5093Previously it would have been defined but would throw a system-error
5094exception if called. Exception handlers which catch this case may
5095need minor modification: an error will be thrown with key
5096'unbound-variable instead of 'system-error. Alternatively it's
5097now possible to use `defined?' to check whether the facility is
5098available.
5099
38c1d3c4 5100** Procedures which depend on the timezone should now give the correct
6c0201ad 5101result on systems which cache the TZ environment variable, even if TZ
38c1d3c4
GH
5102is changed without calling tzset.
5103
5c11cc9d
GH
5104* Changes to the networking interfaces:
5105
5106** New functions: htons, ntohs, htonl, ntohl: for converting short and
5107long integers between network and host format. For now, it's not
5108particularly convenient to do this kind of thing, but consider:
5109
5110(define write-network-long
5111 (lambda (value port)
5112 (let ((v (make-uniform-vector 1 1 0)))
5113 (uniform-vector-set! v 0 (htonl value))
5114 (uniform-vector-write v port))))
5115
5116(define read-network-long
5117 (lambda (port)
5118 (let ((v (make-uniform-vector 1 1 0)))
5119 (uniform-vector-read! v port)
5120 (ntohl (uniform-vector-ref v 0)))))
5121
5122** If inet-aton fails, it now throws an error with key 'misc-error
5123instead of 'system-error, since errno is not relevant.
5124
5125** Certain gethostbyname/gethostbyaddr failures now throw errors with
5126specific keys instead of 'system-error. The latter is inappropriate
5127since errno will not have been set. The keys are:
afe5177e 5128'host-not-found, 'try-again, 'no-recovery and 'no-data.
5c11cc9d
GH
5129
5130** sethostent, setnetent, setprotoent, setservent: now take an
5131optional argument STAYOPEN, which specifies whether the database
5132remains open after a database entry is accessed randomly (e.g., using
5133gethostbyname for the hosts database.) The default is #f. Previously
5134#t was always used.
5135
cc36e791 5136\f
43fa9a05
JB
5137Changes since Guile 1.3.2:
5138
0fdcbcaa
MD
5139* Changes to the stand-alone interpreter
5140
5141** Debugger
5142
5143An initial version of the Guile debugger written by Chris Hanson has
5144been added. The debugger is still under development but is included
5145in the distribution anyway since it is already quite useful.
5146
5147Type
5148
5149 (debug)
5150
5151after an error to enter the debugger. Type `help' inside the debugger
5152for a description of available commands.
5153
5154If you prefer to have stack frames numbered and printed in
5155anti-chronological order and prefer up in the stack to be down on the
5156screen as is the case in gdb, you can put
5157
5158 (debug-enable 'backwards)
5159
5160in your .guile startup file. (However, this means that Guile can't
5161use indentation to indicate stack level.)
5162
5163The debugger is autoloaded into Guile at the first use.
5164
5165** Further enhancements to backtraces
5166
5167There is a new debug option `width' which controls the maximum width
5168on the screen of printed stack frames. Fancy printing parameters
5169("level" and "length" as in Common LISP) are adaptively adjusted for
5170each stack frame to give maximum information while still fitting
5171within the bounds. If the stack frame can't be made to fit by
5172adjusting parameters, it is simply cut off at the end. This is marked
5173with a `$'.
5174
5175** Some modules are now only loaded when the repl is started
5176
5177The modules (ice-9 debug), (ice-9 session), (ice-9 threads) and (ice-9
5178regex) are now loaded into (guile-user) only if the repl has been
5179started. The effect is that the startup time for scripts has been
5180reduced to 30% of what it was previously.
5181
5182Correctly written scripts load the modules they require at the top of
5183the file and should not be affected by this change.
5184
ece41168
MD
5185** Hooks are now represented as smobs
5186
6822fe53
MD
5187* Changes to Scheme functions and syntax
5188
0ce204b0
MV
5189** Readline support has changed again.
5190
5191The old (readline-activator) module is gone. Use (ice-9 readline)
5192instead, which now contains all readline functionality. So the code
5193to activate readline is now
5194
5195 (use-modules (ice-9 readline))
5196 (activate-readline)
5197
5198This should work at any time, including from the guile prompt.
5199
5d195868
JB
5200To avoid confusion about the terms of Guile's license, please only
5201enable readline for your personal use; please don't make it the
5202default for others. Here is why we make this rather odd-sounding
5203request:
5204
5205Guile is normally licensed under a weakened form of the GNU General
5206Public License, which allows you to link code with Guile without
5207placing that code under the GPL. This exception is important to some
5208people.
5209
5210However, since readline is distributed under the GNU General Public
5211License, when you link Guile with readline, either statically or
5212dynamically, you effectively change Guile's license to the strict GPL.
5213Whenever you link any strictly GPL'd code into Guile, uses of Guile
5214which are normally permitted become forbidden. This is a rather
5215non-obvious consequence of the licensing terms.
5216
5217So, to make sure things remain clear, please let people choose for
5218themselves whether to link GPL'd libraries like readline with Guile.
5219
25b0654e
JB
5220** regexp-substitute/global has changed slightly, but incompatibly.
5221
5222If you include a function in the item list, the string of the match
5223object it receives is the same string passed to
5224regexp-substitute/global, not some suffix of that string.
5225Correspondingly, the match's positions are relative to the entire
5226string, not the suffix.
5227
5228If the regexp can match the empty string, the way matches are chosen
5229from the string has changed. regexp-substitute/global recognizes the
5230same set of matches that list-matches does; see below.
5231
5232** New function: list-matches REGEXP STRING [FLAGS]
5233
5234Return a list of match objects, one for every non-overlapping, maximal
5235match of REGEXP in STRING. The matches appear in left-to-right order.
5236list-matches only reports matches of the empty string if there are no
5237other matches which begin on, end at, or include the empty match's
5238position.
5239
5240If present, FLAGS is passed as the FLAGS argument to regexp-exec.
5241
5242** New function: fold-matches REGEXP STRING INIT PROC [FLAGS]
5243
5244For each match of REGEXP in STRING, apply PROC to the match object,
5245and the last value PROC returned, or INIT for the first call. Return
5246the last value returned by PROC. We apply PROC to the matches as they
5247appear from left to right.
5248
5249This function recognizes matches according to the same criteria as
5250list-matches.
5251
5252Thus, you could define list-matches like this:
5253
5254 (define (list-matches regexp string . flags)
5255 (reverse! (apply fold-matches regexp string '() cons flags)))
5256
5257If present, FLAGS is passed as the FLAGS argument to regexp-exec.
5258
bc848f7f
MD
5259** Hooks
5260
5261*** New function: hook? OBJ
5262
5263Return #t if OBJ is a hook, otherwise #f.
5264
ece41168
MD
5265*** New function: make-hook-with-name NAME [ARITY]
5266
5267Return a hook with name NAME and arity ARITY. The default value for
5268ARITY is 0. The only effect of NAME is that it will appear when the
5269hook object is printed to ease debugging.
5270
bc848f7f
MD
5271*** New function: hook-empty? HOOK
5272
5273Return #t if HOOK doesn't contain any procedures, otherwise #f.
5274
5275*** New function: hook->list HOOK
5276
5277Return a list of the procedures that are called when run-hook is
5278applied to HOOK.
5279
b074884f
JB
5280** `map' signals an error if its argument lists are not all the same length.
5281
5282This is the behavior required by R5RS, so this change is really a bug
5283fix. But it seems to affect a lot of people's code, so we're
5284mentioning it here anyway.
5285
6822fe53
MD
5286** Print-state handling has been made more transparent
5287
5288Under certain circumstances, ports are represented as a port with an
5289associated print state. Earlier, this pair was represented as a pair
5290(see "Some magic has been added to the printer" below). It is now
5291indistinguishable (almost; see `get-print-state') from a port on the
5292user level.
5293
5294*** New function: port-with-print-state OUTPUT-PORT PRINT-STATE
5295
5296Return a new port with the associated print state PRINT-STATE.
5297
5298*** New function: get-print-state OUTPUT-PORT
5299
5300Return the print state associated with this port if it exists,
5301otherwise return #f.
5302
340a8770 5303*** New function: directory-stream? OBJECT
77242ff9 5304
340a8770 5305Returns true iff OBJECT is a directory stream --- the sort of object
77242ff9
GH
5306returned by `opendir'.
5307
0fdcbcaa
MD
5308** New function: using-readline?
5309
5310Return #t if readline is in use in the current repl.
5311
26405bc1
MD
5312** structs will be removed in 1.4
5313
5314Structs will be replaced in Guile 1.4. We will merge GOOPS into Guile
5315and use GOOPS objects as the fundamental record type.
5316
49199eaa
MD
5317* Changes to the scm_ interface
5318
26405bc1
MD
5319** structs will be removed in 1.4
5320
5321The entire current struct interface (struct.c, struct.h) will be
5322replaced in Guile 1.4. We will merge GOOPS into libguile and use
5323GOOPS objects as the fundamental record type.
5324
49199eaa
MD
5325** The internal representation of subr's has changed
5326
5327Instead of giving a hint to the subr name, the CAR field of the subr
5328now contains an index to a subr entry in scm_subr_table.
5329
5330*** New variable: scm_subr_table
5331
5332An array of subr entries. A subr entry contains the name, properties
5333and documentation associated with the subr. The properties and
5334documentation slots are not yet used.
5335
5336** A new scheme for "forwarding" calls to a builtin to a generic function
5337
5338It is now possible to extend the functionality of some Guile
5339primitives by letting them defer a call to a GOOPS generic function on
240ed66f 5340argument mismatch. This means that there is no loss of efficiency in
daf516d6 5341normal evaluation.
49199eaa
MD
5342
5343Example:
5344
daf516d6 5345 (use-modules (oop goops)) ; Must be GOOPS version 0.2.
49199eaa
MD
5346 (define-method + ((x <string>) (y <string>))
5347 (string-append x y))
5348
86a4d62e
MD
5349+ will still be as efficient as usual in numerical calculations, but
5350can also be used for concatenating strings.
49199eaa 5351
86a4d62e 5352Who will be the first one to extend Guile's numerical tower to
daf516d6
MD
5353rationals? :) [OK, there a few other things to fix before this can
5354be made in a clean way.]
49199eaa
MD
5355
5356*** New snarf macros for defining primitives: SCM_GPROC, SCM_GPROC1
5357
5358 New macro: SCM_GPROC (CNAME, SNAME, REQ, OPT, VAR, CFUNC, GENERIC)
5359
5360 New macro: SCM_GPROC1 (CNAME, SNAME, TYPE, CFUNC, GENERIC)
5361
d02cafe7 5362These do the same job as SCM_PROC and SCM_PROC1, but they also define
49199eaa
MD
5363a variable GENERIC which can be used by the dispatch macros below.
5364
5365[This is experimental code which may change soon.]
5366
5367*** New macros for forwarding control to a generic on arg type error
5368
5369 New macro: SCM_WTA_DISPATCH_1 (GENERIC, ARG1, POS, SUBR)
5370
5371 New macro: SCM_WTA_DISPATCH_2 (GENERIC, ARG1, ARG2, POS, SUBR)
5372
5373These correspond to the scm_wta function call, and have the same
5374behaviour until the user has called the GOOPS primitive
5375`enable-primitive-generic!'. After that, these macros will apply the
5376generic function GENERIC to the argument(s) instead of calling
5377scm_wta.
5378
5379[This is experimental code which may change soon.]
5380
5381*** New macros for argument testing with generic dispatch
5382
5383 New macro: SCM_GASSERT1 (COND, GENERIC, ARG1, POS, SUBR)
5384
5385 New macro: SCM_GASSERT2 (COND, GENERIC, ARG1, ARG2, POS, SUBR)
5386
5387These correspond to the SCM_ASSERT macro, but will defer control to
5388GENERIC on error after `enable-primitive-generic!' has been called.
5389
5390[This is experimental code which may change soon.]
5391
5392** New function: SCM scm_eval_body (SCM body, SCM env)
5393
5394Evaluates the body of a special form.
5395
5396** The internal representation of struct's has changed
5397
5398Previously, four slots were allocated for the procedure(s) of entities
5399and operators. The motivation for this representation had to do with
5400the structure of the evaluator, the wish to support tail-recursive
5401generic functions, and efficiency. Since the generic function
5402dispatch mechanism has changed, there is no longer a need for such an
5403expensive representation, and the representation has been simplified.
5404
5405This should not make any difference for most users.
5406
5407** GOOPS support has been cleaned up.
5408
5409Some code has been moved from eval.c to objects.c and code in both of
5410these compilation units has been cleaned up and better structured.
5411
5412*** New functions for applying generic functions
5413
5414 New function: SCM scm_apply_generic (GENERIC, ARGS)
5415 New function: SCM scm_call_generic_0 (GENERIC)
5416 New function: SCM scm_call_generic_1 (GENERIC, ARG1)
5417 New function: SCM scm_call_generic_2 (GENERIC, ARG1, ARG2)
5418 New function: SCM scm_call_generic_3 (GENERIC, ARG1, ARG2, ARG3)
5419
ece41168
MD
5420** Deprecated function: scm_make_named_hook
5421
5422It is now replaced by:
5423
5424** New function: SCM scm_create_hook (const char *name, int arity)
5425
5426Creates a hook in the same way as make-hook above but also
5427binds a variable named NAME to it.
5428
5429This is the typical way of creating a hook from C code.
5430
5431Currently, the variable is created in the "current" module.
5432This might change when we get the new module system.
5433
5434[The behaviour is identical to scm_make_named_hook.]
5435
5436
43fa9a05 5437\f
f3227c7a
JB
5438Changes since Guile 1.3:
5439
6ca345f3
JB
5440* Changes to mailing lists
5441
5442** Some of the Guile mailing lists have moved to sourceware.cygnus.com.
5443
5444See the README file to find current addresses for all the Guile
5445mailing lists.
5446
d77fb593
JB
5447* Changes to the distribution
5448
1d335863
JB
5449** Readline support is no longer included with Guile by default.
5450
5451Based on the different license terms of Guile and Readline, we
5452concluded that Guile should not *by default* cause the linking of
5453Readline into an application program. Readline support is now offered
5454as a separate module, which is linked into an application only when
5455you explicitly specify it.
5456
5457Although Guile is GNU software, its distribution terms add a special
5458exception to the usual GNU General Public License (GPL). Guile's
5459license includes a clause that allows you to link Guile with non-free
5460programs. We add this exception so as not to put Guile at a
5461disadvantage vis-a-vis other extensibility packages that support other
5462languages.
5463
5464In contrast, the GNU Readline library is distributed under the GNU
5465General Public License pure and simple. This means that you may not
5466link Readline, even dynamically, into an application unless it is
5467distributed under a free software license that is compatible the GPL.
5468
5469Because of this difference in distribution terms, an application that
5470can use Guile may not be able to use Readline. Now users will be
5471explicitly offered two independent decisions about the use of these
5472two packages.
d77fb593 5473
0e8a8468
MV
5474You can activate the readline support by issuing
5475
5476 (use-modules (readline-activator))
5477 (activate-readline)
5478
5479from your ".guile" file, for example.
5480
e4eae9b1
MD
5481* Changes to the stand-alone interpreter
5482
67ad463a
MD
5483** All builtins now print as primitives.
5484Previously builtin procedures not belonging to the fundamental subr
5485types printed as #<compiled closure #<primitive-procedure gsubr-apply>>.
5486Now, they print as #<primitive-procedure NAME>.
5487
5488** Backtraces slightly more intelligible.
5489gsubr-apply and macro transformer application frames no longer appear
5490in backtraces.
5491
69c6acbb
JB
5492* Changes to Scheme functions and syntax
5493
2a52b429
MD
5494** Guile now correctly handles internal defines by rewriting them into
5495their equivalent letrec. Previously, internal defines would
5496incrementally add to the innermost environment, without checking
5497whether the restrictions specified in RnRS were met. This lead to the
5498correct behaviour when these restriction actually were met, but didn't
5499catch all illegal uses. Such an illegal use could lead to crashes of
5500the Guile interpreter or or other unwanted results. An example of
5501incorrect internal defines that made Guile behave erratically:
5502
5503 (let ()
5504 (define a 1)
5505 (define (b) a)
5506 (define c (1+ (b)))
5507 (define d 3)
5508
5509 (b))
5510
5511 => 2
5512
5513The problem with this example is that the definition of `c' uses the
5514value of `b' directly. This confuses the meoization machine of Guile
5515so that the second call of `b' (this time in a larger environment that
5516also contains bindings for `c' and `d') refers to the binding of `c'
5517instead of `a'. You could also make Guile crash with a variation on
5518this theme:
5519
5520 (define (foo flag)
5521 (define a 1)
5522 (define (b flag) (if flag a 1))
5523 (define c (1+ (b flag)))
5524 (define d 3)
5525
5526 (b #t))
5527
5528 (foo #f)
5529 (foo #t)
5530
5531From now on, Guile will issue an `Unbound variable: b' error message
5532for both examples.
5533
36d3d540
MD
5534** Hooks
5535
5536A hook contains a list of functions which should be called on
5537particular occasions in an existing program. Hooks are used for
5538customization.
5539
5540A window manager might have a hook before-window-map-hook. The window
5541manager uses the function run-hooks to call all functions stored in
5542before-window-map-hook each time a window is mapped. The user can
5543store functions in the hook using add-hook!.
5544
5545In Guile, hooks are first class objects.
5546
5547*** New function: make-hook [N_ARGS]
5548
5549Return a hook for hook functions which can take N_ARGS arguments.
5550The default value for N_ARGS is 0.
5551
ad91d6c3
MD
5552(See also scm_make_named_hook below.)
5553
36d3d540
MD
5554*** New function: add-hook! HOOK PROC [APPEND_P]
5555
5556Put PROC at the beginning of the list of functions stored in HOOK.
5557If APPEND_P is supplied, and non-false, put PROC at the end instead.
5558
5559PROC must be able to take the number of arguments specified when the
5560hook was created.
5561
5562If PROC already exists in HOOK, then remove it first.
5563
5564*** New function: remove-hook! HOOK PROC
5565
5566Remove PROC from the list of functions in HOOK.
5567
5568*** New function: reset-hook! HOOK
5569
5570Clear the list of hook functions stored in HOOK.
5571
5572*** New function: run-hook HOOK ARG1 ...
5573
5574Run all hook functions stored in HOOK with arguments ARG1 ... .
5575The number of arguments supplied must correspond to the number given
5576when the hook was created.
5577
56a19408
MV
5578** The function `dynamic-link' now takes optional keyword arguments.
5579 The only keyword argument that is currently defined is `:global
5580 BOOL'. With it, you can control whether the shared library will be
5581 linked in global mode or not. In global mode, the symbols from the
5582 linked library can be used to resolve references from other
5583 dynamically linked libraries. In non-global mode, the linked
5584 library is essentially invisible and can only be accessed via
5585 `dynamic-func', etc. The default is now to link in global mode.
5586 Previously, the default has been non-global mode.
5587
5588 The `#:global' keyword is only effective on platforms that support
5589 the dlopen family of functions.
5590
ad226f25 5591** New function `provided?'
b7e13f65
JB
5592
5593 - Function: provided? FEATURE
5594 Return true iff FEATURE is supported by this installation of
5595 Guile. FEATURE must be a symbol naming a feature; the global
5596 variable `*features*' is a list of available features.
5597
ad226f25
JB
5598** Changes to the module (ice-9 expect):
5599
5600*** The expect-strings macro now matches `$' in a regular expression
5601 only at a line-break or end-of-file by default. Previously it would
ab711359
JB
5602 match the end of the string accumulated so far. The old behaviour
5603 can be obtained by setting the variable `expect-strings-exec-flags'
5604 to 0.
ad226f25
JB
5605
5606*** The expect-strings macro now uses a variable `expect-strings-exec-flags'
5607 for the regexp-exec flags. If `regexp/noteol' is included, then `$'
5608 in a regular expression will still match before a line-break or
5609 end-of-file. The default is `regexp/noteol'.
5610
6c0201ad 5611*** The expect-strings macro now uses a variable
ad226f25
JB
5612 `expect-strings-compile-flags' for the flags to be supplied to
5613 `make-regexp'. The default is `regexp/newline', which was previously
5614 hard-coded.
5615
5616*** The expect macro now supplies two arguments to a match procedure:
ab711359
JB
5617 the current accumulated string and a flag to indicate whether
5618 end-of-file has been reached. Previously only the string was supplied.
5619 If end-of-file is reached, the match procedure will be called an
5620 additional time with the same accumulated string as the previous call
5621 but with the flag set.
ad226f25 5622
b7e13f65
JB
5623** New module (ice-9 format), implementing the Common Lisp `format' function.
5624
5625This code, and the documentation for it that appears here, was
5626borrowed from SLIB, with minor adaptations for Guile.
5627
5628 - Function: format DESTINATION FORMAT-STRING . ARGUMENTS
5629 An almost complete implementation of Common LISP format description
5630 according to the CL reference book `Common LISP' from Guy L.
5631 Steele, Digital Press. Backward compatible to most of the
5632 available Scheme format implementations.
5633
5634 Returns `#t', `#f' or a string; has side effect of printing
5635 according to FORMAT-STRING. If DESTINATION is `#t', the output is
5636 to the current output port and `#t' is returned. If DESTINATION
5637 is `#f', a formatted string is returned as the result of the call.
5638 NEW: If DESTINATION is a string, DESTINATION is regarded as the
5639 format string; FORMAT-STRING is then the first argument and the
5640 output is returned as a string. If DESTINATION is a number, the
5641 output is to the current error port if available by the
5642 implementation. Otherwise DESTINATION must be an output port and
5643 `#t' is returned.
5644
5645 FORMAT-STRING must be a string. In case of a formatting error
5646 format returns `#f' and prints a message on the current output or
5647 error port. Characters are output as if the string were output by
5648 the `display' function with the exception of those prefixed by a
5649 tilde (~). For a detailed description of the FORMAT-STRING syntax
5650 please consult a Common LISP format reference manual. For a test
5651 suite to verify this format implementation load `formatst.scm'.
5652 Please send bug reports to `lutzeb@cs.tu-berlin.de'.
5653
5654 Note: `format' is not reentrant, i.e. only one `format'-call may
5655 be executed at a time.
5656
5657
5658*** Format Specification (Format version 3.0)
5659
5660 Please consult a Common LISP format reference manual for a detailed
5661description of the format string syntax. For a demonstration of the
5662implemented directives see `formatst.scm'.
5663
5664 This implementation supports directive parameters and modifiers (`:'
5665and `@' characters). Multiple parameters must be separated by a comma
5666(`,'). Parameters can be numerical parameters (positive or negative),
5667character parameters (prefixed by a quote character (`''), variable
5668parameters (`v'), number of rest arguments parameter (`#'), empty and
5669default parameters. Directive characters are case independent. The
5670general form of a directive is:
5671
5672DIRECTIVE ::= ~{DIRECTIVE-PARAMETER,}[:][@]DIRECTIVE-CHARACTER
5673
5674DIRECTIVE-PARAMETER ::= [ [-|+]{0-9}+ | 'CHARACTER | v | # ]
5675
5676*** Implemented CL Format Control Directives
5677
5678 Documentation syntax: Uppercase characters represent the
5679corresponding control directive characters. Lowercase characters
5680represent control directive parameter descriptions.
5681
5682`~A'
5683 Any (print as `display' does).
5684 `~@A'
5685 left pad.
5686
5687 `~MINCOL,COLINC,MINPAD,PADCHARA'
5688 full padding.
5689
5690`~S'
5691 S-expression (print as `write' does).
5692 `~@S'
5693 left pad.
5694
5695 `~MINCOL,COLINC,MINPAD,PADCHARS'
5696 full padding.
5697
5698`~D'
5699 Decimal.
5700 `~@D'
5701 print number sign always.
5702
5703 `~:D'
5704 print comma separated.
5705
5706 `~MINCOL,PADCHAR,COMMACHARD'
5707 padding.
5708
5709`~X'
5710 Hexadecimal.
5711 `~@X'
5712 print number sign always.
5713
5714 `~:X'
5715 print comma separated.
5716
5717 `~MINCOL,PADCHAR,COMMACHARX'
5718 padding.
5719
5720`~O'
5721 Octal.
5722 `~@O'
5723 print number sign always.
5724
5725 `~:O'
5726 print comma separated.
5727
5728 `~MINCOL,PADCHAR,COMMACHARO'
5729 padding.
5730
5731`~B'
5732 Binary.
5733 `~@B'
5734 print number sign always.
5735
5736 `~:B'
5737 print comma separated.
5738
5739 `~MINCOL,PADCHAR,COMMACHARB'
5740 padding.
5741
5742`~NR'
5743 Radix N.
5744 `~N,MINCOL,PADCHAR,COMMACHARR'
5745 padding.
5746
5747`~@R'
5748 print a number as a Roman numeral.
5749
5750`~:@R'
5751 print a number as an "old fashioned" Roman numeral.
5752
5753`~:R'
5754 print a number as an ordinal English number.
5755
5756`~:@R'
5757 print a number as a cardinal English number.
5758
5759`~P'
5760 Plural.
5761 `~@P'
5762 prints `y' and `ies'.
5763
5764 `~:P'
5765 as `~P but jumps 1 argument backward.'
5766
5767 `~:@P'
5768 as `~@P but jumps 1 argument backward.'
5769
5770`~C'
5771 Character.
5772 `~@C'
5773 prints a character as the reader can understand it (i.e. `#\'
5774 prefixing).
5775
5776 `~:C'
5777 prints a character as emacs does (eg. `^C' for ASCII 03).
5778
5779`~F'
5780 Fixed-format floating-point (prints a flonum like MMM.NNN).
5781 `~WIDTH,DIGITS,SCALE,OVERFLOWCHAR,PADCHARF'
5782 `~@F'
5783 If the number is positive a plus sign is printed.
5784
5785`~E'
5786 Exponential floating-point (prints a flonum like MMM.NNN`E'EE).
5787 `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARE'
5788 `~@E'
5789 If the number is positive a plus sign is printed.
5790
5791`~G'
5792 General floating-point (prints a flonum either fixed or
5793 exponential).
5794 `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARG'
5795 `~@G'
5796 If the number is positive a plus sign is printed.
5797
5798`~$'
5799 Dollars floating-point (prints a flonum in fixed with signs
5800 separated).
5801 `~DIGITS,SCALE,WIDTH,PADCHAR$'
5802 `~@$'
5803 If the number is positive a plus sign is printed.
5804
5805 `~:@$'
5806 A sign is always printed and appears before the padding.
5807
5808 `~:$'
5809 The sign appears before the padding.
5810
5811`~%'
5812 Newline.
5813 `~N%'
5814 print N newlines.
5815
5816`~&'
5817 print newline if not at the beginning of the output line.
5818 `~N&'
5819 prints `~&' and then N-1 newlines.
5820
5821`~|'
5822 Page Separator.
5823 `~N|'
5824 print N page separators.
5825
5826`~~'
5827 Tilde.
5828 `~N~'
5829 print N tildes.
5830
5831`~'<newline>
5832 Continuation Line.
5833 `~:'<newline>
5834 newline is ignored, white space left.
5835
5836 `~@'<newline>
5837 newline is left, white space ignored.
5838
5839`~T'
5840 Tabulation.
5841 `~@T'
5842 relative tabulation.
5843
5844 `~COLNUM,COLINCT'
5845 full tabulation.
5846
5847`~?'
5848 Indirection (expects indirect arguments as a list).
5849 `~@?'
5850 extracts indirect arguments from format arguments.
5851
5852`~(STR~)'
5853 Case conversion (converts by `string-downcase').
5854 `~:(STR~)'
5855 converts by `string-capitalize'.
5856
5857 `~@(STR~)'
5858 converts by `string-capitalize-first'.
5859
5860 `~:@(STR~)'
5861 converts by `string-upcase'.
5862
5863`~*'
5864 Argument Jumping (jumps 1 argument forward).
5865 `~N*'
5866 jumps N arguments forward.
5867
5868 `~:*'
5869 jumps 1 argument backward.
5870
5871 `~N:*'
5872 jumps N arguments backward.
5873
5874 `~@*'
5875 jumps to the 0th argument.
5876
5877 `~N@*'
5878 jumps to the Nth argument (beginning from 0)
5879
5880`~[STR0~;STR1~;...~;STRN~]'
5881 Conditional Expression (numerical clause conditional).
5882 `~N['
5883 take argument from N.
5884
5885 `~@['
5886 true test conditional.
5887
5888 `~:['
5889 if-else-then conditional.
5890
5891 `~;'
5892 clause separator.
5893
5894 `~:;'
5895 default clause follows.
5896
5897`~{STR~}'
5898 Iteration (args come from the next argument (a list)).
5899 `~N{'
5900 at most N iterations.
5901
5902 `~:{'
5903 args from next arg (a list of lists).
5904
5905 `~@{'
5906 args from the rest of arguments.
5907
5908 `~:@{'
5909 args from the rest args (lists).
5910
5911`~^'
5912 Up and out.
5913 `~N^'
5914 aborts if N = 0
5915
5916 `~N,M^'
5917 aborts if N = M
5918
5919 `~N,M,K^'
5920 aborts if N <= M <= K
5921
5922*** Not Implemented CL Format Control Directives
5923
5924`~:A'
5925 print `#f' as an empty list (see below).
5926
5927`~:S'
5928 print `#f' as an empty list (see below).
5929
5930`~<~>'
5931 Justification.
5932
5933`~:^'
5934 (sorry I don't understand its semantics completely)
5935
5936*** Extended, Replaced and Additional Control Directives
5937
5938`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHD'
5939`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHX'
5940`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHO'
5941`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHB'
5942`~N,MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHR'
5943 COMMAWIDTH is the number of characters between two comma
5944 characters.
5945
5946`~I'
5947 print a R4RS complex number as `~F~@Fi' with passed parameters for
5948 `~F'.
5949
5950`~Y'
5951 Pretty print formatting of an argument for scheme code lists.
5952
5953`~K'
5954 Same as `~?.'
5955
5956`~!'
5957 Flushes the output if format DESTINATION is a port.
5958
5959`~_'
5960 Print a `#\space' character
5961 `~N_'
5962 print N `#\space' characters.
5963
5964`~/'
5965 Print a `#\tab' character
5966 `~N/'
5967 print N `#\tab' characters.
5968
5969`~NC'
5970 Takes N as an integer representation for a character. No arguments
5971 are consumed. N is converted to a character by `integer->char'. N
5972 must be a positive decimal number.
5973
5974`~:S'
5975 Print out readproof. Prints out internal objects represented as
5976 `#<...>' as strings `"#<...>"' so that the format output can always
5977 be processed by `read'.
5978
5979`~:A'
5980 Print out readproof. Prints out internal objects represented as
5981 `#<...>' as strings `"#<...>"' so that the format output can always
5982 be processed by `read'.
5983
5984`~Q'
5985 Prints information and a copyright notice on the format
5986 implementation.
5987 `~:Q'
5988 prints format version.
5989
5990`~F, ~E, ~G, ~$'
5991 may also print number strings, i.e. passing a number as a string
5992 and format it accordingly.
5993
5994*** Configuration Variables
5995
5996 The format module exports some configuration variables to suit the
5997systems and users needs. There should be no modification necessary for
5998the configuration that comes with Guile. Format detects automatically
5999if the running scheme system implements floating point numbers and
6000complex numbers.
6001
6002format:symbol-case-conv
6003 Symbols are converted by `symbol->string' so the case type of the
6004 printed symbols is implementation dependent.
6005 `format:symbol-case-conv' is a one arg closure which is either
6006 `#f' (no conversion), `string-upcase', `string-downcase' or
6007 `string-capitalize'. (default `#f')
6008
6009format:iobj-case-conv
6010 As FORMAT:SYMBOL-CASE-CONV but applies for the representation of
6011 implementation internal objects. (default `#f')
6012
6013format:expch
6014 The character prefixing the exponent value in `~E' printing.
6015 (default `#\E')
6016
6017*** Compatibility With Other Format Implementations
6018
6019SLIB format 2.x:
6020 See `format.doc'.
6021
6022SLIB format 1.4:
6023 Downward compatible except for padding support and `~A', `~S',
6024 `~P', `~X' uppercase printing. SLIB format 1.4 uses C-style
6025 `printf' padding support which is completely replaced by the CL
6026 `format' padding style.
6027
6028MIT C-Scheme 7.1:
6029 Downward compatible except for `~', which is not documented
6030 (ignores all characters inside the format string up to a newline
6031 character). (7.1 implements `~a', `~s', ~NEWLINE, `~~', `~%',
6032 numerical and variable parameters and `:/@' modifiers in the CL
6033 sense).
6034
6035Elk 1.5/2.0:
6036 Downward compatible except for `~A' and `~S' which print in
6037 uppercase. (Elk implements `~a', `~s', `~~', and `~%' (no
6038 directive parameters or modifiers)).
6039
6040Scheme->C 01nov91:
6041 Downward compatible except for an optional destination parameter:
6042 S2C accepts a format call without a destination which returns a
6043 formatted string. This is equivalent to a #f destination in S2C.
6044 (S2C implements `~a', `~s', `~c', `~%', and `~~' (no directive
6045 parameters or modifiers)).
6046
6047
e7d37b0a 6048** Changes to string-handling functions.
b7e13f65 6049
e7d37b0a 6050These functions were added to support the (ice-9 format) module, above.
b7e13f65 6051
e7d37b0a
JB
6052*** New function: string-upcase STRING
6053*** New function: string-downcase STRING
b7e13f65 6054
e7d37b0a
JB
6055These are non-destructive versions of the existing string-upcase! and
6056string-downcase! functions.
b7e13f65 6057
e7d37b0a
JB
6058*** New function: string-capitalize! STRING
6059*** New function: string-capitalize STRING
6060
6061These functions convert the first letter of each word in the string to
6062upper case. Thus:
6063
6064 (string-capitalize "howdy there")
6065 => "Howdy There"
6066
6067As with the other functions, string-capitalize! modifies the string in
6068place, while string-capitalize returns a modified copy of its argument.
6069
6070*** New function: string-ci->symbol STRING
6071
6072Return a symbol whose name is STRING, but having the same case as if
6073the symbol had be read by `read'.
6074
6075Guile can be configured to be sensitive or insensitive to case
6076differences in Scheme identifiers. If Guile is case-insensitive, all
6077symbols are converted to lower case on input. The `string-ci->symbol'
6078function returns a symbol whose name in STRING, transformed as Guile
6079would if STRING were input.
6080
6081*** New function: substring-move! STRING1 START END STRING2 START
6082
6083Copy the substring of STRING1 from START (inclusive) to END
6084(exclusive) to STRING2 at START. STRING1 and STRING2 may be the same
6085string, and the source and destination areas may overlap; in all
6086cases, the function behaves as if all the characters were copied
6087simultanously.
6088
6c0201ad 6089*** Extended functions: substring-move-left! substring-move-right!
e7d37b0a
JB
6090
6091These functions now correctly copy arbitrarily overlapping substrings;
6092they are both synonyms for substring-move!.
b7e13f65 6093
b7e13f65 6094
deaceb4e
JB
6095** New module (ice-9 getopt-long), with the function `getopt-long'.
6096
6097getopt-long is a function for parsing command-line arguments in a
6098manner consistent with other GNU programs.
6099
6100(getopt-long ARGS GRAMMAR)
6101Parse the arguments ARGS according to the argument list grammar GRAMMAR.
6102
6103ARGS should be a list of strings. Its first element should be the
6104name of the program; subsequent elements should be the arguments
6105that were passed to the program on the command line. The
6106`program-arguments' procedure returns a list of this form.
6107
6108GRAMMAR is a list of the form:
6109((OPTION (PROPERTY VALUE) ...) ...)
6110
6111Each OPTION should be a symbol. `getopt-long' will accept a
6112command-line option named `--OPTION'.
6113Each option can have the following (PROPERTY VALUE) pairs:
6114
6115 (single-char CHAR) --- Accept `-CHAR' as a single-character
6116 equivalent to `--OPTION'. This is how to specify traditional
6117 Unix-style flags.
6118 (required? BOOL) --- If BOOL is true, the option is required.
6119 getopt-long will raise an error if it is not found in ARGS.
6120 (value BOOL) --- If BOOL is #t, the option accepts a value; if
6121 it is #f, it does not; and if it is the symbol
6122 `optional', the option may appear in ARGS with or
6c0201ad 6123 without a value.
deaceb4e
JB
6124 (predicate FUNC) --- If the option accepts a value (i.e. you
6125 specified `(value #t)' for this option), then getopt
6126 will apply FUNC to the value, and throw an exception
6127 if it returns #f. FUNC should be a procedure which
6128 accepts a string and returns a boolean value; you may
6129 need to use quasiquotes to get it into GRAMMAR.
6130
6131The (PROPERTY VALUE) pairs may occur in any order, but each
6132property may occur only once. By default, options do not have
6133single-character equivalents, are not required, and do not take
6134values.
6135
6136In ARGS, single-character options may be combined, in the usual
6137Unix fashion: ("-x" "-y") is equivalent to ("-xy"). If an option
6138accepts values, then it must be the last option in the
6139combination; the value is the next argument. So, for example, using
6140the following grammar:
6141 ((apples (single-char #\a))
6142 (blimps (single-char #\b) (value #t))
6143 (catalexis (single-char #\c) (value #t)))
6144the following argument lists would be acceptable:
6145 ("-a" "-b" "bang" "-c" "couth") ("bang" and "couth" are the values
6146 for "blimps" and "catalexis")
6147 ("-ab" "bang" "-c" "couth") (same)
6148 ("-ac" "couth" "-b" "bang") (same)
6149 ("-abc" "couth" "bang") (an error, since `-b' is not the
6150 last option in its combination)
6151
6152If an option's value is optional, then `getopt-long' decides
6153whether it has a value by looking at what follows it in ARGS. If
6154the next element is a string, and it does not appear to be an
6155option itself, then that string is the option's value.
6156
6157The value of a long option can appear as the next element in ARGS,
6158or it can follow the option name, separated by an `=' character.
6159Thus, using the same grammar as above, the following argument lists
6160are equivalent:
6161 ("--apples" "Braeburn" "--blimps" "Goodyear")
6162 ("--apples=Braeburn" "--blimps" "Goodyear")
6163 ("--blimps" "Goodyear" "--apples=Braeburn")
6164
6165If the option "--" appears in ARGS, argument parsing stops there;
6166subsequent arguments are returned as ordinary arguments, even if
6167they resemble options. So, in the argument list:
6168 ("--apples" "Granny Smith" "--" "--blimp" "Goodyear")
6169`getopt-long' will recognize the `apples' option as having the
6170value "Granny Smith", but it will not recognize the `blimp'
6171option; it will return the strings "--blimp" and "Goodyear" as
6172ordinary argument strings.
6173
6174The `getopt-long' function returns the parsed argument list as an
6175assocation list, mapping option names --- the symbols from GRAMMAR
6176--- onto their values, or #t if the option does not accept a value.
6177Unused options do not appear in the alist.
6178
6179All arguments that are not the value of any option are returned
6180as a list, associated with the empty list.
6181
6182`getopt-long' throws an exception if:
6183- it finds an unrecognized option in ARGS
6184- a required option is omitted
6185- an option that requires an argument doesn't get one
6186- an option that doesn't accept an argument does get one (this can
6187 only happen using the long option `--opt=value' syntax)
6188- an option predicate fails
6189
6190So, for example:
6191
6192(define grammar
6193 `((lockfile-dir (required? #t)
6194 (value #t)
6195 (single-char #\k)
6196 (predicate ,file-is-directory?))
6197 (verbose (required? #f)
6198 (single-char #\v)
6199 (value #f))
6200 (x-includes (single-char #\x))
6c0201ad 6201 (rnet-server (single-char #\y)
deaceb4e
JB
6202 (predicate ,string?))))
6203
6c0201ad 6204(getopt-long '("my-prog" "-vk" "/tmp" "foo1" "--x-includes=/usr/include"
deaceb4e
JB
6205 "--rnet-server=lamprod" "--" "-fred" "foo2" "foo3")
6206 grammar)
6207=> ((() "foo1" "-fred" "foo2" "foo3")
6208 (rnet-server . "lamprod")
6209 (x-includes . "/usr/include")
6210 (lockfile-dir . "/tmp")
6211 (verbose . #t))
6212
6213** The (ice-9 getopt-gnu-style) module is obsolete; use (ice-9 getopt-long).
6214
6215It will be removed in a few releases.
6216
08394899
MS
6217** New syntax: lambda*
6218** New syntax: define*
6c0201ad 6219** New syntax: define*-public
08394899
MS
6220** New syntax: defmacro*
6221** New syntax: defmacro*-public
6c0201ad 6222Guile now supports optional arguments.
08394899
MS
6223
6224`lambda*', `define*', `define*-public', `defmacro*' and
6225`defmacro*-public' are identical to the non-* versions except that
6226they use an extended type of parameter list that has the following BNF
6227syntax (parentheses are literal, square brackets indicate grouping,
6228and `*', `+' and `?' have the usual meaning):
6229
6230 ext-param-list ::= ( [identifier]* [#&optional [ext-var-decl]+]?
6c0201ad 6231 [#&key [ext-var-decl]+ [#&allow-other-keys]?]?
08394899
MS
6232 [[#&rest identifier]|[. identifier]]? ) | [identifier]
6233
6c0201ad 6234 ext-var-decl ::= identifier | ( identifier expression )
08394899
MS
6235
6236The semantics are best illustrated with the following documentation
6237and examples for `lambda*':
6238
6239 lambda* args . body
6240 lambda extended for optional and keyword arguments
6c0201ad 6241
08394899
MS
6242 lambda* creates a procedure that takes optional arguments. These
6243 are specified by putting them inside brackets at the end of the
6244 paramater list, but before any dotted rest argument. For example,
6245 (lambda* (a b #&optional c d . e) '())
6246 creates a procedure with fixed arguments a and b, optional arguments c
6247 and d, and rest argument e. If the optional arguments are omitted
6248 in a call, the variables for them are unbound in the procedure. This
6249 can be checked with the bound? macro.
6250
6251 lambda* can also take keyword arguments. For example, a procedure
6252 defined like this:
6253 (lambda* (#&key xyzzy larch) '())
6254 can be called with any of the argument lists (#:xyzzy 11)
6255 (#:larch 13) (#:larch 42 #:xyzzy 19) (). Whichever arguments
6256 are given as keywords are bound to values.
6257
6258 Optional and keyword arguments can also be given default values
6259 which they take on when they are not present in a call, by giving a
6260 two-item list in place of an optional argument, for example in:
6c0201ad 6261 (lambda* (foo #&optional (bar 42) #&key (baz 73)) (list foo bar baz))
08394899
MS
6262 foo is a fixed argument, bar is an optional argument with default
6263 value 42, and baz is a keyword argument with default value 73.
6264 Default value expressions are not evaluated unless they are needed
6c0201ad 6265 and until the procedure is called.
08394899
MS
6266
6267 lambda* now supports two more special parameter list keywords.
6268
6269 lambda*-defined procedures now throw an error by default if a
6270 keyword other than one of those specified is found in the actual
6271 passed arguments. However, specifying #&allow-other-keys
6272 immediately after the kyword argument declarations restores the
6273 previous behavior of ignoring unknown keywords. lambda* also now
6274 guarantees that if the same keyword is passed more than once, the
6275 last one passed is the one that takes effect. For example,
6276 ((lambda* (#&key (heads 0) (tails 0)) (display (list heads tails)))
6277 #:heads 37 #:tails 42 #:heads 99)
6278 would result in (99 47) being displayed.
6279
6280 #&rest is also now provided as a synonym for the dotted syntax rest
6281 argument. The argument lists (a . b) and (a #&rest b) are equivalent in
6282 all respects to lambda*. This is provided for more similarity to DSSSL,
6283 MIT-Scheme and Kawa among others, as well as for refugees from other
6284 Lisp dialects.
6285
6286Further documentation may be found in the optargs.scm file itself.
6287
6288The optional argument module also exports the macros `let-optional',
6289`let-optional*', `let-keywords', `let-keywords*' and `bound?'. These
6290are not documented here because they may be removed in the future, but
6291full documentation is still available in optargs.scm.
6292
2e132553
JB
6293** New syntax: and-let*
6294Guile now supports the `and-let*' form, described in the draft SRFI-2.
6295
6296Syntax: (land* (<clause> ...) <body> ...)
6297Each <clause> should have one of the following forms:
6298 (<variable> <expression>)
6299 (<expression>)
6300 <bound-variable>
6301Each <variable> or <bound-variable> should be an identifier. Each
6302<expression> should be a valid expression. The <body> should be a
6303possibly empty sequence of expressions, like the <body> of a
6304lambda form.
6305
6306Semantics: A LAND* expression is evaluated by evaluating the
6307<expression> or <bound-variable> of each of the <clause>s from
6308left to right. The value of the first <expression> or
6309<bound-variable> that evaluates to a false value is returned; the
6310remaining <expression>s and <bound-variable>s are not evaluated.
6311The <body> forms are evaluated iff all the <expression>s and
6312<bound-variable>s evaluate to true values.
6313
6314The <expression>s and the <body> are evaluated in an environment
6315binding each <variable> of the preceding (<variable> <expression>)
6316clauses to the value of the <expression>. Later bindings
6317shadow earlier bindings.
6318
6319Guile's and-let* macro was contributed by Michael Livshin.
6320
36d3d540
MD
6321** New sorting functions
6322
6323*** New function: sorted? SEQUENCE LESS?
ed8c8636
MD
6324Returns `#t' when the sequence argument is in non-decreasing order
6325according to LESS? (that is, there is no adjacent pair `... x y
6326...' for which `(less? y x)').
6327
6328Returns `#f' when the sequence contains at least one out-of-order
6329pair. It is an error if the sequence is neither a list nor a
6330vector.
6331
36d3d540 6332*** New function: merge LIST1 LIST2 LESS?
ed8c8636
MD
6333LIST1 and LIST2 are sorted lists.
6334Returns the sorted list of all elements in LIST1 and LIST2.
6335
6336Assume that the elements a and b1 in LIST1 and b2 in LIST2 are "equal"
6337in the sense that (LESS? x y) --> #f for x, y in {a, b1, b2},
6338and that a < b1 in LIST1. Then a < b1 < b2 in the result.
6339(Here "<" should read "comes before".)
6340
36d3d540 6341*** New procedure: merge! LIST1 LIST2 LESS?
ed8c8636
MD
6342Merges two lists, re-using the pairs of LIST1 and LIST2 to build
6343the result. If the code is compiled, and LESS? constructs no new
6344pairs, no pairs at all will be allocated. The first pair of the
6345result will be either the first pair of LIST1 or the first pair of
6346LIST2.
6347
36d3d540 6348*** New function: sort SEQUENCE LESS?
ed8c8636
MD
6349Accepts either a list or a vector, and returns a new sequence
6350which is sorted. The new sequence is the same type as the input.
6351Always `(sorted? (sort sequence less?) less?)'. The original
6352sequence is not altered in any way. The new sequence shares its
6353elements with the old one; no elements are copied.
6354
36d3d540 6355*** New procedure: sort! SEQUENCE LESS
ed8c8636
MD
6356Returns its sorted result in the original boxes. No new storage is
6357allocated at all. Proper usage: (set! slist (sort! slist <))
6358
36d3d540 6359*** New function: stable-sort SEQUENCE LESS?
ed8c8636
MD
6360Similar to `sort' but stable. That is, if "equal" elements are
6361ordered a < b in the original sequence, they will have the same order
6362in the result.
6363
36d3d540 6364*** New function: stable-sort! SEQUENCE LESS?
ed8c8636
MD
6365Similar to `sort!' but stable.
6366Uses temporary storage when sorting vectors.
6367
36d3d540 6368*** New functions: sort-list, sort-list!
ed8c8636
MD
6369Added for compatibility with scsh.
6370
36d3d540
MD
6371** New built-in random number support
6372
6373*** New function: random N [STATE]
3e8370c3
MD
6374Accepts a positive integer or real N and returns a number of the
6375same type between zero (inclusive) and N (exclusive). The values
6376returned have a uniform distribution.
6377
6378The optional argument STATE must be of the type produced by
416075f1
MD
6379`copy-random-state' or `seed->random-state'. It defaults to the value
6380of the variable `*random-state*'. This object is used to maintain the
6381state of the pseudo-random-number generator and is altered as a side
6382effect of the `random' operation.
3e8370c3 6383
36d3d540 6384*** New variable: *random-state*
3e8370c3
MD
6385Holds a data structure that encodes the internal state of the
6386random-number generator that `random' uses by default. The nature
6387of this data structure is implementation-dependent. It may be
6388printed out and successfully read back in, but may or may not
6389function correctly as a random-number state object in another
6390implementation.
6391
36d3d540 6392*** New function: copy-random-state [STATE]
3e8370c3
MD
6393Returns a new object of type suitable for use as the value of the
6394variable `*random-state*' and as a second argument to `random'.
6395If argument STATE is given, a copy of it is returned. Otherwise a
6396copy of `*random-state*' is returned.
416075f1 6397
36d3d540 6398*** New function: seed->random-state SEED
416075f1
MD
6399Returns a new object of type suitable for use as the value of the
6400variable `*random-state*' and as a second argument to `random'.
6401SEED is a string or a number. A new state is generated and
6402initialized using SEED.
3e8370c3 6403
36d3d540 6404*** New function: random:uniform [STATE]
3e8370c3
MD
6405Returns an uniformly distributed inexact real random number in the
6406range between 0 and 1.
6407
36d3d540 6408*** New procedure: random:solid-sphere! VECT [STATE]
3e8370c3
MD
6409Fills VECT with inexact real random numbers the sum of whose
6410squares is less than 1.0. Thinking of VECT as coordinates in
6411space of dimension N = `(vector-length VECT)', the coordinates are
6412uniformly distributed within the unit N-shere. The sum of the
6413squares of the numbers is returned. VECT can be either a vector
6414or a uniform vector of doubles.
6415
36d3d540 6416*** New procedure: random:hollow-sphere! VECT [STATE]
3e8370c3
MD
6417Fills VECT with inexact real random numbers the sum of whose squares
6418is equal to 1.0. Thinking of VECT as coordinates in space of
6419dimension n = `(vector-length VECT)', the coordinates are uniformly
6420distributed over the surface of the unit n-shere. VECT can be either
6421a vector or a uniform vector of doubles.
6422
36d3d540 6423*** New function: random:normal [STATE]
3e8370c3
MD
6424Returns an inexact real in a normal distribution with mean 0 and
6425standard deviation 1. For a normal distribution with mean M and
6426standard deviation D use `(+ M (* D (random:normal)))'.
6427
36d3d540 6428*** New procedure: random:normal-vector! VECT [STATE]
3e8370c3
MD
6429Fills VECT with inexact real random numbers which are independent and
6430standard normally distributed (i.e., with mean 0 and variance 1).
6431VECT can be either a vector or a uniform vector of doubles.
6432
36d3d540 6433*** New function: random:exp STATE
3e8370c3
MD
6434Returns an inexact real in an exponential distribution with mean 1.
6435For an exponential distribution with mean U use (* U (random:exp)).
6436
69c6acbb
JB
6437** The range of logand, logior, logxor, logtest, and logbit? have changed.
6438
6439These functions now operate on numbers in the range of a C unsigned
6440long.
6441
6442These functions used to operate on numbers in the range of a C signed
6443long; however, this seems inappropriate, because Guile integers don't
6444overflow.
6445
ba4ee0d6
MD
6446** New function: make-guardian
6447This is an implementation of guardians as described in
6448R. Kent Dybvig, Carl Bruggeman, and David Eby (1993) "Guardians in a
6449Generation-Based Garbage Collector" ACM SIGPLAN Conference on
6450Programming Language Design and Implementation, June 1993
6451ftp://ftp.cs.indiana.edu/pub/scheme-repository/doc/pubs/guardians.ps.gz
6452
88ceea5c
MD
6453** New functions: delq1!, delv1!, delete1!
6454These procedures behave similar to delq! and friends but delete only
6455one object if at all.
6456
55254a6a
MD
6457** New function: unread-string STRING PORT
6458Unread STRING to PORT, that is, push it back onto the port so that
6459next read operation will work on the pushed back characters.
6460
6461** unread-char can now be called multiple times
6462If unread-char is called multiple times, the unread characters will be
6463read again in last-in first-out order.
6464
9e97c52d
GH
6465** the procedures uniform-array-read! and uniform-array-write! now
6466work on any kind of port, not just ports which are open on a file.
6467
b074884f 6468** Now 'l' in a port mode requests line buffering.
9e97c52d 6469
69bc9ff3
GH
6470** The procedure truncate-file now works on string ports as well
6471as file ports. If the size argument is omitted, the current
1b9c3dae 6472file position is used.
9e97c52d 6473
c94577b4 6474** new procedure: seek PORT/FDES OFFSET WHENCE
9e97c52d
GH
6475The arguments are the same as for the old fseek procedure, but it
6476works on string ports as well as random-access file ports.
6477
6478** the fseek procedure now works on string ports, since it has been
c94577b4 6479redefined using seek.
9e97c52d
GH
6480
6481** the setvbuf procedure now uses a default size if mode is _IOFBF and
6482size is not supplied.
6483
6484** the newline procedure no longer flushes the port if it's not
6485line-buffered: previously it did if it was the current output port.
6486
6487** open-pipe and close-pipe are no longer primitive procedures, but
6488an emulation can be obtained using `(use-modules (ice-9 popen))'.
6489
6490** the freopen procedure has been removed.
6491
6492** new procedure: drain-input PORT
6493Drains PORT's read buffers (including any pushed-back characters)
6494and returns the contents as a single string.
6495
67ad463a 6496** New function: map-in-order PROC LIST1 LIST2 ...
d41b3904
MD
6497Version of `map' which guarantees that the procedure is applied to the
6498lists in serial order.
6499
67ad463a
MD
6500** Renamed `serial-array-copy!' and `serial-array-map!' to
6501`array-copy-in-order!' and `array-map-in-order!'. The old names are
6502now obsolete and will go away in release 1.5.
6503
cf7132b3 6504** New syntax: collect BODY1 ...
d41b3904
MD
6505Version of `begin' which returns a list of the results of the body
6506forms instead of the result of the last body form. In contrast to
cf7132b3 6507`begin', `collect' allows an empty body.
d41b3904 6508
e4eae9b1
MD
6509** New functions: read-history FILENAME, write-history FILENAME
6510Read/write command line history from/to file. Returns #t on success
6511and #f if an error occured.
6512
d21ffe26
JB
6513** `ls' and `lls' in module (ice-9 ls) now handle no arguments.
6514
6515These procedures return a list of definitions available in the specified
6516argument, a relative module reference. In the case of no argument,
6517`(current-module)' is now consulted for definitions to return, instead
6518of simply returning #f, the former behavior.
6519
f8c9d497
JB
6520** The #/ syntax for lists is no longer supported.
6521
6522Earlier versions of Scheme accepted this syntax, but printed a
6523warning.
6524
6525** Guile no longer consults the SCHEME_LOAD_PATH environment variable.
6526
6527Instead, you should set GUILE_LOAD_PATH to tell Guile where to find
6528modules.
6529
3ffc7a36
MD
6530* Changes to the gh_ interface
6531
6532** gh_scm2doubles
6533
6534Now takes a second argument which is the result array. If this
6535pointer is NULL, a new array is malloced (the old behaviour).
6536
6537** gh_chars2byvect, gh_shorts2svect, gh_floats2fvect, gh_scm2chars,
6538 gh_scm2shorts, gh_scm2longs, gh_scm2floats
6539
6540New functions.
6541
3e8370c3
MD
6542* Changes to the scm_ interface
6543
ad91d6c3
MD
6544** Function: scm_make_named_hook (char* name, int n_args)
6545
6546Creates a hook in the same way as make-hook above but also
6547binds a variable named NAME to it.
6548
6549This is the typical way of creating a hook from C code.
6550
ece41168
MD
6551Currently, the variable is created in the "current" module. This
6552might change when we get the new module system.
ad91d6c3 6553
16a5a9a4
MD
6554** The smob interface
6555
6556The interface for creating smobs has changed. For documentation, see
6557data-rep.info (made from guile-core/doc/data-rep.texi).
6558
6559*** Deprecated function: SCM scm_newsmob (scm_smobfuns *)
6560
6561>>> This function will be removed in 1.3.4. <<<
6562
6563It is replaced by:
6564
6565*** Function: SCM scm_make_smob_type (const char *name, scm_sizet size)
6566This function adds a new smob type, named NAME, with instance size
6567SIZE to the system. The return value is a tag that is used in
6568creating instances of the type. If SIZE is 0, then no memory will
6569be allocated when instances of the smob are created, and nothing
6570will be freed by the default free function.
6c0201ad 6571
16a5a9a4
MD
6572*** Function: void scm_set_smob_mark (long tc, SCM (*mark) (SCM))
6573This function sets the smob marking procedure for the smob type
6574specified by the tag TC. TC is the tag returned by
6575`scm_make_smob_type'.
6576
6577*** Function: void scm_set_smob_free (long tc, SCM (*mark) (SCM))
6578This function sets the smob freeing procedure for the smob type
6579specified by the tag TC. TC is the tag returned by
6580`scm_make_smob_type'.
6581
6582*** Function: void scm_set_smob_print (tc, print)
6583
6584 - Function: void scm_set_smob_print (long tc,
6585 scm_sizet (*print) (SCM,
6586 SCM,
6587 scm_print_state *))
6588
6589This function sets the smob printing procedure for the smob type
6590specified by the tag TC. TC is the tag returned by
6591`scm_make_smob_type'.
6592
6593*** Function: void scm_set_smob_equalp (long tc, SCM (*equalp) (SCM, SCM))
6594This function sets the smob equality-testing predicate for the
6595smob type specified by the tag TC. TC is the tag returned by
6596`scm_make_smob_type'.
6597
6598*** Macro: void SCM_NEWSMOB (SCM var, long tc, void *data)
6599Make VALUE contain a smob instance of the type with type code TC and
6600smob data DATA. VALUE must be previously declared as C type `SCM'.
6601
6602*** Macro: fn_returns SCM_RETURN_NEWSMOB (long tc, void *data)
6603This macro expands to a block of code that creates a smob instance
6604of the type with type code TC and smob data DATA, and returns that
6605`SCM' value. It should be the last piece of code in a block.
6606
9e97c52d
GH
6607** The interfaces for using I/O ports and implementing port types
6608(ptobs) have changed significantly. The new interface is based on
6609shared access to buffers and a new set of ptob procedures.
6610
16a5a9a4
MD
6611*** scm_newptob has been removed
6612
6613It is replaced by:
6614
6615*** Function: SCM scm_make_port_type (type_name, fill_buffer, write_flush)
6616
6617- Function: SCM scm_make_port_type (char *type_name,
6618 int (*fill_buffer) (SCM port),
6619 void (*write_flush) (SCM port));
6620
6621Similarly to the new smob interface, there is a set of function
6622setters by which the user can customize the behaviour of his port
544e9093 6623type. See ports.h (scm_set_port_XXX).
16a5a9a4 6624
9e97c52d
GH
6625** scm_strport_to_string: New function: creates a new string from
6626a string port's buffer.
6627
3e8370c3
MD
6628** Plug in interface for random number generators
6629The variable `scm_the_rng' in random.c contains a value and three
6630function pointers which together define the current random number
6631generator being used by the Scheme level interface and the random
6632number library functions.
6633
6634The user is free to replace the default generator with the generator
6635of his own choice.
6636
6637*** Variable: size_t scm_the_rng.rstate_size
6638The size of the random state type used by the current RNG
6639measured in chars.
6640
6641*** Function: unsigned long scm_the_rng.random_bits (scm_rstate *STATE)
6642Given the random STATE, return 32 random bits.
6643
6644*** Function: void scm_the_rng.init_rstate (scm_rstate *STATE, chars *S, int N)
6645Seed random state STATE using string S of length N.
6646
6647*** Function: scm_rstate *scm_the_rng.copy_rstate (scm_rstate *STATE)
6648Given random state STATE, return a malloced copy.
6649
6650** Default RNG
6651The default RNG is the MWC (Multiply With Carry) random number
6652generator described by George Marsaglia at the Department of
6653Statistics and Supercomputer Computations Research Institute, The
6654Florida State University (http://stat.fsu.edu/~geo).
6655
6656It uses 64 bits, has a period of 4578426017172946943 (4.6e18), and
6657passes all tests in the DIEHARD test suite
6658(http://stat.fsu.edu/~geo/diehard.html). The generation of 32 bits
6659costs one multiply and one add on platforms which either supports long
6660longs (gcc does this on most systems) or have 64 bit longs. The cost
6661is four multiply on other systems but this can be optimized by writing
6662scm_i_uniform32 in assembler.
6663
6664These functions are provided through the scm_the_rng interface for use
6665by libguile and the application.
6666
6667*** Function: unsigned long scm_i_uniform32 (scm_i_rstate *STATE)
6668Given the random STATE, return 32 random bits.
6669Don't use this function directly. Instead go through the plugin
6670interface (see "Plug in interface" above).
6671
6672*** Function: void scm_i_init_rstate (scm_i_rstate *STATE, char *SEED, int N)
6673Initialize STATE using SEED of length N.
6674
6675*** Function: scm_i_rstate *scm_i_copy_rstate (scm_i_rstate *STATE)
6676Return a malloc:ed copy of STATE. This function can easily be re-used
6677in the interfaces to other RNGs.
6678
6679** Random number library functions
6680These functions use the current RNG through the scm_the_rng interface.
6681It might be a good idea to use these functions from your C code so
6682that only one random generator is used by all code in your program.
6683
259529f2 6684The default random state is stored in:
3e8370c3
MD
6685
6686*** Variable: SCM scm_var_random_state
6687Contains the vcell of the Scheme variable "*random-state*" which is
6688used as default state by all random number functions in the Scheme
6689level interface.
6690
6691Example:
6692
259529f2 6693 double x = scm_c_uniform01 (SCM_RSTATE (SCM_CDR (scm_var_random_state)));
3e8370c3 6694
259529f2
MD
6695*** Function: scm_rstate *scm_c_default_rstate (void)
6696This is a convenience function which returns the value of
6697scm_var_random_state. An error message is generated if this value
6698isn't a random state.
6699
6700*** Function: scm_rstate *scm_c_make_rstate (char *SEED, int LENGTH)
6701Make a new random state from the string SEED of length LENGTH.
6702
6703It is generally not a good idea to use multiple random states in a
6704program. While subsequent random numbers generated from one random
6705state are guaranteed to be reasonably independent, there is no such
6706guarantee for numbers generated from different random states.
6707
6708*** Macro: unsigned long scm_c_uniform32 (scm_rstate *STATE)
6709Return 32 random bits.
6710
6711*** Function: double scm_c_uniform01 (scm_rstate *STATE)
3e8370c3
MD
6712Return a sample from the uniform(0,1) distribution.
6713
259529f2 6714*** Function: double scm_c_normal01 (scm_rstate *STATE)
3e8370c3
MD
6715Return a sample from the normal(0,1) distribution.
6716
259529f2 6717*** Function: double scm_c_exp1 (scm_rstate *STATE)
3e8370c3
MD
6718Return a sample from the exp(1) distribution.
6719
259529f2
MD
6720*** Function: unsigned long scm_c_random (scm_rstate *STATE, unsigned long M)
6721Return a sample from the discrete uniform(0,M) distribution.
6722
6723*** Function: SCM scm_c_random_bignum (scm_rstate *STATE, SCM M)
3e8370c3 6724Return a sample from the discrete uniform(0,M) distribution.
259529f2 6725M must be a bignum object. The returned value may be an INUM.
3e8370c3 6726
9e97c52d 6727
f3227c7a 6728\f
d23bbf3e 6729Changes in Guile 1.3 (released Monday, October 19, 1998):
c484bf7f
JB
6730
6731* Changes to the distribution
6732
e2d6569c
JB
6733** We renamed the SCHEME_LOAD_PATH environment variable to GUILE_LOAD_PATH.
6734To avoid conflicts, programs should name environment variables after
6735themselves, except when there's a common practice establishing some
6736other convention.
6737
6738For now, Guile supports both GUILE_LOAD_PATH and SCHEME_LOAD_PATH,
6739giving the former precedence, and printing a warning message if the
6740latter is set. Guile 1.4 will not recognize SCHEME_LOAD_PATH at all.
6741
6742** The header files related to multi-byte characters have been removed.
6743They were: libguile/extchrs.h and libguile/mbstrings.h. Any C code
6744which referred to these explicitly will probably need to be rewritten,
6745since the support for the variant string types has been removed; see
6746below.
6747
6748** The header files append.h and sequences.h have been removed. These
6749files implemented non-R4RS operations which would encourage
6750non-portable programming style and less easy-to-read code.
3a97e020 6751
c484bf7f
JB
6752* Changes to the stand-alone interpreter
6753
2e368582 6754** New procedures have been added to implement a "batch mode":
ec4ab4fd 6755
2e368582 6756*** Function: batch-mode?
ec4ab4fd
GH
6757
6758 Returns a boolean indicating whether the interpreter is in batch
6759 mode.
6760
2e368582 6761*** Function: set-batch-mode?! ARG
ec4ab4fd
GH
6762
6763 If ARG is true, switches the interpreter to batch mode. The `#f'
6764 case has not been implemented.
6765
2e368582
JB
6766** Guile now provides full command-line editing, when run interactively.
6767To use this feature, you must have the readline library installed.
6768The Guile build process will notice it, and automatically include
6769support for it.
6770
6771The readline library is available via anonymous FTP from any GNU
6772mirror site; the canonical location is "ftp://prep.ai.mit.edu/pub/gnu".
6773
a5d6d578
MD
6774** the-last-stack is now a fluid.
6775
c484bf7f
JB
6776* Changes to the procedure for linking libguile with your programs
6777
71f20534 6778** You can now use the `guile-config' utility to build programs that use Guile.
2e368582 6779
2adfe1c0 6780Guile now includes a command-line utility called `guile-config', which
71f20534
JB
6781can provide information about how to compile and link programs that
6782use Guile.
6783
6784*** `guile-config compile' prints any C compiler flags needed to use Guile.
6785You should include this command's output on the command line you use
6786to compile C or C++ code that #includes the Guile header files. It's
6787usually just a `-I' flag to help the compiler find the Guile headers.
6788
6789
6790*** `guile-config link' prints any linker flags necessary to link with Guile.
8aa5c148 6791
71f20534 6792This command writes to its standard output a list of flags which you
8aa5c148
JB
6793must pass to the linker to link your code against the Guile library.
6794The flags include '-lguile' itself, any other libraries the Guile
6795library depends upon, and any `-L' flags needed to help the linker
6796find those libraries.
2e368582
JB
6797
6798For example, here is a Makefile rule that builds a program named 'foo'
6799from the object files ${FOO_OBJECTS}, and links them against Guile:
6800
6801 foo: ${FOO_OBJECTS}
2adfe1c0 6802 ${CC} ${CFLAGS} ${FOO_OBJECTS} `guile-config link` -o foo
2e368582 6803
e2d6569c
JB
6804Previous Guile releases recommended that you use autoconf to detect
6805which of a predefined set of libraries were present on your system.
2adfe1c0 6806It is more robust to use `guile-config', since it records exactly which
e2d6569c
JB
6807libraries the installed Guile library requires.
6808
2adfe1c0
JB
6809This was originally called `build-guile', but was renamed to
6810`guile-config' before Guile 1.3 was released, to be consistent with
6811the analogous script for the GTK+ GUI toolkit, which is called
6812`gtk-config'.
6813
2e368582 6814
8aa5c148
JB
6815** Use the GUILE_FLAGS macro in your configure.in file to find Guile.
6816
6817If you are using the GNU autoconf package to configure your program,
6818you can use the GUILE_FLAGS autoconf macro to call `guile-config'
6819(described above) and gather the necessary values for use in your
6820Makefiles.
6821
6822The GUILE_FLAGS macro expands to configure script code which runs the
6823`guile-config' script, to find out where Guile's header files and
6824libraries are installed. It sets two variables, marked for
6825substitution, as by AC_SUBST.
6826
6827 GUILE_CFLAGS --- flags to pass to a C or C++ compiler to build
6828 code that uses Guile header files. This is almost always just a
6829 -I flag.
6830
6831 GUILE_LDFLAGS --- flags to pass to the linker to link a
6832 program against Guile. This includes `-lguile' for the Guile
6833 library itself, any libraries that Guile itself requires (like
6834 -lqthreads), and so on. It may also include a -L flag to tell the
6835 compiler where to find the libraries.
6836
6837GUILE_FLAGS is defined in the file guile.m4, in the top-level
6838directory of the Guile distribution. You can copy it into your
6839package's aclocal.m4 file, and then use it in your configure.in file.
6840
6841If you are using the `aclocal' program, distributed with GNU automake,
6842to maintain your aclocal.m4 file, the Guile installation process
6843installs guile.m4 where aclocal will find it. All you need to do is
6844use GUILE_FLAGS in your configure.in file, and then run `aclocal';
6845this will copy the definition of GUILE_FLAGS into your aclocal.m4
6846file.
6847
6848
c484bf7f 6849* Changes to Scheme functions and syntax
7ad3c1e7 6850
02755d59 6851** Multi-byte strings have been removed, as have multi-byte and wide
e2d6569c
JB
6852ports. We felt that these were the wrong approach to
6853internationalization support.
02755d59 6854
2e368582
JB
6855** New function: readline [PROMPT]
6856Read a line from the terminal, and allow the user to edit it,
6857prompting with PROMPT. READLINE provides a large set of Emacs-like
6858editing commands, lets the user recall previously typed lines, and
6859works on almost every kind of terminal, including dumb terminals.
6860
6861READLINE assumes that the cursor is at the beginning of the line when
6862it is invoked. Thus, you can't print a prompt yourself, and then call
6863READLINE; you need to package up your prompt as a string, pass it to
6864the function, and let READLINE print the prompt itself. This is
6865because READLINE needs to know the prompt's screen width.
6866
8cd57bd0
JB
6867For Guile to provide this function, you must have the readline
6868library, version 2.1 or later, installed on your system. Readline is
6869available via anonymous FTP from prep.ai.mit.edu in pub/gnu, or from
6870any GNU mirror site.
2e368582
JB
6871
6872See also ADD-HISTORY function.
6873
6874** New function: add-history STRING
6875Add STRING as the most recent line in the history used by the READLINE
6876command. READLINE does not add lines to the history itself; you must
6877call ADD-HISTORY to make previous input available to the user.
6878
8cd57bd0
JB
6879** The behavior of the read-line function has changed.
6880
6881This function now uses standard C library functions to read the line,
6882for speed. This means that it doesn not respect the value of
6883scm-line-incrementors; it assumes that lines are delimited with
6884#\newline.
6885
6886(Note that this is read-line, the function that reads a line of text
6887from a port, not readline, the function that reads a line from a
6888terminal, providing full editing capabilities.)
6889
1a0106ef
JB
6890** New module (ice-9 getopt-gnu-style): Parse command-line arguments.
6891
6892This module provides some simple argument parsing. It exports one
6893function:
6894
6895Function: getopt-gnu-style ARG-LS
6896 Parse a list of program arguments into an alist of option
6897 descriptions.
6898
6899 Each item in the list of program arguments is examined to see if
6900 it meets the syntax of a GNU long-named option. An argument like
6901 `--MUMBLE' produces an element of the form (MUMBLE . #t) in the
6902 returned alist, where MUMBLE is a keyword object with the same
6903 name as the argument. An argument like `--MUMBLE=FROB' produces
6904 an element of the form (MUMBLE . FROB), where FROB is a string.
6905
6906 As a special case, the returned alist also contains a pair whose
6907 car is the symbol `rest'. The cdr of this pair is a list
6908 containing all the items in the argument list that are not options
6909 of the form mentioned above.
6910
6911 The argument `--' is treated specially: all items in the argument
6912 list appearing after such an argument are not examined, and are
6913 returned in the special `rest' list.
6914
6915 This function does not parse normal single-character switches.
6916 You will need to parse them out of the `rest' list yourself.
6917
8cd57bd0
JB
6918** The read syntax for byte vectors and short vectors has changed.
6919
6920Instead of #bytes(...), write #y(...).
6921
6922Instead of #short(...), write #h(...).
6923
6924This may seem nutty, but, like the other uniform vectors, byte vectors
6925and short vectors want to have the same print and read syntax (and,
6926more basic, want to have read syntax!). Changing the read syntax to
6927use multiple characters after the hash sign breaks with the
6928conventions used in R5RS and the conventions used for the other
6929uniform vectors. It also introduces complexity in the current reader,
6930both on the C and Scheme levels. (The Right solution is probably to
6931change the syntax and prototypes for uniform vectors entirely.)
6932
6933
6934** The new module (ice-9 session) provides useful interactive functions.
6935
6936*** New procedure: (apropos REGEXP OPTION ...)
6937
6938Display a list of top-level variables whose names match REGEXP, and
6939the modules they are imported from. Each OPTION should be one of the
6940following symbols:
6941
6942 value --- Show the value of each matching variable.
6943 shadow --- Show bindings shadowed by subsequently imported modules.
6944 full --- Same as both `shadow' and `value'.
6945
6946For example:
6947
6948 guile> (apropos "trace" 'full)
6949 debug: trace #<procedure trace args>
6950 debug: untrace #<procedure untrace args>
6951 the-scm-module: display-backtrace #<compiled-closure #<primitive-procedure gsubr-apply>>
6952 the-scm-module: before-backtrace-hook ()
6953 the-scm-module: backtrace #<primitive-procedure backtrace>
6954 the-scm-module: after-backtrace-hook ()
6955 the-scm-module: has-shown-backtrace-hint? #f
6c0201ad 6956 guile>
8cd57bd0
JB
6957
6958** There are new functions and syntax for working with macros.
6959
6960Guile implements macros as a special object type. Any variable whose
6961top-level binding is a macro object acts as a macro. The macro object
6962specifies how the expression should be transformed before evaluation.
6963
6964*** Macro objects now print in a reasonable way, resembling procedures.
6965
6966*** New function: (macro? OBJ)
6967True iff OBJ is a macro object.
6968
6969*** New function: (primitive-macro? OBJ)
6970Like (macro? OBJ), but true only if OBJ is one of the Guile primitive
6971macro transformers, implemented in eval.c rather than Scheme code.
6972
dbdd0c16
JB
6973Why do we have this function?
6974- For symmetry with procedure? and primitive-procedure?,
6975- to allow custom print procedures to tell whether a macro is
6976 primitive, and display it differently, and
6977- to allow compilers and user-written evaluators to distinguish
6978 builtin special forms from user-defined ones, which could be
6979 compiled.
6980
8cd57bd0
JB
6981*** New function: (macro-type OBJ)
6982Return a value indicating what kind of macro OBJ is. Possible return
6983values are:
6984
6985 The symbol `syntax' --- a macro created by procedure->syntax.
6986 The symbol `macro' --- a macro created by procedure->macro.
6987 The symbol `macro!' --- a macro created by procedure->memoizing-macro.
6c0201ad 6988 The boolean #f --- if OBJ is not a macro object.
8cd57bd0
JB
6989
6990*** New function: (macro-name MACRO)
6991Return the name of the macro object MACRO's procedure, as returned by
6992procedure-name.
6993
6994*** New function: (macro-transformer MACRO)
6995Return the transformer procedure for MACRO.
6996
6997*** New syntax: (use-syntax MODULE ... TRANSFORMER)
6998
6999Specify a new macro expander to use in the current module. Each
7000MODULE is a module name, with the same meaning as in the `use-modules'
7001form; each named module's exported bindings are added to the current
7002top-level environment. TRANSFORMER is an expression evaluated in the
7003resulting environment which must yield a procedure to use as the
7004module's eval transformer: every expression evaluated in this module
7005is passed to this function, and the result passed to the Guile
6c0201ad 7006interpreter.
8cd57bd0
JB
7007
7008*** macro-eval! is removed. Use local-eval instead.
29521173 7009
8d9dcb3c
MV
7010** Some magic has been added to the printer to better handle user
7011written printing routines (like record printers, closure printers).
7012
7013The problem is that these user written routines must have access to
7fbd77df 7014the current `print-state' to be able to handle fancy things like
8d9dcb3c
MV
7015detection of circular references. These print-states have to be
7016passed to the builtin printing routines (display, write, etc) to
7017properly continue the print chain.
7018
7019We didn't want to change all existing print code so that it
8cd57bd0 7020explicitly passes thru a print state in addition to a port. Instead,
8d9dcb3c
MV
7021we extented the possible values that the builtin printing routines
7022accept as a `port'. In addition to a normal port, they now also take
7023a pair of a normal port and a print-state. Printing will go to the
7024port and the print-state will be used to control the detection of
7025circular references, etc. If the builtin function does not care for a
7026print-state, it is simply ignored.
7027
7028User written callbacks are now called with such a pair as their
7029`port', but because every function now accepts this pair as a PORT
7030argument, you don't have to worry about that. In fact, it is probably
7031safest to not check for these pairs.
7032
7033However, it is sometimes necessary to continue a print chain on a
7034different port, for example to get a intermediate string
7035representation of the printed value, mangle that string somehow, and
7036then to finally print the mangled string. Use the new function
7037
7038 inherit-print-state OLD-PORT NEW-PORT
7039
7040for this. It constructs a new `port' that prints to NEW-PORT but
7041inherits the print-state of OLD-PORT.
7042
ef1ea498
MD
7043** struct-vtable-offset renamed to vtable-offset-user
7044
7045** New constants: vtable-index-layout, vtable-index-vtable, vtable-index-printer
7046
e478dffa
MD
7047** There is now a third optional argument to make-vtable-vtable
7048 (and fourth to make-struct) when constructing new types (vtables).
7049 This argument initializes field vtable-index-printer of the vtable.
ef1ea498 7050
4851dc57
MV
7051** The detection of circular references has been extended to structs.
7052That is, a structure that -- in the process of being printed -- prints
7053itself does not lead to infinite recursion.
7054
7055** There is now some basic support for fluids. Please read
7056"libguile/fluid.h" to find out more. It is accessible from Scheme with
7057the following functions and macros:
7058
9c3fb66f
MV
7059Function: make-fluid
7060
7061 Create a new fluid object. Fluids are not special variables or
7062 some other extension to the semantics of Scheme, but rather
7063 ordinary Scheme objects. You can store them into variables (that
7064 are still lexically scoped, of course) or into any other place you
7065 like. Every fluid has a initial value of `#f'.
04c76b58 7066
9c3fb66f 7067Function: fluid? OBJ
04c76b58 7068
9c3fb66f 7069 Test whether OBJ is a fluid.
04c76b58 7070
9c3fb66f
MV
7071Function: fluid-ref FLUID
7072Function: fluid-set! FLUID VAL
04c76b58
MV
7073
7074 Access/modify the fluid FLUID. Modifications are only visible
7075 within the current dynamic root (that includes threads).
7076
9c3fb66f
MV
7077Function: with-fluids* FLUIDS VALUES THUNK
7078
7079 FLUIDS is a list of fluids and VALUES a corresponding list of
7080 values for these fluids. Before THUNK gets called the values are
6c0201ad 7081 installed in the fluids and the old values of the fluids are
9c3fb66f
MV
7082 saved in the VALUES list. When the flow of control leaves THUNK
7083 or reenters it, the values get swapped again. You might think of
7084 this as a `safe-fluid-excursion'. Note that the VALUES list is
7085 modified by `with-fluids*'.
7086
7087Macro: with-fluids ((FLUID VALUE) ...) FORM ...
7088
7089 The same as `with-fluids*' but with a different syntax. It looks
7090 just like `let', but both FLUID and VALUE are evaluated. Remember,
7091 fluids are not special variables but ordinary objects. FLUID
7092 should evaluate to a fluid.
04c76b58 7093
e2d6569c 7094** Changes to system call interfaces:
64d01d13 7095
e2d6569c 7096*** close-port, close-input-port and close-output-port now return a
64d01d13
GH
7097boolean instead of an `unspecified' object. #t means that the port
7098was successfully closed, while #f means it was already closed. It is
7099also now possible for these procedures to raise an exception if an
7100error occurs (some errors from write can be delayed until close.)
7101
e2d6569c 7102*** the first argument to chmod, fcntl, ftell and fseek can now be a
6afcd3b2
GH
7103file descriptor.
7104
e2d6569c 7105*** the third argument to fcntl is now optional.
6afcd3b2 7106
e2d6569c 7107*** the first argument to chown can now be a file descriptor or a port.
6afcd3b2 7108
e2d6569c 7109*** the argument to stat can now be a port.
6afcd3b2 7110
e2d6569c 7111*** The following new procedures have been added (most use scsh
64d01d13
GH
7112interfaces):
7113
e2d6569c 7114*** procedure: close PORT/FD
ec4ab4fd
GH
7115 Similar to close-port (*note close-port: Closing Ports.), but also
7116 works on file descriptors. A side effect of closing a file
7117 descriptor is that any ports using that file descriptor are moved
7118 to a different file descriptor and have their revealed counts set
7119 to zero.
7120
e2d6569c 7121*** procedure: port->fdes PORT
ec4ab4fd
GH
7122 Returns the integer file descriptor underlying PORT. As a side
7123 effect the revealed count of PORT is incremented.
7124
e2d6569c 7125*** procedure: fdes->ports FDES
ec4ab4fd
GH
7126 Returns a list of existing ports which have FDES as an underlying
7127 file descriptor, without changing their revealed counts.
7128
e2d6569c 7129*** procedure: fdes->inport FDES
ec4ab4fd
GH
7130 Returns an existing input port which has FDES as its underlying
7131 file descriptor, if one exists, and increments its revealed count.
7132 Otherwise, returns a new input port with a revealed count of 1.
7133
e2d6569c 7134*** procedure: fdes->outport FDES
ec4ab4fd
GH
7135 Returns an existing output port which has FDES as its underlying
7136 file descriptor, if one exists, and increments its revealed count.
7137 Otherwise, returns a new output port with a revealed count of 1.
7138
7139 The next group of procedures perform a `dup2' system call, if NEWFD
7140(an integer) is supplied, otherwise a `dup'. The file descriptor to be
7141duplicated can be supplied as an integer or contained in a port. The
64d01d13
GH
7142type of value returned varies depending on which procedure is used.
7143
ec4ab4fd
GH
7144 All procedures also have the side effect when performing `dup2' that
7145any ports using NEWFD are moved to a different file descriptor and have
64d01d13
GH
7146their revealed counts set to zero.
7147
e2d6569c 7148*** procedure: dup->fdes PORT/FD [NEWFD]
ec4ab4fd 7149 Returns an integer file descriptor.
64d01d13 7150
e2d6569c 7151*** procedure: dup->inport PORT/FD [NEWFD]
ec4ab4fd 7152 Returns a new input port using the new file descriptor.
64d01d13 7153
e2d6569c 7154*** procedure: dup->outport PORT/FD [NEWFD]
ec4ab4fd 7155 Returns a new output port using the new file descriptor.
64d01d13 7156
e2d6569c 7157*** procedure: dup PORT/FD [NEWFD]
ec4ab4fd
GH
7158 Returns a new port if PORT/FD is a port, with the same mode as the
7159 supplied port, otherwise returns an integer file descriptor.
64d01d13 7160
e2d6569c 7161*** procedure: dup->port PORT/FD MODE [NEWFD]
ec4ab4fd
GH
7162 Returns a new port using the new file descriptor. MODE supplies a
7163 mode string for the port (*note open-file: File Ports.).
64d01d13 7164
e2d6569c 7165*** procedure: setenv NAME VALUE
ec4ab4fd
GH
7166 Modifies the environment of the current process, which is also the
7167 default environment inherited by child processes.
64d01d13 7168
ec4ab4fd
GH
7169 If VALUE is `#f', then NAME is removed from the environment.
7170 Otherwise, the string NAME=VALUE is added to the environment,
7171 replacing any existing string with name matching NAME.
64d01d13 7172
ec4ab4fd 7173 The return value is unspecified.
956055a9 7174
e2d6569c 7175*** procedure: truncate-file OBJ SIZE
6afcd3b2
GH
7176 Truncates the file referred to by OBJ to at most SIZE bytes. OBJ
7177 can be a string containing a file name or an integer file
7178 descriptor or port open for output on the file. The underlying
7179 system calls are `truncate' and `ftruncate'.
7180
7181 The return value is unspecified.
7182
e2d6569c 7183*** procedure: setvbuf PORT MODE [SIZE]
7a6f1ffa
GH
7184 Set the buffering mode for PORT. MODE can be:
7185 `_IONBF'
7186 non-buffered
7187
7188 `_IOLBF'
7189 line buffered
7190
7191 `_IOFBF'
7192 block buffered, using a newly allocated buffer of SIZE bytes.
7193 However if SIZE is zero or unspecified, the port will be made
7194 non-buffered.
7195
7196 This procedure should not be used after I/O has been performed with
7197 the port.
7198
7199 Ports are usually block buffered by default, with a default buffer
7200 size. Procedures e.g., *Note open-file: File Ports, which accept a
7201 mode string allow `0' to be added to request an unbuffered port.
7202
e2d6569c 7203*** procedure: fsync PORT/FD
6afcd3b2
GH
7204 Copies any unwritten data for the specified output file descriptor
7205 to disk. If PORT/FD is a port, its buffer is flushed before the
7206 underlying file descriptor is fsync'd. The return value is
7207 unspecified.
7208
e2d6569c 7209*** procedure: open-fdes PATH FLAGS [MODES]
6afcd3b2
GH
7210 Similar to `open' but returns a file descriptor instead of a port.
7211
e2d6569c 7212*** procedure: execle PATH ENV [ARG] ...
6afcd3b2
GH
7213 Similar to `execl', but the environment of the new process is
7214 specified by ENV, which must be a list of strings as returned by
7215 the `environ' procedure.
7216
7217 This procedure is currently implemented using the `execve' system
7218 call, but we call it `execle' because of its Scheme calling
7219 interface.
7220
e2d6569c 7221*** procedure: strerror ERRNO
ec4ab4fd
GH
7222 Returns the Unix error message corresponding to ERRNO, an integer.
7223
e2d6569c 7224*** procedure: primitive-exit [STATUS]
6afcd3b2
GH
7225 Terminate the current process without unwinding the Scheme stack.
7226 This is would typically be useful after a fork. The exit status
7227 is STATUS if supplied, otherwise zero.
7228
e2d6569c 7229*** procedure: times
6afcd3b2
GH
7230 Returns an object with information about real and processor time.
7231 The following procedures accept such an object as an argument and
7232 return a selected component:
7233
7234 `tms:clock'
7235 The current real time, expressed as time units relative to an
7236 arbitrary base.
7237
7238 `tms:utime'
7239 The CPU time units used by the calling process.
7240
7241 `tms:stime'
7242 The CPU time units used by the system on behalf of the
7243 calling process.
7244
7245 `tms:cutime'
7246 The CPU time units used by terminated child processes of the
7247 calling process, whose status has been collected (e.g., using
7248 `waitpid').
7249
7250 `tms:cstime'
7251 Similarly, the CPU times units used by the system on behalf of
7252 terminated child processes.
7ad3c1e7 7253
e2d6569c
JB
7254** Removed: list-length
7255** Removed: list-append, list-append!
7256** Removed: list-reverse, list-reverse!
7257
7258** array-map renamed to array-map!
7259
7260** serial-array-map renamed to serial-array-map!
7261
660f41fa
MD
7262** catch doesn't take #f as first argument any longer
7263
7264Previously, it was possible to pass #f instead of a key to `catch'.
7265That would cause `catch' to pass a jump buffer object to the procedure
7266passed as second argument. The procedure could then use this jump
7267buffer objekt as an argument to throw.
7268
7269This mechanism has been removed since its utility doesn't motivate the
7270extra complexity it introduces.
7271
332d00f6
JB
7272** The `#/' notation for lists now provokes a warning message from Guile.
7273This syntax will be removed from Guile in the near future.
7274
7275To disable the warning message, set the GUILE_HUSH environment
7276variable to any non-empty value.
7277
8cd57bd0
JB
7278** The newline character now prints as `#\newline', following the
7279normal Scheme notation, not `#\nl'.
7280
c484bf7f
JB
7281* Changes to the gh_ interface
7282
8986901b
JB
7283** The gh_enter function now takes care of loading the Guile startup files.
7284gh_enter works by calling scm_boot_guile; see the remarks below.
7285
5424b4f7
MD
7286** Function: void gh_write (SCM x)
7287
7288Write the printed representation of the scheme object x to the current
7289output port. Corresponds to the scheme level `write'.
7290
3a97e020
MD
7291** gh_list_length renamed to gh_length.
7292
8d6787b6
MG
7293** vector handling routines
7294
7295Several major changes. In particular, gh_vector() now resembles
7296(vector ...) (with a caveat -- see manual), and gh_make_vector() now
956328d2
MG
7297exists and behaves like (make-vector ...). gh_vset() and gh_vref()
7298have been renamed gh_vector_set_x() and gh_vector_ref(). Some missing
8d6787b6
MG
7299vector-related gh_ functions have been implemented.
7300
7fee59bd
MG
7301** pair and list routines
7302
7303Implemented several of the R4RS pair and list functions that were
7304missing.
7305
171422a9
MD
7306** gh_scm2doubles, gh_doubles2scm, gh_doubles2dvect
7307
7308New function. Converts double arrays back and forth between Scheme
7309and C.
7310
c484bf7f
JB
7311* Changes to the scm_ interface
7312
8986901b
JB
7313** The function scm_boot_guile now takes care of loading the startup files.
7314
7315Guile's primary initialization function, scm_boot_guile, now takes
7316care of loading `boot-9.scm', in the `ice-9' module, to initialize
7317Guile, define the module system, and put together some standard
7318bindings. It also loads `init.scm', which is intended to hold
7319site-specific initialization code.
7320
7321Since Guile cannot operate properly until boot-9.scm is loaded, there
7322is no reason to separate loading boot-9.scm from Guile's other
7323initialization processes.
7324
7325This job used to be done by scm_compile_shell_switches, which didn't
7326make much sense; in particular, it meant that people using Guile for
7327non-shell-like applications had to jump through hoops to get Guile
7328initialized properly.
7329
7330** The function scm_compile_shell_switches no longer loads the startup files.
7331Now, Guile always loads the startup files, whenever it is initialized;
7332see the notes above for scm_boot_guile and scm_load_startup_files.
7333
7334** Function: scm_load_startup_files
7335This new function takes care of loading Guile's initialization file
7336(`boot-9.scm'), and the site initialization file, `init.scm'. Since
7337this is always called by the Guile initialization process, it's
7338probably not too useful to call this yourself, but it's there anyway.
7339
87148d9e
JB
7340** The semantics of smob marking have changed slightly.
7341
7342The smob marking function (the `mark' member of the scm_smobfuns
7343structure) is no longer responsible for setting the mark bit on the
7344smob. The generic smob handling code in the garbage collector will
7345set this bit. The mark function need only ensure that any other
7346objects the smob refers to get marked.
7347
7348Note that this change means that the smob's GC8MARK bit is typically
7349already set upon entry to the mark function. Thus, marking functions
7350which look like this:
7351
7352 {
7353 if (SCM_GC8MARKP (ptr))
7354 return SCM_BOOL_F;
7355 SCM_SETGC8MARK (ptr);
7356 ... mark objects to which the smob refers ...
7357 }
7358
7359are now incorrect, since they will return early, and fail to mark any
7360other objects the smob refers to. Some code in the Guile library used
7361to work this way.
7362
1cf84ea5
JB
7363** The semantics of the I/O port functions in scm_ptobfuns have changed.
7364
7365If you have implemented your own I/O port type, by writing the
7366functions required by the scm_ptobfuns and then calling scm_newptob,
7367you will need to change your functions slightly.
7368
7369The functions in a scm_ptobfuns structure now expect the port itself
7370as their argument; they used to expect the `stream' member of the
7371port's scm_port_table structure. This allows functions in an
7372scm_ptobfuns structure to easily access the port's cell (and any flags
7373it its CAR), and the port's scm_port_table structure.
7374
7375Guile now passes the I/O port itself as the `port' argument in the
7376following scm_ptobfuns functions:
7377
7378 int (*free) (SCM port);
7379 int (*fputc) (int, SCM port);
7380 int (*fputs) (char *, SCM port);
7381 scm_sizet (*fwrite) SCM_P ((char *ptr,
7382 scm_sizet size,
7383 scm_sizet nitems,
7384 SCM port));
7385 int (*fflush) (SCM port);
7386 int (*fgetc) (SCM port);
7387 int (*fclose) (SCM port);
7388
7389The interfaces to the `mark', `print', `equalp', and `fgets' methods
7390are unchanged.
7391
7392If you have existing code which defines its own port types, it is easy
7393to convert your code to the new interface; simply apply SCM_STREAM to
7394the port argument to yield the value you code used to expect.
7395
7396Note that since both the port and the stream have the same type in the
7397C code --- they are both SCM values --- the C compiler will not remind
7398you if you forget to update your scm_ptobfuns functions.
7399
7400
933a7411
MD
7401** Function: int scm_internal_select (int fds,
7402 SELECT_TYPE *rfds,
7403 SELECT_TYPE *wfds,
7404 SELECT_TYPE *efds,
7405 struct timeval *timeout);
7406
7407This is a replacement for the `select' function provided by the OS.
7408It enables I/O blocking and sleeping to happen for one cooperative
7409thread without blocking other threads. It also avoids busy-loops in
7410these situations. It is intended that all I/O blocking and sleeping
7411will finally go through this function. Currently, this function is
7412only available on systems providing `gettimeofday' and `select'.
7413
5424b4f7
MD
7414** Function: SCM scm_internal_stack_catch (SCM tag,
7415 scm_catch_body_t body,
7416 void *body_data,
7417 scm_catch_handler_t handler,
7418 void *handler_data)
7419
7420A new sibling to the other two C level `catch' functions
7421scm_internal_catch and scm_internal_lazy_catch. Use it if you want
7422the stack to be saved automatically into the variable `the-last-stack'
7423(scm_the_last_stack_var) on error. This is necessary if you want to
7424use advanced error reporting, such as calling scm_display_error and
7425scm_display_backtrace. (They both take a stack object as argument.)
7426
df366c26
MD
7427** Function: SCM scm_spawn_thread (scm_catch_body_t body,
7428 void *body_data,
7429 scm_catch_handler_t handler,
7430 void *handler_data)
7431
7432Spawns a new thread. It does a job similar to
7433scm_call_with_new_thread but takes arguments more suitable when
7434spawning threads from application C code.
7435
88482b31
MD
7436** The hook scm_error_callback has been removed. It was originally
7437intended as a way for the user to install his own error handler. But
7438that method works badly since it intervenes between throw and catch,
7439thereby changing the semantics of expressions like (catch #t ...).
7440The correct way to do it is to use one of the C level catch functions
7441in throw.c: scm_internal_catch/lazy_catch/stack_catch.
7442
3a97e020
MD
7443** Removed functions:
7444
7445scm_obj_length, scm_list_length, scm_list_append, scm_list_append_x,
7446scm_list_reverse, scm_list_reverse_x
7447
7448** New macros: SCM_LISTn where n is one of the integers 0-9.
7449
7450These can be used for pretty list creation from C. The idea is taken
7451from Erick Gallesio's STk.
7452
298aa6e3
MD
7453** scm_array_map renamed to scm_array_map_x
7454
527da704
MD
7455** mbstrings are now removed
7456
7457This means that the type codes scm_tc7_mb_string and
7458scm_tc7_mb_substring has been removed.
7459
8cd57bd0
JB
7460** scm_gen_putc, scm_gen_puts, scm_gen_write, and scm_gen_getc have changed.
7461
7462Since we no longer support multi-byte strings, these I/O functions
7463have been simplified, and renamed. Here are their old names, and
7464their new names and arguments:
7465
7466scm_gen_putc -> void scm_putc (int c, SCM port);
7467scm_gen_puts -> void scm_puts (char *s, SCM port);
7468scm_gen_write -> void scm_lfwrite (char *ptr, scm_sizet size, SCM port);
7469scm_gen_getc -> void scm_getc (SCM port);
7470
7471
527da704
MD
7472** The macros SCM_TYP7D and SCM_TYP7SD has been removed.
7473
7474** The macro SCM_TYP7S has taken the role of the old SCM_TYP7D
7475
7476SCM_TYP7S now masks away the bit which distinguishes substrings from
7477strings.
7478
660f41fa
MD
7479** scm_catch_body_t: Backward incompatible change!
7480
7481Body functions to scm_internal_catch and friends do not any longer
7482take a second argument. This is because it is no longer possible to
7483pass a #f arg to catch.
7484
a8e05009
JB
7485** Calls to scm_protect_object and scm_unprotect now nest properly.
7486
7487The function scm_protect_object protects its argument from being freed
7488by the garbage collector. scm_unprotect_object removes that
7489protection.
7490
7491These functions now nest properly. That is, for every object O, there
7492is a counter which scm_protect_object(O) increments and
7493scm_unprotect_object(O) decrements, if the counter is greater than
7494zero. Every object's counter is zero when it is first created. If an
7495object's counter is greater than zero, the garbage collector will not
7496reclaim its storage.
7497
7498This allows you to use scm_protect_object in your code without
7499worrying that some other function you call will call
7500scm_unprotect_object, and allow it to be freed. Assuming that the
7501functions you call are well-behaved, and unprotect only those objects
7502they protect, you can follow the same rule and have confidence that
7503objects will be freed only at appropriate times.
7504
c484bf7f
JB
7505\f
7506Changes in Guile 1.2 (released Tuesday, June 24 1997):
cf78e9e8 7507
737c9113
JB
7508* Changes to the distribution
7509
832b09ed
JB
7510** Nightly snapshots are now available from ftp.red-bean.com.
7511The old server, ftp.cyclic.com, has been relinquished to its rightful
7512owner.
7513
7514Nightly snapshots of the Guile development sources are now available via
7515anonymous FTP from ftp.red-bean.com, as /pub/guile/guile-snap.tar.gz.
7516
7517Via the web, that's: ftp://ftp.red-bean.com/pub/guile/guile-snap.tar.gz
7518For getit, that's: ftp.red-bean.com:/pub/guile/guile-snap.tar.gz
7519
0fcab5ed
JB
7520** To run Guile without installing it, the procedure has changed a bit.
7521
7522If you used a separate build directory to compile Guile, you'll need
7523to include the build directory in SCHEME_LOAD_PATH, as well as the
7524source directory. See the `INSTALL' file for examples.
7525
737c9113
JB
7526* Changes to the procedure for linking libguile with your programs
7527
94982a4e
JB
7528** The standard Guile load path for Scheme code now includes
7529$(datadir)/guile (usually /usr/local/share/guile). This means that
7530you can install your own Scheme files there, and Guile will find them.
7531(Previous versions of Guile only checked a directory whose name
7532contained the Guile version number, so you had to re-install or move
7533your Scheme sources each time you installed a fresh version of Guile.)
7534
7535The load path also includes $(datadir)/guile/site; we recommend
7536putting individual Scheme files there. If you want to install a
7537package with multiple source files, create a directory for them under
7538$(datadir)/guile.
7539
7540** Guile 1.2 will now use the Rx regular expression library, if it is
7541installed on your system. When you are linking libguile into your own
7542programs, this means you will have to link against -lguile, -lqt (if
7543you configured Guile with thread support), and -lrx.
27590f82
JB
7544
7545If you are using autoconf to generate configuration scripts for your
7546application, the following lines should suffice to add the appropriate
7547libraries to your link command:
7548
7549### Find Rx, quickthreads and libguile.
7550AC_CHECK_LIB(rx, main)
7551AC_CHECK_LIB(qt, main)
7552AC_CHECK_LIB(guile, scm_shell)
7553
94982a4e
JB
7554The Guile 1.2 distribution does not contain sources for the Rx
7555library, as Guile 1.0 did. If you want to use Rx, you'll need to
7556retrieve it from a GNU FTP site and install it separately.
7557
b83b8bee
JB
7558* Changes to Scheme functions and syntax
7559
e035e7e6
MV
7560** The dynamic linking features of Guile are now enabled by default.
7561You can disable them by giving the `--disable-dynamic-linking' option
7562to configure.
7563
e035e7e6
MV
7564 (dynamic-link FILENAME)
7565
7566 Find the object file denoted by FILENAME (a string) and link it
7567 into the running Guile application. When everything works out,
7568 return a Scheme object suitable for representing the linked object
7569 file. Otherwise an error is thrown. How object files are
7570 searched is system dependent.
7571
7572 (dynamic-object? VAL)
7573
7574 Determine whether VAL represents a dynamically linked object file.
7575
7576 (dynamic-unlink DYNOBJ)
7577
7578 Unlink the indicated object file from the application. DYNOBJ
7579 should be one of the values returned by `dynamic-link'.
7580
7581 (dynamic-func FUNCTION DYNOBJ)
7582
7583 Search the C function indicated by FUNCTION (a string or symbol)
7584 in DYNOBJ and return some Scheme object that can later be used
7585 with `dynamic-call' to actually call this function. Right now,
7586 these Scheme objects are formed by casting the address of the
7587 function to `long' and converting this number to its Scheme
7588 representation.
7589
7590 (dynamic-call FUNCTION DYNOBJ)
7591
7592 Call the C function indicated by FUNCTION and DYNOBJ. The
7593 function is passed no arguments and its return value is ignored.
7594 When FUNCTION is something returned by `dynamic-func', call that
7595 function and ignore DYNOBJ. When FUNCTION is a string (or symbol,
7596 etc.), look it up in DYNOBJ; this is equivalent to
7597
7598 (dynamic-call (dynamic-func FUNCTION DYNOBJ) #f)
7599
7600 Interrupts are deferred while the C function is executing (with
7601 SCM_DEFER_INTS/SCM_ALLOW_INTS).
7602
7603 (dynamic-args-call FUNCTION DYNOBJ ARGS)
7604
7605 Call the C function indicated by FUNCTION and DYNOBJ, but pass it
7606 some arguments and return its return value. The C function is
7607 expected to take two arguments and return an `int', just like
7608 `main':
7609
7610 int c_func (int argc, char **argv);
7611
7612 ARGS must be a list of strings and is converted into an array of
7613 `char *'. The array is passed in ARGV and its size in ARGC. The
7614 return value is converted to a Scheme number and returned from the
7615 call to `dynamic-args-call'.
7616
0fcab5ed
JB
7617When dynamic linking is disabled or not supported on your system,
7618the above functions throw errors, but they are still available.
7619
e035e7e6
MV
7620Here is a small example that works on GNU/Linux:
7621
7622 (define libc-obj (dynamic-link "libc.so"))
7623 (dynamic-args-call 'rand libc-obj '())
7624
7625See the file `libguile/DYNAMIC-LINKING' for additional comments.
7626
27590f82 7627** The #/ syntax for module names is depreciated, and will be removed
6c0201ad 7628in a future version of Guile. Instead of
27590f82
JB
7629
7630 #/foo/bar/baz
7631
7632instead write
7633
7634 (foo bar baz)
7635
7636The latter syntax is more consistent with existing Lisp practice.
7637
5dade857
MV
7638** Guile now does fancier printing of structures. Structures are the
7639underlying implementation for records, which in turn are used to
7640implement modules, so all of these object now print differently and in
7641a more informative way.
7642
161029df
JB
7643The Scheme printer will examine the builtin variable *struct-printer*
7644whenever it needs to print a structure object. When this variable is
7645not `#f' it is deemed to be a procedure and will be applied to the
7646structure object and the output port. When *struct-printer* is `#f'
7647or the procedure return `#f' the structure object will be printed in
7648the boring #<struct 80458270> form.
5dade857
MV
7649
7650This hook is used by some routines in ice-9/boot-9.scm to implement
7651type specific printing routines. Please read the comments there about
7652"printing structs".
7653
7654One of the more specific uses of structs are records. The printing
7655procedure that could be passed to MAKE-RECORD-TYPE is now actually
7656called. It should behave like a *struct-printer* procedure (described
7657above).
7658
b83b8bee
JB
7659** Guile now supports a new R4RS-compliant syntax for keywords. A
7660token of the form #:NAME, where NAME has the same syntax as a Scheme
7661symbol, is the external representation of the keyword named NAME.
7662Keyword objects print using this syntax as well, so values containing
1e5afba0
JB
7663keyword objects can be read back into Guile. When used in an
7664expression, keywords are self-quoting objects.
b83b8bee
JB
7665
7666Guile suports this read syntax, and uses this print syntax, regardless
7667of the current setting of the `keyword' read option. The `keyword'
7668read option only controls whether Guile recognizes the `:NAME' syntax,
7669which is incompatible with R4RS. (R4RS says such token represent
7670symbols.)
737c9113
JB
7671
7672** Guile has regular expression support again. Guile 1.0 included
7673functions for matching regular expressions, based on the Rx library.
7674In Guile 1.1, the Guile/Rx interface was removed to simplify the
7675distribution, and thus Guile had no regular expression support. Guile
94982a4e
JB
76761.2 again supports the most commonly used functions, and supports all
7677of SCSH's regular expression functions.
2409cdfa 7678
94982a4e
JB
7679If your system does not include a POSIX regular expression library,
7680and you have not linked Guile with a third-party regexp library such as
7681Rx, these functions will not be available. You can tell whether your
7682Guile installation includes regular expression support by checking
7683whether the `*features*' list includes the `regex' symbol.
737c9113 7684
94982a4e 7685*** regexp functions
161029df 7686
94982a4e
JB
7687By default, Guile supports POSIX extended regular expressions. That
7688means that the characters `(', `)', `+' and `?' are special, and must
7689be escaped if you wish to match the literal characters.
e1a191a8 7690
94982a4e
JB
7691This regular expression interface was modeled after that implemented
7692by SCSH, the Scheme Shell. It is intended to be upwardly compatible
7693with SCSH regular expressions.
7694
7695**** Function: string-match PATTERN STR [START]
7696 Compile the string PATTERN into a regular expression and compare
7697 it with STR. The optional numeric argument START specifies the
7698 position of STR at which to begin matching.
7699
7700 `string-match' returns a "match structure" which describes what,
7701 if anything, was matched by the regular expression. *Note Match
7702 Structures::. If STR does not match PATTERN at all,
7703 `string-match' returns `#f'.
7704
7705 Each time `string-match' is called, it must compile its PATTERN
7706argument into a regular expression structure. This operation is
7707expensive, which makes `string-match' inefficient if the same regular
7708expression is used several times (for example, in a loop). For better
7709performance, you can compile a regular expression in advance and then
7710match strings against the compiled regexp.
7711
7712**** Function: make-regexp STR [FLAGS]
7713 Compile the regular expression described by STR, and return the
7714 compiled regexp structure. If STR does not describe a legal
7715 regular expression, `make-regexp' throws a
7716 `regular-expression-syntax' error.
7717
7718 FLAGS may be the bitwise-or of one or more of the following:
7719
7720**** Constant: regexp/extended
7721 Use POSIX Extended Regular Expression syntax when interpreting
7722 STR. If not set, POSIX Basic Regular Expression syntax is used.
7723 If the FLAGS argument is omitted, we assume regexp/extended.
7724
7725**** Constant: regexp/icase
7726 Do not differentiate case. Subsequent searches using the
7727 returned regular expression will be case insensitive.
7728
7729**** Constant: regexp/newline
7730 Match-any-character operators don't match a newline.
7731
7732 A non-matching list ([^...]) not containing a newline matches a
7733 newline.
7734
7735 Match-beginning-of-line operator (^) matches the empty string
7736 immediately after a newline, regardless of whether the FLAGS
7737 passed to regexp-exec contain regexp/notbol.
7738
7739 Match-end-of-line operator ($) matches the empty string
7740 immediately before a newline, regardless of whether the FLAGS
7741 passed to regexp-exec contain regexp/noteol.
7742
7743**** Function: regexp-exec REGEXP STR [START [FLAGS]]
7744 Match the compiled regular expression REGEXP against `str'. If
7745 the optional integer START argument is provided, begin matching
7746 from that position in the string. Return a match structure
7747 describing the results of the match, or `#f' if no match could be
7748 found.
7749
7750 FLAGS may be the bitwise-or of one or more of the following:
7751
7752**** Constant: regexp/notbol
7753 The match-beginning-of-line operator always fails to match (but
7754 see the compilation flag regexp/newline above) This flag may be
7755 used when different portions of a string are passed to
7756 regexp-exec and the beginning of the string should not be
7757 interpreted as the beginning of the line.
7758
7759**** Constant: regexp/noteol
7760 The match-end-of-line operator always fails to match (but see the
7761 compilation flag regexp/newline above)
7762
7763**** Function: regexp? OBJ
7764 Return `#t' if OBJ is a compiled regular expression, or `#f'
7765 otherwise.
7766
7767 Regular expressions are commonly used to find patterns in one string
7768and replace them with the contents of another string.
7769
7770**** Function: regexp-substitute PORT MATCH [ITEM...]
7771 Write to the output port PORT selected contents of the match
7772 structure MATCH. Each ITEM specifies what should be written, and
7773 may be one of the following arguments:
7774
7775 * A string. String arguments are written out verbatim.
7776
7777 * An integer. The submatch with that number is written.
7778
7779 * The symbol `pre'. The portion of the matched string preceding
7780 the regexp match is written.
7781
7782 * The symbol `post'. The portion of the matched string
7783 following the regexp match is written.
7784
7785 PORT may be `#f', in which case nothing is written; instead,
7786 `regexp-substitute' constructs a string from the specified ITEMs
7787 and returns that.
7788
7789**** Function: regexp-substitute/global PORT REGEXP TARGET [ITEM...]
7790 Similar to `regexp-substitute', but can be used to perform global
7791 substitutions on STR. Instead of taking a match structure as an
7792 argument, `regexp-substitute/global' takes two string arguments: a
7793 REGEXP string describing a regular expression, and a TARGET string
7794 which should be matched against this regular expression.
7795
7796 Each ITEM behaves as in REGEXP-SUBSTITUTE, with the following
7797 exceptions:
7798
7799 * A function may be supplied. When this function is called, it
7800 will be passed one argument: a match structure for a given
7801 regular expression match. It should return a string to be
7802 written out to PORT.
7803
7804 * The `post' symbol causes `regexp-substitute/global' to recurse
7805 on the unmatched portion of STR. This *must* be supplied in
7806 order to perform global search-and-replace on STR; if it is
7807 not present among the ITEMs, then `regexp-substitute/global'
7808 will return after processing a single match.
7809
7810*** Match Structures
7811
7812 A "match structure" is the object returned by `string-match' and
7813`regexp-exec'. It describes which portion of a string, if any, matched
7814the given regular expression. Match structures include: a reference to
7815the string that was checked for matches; the starting and ending
7816positions of the regexp match; and, if the regexp included any
7817parenthesized subexpressions, the starting and ending positions of each
7818submatch.
7819
7820 In each of the regexp match functions described below, the `match'
7821argument must be a match structure returned by a previous call to
7822`string-match' or `regexp-exec'. Most of these functions return some
7823information about the original target string that was matched against a
7824regular expression; we will call that string TARGET for easy reference.
7825
7826**** Function: regexp-match? OBJ
7827 Return `#t' if OBJ is a match structure returned by a previous
7828 call to `regexp-exec', or `#f' otherwise.
7829
7830**** Function: match:substring MATCH [N]
7831 Return the portion of TARGET matched by subexpression number N.
7832 Submatch 0 (the default) represents the entire regexp match. If
7833 the regular expression as a whole matched, but the subexpression
7834 number N did not match, return `#f'.
7835
7836**** Function: match:start MATCH [N]
7837 Return the starting position of submatch number N.
7838
7839**** Function: match:end MATCH [N]
7840 Return the ending position of submatch number N.
7841
7842**** Function: match:prefix MATCH
7843 Return the unmatched portion of TARGET preceding the regexp match.
7844
7845**** Function: match:suffix MATCH
7846 Return the unmatched portion of TARGET following the regexp match.
7847
7848**** Function: match:count MATCH
7849 Return the number of parenthesized subexpressions from MATCH.
7850 Note that the entire regular expression match itself counts as a
7851 subexpression, and failed submatches are included in the count.
7852
7853**** Function: match:string MATCH
7854 Return the original TARGET string.
7855
7856*** Backslash Escapes
7857
7858 Sometimes you will want a regexp to match characters like `*' or `$'
7859exactly. For example, to check whether a particular string represents
7860a menu entry from an Info node, it would be useful to match it against
7861a regexp like `^* [^:]*::'. However, this won't work; because the
7862asterisk is a metacharacter, it won't match the `*' at the beginning of
7863the string. In this case, we want to make the first asterisk un-magic.
7864
7865 You can do this by preceding the metacharacter with a backslash
7866character `\'. (This is also called "quoting" the metacharacter, and
7867is known as a "backslash escape".) When Guile sees a backslash in a
7868regular expression, it considers the following glyph to be an ordinary
7869character, no matter what special meaning it would ordinarily have.
7870Therefore, we can make the above example work by changing the regexp to
7871`^\* [^:]*::'. The `\*' sequence tells the regular expression engine
7872to match only a single asterisk in the target string.
7873
7874 Since the backslash is itself a metacharacter, you may force a
7875regexp to match a backslash in the target string by preceding the
7876backslash with itself. For example, to find variable references in a
7877TeX program, you might want to find occurrences of the string `\let\'
7878followed by any number of alphabetic characters. The regular expression
7879`\\let\\[A-Za-z]*' would do this: the double backslashes in the regexp
7880each match a single backslash in the target string.
7881
7882**** Function: regexp-quote STR
7883 Quote each special character found in STR with a backslash, and
7884 return the resulting string.
7885
7886 *Very important:* Using backslash escapes in Guile source code (as
7887in Emacs Lisp or C) can be tricky, because the backslash character has
7888special meaning for the Guile reader. For example, if Guile encounters
7889the character sequence `\n' in the middle of a string while processing
7890Scheme code, it replaces those characters with a newline character.
7891Similarly, the character sequence `\t' is replaced by a horizontal tab.
7892Several of these "escape sequences" are processed by the Guile reader
7893before your code is executed. Unrecognized escape sequences are
7894ignored: if the characters `\*' appear in a string, they will be
7895translated to the single character `*'.
7896
7897 This translation is obviously undesirable for regular expressions,
7898since we want to be able to include backslashes in a string in order to
7899escape regexp metacharacters. Therefore, to make sure that a backslash
7900is preserved in a string in your Guile program, you must use *two*
7901consecutive backslashes:
7902
7903 (define Info-menu-entry-pattern (make-regexp "^\\* [^:]*"))
7904
7905 The string in this example is preprocessed by the Guile reader before
7906any code is executed. The resulting argument to `make-regexp' is the
7907string `^\* [^:]*', which is what we really want.
7908
7909 This also means that in order to write a regular expression that
7910matches a single backslash character, the regular expression string in
7911the source code must include *four* backslashes. Each consecutive pair
7912of backslashes gets translated by the Guile reader to a single
7913backslash, and the resulting double-backslash is interpreted by the
7914regexp engine as matching a single backslash character. Hence:
7915
7916 (define tex-variable-pattern (make-regexp "\\\\let\\\\=[A-Za-z]*"))
7917
7918 The reason for the unwieldiness of this syntax is historical. Both
7919regular expression pattern matchers and Unix string processing systems
7920have traditionally used backslashes with the special meanings described
7921above. The POSIX regular expression specification and ANSI C standard
7922both require these semantics. Attempting to abandon either convention
7923would cause other kinds of compatibility problems, possibly more severe
7924ones. Therefore, without extending the Scheme reader to support
7925strings with different quoting conventions (an ungainly and confusing
7926extension when implemented in other languages), we must adhere to this
7927cumbersome escape syntax.
7928
7ad3c1e7
GH
7929* Changes to the gh_ interface
7930
7931* Changes to the scm_ interface
7932
7933* Changes to system call interfaces:
94982a4e 7934
7ad3c1e7 7935** The value returned by `raise' is now unspecified. It throws an exception
e1a191a8
GH
7936if an error occurs.
7937
94982a4e 7938*** A new procedure `sigaction' can be used to install signal handlers
115b09a5
GH
7939
7940(sigaction signum [action] [flags])
7941
7942signum is the signal number, which can be specified using the value
7943of SIGINT etc.
7944
7945If action is omitted, sigaction returns a pair: the CAR is the current
7946signal hander, which will be either an integer with the value SIG_DFL
7947(default action) or SIG_IGN (ignore), or the Scheme procedure which
7948handles the signal, or #f if a non-Scheme procedure handles the
7949signal. The CDR contains the current sigaction flags for the handler.
7950
7951If action is provided, it is installed as the new handler for signum.
7952action can be a Scheme procedure taking one argument, or the value of
7953SIG_DFL (default action) or SIG_IGN (ignore), or #f to restore
7954whatever signal handler was installed before sigaction was first used.
7955Flags can optionally be specified for the new handler (SA_RESTART is
7956always used if the system provides it, so need not be specified.) The
7957return value is a pair with information about the old handler as
7958described above.
7959
7960This interface does not provide access to the "signal blocking"
7961facility. Maybe this is not needed, since the thread support may
7962provide solutions to the problem of consistent access to data
7963structures.
e1a191a8 7964
94982a4e 7965*** A new procedure `flush-all-ports' is equivalent to running
89ea5b7c
GH
7966`force-output' on every port open for output.
7967
94982a4e
JB
7968** Guile now provides information on how it was built, via the new
7969global variable, %guile-build-info. This variable records the values
7970of the standard GNU makefile directory variables as an assocation
7971list, mapping variable names (symbols) onto directory paths (strings).
7972For example, to find out where the Guile link libraries were
7973installed, you can say:
7974
7975guile -c "(display (assq-ref %guile-build-info 'libdir)) (newline)"
7976
7977
7978* Changes to the scm_ interface
7979
7980** The new function scm_handle_by_message_noexit is just like the
7981existing scm_handle_by_message function, except that it doesn't call
7982exit to terminate the process. Instead, it prints a message and just
7983returns #f. This might be a more appropriate catch-all handler for
7984new dynamic roots and threads.
7985
cf78e9e8 7986\f
c484bf7f 7987Changes in Guile 1.1 (released Friday, May 16 1997):
f3b1485f
JB
7988
7989* Changes to the distribution.
7990
7991The Guile 1.0 distribution has been split up into several smaller
7992pieces:
7993guile-core --- the Guile interpreter itself.
7994guile-tcltk --- the interface between the Guile interpreter and
7995 Tcl/Tk; Tcl is an interpreter for a stringy language, and Tk
7996 is a toolkit for building graphical user interfaces.
7997guile-rgx-ctax --- the interface between Guile and the Rx regular
7998 expression matcher, and the translator for the Ctax
7999 programming language. These are packaged together because the
8000 Ctax translator uses Rx to parse Ctax source code.
8001
095936d2
JB
8002This NEWS file describes the changes made to guile-core since the 1.0
8003release.
8004
48d224d7
JB
8005We no longer distribute the documentation, since it was either out of
8006date, or incomplete. As soon as we have current documentation, we
8007will distribute it.
8008
0fcab5ed
JB
8009
8010
f3b1485f
JB
8011* Changes to the stand-alone interpreter
8012
48d224d7
JB
8013** guile now accepts command-line arguments compatible with SCSH, Olin
8014Shivers' Scheme Shell.
8015
8016In general, arguments are evaluated from left to right, but there are
8017exceptions. The following switches stop argument processing, and
8018stash all remaining command-line arguments as the value returned by
8019the (command-line) function.
8020 -s SCRIPT load Scheme source code from FILE, and exit
8021 -c EXPR evalute Scheme expression EXPR, and exit
8022 -- stop scanning arguments; run interactively
8023
8024The switches below are processed as they are encountered.
8025 -l FILE load Scheme source code from FILE
8026 -e FUNCTION after reading script, apply FUNCTION to
8027 command line arguments
8028 -ds do -s script at this point
8029 --emacs enable Emacs protocol (experimental)
8030 -h, --help display this help and exit
8031 -v, --version display version information and exit
8032 \ read arguments from following script lines
8033
8034So, for example, here is a Guile script named `ekko' (thanks, Olin)
8035which re-implements the traditional "echo" command:
8036
8037#!/usr/local/bin/guile -s
8038!#
8039(define (main args)
8040 (map (lambda (arg) (display arg) (display " "))
8041 (cdr args))
8042 (newline))
8043
8044(main (command-line))
8045
8046Suppose we invoke this script as follows:
8047
8048 ekko a speckled gecko
8049
8050Through the magic of Unix script processing (triggered by the `#!'
8051token at the top of the file), /usr/local/bin/guile receives the
8052following list of command-line arguments:
8053
8054 ("-s" "./ekko" "a" "speckled" "gecko")
8055
8056Unix inserts the name of the script after the argument specified on
8057the first line of the file (in this case, "-s"), and then follows that
8058with the arguments given to the script. Guile loads the script, which
8059defines the `main' function, and then applies it to the list of
8060remaining command-line arguments, ("a" "speckled" "gecko").
8061
095936d2
JB
8062In Unix, the first line of a script file must take the following form:
8063
8064#!INTERPRETER ARGUMENT
8065
8066where INTERPRETER is the absolute filename of the interpreter
8067executable, and ARGUMENT is a single command-line argument to pass to
8068the interpreter.
8069
8070You may only pass one argument to the interpreter, and its length is
8071limited. These restrictions can be annoying to work around, so Guile
8072provides a general mechanism (borrowed from, and compatible with,
8073SCSH) for circumventing them.
8074
8075If the ARGUMENT in a Guile script is a single backslash character,
8076`\', Guile will open the script file, parse arguments from its second
8077and subsequent lines, and replace the `\' with them. So, for example,
8078here is another implementation of the `ekko' script:
8079
8080#!/usr/local/bin/guile \
8081-e main -s
8082!#
8083(define (main args)
8084 (for-each (lambda (arg) (display arg) (display " "))
8085 (cdr args))
8086 (newline))
8087
8088If the user invokes this script as follows:
8089
8090 ekko a speckled gecko
8091
8092Unix expands this into
8093
8094 /usr/local/bin/guile \ ekko a speckled gecko
8095
8096When Guile sees the `\' argument, it replaces it with the arguments
8097read from the second line of the script, producing:
8098
8099 /usr/local/bin/guile -e main -s ekko a speckled gecko
8100
8101This tells Guile to load the `ekko' script, and apply the function
8102`main' to the argument list ("a" "speckled" "gecko").
8103
8104Here is how Guile parses the command-line arguments:
8105- Each space character terminates an argument. This means that two
8106 spaces in a row introduce an empty-string argument.
8107- The tab character is not permitted (unless you quote it with the
8108 backslash character, as described below), to avoid confusion.
8109- The newline character terminates the sequence of arguments, and will
8110 also terminate a final non-empty argument. (However, a newline
8111 following a space will not introduce a final empty-string argument;
8112 it only terminates the argument list.)
8113- The backslash character is the escape character. It escapes
8114 backslash, space, tab, and newline. The ANSI C escape sequences
8115 like \n and \t are also supported. These produce argument
8116 constituents; the two-character combination \n doesn't act like a
8117 terminating newline. The escape sequence \NNN for exactly three
8118 octal digits reads as the character whose ASCII code is NNN. As
8119 above, characters produced this way are argument constituents.
8120 Backslash followed by other characters is not allowed.
8121
48d224d7
JB
8122* Changes to the procedure for linking libguile with your programs
8123
8124** Guile now builds and installs a shared guile library, if your
8125system support shared libraries. (It still builds a static library on
8126all systems.) Guile automatically detects whether your system
8127supports shared libraries. To prevent Guile from buildisg shared
8128libraries, pass the `--disable-shared' flag to the configure script.
8129
8130Guile takes longer to compile when it builds shared libraries, because
8131it must compile every file twice --- once to produce position-
8132independent object code, and once to produce normal object code.
8133
8134** The libthreads library has been merged into libguile.
8135
8136To link a program against Guile, you now need only link against
8137-lguile and -lqt; -lthreads is no longer needed. If you are using
8138autoconf to generate configuration scripts for your application, the
8139following lines should suffice to add the appropriate libraries to
8140your link command:
8141
8142### Find quickthreads and libguile.
8143AC_CHECK_LIB(qt, main)
8144AC_CHECK_LIB(guile, scm_shell)
f3b1485f
JB
8145
8146* Changes to Scheme functions
8147
095936d2
JB
8148** Guile Scheme's special syntax for keyword objects is now optional,
8149and disabled by default.
8150
8151The syntax variation from R4RS made it difficult to port some
8152interesting packages to Guile. The routines which accepted keyword
8153arguments (mostly in the module system) have been modified to also
8154accept symbols whose names begin with `:'.
8155
8156To change the keyword syntax, you must first import the (ice-9 debug)
8157module:
8158 (use-modules (ice-9 debug))
8159
8160Then you can enable the keyword syntax as follows:
8161 (read-set! keywords 'prefix)
8162
8163To disable keyword syntax, do this:
8164 (read-set! keywords #f)
8165
8166** Many more primitive functions accept shared substrings as
8167arguments. In the past, these functions required normal, mutable
8168strings as arguments, although they never made use of this
8169restriction.
8170
8171** The uniform array functions now operate on byte vectors. These
8172functions are `array-fill!', `serial-array-copy!', `array-copy!',
8173`serial-array-map', `array-map', `array-for-each', and
8174`array-index-map!'.
8175
8176** The new functions `trace' and `untrace' implement simple debugging
8177support for Scheme functions.
8178
8179The `trace' function accepts any number of procedures as arguments,
8180and tells the Guile interpreter to display each procedure's name and
8181arguments each time the procedure is invoked. When invoked with no
8182arguments, `trace' returns the list of procedures currently being
8183traced.
8184
8185The `untrace' function accepts any number of procedures as arguments,
8186and tells the Guile interpreter not to trace them any more. When
8187invoked with no arguments, `untrace' untraces all curretly traced
8188procedures.
8189
8190The tracing in Guile has an advantage over most other systems: we
8191don't create new procedure objects, but mark the procedure objects
8192themselves. This means that anonymous and internal procedures can be
8193traced.
8194
8195** The function `assert-repl-prompt' has been renamed to
8196`set-repl-prompt!'. It takes one argument, PROMPT.
8197- If PROMPT is #f, the Guile read-eval-print loop will not prompt.
8198- If PROMPT is a string, we use it as a prompt.
8199- If PROMPT is a procedure accepting no arguments, we call it, and
8200 display the result as a prompt.
8201- Otherwise, we display "> ".
8202
8203** The new function `eval-string' reads Scheme expressions from a
8204string and evaluates them, returning the value of the last expression
8205in the string. If the string contains no expressions, it returns an
8206unspecified value.
8207
8208** The new function `thunk?' returns true iff its argument is a
8209procedure of zero arguments.
8210
8211** `defined?' is now a builtin function, instead of syntax. This
8212means that its argument should be quoted. It returns #t iff its
8213argument is bound in the current module.
8214
8215** The new syntax `use-modules' allows you to add new modules to your
8216environment without re-typing a complete `define-module' form. It
8217accepts any number of module names as arguments, and imports their
8218public bindings into the current module.
8219
8220** The new function (module-defined? NAME MODULE) returns true iff
8221NAME, a symbol, is defined in MODULE, a module object.
8222
8223** The new function `builtin-bindings' creates and returns a hash
8224table containing copies of all the root module's bindings.
8225
8226** The new function `builtin-weak-bindings' does the same as
8227`builtin-bindings', but creates a doubly-weak hash table.
8228
8229** The `equal?' function now considers variable objects to be
8230equivalent if they have the same name and the same value.
8231
8232** The new function `command-line' returns the command-line arguments
8233given to Guile, as a list of strings.
8234
8235When using guile as a script interpreter, `command-line' returns the
8236script's arguments; those processed by the interpreter (like `-s' or
8237`-c') are omitted. (In other words, you get the normal, expected
8238behavior.) Any application that uses scm_shell to process its
8239command-line arguments gets this behavior as well.
8240
8241** The new function `load-user-init' looks for a file called `.guile'
8242in the user's home directory, and loads it if it exists. This is
8243mostly for use by the code generated by scm_compile_shell_switches,
8244but we thought it might also be useful in other circumstances.
8245
8246** The new function `log10' returns the base-10 logarithm of its
8247argument.
8248
8249** Changes to I/O functions
8250
6c0201ad 8251*** The functions `read', `primitive-load', `read-and-eval!', and
095936d2
JB
8252`primitive-load-path' no longer take optional arguments controlling
8253case insensitivity and a `#' parser.
8254
8255Case sensitivity is now controlled by a read option called
8256`case-insensitive'. The user can add new `#' syntaxes with the
8257`read-hash-extend' function (see below).
8258
8259*** The new function `read-hash-extend' allows the user to change the
8260syntax of Guile Scheme in a somewhat controlled way.
8261
8262(read-hash-extend CHAR PROC)
8263 When parsing S-expressions, if we read a `#' character followed by
8264 the character CHAR, use PROC to parse an object from the stream.
8265 If PROC is #f, remove any parsing procedure registered for CHAR.
8266
8267 The reader applies PROC to two arguments: CHAR and an input port.
8268
6c0201ad 8269*** The new functions read-delimited and read-delimited! provide a
095936d2
JB
8270general mechanism for doing delimited input on streams.
8271
8272(read-delimited DELIMS [PORT HANDLE-DELIM])
8273 Read until we encounter one of the characters in DELIMS (a string),
8274 or end-of-file. PORT is the input port to read from; it defaults to
8275 the current input port. The HANDLE-DELIM parameter determines how
8276 the terminating character is handled; it should be one of the
8277 following symbols:
8278
8279 'trim omit delimiter from result
8280 'peek leave delimiter character in input stream
8281 'concat append delimiter character to returned value
8282 'split return a pair: (RESULT . TERMINATOR)
8283
8284 HANDLE-DELIM defaults to 'peek.
8285
8286(read-delimited! DELIMS BUF [PORT HANDLE-DELIM START END])
8287 A side-effecting variant of `read-delimited'.
8288
8289 The data is written into the string BUF at the indices in the
8290 half-open interval [START, END); the default interval is the whole
8291 string: START = 0 and END = (string-length BUF). The values of
8292 START and END must specify a well-defined interval in BUF, i.e.
8293 0 <= START <= END <= (string-length BUF).
8294
8295 It returns NBYTES, the number of bytes read. If the buffer filled
8296 up without a delimiter character being found, it returns #f. If the
8297 port is at EOF when the read starts, it returns the EOF object.
8298
8299 If an integer is returned (i.e., the read is successfully terminated
8300 by reading a delimiter character), then the HANDLE-DELIM parameter
8301 determines how to handle the terminating character. It is described
8302 above, and defaults to 'peek.
8303
8304(The descriptions of these functions were borrowed from the SCSH
8305manual, by Olin Shivers and Brian Carlstrom.)
8306
8307*** The `%read-delimited!' function is the primitive used to implement
8308`read-delimited' and `read-delimited!'.
8309
8310(%read-delimited! DELIMS BUF GOBBLE? [PORT START END])
8311
8312This returns a pair of values: (TERMINATOR . NUM-READ).
8313- TERMINATOR describes why the read was terminated. If it is a
8314 character or the eof object, then that is the value that terminated
8315 the read. If it is #f, the function filled the buffer without finding
8316 a delimiting character.
8317- NUM-READ is the number of characters read into BUF.
8318
8319If the read is successfully terminated by reading a delimiter
8320character, then the gobble? parameter determines what to do with the
8321terminating character. If true, the character is removed from the
8322input stream; if false, the character is left in the input stream
8323where a subsequent read operation will retrieve it. In either case,
8324the character is also the first value returned by the procedure call.
8325
8326(The descriptions of this function was borrowed from the SCSH manual,
8327by Olin Shivers and Brian Carlstrom.)
8328
8329*** The `read-line' and `read-line!' functions have changed; they now
8330trim the terminator by default; previously they appended it to the
8331returned string. For the old behavior, use (read-line PORT 'concat).
8332
8333*** The functions `uniform-array-read!' and `uniform-array-write!' now
8334take new optional START and END arguments, specifying the region of
8335the array to read and write.
8336
f348c807
JB
8337*** The `ungetc-char-ready?' function has been removed. We feel it's
8338inappropriate for an interface to expose implementation details this
8339way.
095936d2
JB
8340
8341** Changes to the Unix library and system call interface
8342
8343*** The new fcntl function provides access to the Unix `fcntl' system
8344call.
8345
8346(fcntl PORT COMMAND VALUE)
8347 Apply COMMAND to PORT's file descriptor, with VALUE as an argument.
8348 Values for COMMAND are:
8349
8350 F_DUPFD duplicate a file descriptor
8351 F_GETFD read the descriptor's close-on-exec flag
8352 F_SETFD set the descriptor's close-on-exec flag to VALUE
8353 F_GETFL read the descriptor's flags, as set on open
8354 F_SETFL set the descriptor's flags, as set on open to VALUE
8355 F_GETOWN return the process ID of a socket's owner, for SIGIO
8356 F_SETOWN set the process that owns a socket to VALUE, for SIGIO
8357 FD_CLOEXEC not sure what this is
8358
8359For details, see the documentation for the fcntl system call.
8360
8361*** The arguments to `select' have changed, for compatibility with
8362SCSH. The TIMEOUT parameter may now be non-integral, yielding the
8363expected behavior. The MILLISECONDS parameter has been changed to
8364MICROSECONDS, to more closely resemble the underlying system call.
8365The RVEC, WVEC, and EVEC arguments can now be vectors; the type of the
8366corresponding return set will be the same.
8367
8368*** The arguments to the `mknod' system call have changed. They are
8369now:
8370
8371(mknod PATH TYPE PERMS DEV)
8372 Create a new file (`node') in the file system. PATH is the name of
8373 the file to create. TYPE is the kind of file to create; it should
8374 be 'fifo, 'block-special, or 'char-special. PERMS specifies the
8375 permission bits to give the newly created file. If TYPE is
8376 'block-special or 'char-special, DEV specifies which device the
8377 special file refers to; its interpretation depends on the kind of
8378 special file being created.
8379
8380*** The `fork' function has been renamed to `primitive-fork', to avoid
8381clashing with various SCSH forks.
8382
8383*** The `recv' and `recvfrom' functions have been renamed to `recv!'
8384and `recvfrom!'. They no longer accept a size for a second argument;
8385you must pass a string to hold the received value. They no longer
8386return the buffer. Instead, `recv' returns the length of the message
8387received, and `recvfrom' returns a pair containing the packet's length
6c0201ad 8388and originating address.
095936d2
JB
8389
8390*** The file descriptor datatype has been removed, as have the
8391`read-fd', `write-fd', `close', `lseek', and `dup' functions.
8392We plan to replace these functions with a SCSH-compatible interface.
8393
8394*** The `create' function has been removed; it's just a special case
8395of `open'.
8396
8397*** There are new functions to break down process termination status
8398values. In the descriptions below, STATUS is a value returned by
8399`waitpid'.
8400
8401(status:exit-val STATUS)
8402 If the child process exited normally, this function returns the exit
8403 code for the child process (i.e., the value passed to exit, or
8404 returned from main). If the child process did not exit normally,
8405 this function returns #f.
8406
8407(status:stop-sig STATUS)
8408 If the child process was suspended by a signal, this function
8409 returns the signal that suspended the child. Otherwise, it returns
8410 #f.
8411
8412(status:term-sig STATUS)
8413 If the child process terminated abnormally, this function returns
8414 the signal that terminated the child. Otherwise, this function
8415 returns false.
8416
8417POSIX promises that exactly one of these functions will return true on
8418a valid STATUS value.
8419
8420These functions are compatible with SCSH.
8421
8422*** There are new accessors and setters for the broken-out time vectors
48d224d7
JB
8423returned by `localtime', `gmtime', and that ilk. They are:
8424
8425 Component Accessor Setter
8426 ========================= ============ ============
8427 seconds tm:sec set-tm:sec
8428 minutes tm:min set-tm:min
8429 hours tm:hour set-tm:hour
8430 day of the month tm:mday set-tm:mday
8431 month tm:mon set-tm:mon
8432 year tm:year set-tm:year
8433 day of the week tm:wday set-tm:wday
8434 day in the year tm:yday set-tm:yday
8435 daylight saving time tm:isdst set-tm:isdst
8436 GMT offset, seconds tm:gmtoff set-tm:gmtoff
8437 name of time zone tm:zone set-tm:zone
8438
095936d2
JB
8439*** There are new accessors for the vectors returned by `uname',
8440describing the host system:
48d224d7
JB
8441
8442 Component Accessor
8443 ============================================== ================
8444 name of the operating system implementation utsname:sysname
8445 network name of this machine utsname:nodename
8446 release level of the operating system utsname:release
8447 version level of the operating system utsname:version
8448 machine hardware platform utsname:machine
8449
095936d2
JB
8450*** There are new accessors for the vectors returned by `getpw',
8451`getpwnam', `getpwuid', and `getpwent', describing entries from the
8452system's user database:
8453
8454 Component Accessor
8455 ====================== =================
8456 user name passwd:name
8457 user password passwd:passwd
8458 user id passwd:uid
8459 group id passwd:gid
8460 real name passwd:gecos
8461 home directory passwd:dir
8462 shell program passwd:shell
8463
8464*** There are new accessors for the vectors returned by `getgr',
8465`getgrnam', `getgrgid', and `getgrent', describing entries from the
8466system's group database:
8467
8468 Component Accessor
8469 ======================= ============
8470 group name group:name
8471 group password group:passwd
8472 group id group:gid
8473 group members group:mem
8474
8475*** There are new accessors for the vectors returned by `gethost',
8476`gethostbyaddr', `gethostbyname', and `gethostent', describing
8477internet hosts:
8478
8479 Component Accessor
8480 ========================= ===============
8481 official name of host hostent:name
8482 alias list hostent:aliases
8483 host address type hostent:addrtype
8484 length of address hostent:length
8485 list of addresses hostent:addr-list
8486
8487*** There are new accessors for the vectors returned by `getnet',
8488`getnetbyaddr', `getnetbyname', and `getnetent', describing internet
8489networks:
8490
8491 Component Accessor
8492 ========================= ===============
8493 official name of net netent:name
8494 alias list netent:aliases
8495 net number type netent:addrtype
8496 net number netent:net
8497
8498*** There are new accessors for the vectors returned by `getproto',
8499`getprotobyname', `getprotobynumber', and `getprotoent', describing
8500internet protocols:
8501
8502 Component Accessor
8503 ========================= ===============
8504 official protocol name protoent:name
8505 alias list protoent:aliases
8506 protocol number protoent:proto
8507
8508*** There are new accessors for the vectors returned by `getserv',
8509`getservbyname', `getservbyport', and `getservent', describing
8510internet protocols:
8511
8512 Component Accessor
8513 ========================= ===============
6c0201ad 8514 official service name servent:name
095936d2 8515 alias list servent:aliases
6c0201ad
TTN
8516 port number servent:port
8517 protocol to use servent:proto
095936d2
JB
8518
8519*** There are new accessors for the sockaddr structures returned by
8520`accept', `getsockname', `getpeername', `recvfrom!':
8521
8522 Component Accessor
8523 ======================================== ===============
6c0201ad 8524 address format (`family') sockaddr:fam
095936d2
JB
8525 path, for file domain addresses sockaddr:path
8526 address, for internet domain addresses sockaddr:addr
8527 TCP or UDP port, for internet sockaddr:port
8528
8529*** The `getpwent', `getgrent', `gethostent', `getnetent',
8530`getprotoent', and `getservent' functions now return #f at the end of
8531the user database. (They used to throw an exception.)
8532
8533Note that calling MUMBLEent function is equivalent to calling the
8534corresponding MUMBLE function with no arguments.
8535
8536*** The `setpwent', `setgrent', `sethostent', `setnetent',
8537`setprotoent', and `setservent' routines now take no arguments.
8538
8539*** The `gethost', `getproto', `getnet', and `getserv' functions now
8540provide more useful information when they throw an exception.
8541
8542*** The `lnaof' function has been renamed to `inet-lnaof'.
8543
8544*** Guile now claims to have the `current-time' feature.
8545
8546*** The `mktime' function now takes an optional second argument ZONE,
8547giving the time zone to use for the conversion. ZONE should be a
8548string, in the same format as expected for the "TZ" environment variable.
8549
8550*** The `strptime' function now returns a pair (TIME . COUNT), where
8551TIME is the parsed time as a vector, and COUNT is the number of
8552characters from the string left unparsed. This function used to
8553return the remaining characters as a string.
8554
8555*** The `gettimeofday' function has replaced the old `time+ticks' function.
8556The return value is now (SECONDS . MICROSECONDS); the fractional
8557component is no longer expressed in "ticks".
8558
8559*** The `ticks/sec' constant has been removed, in light of the above change.
6685dc83 8560
ea00ecba
MG
8561* Changes to the gh_ interface
8562
8563** gh_eval_str() now returns an SCM object which is the result of the
8564evaluation
8565
aaef0d2a
MG
8566** gh_scm2str() now copies the Scheme data to a caller-provided C
8567array
8568
8569** gh_scm2newstr() now makes a C array, copies the Scheme data to it,
8570and returns the array
8571
8572** gh_scm2str0() is gone: there is no need to distinguish
8573null-terminated from non-null-terminated, since gh_scm2newstr() allows
8574the user to interpret the data both ways.
8575
f3b1485f
JB
8576* Changes to the scm_ interface
8577
095936d2
JB
8578** The new function scm_symbol_value0 provides an easy way to get a
8579symbol's value from C code:
8580
8581SCM scm_symbol_value0 (char *NAME)
8582 Return the value of the symbol named by the null-terminated string
8583 NAME in the current module. If the symbol named NAME is unbound in
8584 the current module, return SCM_UNDEFINED.
8585
8586** The new function scm_sysintern0 creates new top-level variables,
8587without assigning them a value.
8588
8589SCM scm_sysintern0 (char *NAME)
8590 Create a new Scheme top-level variable named NAME. NAME is a
8591 null-terminated string. Return the variable's value cell.
8592
8593** The function scm_internal_catch is the guts of catch. It handles
8594all the mechanics of setting up a catch target, invoking the catch
8595body, and perhaps invoking the handler if the body does a throw.
8596
8597The function is designed to be usable from C code, but is general
8598enough to implement all the semantics Guile Scheme expects from throw.
8599
8600TAG is the catch tag. Typically, this is a symbol, but this function
8601doesn't actually care about that.
8602
8603BODY is a pointer to a C function which runs the body of the catch;
8604this is the code you can throw from. We call it like this:
8605 BODY (BODY_DATA, JMPBUF)
8606where:
8607 BODY_DATA is just the BODY_DATA argument we received; we pass it
8608 through to BODY as its first argument. The caller can make
8609 BODY_DATA point to anything useful that BODY might need.
8610 JMPBUF is the Scheme jmpbuf object corresponding to this catch,
8611 which we have just created and initialized.
8612
8613HANDLER is a pointer to a C function to deal with a throw to TAG,
8614should one occur. We call it like this:
8615 HANDLER (HANDLER_DATA, THROWN_TAG, THROW_ARGS)
8616where
8617 HANDLER_DATA is the HANDLER_DATA argument we recevied; it's the
8618 same idea as BODY_DATA above.
8619 THROWN_TAG is the tag that the user threw to; usually this is
8620 TAG, but it could be something else if TAG was #t (i.e., a
8621 catch-all), or the user threw to a jmpbuf.
8622 THROW_ARGS is the list of arguments the user passed to the THROW
8623 function.
8624
8625BODY_DATA is just a pointer we pass through to BODY. HANDLER_DATA
8626is just a pointer we pass through to HANDLER. We don't actually
8627use either of those pointers otherwise ourselves. The idea is
8628that, if our caller wants to communicate something to BODY or
8629HANDLER, it can pass a pointer to it as MUMBLE_DATA, which BODY and
8630HANDLER can then use. Think of it as a way to make BODY and
8631HANDLER closures, not just functions; MUMBLE_DATA points to the
8632enclosed variables.
8633
8634Of course, it's up to the caller to make sure that any data a
8635MUMBLE_DATA needs is protected from GC. A common way to do this is
8636to make MUMBLE_DATA a pointer to data stored in an automatic
8637structure variable; since the collector must scan the stack for
8638references anyway, this assures that any references in MUMBLE_DATA
8639will be found.
8640
8641** The new function scm_internal_lazy_catch is exactly like
8642scm_internal_catch, except:
8643
8644- It does not unwind the stack (this is the major difference).
8645- If handler returns, its value is returned from the throw.
8646- BODY always receives #f as its JMPBUF argument (since there's no
8647 jmpbuf associated with a lazy catch, because we don't unwind the
8648 stack.)
8649
8650** scm_body_thunk is a new body function you can pass to
8651scm_internal_catch if you want the body to be like Scheme's `catch'
8652--- a thunk, or a function of one argument if the tag is #f.
8653
8654BODY_DATA is a pointer to a scm_body_thunk_data structure, which
8655contains the Scheme procedure to invoke as the body, and the tag
8656we're catching. If the tag is #f, then we pass JMPBUF (created by
8657scm_internal_catch) to the body procedure; otherwise, the body gets
8658no arguments.
8659
8660** scm_handle_by_proc is a new handler function you can pass to
8661scm_internal_catch if you want the handler to act like Scheme's catch
8662--- call a procedure with the tag and the throw arguments.
8663
8664If the user does a throw to this catch, this function runs a handler
8665procedure written in Scheme. HANDLER_DATA is a pointer to an SCM
8666variable holding the Scheme procedure object to invoke. It ought to
8667be a pointer to an automatic variable (i.e., one living on the stack),
8668or the procedure object should be otherwise protected from GC.
8669
8670** scm_handle_by_message is a new handler function to use with
8671`scm_internal_catch' if you want Guile to print a message and die.
8672It's useful for dealing with throws to uncaught keys at the top level.
8673
8674HANDLER_DATA, if non-zero, is assumed to be a char * pointing to a
8675message header to print; if zero, we use "guile" instead. That
8676text is followed by a colon, then the message described by ARGS.
8677
8678** The return type of scm_boot_guile is now void; the function does
8679not return a value, and indeed, never returns at all.
8680
f3b1485f
JB
8681** The new function scm_shell makes it easy for user applications to
8682process command-line arguments in a way that is compatible with the
8683stand-alone guile interpreter (which is in turn compatible with SCSH,
8684the Scheme shell).
8685
8686To use the scm_shell function, first initialize any guile modules
8687linked into your application, and then call scm_shell with the values
7ed46dc8 8688of ARGC and ARGV your `main' function received. scm_shell will add
f3b1485f
JB
8689any SCSH-style meta-arguments from the top of the script file to the
8690argument vector, and then process the command-line arguments. This
8691generally means loading a script file or starting up an interactive
8692command interpreter. For details, see "Changes to the stand-alone
8693interpreter" above.
8694
095936d2 8695** The new functions scm_get_meta_args and scm_count_argv help you
6c0201ad 8696implement the SCSH-style meta-argument, `\'.
095936d2
JB
8697
8698char **scm_get_meta_args (int ARGC, char **ARGV)
8699 If the second element of ARGV is a string consisting of a single
8700 backslash character (i.e. "\\" in Scheme notation), open the file
8701 named by the following argument, parse arguments from it, and return
8702 the spliced command line. The returned array is terminated by a
8703 null pointer.
6c0201ad 8704
095936d2
JB
8705 For details of argument parsing, see above, under "guile now accepts
8706 command-line arguments compatible with SCSH..."
8707
8708int scm_count_argv (char **ARGV)
8709 Count the arguments in ARGV, assuming it is terminated by a null
8710 pointer.
8711
8712For an example of how these functions might be used, see the source
8713code for the function scm_shell in libguile/script.c.
8714
8715You will usually want to use scm_shell instead of calling this
8716function yourself.
8717
8718** The new function scm_compile_shell_switches turns an array of
8719command-line arguments into Scheme code to carry out the actions they
8720describe. Given ARGC and ARGV, it returns a Scheme expression to
8721evaluate, and calls scm_set_program_arguments to make any remaining
8722command-line arguments available to the Scheme code. For example,
8723given the following arguments:
8724
8725 -e main -s ekko a speckled gecko
8726
8727scm_set_program_arguments will return the following expression:
8728
8729 (begin (load "ekko") (main (command-line)) (quit))
8730
8731You will usually want to use scm_shell instead of calling this
8732function yourself.
8733
8734** The function scm_shell_usage prints a usage message appropriate for
8735an interpreter that uses scm_compile_shell_switches to handle its
8736command-line arguments.
8737
8738void scm_shell_usage (int FATAL, char *MESSAGE)
8739 Print a usage message to the standard error output. If MESSAGE is
8740 non-zero, write it before the usage message, followed by a newline.
8741 If FATAL is non-zero, exit the process, using FATAL as the
8742 termination status. (If you want to be compatible with Guile,
8743 always use 1 as the exit status when terminating due to command-line
8744 usage problems.)
8745
8746You will usually want to use scm_shell instead of calling this
8747function yourself.
48d224d7
JB
8748
8749** scm_eval_0str now returns SCM_UNSPECIFIED if the string contains no
095936d2
JB
8750expressions. It used to return SCM_EOL. Earth-shattering.
8751
8752** The macros for declaring scheme objects in C code have been
8753rearranged slightly. They are now:
8754
8755SCM_SYMBOL (C_NAME, SCHEME_NAME)
8756 Declare a static SCM variable named C_NAME, and initialize it to
8757 point to the Scheme symbol whose name is SCHEME_NAME. C_NAME should
8758 be a C identifier, and SCHEME_NAME should be a C string.
8759
8760SCM_GLOBAL_SYMBOL (C_NAME, SCHEME_NAME)
8761 Just like SCM_SYMBOL, but make C_NAME globally visible.
8762
8763SCM_VCELL (C_NAME, SCHEME_NAME)
8764 Create a global variable at the Scheme level named SCHEME_NAME.
8765 Declare a static SCM variable named C_NAME, and initialize it to
8766 point to the Scheme variable's value cell.
8767
8768SCM_GLOBAL_VCELL (C_NAME, SCHEME_NAME)
8769 Just like SCM_VCELL, but make C_NAME globally visible.
8770
8771The `guile-snarf' script writes initialization code for these macros
8772to its standard output, given C source code as input.
8773
8774The SCM_GLOBAL macro is gone.
8775
8776** The scm_read_line and scm_read_line_x functions have been replaced
8777by Scheme code based on the %read-delimited! procedure (known to C
8778code as scm_read_delimited_x). See its description above for more
8779information.
48d224d7 8780
095936d2
JB
8781** The function scm_sys_open has been renamed to scm_open. It now
8782returns a port instead of an FD object.
ea00ecba 8783
095936d2
JB
8784* The dynamic linking support has changed. For more information, see
8785libguile/DYNAMIC-LINKING.
ea00ecba 8786
f7b47737
JB
8787\f
8788Guile 1.0b3
3065a62a 8789
f3b1485f
JB
8790User-visible changes from Thursday, September 5, 1996 until Guile 1.0
8791(Sun 5 Jan 1997):
3065a62a 8792
4b521edb 8793* Changes to the 'guile' program:
3065a62a 8794
4b521edb
JB
8795** Guile now loads some new files when it starts up. Guile first
8796searches the load path for init.scm, and loads it if found. Then, if
8797Guile is not being used to execute a script, and the user's home
8798directory contains a file named `.guile', Guile loads that.
c6486f8a 8799
4b521edb 8800** You can now use Guile as a shell script interpreter.
3065a62a
JB
8801
8802To paraphrase the SCSH manual:
8803
8804 When Unix tries to execute an executable file whose first two
8805 characters are the `#!', it treats the file not as machine code to
8806 be directly executed by the native processor, but as source code
8807 to be executed by some interpreter. The interpreter to use is
8808 specified immediately after the #! sequence on the first line of
8809 the source file. The kernel reads in the name of the interpreter,
8810 and executes that instead. It passes the interpreter the source
8811 filename as its first argument, with the original arguments
8812 following. Consult the Unix man page for the `exec' system call
8813 for more information.
8814
1a1945be
JB
8815Now you can use Guile as an interpreter, using a mechanism which is a
8816compatible subset of that provided by SCSH.
8817
3065a62a
JB
8818Guile now recognizes a '-s' command line switch, whose argument is the
8819name of a file of Scheme code to load. It also treats the two
8820characters `#!' as the start of a comment, terminated by `!#'. Thus,
8821to make a file of Scheme code directly executable by Unix, insert the
8822following two lines at the top of the file:
8823
8824#!/usr/local/bin/guile -s
8825!#
8826
8827Guile treats the argument of the `-s' command-line switch as the name
8828of a file of Scheme code to load, and treats the sequence `#!' as the
8829start of a block comment, terminated by `!#'.
8830
8831For example, here's a version of 'echo' written in Scheme:
8832
8833#!/usr/local/bin/guile -s
8834!#
8835(let loop ((args (cdr (program-arguments))))
8836 (if (pair? args)
8837 (begin
8838 (display (car args))
8839 (if (pair? (cdr args))
8840 (display " "))
8841 (loop (cdr args)))))
8842(newline)
8843
8844Why does `#!' start a block comment terminated by `!#', instead of the
8845end of the line? That is the notation SCSH uses, and although we
8846don't yet support the other SCSH features that motivate that choice,
8847we would like to be backward-compatible with any existing Guile
3763761c
JB
8848scripts once we do. Furthermore, if the path to Guile on your system
8849is too long for your kernel, you can start the script with this
8850horrible hack:
8851
8852#!/bin/sh
8853exec /really/long/path/to/guile -s "$0" ${1+"$@"}
8854!#
3065a62a
JB
8855
8856Note that some very old Unix systems don't support the `#!' syntax.
8857
c6486f8a 8858
4b521edb 8859** You can now run Guile without installing it.
6685dc83
JB
8860
8861Previous versions of the interactive Guile interpreter (`guile')
8862couldn't start up unless Guile's Scheme library had been installed;
8863they used the value of the environment variable `SCHEME_LOAD_PATH'
8864later on in the startup process, but not to find the startup code
8865itself. Now Guile uses `SCHEME_LOAD_PATH' in all searches for Scheme
8866code.
8867
8868To run Guile without installing it, build it in the normal way, and
8869then set the environment variable `SCHEME_LOAD_PATH' to a
8870colon-separated list of directories, including the top-level directory
8871of the Guile sources. For example, if you unpacked Guile so that the
8872full filename of this NEWS file is /home/jimb/guile-1.0b3/NEWS, then
8873you might say
8874
8875 export SCHEME_LOAD_PATH=/home/jimb/my-scheme:/home/jimb/guile-1.0b3
8876
c6486f8a 8877
4b521edb
JB
8878** Guile's read-eval-print loop no longer prints #<unspecified>
8879results. If the user wants to see this, she can evaluate the
8880expression (assert-repl-print-unspecified #t), perhaps in her startup
48d224d7 8881file.
6685dc83 8882
4b521edb
JB
8883** Guile no longer shows backtraces by default when an error occurs;
8884however, it does display a message saying how to get one, and how to
8885request that they be displayed by default. After an error, evaluate
8886 (backtrace)
8887to see a backtrace, and
8888 (debug-enable 'backtrace)
8889to see them by default.
6685dc83 8890
6685dc83 8891
d9fb83d9 8892
4b521edb
JB
8893* Changes to Guile Scheme:
8894
8895** Guile now distinguishes between #f and the empty list.
8896
8897This is for compatibility with the IEEE standard, the (possibly)
8898upcoming Revised^5 Report on Scheme, and many extant Scheme
8899implementations.
8900
8901Guile used to have #f and '() denote the same object, to make Scheme's
8902type system more compatible with Emacs Lisp's. However, the change
8903caused too much trouble for Scheme programmers, and we found another
8904way to reconcile Emacs Lisp with Scheme that didn't require this.
8905
8906
8907** Guile's delq, delv, delete functions, and their destructive
c6486f8a
JB
8908counterparts, delq!, delv!, and delete!, now remove all matching
8909elements from the list, not just the first. This matches the behavior
8910of the corresponding Emacs Lisp functions, and (I believe) the Maclisp
8911functions which inspired them.
8912
8913I recognize that this change may break code in subtle ways, but it
8914seems best to make the change before the FSF's first Guile release,
8915rather than after.
8916
8917
4b521edb 8918** The compiled-library-path function has been deleted from libguile.
6685dc83 8919
4b521edb 8920** The facilities for loading Scheme source files have changed.
c6486f8a 8921
4b521edb 8922*** The variable %load-path now tells Guile which directories to search
6685dc83
JB
8923for Scheme code. Its value is a list of strings, each of which names
8924a directory.
8925
4b521edb
JB
8926*** The variable %load-extensions now tells Guile which extensions to
8927try appending to a filename when searching the load path. Its value
8928is a list of strings. Its default value is ("" ".scm").
8929
8930*** (%search-load-path FILENAME) searches the directories listed in the
8931value of the %load-path variable for a Scheme file named FILENAME,
8932with all the extensions listed in %load-extensions. If it finds a
8933match, then it returns its full filename. If FILENAME is absolute, it
8934returns it unchanged. Otherwise, it returns #f.
6685dc83 8935
4b521edb
JB
8936%search-load-path will not return matches that refer to directories.
8937
8938*** (primitive-load FILENAME :optional CASE-INSENSITIVE-P SHARP)
8939uses %seach-load-path to find a file named FILENAME, and loads it if
8940it finds it. If it can't read FILENAME for any reason, it throws an
8941error.
6685dc83
JB
8942
8943The arguments CASE-INSENSITIVE-P and SHARP are interpreted as by the
4b521edb
JB
8944`read' function.
8945
8946*** load uses the same searching semantics as primitive-load.
8947
8948*** The functions %try-load, try-load-with-path, %load, load-with-path,
8949basic-try-load-with-path, basic-load-with-path, try-load-module-with-
8950path, and load-module-with-path have been deleted. The functions
8951above should serve their purposes.
8952
8953*** If the value of the variable %load-hook is a procedure,
8954`primitive-load' applies its value to the name of the file being
8955loaded (without the load path directory name prepended). If its value
8956is #f, it is ignored. Otherwise, an error occurs.
8957
8958This is mostly useful for printing load notification messages.
8959
8960
8961** The function `eval!' is no longer accessible from the scheme level.
8962We can't allow operations which introduce glocs into the scheme level,
8963because Guile's type system can't handle these as data. Use `eval' or
8964`read-and-eval!' (see below) as replacement.
8965
8966** The new function read-and-eval! reads an expression from PORT,
8967evaluates it, and returns the result. This is more efficient than
8968simply calling `read' and `eval', since it is not necessary to make a
8969copy of the expression for the evaluator to munge.
8970
8971Its optional arguments CASE_INSENSITIVE_P and SHARP are interpreted as
8972for the `read' function.
8973
8974
8975** The function `int?' has been removed; its definition was identical
8976to that of `integer?'.
8977
8978** The functions `<?', `<?', `<=?', `=?', `>?', and `>=?'. Code should
8979use the R4RS names for these functions.
8980
8981** The function object-properties no longer returns the hash handle;
8982it simply returns the object's property list.
8983
8984** Many functions have been changed to throw errors, instead of
8985returning #f on failure. The point of providing exception handling in
8986the language is to simplify the logic of user code, but this is less
8987useful if Guile's primitives don't throw exceptions.
8988
8989** The function `fileno' has been renamed from `%fileno'.
8990
8991** The function primitive-mode->fdes returns #t or #f now, not 1 or 0.
8992
8993
8994* Changes to Guile's C interface:
8995
8996** The library's initialization procedure has been simplified.
8997scm_boot_guile now has the prototype:
8998
8999void scm_boot_guile (int ARGC,
9000 char **ARGV,
9001 void (*main_func) (),
9002 void *closure);
9003
9004scm_boot_guile calls MAIN_FUNC, passing it CLOSURE, ARGC, and ARGV.
9005MAIN_FUNC should do all the work of the program (initializing other
9006packages, reading user input, etc.) before returning. When MAIN_FUNC
9007returns, call exit (0); this function never returns. If you want some
9008other exit value, MAIN_FUNC may call exit itself.
9009
9010scm_boot_guile arranges for program-arguments to return the strings
9011given by ARGC and ARGV. If MAIN_FUNC modifies ARGC/ARGV, should call
9012scm_set_program_arguments with the final list, so Scheme code will
9013know which arguments have been processed.
9014
9015scm_boot_guile establishes a catch-all catch handler which prints an
9016error message and exits the process. This means that Guile exits in a
9017coherent way when system errors occur and the user isn't prepared to
9018handle it. If the user doesn't like this behavior, they can establish
9019their own universal catcher in MAIN_FUNC to shadow this one.
9020
9021Why must the caller do all the real work from MAIN_FUNC? The garbage
9022collector assumes that all local variables of type SCM will be above
9023scm_boot_guile's stack frame on the stack. If you try to manipulate
9024SCM values after this function returns, it's the luck of the draw
9025whether the GC will be able to find the objects you allocate. So,
9026scm_boot_guile function exits, rather than returning, to discourage
9027people from making that mistake.
9028
9029The IN, OUT, and ERR arguments were removed; there are other
9030convenient ways to override these when desired.
9031
9032The RESULT argument was deleted; this function should never return.
9033
9034The BOOT_CMD argument was deleted; the MAIN_FUNC argument is more
9035general.
9036
9037
9038** Guile's header files should no longer conflict with your system's
9039header files.
9040
9041In order to compile code which #included <libguile.h>, previous
9042versions of Guile required you to add a directory containing all the
9043Guile header files to your #include path. This was a problem, since
9044Guile's header files have names which conflict with many systems'
9045header files.
9046
9047Now only <libguile.h> need appear in your #include path; you must
9048refer to all Guile's other header files as <libguile/mumble.h>.
9049Guile's installation procedure puts libguile.h in $(includedir), and
9050the rest in $(includedir)/libguile.
9051
9052
9053** Two new C functions, scm_protect_object and scm_unprotect_object,
9054have been added to the Guile library.
9055
9056scm_protect_object (OBJ) protects OBJ from the garbage collector.
9057OBJ will not be freed, even if all other references are dropped,
9058until someone does scm_unprotect_object (OBJ). Both functions
9059return OBJ.
9060
9061Note that calls to scm_protect_object do not nest. You can call
9062scm_protect_object any number of times on a given object, and the
9063next call to scm_unprotect_object will unprotect it completely.
9064
9065Basically, scm_protect_object and scm_unprotect_object just
9066maintain a list of references to things. Since the GC knows about
9067this list, all objects it mentions stay alive. scm_protect_object
9068adds its argument to the list; scm_unprotect_object remove its
9069argument from the list.
9070
9071
9072** scm_eval_0str now returns the value of the last expression
9073evaluated.
9074
9075** The new function scm_read_0str reads an s-expression from a
9076null-terminated string, and returns it.
9077
9078** The new function `scm_stdio_to_port' converts a STDIO file pointer
9079to a Scheme port object.
9080
9081** The new function `scm_set_program_arguments' allows C code to set
e80c8fea 9082the value returned by the Scheme `program-arguments' function.
6685dc83 9083
6685dc83 9084\f
1a1945be
JB
9085Older changes:
9086
9087* Guile no longer includes sophisticated Tcl/Tk support.
9088
9089The old Tcl/Tk support was unsatisfying to us, because it required the
9090user to link against the Tcl library, as well as Tk and Guile. The
9091interface was also un-lispy, in that it preserved Tcl/Tk's practice of
9092referring to widgets by names, rather than exporting widgets to Scheme
9093code as a special datatype.
9094
9095In the Usenix Tk Developer's Workshop held in July 1996, the Tcl/Tk
9096maintainers described some very interesting changes in progress to the
9097Tcl/Tk internals, which would facilitate clean interfaces between lone
9098Tk and other interpreters --- even for garbage-collected languages
9099like Scheme. They expected the new Tk to be publicly available in the
9100fall of 1996.
9101
9102Since it seems that Guile might soon have a new, cleaner interface to
9103lone Tk, and that the old Guile/Tk glue code would probably need to be
9104completely rewritten, we (Jim Blandy and Richard Stallman) have
9105decided not to support the old code. We'll spend the time instead on
9106a good interface to the newer Tk, as soon as it is available.
5c54da76 9107
8512dea6 9108Until then, gtcltk-lib provides trivial, low-maintenance functionality.
deb95d71 9109
5c54da76
JB
9110\f
9111Copyright information:
9112
4f416616 9113Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2006 Free Software Foundation, Inc.
5c54da76
JB
9114
9115 Permission is granted to anyone to make or distribute verbatim copies
9116 of this document as received, in any medium, provided that the
9117 copyright notice and this permission notice are preserved,
9118 thus giving the recipient permission to redistribute in turn.
9119
9120 Permission is granted to distribute modified versions
9121 of this document, or of portions of it,
9122 under the above conditions, provided also that they
9123 carry prominent notices stating who last changed them.
9124
48d224d7
JB
9125\f
9126Local variables:
9127mode: outline
9128paragraph-separate: "[ \f]*$"
9129end: