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