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