Update NEWS
[bpt/guile.git] / NEWS
CommitLineData
b2cbe8d8 1Guile NEWS --- history of user-visible changes.
cdf1ae89 2Copyright (C) 1996-2014 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
cdf1ae89
MW
8Changes in 2.0.10 (since 2.0.9):
9
10[XXX This is a work-in-progress!! Search for "XXX" for things to fix.
11Reorganization would also be helpful.]
12
13* Notable changes
14
15** New GDB extension to support Guile
16
c68b9470
LC
17Guile now comes with an extension for GDB 7.8 or later (unreleased at
18the time of writing) that simplifies debugging of C code that uses
19Guile. See "GDB Support" in the manual.
cdf1ae89
MW
20
21** Improved integration between R6RS and native Guile exceptions
22
23R6RS exception handlers, established using 'with-exception-handler' or
24'guard', are now able to catch native Guile exceptions, which are
25automatically converted into appropriate R6RS condition objects.
26
27** Support for HTTP proxies
28
29Guile's built-in web client now honors the 'http_proxy' environment
30variable, as well as the new 'current-http-proxy' parameter. See
31"Web Client" in the manual for details.
32
33** Lexical syntax improvements
34
35*** Support |...| symbol notation.
36
37Guile's core reader and printer now support the R7RS |...| notation
38for writing symbols with arbitrary characters, as a more portable and
39attractive alternative to Guile's native #{...}# notation. To enable
40this notation by default, put one or both of the following in your
41~/.guile:
42
43 (read-enable 'r7rs-symbols)
44 (print-enable 'r7rs-symbols)
45
46*** Support '#true' and '#false' notation for booleans.
47
48The booleans '#t' and '#f' may now be written as '#true' and '#false'
49for improved readability, per R7RS.
50
51*** Recognize '#\escape' character name.
52
53The escape character '#\esc' may now be written as '#\escape', per R7RS.
54
55*** Accept "\|" in string literals.
56
57The pipe character may now be preceded by a backslash, per R7RS.
58
59** Custom binary input ports now support 'setvbuf'.
60
c68b9470
LC
61Until now, ports returned by 'make-custom-binary-input-port' were always
62full-buffered. Now, their buffering mode can be changed using 'setvbuf'.
cdf1ae89
MW
63
64** SRFI-4 predicates and length accessors no longer accept arrays.
65
66Given that the SRFI-4 accessors don't work for arrays, the fact that the
67predicates and length accessors returned true for arrays was a bug.
68
69** GUILE_PROGS now supports specifying a minimum required version.
70
71The 'GUILE_PROGS' autoconf macro in guile.m4 now allows an optional
72argument to specify a minimum required Guile version. By default, it
73requires Guile >= 2.0. A micro version can also be specified, e.g.:
74GUILE_PROGS([2.0.10])
75
76** Error reporting improvements
77
78*** Improved run-time error reporting in (ice-9 match).
79
80If no pattern matches in a 'match' form, the datum that failed to match
81is printed along with the location of the failed 'match' invocation.
82
83*** Print the faulty object upon invalid-keyword errors.
84*** Improved error reporting of procedures defined by define-inlinable.
85*** Improved error reporting for misplaced ellipses in macro definitions.
86*** Improved error checking in 'define-public' and 'module-add!'.
87*** Improved error when 'include' form with relative path is not in a file.
88
89** Speed improvements
90
91*** 'scm_c_read' on ISO-8859-1 (e.g. binary) unbuffered ports is faster.
92*** New inline asm for VM fixnum multiply, for faster overflow checking.
93*** New inline asm for VM fixnum operations on ARM and 32-bit x86.
94*** 'positive?' and 'negative?' are now compiled to VM primitives.
95*** Numerical comparisons with more than 2 arguments are compiled to VM code.
96*** Several R6RS bitwise operators have been optimized.
97
98** Miscellaneous changes [XXX not sure where these belong, if anywhere]
99
100*** Web: 'content-disposition' headers are now supported.
101*** Web: 'uri-encode' hexadecimal percent-encoding is now uppercase.
102*** Size argument to 'make-doubly-weak-hash-table' is now optional.
103*** Timeout for 'unlock-mutex' and SRFI-18 'mutex-unlock!' may now be #f.
104
105** Gnulib update
106
107Guile's copy of Gnulib was updated to v0.1-92-g546ff82. The following
108modules were imported from Gnulib: copysign, fsync, isfinite, link,
109lstat, mkdir, mkstemp, readlink, rename, rmdir, and unistd.
110
cdf1ae89
MW
111* New interfaces
112
cdf1ae89
MW
113** Cooperative REPL servers
114
115This new facility supports REPLs that run at specified times within an
116existing thread, for example in programs utilizing an event loop or in
117single-threaded programs. This allows for safe access and mutation of
118a program's data structures from the REPL without concern for thread
119synchronization. See "Cooperative REPL Servers" in the manual for
120details.
121
122** SRFI-43 (Vector Library)
123
124Guile now includes SRFI-43, a comprehensive library of vector operations
125analogous to the SRFI-1 list library. See "SRFI-43" in the manual for
126details.
127
128** SRFI-64 (A Scheme API for test suites)
129
130Guile now includes SRFI-64, a flexible framework for creating test
131suites. The reference implementation of SRFI-64 has also been updated
132to fully support earlier versions of Guile.
133
134** SRFI-111 (Boxes)
135
136See "SRFI-111" in the manual.
137
138** 'define-values'
139
140See "Binding multiple return values" in the manual.
141
142** Custom ellipsis identifiers using 'with-ellipsis' or SRFI-46.
143
144Guile now allows macro definitions to use identifiers other than '...'
145as the ellipsis. This is convenient when writing macros that generate
679ffce8 146macro definitions. The desired ellipsis identifier can be given as the
cdf1ae89 147first operand to 'syntax-rules', as specified SRFI-46 and R7RS, or by
679ffce8
MW
148using the new 'with-ellipsis' special form in procedural macros. With
149this addition, Guile now fully supports SRFI-46.
cdf1ae89
MW
150
151See "Specifying a Custom Ellipsis Identifier" and "Custom Ellipsis
152Identifiers for syntax-case Macros" in the manual for details.
153
154** R7RS 'syntax-error'
155
156Guile now supports 'syntax-error', as specified by R7RS, allowing for
157improved compile-time error reporting from 'syntax-rules' macros. See
158"Reporting Syntax Errors in Macros" in the manual for details.
159
160** New procedures to convert association lists into hash tables
161
162Guile now includes the convenience procedures 'alist->hash-table',
163'alist->hashq-table', 'alist->hashv-table', and 'alist->hashx-table'.
164See "Hash Table Reference" in the manual.
165
166** New predicates: 'exact-integer?' and 'scm_is_exact_integer'
167
168See "Integers" in the manual.
169
170** 'weak-vector-length', 'weak-vector-ref', and 'weak-vector-set!'
171
172These should now be used to access weak vectors, instead of
173'vector-length', 'vector-ref', and 'vector-set!'.
174
c68b9470
LC
175* Manual updates
176
177** Improve docs for 'eval-when'.
178
179Each 'eval-when' condition is now explained in detail, including
180'expand' which was previously undocumented. (expand load eval) is now
181the recommended set of conditions, instead of (compile load eval).
182See "Eval When" in the manual, for details.
183
184** Update the section on SMOBs and memory management.
185
186See "Defining New Types (Smobs)" in the manual.
187
188** Fixes
189
190*** GOOPS: #:dsupers is the init keyword for the dsupers slot.
191*** 'unfold-right' takes a tail, not a tail generator.
192*** Clarify that 'append!' and 'reverse!' might not mutate.
193*** Fix doc that incorrectly claimed (integer? +inf.0) => #t.
194 (http://bugs.gnu.org/16356)
195*** Document that we support SRFI-62 (S-expression comments).
196*** Document that we support SRFI-87 (=> in case clauses).
197*** Document 'equal?' in the list of R6RS incompatibilities.
198*** Remove outdated documentation of LTDL_LIBRARY_PATH.
199*** Fix 'weak-vector?' doc: Weak hash tables are not weak vectors.
200*** Fix 'my-or' examples to use let-bound variable.
201 (http://bugs.gnu.org/14203)
202
203* New deprecations
204
205** General 'uniform-vector' interface
206
207This interface lacked both generality and specificity. The general
208replacements are 'array-length', 'array-ref', and friends on the scheme
209side, and the array handle interface on the C side. On the specific
210side of things, there are the specific bytevector, SRFI-4, and bitvector
211interfaces.
212
213** Use of the vector interface on arrays
214** 'vector-length', 'vector-ref', and 'vector-set!' on weak vectors
215** 'vector-length', 'vector-ref', and 'vector-set!' as primitive-generics
216
217Making the vector interface operate only on a single representation will
218allow future versions of Guile to compile loops involving vectors to
219more efficient native code.
220
221** 'htons', 'htonl', 'ntohs', 'ntohl'
222
223These procedures, like their C counterpart, were used to convert numbers
224to/from network byte order, typically in conjunction with the
225now-deprecated uniform vector API.
226
227This functionality is now covered by the bytevector and binary I/O APIs.
228See "Interpreting Bytevector Contents as Integers" in the manual.
229
230** 'gc-live-object-stats'
231
232It hasn't worked in the whole 2.0 series. There is no replacement,
233unfortunately.
234
235** 'scm_c_program_source'
236
77326d36
AW
237This internal VM function was not meant to be public. Use
238'scm_procedure_source' instead.
c68b9470 239
cdf1ae89
MW
240* Build fixes
241
c68b9470 242** Fix build with Clang 3.4.
cdf1ae89
MW
243
244** MinGW build fixes
245*** Do not add $(EXEEXT) to guild or guile-tools.
246*** tests: Use double quotes around shell arguments, for Windows.
247*** tests: Don't rely on $TMPDIR and /tmp on Windows.
248*** tests: Skip FFI tests that use `qsort' when it's not accessible.
249*** tests: Remove symlink only when it exists.
250*** tests: Don't rely on `scm_call_2' being visible.
251
252** Fix computation of LIBLOBJS so dependencies work properly.
253 (http://bugs.gnu.org/14193)
254
cdf1ae89
MW
255* Bug fixes
256
257** Web: Fix web client with methods other than GET.
258 (http://bugs.gnu.org/15908)
259** Web: Add Content-Length header for empty bodies.
260** Web: Accept "UTC" as the zone offset in date headers.
261 (http://bugs.gnu.org/14128)
262** Web: Don't throw if a response is longer than its Content-Length says.
263** Web: Write out HTTP Basic auth headers correctly.
264 (http://bugs.gnu.org/14370)
265** Web: Always print a path component in 'write-request-line'.
266** Fix 'define-public' from (ice-9 curried-definitions).
267** psyntax: toplevel variable definitions discard previous syntactic binding.
268 (http://bugs.gnu.org/11988)
269** Fix thread-unsafe lazy initializations.
270** Make (ice-9 popen) thread-safe.
271 (http://bugs.gnu.org/15683)
272** Make guardians thread-safe.
273** Make regexp_exec thread-safe.
274 (http://bugs.gnu.org/14404)
275** vm: Gracefully handle stack overflows.
276 (http://bugs.gnu.org/15065)
277** Fix 'rationalize'.
278 (http://bugs.gnu.org/14905)
279** Fix inline asm for VM fixnum operations on x32.
280** Fix 'SCM_SYSCALL' to really swallow EINTR.
281** Hide EINTR returns from 'accept'.
282** SRFI-19: Update the table of leap seconds.
283** Add missing files to the test-suite Makefile.
284** Make sure 'ftw' allows directory traversal when running as root.
285** Fix 'hash-for-each' for weak hash tables.
286** SRFI-18: Export 'current-thread'.
287 (http://bugs.gnu.org/16890)
288** Fix inlining of tail list to apply.
289 (http://bugs.gnu.org/15533)
290** Fix bug in remqueue in threads.c when removing last element.
291** Fix build when '>>' on negative integers is not arithmetic.
292** Fix 'bitwise-bit-count' for negative arguments.
293 (http://bugs.gnu.org/14864)
294** Fix VM 'ash' for right shifts by large amounts.
295 (http://bugs.gnu.org/14864)
296** Fix rounding in scm_i_divide2double for negative arguments.
297** Avoid lossy conversion from inum to double in numerical comparisons.
298** Fix numerical comparison of fractions to infinities.
299** Allow fl+ and fl* to accept zero arguments.
300 (http://bugs.gnu.org/14869)
301** flonum? returns false for complex number objects.
302 (http://bugs.gnu.org/14866)
303** flfinite? applied to a NaN returns false.
304 (http://bugs.gnu.org/14868)
305** Flonum operations always return flonums.
306 (http://bugs.gnu.org/14871)
307** min and max: NaNs beat infinities, per R6RS errata.
308 (http://bugs.gnu.org/14865)
309** Fix 'fxbit-count' for negative arguments.
310** 'gcd' and 'lcm' support inexact integer arguments.
311 (http://bugs.gnu.org/14870)
312** Fix R6RS 'fixnum-width'.
313 (http://bugs.gnu.org/14879)
314** tests: Use shell constructs that /bin/sh on Solaris 10 can understand.
315 (http://bugs.gnu.org/14042)
316** Fix display of symbols containing backslashes.
317 (http://bugs.gnu.org/15033)
318** Fix truncated-print for uniform vectors.
319** Define `AF_UNIX' only when Unix-domain sockets are supported.
320** Decompiler: fix handling of empty 'case-lambda' expressions.
321** Fix handling of signed zeroes and infinities in 'numerator' and 'denominator'.
322** dereference-pointer: check for null pointer.
323** Optimizer: Numerical comparisons are not negatable, for correct NaN handling.
324** Compiler: Evaluate '-' and '/' in left-to-right order.
325 (for more robust floating-point arithmetic)
326** snarf.h: Declare static const function name vars as SCM_UNUSED.
327** chars.c: Remove duplicate 'const' specifiers.
328** Modify SCM_UNPACK type check to avoid warnings in clang.
329** Arrange so that 'file-encoding' does not truncate the encoding name.
330 (http://bugs.gnu.org/16463)
331** Improve error checking in bytevector->uint-list and bytevector->sint-list.
332 (http://bugs.gnu.org/15100)
333** Fix (ash -1 SCM_I_FIXNUM_BIT-1) to return a fixnum instead of a bignum.
334** i18n: Fix null pointer dereference when locale info is missing.
335** Fix 'string-copy!' to work properly with overlapping src/dest.
336** Fix hashing of vectors to run in bounded time.
337** 'port-position' works on CBIPs that do not support 'set-port-position!'.
338** Custom binary input ports sanity-check the return value of 'read!'.
339** bdw-gc.h: Check SCM_USE_PTHREAD_THREADS using #if not #ifdef.
340** REPL Server: Don't establish a SIGINT handler.
341** REPL Server: Redirect warnings to client socket.
342** REPL Server: Improve robustness of 'stop-server-and-clients!'.
343** Add srfi-16, srfi-30, srfi-46, srfi-62, srfi-87 to %cond-expand-features.
344** Fix trap handlers to handle applicable structs.
345 (http://bugs.gnu.org/15691)
346** Fix optional end argument in `uniform-vector-read!'.
347 (http://bugs.gnu.org/15370)
348** Fix brainfuck->scheme compiler.
c68b9470 349** texinfo: Fix newline preservation in @example with lines beginning with @
cdf1ae89
MW
350
351** C standards conformance improvements
352
c68b9470
LC
353Improvements and bug fixes were made to the C part of Guile's run-time
354support (libguile).
cdf1ae89
MW
355
356*** Don't use the identifier 'noreturn'.
357 (http://bugs.gnu.org/15798)
358*** Rewrite SCM_I_INUM to avoid unspecified behavior when not using GNU C.
359*** Improve fallback implemention of SCM_SRS to avoid unspecified behavior.
360*** SRFI-60: Reimplement 'rotate-bit-field' on inums to be more portable.
361*** Improve compliance with C standards regarding signed integer shifts.
362*** Avoid signed overflow in random.c.
363*** VM: Avoid signed overflows in 'add1' and 'sub1'.
364*** VM: Avoid overflow in ASM_ADD when the result is most-positive-fixnum.
365*** read: Avoid signed integer overflow in 'read_decimal_integer'.
366
367
368\f
cfeb9130
LC
369Changes in 2.0.9 (since 2.0.7):
370
371Note: 2.0.8 was a brown paper bag release that was never announced, but
372some mirrors may have picked it up. Please do not use it.
de2811cc 373
f361bb93 374* Notable changes
de2811cc 375
eed0d26c
MW
376** New keyword arguments for procedures that open files
377
14f2e470
AW
378The following procedures that open files now support keyword arguments
379to request binary I/O or to specify the character encoding for text
7f74dcb4
LC
380files: `open-file', `open-input-file', `open-output-file',
381`call-with-input-file', `call-with-output-file', `with-input-from-file',
382`with-output-to-file', and `with-error-to-file'.
eed0d26c
MW
383
384It is also now possible to specify whether Guile should scan files for
385Emacs-style coding declarations. This scan was done by default in
386versions 2.0.0 through 2.0.7, but now must be explicitly requested.
387
388See "File Ports" in the manual for details.
389
14f2e470 390** Rewritten guile.m4
de2811cc 391
f361bb93
AW
392The `guile.m4' autoconf macros have been rewritten to use `guild' and
393`pkg-config' instead of the deprecated `guile-config' (which itself
394calls pkg-config).
de2811cc 395
f361bb93
AW
396There is also a new macro, `GUILE_PKG', which allows packages to select
397the version of Guile that they want to compile against. See "Autoconf
398Macros" in the manual, for more information.
de2811cc 399
eed0d26c 400** Better Windows support
de2811cc 401
f361bb93
AW
402Guile now correctly identifies absolute paths on Windows (MinGW), and
403creates files on that platform according to its path conventions. See
14f2e470 404"File System" in the manual, for all details.
de2811cc 405
f361bb93
AW
406In addition, the new Gnulib imports provide `select' and `poll' on
407Windows builds.
de2811cc 408
f361bb93
AW
409As an incompatible change, systems that are missing <sys/select.h> were
410previously provided a public `scm_std_select' C function that defined a
411version of `select', but unhappily it also provided its own incompatible
14f2e470 412definitions for FD_SET, FD_ZERO, and other system interfaces. Guile
f361bb93
AW
413should not be setting these macros in public API, so this interface was
414removed on those plaforms (basically only MinGW).
de2811cc 415
eed0d26c 416** Numerics improvements
de2811cc 417
eed0d26c
MW
418`number->string' now reliably outputs enough digits to produce the same
419number when read back in. Previously, it mishandled subnormal numbers
420(printing them as "#.#"), and failed to distinguish between some
421distinct inexact numbers, e.g. 1.0 and (+ 1.0 (expt 2.0 -52)). These
422problems had far-reaching implications, since the compiler uses
423`number->string' to serialize numeric constants into .go files.
424
425`sqrt' now produces exact rational results when possible, and handles
426very large or very small numbers more robustly.
de2811cc 427
22c76fd8
MW
428A number (ahem) of operations involving exact rationals have been
429optimized, most notably `integer-expt' and `expt'.
eed0d26c 430
22c76fd8 431`exact->inexact' now performs correct IEEE rounding.
eed0d26c
MW
432
433** New optimizations
de2811cc 434
f361bb93 435There were a number of improvements to the partial evaluator, allowing
01b83dbd 436complete reduction of forms such as:
de2811cc 437
f361bb93 438 ((let ((_ 10)) (lambda () _)))
de2811cc 439
f361bb93 440 ((lambda _ _))
de2811cc 441
c608e1aa 442 (apply (lambda _ _) 1 2 3 '(4))
de2811cc 443
f361bb93 444 (call-with-values (lambda () (values 1 2)) (lambda _ _))
de2811cc 445
eed0d26c
MW
446`string-join' now handles huge lists efficiently.
447
14f2e470 448`get-bytevector-some' now uses buffered input, which is much faster.
de2811cc 449
a24cda1d
LC
450Finally, `array-ref', `array-set!' on arrays of rank 1 or 2 is now
451faster, because it avoids building a rest list. Similarly, the
452one-argument case of `array-for-each' and `array-map!' has been
453optimized, and `array-copy!' and `array-fill!' are faster.
de2811cc 454
7ca88a40
MW
455** `peek-char' no longer consumes EOF
456
457As required by the R5RS, if `peek-char' returns EOF, then the next read
458will also return EOF. Previously `peek-char' would consume the EOF.
459This makes a difference for terminal devices where it is possible to
460read past an EOF.
461
eed0d26c
MW
462** Gnulib update
463
464Guile's copy of Gnulib was updated to v0.0-7865-ga828bb2. The following
465modules were imported from Gnulib: select, times, pipe-posix, fstat,
466getlogin, poll, and c-strcase.
467
468** `include' resolves relative file names relative to including file
de2811cc 469
f361bb93
AW
470Given a relative file name, `include' will look for it relative to the
471directory of the including file. This harmonizes the behavior of
472`include' with that of `load'.
de2811cc 473
eed0d26c 474** SLIB compatibility restored
de2811cc 475
f361bb93
AW
476Guile 2.0.8 is now compatible with SLIB. You will have to use a
477development version of SLIB, however, until a new version of SLIB is
478released.
de2811cc 479
eed0d26c 480** Better ,trace REPL command
f361bb93
AW
481
482Sometimes the ,trace output for nested function calls could overflow the
483terminal width, which wasn't useful. Now there is a limit to the amount
484of space the prefix will take. See the documentation for ",trace" for
485more information.
de2811cc 486
eed0d26c
MW
487** Better docstring syntax supported for `case-lambda'
488
489Docstrings can now be placed immediately after the `case-lambda' or
490`case-lambda*' keyword. See "Case-lambda" in the manual.
491
eed0d26c
MW
492** Improved handling of Unicode byte order marks
493
494See "BOM Handling" in the manual for details.
495
496** Update predefined character sets to Unicode 6.2
de2811cc 497
465ff502
LC
498** GMP 4.2 or later required
499
500Guile used to require GMP at least version 4.1 (released in May 2002),
501and now requires at least version 4.2 (released in March 2006).
502
de2811cc
AW
503* Manual updates
504
eed0d26c 505** Better SXML documentation
de2811cc 506
f361bb93
AW
507The documentation for SXML modules was much improved, though there is
508still far to go. See "SXML" in manual.
de2811cc 509
eed0d26c 510** Style updates
de2811cc 511
f361bb93
AW
512Use of "iff" was replaced with standard English. Keyword arguments are
513now documented consistently, along with their default values.
de2811cc 514
eed0d26c 515** An end to the generated-documentation experiment
de2811cc 516
f361bb93
AW
517When Guile 2.0 imported some modules from Guile-Lib, they came with a
518system that generated documentation from docstrings and module
519commentaries. This produced terrible documentation. We finally bit the
520bullet and incorporated these modules into the main text, and will be
521improving them manually over time, as is the case with SXML. Help is
522appreciated.
de2811cc 523
eed0d26c 524** New documentation
de2811cc 525
f361bb93
AW
526There is now documentation for `scm_array_type', and `scm_array_ref', as
527well as for the new `array-length' / 'scm_c_array_length' /
528`scm_array_length' functions. `array-in-bounds?' has better
529documentation as well. The `program-arguments-alist' and
eed0d26c
MW
530`program-lambda-list' functions are now documented, as well as `and=>',
531`exit', and `quit'. The (system repl server) module is now documented
532(see REPL Servers). Finally, the GOOPS class hierarchy diagram has been
533regenerated for the web and print output formats.
de2811cc 534
f361bb93 535* New deprecations
de2811cc 536
eed0d26c 537** Deprecate generalized vector interface
de2811cc 538
f361bb93
AW
539The generalized vector interface, introduced in 1.8.0, is simply a
540redundant, verbose interface to arrays of rank 1. `array-ref' and
541similar functions are entirely sufficient. Thus,
542`scm_generalized_vector_p', `scm_generalized_vector_length',
543`scm_generalized_vector_ref', `scm_generalized_vector_set_x', and
544`scm_generalized_vector_to_list' are now deprecated.
de2811cc 545
eed0d26c 546** Deprecate SCM_CHAR_CODE_LIMIT and char-code-limit
de2811cc 547
f361bb93
AW
548These constants were defined to 256, which is not the highest codepoint
549supported by Guile. Given that they were useless and incorrect, they
550have been deprecated.
de2811cc 551
eed0d26c 552** Deprecate `http-get*'
de2811cc 553
f361bb93 554The new `#:streaming?' argument to `http-get' subsumes the functionality
ed4aa264
LC
555of `http-get*' (introduced in 2.0.7). Also, the `#:extra-headers'
556argument is deprecated in favor of `#:headers'.
de2811cc 557
eed0d26c 558** Deprecate (ice-9 mapping)
de2811cc 559
f361bb93
AW
560This module, present in Guile since 1996 but never used or documented,
561has never worked in Guile 2.0. It has now been deprecated and will be
562removed in Guile 2.2.
de2811cc 563
eed0d26c 564** Deprecate undocumented array-related C functions
a24cda1d
LC
565
566These are `scm_array_fill_int', `scm_ra_eqp', `scm_ra_lessp',
567`scm_ra_leqp', `scm_ra_grp', `scm_ra_greqp', `scm_ra_sum',
568`scm_ra_product', `scm_ra_difference', `scm_ra_divide', and
569`scm_array_identity'.
570
de2811cc
AW
571* New interfaces
572
eed0d26c 573** SRFI-41 Streams
de2811cc 574
eed0d26c 575See "SRFI-41" in the manual.
de2811cc 576
14f2e470
AW
577** SRFI-45 exports `promise?'
578
579SRFI-45 now exports a `promise?' procedure that works with its promises.
580Also, its promises now print more nicely.
581
eed0d26c 582** New HTTP client procedures
de2811cc 583
eed0d26c
MW
584See "Web Client" for documentation on the new `http-head', `http-post',
585`http-put', `http-delete', `http-trace', and `http-options' procedures,
586and also for more options to `http-get'.
de2811cc 587
eed0d26c 588** Much more capable `xml->sxml'
ed4aa264 589
eed0d26c
MW
590See "Reading and Writing XML" for information on how the `xml->sxml'
591parser deals with namespaces, processed entities, doctypes, and literal
592strings. Incidentally, `current-ssax-error-port' is now a parameter
593object.
ed4aa264 594
eed0d26c 595** New procedures for converting strings to and from bytevectors
de2811cc 596
eed0d26c
MW
597See "Representing Strings as Bytes" for documention on the new `(ice-9
598iconv)' module and its `bytevector->string' and `string->bytevector'
599procedures.
de2811cc 600
a24cda1d
LC
601** Escape continuations with `call/ec' and `let/ec'
602
603See "Prompt Primitives".
604
eed0d26c
MW
605** New procedures to read all characters from a port
606
607See "Line/Delimited" in the manual for documentation on `read-string'
608 and `read-string!'.
609
610** New procedure `sendfile'
611
612See "File System".
613
614** New procedure `unget-bytevector'
615
616See "R6RS Binary Input".
617
618** New C helper: `scm_c_bind_keyword_arguments'
619
620See "Keyword Procedures".
621
622** New command-line arguments: `--language' and `-C'
623
624See "Command-line Options" in the manual.
625
626** New environment variables: `GUILE_STACK_SIZE', `GUILE_INSTALL_LOCALE'
627
628See "Environment Variables".
629
630** New procedures for dealing with file names
631
632See "File System" for documentation on `system-file-name-convention',
633`file-name-separator?', `absolute-file-name?', and
634`file-name-separator-string'.
635
636** `array-length', an array's first dimension
de2811cc 637
01b83dbd 638See "Array Procedures".
de2811cc 639
eed0d26c 640** `hash-count', for hash tables
de2811cc 641
01b83dbd 642See "Hash Tables".
de2811cc 643
eed0d26c
MW
644** `round-ash', a bit-shifting operator that rounds on right-shift
645
646See "Bitwise Operations".
647
648** New foreign types: `ssize_t', `ptrdiff_t'
de2811cc 649
01b83dbd 650See "Foreign Types".
de2811cc 651
eed0d26c 652** New C helpers: `scm_from_ptrdiff_t', `scm_to_ptrdiff_t'
de2811cc 653
01b83dbd 654See "Integers".
de2811cc 655
eed0d26c 656** Socket option `SO_REUSEPORT' now available from Scheme
de2811cc 657
eed0d26c
MW
658If supported on the platform, `SO_REUSEPORT' is now available from
659Scheme as well. See "Network Sockets and Communication".
de2811cc 660
eed0d26c 661** `current-language' in default environment
de2811cc 662
01b83dbd
AW
663Previously defined only in `(system base language)', `current-language'
664is now defined in the default environment, and is used to determine the
665language for the REPL, and for `compile-and-load'.
de2811cc 666
01b83dbd 667** New procedure: `fluid->parameter'
de2811cc 668
01b83dbd
AW
669See "Parameters", for information on how to convert a fluid to a
670parameter.
de2811cc 671
eed0d26c 672** New `print' REPL option
de2811cc 673
01b83dbd
AW
674See "REPL Commands" in the manual for information on the new
675user-customizable REPL printer.
de2811cc 676
eed0d26c 677** New variable: %site-ccache-dir
de2811cc 678
01b83dbd
AW
679The "Installing Site Packages" and "Build Config" manual sections now
680refer to this variable to describe where users should install their
681`.go' files.
de2811cc
AW
682
683* Build fixes
684
f361bb93 685** Fix compilation against libgc 7.3.
de2811cc 686** Fix cross-compilation of `c-tokenize.o'.
f361bb93
AW
687** Fix warning when compiling against glibc 2.17.
688** Fix documentation build against Texinfo 5.0.
01b83dbd
AW
689** Fix building Guile from a directory with non-ASCII characters.
690** Fix native MinGW build.
691** Fix --disable-posix build.
692** Fix MinGW builds with networking, POSIX, and thread support.
de2811cc
AW
693
694* Bug fixes
695
eed0d26c
MW
696** Fix inexact number printer.
697 (http://bugs.gnu.org/13757)
698** Fix infinite loop when parsing optional-argument short options (SRFI-37).
ed4aa264 699 (http://bugs.gnu.org/13176)
eed0d26c 700** web: Support non-GMT date headers in the HTTP client.
ed4aa264 701 (http://bugs.gnu.org/13544)
eed0d26c
MW
702** web: support IP-literal (IPv6 address) in Host header.
703** Avoid stack overflows with `par-map' and nested futures in general.
ed4aa264 704 (http://bugs.gnu.org/13188)
eed0d26c
MW
705** Peek-char no longer consumes EOF.
706 (http://bugs.gnu.org/12216)
707** Avoid swallowing multiple EOFs in R6RS binary-input procedures.
01b83dbd
AW
708** A fork when multiple threads are running will now print a warning.
709** Allow for spurious wakeups from pthread_cond_wait.
de2811cc 710 (http://bugs.gnu.org/10641)
01b83dbd 711** Warn and ignore module autoload failures.
de2811cc 712 (http://bugs.gnu.org/12202)
01b83dbd
AW
713** Use chmod portably in (system base compile).
714 (http://bugs.gnu.org/10474)
c608e1aa 715** Fix response-body-port for HTTP responses without content-length.
01b83dbd
AW
716 (http://bugs.gnu.org/13857)
717** Allow case-lambda expressions with no clauses.
718 (http://bugs.gnu.org/9776)
de2811cc
AW
719** Improve standards conformance of string->number.
720 (http://bugs.gnu.org/11887)
01b83dbd
AW
721** Support calls and tail-calls with more than 255 formals.
722** ,option evaluates its right-hand-side.
de2811cc 723 (http://bugs.gnu.org/13076)
01b83dbd 724** Structs with tail arrays are not simple.
de2811cc
AW
725 (http://bugs.gnu.org/12808)
726** Make `SCM_LONG_BIT' usable in preprocessor conditionals.
727 (http://bugs.gnu.org/13848)
728** Fix thread-unsafe lazy initializations.
01b83dbd 729** Allow SMOB mark procedures to be called from parallel markers.
de2811cc
AW
730 (http://bugs.gnu.org/13611)
731** Fix later-bindings-win logic in with-fluids.
732 (http://bugs.gnu.org/13843)
733** Fix duplicate removal of with-fluids.
734 (http://bugs.gnu.org/13838)
735** Support calling foreign functions of 10 arguments or more.
01b83dbd
AW
736 (http://bugs.gnu.org/13809)
737** Let reverse! accept arbitrary types as second argument.
738 (http://bugs.gnu.org/13835)
de2811cc
AW
739** Recognize the `x86_64.*-gnux32' triplet.
740** Check whether a triplet's OS part specifies an ABI.
741** Recognize mips64* as having 32-bit pointers by default.
eed0d26c
MW
742** Use portable sed constructs.
743 (http://bugs.gnu.org/14042)
01b83dbd
AW
744** Remove language/glil/decompile-assembly.scm.
745 (http://bugs.gnu.org/10622)
746** Use O_BINARY in `copy-file', `load-objcode', `mkstemp'.
eed0d26c
MW
747** Use byte-oriented functions in `get-bytevector*'.
748** Fix abort when iconv swallows BOM from UTF-16 or UTF-32 stream.
01b83dbd 749** Fix compilation of functions with more than 255 local variables.
de2811cc 750** Fix `getgroups' for when zero supplementary group IDs exist.
01b83dbd
AW
751** Allow (define-macro name (lambda ...)).
752** Various fixes to the (texinfo) modules.
de2811cc 753** guild: Gracefully handle failures to install the locale.
01b83dbd
AW
754** Fix format string warnings for ~!, ~|, ~/, ~q, ~Q, and ~^.
755 (http://bugs.gnu.org/13485)
de2811cc 756** Fix source annotation bug in psyntax 'expand-body'.
01b83dbd 757** Ecmascript: Fix conversion to boolean for non-numbers.
eed0d26c
MW
758** Use case-insensitive comparisons for encoding names.
759** Add missing cond-expand feature identifiers.
01b83dbd
AW
760** A failure to find a module's file does not prevent future loading.
761** Many (oop goops save) fixes.
762** `http-get': don't shutdown write end of socket.
763 (http://bugs.gnu.org/13095)
764** Avoid signed integer overflow in scm_product.
c608e1aa 765** http: read-response-body always returns bytevector or #f, never EOF.
de2811cc 766** web: Correctly detect "No route to host" conditions.
eed0d26c 767** `system*': failure to execvp no longer leaks dangling processes.
de2811cc 768 (http://bugs.gnu.org/13166)
eed0d26c 769** More sensible case-lambda* dispatch.
01b83dbd 770 (http://bugs.gnu.org/12929)
de2811cc
AW
771** Do not defer expansion of internal define-syntax forms.
772 (http://bugs.gnu.org/13509)
773
774
775\f
13fac282
LC
776Changes in 2.0.7 (since 2.0.6):
777
778* Notable changes
779
780** SRFI-105 curly infix expressions are supported
781
782Curly infix expressions as described at
783http://srfi.schemers.org/srfi-105/srfi-105.html are now supported by
784Guile's reader. This allows users to write things like {a * {b + c}}
785instead of (* a (+ b c)). SRFI-105 support is enabled by using the
786`#!curly-infix' directive in source code, or the `curly-infix' reader
787option. See the manual for details.
788
789** Reader options may now be per-port
790
791Historically, `read-options' and related procedures would manipulate
792global options, affecting the `read' procedure for all threads, and all
793current uses of `read'.
794
795Guile can now associate `read' options with specific ports, allowing
796different ports to use different options. For instance, the
797`#!fold-case' and `#!no-fold-case' reader directives have been
798implemented, and their effect is to modify the current read options of
799the current port only; similarly for `#!curly-infix'. Thus, it is
800possible, for instance, to have one port reading case-sensitive code,
801while another port reads case-insensitive code.
802
803** Futures may now be nested
804
805Futures may now be nested: a future can itself spawn and then `touch'
806other futures. In addition, any thread that touches a future that has
807not completed now processes other futures while waiting for the touched
808future to completed. This allows all threads to be kept busy, and was
809made possible by the use of delimited continuations (see the manual for
810details.)
811
2813d725
MW
812Consequently, `par-map' and `par-for-each' have been rewritten and can
813now use all cores.
13fac282 814
3919585f
MW
815** `GUILE_LOAD_PATH' et al can now add directories to the end of the path
816
817`GUILE_LOAD_PATH' and `GUILE_LOAD_COMPILED_PATH' can now be used to add
818directories to both ends of the load path. If the special path
819component `...' (ellipsis) is present in these environment variables,
820then the default path is put in place of the ellipsis, otherwise the
821default path is placed at the end. See "Environment Variables" in the
822manual for details.
823
13fac282
LC
824** `load-in-vicinity' search for `.go' files in `%load-compiled-path'
825
826Previously, `load-in-vicinity' would look for compiled files in the
827auto-compilation cache, but not in `%load-compiled-path'. This is now
828fixed. This affects `load', and the `-l' command-line flag. See
829<http://bugs.gnu.org/12519> for details.
830
831** Extension search order fixed, and LD_LIBRARY_PATH preserved
832
833Up to 2.0.6, Guile would modify the `LD_LIBRARY_PATH' environment
834variable (or whichever is relevant for the host OS) to insert its own
835default extension directories in the search path (using GNU libltdl
836facilities was not possible here.) This approach was problematic in two
837ways.
838
839First, the `LD_LIBRARY_PATH' modification would be visible to
840sub-processes, and would also affect future calls to `dlopen', which
841could lead to subtle bugs in the application or sub-processes. Second,
a94e7d85
MW
842when the installation prefix is /usr, the `LD_LIBRARY_PATH' modification
843would typically end up inserting /usr/lib before /usr/local/lib in the
844search path, which is often the opposite of system-wide settings such as
845`ld.so.conf'.
13fac282
LC
846
847Both issues have now been fixed.
848
849** `make-vtable-vtable' is now deprecated
850
851Programs should instead use `make-vtable' and `<standard-vtable>'.
852
853** The `-Wduplicate-case-datum' and `-Wbad-case-datum' are enabled
854
855These recently introduced warnings have been documented and are now
856enabled by default when auto-compiling.
857
a94e7d85 858** Optimize calls to `equal?' or `eqv?' with a constant argument
13fac282 859
a94e7d85
MW
860The compiler simplifies calls to `equal?' or `eqv?' with a constant
861argument to use `eq?' instead, when applicable.
13fac282
LC
862
863* Manual updates
864
865** SRFI-9 records now documented under "Compound Data Types"
866
867The documentation of SRFI-9 record types has been moved in the "Compound
868Data Types", next to Guile's other record APIs. A new section
869introduces the various record APIs, and describes the trade-offs they
870make. These changes were made in an attempt to better guide users
871through the maze of records API, and to recommend SRFI-9 as the main
872API.
873
874The documentation of Guile's raw `struct' API has also been improved.
875
876** (ice-9 and-let-star) and (ice-9 curried-definitions) now documented
877
878These modules were missing from the manual.
879
880* New interfaces
881
882** New "functional record setters" as a GNU extension of SRFI-9
883
884The (srfi srfi-9 gnu) module now provides three new macros to deal with
885"updates" of immutable records: `define-immutable-record-type',
886`set-field', and `set-fields'.
887
888The first one allows record type "functional setters" to be defined;
889such setters keep the record unchanged, and instead return a new record
890with only one different field. The remaining macros provide the same
891functionality, and also optimize updates of multiple or nested fields.
892See the manual for details.
893
894** web: New `http-get*', `response-body-port', and `text-content-type?'
895 procedures
896
897These procedures return a port from which to read the response's body.
898Unlike `http-get' and `read-response-body', they allow the body to be
899processed incrementally instead of being stored entirely in memory.
900
901The `text-content-type?' predicate allows users to determine whether the
902content type of a response is textual.
903
904See the manual for details.
905
906** `string-split' accepts character sets and predicates
907
908The `string-split' procedure can now be given a SRFI-14 character set or
909a predicate, instead of just a character.
910
3b539098 911** R6RS SRFI support
13fac282 912
3b539098
LC
913Previously, in R6RS modules, Guile incorrectly ignored components of
914SRFI module names after the SRFI number, making it impossible to specify
915sub-libraries. This release corrects this, bringing us into accordance
916with SRFI 97.
13fac282
LC
917
918** `define-public' is no a longer curried definition by default
919
920The (ice-9 curried-definitions) should be used for such uses. See the
921manual for details.
922
923* Build fixes
924
925** Remove reference to `scm_init_popen' when `fork' is unavailable
926
927This fixes a MinGW build issue (http://bugs.gnu.org/12477).
928
929** Fix race between installing `guild' and the `guile-tools' symlink
930
931* Bug fixes
932
933** Procedures returned by `eval' now have docstrings
934 (http://bugs.gnu.org/12173)
935** web client: correctly handle uri-query, etc. in relative URI headers
936 (http://bugs.gnu.org/12827)
937** Fix docs for R6RS `hashtable-copy'
938** R6RS `string-for-each' now accepts multiple string arguments
939** Fix out-of-range error in the compiler's CSE pass
940 (http://bugs.gnu.org/12883)
941** Add missing R6RS `open-file-input/output-port' procedure
942** Futures: Avoid creating the worker pool more than once
943** Fix invalid assertion about mutex ownership in threads.c
944 (http://bugs.gnu.org/12719)
945** Have `SCM_NUM2FLOAT' and `SCM_NUM2DOUBLE' use `scm_to_double'
946** The `scandir' procedure now uses `lstat' instead of `stat'
947** Fix `generalized-vector->list' indexing bug with shared arrays
948 (http://bugs.gnu.org/12465)
949** web: Change `http-get' to try all the addresses for the given URI
950** Implement `hash' for structs
951 (http://lists.gnu.org/archive/html/guile-devel/2012-10/msg00031.html)
952** `read' now adds source properties for data types beyond pairs
953** Improve error reporting in `append!'
954** In fold-matches, set regexp/notbol unless matching string start
955** Don't stat(2) and access(2) the .go location before using it
956** SRFI-19: use zero padding for hours in ISO 8601 format, not blanks
957** web: Fix uri-encoding for strings with no unreserved chars, and octets 0-15
958** More robust texinfo alias handling
959** Optimize `format' and `simple-format'
960 (http://bugs.gnu.org/12033)
961** Angle of -0.0 is pi, not zero
962
963\f
d2e35793
AW
964Changes in 2.0.6 (since 2.0.5):
965
966* Notable changes
967
968** New optimization pass: common subexpression elimination (CSE)
969
970Guile's optimizer will now run a CSE pass after partial evaluation.
971This pass propagates static information about branches taken, bound
972lexicals, and effects from an expression's dominators. It can replace
973common subexpressions with their boolean values (potentially enabling
974dead code elimination), equivalent bound lexicals, or it can elide them
975entirely, depending on the context in which they are executed. This
976pass is especially useful in removing duplicate type checks, such as
d7a33b64 977those produced by SRFI-9 record accessors.
d2e35793
AW
978
979** Improvements to the partial evaluator
980
981Peval can now hoist tests that are common to both branches of a
982conditional into the test. This can help with long chains of
983conditionals, such as those generated by the `match' macro. Peval can
984now do simple beta-reductions of procedures with rest arguments. It
985also avoids residualizing degenerate lexical aliases, even when full
986inlining is not possible. Finally, peval now uses the effects analysis
987introduced for the CSE pass. More precise effects analysis allows peval
988to move more code.
989
990** Run finalizers asynchronously in asyncs
991
992Finalizers are now run asynchronously, via an async. See Asyncs in the
993manual. This allows Guile and user code to safely allocate memory while
994holding a mutex.
995
996** Update SRFI-14 character sets to Unicode 6.1
997
998Note that this update causes the Latin-1 characters `§' and `¶' to be
999reclassified as punctuation. They were previously considered to be part
1000of `char-set:symbol'.
1001
1002** Better source information for datums
1003
1004When the `positions' reader option is on, as it is by default, Guile's
1005reader will record source information for more kinds of datums.
1006
1007** Improved error and warning messages
1008
d7a33b64
LC
1009`syntax-violation' errors now prefer `subform' for source info, with
1010`form' as fallback. Syntactic errors in `cond' and `case' now produce
d2e35793
AW
1011better errors. `case' can now warn on duplicate datums, or datums that
1012cannot be usefully compared with `eqv?'. `-Warity-mismatch' now handles
1013applicable structs. `-Wformat' is more robust in the presence of
1014`gettext'. Finally, various exceptions thrown by the Web modules now
1015define appropriate exception printers.
1016
1017** A few important bug fixes in the HTTP modules.
1018
1019Guile's web server framework now checks if an application returns a body
d7a33b64 1020where it is not permitted, for example in response to a HEAD request,
d2e35793
AW
1021and warn or truncate the response as appropriate. Bad requests now
1022cause a 400 Bad Request response to be printed before closing the port.
1023Finally, some date-printing and URL-parsing bugs were fixed.
1024
1025** Pretty-print improvements
1026
1027When Guile needs to pretty-print Tree-IL, it will try to reconstruct
1028`cond', `or`, and other derived syntax forms from the primitive tree-IL
1029forms. It also uses the original names instead of the fresh unique
1030names, when it is unambiguous to do so. This can be seen in the output
1031of REPL commands like `,optimize'.
1032
1033Also, the `pretty-print' procedure has a new keyword argument,
1034`#:max-expr-width'.
1035
1036** Fix memory leak involving applicable SMOBs
1037
1038At some point in the 1.9.x series, Guile began leaking any applicable
1039SMOB that was actually applied. (There was a weak-key map from SMOB to
1040trampoline functions, where the value had a strong reference on the
1041key.) This has been fixed. There was much rejoicing!
1042
32299e49
AW
1043** Support for HTTP/1.1 chunked transfer coding
1044
1045See "Transfer Codings" in the manual, for more.
1046
d2e35793
AW
1047** Micro-optimizations
1048
1049A pile of micro-optimizations: the `string-trim' function when called
1050with `char-set:whitespace'; the `(web http)' parsers; SMOB application;
1051conversion of raw UTF-8 and UTF-32 data to and from SCM strings; vlists
1052and vhashes; `read' when processing string literals.
1053
1054** Incompatible change to `scandir'
1055
1056As was the original intention, `scandir' now runs the `select?'
1057procedure on all items, including subdirectories and the `.' and `..'
1058entries. It receives the basename of the file in question instead of
1059the full name. We apologize for this incompatible change to this
1060function introduced in the 2.0.4 release.
1061
1062* Manual updates
1063
1064The manual has been made much more consistent in its naming conventions
1065with regards to formal parameters of functions. Thanks to Bake Timmons.
1066
1067* New interfaces
1068
1069** New C function: `scm_to_pointer'
32299e49 1070** New C inline functions: `scm_new_smob', `scm_new_double_smob'
d2e35793
AW
1071** (ice-9 format): Add ~h specifier for localized number output.
1072** (web response): New procedure: `response-must-not-include-body?'
1073** New predicate: 'supports-source-properties?'
8898f43c 1074** New C helpers: `scm_c_values', `scm_c_nvalues'
d2e35793
AW
1075** Newly public inline C function: `scm_unget_byte'
1076** (language tree-il): New functions: `tree-il=?', `tree-il-hash'
1077** New fluid: `%default-port-conversion-strategy'
1078** New syntax: `=>' within `case'
32299e49
AW
1079** (web http): `make-chunked-input-port', `make-chunked-output-port'
1080** (web http): `declare-opaque-header!'
d2e35793
AW
1081
1082Search the manual for these identifiers, for more information.
1083
1084* New deprecations
1085
1086** `close-io-port' deprecated
1087
1088Use `close-port'.
1089
1090** `scm_sym2var' deprecated
1091
1092In most cases, replace with `scm_lookup' or `scm_module_variable'. Use
1093`scm_define' or `scm_module_ensure_local_variable' if the second
1094argument is nonzero. See "Accessing Modules from C" in the manual, for
1095full details.
1096
1097** Lookup closures deprecated
1098
1099These were never documented. See "Module System Reflection" in the
1100manual for replacements.
1101
1102* Build fixes
1103
1104** Fix compilation against uninstalled Guile on non-GNU platforms.
1105** Fix `SCM_I_ERROR' definition for MinGW without networking.
1106** Fix compilation with the Sun C compiler.
1107** Fix check for `clock_gettime' on OpenBSD and some other systems.
1108** Fix build with --enable-debug-malloc.
1109** Honor $(program_transform_name) for the `guile-tools' symlink.
1110** Fix cross-compilation of GOOPS-using code.
1111
1112* Bug fixes
1113
1114** Fix use of unitialized stat buffer in search-path of absolute paths.
1115** Avoid calling `freelocale' with a NULL argument.
1116** Work around erroneous tr_TR locale in Darwin 8 in tests.
1117** Fix `getaddrinfo' test for Darwin 8.
1118** Use Gnulib's `regex' module for better regex portability.
1119** `source-properties' and friends work on any object
1120** Rewrite open-process in C, for robustness related to threads and fork
1121** Fix <TAG>vector-length when applied to other uniform vector types
1122** Fix escape-only prompt optimization (was disabled previously)
1123** Fix a segfault when /dev/urandom is not accessible
1124** Fix flush on soft ports, so that it actually runs.
1125** Better compatibility of SRFI-9 records with core records
1126** Fix and clarify documentation of `sorted?'.
1127** Fix IEEE-754 endianness conversion in bytevectors.
1128** Correct thunk check in the `wind' instruction.
1129** Add @acronym support to texinfo modules
1130** Fix docbook->texi for <ulink> without URL
1131** Fix `setvbuf' to leave the line/column number unchanged.
1132** Add missing public declaration for `scm_take_from_input_buffers'.
1133** Fix relative file name canonicalization with empty %LOAD-PATH entries.
1134** Import newer (ice-9 match) from Chibi-Scheme.
1135** Fix unbound variables and unbound values in ECMAScript runtime.
1136** Make SRFI-6 string ports Unicode-capable.
1137
1138\f
f7cf5898
LC
1139Changes in 2.0.5 (since 2.0.4):
1140
1141This release fixes the binary interface information (SONAME) of
1142libguile, which was incorrect in 2.0.4. It does not contain other
1143changes.
1144
1145\f
f43622a2
AW
1146Changes in 2.0.4 (since 2.0.3):
1147
f41ef416 1148* Notable changes
f43622a2 1149
f41ef416 1150** Better debuggability for interpreted procedures.
f43622a2
AW
1151
1152Guile 2.0 came with a great debugging experience for compiled
1153procedures, but the story for interpreted procedures was terrible. Now,
486bd70d
AW
1154at least, interpreted procedures have names, and the `arity' procedure
1155property is always correct (or, as correct as it can be, in the presence
1156of `case-lambda').
f43622a2
AW
1157
1158** Support for cross-compilation.
1159
1160One can now use a native Guile to cross-compile `.go' files for a
1161different architecture. See the documentation for `--target' in the
486bd70d
AW
1162"Compilation" section of the manual, for information on how to use the
1163cross-compiler. See the "Cross building Guile" section of the README,
1164for more on how to cross-compile Guile itself.
f43622a2 1165
d4b5c773
AW
1166** The return of `local-eval'.
1167
1168Back by popular demand, `the-environment' and `local-eval' allow the
1169user to capture a lexical environment, and then evaluate arbitrary
1170expressions in that context. There is also a new `local-compile'
1171command. See "Local Evaluation" in the manual, for more. Special
1172thanks to Mark Weaver for an initial implementation of this feature.
1173
f43622a2
AW
1174** Fluids can now have default values.
1175
1176Fluids are used for dynamic and thread-local binding. They have always
1177inherited their values from the context or thread that created them.
1178However, there was a case in which a new thread would enter Guile, and
1179the default values of all the fluids would be `#f' for that thread.
1180
1181This has now been fixed so that `make-fluid' has an optional default
486bd70d 1182value for fluids in unrelated dynamic roots, which defaults to `#f'.
f43622a2
AW
1183
1184** Garbage collector tuning.
1185
1186The garbage collector has now been tuned to run more often under some
1187circumstances.
1188
1189*** Unmanaged allocation
1190
1191The new `scm_gc_register_allocation' function will notify the collector
1192of unmanaged allocation. This will cause the collector to run sooner.
1193Guile's `scm_malloc', `scm_calloc', and `scm_realloc' unmanaged
1194allocators eventually call this function. This leads to better
1195performance under steady-state unmanaged allocation.
1196
1197*** Transient allocation
1198
1199When the collector runs, it will try to record the total memory
1200footprint of a process, if the platform supports this information. If
1201the memory footprint is growing, the collector will run more frequently.
1202This reduces the increase of the resident size of a process in response
1203to a transient increase in allocation.
1204
1205*** Management of threads, bignums
1206
1207Creating a thread will allocate a fair amount of memory. Guile now does
1208some GC work (using `GC_collect_a_little') when allocating a thread.
1209This leads to a better memory footprint when creating many short-lived
1210threads.
1211
1212Similarly, bignums can occupy a lot of memory. Guile now offers hooks
1213to enable custom GMP allocators that end up calling
486bd70d 1214`scm_gc_register_allocation'. These allocators are enabled by default
f43622a2
AW
1215when running Guile from the command-line. To enable them in libraries,
1216set the `scm_install_gmp_memory_functions' variable to a nonzero value
1217before loading Guile.
1218
f43622a2
AW
1219** SRFI-39 parameters are available by default.
1220
f41ef416
AW
1221Guile now includes support for parameters, as defined by SRFI-39, in the
1222default environment. See "Parameters" in the manual, for more
1223information. `current-input-port', `current-output-port', and
1224`current-error-port' are now parameters.
f43622a2 1225
d4b5c773 1226** Add `current-warning-port'.
f43622a2 1227
f41ef416
AW
1228Guile now outputs warnings on a separate port, `current-warning-port',
1229initialized to the value that `current-error-port' has on startup.
f43622a2 1230
f41ef416 1231** Syntax parameters.
f43622a2 1232
f41ef416
AW
1233Following Racket's lead, Guile now supports syntax parameters. See
1234"Syntax parameters" in the manual, for more.
f43622a2 1235
f41ef416
AW
1236Also see Barzilay, Culpepper, and Flatt's 2011 SFP workshop paper,
1237"Keeping it Clean with syntax-parameterize".
f43622a2 1238
f41ef416 1239** Parse command-line arguments from the locale encoding.
f43622a2 1240
f41ef416
AW
1241Guile now attempts to parse command-line arguments using the user's
1242locale. However for backwards compatibility with other 2.0.x releases,
1243it does so without actually calling `setlocale'. Please report any bugs
1244in this facility to bug-guile@gnu.org.
f43622a2 1245
d4b5c773
AW
1246** One-armed conditionals: `when' and `unless'
1247
1248Guile finally has `when' and `unless' in the default environment. Use
1249them whenever you would use an `if' with only one branch. See
1250"Conditionals" in the manual, for more.
1251
1252** `current-filename', `add-to-load-path'
1253
1254There is a new form, `(current-filename)', which expands out to the
1255source file in which it occurs. Combined with the new
1256`add-to-load-path', this allows simple scripts to easily add nearby
1257directories to the load path. See "Load Paths" in the manual, for more.
1258
1259** `random-state-from-platform'
1260
1261This procedure initializes a random seed using good random sources
1262available on your platform, such as /dev/urandom. See "Random Number
1263Generation" in the manual, for more.
1264
7cb11224
LC
1265** Warn about unsupported `simple-format' options.
1266
1267The `-Wformat' compilation option now reports unsupported format options
1268passed to `simple-format'.
1269
241247e8
AW
1270** Manual updates
1271
1272Besides the sections already mentioned, the following manual sections
1273are new in this release: "Modules and the File System", "Module System
1274Reflection", "Syntax Transformer Helpers", and "Local Inclusion".
1275
f41ef416
AW
1276* New interfaces
1277
1278** (ice-9 session): `apropos-hook'
1279** New print option: `escape-newlines', defaults to #t.
1280** (ice-9 ftw): `file-system-fold', `file-system-tree', `scandir'
d4b5c773 1281** `scm_c_value_ref': access to multiple returned values from C
07c2ca0f 1282** scm_call (a varargs version), scm_call_7, scm_call_8, scm_call_9
d4b5c773
AW
1283** Some new syntax helpers in (system syntax)
1284
1285Search the manual for these identifiers and modules, for more.
1286
1287* Build fixes
1288
1289** FreeBSD build fixes.
1290** OpenBSD compilation fixes.
1291** Solaris 2.10 test suite fixes.
1292** IA64 compilation fix.
1293** MinGW build fixes.
1294** Work around instruction reordering on SPARC and HPPA in the VM.
1295** Gnulib updates: added `dirfd', `setenv' modules.
f43622a2 1296
f43622a2
AW
1297* Bug fixes
1298
d4b5c773
AW
1299** Add a deprecated alias for $expt.
1300** Add an exception printer for `getaddrinfo-error'.
1301** Add deprecated shim for `scm_display_error' with stack as first argument.
1302** Add warnings for unsupported `simple-format' options.
1303** Allow overlapping regions to be passed to `bytevector-copy!'.
d4b5c773
AW
1304** Better function prologue disassembly
1305** Compiler: fix miscompilation of (values foo ...) in some contexts.
1306** Compiler: fix serialization of #nil-terminated lists.
1307** Compiler: allow values bound in non-tail let expressions to be collected.
1308** Deprecate SCM_ASRTGO.
1309** Document invalidity of (begin) as expression; add back-compat shim.
1310** Don't leak file descriptors when mmaping objcode.
1311** Empty substrings no longer reference the original stringbuf.
1312** FFI: Fix `set-pointer-finalizer!' to leave the type cell unchanged.
f43622a2 1313** FFI: Hold a weak reference to the CIF made by `procedure->pointer'.
f41ef416
AW
1314** FFI: Hold a weak reference to the procedure passed to `procedure->pointer'.
1315** FFI: Properly unpack small integer return values in closure call.
d4b5c773 1316** Fix R6RS `fold-left' so the accumulator is the first argument.
d4b5c773
AW
1317** Fix bit-set*! bug from 2005.
1318** Fix bug in `make-repl' when `lang' is actually a <language>.
1319** Fix bugs related to mutation, the null string, and shared substrings.
1320** Fix <dynwind> serialization.
1321** Fix erroneous check in `set-procedure-properties!'.
1322** Fix generalized-vector-{ref,set!} for slices.
40e92f09 1323** Fix error messages involving definition forms.
adb8054c 1324** Fix primitive-eval to return #<unspecified> for definitions.
f41ef416 1325** HTTP: Extend handling of "Cache-Control" header.
f43622a2 1326** HTTP: Fix qstring writing of cache-extension values
d4b5c773 1327** HTTP: Fix validators for various list-style headers.
f41ef416 1328** HTTP: Permit non-date values for Expires header.
d4b5c773
AW
1329** HTTP: `write-request-line' writes absolute paths, not absolute URIs.
1330** Hack the port-column of current-output-port after printing a prompt.
d4b5c773
AW
1331** Make sure `regexp-quote' tests use Unicode-capable string ports.
1332** Peval: Fix bugs in the new optimizer.
d4b5c773
AW
1333** Statistically unique marks and labels, for robust hygiene across sessions.
1334** Web: Allow URIs with empty authorities, like "file:///etc/hosts".
1335** `,language' at REPL sets the current-language fluid.
1336** `primitive-load' returns the value(s) of the last expression.
f41ef416 1337** `scm_from_stringn' always returns unique strings.
f41ef416 1338** `scm_i_substring_copy' tries to narrow the substring.
d4b5c773 1339** i18n: Fix gc_malloc/free mismatch on non-GNU systems.
f43622a2 1340
7cb11224 1341\f
02f91898
AW
1342Changes in 2.0.3 (since 2.0.2):
1343
1344* Speed improvements
1345
1346** Guile has a new optimizer, `peval'.
1347
1348`Peval' is a partial evaluator that performs constant folding, dead code
1349elimination, copy propagation, and inlining. By default it runs on
1350every piece of code that Guile compiles, to fold computations that can
1351happen at compile-time, so they don't have to happen at runtime.
1352
1353If we did our job right, the only impact you would see would be your
1354programs getting faster. But if you notice slowdowns or bloated code,
1355please send a mail to bug-guile@gnu.org with details.
1356
1357Thanks to William R. Cook, Oscar Waddell, and Kent Dybvig for inspiring
1358peval and its implementation.
1359
1360You can see what peval does on a given piece of code by running the new
1361`,optimize' REPL meta-command, and comparing it to the output of
1362`,expand'. See "Compile Commands" in the manual, for more.
1363
1364** Fewer calls to `stat'.
1365
1366Guile now stats only the .go file and the .scm file when loading a fresh
1367compiled file.
1368
1369* Notable changes
1370
1371** New module: `(web client)', a simple synchronous web client.
1372
1373See "Web Client" in the manual, for more.
1374
1375** Users can now install compiled `.go' files.
1376
1377See "Installing Site Packages" in the manual.
1378
1379** Remove Front-Cover and Back-Cover text from the manual.
1380
1381The manual is still under the GNU Free Documentation License, but no
1382longer has any invariant sections.
1383
1384** More helpful `guild help'.
1385
1386`guild' is Guile's multi-tool, for use in shell scripting. Now it has a
1387nicer interface for querying the set of existing commands, and getting
1388help on those commands. Try it out and see!
1389
1390** New macro: `define-syntax-rule'
1391
1392`define-syntax-rule' is a shorthand to make a `syntax-rules' macro with
1393one clause. See "Syntax Rules" in the manual, for more.
1394
1395** The `,time' REPL meta-command now has more precision.
1396
1397The output of this command now has microsecond precision, instead of
139810-millisecond precision.
1399
1400** `(ice-9 match)' can now match records.
1401
1402See "Pattern Matching" in the manual, for more on matching records.
1403
1404** New module: `(language tree-il debug)'.
1405
1406This module provides a tree-il verifier. This is useful for people that
1407generate tree-il, usually as part of a language compiler.
1408
1409** New functions: `scm_is_exact', `scm_is_inexact'.
1410
1411These provide a nice C interface for Scheme's `exact?' and `inexact?',
1412respectively.
1413
1414* Bugs fixed
1415
1416See the git log (or the ChangeLog) for more details on these bugs.
1417
1418** Fix order of importing modules and resolving duplicates handlers.
1419** Fix a number of bugs involving extended (merged) generics.
1420** Fix invocation of merge-generics duplicate handler.
1421** Fix write beyond array end in arrays.c.
1422** Fix read beyond end of hashtable size array in hashtab.c.
1423** (web http): Locale-independent parsing and serialization of dates.
1424** Ensure presence of Host header in HTTP/1.1 requests.
1425** Fix take-right and drop-right for improper lists.
1426** Fix leak in get_current_locale().
1427** Fix recursive define-inlinable expansions.
1428** Check that srfi-1 procedure arguments are procedures.
1429** Fix r6rs `map' for multiple returns.
1430** Fix scm_tmpfile leak on POSIX platforms.
1431** Fix a couple of leaks (objcode->bytecode, make-boot-program).
1432** Fix guile-lib back-compatibility for module-stexi-documentation.
1433** Fix --listen option to allow other ports.
1434** Fix scm_to_latin1_stringn for substrings.
1435** Fix compilation of untyped arrays of rank not 1.
1436** Fix unparse-tree-il of <dynset>.
1437** Fix reading of #||||#.
2be3feb1
LC
1438** Fix segfault in GOOPS when class fields are redefined.
1439** Prefer poll(2) over select(2) to allow file descriptors above FD_SETSIZE.
02f91898
AW
1440
1441\f
e4a2807e
AW
1442Changes in 2.0.2 (since 2.0.1):
1443
1444* Notable changes
1445
2dd49486
AW
1446** `guile-tools' renamed to `guild'
1447
1448The new name is shorter. Its intended future use is for a CPAN-like
1449system for Guile wizards and journeyfolk to band together to share code;
1450hence the name. `guile-tools' is provided as a backward-compatible
1451symbolic link. See "Using Guile Tools" in the manual, for more.
1452
e4a2807e
AW
1453** New control operators: `shift' and `reset'
1454
1455See "Shift and Reset" in the manual, for more information.
1456
1457** `while' as an expression
1458
1459Previously the return value of `while' was unspecified. Now its
1460values are specified both in the case of normal termination, and via
1461termination by invoking `break', possibly with arguments. See "while
1462do" in the manual for more.
1463
1464** Disallow access to handles of weak hash tables
1465
1466`hash-get-handle' and `hash-create-handle!' are no longer permitted to
1467be called on weak hash tables, because the fields in a weak handle could
1468be nulled out by the garbage collector at any time, but yet they are
1469otherwise indistinguishable from pairs. Use `hash-ref' and `hash-set!'
1470instead.
1471
1472** More precision for `get-internal-run-time', `get-internal-real-time'
1473
1474On 64-bit systems which support POSIX clocks, Guile's internal timing
1475procedures offer nanosecond resolution instead of the 10-millisecond
1476resolution previously available. 32-bit systems now use 1-millisecond
1477timers.
1478
1479** Guile now measures time spent in GC
1480
1481`gc-stats' now returns a meaningful value for `gc-time-taken'.
1482
1483** Add `gcprof'
1484
1485The statprof profiler now exports a `gcprof' procedure, driven by the
1486`after-gc-hook', to see which parts of your program are causing GC. Let
1487us know if you find it useful.
1488
1489** `map', `for-each' and some others now implemented in Scheme
1490
1491We would not mention this in NEWS, as it is not a user-visible change,
1492if it were not for one thing: `map' and `for-each' are no longer
1493primitive generics. Instead they are normal bindings, which can be
1494wrapped by normal generics. This fixes some modularity issues between
1495core `map', SRFI-1 `map', and GOOPS.
1496
1497Also it's pretty cool that we can do this without a performance impact.
1498
1499** Add `scm_peek_byte_or_eof'.
1500
1501This helper is like `scm_peek_char_or_eof', but for bytes instead of
1502full characters.
1503
1504** Implement #:stop-at-first-non-option option for getopt-long
1505
1506See "getopt-long Reference" in the manual, for more information.
1507
1508** Improve R6RS conformance for conditions in the I/O libraries
1509
1510The `(rnrs io simple)' module now raises the correct R6RS conditions in
1511error cases. `(rnrs io ports)' is also more correct now, though it is
1512still a work in progress.
1513
1514** All deprecated routines emit warnings
1515
1516A few deprecated routines were lacking deprecation warnings. This has
1517been fixed now.
1518
1519* Speed improvements
1520
1521** Constants in compiled code now share state better
1522
1523Constants with shared state, like `("foo")' and `"foo"', now share state
1524as much as possible, in the entire compilation unit. This cuts compiled
1525`.go' file sizes in half, generally, and speeds startup.
1526
1527** VLists: optimize `vlist-fold-right', and add `vhash-fold-right'
1528
1529These procedures are now twice as fast as they were.
1530
1531** UTF-8 ports to bypass `iconv' entirely
1532
1533This reduces memory usage in a very common case.
1534
1535** Compiler speedups
1536
1537The compiler is now about 40% faster. (Note that this is only the case
1538once the compiler is itself compiled, so the build still takes as long
1539as it did before.)
1540
1541** VM speed tuning
1542
1543Some assertions that were mostly useful for sanity-checks on the
1544bytecode compiler are now off for both "regular" and "debug" engines.
1545This together with a fix to cache a TLS access and some other tweaks
1546improve the VM's performance by about 20%.
1547
1548** SRFI-1 list-set optimizations
1549
1550lset-adjoin and lset-union now have fast paths for eq? sets.
1551
1552** `memq', `memv' optimizations
1553
1554These procedures are now at least twice as fast than in 2.0.1.
1555
1556* Deprecations
1557
1558** Deprecate scm_whash API
1559
1560`scm_whash_get_handle', `SCM_WHASHFOUNDP', `SCM_WHASHREF',
1561`SCM_WHASHSET', `scm_whash_create_handle', `scm_whash_lookup', and
1562`scm_whash_insert' are now deprecated. Use the normal hash table API
1563instead.
1564
1565** Deprecate scm_struct_table
1566
1567`SCM_STRUCT_TABLE_NAME', `SCM_SET_STRUCT_TABLE_NAME',
1568`SCM_STRUCT_TABLE_CLASS', `SCM_SET_STRUCT_TABLE_CLASS',
1569`scm_struct_table', and `scm_struct_create_handle' are now deprecated.
1570These routines formed part of the internals of the map between structs
1571and classes.
1572
1573** Deprecate scm_internal_dynamic_wind
1574
1575The `scm_t_inner' type and `scm_internal_dynamic_wind' are deprecated,
1576as the `scm_dynwind' API is better, and this API encourages users to
1577stuff SCM values into pointers.
1578
1579** Deprecate scm_immutable_cell, scm_immutable_double_cell
1580
1581These routines are deprecated, as the GC_STUBBORN API doesn't do
1582anything any more.
1583
1584* Manual updates
1585
1586Andreas Rottman kindly transcribed the missing parts of the `(rnrs io
1587ports)' documentation from the R6RS documentation. Thanks Andreas!
1588
1589* Bugs fixed
1590
1591** Fix double-loading of script in -ds case
1592** -x error message fix
1593** iconveh-related cross-compilation fixes
1594** Fix small integer return value packing on big endian machines.
1595** Fix hash-set! in weak-value table from non-immediate to immediate
1596** Fix call-with-input-file & relatives for multiple values
1597** Fix `hash' for inf and nan
1598** Fix libguile internal type errors caught by typing-strictness==2
f39779b1
LC
1599** Fix compile error in MinGW fstat socket detection
1600** Fix generation of auto-compiled file names on MinGW
e4a2807e
AW
1601** Fix multithreaded access to internal hash tables
1602** Emit a 1-based line number in error messages
1603** Fix define-module ordering
7505c6e0 1604** Fix several POSIX functions to use the locale encoding
f39779b1
LC
1605** Add type and range checks to the complex generalized vector accessors
1606** Fix unaligned accesses for bytevectors of complex numbers
1607** Fix '(a #{.} b)
1608** Fix erroneous VM stack overflow for canceled threads
e4a2807e
AW
1609
1610\f
882c8963
MW
1611Changes in 2.0.1 (since 2.0.0):
1612
7c81eba2 1613* Notable changes
9d6a151f 1614
7c81eba2 1615** guile.m4 supports linking with rpath
9d6a151f 1616
7c81eba2
AW
1617The GUILE_FLAGS macro now sets GUILE_LIBS and GUILE_LTLIBS, which
1618include appropriate directives to the linker to include libguile-2.0.so
1619in the runtime library lookup path.
9d6a151f 1620
7c81eba2 1621** `begin' expands macros in its body before other expressions
9d6a151f 1622
7c81eba2 1623This enables support for programs like the following:
9d6a151f 1624
7c81eba2
AW
1625 (begin
1626 (define even?
1627 (lambda (x)
1628 (or (= x 0) (odd? (- x 1)))))
1629 (define-syntax odd?
1630 (syntax-rules ()
1631 ((odd? x) (not (even? x)))))
1632 (even? 10))
9d6a151f 1633
7c81eba2 1634** REPL reader usability enhancements
9d6a151f 1635
7c81eba2
AW
1636The REPL now flushes input after a read error, which should prevent one
1637error from causing other errors. The REPL also now interprets comments
1638as whitespace.
9d6a151f 1639
7c81eba2 1640** REPL output has configurable width
9d6a151f 1641
7c81eba2
AW
1642The REPL now defaults to output with the current terminal's width, in
1643columns. See "Debug Commands" in the manual for more information on
1644the ,width command.
9d6a151f 1645
7c81eba2 1646** Better C access to the module system
9d6a151f 1647
7c81eba2
AW
1648Guile now has convenient C accessors to look up variables or values in
1649modules and their public interfaces. See `scm_c_public_ref' and friends
1650in "Accessing Modules from C" in the manual.
9d6a151f 1651
7c81eba2 1652** Added `scm_call_5', `scm_call_6'
9d6a151f 1653
7c81eba2 1654See "Fly Evaluation" in the manual.
9d6a151f 1655
7c81eba2 1656** Added `scm_from_latin1_keyword', `scm_from_utf8_keyword'
9d6a151f 1657
7c81eba2
AW
1658See "Keyword Procedures" in the manual, for more. Note that
1659`scm_from_locale_keyword' should not be used when the name is a C string
1660constant.
9d6a151f 1661
7c81eba2 1662** R6RS unicode and string I/O work
9d6a151f 1663
7c81eba2
AW
1664Added efficient implementations of `get-string-n' and `get-string-n!'
1665for binary ports. Exported `current-input-port', `current-output-port'
1666and `current-error-port' from `(rnrs io ports)', and enhanced support
1667for transcoders.
9d6a151f 1668
7c81eba2 1669** Added `pointer->scm', `scm->pointer' to `(system foreign)'
9d6a151f 1670
7c81eba2
AW
1671These procedure are useful if one needs to pass and receive SCM values
1672to and from foreign functions. See "Foreign Variables" in the manual,
1673for more.
9d6a151f 1674
7c81eba2 1675** Added `heap-allocated-since-gc' to `(gc-stats)'
9d6a151f 1676
7c81eba2 1677Also fixed the long-standing bug in the REPL `,stat' command.
9d6a151f 1678
7c81eba2 1679** Add `on-error' REPL option
9d6a151f 1680
7c81eba2
AW
1681This option controls what happens when an error occurs at the REPL, and
1682defaults to `debug', indicating that Guile should enter the debugger.
1683Other values include `report', which will simply print a backtrace
1684without entering the debugger. See "System Commands" in the manual.
9d6a151f 1685
7c81eba2 1686** Enforce immutability of string literals
9d6a151f 1687
7c81eba2 1688Attempting to mutate a string literal now causes a runtime error.
9d6a151f 1689
7c81eba2 1690** Fix pthread redirection
9d6a151f 1691
7c81eba2
AW
1692Guile 2.0.0 shipped with headers that, if configured with pthread
1693support, would re-define `pthread_create', `pthread_join', and other API
1694to redirect to the BDW-GC wrappers, `GC_pthread_create', etc. This was
1695unintended, and not necessary: because threads must enter Guile with
2e6829d2 1696`scm_with_guile', Guile can handle thread registration itself, without
7c81eba2
AW
1697needing to make the GC aware of all threads. This oversight has been
1698fixed.
9d6a151f 1699
7c81eba2 1700** `with-continuation-barrier' now unwinds on `quit'
9d6a151f 1701
7c81eba2
AW
1702A throw to `quit' in a continuation barrier will cause Guile to exit.
1703Before, it would do so before unwinding to the barrier, which would
1704prevent cleanup handlers from running. This has been fixed so that it
1705exits only after unwinding.
9d6a151f 1706
7c81eba2 1707** `string->pointer' and `pointer->string' have optional encoding arg
9d6a151f 1708
7c81eba2
AW
1709This allows users of the FFI to more easily deal in strings with
1710particular (non-locale) encodings, like "utf-8". See "Void Pointers and
1711Byte Access" in the manual, for more.
9d6a151f 1712
7c81eba2 1713** R6RS fixnum arithmetic optimizations
9d6a151f 1714
7c81eba2
AW
1715R6RS fixnum operations are are still slower than generic arithmetic,
1716however.
9d6a151f 1717
7c81eba2 1718** New procedure: `define-inlinable'
9d6a151f 1719
7c81eba2 1720See "Inlinable Procedures" in the manual, for more.
9d6a151f 1721
7c81eba2 1722** New procedure: `exact-integer-sqrt'
9d6a151f 1723
7c81eba2 1724See "Integer Operations" in the manual, for more.
9d6a151f 1725
7c81eba2 1726** "Extended read syntax" for symbols parses better
9d6a151f 1727
7c81eba2
AW
1728In #{foo}# symbols, backslashes are now treated as escapes, as the
1729symbol-printing code intended. Additionally, "\x" within #{foo}# is now
1730interpreted as starting an R6RS hex escape. This is backward compatible
1731because the symbol printer would never produce a "\x" before. The
1732printer also works better too.
9d6a151f 1733
6b480ced 1734** Added `--fresh-auto-compile' option
1e56cff2
AW
1735
1736This allows a user to invalidate the auto-compilation cache. It's
1737usually not needed. See "Compilation" in the manual, for a discussion.
1738
7c81eba2 1739* Manual updates
9d6a151f 1740
7c81eba2 1741** GOOPS documentation updates
9d6a151f 1742
7c81eba2 1743** New man page
9d6a151f 1744
7c81eba2 1745Thanks to Mark Harig for improvements to guile.1.
9d6a151f 1746
7c81eba2 1747** SRFI-23 documented
9d6a151f 1748
7c81eba2 1749The humble `error' SRFI now has an entry in the manual.
9d6a151f 1750
7c81eba2 1751* New modules
9d6a151f 1752
de424d95 1753** `(ice-9 binary-ports)': "R6RS I/O Ports", in the manual
7c81eba2 1754** `(ice-9 eval-string)': "Fly Evaluation", in the manual
2e6829d2 1755** `(ice-9 command-line)', not documented yet
9d6a151f 1756
882c8963
MW
1757* Bugs fixed
1758
2e6829d2 1759** Fixed `iconv_t' memory leak on close-port
7c81eba2
AW
1760** Fixed some leaks with weak hash tables
1761** Export `vhash-delq' and `vhash-delv' from `(ice-9 vlist)'
1762** `after-gc-hook' works again
1763** `define-record-type' now allowed in nested contexts
1764** `exact-integer-sqrt' now handles large integers correctly
1765** Fixed C extension examples in manual
1766** `vhash-delete' honors HASH argument
1767** Make `locale-digit-grouping' more robust
1768** Default exception printer robustness fixes
1769** Fix presence of non-I CPPFLAGS in `guile-2.0.pc'
1770** `read' updates line/column numbers when reading SCSH block comments
1771** Fix imports of multiple custom interfaces of same module
1772** Fix encoding scanning for non-seekable ports
1773** Fix `setter' when called with a non-setter generic
1774** Fix f32 and f64 bytevectors to not accept rationals
1775** Fix description of the R6RS `finite?' in manual
1776** Quotient, remainder and modulo accept inexact integers again
1777** Fix `continue' within `while' to take zero arguments
1778** Fix alignment for structures in FFI
1779** Fix port-filename of stdin, stdout, stderr to match the docs
1780** Fix weak hash table-related bug in `define-wrapped-pointer-type'
1781** Fix partial continuation application with pending procedure calls
1782** scm_{to,from}_locale_string use current locale, not current ports
1783** Fix thread cleanup, by using a pthread_key destructor
1784** Fix `quit' at the REPL
1785** Fix a failure to sync regs in vm bytevector ops
1786** Fix (texinfo reflection) to handle nested structures like syntax patterns
1787** Fix stexi->html double translation
1788** Fix tree-il->scheme fix for <prompt>
1789** Fix compilation of <prompt> in <fix> in single-value context
1790** Fix race condition in ensure-writable-dir
1791** Fix error message on ,disassemble "non-procedure"
1792** Fix prompt and abort with the boot evaluator
1793** Fix `procedure->pointer' for functions returning `void'
1794** Fix error reporting in dynamic-pointer
1795** Fix problems detecting coding: in block comments
1796** Fix duplicate load-path and load-compiled-path in compilation environment
1797** Add fallback read(2) suppport for .go files if mmap(2) unavailable
1798** Fix c32vector-set!, c64vector-set!
1799** Fix mistakenly deprecated read syntax for uniform complex vectors
1800** Fix parsing of exact numbers with negative exponents
1801** Ignore SIGPIPE in (system repl server)
1802** Fix optional second arg to R6RS log function
1803** Fix R6RS `assert' to return true value.
1804** Fix fencepost error when seeking in bytevector input ports
2e6829d2
LC
1805** Gracefully handle `setlocale' errors when starting the REPL
1806** Improve support of the `--disable-posix' configure option
1807** Make sure R6RS binary ports pass `binary-port?' regardless of the locale
1808** Gracefully handle unterminated UTF-8 sequences instead of hitting an `assert'
882c8963 1809
882c8963
MW
1810
1811\f
d9f46472 1812Changes in 2.0.0 (changes since the 1.8.x series):
96b73e84
AW
1813
1814* New modules (see the manual for details)
1815
1816** `(srfi srfi-18)', more sophisticated multithreading support
ef6b0e8d 1817** `(srfi srfi-27)', sources of random bits
7cd99cba 1818** `(srfi srfi-38)', External Representation for Data With Shared Structure
ef6b0e8d
AW
1819** `(srfi srfi-42)', eager comprehensions
1820** `(srfi srfi-45)', primitives for expressing iterative lazy algorithms
1821** `(srfi srfi-67)', compare procedures
96b73e84 1822** `(ice-9 i18n)', internationalization support
7cd99cba 1823** `(ice-9 futures)', fine-grain parallelism
0f13fcde 1824** `(rnrs bytevectors)', the R6RS bytevector API
93617170 1825** `(rnrs io ports)', a subset of the R6RS I/O port API
96b73e84 1826** `(system xref)', a cross-referencing facility (FIXME undocumented)
dbd9532e 1827** `(ice-9 vlist)', lists with constant-time random access; hash lists
fb53c347 1828** `(system foreign)', foreign function interface
18e90860
AW
1829** `(sxml match)', a pattern matcher for SXML
1830** `(srfi srfi-9 gnu)', extensions to the SRFI-9 record library
1831** `(system vm coverage)', a line-by-line code coverage library
7cd99cba
AW
1832** `(web uri)', URI data type, parser, and unparser
1833** `(web http)', HTTP header parsers and unparsers
1834** `(web request)', HTTP request data type, reader, and writer
1835** `(web response)', HTTP response data type, reader, and writer
1836** `(web server)', Generic HTTP server
1837** `(ice-9 poll)', a poll wrapper
1838** `(web server http)', HTTP-over-TCP web server implementation
66ad445d 1839
51cb0cca
AW
1840** Replaced `(ice-9 match)' with Alex Shinn's compatible, hygienic matcher.
1841
1842Guile's copy of Andrew K. Wright's `match' library has been replaced by
1843a compatible hygienic implementation by Alex Shinn. It is now
1844documented, see "Pattern Matching" in the manual.
1845
1846Compared to Andrew K. Wright's `match', the new `match' lacks
1847`match-define', `match:error-control', `match:set-error-control',
1848`match:error', `match:set-error', and all structure-related procedures.
1849
cf8ec359
AW
1850** Imported statprof, SSAX, and texinfo modules from Guile-Lib
1851
1852The statprof statistical profiler, the SSAX XML toolkit, and the texinfo
1853toolkit from Guile-Lib have been imported into Guile proper. See
1854"Standard Library" in the manual for more details.
1855
139fa149
AW
1856** Integration of lalr-scm, a parser generator
1857
1858Guile has included Dominique Boucher's fine `lalr-scm' parser generator
1859as `(system base lalr)'. See "LALR(1) Parsing" in the manual, for more
1860information.
1861
96b73e84
AW
1862* Changes to the stand-alone interpreter
1863
1864** Guile now can compile Scheme to bytecode for a custom virtual machine.
1865
1866Compiled code loads much faster than Scheme source code, and runs around
18673 or 4 times as fast, generating much less garbage in the process.
fa1804e9 1868
29b98fb2 1869** Evaluating Scheme code does not use the C stack.
fa1804e9 1870
29b98fb2
AW
1871Besides when compiling Guile itself, Guile no longer uses a recursive C
1872function as an evaluator. This obviates the need to check the C stack
1873pointer for overflow. Continuations still capture the C stack, however.
fa1804e9 1874
96b73e84
AW
1875** New environment variables: GUILE_LOAD_COMPILED_PATH,
1876 GUILE_SYSTEM_LOAD_COMPILED_PATH
fa1804e9 1877
96b73e84
AW
1878GUILE_LOAD_COMPILED_PATH is for compiled files what GUILE_LOAD_PATH is
1879for source files. It is a different path, however, because compiled
1880files are architecture-specific. GUILE_SYSTEM_LOAD_COMPILED_PATH is like
1881GUILE_SYSTEM_PATH.
1882
1883** New read-eval-print loop (REPL) implementation
1884
51cb0cca
AW
1885Running Guile with no arguments drops the user into the new REPL. See
1886"Using Guile Interactively" in the manual, for more information.
96b73e84 1887
51cb0cca
AW
1888** Remove old Emacs interface
1889
1890Guile had an unused `--emacs' command line argument that was supposed to
1891help when running Guile inside Emacs. This option has been removed, and
1892the helper functions `named-module-use!' and `load-emacs-interface' have
1893been deprecated.
1894
ef6b0e8d
AW
1895** Add `(system repl server)' module and `--listen' command-line argument
1896
1897The `(system repl server)' module exposes procedures to listen on
1898sockets for connections, and serve REPLs to those clients. The --listen
1899command-line argument allows any Guile program to thus be remotely
1900debuggable.
1901
1902See "Invoking Guile" for more information on `--listen'.
1903
7cd99cba
AW
1904** Command line additions
1905
1906The guile binary now supports a new switch "-x", which can be used to
1907extend the list of filename extensions tried when loading files
1908(%load-extensions).
1909
487bacf4
AW
1910** New reader options: `square-brackets', `r6rs-hex-escapes',
1911 `hungry-eol-escapes'
6bf927ab
LC
1912
1913The reader supports a new option (changeable via `read-options'),
1914`square-brackets', which instructs it to interpret square brackets as
29b98fb2 1915parentheses. This option is on by default.
6bf927ab
LC
1916
1917When the new `r6rs-hex-escapes' reader option is enabled, the reader
51cb0cca
AW
1918will recognize string escape sequences as defined in R6RS. R6RS string
1919escape sequences are incompatible with Guile's existing escapes, though,
1920so this option is off by default.
6bf927ab 1921
487bacf4
AW
1922Additionally, Guile follows the R6RS newline escaping rules when the
1923`hungry-eol-escapes' option is enabled.
1924
1925See "String Syntax" in the manual, for more information.
1926
cf8ec359
AW
1927** Function profiling and tracing at the REPL
1928
1929The `,profile FORM' REPL meta-command can now be used to statistically
1930profile execution of a form, to see which functions are taking the most
1931time. See `,help profile' for more information.
1932
1933Similarly, `,trace FORM' traces all function applications that occur
1934during the execution of `FORM'. See `,help trace' for more information.
1935
51cb0cca
AW
1936** Recursive debugging REPL on error
1937
1938When Guile sees an error at the REPL, instead of saving the stack, Guile
1939will directly enter a recursive REPL in the dynamic context of the
1940error. See "Error Handling" in the manual, for more information.
1941
1942A recursive REPL is the same as any other REPL, except that it
1943has been augmented with debugging information, so that one can inspect
1944the context of the error. The debugger has been integrated with the REPL
1945via a set of debugging meta-commands.
cf8ec359 1946
51cb0cca
AW
1947For example, one may access a backtrace with `,backtrace' (or
1948`,bt'). See "Interactive Debugging" in the manual, for more
1949information.
cf8ec359 1950
96b73e84
AW
1951** New `guile-tools' commands: `compile', `disassemble'
1952
93617170 1953Pass the `--help' command-line option to these commands for more
96b73e84
AW
1954information.
1955
b0217d17
AW
1956** Guile now adds its install prefix to the LTDL_LIBRARY_PATH
1957
1958Users may now install Guile to nonstandard prefixes and just run
1959`/path/to/bin/guile', instead of also having to set LTDL_LIBRARY_PATH to
1960include `/path/to/lib'.
1961
1962** Guile's Emacs integration is now more keyboard-friendly
1963
1964Backtraces may now be disclosed with the keyboard in addition to the
1965mouse.
1966
cf8ec359
AW
1967** Load path change: search in version-specific paths before site paths
1968
1969When looking for a module, Guile now searches first in Guile's
1970version-specific path (the library path), *then* in the site dir. This
1971allows Guile's copy of SSAX to override any Guile-Lib copy the user has
1972installed. Also it should cut the number of `stat' system calls by half,
1973in the common case.
1974
51cb0cca
AW
1975** Value history in the REPL on by default
1976
1977By default, the REPL will save computed values in variables like `$1',
1978`$2', and the like. There are programmatic and interactive interfaces to
1979control this. See "Value History" in the manual, for more information.
1980
1981** Readline tab completion for arguments
1982
1983When readline is enabled, tab completion works for arguments too, not
1984just for the operator position.
1985
7cd99cba
AW
1986** Expression-oriented readline history
1987
1988Guile's readline history now tries to operate on expressions instead of
1989input lines. Let us know what you think!
1990
139fa149
AW
1991** Interactive Guile follows GNU conventions
1992
1993As recommended by the GPL, Guile now shows a brief copyright and
1994warranty disclaimer on startup, along with pointers to more information.
cf8ec359 1995
96b73e84
AW
1996* Changes to Scheme functions and syntax
1997
18e90860
AW
1998** Support for R6RS libraries
1999
2000The `library' and `import' forms from the latest Scheme report have been
2001added to Guile, in such a way that R6RS libraries share a namespace with
2002Guile modules. R6RS modules may import Guile modules, and are available
2003for Guile modules to import via use-modules and all the rest. See "R6RS
2004Libraries" in the manual for more information.
2005
2006** Implementations of R6RS libraries
2007
2008Guile now has implementations for all of the libraries defined in the
2009R6RS. Thanks to Julian Graham for this excellent hack. See "R6RS
2010Standard Libraries" in the manual for a full list of libraries.
2011
2012** Partial R6RS compatibility
2013
2014Guile now has enough support for R6RS to run a reasonably large subset
2015of R6RS programs.
2016
2017Guile is not fully R6RS compatible. Many incompatibilities are simply
2018bugs, though some parts of Guile will remain R6RS-incompatible for the
2019foreseeable future. See "R6RS Incompatibilities" in the manual, for more
2020information.
2021
2022Please contact bug-guile@gnu.org if you have found an issue not
2023mentioned in that compatibility list.
2024
4a457691
AW
2025** New implementation of `primitive-eval'
2026
2027Guile's `primitive-eval' is now implemented in Scheme. Actually there is
2028still a C evaluator, used when building a fresh Guile to interpret the
2029compiler, so we can compile eval.scm. Thereafter all calls to
2030primitive-eval are implemented by VM-compiled code.
2031
2032This allows all of Guile's procedures, be they interpreted or compiled,
2033to execute on the same stack, unifying multiple-value return semantics,
2034providing for proper tail recursion between interpreted and compiled
2035code, and simplifying debugging.
2036
2037As part of this change, the evaluator no longer mutates the internal
2038representation of the code being evaluated in a thread-unsafe manner.
2039
2040There are two negative aspects of this change, however. First, Guile
2041takes a lot longer to compile now. Also, there is less debugging
2042information available for debugging interpreted code. We hope to improve
2043both of these situations.
2044
2045There are many changes to the internal C evalator interface, but all
2046public interfaces should be the same. See the ChangeLog for details. If
2047we have inadvertantly changed an interface that you were using, please
2048contact bug-guile@gnu.org.
2049
96b73e84
AW
2050** Procedure removed: `the-environment'
2051
2052This procedure was part of the interpreter's execution model, and does
2053not apply to the compiler.
fa1804e9 2054
4a457691
AW
2055** No more `local-eval'
2056
2057`local-eval' used to exist so that one could evaluate code in the
2058lexical context of a function. Since there is no way to get the lexical
2059environment any more, as that concept has no meaning for the compiler,
2060and a different meaning for the interpreter, we have removed the
2061function.
2062
2063If you think you need `local-eval', you should probably implement your
2064own metacircular evaluator. It will probably be as fast as Guile's
2065anyway.
2066
139fa149 2067** Scheme source files will now be compiled automatically.
fa1804e9
AW
2068
2069If a compiled .go file corresponding to a .scm file is not found or is
2070not fresh, the .scm file will be compiled on the fly, and the resulting
2071.go file stored away. An advisory note will be printed on the console.
2072
51cb0cca
AW
2073Note that this mechanism depends on the timestamp of the .go file being
2074newer than that of the .scm file; if the .scm or .go files are moved
2075after installation, care should be taken to preserve their original
fa1804e9
AW
2076timestamps.
2077
6f06e8d3 2078Auto-compiled files will be stored in the $XDG_CACHE_HOME/guile/ccache
19fef497
AW
2079directory, where $XDG_CACHE_HOME defaults to ~/.cache. This directory
2080will be created if needed.
fa1804e9 2081
6f06e8d3
AW
2082To inhibit automatic compilation, set the GUILE_AUTO_COMPILE environment
2083variable to 0, or pass --no-auto-compile on the Guile command line.
fa1804e9 2084
96b73e84 2085** New POSIX procedures: `getrlimit' and `setrlimit'
fa1804e9 2086
96b73e84
AW
2087Note however that the interface of these functions is likely to change
2088in the next prerelease.
fa1804e9 2089
4a457691
AW
2090** New POSIX procedure: `getsid'
2091
2092Scheme binding for the `getsid' C library call.
2093
dbd9532e
LC
2094** New POSIX procedure: `getaddrinfo'
2095
2096Scheme binding for the `getaddrinfo' C library function.
2097
7cd99cba
AW
2098** Multicast socket options
2099
2100Support was added for the IP_MULTICAST_TTL and IP_MULTICAST_IF socket
2101options. See "Network Sockets and Communication" in the manual, for
2102more information.
2103
487bacf4
AW
2104** `recv!', `recvfrom!', `send', `sendto' now deal in bytevectors
2105
2106These socket procedures now take bytevectors as arguments, instead of
2107strings. There is some deprecated string support, however.
2108
7cd99cba
AW
2109** New GNU procedures: `setaffinity' and `getaffinity'.
2110
2111See "Processes" in the manual, for more information.
2112
2113** New procedures: `compose', `negate', and `const'
2114
2115See "Higher-Order Functions" in the manual, for more information.
2116
96b73e84 2117** New procedure in `(oops goops)': `method-formals'
fa1804e9 2118
96b73e84
AW
2119** New procedures in (ice-9 session): `add-value-help-handler!',
2120 `remove-value-help-handler!', `add-name-help-handler!'
29b98fb2 2121 `remove-name-help-handler!', `procedure-arguments'
fa1804e9 2122
96b73e84
AW
2123The value and name help handlers provide some minimal extensibility to
2124the help interface. Guile-lib's `(texinfo reflection)' uses them, for
2125example, to make stexinfo help documentation available. See those
2126procedures' docstrings for more information.
2127
2128`procedure-arguments' describes the arguments that a procedure can take,
2129combining arity and formals. For example:
2130
2131 (procedure-arguments resolve-interface)
2132 => ((required . (name)) (rest . args))
fa1804e9 2133
96b73e84
AW
2134Additionally, `module-commentary' is now publically exported from
2135`(ice-9 session).
2136
cf8ec359 2137** Removed: `procedure->memoizing-macro', `procedure->syntax'
96b73e84 2138
cf8ec359
AW
2139These procedures created primitive fexprs for the old evaluator, and are
2140no longer supported. If you feel that you need these functions, you
2141probably need to write your own metacircular evaluator (which will
2142probably be as fast as Guile's, anyway).
96b73e84
AW
2143
2144** New language: ECMAScript
2145
2146Guile now ships with one other high-level language supported,
2147ECMAScript. The goal is to support all of version 3.1 of the standard,
2148but not all of the libraries are there yet. This support is not yet
2149documented; ask on the mailing list if you are interested.
2150
19fef497
AW
2151** New language: Brainfuck
2152
2153Brainfuck is a toy language that closely models Turing machines. Guile's
2154brainfuck compiler is meant to be an example of implementing other
2155languages. See the manual for details, or
2156http://en.wikipedia.org/wiki/Brainfuck for more information about the
2157Brainfuck language itself.
2158
4a457691
AW
2159** New language: Elisp
2160
2161Guile now has an experimental Emacs Lisp compiler and runtime. You can
2162now switch to Elisp at the repl: `,language elisp'. All kudos to Daniel
7cd99cba 2163Kraft and Brian Templeton, and all bugs to bug-guile@gnu.org.
4a457691 2164
139fa149
AW
2165** Better documentation infrastructure for macros
2166
2167It is now possible to introspect on the type of a macro, e.g.
2168syntax-rules, identifier-syntax, etc, and extract information about that
2169macro, such as the syntax-rules patterns or the defmacro arguments.
2170`(texinfo reflection)' takes advantage of this to give better macro
2171documentation.
2172
139fa149
AW
2173** Support for arbitrary procedure metadata
2174
2175Building on its support for docstrings, Guile now supports multiple
2176docstrings, adding them to the tail of a compiled procedure's
2177properties. For example:
2178
2179 (define (foo)
2180 "one"
2181 "two"
2182 3)
29b98fb2 2183 (procedure-properties foo)
139fa149
AW
2184 => ((name . foo) (documentation . "one") (documentation . "two"))
2185
2186Also, vectors of pairs are now treated as additional metadata entries:
2187
2188 (define (bar)
2189 #((quz . #f) (docstring . "xyzzy"))
2190 3)
29b98fb2 2191 (procedure-properties bar)
139fa149
AW
2192 => ((name . bar) (quz . #f) (docstring . "xyzzy"))
2193
2194This allows arbitrary literals to be embedded as metadata in a compiled
2195procedure.
2196
96b73e84
AW
2197** The psyntax expander now knows how to interpret the @ and @@ special
2198 forms.
2199
2200** The psyntax expander is now hygienic with respect to modules.
2201
2202Free variables in a macro are scoped in the module that the macro was
2203defined in, not in the module the macro is used in. For example, code
2204like this works now:
2205
2206 (define-module (foo) #:export (bar))
2207 (define (helper x) ...)
2208 (define-syntax bar
2209 (syntax-rules () ((_ x) (helper x))))
2210
2211 (define-module (baz) #:use-module (foo))
2212 (bar qux)
2213
2214It used to be you had to export `helper' from `(foo)' as well.
2215Thankfully, this has been fixed.
2216
51cb0cca 2217** Support for version information in Guile's `module' form
cf8ec359 2218
51cb0cca
AW
2219Guile modules now have a `#:version' field. See "R6RS Version
2220References", "General Information about Modules", "Using Guile Modules",
2221and "Creating Guile Modules" in the manual for more information.
96b73e84 2222
cf8ec359
AW
2223** Support for renaming bindings on module export
2224
2225Wherever Guile accepts a symbol as an argument to specify a binding to
2226export, it now also accepts a pair of symbols, indicating that a binding
2227should be renamed on export. See "Creating Guile Modules" in the manual
2228for more information.
96b73e84 2229
18e90860
AW
2230** New procedure: `module-export-all!'
2231
2232This procedure exports all current and future bindings from a module.
2233Use as `(module-export-all! (current-module))'.
2234
7cd99cba
AW
2235** New procedure `reload-module', and `,reload' REPL command
2236
2237See "Module System Reflection" and "Module Commands" in the manual, for
2238more information.
2239
96b73e84
AW
2240** `eval-case' has been deprecated, and replaced by `eval-when'.
2241
29b98fb2
AW
2242The semantics of `eval-when' are easier to understand. See "Eval When"
2243in the manual, for more information.
96b73e84
AW
2244
2245** Guile is now more strict about prohibiting definitions in expression
2246 contexts.
2247
2248Although previous versions of Guile accepted it, the following
2249expression is not valid, in R5RS or R6RS:
2250
2251 (if test (define foo 'bar) (define foo 'baz))
2252
2253In this specific case, it would be better to do:
2254
2255 (define foo (if test 'bar 'baz))
2256
79b3863d
AW
2257It is possible to circumvent this restriction with e.g.
2258`(module-define! (current-module) 'foo 'baz)'. Contact the list if you
2259have any questions.
96b73e84 2260
51cb0cca
AW
2261** Support for `letrec*'
2262
2263Guile now supports `letrec*', a recursive lexical binding operator in
2264which the identifiers are bound in order. See "Local Bindings" in the
2265manual, for more details.
2266
2267** Internal definitions now expand to `letrec*'
2268
2269Following the R6RS, internal definitions now expand to letrec* instead
2270of letrec. The following program is invalid for R5RS, but valid for
2271R6RS:
2272
2273 (define (foo)
2274 (define bar 10)
2275 (define baz (+ bar 20))
2276 baz)
2277
2278 ;; R5RS and Guile <= 1.8:
2279 (foo) => Unbound variable: bar
2280 ;; R6RS and Guile >= 2.0:
2281 (foo) => 30
2282
2283This change should not affect correct R5RS programs, or programs written
2284in earlier Guile dialects.
2285
18e90860
AW
2286** Macro expansion produces structures instead of s-expressions
2287
2288In the olden days, macroexpanding an s-expression would yield another
2289s-expression. Though the lexical variables were renamed, expansions of
2290core forms like `if' and `begin' were still non-hygienic, as they relied
2291on the toplevel definitions of `if' et al being the conventional ones.
2292
2293The solution is to expand to structures instead of s-expressions. There
2294is an `if' structure, a `begin' structure, a `toplevel-ref' structure,
2295etc. The expander already did this for compilation, producing Tree-IL
2296directly; it has been changed now to do so when expanding for the
2297evaluator as well.
2298
96b73e84
AW
2299** Defmacros must now produce valid Scheme expressions.
2300
2301It used to be that defmacros could unquote in Scheme values, as a way of
2302supporting partial evaluation, and avoiding some hygiene issues. For
2303example:
2304
2305 (define (helper x) ...)
2306 (define-macro (foo bar)
2307 `(,helper ,bar))
2308
2309Assuming this macro is in the `(baz)' module, the direct translation of
2310this code would be:
2311
2312 (define (helper x) ...)
2313 (define-macro (foo bar)
2314 `((@@ (baz) helper) ,bar))
2315
2316Of course, one could just use a hygienic macro instead:
2317
2318 (define-syntax foo
2319 (syntax-rules ()
2320 ((_ bar) (helper bar))))
2321
2322** Guile's psyntax now supports docstrings and internal definitions.
2323
2324The following Scheme is not strictly legal:
2325
2326 (define (foo)
2327 "bar"
2328 (define (baz) ...)
2329 (baz))
2330
2331However its intent is fairly clear. Guile interprets "bar" to be the
2332docstring of `foo', and the definition of `baz' is still in definition
2333context.
2334
51cb0cca
AW
2335** Support for settable identifier syntax
2336
2337Following the R6RS, "variable transformers" are settable
2338identifier-syntax. See "Identifier macros" in the manual, for more
2339information.
2340
2341** syntax-case treats `_' as a placeholder
2342
2343Following R6RS, a `_' in a syntax-rules or syntax-case pattern matches
2344anything, and binds no pattern variables. Unlike the R6RS, Guile also
2345permits `_' to be in the literals list for a pattern.
2346
96b73e84
AW
2347** Macros need to be defined before their first use.
2348
2349It used to be that with lazy memoization, this might work:
2350
2351 (define (foo x)
2352 (ref x))
2353 (define-macro (ref x) x)
2354 (foo 1) => 1
2355
2356But now, the body of `foo' is interpreted to mean a call to the toplevel
2357`ref' function, instead of a macro expansion. The solution is to define
2358macros before code that uses them.
2359
2360** Functions needed by macros at expand-time need to be present at
2361 expand-time.
2362
2363For example, this code will work at the REPL:
2364
2365 (define (double-helper x) (* x x))
2366 (define-macro (double-literal x) (double-helper x))
2367 (double-literal 2) => 4
2368
2369But it will not work when a file is compiled, because the definition of
2370`double-helper' is not present at expand-time. The solution is to wrap
2371the definition of `double-helper' in `eval-when':
2372
2373 (eval-when (load compile eval)
2374 (define (double-helper x) (* x x)))
2375 (define-macro (double-literal x) (double-helper x))
2376 (double-literal 2) => 4
2377
29b98fb2 2378See the documentation for eval-when for more information.
96b73e84 2379
29b98fb2 2380** `macroexpand' produces structures, not S-expressions.
96b73e84 2381
29b98fb2
AW
2382Given the need to maintain referential transparency, both lexically and
2383modular, the result of expanding Scheme expressions is no longer itself
2384an s-expression. If you want a human-readable approximation of the
2385result of `macroexpand', call `tree-il->scheme' from `(language
2386tree-il)'.
96b73e84 2387
29b98fb2 2388** Removed function: `macroexpand-1'
96b73e84 2389
29b98fb2
AW
2390It is unclear how to implement `macroexpand-1' with syntax-case, though
2391PLT Scheme does prove that it is possible.
fa1804e9
AW
2392
2393** New reader macros: #' #` #, #,@
2394
2395These macros translate, respectively, to `syntax', `quasisyntax',
2396`unsyntax', and `unsyntax-splicing'. See the R6RS for more information.
2397These reader macros may be overridden by `read-hash-extend'.
2398
2399** Incompatible change to #'
2400
2401Guile did have a #' hash-extension, by default, which just returned the
2402subsequent datum: #'foo => foo. In the unlikely event that anyone
2403actually used this, this behavior may be reinstated via the
2404`read-hash-extend' mechanism.
2405
b47fea09
AW
2406** `unquote' and `unquote-splicing' accept multiple expressions
2407
2408As per the R6RS, these syntax operators can now accept any number of
2409expressions to unquote.
2410
fa1804e9
AW
2411** Scheme expresssions may be commented out with #;
2412
93617170
LC
2413#; comments out an entire expression. See SRFI-62 or the R6RS for more
2414information.
fa1804e9 2415
b0abbaa7
AW
2416** Prompts: Delimited, composable continuations
2417
2418Guile now has prompts as part of its primitive language. See "Prompts"
2419in the manual, for more information.
2420
2421Expressions entered in at the REPL, or from the command line, are
2422surrounded by a prompt with the default prompt tag.
2423
93617170 2424** `make-stack' with a tail-called procedural narrowing argument no longer
fa1804e9
AW
2425 works (with compiled procedures)
2426
2427It used to be the case that a captured stack could be narrowed to select
2428calls only up to or from a certain procedure, even if that procedure
2429already tail-called another procedure. This was because the debug
2430information from the original procedure was kept on the stack.
2431
2432Now with the new compiler, the stack only contains active frames from
2433the current continuation. A narrow to a procedure that is not in the
2434stack will result in an empty stack. To fix this, narrow to a procedure
2435that is active in the current continuation, or narrow to a specific
2436number of stack frames.
2437
29b98fb2 2438** Backtraces through compiled procedures only show procedures that are
fa1804e9
AW
2439 active in the current continuation
2440
2441Similarly to the previous issue, backtraces in compiled code may be
2442different from backtraces in interpreted code. There are no semantic
2443differences, however. Please mail bug-guile@gnu.org if you see any
2444deficiencies with Guile's backtraces.
2445
b47fea09
AW
2446** `positions' reader option enabled by default
2447
2448This change allows primitive-load without --auto-compile to also
2449propagate source information through the expander, for better errors and
2450to let macros know their source locations. The compiler was already
2451turning it on anyway.
2452
51cb0cca
AW
2453** New macro: `current-source-location'
2454
2455The macro returns the current source location (to be documented).
2456
fa1804e9
AW
2457** syntax-rules and syntax-case macros now propagate source information
2458 through to the expanded code
2459
2460This should result in better backtraces.
2461
2462** The currying behavior of `define' has been removed.
2463
2464Before, `(define ((f a) b) (* a b))' would translate to
2465
2466 (define f (lambda (a) (lambda (b) (* a b))))
2467
93617170 2468Now a syntax error is signaled, as this syntax is not supported by
29b98fb2
AW
2469default. Use the `(ice-9 curried-definitions)' module to get back the
2470old behavior.
fa1804e9 2471
4a457691
AW
2472** New procedure, `define!'
2473
2474`define!' is a procedure that takes two arguments, a symbol and a value,
2475and binds the value to the symbol in the current module. It's useful to
2476programmatically make definitions in the current module, and is slightly
2477less verbose than `module-define!'.
2478
fa1804e9
AW
2479** All modules have names now
2480
2481Before, you could have anonymous modules: modules without names. Now,
2482because of hygiene and macros, all modules have names. If a module was
2483created without a name, the first time `module-name' is called on it, a
2484fresh name will be lazily generated for it.
2485
18e90860
AW
2486** The module namespace is now separate from the value namespace
2487
2488It was a little-known implementation detail of Guile's module system
2489that it was built on a single hierarchical namespace of values -- that
2490if there was a module named `(foo bar)', then in the module named
2491`(foo)' there was a binding from `bar' to the `(foo bar)' module.
2492
2493This was a neat trick, but presented a number of problems. One problem
2494was that the bindings in a module were not apparent from the module
2495itself; perhaps the `(foo)' module had a private binding for `bar', and
2496then an external contributor defined `(foo bar)'. In the end there can
2497be only one binding, so one of the two will see the wrong thing, and
2498produce an obtuse error of unclear provenance.
2499
2500Also, the public interface of a module was also bound in the value
2501namespace, as `%module-public-interface'. This was a hack from the early
2502days of Guile's modules.
2503
2504Both of these warts have been fixed by the addition of fields in the
2505`module' data type. Access to modules and their interfaces from the
2506value namespace has been deprecated, and all accessors use the new
2507record accessors appropriately.
2508
2509When Guile is built with support for deprecated code, as is the default,
2510the value namespace is still searched for modules and public interfaces,
2511and a deprecation warning is raised as appropriate.
2512
2513Finally, to support lazy loading of modules as one used to be able to do
2514with module binder procedures, Guile now has submodule binders, called
2515if a given submodule is not found. See boot-9.scm for more information.
2516
2517** New procedures: module-ref-submodule, module-define-submodule,
2518 nested-ref-module, nested-define-module!, local-ref-module,
2519 local-define-module
2520
2521These new accessors are like their bare variants, but operate on
2522namespaces instead of values.
2523
2524** The (app modules) module tree is officially deprecated
2525
2526It used to be that one could access a module named `(foo bar)' via
2527`(nested-ref the-root-module '(app modules foo bar))'. The `(app
2528modules)' bit was a never-used and never-documented abstraction, and has
2529been deprecated. See the following mail for a full discussion:
2530
2531 http://lists.gnu.org/archive/html/guile-devel/2010-04/msg00168.html
2532
2533The `%app' binding is also deprecated.
2534
51cb0cca
AW
2535** `module-filename' field and accessor
2536
2537Modules now record the file in which they are defined. This field may be
2538accessed with the new `module-filename' procedure.
2539
2540** Modules load within a known environment
2541
2542It takes a few procedure calls to define a module, and those procedure
2543calls need to be in scope. Now we ensure that the current module when
2544loading a module is one that has the needed bindings, instead of relying
2545on chance.
2546
b47fea09
AW
2547** `load' is a macro (!) that resolves paths relative to source file dir
2548
2549The familiar Schem `load' procedure is now a macro that captures the
2550name of the source file being expanded, and dispatches to the new
2551`load-in-vicinity'. Referencing `load' by bare name returns a closure
2552that embeds the current source file name.
2553
2554This fix allows `load' of relative paths to be resolved with respect to
2555the location of the file that calls `load'.
2556
fa1804e9
AW
2557** Many syntax errors have different texts now
2558
2559Syntax errors still throw to the `syntax-error' key, but the arguments
2560are often different now. Perhaps in the future, Guile will switch to
93617170 2561using standard SRFI-35 conditions.
fa1804e9
AW
2562
2563** Returning multiple values to compiled code will silently truncate the
2564 values to the expected number
2565
2566For example, the interpreter would raise an error evaluating the form,
2567`(+ (values 1 2) (values 3 4))', because it would see the operands as
2568being two compound "values" objects, to which `+' does not apply.
2569
2570The compiler, on the other hand, receives multiple values on the stack,
2571not as a compound object. Given that it must check the number of values
2572anyway, if too many values are provided for a continuation, it chooses
2573to truncate those values, effectively evaluating `(+ 1 3)' instead.
2574
2575The idea is that the semantics that the compiler implements is more
2576intuitive, and the use of the interpreter will fade out with time.
2577This behavior is allowed both by the R5RS and the R6RS.
2578
2579** Multiple values in compiled code are not represented by compound
2580 objects
2581
2582This change may manifest itself in the following situation:
2583
2584 (let ((val (foo))) (do-something) val)
2585
2586In the interpreter, if `foo' returns multiple values, multiple values
2587are produced from the `let' expression. In the compiler, those values
2588are truncated to the first value, and that first value is returned. In
2589the compiler, if `foo' returns no values, an error will be raised, while
2590the interpreter would proceed.
2591
2592Both of these behaviors are allowed by R5RS and R6RS. The compiler's
2593behavior is more correct, however. If you wish to preserve a potentially
2594multiply-valued return, you will need to set up a multiple-value
2595continuation, using `call-with-values'.
2596
2597** Defmacros are now implemented in terms of syntax-case.
2598
2599The practical ramification of this is that the `defmacro?' predicate has
2600been removed, along with `defmacro-transformer', `macro-table',
2601`xformer-table', `assert-defmacro?!', `set-defmacro-transformer!' and
2602`defmacro:transformer'. This is because defmacros are simply macros. If
2603any of these procedures provided useful facilities to you, we encourage
2604you to contact the Guile developers.
2605
139fa149
AW
2606** Hygienic macros documented as the primary syntactic extension mechanism.
2607
2608The macro documentation was finally fleshed out with some documentation
29b98fb2
AW
2609on `syntax-rules' and `syntax-case' macros, and other parts of the macro
2610expansion process. See "Macros" in the manual, for details.
139fa149 2611
fa1804e9
AW
2612** psyntax is now the default expander
2613
2614Scheme code is now expanded by default by the psyntax hygienic macro
2615expander. Expansion is performed completely before compilation or
2616interpretation.
2617
2618Notably, syntax errors will be signalled before interpretation begins.
2619In the past, many syntax errors were only detected at runtime if the
2620code in question was memoized.
2621
2622As part of its expansion, psyntax renames all lexically-bound
2623identifiers. Original identifier names are preserved and given to the
2624compiler, but the interpreter will see the renamed variables, e.g.,
2625`x432' instead of `x'.
2626
2627Note that the psyntax that Guile uses is a fork, as Guile already had
2628modules before incompatible modules were added to psyntax -- about 10
2629years ago! Thus there are surely a number of bugs that have been fixed
2630in psyntax since then. If you find one, please notify bug-guile@gnu.org.
2631
2632** syntax-rules and syntax-case are available by default.
2633
2634There is no longer any need to import the `(ice-9 syncase)' module
2635(which is now deprecated). The expander may be invoked directly via
29b98fb2 2636`macroexpand', though it is normally searched for via the current module
fa1804e9
AW
2637transformer.
2638
2639Also, the helper routines for syntax-case are available in the default
2640environment as well: `syntax->datum', `datum->syntax',
2641`bound-identifier=?', `free-identifier=?', `generate-temporaries',
2642`identifier?', and `syntax-violation'. See the R6RS for documentation.
2643
4a457691
AW
2644** Tail patterns in syntax-case
2645
2646Guile has pulled in some more recent changes from the psyntax portable
2647syntax expander, to implement support for "tail patterns". Such patterns
2648are supported by syntax-rules and syntax-case. This allows a syntax-case
2649match clause to have ellipses, then a pattern at the end. For example:
2650
2651 (define-syntax case
2652 (syntax-rules (else)
2653 ((_ val match-clause ... (else e e* ...))
2654 [...])))
2655
2656Note how there is MATCH-CLAUSE, which is ellipsized, then there is a
2657tail pattern for the else clause. Thanks to Andreas Rottmann for the
2658patch, and Kent Dybvig for the code.
2659
fa1804e9
AW
2660** Lexical bindings introduced by hygienic macros may not be referenced
2661 by nonhygienic macros.
2662
2663If a lexical binding is introduced by a hygienic macro, it may not be
2664referenced by a nonhygienic macro. For example, this works:
2665
2666 (let ()
2667 (define-macro (bind-x val body)
2668 `(let ((x ,val)) ,body))
2669 (define-macro (ref x)
2670 x)
2671 (bind-x 10 (ref x)))
2672
2673But this does not:
2674
2675 (let ()
2676 (define-syntax bind-x
2677 (syntax-rules ()
2678 ((_ val body) (let ((x val)) body))))
2679 (define-macro (ref x)
2680 x)
2681 (bind-x 10 (ref x)))
2682
2683It is not normal to run into this situation with existing code. However,
51cb0cca 2684if you have defmacros that expand to hygienic macros, it is possible to
66ad445d
AW
2685run into situations like this. For example, if you have a defmacro that
2686generates a `while' expression, the `break' bound by the `while' may not
2687be visible within other parts of your defmacro. The solution is to port
2688from defmacros to syntax-rules or syntax-case.
fa1804e9
AW
2689
2690** Macros may no longer be referenced as first-class values.
2691
2692In the past, you could evaluate e.g. `if', and get its macro value. Now,
2693expanding this form raises a syntax error.
2694
2695Macros still /exist/ as first-class values, but they must be
2696/referenced/ via the module system, e.g. `(module-ref (current-module)
2697'if)'.
2698
29b98fb2
AW
2699** Macros may now have docstrings.
2700
2701`object-documentation' from `(ice-9 documentation)' may be used to
2702retrieve the docstring, once you have a macro value -- but see the above
2703note about first-class macros. Docstrings are associated with the syntax
2704transformer procedures.
fa1804e9 2705
e614d375
AW
2706** `case-lambda' is now available in the default environment.
2707
2708The binding in the default environment is equivalent to the one from the
2709`(srfi srfi-16)' module. Use the srfi-16 module explicitly if you wish
2710to maintain compatibility with Guile 1.8 and earlier.
2711
29b98fb2 2712** Procedures may now have more than one arity.
5bb408cc
AW
2713
2714This can be the case, for example, in case-lambda procedures. The
2715arities of compiled procedures may be accessed via procedures from the
2716`(system vm program)' module; see "Compiled Procedures", "Optional
2717Arguments", and "Case-lambda" in the manual.
2718
18e90860
AW
2719** Deprecate arity access via (procedure-properties proc 'arity)
2720
2721Instead of accessing a procedure's arity as a property, use the new
2722`procedure-minimum-arity' function, which gives the most permissive
b3da54d1 2723arity that the function has, in the same format as the old arity
18e90860
AW
2724accessor.
2725
e614d375
AW
2726** `lambda*' and `define*' are now available in the default environment
2727
2728As with `case-lambda', `(ice-9 optargs)' continues to be supported, for
2729compatibility purposes. No semantic change has been made (we hope).
2730Optional and keyword arguments now dispatch via special VM operations,
2731without the need to cons rest arguments, making them very fast.
2732
487bacf4
AW
2733** New syntax: define-once
2734
2735`define-once' is like Lisp's `defvar': it creates a toplevel binding,
2736but only if one does not exist already.
2737
cf8ec359
AW
2738** New function, `truncated-print', with `format' support
2739
2740`(ice-9 pretty-print)' now exports `truncated-print', a printer that
2741will ensure that the output stays within a certain width, truncating the
2742output in what is hopefully an intelligent manner. See the manual for
2743more details.
2744
2745There is a new `format' specifier, `~@y', for doing a truncated
2746print (as opposed to `~y', which does a pretty-print). See the `format'
2747documentation for more details.
2748
7cd99cba
AW
2749** Better pretty-printing
2750
2751Indentation recognizes more special forms, like `syntax-case', and read
2752macros like `quote' are printed better.
2753
51cb0cca
AW
2754** Passing a number as the destination of `format' is deprecated
2755
2756The `format' procedure in `(ice-9 format)' now emits a deprecation
2757warning if a number is passed as its first argument.
2758
487bacf4
AW
2759Also, it used to be that you could omit passing a port to `format', in
2760some cases. This still works, but has been formally deprecated.
2761
cf8ec359
AW
2762** SRFI-4 vectors reimplemented in terms of R6RS bytevectors
2763
2764Guile now implements SRFI-4 vectors using bytevectors. Often when you
2765have a numeric vector, you end up wanting to write its bytes somewhere,
2766or have access to the underlying bytes, or read in bytes from somewhere
2767else. Bytevectors are very good at this sort of thing. But the SRFI-4
2768APIs are nicer to use when doing number-crunching, because they are
2769addressed by element and not by byte.
2770
2771So as a compromise, Guile allows all bytevector functions to operate on
2772numeric vectors. They address the underlying bytes in the native
2773endianness, as one would expect.
2774
2775Following the same reasoning, that it's just bytes underneath, Guile
2776also allows uniform vectors of a given type to be accessed as if they
2777were of any type. One can fill a u32vector, and access its elements with
2778u8vector-ref. One can use f64vector-ref on bytevectors. It's all the
2779same to Guile.
2780
2781In this way, uniform numeric vectors may be written to and read from
2782input/output ports using the procedures that operate on bytevectors.
2783
2784Calls to SRFI-4 accessors (ref and set functions) from Scheme are now
2785inlined to the VM instructions for bytevector access.
2786
2787See "SRFI-4" in the manual, for more information.
2788
2789** Nonstandard SRFI-4 procedures now available from `(srfi srfi-4 gnu)'
2790
2791Guile's `(srfi srfi-4)' now only exports those srfi-4 procedures that
2792are part of the standard. Complex uniform vectors and the
2793`any->FOOvector' family are now available only from `(srfi srfi-4 gnu)'.
2794
2795Guile's default environment imports `(srfi srfi-4)', and probably should
2796import `(srfi srfi-4 gnu)' as well.
2797
2798See "SRFI-4 Extensions" in the manual, for more information.
2799
e614d375
AW
2800** New syntax: include-from-path.
2801
2802`include-from-path' is like `include', except it looks for its file in
2803the load path. It can be used to compile other files into a file.
2804
2805** New syntax: quasisyntax.
2806
2807`quasisyntax' is to `syntax' as `quasiquote' is to `quote'. See the R6RS
2808documentation for more information. Thanks to Andre van Tonder for the
2809implementation.
2810
51cb0cca
AW
2811** `*unspecified*' is identifier syntax
2812
2813`*unspecified*' is no longer a variable, so it is optimized properly by
2814the compiler, and is not `set!'-able.
2815
487bacf4
AW
2816** Changes and bugfixes in numerics code
2817
2818*** Added six new sets of fast quotient and remainder operators
2819
2820Added six new sets of fast quotient and remainder operator pairs with
2821different semantics than the R5RS operators. They support not only
2822integers, but all reals, including exact rationals and inexact
2823floating point numbers.
2824
2825These procedures accept two real numbers N and D, where the divisor D
2826must be non-zero. Each set of operators computes an integer quotient
2827Q and a real remainder R such that N = Q*D + R and |R| < |D|. They
2828differ only in how N/D is rounded to produce Q.
2829
2830`euclidean-quotient' returns the integer Q and `euclidean-remainder'
2831returns the real R such that N = Q*D + R and 0 <= R < |D|. `euclidean/'
2832returns both Q and R, and is more efficient than computing each
2833separately. Note that when D > 0, `euclidean-quotient' returns
2834floor(N/D), and when D < 0 it returns ceiling(N/D).
2835
2836`centered-quotient', `centered-remainder', and `centered/' are similar
2837except that the range of remainders is -abs(D/2) <= R < abs(D/2), and
2838`centered-quotient' rounds N/D to the nearest integer. Note that these
2839operators are equivalent to the R6RS integer division operators `div',
2840`mod', `div-and-mod', `div0', `mod0', and `div0-and-mod0'.
2841
2842`floor-quotient' and `floor-remainder' compute Q and R, respectively,
2843where Q has been rounded toward negative infinity. `floor/' returns
2844both Q and R, and is more efficient than computing each separately.
2845Note that when applied to integers, `floor-remainder' is equivalent to
2846the R5RS integer-only `modulo' operator. `ceiling-quotient',
2847`ceiling-remainder', and `ceiling/' are similar except that Q is
2848rounded toward positive infinity.
2849
2850For `truncate-quotient', `truncate-remainder', and `truncate/', Q is
2851rounded toward zero. Note that when applied to integers,
2852`truncate-quotient' and `truncate-remainder' are equivalent to the
2853R5RS integer-only operators `quotient' and `remainder'.
2854
2855For `round-quotient', `round-remainder', and `round/', Q is rounded to
2856the nearest integer, with ties going to the nearest even integer.
2857
2858*** Complex number changes
2859
2860Guile is now able to represent non-real complex numbers whose
2861imaginary part is an _inexact_ zero (0.0 or -0.0), per R6RS.
2862Previously, such numbers were immediately changed into inexact reals.
2863
2864(real? 0.0+0.0i) now returns #f, per R6RS, although (zero? 0.0+0.0i)
2865still returns #t, per R6RS. (= 0 0.0+0.0i) and (= 0.0 0.0+0.0i) are
2866#t, but the same comparisons using `eqv?' or `equal?' are #f.
2867
2868Like other non-real numbers, these complex numbers with inexact zero
2869imaginary part will raise exceptions is passed to procedures requiring
2870reals, such as `<', `>', `<=', `>=', `min', `max', `positive?',
2871`negative?', `inf?', `nan?', `finite?', etc.
2872
2873**** `make-rectangular' changes
2874
2875scm_make_rectangular `make-rectangular' now returns a real number only
2876if the imaginary part is an _exact_ 0. Previously, it would return a
2877real number if the imaginary part was an inexact zero.
2878
2879scm_c_make_rectangular now always returns a non-real complex number,
2880even if the imaginary part is zero. Previously, it would return a
2881real number if the imaginary part was zero.
2882
2883**** `make-polar' changes
2884
2885scm_make_polar `make-polar' now returns a real number only if the
2886angle or magnitude is an _exact_ 0. If the magnitude is an exact 0,
2887it now returns an exact 0. Previously, it would return a real
2888number if the imaginary part was an inexact zero.
2889
2890scm_c_make_polar now always returns a non-real complex number, even if
2891the imaginary part is 0.0. Previously, it would return a real number
2892if the imaginary part was 0.0.
2893
2894**** `imag-part' changes
2895
2896scm_imag_part `imag-part' now returns an exact 0 if applied to an
2897inexact real number. Previously it returned an inexact zero in this
2898case.
2899
2900*** `eqv?' and `equal?' now compare numbers equivalently
2901
2902scm_equal_p `equal?' now behaves equivalently to scm_eqv_p `eqv?' for
2903numeric values, per R5RS. Previously, equal? worked differently,
2904e.g. `(equal? 0.0 -0.0)' returned #t but `(eqv? 0.0 -0.0)' returned #f,
2905and `(equal? +nan.0 +nan.0)' returned #f but `(eqv? +nan.0 +nan.0)'
2906returned #t.
2907
2908*** `(equal? +nan.0 +nan.0)' now returns #t
2909
2910Previously, `(equal? +nan.0 +nan.0)' returned #f, although
2911`(let ((x +nan.0)) (equal? x x))' and `(eqv? +nan.0 +nan.0)'
2912both returned #t. R5RS requires that `equal?' behave like
2913`eqv?' when comparing numbers.
2914
2915*** Change in handling products `*' involving exact 0
2916
2917scm_product `*' now handles exact 0 differently. A product containing
2918an exact 0 now returns an exact 0 if and only if the other arguments
2919are all exact. An inexact zero is returned if and only if the other
2920arguments are all finite but not all exact. If an infinite or NaN
2921value is present, a NaN value is returned. Previously, any product
2922containing an exact 0 yielded an exact 0, regardless of the other
2923arguments.
2924
2925*** `expt' and `integer-expt' changes when the base is 0
2926
2927While `(expt 0 0)' is still 1, and `(expt 0 N)' for N > 0 is still
2928zero, `(expt 0 N)' for N < 0 is now a NaN value, and likewise for
2929integer-expt. This is more correct, and conforming to R6RS, but seems
2930to be incompatible with R5RS, which would return 0 for all non-zero
2931values of N.
2932
2933*** `expt' and `integer-expt' are more generic, less strict
2934
2935When raising to an exact non-negative integer exponent, `expt' and
2936`integer-expt' are now able to exponentiate any object that can be
2937multiplied using `*'. They can also raise an object to an exact
2938negative integer power if its reciprocal can be taken using `/'.
2939In order to allow this, the type of the first argument is no longer
2940checked when raising to an exact integer power. If the exponent is 0
2941or 1, the first parameter is not manipulated at all, and need not
2942even support multiplication.
2943
2944*** Infinities are no longer integers, nor rationals
2945
2946scm_integer_p `integer?' and scm_rational_p `rational?' now return #f
2947for infinities, per R6RS. Previously they returned #t for real
2948infinities. The real infinities and NaNs are still considered real by
2949scm_real `real?' however, per R6RS.
2950
2951*** NaNs are no longer rationals
2952
2953scm_rational_p `rational?' now returns #f for NaN values, per R6RS.
2954Previously it returned #t for real NaN values. They are still
2955considered real by scm_real `real?' however, per R6RS.
2956
2957*** `inf?' and `nan?' now throw exceptions for non-reals
2958
2959The domain of `inf?' and `nan?' is the real numbers. Guile now signals
2960an error when a non-real number or non-number is passed to these
2961procedures. (Note that NaNs _are_ considered numbers by scheme, despite
2962their name).
2963
2964*** `rationalize' bugfixes and changes
2965
2966Fixed bugs in scm_rationalize `rationalize'. Previously, it returned
2967exact integers unmodified, although that was incorrect if the epsilon
2968was at least 1 or inexact, e.g. (rationalize 4 1) should return 3 per
2969R5RS and R6RS, but previously it returned 4. It also now handles
2970cases involving infinities and NaNs properly, per R6RS.
2971
2972*** Trigonometric functions now return exact numbers in some cases
2973
2974scm_sin `sin', scm_cos `cos', scm_tan `tan', scm_asin `asin', scm_acos
2975`acos', scm_atan `atan', scm_sinh `sinh', scm_cosh `cosh', scm_tanh
2976`tanh', scm_sys_asinh `asinh', scm_sys_acosh `acosh', and
2977scm_sys_atanh `atanh' now return exact results in some cases.
2978
2979*** New procedure: `finite?'
2980
2981Add scm_finite_p `finite?' from R6RS to guile core, which returns #t
2982if and only if its argument is neither infinite nor a NaN. Note that
2983this is not the same as (not (inf? x)) or (not (infinite? x)), since
2984NaNs are neither finite nor infinite.
2985
2986*** Improved exactness handling for complex number parsing
2987
2988When parsing non-real complex numbers, exactness specifiers are now
2989applied to each component, as is done in PLT Scheme. For complex
2990numbers written in rectangular form, exactness specifiers are applied
2991to the real and imaginary parts before calling scm_make_rectangular.
2992For complex numbers written in polar form, exactness specifiers are
2993applied to the magnitude and angle before calling scm_make_polar.
2994
2995Previously, exactness specifiers were applied to the number as a whole
2996_after_ calling scm_make_rectangular or scm_make_polar.
2997
2998For example, (string->number "#i5.0+0i") now does the equivalent of:
2999
3000 (make-rectangular (exact->inexact 5.0) (exact->inexact 0))
3001
3002which yields 5.0+0.0i. Previously it did the equivalent of:
3003
3004 (exact->inexact (make-rectangular 5.0 0))
3005
3006which yielded 5.0.
3007
108e18b1
AW
3008** Unicode characters
3009
3010Unicode characters may be entered in octal format via e.g. `#\454', or
3011created via (integer->char 300). A hex external representation will
3012probably be introduced at some point.
3013
3014** Unicode strings
3015
3016Internally, strings are now represented either in the `latin-1'
3017encoding, one byte per character, or in UTF-32, with four bytes per
3018character. Strings manage their own allocation, switching if needed.
3019
99e31c32
AW
3020Extended characters may be written in a literal string using the
3021hexadecimal escapes `\xXX', `\uXXXX', or `\UXXXXXX', for 8-bit, 16-bit,
3022or 24-bit codepoints, respectively, or entered directly in the native
3023encoding of the port on which the string is read.
3024
56664c08
AW
3025** Unicode symbols
3026
3027One may now use U+03BB (GREEK SMALL LETTER LAMBDA) as an identifier.
3028
99e31c32
AW
3029** Support for non-ASCII source code files
3030
3031The default reader now handles source code files for some of the
3032non-ASCII character encodings, such as UTF-8. A non-ASCII source file
3033should have an encoding declaration near the top of the file. Also,
3034there is a new function, `file-encoding', that scans a port for a coding
3035declaration. See the section of the manual entitled, "Character Encoding
3036of Source Files".
3037
3038The pre-1.9.3 reader handled 8-bit clean but otherwise unspecified source
51cb0cca
AW
3039code. This use is now discouraged. Binary input and output is
3040currently supported by opening ports in the ISO-8859-1 locale.
99e31c32 3041
487bacf4
AW
3042** Source files default to UTF-8.
3043
3044If source files do not specify their encoding via a `coding:' block,
3045the default encoding is UTF-8, instead of being taken from the current
3046locale.
3047
3048** Interactive Guile installs the current locale.
3049
3050Instead of leaving the user in the "C" locale, running the Guile REPL
3051installs the current locale. [FIXME xref?]
3052
99e31c32
AW
3053** Support for locale transcoding when reading from and writing to ports
3054
3055Ports now have an associated character encoding, and port read and write
3056operations do conversion to and from locales automatically. Ports also
3057have an associated strategy for how to deal with locale conversion
3058failures.
3059
3060See the documentation in the manual for the four new support functions,
3061`set-port-encoding!', `port-encoding', `set-port-conversion-strategy!',
3062and `port-conversion-strategy'.
3063
3064** String and SRFI-13 functions can operate on Unicode strings
3065
3066** Unicode support for SRFI-14 character sets
3067
3068The default character sets are no longer locale dependent and contain
3069characters from the whole Unicode range. There is a new predefined
3070character set, `char-set:designated', which contains all assigned
3071Unicode characters. There is a new debugging function, `%char-set-dump'.
3072
3073** Character functions operate on Unicode characters
3074
3075`char-upcase' and `char-downcase' use default Unicode casing rules.
3076Character comparisons such as `char<?' and `char-ci<?' now sort based on
3077Unicode code points.
108e18b1
AW
3078
3079** Global variables `scm_charnames' and `scm_charnums' are removed
3080
3081These variables contained the names of control characters and were
3082used when writing characters. While these were global, they were
3083never intended to be public API. They have been replaced with private
3084functions.
3085
3086** EBCDIC support is removed
3087
3088There was an EBCDIC compile flag that altered some of the character
3089processing. It appeared that full EBCDIC support was never completed
3090and was unmaintained.
3091
6bf927ab 3092** Compile-time warnings
b0217d17
AW
3093
3094Guile can warn about potentially unbound free variables. Pass the
3095-Wunbound-variable on the `guile-tools compile' command line, or add
3096`#:warnings '(unbound-variable)' to your `compile' or `compile-file'
51cb0cca
AW
3097invocation. Warnings are also enabled by default for expressions entered
3098at the REPL.
b0217d17 3099
6cf43047
AW
3100Guile can also warn when you pass the wrong number of arguments to a
3101procedure, with -Warity-mismatch, or `arity-mismatch' in the
3102`#:warnings' as above.
3103
6bf927ab 3104Other warnings include `-Wunused-variable' and `-Wunused-toplevel', to
ef6b0e8d
AW
3105warn about unused local or global (top-level) variables, and `-Wformat',
3106to check for various errors related to the `format' procedure.
6bf927ab 3107
93617170
LC
3108** A new `memoize-symbol' evaluator trap has been added.
3109
3110This trap can be used for efficiently implementing a Scheme code
3111coverage.
fa1804e9 3112
96b73e84 3113** Duplicate bindings among used modules are resolved lazily.
93617170 3114
96b73e84 3115This slightly improves program startup times.
fa1804e9 3116
96b73e84 3117** New thread cancellation and thread cleanup API
93617170 3118
96b73e84 3119See `cancel-thread', `set-thread-cleanup!', and `thread-cleanup'.
fa1804e9 3120
51cb0cca
AW
3121** New threads are in `(guile-user)' by default, not `(guile)'
3122
3123It used to be that a new thread entering Guile would do so in the
3124`(guile)' module, unless this was the first time Guile was initialized,
3125in which case it was `(guile-user)'. This has been fixed to have all
3126new threads unknown to Guile default to `(guile-user)'.
3127
b47fea09
AW
3128** New helpers: `print-exception', `set-exception-printer!'
3129
3130These functions implement an extensible exception printer. Guile
3131registers printers for all of the exceptions it throws. Users may add
3132their own printers. There is also `scm_print_exception', for use by C
3133programs. Pleasantly, this allows SRFI-35 and R6RS exceptions to be
3134printed appropriately.
3135
4a457691
AW
3136** GOOPS dispatch in scheme
3137
3138As an implementation detail, GOOPS dispatch is no longer implemented by
3139special evaluator bytecodes, but rather directly via a Scheme function
3140associated with an applicable struct. There is some VM support for the
3141underlying primitives, like `class-of'.
3142
3143This change will in the future allow users to customize generic function
3144dispatch without incurring a performance penalty, and allow us to
3145implement method combinations.
3146
4a457691
AW
3147** Applicable struct support
3148
3149One may now make structs from Scheme that may be applied as procedures.
3150To do so, make a struct whose vtable is `<applicable-struct-vtable>'.
3151That struct will be the vtable of your applicable structs; instances of
3152that new struct are assumed to have the procedure in their first slot.
3153`<applicable-struct-vtable>' is like Common Lisp's
3154`funcallable-standard-class'. Likewise there is
3155`<applicable-struct-with-setter-vtable>', which looks for the setter in
3156the second slot. This needs to be better documented.
3157
29b98fb2
AW
3158** GOOPS cleanups.
3159
3160GOOPS had a number of concepts that were relevant to the days of Tcl,
3161but not any more: operators and entities, mainly. These objects were
3162never documented, and it is unlikely that they were ever used. Operators
3163were a kind of generic specific to the Tcl support. Entities were
3164replaced by applicable structs, mentioned above.
3165
4a457691
AW
3166** New struct slot allocation: "hidden"
3167
3168A hidden slot is readable and writable, but will not be initialized by a
3169call to make-struct. For example in your layout you would say "ph"
3170instead of "pw". Hidden slots are useful for adding new slots to a
3171vtable without breaking existing invocations to make-struct.
3172
3173** eqv? not a generic
3174
3175One used to be able to extend `eqv?' as a primitive-generic, but no
3176more. Because `eqv?' is in the expansion of `case' (via `memv'), which
3177should be able to compile to static dispatch tables, it doesn't make
3178sense to allow extensions that would subvert this optimization.
3179
e614d375
AW
3180** `inet-ntop' and `inet-pton' are always available.
3181
3182Guile now use a portable implementation of `inet_pton'/`inet_ntop', so
3183there is no more need to use `inet-aton'/`inet-ntoa'. The latter
3184functions are deprecated.
3185
b47fea09
AW
3186** `getopt-long' parsing errors throw to `quit', not `misc-error'
3187
3188This change should inhibit backtraces on argument parsing errors.
3189`getopt-long' has been modified to print out the error that it throws
3190itself.
3191
51cb0cca
AW
3192** New primitive: `tmpfile'.
3193
3194See "File System" in the manual.
3195
3196** Random generator state may be serialized to a datum
3197
3198`random-state->datum' will serialize a random state to a datum, which
3199may be written out, read back in later, and revivified using
3200`datum->random-state'. See "Random" in the manual, for more details.
3201
3202** Fix random number generator on 64-bit platforms
3203
3204There was a nasty bug on 64-bit platforms in which asking for a random
3205integer with a range between 2**32 and 2**64 caused a segfault. After
3206many embarrassing iterations, this was fixed.
3207
5bb408cc
AW
3208** Fast bit operations.
3209
3210The bit-twiddling operations `ash', `logand', `logior', and `logxor' now
3211have dedicated bytecodes. Guile is not just for symbolic computation,
3212it's for number crunching too.
3213
4a457691
AW
3214** Faster SRFI-9 record access
3215
3216SRFI-9 records are now implemented directly on top of Guile's structs,
3217and their accessors are defined in such a way that normal call-sites
3218inline to special VM opcodes, while still allowing for the general case
3219(e.g. passing a record accessor to `apply').
3220
e614d375
AW
3221** R6RS block comment support
3222
3223Guile now supports R6RS nested block comments. The start of a comment is
3224marked with `#|', and the end with `|#'.
3225
3226** `guile-2' cond-expand feature
3227
3228To test if your code is running under Guile 2.0 (or its alpha releases),
3229test for the `guile-2' cond-expand feature. Like this:
3230
3231 (cond-expand (guile-2 (eval-when (compile)
3232 ;; This must be evaluated at compile time.
3233 (fluid-set! current-reader my-reader)))
3234 (guile
3235 ;; Earlier versions of Guile do not have a
3236 ;; separate compilation phase.
3237 (fluid-set! current-reader my-reader)))
3238
96b73e84 3239** New global variables: %load-compiled-path, %load-compiled-extensions
fa1804e9 3240
96b73e84 3241These are analogous to %load-path and %load-extensions.
fa1804e9 3242
18e90860
AW
3243** New fluid: `%file-port-name-canonicalization'
3244
3245This fluid parameterizes the file names that are associated with file
3246ports. If %file-port-name-canonicalization is 'absolute, then file names
3247are canonicalized to be absolute paths. If it is 'relative, then the
3248name is canonicalized, but any prefix corresponding to a member of
3249`%load-path' is stripped off. Otherwise the names are passed through
3250unchanged.
3251
3252In addition, the `compile-file' and `compile-and-load' procedures bind
3253%file-port-name-canonicalization to their `#:canonicalization' keyword
3254argument, which defaults to 'relative. In this way, one might compile
3255"../module/ice-9/boot-9.scm", but the path that gets residualized into
3256the .go is "ice-9/boot-9.scm".
3257
96b73e84 3258** New procedure, `make-promise'
fa1804e9 3259
96b73e84 3260`(make-promise (lambda () foo))' is equivalent to `(delay foo)'.
fa1804e9 3261
108e18b1
AW
3262** `defined?' may accept a module as its second argument
3263
3264Previously it only accepted internal structures from the evaluator.
3265
96b73e84 3266** New entry into %guile-build-info: `ccachedir'
fa1804e9 3267
96b73e84 3268** Fix bug in `module-bound?'.
fa1804e9 3269
96b73e84
AW
3270`module-bound?' was returning true if a module did have a local
3271variable, but one that was unbound, but another imported module bound
3272the variable. This was an error, and was fixed.
fa1804e9 3273
96b73e84 3274** `(ice-9 syncase)' has been deprecated.
fa1804e9 3275
96b73e84
AW
3276As syntax-case is available by default, importing `(ice-9 syncase)' has
3277no effect, and will trigger a deprecation warning.
fa1804e9 3278
b0217d17
AW
3279** New readline history functions
3280
3281The (ice-9 readline) module now provides add-history, read-history,
3282write-history and clear-history, which wrap the corresponding GNU
3283History library functions.
3284
86d88a22
AW
3285** Removed deprecated uniform array procedures:
3286 dimensions->uniform-array, list->uniform-array, array-prototype
3287
3288Instead, use make-typed-array, list->typed-array, or array-type,
3289respectively.
3290
51cb0cca
AW
3291** Deprecate the old `scm-style-repl'
3292
3293The following bindings from boot-9 are now found in `(ice-9
3294scm-style-repl)': `scm-style-repl', `error-catching-loop',
3295`error-catching-repl', `bad-throw', `scm-repl-silent'
3296`assert-repl-silence', `repl-print-unspecified',
3297`assert-repl-print-unspecified', `scm-repl-verbose',
3298`assert-repl-verbosity', `scm-repl-prompt', `set-repl-prompt!', `repl',
3299`default-pre-unwind-handler', `handle-system-error',
3300
3301The following bindings have been deprecated, with no replacement:
3302`pre-unwind-handler-dispatch'.
3303
3304The following bindings have been totally removed:
3305`before-signal-stack'.
3306
3307Deprecated forwarding shims have been installed so that users that
3308expect these bindings in the main namespace will still work, but receive
3309a deprecation warning.
3310
3311** `set-batch-mode?!' replaced by `ensure-batch-mode!'
3312
3313"Batch mode" is a flag used to tell a program that it is not running
3314interactively. One usually turns it on after a fork. It may not be
3315turned off. `ensure-batch-mode!' deprecates the old `set-batch-mode?!',
3316because it is a better interface, as it can only turn on batch mode, not
3317turn it off.
3318
3319** Deprecate `save-stack', `the-last-stack'
3320
3321It used to be that the way to debug programs in Guile was to capture the
3322stack at the time of error, drop back to the REPL, then debug that
3323stack. But this approach didn't compose, was tricky to get right in the
3324presence of threads, and was not very powerful.
3325
3326So `save-stack', `stack-saved?', and `the-last-stack' have been moved to
3327`(ice-9 save-stack)', with deprecated bindings left in the root module.
3328
3329** `top-repl' has its own module
3330
3331The `top-repl' binding, called with Guile is run interactively, is now
3332is its own module, `(ice-9 top-repl)'. A deprecated forwarding shim was
3333left in the default environment.
3334
3335** `display-error' takes a frame
3336
3337The `display-error' / `scm_display_error' helper now takes a frame as an
3338argument instead of a stack. Stacks are still supported in deprecated
3339builds. Additionally, `display-error' will again source location
3340information for the error.
3341
3342** No more `(ice-9 debug)'
3343
3344This module had some debugging helpers that are no longer applicable to
3345the current debugging model. Importing this module will produce a
3346deprecation warning. Users should contact bug-guile for support.
3347
ef6b0e8d
AW
3348** Remove obsolete debug-options
3349
3350Removed `breakpoints', `trace', `procnames', `indent', `frames',
3351`maxdepth', and `debug' debug-options.
3352
3353** `backtrace' debug option on by default
3354
3355Given that Guile 2.0 can always give you a backtrace, backtraces are now
3356on by default.
3357
3358** `turn-on-debugging' deprecated
3359
3360** Remove obsolete print-options
3361
3362The `source' and `closure-hook' print options are obsolete, and have
3363been removed.
3364
3365** Remove obsolete read-options
3366
3367The "elisp-strings" and "elisp-vectors" read options were unused and
3368obsolete, so they have been removed.
3369
3370** Remove eval-options and trap-options
3371
3372Eval-options and trap-options are obsolete with the new VM and
3373evaluator.
3374
3375** Remove (ice-9 debugger) and (ice-9 debugging)
3376
3377See "Traps" and "Interactive Debugging" in the manual, for information
3378on their replacements.
3379
3380** Remove the GDS Emacs integration
3381
3382See "Using Guile in Emacs" in the manual, for info on how we think you
3383should use Guile with Emacs.
3384
b0abbaa7
AW
3385** Deprecated: `lazy-catch'
3386
3387`lazy-catch' was a form that captured the stack at the point of a
3388`throw', but the dynamic state at the point of the `catch'. It was a bit
3389crazy. Please change to use `catch', possibly with a throw-handler, or
3390`with-throw-handler'.
3391
487bacf4
AW
3392** Deprecated: primitive properties
3393
3394The `primitive-make-property', `primitive-property-set!',
3395`primitive-property-ref', and `primitive-property-del!' procedures were
3396crufty and only used to implement object properties, which has a new,
3397threadsafe implementation. Use object properties or weak hash tables
3398instead.
3399
18e90860
AW
3400** Deprecated `@bind' syntax
3401
3402`@bind' was part of an older implementation of the Emacs Lisp language,
3403and is no longer used.
3404
51cb0cca
AW
3405** Miscellaneous other deprecations
3406
7cd99cba
AW
3407`cuserid' has been deprecated, as it only returns 8 bytes of a user's
3408login. Use `(passwd:name (getpwuid (geteuid)))' instead.
3409
487bacf4
AW
3410Additionally, the procedures `apply-to-args', `has-suffix?', `scheme-file-suffix'
3411`get-option', `for-next-option', `display-usage-report',
3412`transform-usage-lambda', `collect', and `set-batch-mode?!' have all
3413been deprecated.
3414
7cd99cba
AW
3415** Add support for unbound fluids
3416
3417See `make-unbound-fluid', `fluid-unset!', and `fluid-bound?' in the
3418manual.
3419
3420** Add `variable-unset!'
3421
3422See "Variables" in the manual, for more details.
51cb0cca 3423
87e00370
LC
3424** Last but not least, the `λ' macro can be used in lieu of `lambda'
3425
96b73e84 3426* Changes to the C interface
fa1804e9 3427
7b96f3dd
LC
3428** Guile now uses libgc, the Boehm-Demers-Weiser garbage collector
3429
3430The semantics of `scm_gc_malloc ()' have been changed, in a
3431backward-compatible way. A new allocation routine,
3432`scm_gc_malloc_pointerless ()', was added.
3433
3434Libgc is a conservative GC, which we hope will make interaction with C
3435code easier and less error-prone.
3436
487bacf4
AW
3437** New procedures: `scm_to_stringn', `scm_from_stringn'
3438** New procedures: scm_{to,from}_{utf8,latin1}_symbol{n,}
3439** New procedures: scm_{to,from}_{utf8,utf32,latin1}_string{n,}
3440
3441These new procedures convert to and from string representations in
3442particular encodings.
ef6b0e8d 3443
487bacf4
AW
3444Users should continue to use locale encoding for user input, user
3445output, or interacting with the C library.
ef6b0e8d 3446
487bacf4 3447Use the Latin-1 functions for ASCII, and for literals in source code.
ef6b0e8d 3448
487bacf4
AW
3449Use UTF-8 functions for interaction with modern libraries which deal in
3450UTF-8, and UTF-32 for interaction with utf32-using libraries.
3451
3452Otherwise, use scm_to_stringn or scm_from_stringn with a specific
3453encoding.
ef6b0e8d 3454
4a457691
AW
3455** New type definitions for `scm_t_intptr' and friends.
3456
3457`SCM_T_UINTPTR_MAX', `SCM_T_INTPTR_MIN', `SCM_T_INTPTR_MAX',
3458`SIZEOF_SCM_T_BITS', `scm_t_intptr' and `scm_t_uintptr' are now
3459available to C. Have fun!
3460
96b73e84 3461** The GH interface (deprecated in version 1.6, 2001) was removed.
fa1804e9 3462
96b73e84 3463** Internal `scm_i_' functions now have "hidden" linkage with GCC/ELF
fa1804e9 3464
96b73e84
AW
3465This makes these internal functions technically not callable from
3466application code.
fa1804e9 3467
96b73e84
AW
3468** Functions for handling `scm_option' now no longer require an argument
3469indicating length of the `scm_t_option' array.
fa1804e9 3470
4a457691
AW
3471** Procedures-with-setters are now implemented using applicable structs
3472
3473From a user's perspective this doesn't mean very much. But if, for some
3474odd reason, you used the SCM_PROCEDURE_WITH_SETTER_P, SCM_PROCEDURE, or
3475SCM_SETTER macros, know that they're deprecated now. Also, scm_tc7_pws
3476is gone.
3477
3478** Remove old evaluator closures
3479
3480There used to be ranges of typecodes allocated to interpreted data
3481structures, but that it no longer the case, given that interpreted
3482procedure are now just regular VM closures. As a result, there is a
3483newly free tc3, and a number of removed macros. See the ChangeLog for
3484details.
3485
cf8ec359 3486** Primitive procedures are now VM trampoline procedures
4a457691
AW
3487
3488It used to be that there were something like 12 different typecodes
3489allocated to primitive procedures, each with its own calling convention.
3490Now there is only one, the gsubr. This may affect user code if you were
3491defining a procedure using scm_c_make_subr rather scm_c_make_gsubr. The
3492solution is to switch to use scm_c_make_gsubr. This solution works well
b3da54d1 3493both with the old 1.8 and with the current 1.9 branch.
4a457691 3494
cf8ec359
AW
3495Guile's old evaluator used to have special cases for applying "gsubrs",
3496primitive procedures with specified numbers of required, optional, and
3497rest arguments. Now, however, Guile represents gsubrs as normal VM
3498procedures, with appropriate bytecode to parse out the correct number of
3499arguments, including optional and rest arguments, and then with a
3500special bytecode to apply the gsubr.
3501
3502This allows primitive procedures to appear on the VM stack, allowing
3503them to be accurately counted in profiles. Also they now have more
3504debugging information attached to them -- their number of arguments, for
3505example. In addition, the VM can completely inline the application
3506mechanics, allowing for faster primitive calls.
3507
3508However there are some changes on the C level. There is no more
3509`scm_tc7_gsubr' or `scm_tcs_subrs' typecode for primitive procedures, as
3510they are just VM procedures. Likewise the macros `SCM_GSUBR_TYPE',
3511`SCM_GSUBR_MAKTYPE', `SCM_GSUBR_REQ', `SCM_GSUBR_OPT', and
3512`SCM_GSUBR_REST' are gone, as are `SCM_SUBR_META_INFO', `SCM_SUBR_PROPS'
3513`SCM_SET_SUBR_GENERIC_LOC', and `SCM_SUBR_ARITY_TO_TYPE'.
3514
3515Perhaps more significantly, `scm_c_make_subr',
3516`scm_c_make_subr_with_generic', `scm_c_define_subr', and
3517`scm_c_define_subr_with_generic'. They all operated on subr typecodes,
3518and there are no more subr typecodes. Use the scm_c_make_gsubr family
3519instead.
3520
3521Normal users of gsubrs should not be affected, though, as the
3522scm_c_make_gsubr family still is the correct way to create primitive
3523procedures.
3524
3525** Remove deprecated array C interfaces
3526
3527Removed the deprecated array functions `scm_i_arrayp',
3528`scm_i_array_ndim', `scm_i_array_mem', `scm_i_array_v',
3529`scm_i_array_base', `scm_i_array_dims', and the deprecated macros
3530`SCM_ARRAYP', `SCM_ARRAY_NDIM', `SCM_ARRAY_CONTP', `SCM_ARRAY_MEM',
3531`SCM_ARRAY_V', `SCM_ARRAY_BASE', and `SCM_ARRAY_DIMS'.
3532
3533** Remove unused snarf macros
3534
3535`SCM_DEFINE1', `SCM_PRIMITIVE_GENERIC_1', `SCM_PROC1, and `SCM_GPROC1'
3536are no more. Use SCM_DEFINE or SCM_PRIMITIVE_GENERIC instead.
3537
cf8ec359
AW
3538** New functions: `scm_call_n', `scm_c_run_hookn'
3539
3540`scm_call_n' applies to apply a function to an array of arguments.
3541`scm_c_run_hookn' runs a hook with an array of arguments.
3542
4a457691
AW
3543** Some SMOB types changed to have static typecodes
3544
3545Fluids, dynamic states, and hash tables used to be SMOB objects, but now
3546they have statically allocated tc7 typecodes.
3547
3548** Preparations for changing SMOB representation
3549
3550If things go right, we'll be changing the SMOB representation soon. To
3551that end, we did a lot of cleanups to calls to e.g. SCM_CELL_WORD_2(x) when
3552the code meant SCM_SMOB_DATA_2(x); user code will need similar changes
3553in the future. Code accessing SMOBs using SCM_CELL macros was never
3554correct, but until now things still worked. Users should be aware of
3555such changes.
fa1804e9 3556
cf8ec359
AW
3557** Changed invocation mechanics of applicable SMOBs
3558
3559Guile's old evaluator used to have special cases for applying SMOB
3560objects. Now, with the VM, when Guile sees a SMOB, it looks up a VM
3561trampoline procedure for it, and use the normal mechanics to apply the
3562trampoline. This simplifies procedure application in the normal,
3563non-SMOB case.
3564
3565The upshot is that the mechanics used to apply a SMOB are different from
35661.8. Descriptors no longer have `apply_0', `apply_1', `apply_2', and
3567`apply_3' functions, and the macros SCM_SMOB_APPLY_0 and friends are now
3568deprecated. Just use the scm_call_0 family of procedures.
3569
ef6b0e8d
AW
3570** Removed support shlibs for SRFIs 1, 4, 13, 14, and 60
3571
3572Though these SRFI support libraries did expose API, they encoded a
3573strange version string into their library names. That version was never
3574programmatically exported, so there was no way people could use the
3575libs.
3576
3577This was a fortunate oversight, as it allows us to remove the need for
3578extra, needless shared libraries --- the C support code for SRFIs 4, 13,
3579and 14 was already in core --- and allow us to incrementally return the
3580SRFI implementation to Scheme.
3581
96b73e84 3582** New C function: scm_module_public_interface
a4f1c77d 3583
96b73e84 3584This procedure corresponds to Scheme's `module-public-interface'.
24d6fae8 3585
4a457691
AW
3586** Undeprecate `scm_the_root_module ()'
3587
3588It's useful to be able to get the root module from C without doing a
3589full module lookup.
3590
e614d375
AW
3591** Inline vector allocation
3592
3593Instead of having vectors point out into the heap for their data, their
3594data is now allocated inline to the vector object itself. The same is
3595true for bytevectors, by default, though there is an indirection
3596available which should allow for making a bytevector from an existing
3597memory region.
3598
4a457691
AW
3599** New struct constructors that don't involve making lists
3600
3601`scm_c_make_struct' and `scm_c_make_structv' are new varargs and array
3602constructors, respectively, for structs. You might find them useful.
3603
3604** Stack refactor
3605
3606In Guile 1.8, there were debugging frames on the C stack. Now there is
3607no more need to explicitly mark the stack in this way, because Guile has
3608a VM stack that it knows how to walk, which simplifies the C API
3609considerably. See the ChangeLog for details; the relevant interface is
3610in libguile/stacks.h. The Scheme API has not been changed significantly.
3611
e614d375
AW
3612** Removal of Guile's primitive object system.
3613
3614There were a number of pieces in `objects.[ch]' that tried to be a
3615minimal object system, but were never documented, and were quickly
3616obseleted by GOOPS' merge into Guile proper. So `scm_make_class_object',
3617`scm_make_subclass_object', `scm_metaclass_standard', and like symbols
3618from objects.h are no more. In the very unlikely case in which these
3619were useful to you, we urge you to contact guile-devel.
3620
3621** No future.
3622
3623Actually the future is still in the state that it was, is, and ever
3624shall be, Amen, except that `futures.c' and `futures.h' are no longer a
3625part of it. These files were experimental, never compiled, and would be
3626better implemented in Scheme anyway. In the future, that is.
3627
4a457691
AW
3628** Deprecate trampolines
3629
3630There used to be C functions `scm_trampoline_0', `scm_trampoline_1', and
3631so on. The point was to do some precomputation on the type of the
3632procedure, then return a specialized "call" procedure. However this
3633optimization wasn't actually an optimization, so it is now deprecated.
3634Just use `scm_call_0', etc instead.
3635
18e90860
AW
3636** Deprecated `scm_badargsp'
3637
3638This function is unused in Guile, but was part of its API.
3639
5bb408cc
AW
3640** Better support for Lisp `nil'.
3641
3642The bit representation of `nil' has been tweaked so that it is now very
3643efficient to check e.g. if a value is equal to Scheme's end-of-list or
3644Lisp's nil. Additionally there are a heap of new, specific predicates
b390b008 3645like scm_is_null_or_nil.
5bb408cc 3646
139fa149
AW
3647** Better integration of Lisp `nil'.
3648
3649`scm_is_boolean', `scm_is_false', and `scm_is_null' all return true now
3650for Lisp's `nil'. This shouldn't affect any Scheme code at this point,
3651but when we start to integrate more with Emacs, it is possible that we
3652break code that assumes that, for example, `(not x)' implies that `x' is
3653`eq?' to `#f'. This is not a common assumption. Refactoring affected
3654code to rely on properties instead of identities will improve code
3655correctness. See "Nil" in the manual, for more details.
3656
e614d375
AW
3657** Support for static allocation of strings, symbols, and subrs.
3658
3659Calls to snarfing CPP macros like SCM_DEFINE macro will now allocate
3660much of their associated data as static variables, reducing Guile's
3661memory footprint.
3662
93617170
LC
3663** `scm_stat' has an additional argument, `exception_on_error'
3664** `scm_primitive_load_path' has an additional argument `exception_on_not_found'
24d6fae8 3665
f1ce9199
LC
3666** `scm_set_port_seek' and `scm_set_port_truncate' use the `scm_t_off' type
3667
3668Previously they would use the `off_t' type, which is fragile since its
3669definition depends on the application's value for `_FILE_OFFSET_BITS'.
3670
ba4c43dc
LC
3671** The `long_long' C type, deprecated in 1.8, has been removed
3672
86d88a22
AW
3673** Removed deprecated uniform array procedures: scm_make_uve,
3674 scm_array_prototype, scm_list_to_uniform_array,
3675 scm_dimensions_to_uniform_array, scm_make_ra, scm_shap2ra, scm_cvref,
3676 scm_ra_set_contp, scm_aind, scm_raprin1
3677
3678These functions have been deprecated since early 2005.
3679
a4f1c77d 3680* Changes to the distribution
6caac03c 3681
53befeb7
NJ
3682** Guile's license is now LGPLv3+
3683
3684In other words the GNU Lesser General Public License, version 3 or
3685later (at the discretion of each person that chooses to redistribute
3686part of Guile).
3687
51cb0cca
AW
3688** AM_SILENT_RULES
3689
3690Guile's build is visually quieter, due to the use of Automake 1.11's
3691AM_SILENT_RULES. Build as `make V=1' to see all of the output.
3692
56664c08
AW
3693** GOOPS documentation folded into Guile reference manual
3694
3695GOOPS, Guile's object system, used to be documented in separate manuals.
3696This content is now included in Guile's manual directly.
3697
96b73e84 3698** `guile-config' will be deprecated in favor of `pkg-config'
8a9faebc 3699
96b73e84 3700`guile-config' has been rewritten to get its information from
93617170 3701`pkg-config', so this should be a transparent change. Note however that
96b73e84
AW
3702guile.m4 has yet to be modified to call pkg-config instead of
3703guile-config.
2e77f720 3704
54dd0ca5
LC
3705** Guile now provides `guile-2.0.pc' instead of `guile-1.8.pc'
3706
3707Programs that use `pkg-config' to find Guile or one of its Autoconf
3708macros should now require `guile-2.0' instead of `guile-1.8'.
3709
96b73e84 3710** New installation directory: $(pkglibdir)/1.9/ccache
62560650 3711
96b73e84
AW
3712If $(libdir) is /usr/lib, for example, Guile will install its .go files
3713to /usr/lib/guile/1.9/ccache. These files are architecture-specific.
89bc270d 3714
b0abbaa7
AW
3715** Parallel installability fixes
3716
3717Guile now installs its header files to a effective-version-specific
3718directory, and includes the effective version (e.g. 2.0) in the library
3719name (e.g. libguile-2.0.so).
3720
3721This change should be transparent to users, who should detect Guile via
3722the guile.m4 macro, or the guile-2.0.pc pkg-config file. It will allow
3723parallel installs for multiple versions of Guile development
3724environments.
3725
b0217d17
AW
3726** Dynamically loadable extensions may be placed in a Guile-specific path
3727
3728Before, Guile only searched the system library paths for extensions
3729(e.g. /usr/lib), which meant that the names of Guile extensions had to
3730be globally unique. Installing them to a Guile-specific extensions
66ad445d 3731directory is cleaner. Use `pkg-config --variable=extensiondir
b0217d17
AW
3732guile-2.0' to get the location of the extensions directory.
3733
51cb0cca
AW
3734** User Scheme code may be placed in a version-specific path
3735
3736Before, there was only one way to install user Scheme code to a
3737version-specific Guile directory: install to Guile's own path,
3738e.g. /usr/share/guile/2.0. The site directory,
3739e.g. /usr/share/guile/site, was unversioned. This has been changed to
3740add a version-specific site directory, e.g. /usr/share/guile/site/2.0,
3741searched before the global site directory.
3742
7b96f3dd
LC
3743** New dependency: libgc
3744
3745See http://www.hpl.hp.com/personal/Hans_Boehm/gc/, for more information.
3746
3747** New dependency: GNU libunistring
32e29e24 3748
108e18b1 3749See http://www.gnu.org/software/libunistring/, for more information. Our
7b96f3dd 3750Unicode support uses routines from libunistring.
32e29e24 3751
dbd9532e
LC
3752** New dependency: libffi
3753
3754See http://sourceware.org/libffi/, for more information.
3755
a4f1c77d 3756
dc686d7b 3757\f
9957b1c7
LC
3758Changes in 1.8.8 (since 1.8.7)
3759
3760* Bugs fixed
3761
3762** Fix possible buffer overruns when parsing numbers
c15d8e6a 3763** Avoid clash with system setjmp/longjmp on IA64
1ff4da65 3764** Fix `wrong type arg' exceptions with IPv6 addresses
9957b1c7
LC
3765
3766\f
dc686d7b
NJ
3767Changes in 1.8.7 (since 1.8.6)
3768
922d417b
JG
3769* New modules (see the manual for details)
3770
3771** `(srfi srfi-98)', an interface to access environment variables
3772
dc686d7b
NJ
3773* Bugs fixed
3774
f5851b89 3775** Fix compilation with `--disable-deprecated'
dc686d7b 3776** Fix %fast-slot-ref/set!, to avoid possible segmentation fault
cbee5075 3777** Fix MinGW build problem caused by HAVE_STRUCT_TIMESPEC confusion
ab878b0f 3778** Fix build problem when scm_t_timespec is different from struct timespec
95a040cd 3779** Fix build when compiled with -Wundef -Werror
1bcf7993 3780** More build fixes for `alphaev56-dec-osf5.1b' (Tru64)
5374ec9c 3781** Build fixes for `powerpc-ibm-aix5.3.0.0' (AIX 5.3)
5c006c3f
LC
3782** With GCC, always compile with `-mieee' on `alpha*' and `sh*'
3783** Better diagnose broken `(strftime "%z" ...)' in `time.test' (bug #24130)
fc76c08d 3784** Fix parsing of SRFI-88/postfix keywords longer than 128 characters
40f89215 3785** Fix reading of complex numbers where both parts are inexact decimals
d41668fa 3786
ad5f5ada
NJ
3787** Allow @ macro to work with (ice-9 syncase)
3788
3789Previously, use of the @ macro in a module whose code is being
3790transformed by (ice-9 syncase) would cause an "Invalid syntax" error.
3791Now it works as you would expect (giving the value of the specified
3792module binding).
3793
05588a1a
LC
3794** Have `scm_take_locale_symbol ()' return an interned symbol (bug #25865)
3795
d41668fa 3796\f
8c40b75d
LC
3797Changes in 1.8.6 (since 1.8.5)
3798
071bb6a8
LC
3799* New features (see the manual for details)
3800
3801** New convenience function `scm_c_symbol_length ()'
3802
091baf9e
NJ
3803** Single stepping through code from Emacs
3804
3805When you use GDS to evaluate Scheme code from Emacs, you can now use
3806`C-u' to indicate that you want to single step through that code. See
3807`Evaluating Scheme Code' in the manual for more details.
3808
9e4db0ef
LC
3809** New "guile(1)" man page!
3810
242ebeaf
LC
3811* Changes to the distribution
3812
3813** Automake's `AM_MAINTAINER_MODE' is no longer used
3814
3815Thus, the `--enable-maintainer-mode' configure option is no longer
3816available: Guile is now always configured in "maintainer mode".
3817
e0063477
LC
3818** `ChangeLog' files are no longer updated
3819
3820Instead, changes are detailed in the version control system's logs. See
3821the top-level `ChangeLog' files for details.
3822
3823
8c40b75d
LC
3824* Bugs fixed
3825
fd2b17b9 3826** `symbol->string' now returns a read-only string, as per R5RS
c6333102 3827** Fix incorrect handling of the FLAGS argument of `fold-matches'
589d9eb8 3828** `guile-config link' now prints `-L$libdir' before `-lguile'
4a1db3a9 3829** Fix memory corruption involving GOOPS' `class-redefinition'
191e7165 3830** Fix possible deadlock in `mutex-lock'
95c6523b 3831** Fix build issue on Tru64 and ia64-hp-hpux11.23 (`SCM_UNPACK' macro)
4696a666 3832** Fix build issue on mips, mipsel, powerpc and ia64 (stack direction)
450be18d 3833** Fix build issue on hppa2.0w-hp-hpux11.11 (`dirent64' and `readdir64_r')
88cefbc7 3834** Fix build issue on i386-unknown-freebsd7.0 ("break strict-aliasing rules")
76dae881 3835** Fix misleading output from `(help rationalize)'
5ea8e76e 3836** Fix build failure on Debian hppa architecture (bad stack growth detection)
1dd79792 3837** Fix `gcd' when called with a single, negative argument.
d8b6e191 3838** Fix `Stack overflow' errors seen when building on some platforms
ccf1ca4a
LC
3839** Fix bug when `scm_with_guile ()' was called several times from the
3840 same thread
76350432
LC
3841** The handler of SRFI-34 `with-exception-handler' is now invoked in the
3842 dynamic environment of the call to `raise'
cb823e63 3843** Fix potential deadlock in `make-struct'
691343ea 3844** Fix compilation problem with libltdl from Libtool 2.2.x
3ae3166b 3845** Fix sloppy bound checking in `string-{ref,set!}' with the empty string
6eadcdab 3846
8c40b75d 3847\f
5305df84
LC
3848Changes in 1.8.5 (since 1.8.4)
3849
4b824aae
LC
3850* Infrastructure changes
3851
3852** Guile repository switched from CVS to Git
3853
3854The new repository can be accessed using
3855"git-clone git://git.sv.gnu.org/guile.git", or can be browsed on-line at
3856http://git.sv.gnu.org/gitweb/?p=guile.git . See `README' for details.
3857
92826dd0
LC
3858** Add support for `pkg-config'
3859
3860See "Autoconf Support" in the manual for details.
3861
189681f5
LC
3862* New modules (see the manual for details)
3863
3864** `(srfi srfi-88)'
3865
ef4cbc08
LC
3866* New features (see the manual for details)
3867
3868** New `postfix' read option, for SRFI-88 keyword syntax
f5c2af4b 3869** Some I/O primitives have been inlined, which improves I/O performance
b20ef3a6 3870** New object-based traps infrastructure
ef4cbc08 3871
b20ef3a6
NJ
3872This is a GOOPS-based infrastructure that builds on Guile's low-level
3873evaluator trap calls and facilitates the development of debugging
3874features like single-stepping, breakpoints, tracing and profiling.
3875See the `Traps' node of the manual for details.
3876
3877** New support for working on Guile code from within Emacs
3878
3879Guile now incorporates the `GDS' library (previously distributed
3880separately) for working on Guile code from within Emacs. See the
3881`Using Guile In Emacs' node of the manual for details.
3882
5305df84
LC
3883* Bugs fixed
3884
e27d2495
LC
3885** `scm_add_slot ()' no longer segfaults (fixes bug #22369)
3886** Fixed `(ice-9 match)' for patterns like `((_ ...) ...)'
3887
3888Previously, expressions like `(match '((foo) (bar)) (((_ ...) ...) #t))'
3889would trigger an unbound variable error for `match:andmap'.
3890
62c5382b
LC
3891** `(oop goops describe)' now properly provides the `describe' feature
3892** Fixed `args-fold' from `(srfi srfi-37)'
3893
3894Previously, parsing short option names of argument-less options would
3895lead to a stack overflow.
3896
816e3edf 3897** `(srfi srfi-35)' is now visible through `cond-expand'
61b6542a 3898** Fixed type-checking for the second argument of `eval'
0fb11ae4 3899** Fixed type-checking for SRFI-1 `partition'
f1c212b1
LC
3900** Fixed `struct-ref' and `struct-set!' on "light structs"
3901** Honor struct field access rights in GOOPS
be10cba8 3902** Changed the storage strategy of source properties, which fixes a deadlock
979eade6 3903** Allow compilation of Guile-using programs in C99 mode with GCC 4.3 and later
bfb64eb4 3904** Fixed build issue for GNU/Linux on IA64
fa80e280 3905** Fixed build issues on NetBSD 1.6
a2c25234 3906** Fixed build issue on Solaris 2.10 x86_64
3f520967 3907** Fixed build issue with DEC/Compaq/HP's compiler
c2ad98ad
LC
3908** Fixed `scm_from_complex_double' build issue on FreeBSD
3909** Fixed `alloca' build issue on FreeBSD 6
a7286720 3910** Removed use of non-portable makefile constructs
535b3592 3911** Fixed shadowing of libc's <random.h> on Tru64, which broke compilation
eedcb08a 3912** Make sure all tests honor `$TMPDIR'
5305df84
LC
3913
3914\f
d41668fa
LC
3915Changes in 1.8.4 (since 1.8.3)
3916
3917* Bugs fixed
3918
3919** CR (ASCII 0x0d) is (again) recognized as a token delimiter by the reader
6e14de7d
NJ
3920** Fixed a segmentation fault which occurred when displaying the
3921backtrace of a stack with a promise object (made by `delay') in it.
7d1fc872 3922** Make `accept' leave guile mode while blocking
693758d5 3923** `scm_c_read ()' and `scm_c_write ()' now type-check their port argument
378cc645 3924** Fixed a build problem on AIX (use of func_data identifier)
15bd90ea
NJ
3925** Fixed a segmentation fault which occurred when hashx-ref or hashx-set! was
3926called with an associator proc that returns neither a pair nor #f.
3ac8359a 3927** Secondary threads now always return a valid module for (current-module).
d05bcb2e
NJ
3928** Avoid MacOS build problems caused by incorrect combination of "64"
3929system and library calls.
9a6fac59 3930** `guile-snarf' now honors `$TMPDIR'
25a640ca 3931** `guile-config compile' now reports CPPFLAGS used at compile-time
7f74cf9a 3932** Fixed build with Sun Studio (Solaris 9)
4a19ed04
NJ
3933** Fixed wrong-type-arg errors when creating zero length SRFI-4
3934uniform vectors on AIX.
86a597f8 3935** Fixed a deadlock that occurs upon GC with multiple threads.
4b26c03e 3936** Fixed compile problem with GCC on Solaris and AIX (use of _Complex_I)
d4a00708 3937** Fixed autotool-derived build problems on AIX 6.1.
9a6fac59 3938** Fixed NetBSD/alpha support
b226295a 3939** Fixed MacOS build problem caused by use of rl_get_keymap(_name)
7d1fc872
LC
3940
3941* New modules (see the manual for details)
3942
3943** `(srfi srfi-69)'
d41668fa 3944
b226295a
NJ
3945* Documentation fixes and improvements
3946
3947** Removed premature breakpoint documentation
3948
3949The features described are not available in the series of 1.8.x
3950releases, so the documentation was misleading and has been removed.
3951
3952** More about Guile's default *random-state* variable
3953
3954** GOOPS: more about how to use `next-method'
3955
d3cf93bc
NJ
3956* Changes to the distribution
3957
3958** Corrected a few files that referred incorrectly to the old GPL + special exception licence
3959
3960In fact Guile since 1.8.0 has been licensed with the GNU Lesser
3961General Public License, and the few incorrect files have now been
3962fixed to agree with the rest of the Guile distribution.
3963
5e42b8e7
NJ
3964** Removed unnecessary extra copies of COPYING*
3965
3966The distribution now contains a single COPYING.LESSER at its top level.
3967
a4f1c77d 3968\f
d4c38221
LC
3969Changes in 1.8.3 (since 1.8.2)
3970
3971* New modules (see the manual for details)
3972
f50ca8da 3973** `(srfi srfi-35)'
d4c38221
LC
3974** `(srfi srfi-37)'
3975
e08f3f7a
LC
3976* Bugs fixed
3977
dc061a74 3978** The `(ice-9 slib)' module now works as expected
e08f3f7a 3979** Expressions like "(set! 'x #t)" no longer yield a crash
d7c0c26d 3980** Warnings about duplicate bindings now go to stderr
1ac5fb45 3981** A memory leak in `make-socket-address' was fixed
f43f3620 3982** Alignment issues (e.g., on SPARC) in network routines were fixed
29776e85 3983** A threading issue that showed up at least on NetBSD was fixed
66302618 3984** Build problems on Solaris and IRIX fixed
e08f3f7a 3985
1fdd8ffa
LC
3986* Implementation improvements
3987
7ff6c169 3988** The reader is now faster, which reduces startup time
1fdd8ffa
LC
3989** Procedures returned by `record-accessor' and `record-modifier' are faster
3990
d4c38221 3991\f
45c0ff10
KR
3992Changes in 1.8.2 (since 1.8.1):
3993
3994* New procedures (see the manual for details)
3995
3996** set-program-arguments
b3aa4626 3997** make-vtable
45c0ff10 3998
9320e933
LC
3999* Incompatible changes
4000
4001** The body of a top-level `define' no longer sees the binding being created
4002
4003In a top-level `define', the binding being created is no longer visible
4004from the `define' body. This breaks code like
4005"(define foo (begin (set! foo 1) (+ foo 1)))", where `foo' is now
4006unbound in the body. However, such code was not R5RS-compliant anyway,
4007per Section 5.2.1.
4008
45c0ff10
KR
4009* Bugs fixed
4010
4011** Fractions were not `equal?' if stored in unreduced form.
4012(A subtle problem, since printing a value reduced it, making it work.)
4013** srfi-60 `copy-bit' failed on 64-bit systems
4014** "guile --use-srfi" option at the REPL can replace core functions
4015(Programs run with that option were ok, but in the interactive REPL
4016the core bindings got priority, preventing SRFI replacements or
4017extensions.)
4018** `regexp-exec' doesn't abort() on #\nul in the input or bad flags arg
df449722 4019** `kill' on mingw throws an error for a PID other than oneself
45c0ff10
KR
4020** Procedure names are attached to procedure-with-setters
4021** Array read syntax works with negative lower bound
4022** `array-in-bounds?' fix if an array has different lower bounds on each index
4023** `*' returns exact 0 for "(* inexact 0)"
4024This follows what it always did for "(* 0 inexact)".
c122500a 4025** SRFI-19: Value returned by `(current-time time-process)' was incorrect
0867f7ba 4026** SRFI-19: `date->julian-day' did not account for timezone offset
a1ef7406 4027** `ttyname' no longer crashes when passed a non-tty argument
27782696 4028** `inet-ntop' no longer crashes on SPARC when passed an `AF_INET' address
0867f7ba 4029** Small memory leaks have been fixed in `make-fluid' and `add-history'
b1f57ea4 4030** GOOPS: Fixed a bug in `method-more-specific?'
45c0ff10 4031** Build problems on Solaris fixed
df449722
LC
4032** Build problems on HP-UX IA64 fixed
4033** Build problems on MinGW fixed
45c0ff10
KR
4034
4035\f
a4f1c77d
KR
4036Changes in 1.8.1 (since 1.8.0):
4037
8ab3d8a0 4038* LFS functions are now used to access 64-bit files on 32-bit systems.
a4f1c77d 4039
8ab3d8a0 4040* New procedures (see the manual for details)
4f416616 4041
8ab3d8a0
KR
4042** primitive-_exit - [Scheme] the-root-module
4043** scm_primitive__exit - [C]
4044** make-completion-function - [Scheme] (ice-9 readline)
4045** scm_c_locale_stringn_to_number - [C]
4046** scm_srfi1_append_reverse [C]
4047** scm_srfi1_append_reverse_x [C]
4048** scm_log - [C]
4049** scm_log10 - [C]
4050** scm_exp - [C]
4051** scm_sqrt - [C]
4052
4053* Bugs fixed
4054
4055** Build problems have been fixed on MacOS, SunOS, and QNX.
af4f8612 4056
b3aa4626
KR
4057** `strftime' fix sign of %z timezone offset.
4058
534cd148 4059** A one-dimensional array can now be 'equal?' to a vector.
8ab3d8a0 4060
ad97642e 4061** Structures, records, and SRFI-9 records can now be compared with `equal?'.
af4f8612 4062
8ab3d8a0
KR
4063** SRFI-14 standard char sets are recomputed upon a successful `setlocale'.
4064
4065** `record-accessor' and `record-modifier' now have strict type checks.
4066
4067Record accessor and modifier procedures now throw an error if the
4068record type of the record they're given is not the type expected.
4069(Previously accessors returned #f and modifiers silently did nothing).
4070
4071** It is now OK to use both autoload and use-modules on a given module.
4072
4073** `apply' checks the number of arguments more carefully on "0 or 1" funcs.
4074
4075Previously there was no checking on primatives like make-vector that
4076accept "one or two" arguments. Now there is.
4077
4078** The srfi-1 assoc function now calls its equality predicate properly.
4079
4080Previously srfi-1 assoc would call the equality predicate with the key
4081last. According to the SRFI, the key should be first.
4082
4083** A bug in n-par-for-each and n-for-each-par-map has been fixed.
4084
4085** The array-set! procedure no longer segfaults when given a bit vector.
4086
4087** Bugs in make-shared-array have been fixed.
4088
4089** string<? and friends now follow char<? etc order on 8-bit chars.
4090
4091** The format procedure now handles inf and nan values for ~f correctly.
4092
4093** exact->inexact should no longer overflow when given certain large fractions.
4094
4095** srfi-9 accessor and modifier procedures now have strict record type checks.
a4f1c77d 4096
8ab3d8a0 4097This matches the srfi-9 specification.
a4f1c77d 4098
8ab3d8a0 4099** (ice-9 ftw) procedures won't ignore different files with same inode number.
a4f1c77d 4100
8ab3d8a0
KR
4101Previously the (ice-9 ftw) procedures would ignore any file that had
4102the same inode number as a file they had already seen, even if that
4103file was on a different device.
4f416616
KR
4104
4105\f
8ab3d8a0 4106Changes in 1.8.0 (changes since the 1.6.x series):
ee0c7345 4107
4e250ded
MV
4108* Changes to the distribution
4109
eff2965e
MV
4110** Guile is now licensed with the GNU Lesser General Public License.
4111
77e51fd6
MV
4112** The manual is now licensed with the GNU Free Documentation License.
4113
e2d0a649
RB
4114** Guile now requires GNU MP (http://swox.com/gmp).
4115
4116Guile now uses the GNU MP library for arbitrary precision arithmetic.
e2d0a649 4117
5ebbe4ef
RB
4118** Guile now has separate private and public configuration headers.
4119
b0d10ba6
MV
4120That is, things like HAVE_STRING_H no longer leak from Guile's
4121headers.
5ebbe4ef
RB
4122
4123** Guile now provides and uses an "effective" version number.
b2cbe8d8
RB
4124
4125Guile now provides scm_effective_version and effective-version
4126functions which return the "effective" version number. This is just
4127the normal full version string without the final micro-version number,
a4f1c77d 4128so the current effective-version is "1.8". The effective version
b2cbe8d8
RB
4129should remain unchanged during a stable series, and should be used for
4130items like the versioned share directory name
a4f1c77d 4131i.e. /usr/share/guile/1.8.
b2cbe8d8
RB
4132
4133Providing an unchanging version number during a stable release for
4134things like the versioned share directory can be particularly
4135important for Guile "add-on" packages, since it provides a directory
4136that they can install to that won't be changed out from under them
4137with each micro release during a stable series.
4138
8d54e73a 4139** Thread implementation has changed.
f0b4d944
MV
4140
4141When you configure "--with-threads=null", you will get the usual
4142threading API (call-with-new-thread, make-mutex, etc), but you can't
429d88d4
MV
4143actually create new threads. Also, "--with-threads=no" is now
4144equivalent to "--with-threads=null". This means that the thread API
4145is always present, although you might not be able to create new
4146threads.
f0b4d944 4147
8d54e73a
MV
4148When you configure "--with-threads=pthreads" or "--with-threads=yes",
4149you will get threads that are implemented with the portable POSIX
4150threads. These threads can run concurrently (unlike the previous
4151"coop" thread implementation), but need to cooperate for things like
a558cc63 4152the GC.
f0b4d944 4153
8d54e73a
MV
4154The default is "pthreads", unless your platform doesn't have pthreads,
4155in which case "null" threads are used.
2902a459 4156
a6d75e53
MV
4157See the manual for details, nodes "Initialization", "Multi-Threading",
4158"Blocking", and others.
a558cc63 4159
f74bdbd3
MV
4160** There is the new notion of 'discouraged' features.
4161
4162This is a milder form of deprecation.
4163
4164Things that are discouraged should not be used in new code, but it is
4165OK to leave them in old code for now. When a discouraged feature is
4166used, no warning message is printed like there is for 'deprecated'
4167features. Also, things that are merely discouraged are nevertheless
4168implemented efficiently, while deprecated features can be very slow.
4169
4170You can omit discouraged features from libguile by configuring it with
4171the '--disable-discouraged' option.
4172
4173** Deprecation warnings can be controlled at run-time.
4174
4175(debug-enable 'warn-deprecated) switches them on and (debug-disable
4176'warn-deprecated) switches them off.
4177
0f24e75b 4178** Support for SRFI 61, extended cond syntax for multiple values has
a81d0de1
MV
4179 been added.
4180
4181This SRFI is always available.
4182
f7fb2f39 4183** Support for require-extension, SRFI-55, has been added.
9a5fc8c2 4184
f7fb2f39
RB
4185The SRFI-55 special form `require-extension' has been added. It is
4186available at startup, and provides a portable way to load Scheme
4187extensions. SRFI-55 only requires support for one type of extension,
4188"srfi"; so a set of SRFIs may be loaded via (require-extension (srfi 1
418913 14)).
4190
4191** New module (srfi srfi-26) provides support for `cut' and `cute'.
4192
4193The (srfi srfi-26) module is an implementation of SRFI-26 which
4194provides the `cut' and `cute' syntax. These may be used to specialize
4195parameters without currying.
9a5fc8c2 4196
f5d54eb7
RB
4197** New module (srfi srfi-31)
4198
4199This is an implementation of SRFI-31 which provides a special form
4200`rec' for recursive evaluation.
4201
7b1574ed
MV
4202** The modules (srfi srfi-13), (srfi srfi-14) and (srfi srfi-4) have
4203 been merged with the core, making their functionality always
4204 available.
c5080b51 4205
ce7c0293
MV
4206The modules are still available, tho, and you could use them together
4207with a renaming import, for example.
c5080b51 4208
6191ccec 4209** Guile no longer includes its own version of libltdl.
4e250ded 4210
6191ccec 4211The official version is good enough now.
4e250ded 4212
ae7ded56
MV
4213** The --enable-htmldoc option has been removed from 'configure'.
4214
4215Support for translating the documentation into HTML is now always
4216provided. Use 'make html'.
4217
0f24e75b
MV
4218** New module (ice-9 serialize):
4219
4220(serialize FORM1 ...) and (parallelize FORM1 ...) are useful when you
4221don't trust the thread safety of most of your program, but where you
4222have some section(s) of code which you consider can run in parallel to
4223other sections. See ice-9/serialize.scm for more information.
4224
c34e5780
MV
4225** The configure option '--disable-arrays' has been removed.
4226
4227Support for arrays and uniform numeric arrays is now always included
4228in Guile.
4229
328dc9a3 4230* Changes to the stand-alone interpreter
f12ef3fd 4231
3ece39d6
MV
4232** New command line option `-L'.
4233
4234This option adds a directory to the front of the load path.
4235
f12ef3fd
MV
4236** New command line option `--no-debug'.
4237
4238Specifying `--no-debug' on the command line will keep the debugging
4239evaluator turned off, even for interactive sessions.
4240
4241** User-init file ~/.guile is now loaded with the debugging evaluator.
4242
4243Previously, the normal evaluator would have been used. Using the
4244debugging evaluator gives better error messages.
4245
aff7e166
MV
4246** The '-e' option now 'read's its argument.
4247
4248This is to allow the new '(@ MODULE-NAME VARIABLE-NAME)' construct to
4249be used with '-e'. For example, you can now write a script like
4250
4251 #! /bin/sh
4252 exec guile -e '(@ (demo) main)' -s "$0" "$@"
4253 !#
4254
4255 (define-module (demo)
4256 :export (main))
4257
4258 (define (main args)
4259 (format #t "Demo: ~a~%" args))
4260
4261
f12ef3fd
MV
4262* Changes to Scheme functions and syntax
4263
930888e8
MV
4264** Guardians have changed back to their original semantics
4265
4266Guardians now behave like described in the paper by Dybvig et al. In
4267particular, they no longer make guarantees about the order in which
4268they return objects, and they can no longer be greedy.
4269
4270They no longer drop cyclic data structures.
4271
4272The C function scm_make_guardian has been changed incompatibly and no
4273longer takes the 'greedy_p' argument.
4274
87bdbdbc
MV
4275** New function hashx-remove!
4276
4277This function completes the set of 'hashx' functions.
4278
a558cc63
MV
4279** The concept of dynamic roots has been factored into continuation
4280 barriers and dynamic states.
4281
4282Each thread has a current dynamic state that carries the values of the
4283fluids. You can create and copy dynamic states and use them as the
4284second argument for 'eval'. See "Fluids and Dynamic States" in the
4285manual.
4286
4287To restrict the influence that captured continuations can have on the
4288control flow, you can errect continuation barriers. See "Continuation
4289Barriers" in the manual.
4290
4291The function call-with-dynamic-root now essentially temporarily
4292installs a new dynamic state and errects a continuation barrier.
4293
a2b6a0e7
MV
4294** The default load path no longer includes "." at the end.
4295
4296Automatically loading modules from the current directory should not
4297happen by default. If you want to allow it in a more controlled
4298manner, set the environment variable GUILE_LOAD_PATH or the Scheme
4299variable %load-path.
4300
7b1574ed
MV
4301** The uniform vector and array support has been overhauled.
4302
4303It now complies with SRFI-4 and the weird prototype based uniform
4304array creation has been deprecated. See the manual for more details.
4305
d233b123
MV
4306Some non-compatible changes have been made:
4307 - characters can no longer be stored into byte arrays.
0f24e75b
MV
4308 - strings and bit vectors are no longer considered to be uniform numeric
4309 vectors.
3167d5e4
MV
4310 - array-rank throws an error for non-arrays instead of returning zero.
4311 - array-ref does no longer accept non-arrays when no indices are given.
d233b123
MV
4312
4313There is the new notion of 'generalized vectors' and corresponding
4314procedures like 'generalized-vector-ref'. Generalized vectors include
c34e5780 4315strings, bitvectors, ordinary vectors, and uniform numeric vectors.
d233b123 4316
a558cc63
MV
4317Arrays use generalized vectors as their storage, so that you still
4318have arrays of characters, bits, etc. However, uniform-array-read!
4319and uniform-array-write can no longer read/write strings and
4320bitvectors.
bb9f50ae 4321
ce7c0293
MV
4322** There is now support for copy-on-write substrings, mutation-sharing
4323 substrings and read-only strings.
3ff9283d 4324
ce7c0293
MV
4325Three new procedures are related to this: substring/shared,
4326substring/copy, and substring/read-only. See the manual for more
4327information.
4328
6a1d27ea
MV
4329** Backtraces will now highlight the value that caused the error.
4330
4331By default, these values are enclosed in "{...}", such as in this
4332example:
4333
4334 guile> (car 'a)
4335
4336 Backtrace:
4337 In current input:
4338 1: 0* [car {a}]
4339
4340 <unnamed port>:1:1: In procedure car in expression (car (quote a)):
4341 <unnamed port>:1:1: Wrong type (expecting pair): a
4342 ABORT: (wrong-type-arg)
4343
4344The prefix and suffix used for highlighting can be set via the two new
4345printer options 'highlight-prefix' and 'highlight-suffix'. For
4346example, putting this into ~/.guile will output the bad value in bold
4347on an ANSI terminal:
4348
4349 (print-set! highlight-prefix "\x1b[1m")
4350 (print-set! highlight-suffix "\x1b[22m")
4351
4352
8dbafacd
MV
4353** 'gettext' support for internationalization has been added.
4354
4355See the manual for details.
4356
aff7e166
MV
4357** New syntax '@' and '@@':
4358
4359You can now directly refer to variables exported from a module by
4360writing
4361
4362 (@ MODULE-NAME VARIABLE-NAME)
4363
4364For example (@ (ice-9 pretty-print) pretty-print) will directly access
4365the pretty-print variable exported from the (ice-9 pretty-print)
4366module. You don't need to 'use' that module first. You can also use
b0d10ba6 4367'@' as a target of 'set!', as in (set! (@ mod var) val).
aff7e166
MV
4368
4369The related syntax (@@ MODULE-NAME VARIABLE-NAME) works just like '@',
4370but it can also access variables that have not been exported. It is
4371intended only for kluges and temporary fixes and for debugging, not
4372for ordinary code.
4373
aef0bdb4
MV
4374** Keyword syntax has been made more disciplined.
4375
4376Previously, the name of a keyword was read as a 'token' but printed as
4377a symbol. Now, it is read as a general Scheme datum which must be a
4378symbol.
4379
4380Previously:
4381
4382 guile> #:12
4383 #:#{12}#
4384 guile> #:#{12}#
4385 #:#{\#{12}\#}#
4386 guile> #:(a b c)
4387 #:#{}#
4388 ERROR: In expression (a b c):
4389 Unbound variable: a
4390 guile> #: foo
4391 #:#{}#
4392 ERROR: Unbound variable: foo
4393
4394Now:
4395
4396 guile> #:12
4397 ERROR: Wrong type (expecting symbol): 12
4398 guile> #:#{12}#
4399 #:#{12}#
4400 guile> #:(a b c)
4401 ERROR: Wrong type (expecting symbol): (a b c)
4402 guile> #: foo
4403 #:foo
4404
227eafdb
MV
4405** The printing of symbols that might look like keywords can be
4406 controlled.
4407
4408The new printer option 'quote-keywordish-symbols' controls how symbols
4409are printed that have a colon as their first or last character. The
4410default now is to only quote a symbol with #{...}# when the read
4411option 'keywords' is not '#f'. Thus:
4412
4413 guile> (define foo (string->symbol ":foo"))
4414 guile> (read-set! keywords #f)
4415 guile> foo
4416 :foo
4417 guile> (read-set! keywords 'prefix)
4418 guile> foo
4419 #{:foo}#
4420 guile> (print-set! quote-keywordish-symbols #f)
4421 guile> foo
4422 :foo
4423
1363e3e7
KR
4424** 'while' now provides 'break' and 'continue'
4425
4426break and continue were previously bound in a while loop, but not
4427documented, and continue didn't quite work properly. The undocumented
4428parameter to break which gave a return value for the while has been
4429dropped.
4430
570b5b14
MV
4431** 'call-with-current-continuation' is now also available under the name
4432 'call/cc'.
4433
b0d10ba6 4434** The module system now checks for duplicate bindings.
7b07e5ef 4435
fe6ee052
MD
4436The module system now can check for name conflicts among imported
4437bindings.
f595ccfe 4438
b0d10ba6 4439The behavior can be controlled by specifying one or more 'duplicates'
fe6ee052
MD
4440handlers. For example, to make Guile return an error for every name
4441collision, write:
7b07e5ef
MD
4442
4443(define-module (foo)
4444 :use-module (bar)
4445 :use-module (baz)
fe6ee052 4446 :duplicates check)
f595ccfe 4447
fe6ee052
MD
4448The new default behavior of the module system when a name collision
4449has been detected is to
4450
4451 1. Give priority to bindings marked as a replacement.
6496a663 4452 2. Issue a warning (different warning if overriding core binding).
fe6ee052
MD
4453 3. Give priority to the last encountered binding (this corresponds to
4454 the old behavior).
4455
4456If you want the old behavior back without replacements or warnings you
4457can add the line:
f595ccfe 4458
70a9dc9c 4459 (default-duplicate-binding-handler 'last)
7b07e5ef 4460
fe6ee052 4461to your .guile init file.
7b07e5ef 4462
f595ccfe
MD
4463** New define-module option: :replace
4464
4465:replace works as :export, but, in addition, marks the binding as a
4466replacement.
4467
4468A typical example is `format' in (ice-9 format) which is a replacement
4469for the core binding `format'.
7b07e5ef 4470
70da0033
MD
4471** Adding prefixes to imported bindings in the module system
4472
4473There is now a new :use-module option :prefix. It can be used to add
4474a prefix to all imported bindings.
4475
4476 (define-module (foo)
4477 :use-module ((bar) :prefix bar:))
4478
4479will import all bindings exported from bar, but rename them by adding
4480the prefix `bar:'.
4481
b0d10ba6
MV
4482** Conflicting generic functions can be automatically merged.
4483
4484When two imported bindings conflict and they are both generic
4485functions, the two functions can now be merged automatically. This is
4486activated with the 'duplicates' handler 'merge-generics'.
4487
b2cbe8d8
RB
4488** New function: effective-version
4489
4490Returns the "effective" version number. This is just the normal full
4491version string without the final micro-version number. See "Changes
4492to the distribution" above.
4493
382053e9 4494** New threading functions: parallel, letpar, par-map, and friends
dbe30084 4495
382053e9
KR
4496These are convenient ways to run calculations in parallel in new
4497threads. See "Parallel forms" in the manual for details.
359aab24 4498
e2d820a1
MV
4499** New function 'try-mutex'.
4500
4501This function will attempt to lock a mutex but will return immediately
0f24e75b 4502instead of blocking and indicate failure.
e2d820a1
MV
4503
4504** Waiting on a condition variable can have a timeout.
4505
0f24e75b 4506The function 'wait-condition-variable' now takes a third, optional
e2d820a1
MV
4507argument that specifies the point in time where the waiting should be
4508aborted.
4509
4510** New function 'broadcast-condition-variable'.
4511
5e405a60
MV
4512** New functions 'all-threads' and 'current-thread'.
4513
4514** Signals and system asyncs work better with threads.
4515
4516The function 'sigaction' now takes a fourth, optional, argument that
4517specifies the thread that the handler should run in. When the
4518argument is omitted, the handler will run in the thread that called
4519'sigaction'.
4520
4521Likewise, 'system-async-mark' takes a second, optional, argument that
4522specifies the thread that the async should run in. When it is
4523omitted, the async will run in the thread that called
4524'system-async-mark'.
4525
4526C code can use the new functions scm_sigaction_for_thread and
4527scm_system_async_mark_for_thread to pass the new thread argument.
4528
a558cc63
MV
4529When a thread blocks on a mutex, a condition variable or is waiting
4530for IO to be possible, it will still execute system asyncs. This can
4531be used to interrupt such a thread by making it execute a 'throw', for
4532example.
4533
5e405a60
MV
4534** The function 'system-async' is deprecated.
4535
4536You can now pass any zero-argument procedure to 'system-async-mark'.
4537The function 'system-async' will just return its argument unchanged
4538now.
4539
acfa1f52
MV
4540** New functions 'call-with-blocked-asyncs' and
4541 'call-with-unblocked-asyncs'
4542
4543The expression (call-with-blocked-asyncs PROC) will call PROC and will
4544block execution of system asyncs for the current thread by one level
4545while PROC runs. Likewise, call-with-unblocked-asyncs will call a
4546procedure and will unblock the execution of system asyncs by one
4547level for the current thread.
4548
4549Only system asyncs are affected by these functions.
4550
4551** The functions 'mask-signals' and 'unmask-signals' are deprecated.
4552
4553Use 'call-with-blocked-asyncs' or 'call-with-unblocked-asyncs'
4554instead. Those functions are easier to use correctly and can be
4555nested.
4556
7b232758
MV
4557** New function 'unsetenv'.
4558
f30482f3
MV
4559** New macro 'define-syntax-public'.
4560
4561It works like 'define-syntax' and also exports the defined macro (but
4562only on top-level).
4563
1ee34062
MV
4564** There is support for Infinity and NaNs.
4565
4566Following PLT Scheme, Guile can now work with infinite numbers, and
4567'not-a-numbers'.
4568
4569There is new syntax for numbers: "+inf.0" (infinity), "-inf.0"
4570(negative infinity), "+nan.0" (not-a-number), and "-nan.0" (same as
4571"+nan.0"). These numbers are inexact and have no exact counterpart.
4572
4573Dividing by an inexact zero returns +inf.0 or -inf.0, depending on the
4574sign of the dividend. The infinities are integers, and they answer #t
4575for both 'even?' and 'odd?'. The +nan.0 value is not an integer and is
4576not '=' to itself, but '+nan.0' is 'eqv?' to itself.
4577
4578For example
4579
4580 (/ 1 0.0)
4581 => +inf.0
4582
4583 (/ 0 0.0)
4584 => +nan.0
4585
4586 (/ 0)
4587 ERROR: Numerical overflow
4588
7b232758
MV
4589Two new predicates 'inf?' and 'nan?' can be used to test for the
4590special values.
4591
ba1b077b
MV
4592** Inexact zero can have a sign.
4593
4594Guile can now distinguish between plus and minus inexact zero, if your
4595platform supports this, too. The two zeros are equal according to
4596'=', but not according to 'eqv?'. For example
4597
4598 (- 0.0)
4599 => -0.0
4600
4601 (= 0.0 (- 0.0))
4602 => #t
4603
4604 (eqv? 0.0 (- 0.0))
4605 => #f
4606
bdf26b60
MV
4607** Guile now has exact rationals.
4608
4609Guile can now represent fractions such as 1/3 exactly. Computing with
4610them is also done exactly, of course:
4611
4612 (* 1/3 3/2)
4613 => 1/2
4614
4615** 'floor', 'ceiling', 'round' and 'truncate' now return exact numbers
4616 for exact arguments.
4617
4618For example: (floor 2) now returns an exact 2 where in the past it
4619returned an inexact 2.0. Likewise, (floor 5/4) returns an exact 1.
4620
4621** inexact->exact no longer returns only integers.
4622
4623Without exact rationals, the closest exact number was always an
4624integer, but now inexact->exact returns the fraction that is exactly
4625equal to a floating point number. For example:
4626
4627 (inexact->exact 1.234)
4628 => 694680242521899/562949953421312
4629
e299cee2 4630When you want the old behavior, use 'round' explicitly:
bdf26b60
MV
4631
4632 (inexact->exact (round 1.234))
4633 => 1
4634
4635** New function 'rationalize'.
4636
4637This function finds a simple fraction that is close to a given real
4638number. For example (and compare with inexact->exact above):
4639
fb16d26e 4640 (rationalize (inexact->exact 1.234) 1/2000)
bdf26b60
MV
4641 => 58/47
4642
fb16d26e
MV
4643Note that, as required by R5RS, rationalize returns only then an exact
4644result when both its arguments are exact.
4645
bdf26b60
MV
4646** 'odd?' and 'even?' work also for inexact integers.
4647
4648Previously, (odd? 1.0) would signal an error since only exact integers
4649were recognized as integers. Now (odd? 1.0) returns #t, (odd? 2.0)
4650returns #f and (odd? 1.5) signals an error.
4651
b0d10ba6 4652** Guile now has uninterned symbols.
610922b2 4653
b0d10ba6 4654The new function 'make-symbol' will return an uninterned symbol. This
610922b2
MV
4655is a symbol that is unique and is guaranteed to remain unique.
4656However, uninterned symbols can not yet be read back in.
4657
4658Use the new function 'symbol-interned?' to check whether a symbol is
4659interned or not.
4660
0e6f7775
MV
4661** pretty-print has more options.
4662
4663The function pretty-print from the (ice-9 pretty-print) module can now
4664also be invoked with keyword arguments that control things like
71f271b2 4665maximum output width. See the manual for details.
0e6f7775 4666
8c84b81e 4667** Variables have no longer a special behavior for `equal?'.
ee0c7345
MV
4668
4669Previously, comparing two variables with `equal?' would recursivly
4670compare their values. This is no longer done. Variables are now only
4671`equal?' if they are `eq?'.
4672
4e21fa60
MV
4673** `(begin)' is now valid.
4674
4675You can now use an empty `begin' form. It will yield #<unspecified>
4676when evaluated and simply be ignored in a definition context.
4677
3063e30a
DH
4678** Deprecated: procedure->macro
4679
b0d10ba6
MV
4680Change your code to use 'define-macro' or r5rs macros. Also, be aware
4681that macro expansion will not be done during evaluation, but prior to
4682evaluation.
3063e30a 4683
0a50eeaa
NJ
4684** Soft ports now allow a `char-ready?' procedure
4685
4686The vector argument to `make-soft-port' can now have a length of
4687either 5 or 6. (Previously the length had to be 5.) The optional 6th
4688element is interpreted as an `input-waiting' thunk -- i.e. a thunk
4689that returns the number of characters that can be read immediately
4690without the soft port blocking.
4691
63dd3413
DH
4692** Deprecated: undefine
4693
4694There is no replacement for undefine.
4695
9abd541e
NJ
4696** The functions make-keyword-from-dash-symbol and keyword-dash-symbol
4697 have been discouraged.
aef0bdb4
MV
4698
4699They are relics from a time where a keyword like #:foo was used
4700directly as a Tcl option "-foo" and thus keywords were internally
4701stored as a symbol with a starting dash. We now store a symbol
4702without the dash.
4703
4704Use symbol->keyword and keyword->symbol instead.
4705
9abd541e
NJ
4706** The `cheap' debug option is now obsolete
4707
4708Evaluator trap calls are now unconditionally "cheap" - in other words,
4709they pass a debug object to the trap handler rather than a full
4710continuation. The trap handler code can capture a full continuation
4711by using `call-with-current-continuation' in the usual way, if it so
4712desires.
4713
4714The `cheap' option is retained for now so as not to break existing
4715code which gets or sets it, but setting it now has no effect. It will
4716be removed in the next major Guile release.
4717
4718** Evaluator trap calls now support `tweaking'
4719
4720`Tweaking' means that the trap handler code can modify the Scheme
4721expression that is about to be evaluated (in the case of an
4722enter-frame trap) or the value that is being returned (in the case of
4723an exit-frame trap). The trap handler code indicates that it wants to
4724do this by returning a pair whose car is the symbol 'instead and whose
4725cdr is the modified expression or return value.
36a9b236 4726
b00418df
DH
4727* Changes to the C interface
4728
87bdbdbc
MV
4729** The functions scm_hash_fn_remove_x and scm_hashx_remove_x no longer
4730 take a 'delete' function argument.
4731
4732This argument makes no sense since the delete function is used to
4733remove a pair from an alist, and this must not be configurable.
4734
4735This is an incompatible change.
4736
1cf1bb95
MV
4737** The GH interface is now subject to the deprecation mechanism
4738
4739The GH interface has been deprecated for quite some time but now it is
4740actually removed from Guile when it is configured with
4741--disable-deprecated.
4742
4743See the manual "Transitioning away from GH" for more information.
4744
f7f3964e
MV
4745** A new family of functions for converting between C values and
4746 Scheme values has been added.
4747
4748These functions follow a common naming scheme and are designed to be
4749easier to use, thread-safe and more future-proof than the older
4750alternatives.
4751
4752 - int scm_is_* (...)
4753
4754 These are predicates that return a C boolean: 1 or 0. Instead of
4755 SCM_NFALSEP, you can now use scm_is_true, for example.
4756
4757 - <type> scm_to_<type> (SCM val, ...)
4758
4759 These are functions that convert a Scheme value into an appropriate
4760 C value. For example, you can use scm_to_int to safely convert from
4761 a SCM to an int.
4762
a2b6a0e7 4763 - SCM scm_from_<type> (<type> val, ...)
f7f3964e
MV
4764
4765 These functions convert from a C type to a SCM value; for example,
4766 scm_from_int for ints.
4767
4768There is a huge number of these functions, for numbers, strings,
4769symbols, vectors, etc. They are documented in the reference manual in
4770the API section together with the types that they apply to.
4771
96d8c217
MV
4772** New functions for dealing with complex numbers in C have been added.
4773
4774The new functions are scm_c_make_rectangular, scm_c_make_polar,
4775scm_c_real_part, scm_c_imag_part, scm_c_magnitude and scm_c_angle.
4776They work like scm_make_rectangular etc but take or return doubles
4777directly.
4778
4779** The function scm_make_complex has been discouraged.
4780
4781Use scm_c_make_rectangular instead.
4782
f7f3964e
MV
4783** The INUM macros have been deprecated.
4784
4785A lot of code uses these macros to do general integer conversions,
b0d10ba6
MV
4786although the macros only work correctly with fixnums. Use the
4787following alternatives.
f7f3964e
MV
4788
4789 SCM_INUMP -> scm_is_integer or similar
4790 SCM_NINUMP -> !scm_is_integer or similar
4791 SCM_MAKINUM -> scm_from_int or similar
4792 SCM_INUM -> scm_to_int or similar
4793
b0d10ba6 4794 SCM_VALIDATE_INUM_* -> Do not use these; scm_to_int, etc. will
f7f3964e
MV
4795 do the validating for you.
4796
f9656a9f
MV
4797** The scm_num2<type> and scm_<type>2num functions and scm_make_real
4798 have been discouraged.
f7f3964e
MV
4799
4800Use the newer scm_to_<type> and scm_from_<type> functions instead for
4801new code. The functions have been discouraged since they don't fit
4802the naming scheme.
4803
4804** The 'boolean' macros SCM_FALSEP etc have been discouraged.
4805
4806They have strange names, especially SCM_NFALSEP, and SCM_BOOLP
4807evaluates its argument twice. Use scm_is_true, etc. instead for new
4808code.
4809
4810** The macro SCM_EQ_P has been discouraged.
4811
4812Use scm_is_eq for new code, which fits better into the naming
4813conventions.
d5b203a6 4814
d5ac9b2a
MV
4815** The macros SCM_CONSP, SCM_NCONSP, SCM_NULLP, and SCM_NNULLP have
4816 been discouraged.
4817
4818Use the function scm_is_pair or scm_is_null instead.
4819
409eb4e5
MV
4820** The functions scm_round and scm_truncate have been deprecated and
4821 are now available as scm_c_round and scm_c_truncate, respectively.
4822
4823These functions occupy the names that scm_round_number and
4824scm_truncate_number should have.
4825
3ff9283d
MV
4826** The functions scm_c_string2str, scm_c_substring2str, and
4827 scm_c_symbol2str have been deprecated.
c41acab3
MV
4828
4829Use scm_to_locale_stringbuf or similar instead, maybe together with
4830scm_substring.
4831
3ff9283d
MV
4832** New functions scm_c_make_string, scm_c_string_length,
4833 scm_c_string_ref, scm_c_string_set_x, scm_c_substring,
4834 scm_c_substring_shared, scm_c_substring_copy.
4835
4836These are like scm_make_string, scm_length, etc. but are slightly
4837easier to use from C.
4838
4839** The macros SCM_STRINGP, SCM_STRING_CHARS, SCM_STRING_LENGTH,
4840 SCM_SYMBOL_CHARS, and SCM_SYMBOL_LENGTH have been deprecated.
4841
4842They export too many assumptions about the implementation of strings
4843and symbols that are no longer true in the presence of
b0d10ba6
MV
4844mutation-sharing substrings and when Guile switches to some form of
4845Unicode.
3ff9283d
MV
4846
4847When working with strings, it is often best to use the normal string
4848functions provided by Guile, such as scm_c_string_ref,
b0d10ba6
MV
4849scm_c_string_set_x, scm_string_append, etc. Be sure to look in the
4850manual since many more such functions are now provided than
4851previously.
3ff9283d
MV
4852
4853When you want to convert a SCM string to a C string, use the
4854scm_to_locale_string function or similar instead. For symbols, use
4855scm_symbol_to_string and then work with that string. Because of the
4856new string representation, scm_symbol_to_string does not need to copy
4857and is thus quite efficient.
4858
aef0bdb4 4859** Some string, symbol and keyword functions have been discouraged.
3ff9283d 4860
b0d10ba6 4861They don't fit into the uniform naming scheme and are not explicit
3ff9283d
MV
4862about the character encoding.
4863
4864Replace according to the following table:
4865
4866 scm_allocate_string -> scm_c_make_string
4867 scm_take_str -> scm_take_locale_stringn
4868 scm_take0str -> scm_take_locale_string
4869 scm_mem2string -> scm_from_locale_stringn
4870 scm_str2string -> scm_from_locale_string
4871 scm_makfrom0str -> scm_from_locale_string
4872 scm_mem2symbol -> scm_from_locale_symboln
b0d10ba6 4873 scm_mem2uninterned_symbol -> scm_from_locale_stringn + scm_make_symbol
3ff9283d
MV
4874 scm_str2symbol -> scm_from_locale_symbol
4875
4876 SCM_SYMBOL_HASH -> scm_hashq
4877 SCM_SYMBOL_INTERNED_P -> scm_symbol_interned_p
4878
aef0bdb4
MV
4879 scm_c_make_keyword -> scm_from_locale_keyword
4880
4881** The functions scm_keyword_to_symbol and sym_symbol_to_keyword are
4882 now also available to C code.
4883
4884** SCM_KEYWORDP and SCM_KEYWORDSYM have been deprecated.
4885
4886Use scm_is_keyword and scm_keyword_to_symbol instead, but note that
4887the latter returns the true name of the keyword, not the 'dash name',
4888as SCM_KEYWORDSYM used to do.
4889
dc91d8de
MV
4890** A new way to access arrays in a thread-safe and efficient way has
4891 been added.
4892
4893See the manual, node "Accessing Arrays From C".
4894
3167d5e4
MV
4895** The old uniform vector and bitvector implementations have been
4896 unceremoniously removed.
d4ea47c8 4897
a558cc63 4898This implementation exposed the details of the tagging system of
d4ea47c8 4899Guile. Use the new C API explained in the manual in node "Uniform
c34e5780 4900Numeric Vectors" and "Bit Vectors", respectively.
d4ea47c8
MV
4901
4902The following macros are gone: SCM_UVECTOR_BASE, SCM_SET_UVECTOR_BASE,
4903SCM_UVECTOR_MAXLENGTH, SCM_UVECTOR_LENGTH, SCM_MAKE_UVECTOR_TAG,
3167d5e4
MV
4904SCM_SET_UVECTOR_LENGTH, SCM_BITVECTOR_P, SCM_BITVECTOR_BASE,
4905SCM_SET_BITVECTOR_BASE, SCM_BITVECTOR_MAX_LENGTH,
4906SCM_BITVECTOR_LENGTH, SCM_MAKE_BITVECTOR_TAG,
0b63c1ee
MV
4907SCM_SET_BITVECTOR_LENGTH, SCM_BITVEC_REF, SCM_BITVEC_SET,
4908SCM_BITVEC_CLR.
d4ea47c8 4909
c34e5780
MV
4910** The macros dealing with vectors have been deprecated.
4911
4912Use the new functions scm_is_vector, scm_vector_elements,
0b63c1ee
MV
4913scm_vector_writable_elements, etc, or scm_is_simple_vector,
4914SCM_SIMPLE_VECTOR_REF, SCM_SIMPLE_VECTOR_SET, etc instead. See the
4915manual for more details.
c34e5780
MV
4916
4917Deprecated are SCM_VECTORP, SCM_VELTS, SCM_VECTOR_MAX_LENGTH,
4918SCM_VECTOR_LENGTH, SCM_VECTOR_REF, SCM_VECTOR_SET, SCM_WRITABLE_VELTS.
4919
4920The following macros have been removed: SCM_VECTOR_BASE,
4921SCM_SET_VECTOR_BASE, SCM_MAKE_VECTOR_TAG, SCM_SET_VECTOR_LENGTH,
4922SCM_VELTS_AS_STACKITEMS, SCM_SETVELTS, SCM_GC_WRITABLE_VELTS.
4923
0c7a5cab 4924** Some C functions and macros related to arrays have been deprecated.
dc91d8de
MV
4925
4926Migrate according to the following table:
4927
e94d0be2 4928 scm_make_uve -> scm_make_typed_array, scm_make_u8vector etc.
dc91d8de
MV
4929 scm_make_ra -> scm_make_array
4930 scm_shap2ra -> scm_make_array
4931 scm_cvref -> scm_c_generalized_vector_ref
4932 scm_ra_set_contp -> do not use
4933 scm_aind -> scm_array_handle_pos
4934 scm_raprin1 -> scm_display or scm_write
4935
0c7a5cab
MV
4936 SCM_ARRAYP -> scm_is_array
4937 SCM_ARRAY_NDIM -> scm_c_array_rank
4938 SCM_ARRAY_DIMS -> scm_array_handle_dims
4939 SCM_ARRAY_CONTP -> do not use
4940 SCM_ARRAY_MEM -> do not use
4941 SCM_ARRAY_V -> scm_array_handle_elements or similar
4942 SCM_ARRAY_BASE -> do not use
4943
c1e7caf7
MV
4944** SCM_CELL_WORD_LOC has been deprecated.
4945
b0d10ba6 4946Use the new macro SCM_CELL_OBJECT_LOC instead, which returns a pointer
c1e7caf7
MV
4947to a SCM, as opposed to a pointer to a scm_t_bits.
4948
4949This was done to allow the correct use of pointers into the Scheme
4950heap. Previously, the heap words were of type scm_t_bits and local
4951variables and function arguments were of type SCM, making it
4952non-standards-conformant to have a pointer that can point to both.
4953
3ff9283d 4954** New macros SCM_SMOB_DATA_2, SCM_SMOB_DATA_3, etc.
27968825
MV
4955
4956These macros should be used instead of SCM_CELL_WORD_2/3 to access the
4957second and third words of double smobs. Likewise for
4958SCM_SET_SMOB_DATA_2 and SCM_SET_SMOB_DATA_3.
4959
4960Also, there is SCM_SMOB_FLAGS and SCM_SET_SMOB_FLAGS that should be
4961used to get and set the 16 exra bits in the zeroth word of a smob.
4962
4963And finally, there is SCM_SMOB_OBJECT and SCM_SMOB_SET_OBJECT for
4964accesing the first immediate word of a smob as a SCM value, and there
4965is SCM_SMOB_OBJECT_LOC for getting a pointer to the first immediate
b0d10ba6 4966smob word. Like wise for SCM_SMOB_OBJECT_2, etc.
27968825 4967
b0d10ba6 4968** New way to deal with non-local exits and re-entries.
9879d390
MV
4969
4970There is a new set of functions that essentially do what
fc6bb283
MV
4971scm_internal_dynamic_wind does, but in a way that is more convenient
4972for C code in some situations. Here is a quick example of how to
4973prevent a potential memory leak:
9879d390
MV
4974
4975 void
4976 foo ()
4977 {
4978 char *mem;
4979
661ae7ab 4980 scm_dynwind_begin (0);
9879d390
MV
4981
4982 mem = scm_malloc (100);
661ae7ab 4983 scm_dynwind_unwind_handler (free, mem, SCM_F_WIND_EXPLICITLY);
f1da8e4e
MV
4984
4985 /* MEM would leak if BAR throws an error.
661ae7ab 4986 SCM_DYNWIND_UNWIND_HANDLER frees it nevertheless.
c41acab3 4987 */
9879d390 4988
9879d390
MV
4989 bar ();
4990
661ae7ab 4991 scm_dynwind_end ();
9879d390 4992
e299cee2 4993 /* Because of SCM_F_WIND_EXPLICITLY, MEM will be freed by
661ae7ab 4994 SCM_DYNWIND_END as well.
9879d390
MV
4995 */
4996 }
4997
661ae7ab 4998For full documentation, see the node "Dynamic Wind" in the manual.
9879d390 4999
661ae7ab 5000** New function scm_dynwind_free
c41acab3 5001
661ae7ab
MV
5002This function calls 'free' on a given pointer when a dynwind context
5003is left. Thus the call to scm_dynwind_unwind_handler above could be
5004replaced with simply scm_dynwind_free (mem).
c41acab3 5005
a6d75e53
MV
5006** New functions scm_c_call_with_blocked_asyncs and
5007 scm_c_call_with_unblocked_asyncs
5008
5009Like scm_call_with_blocked_asyncs etc. but for C functions.
5010
661ae7ab 5011** New functions scm_dynwind_block_asyncs and scm_dynwind_unblock_asyncs
49c00ecc
MV
5012
5013In addition to scm_c_call_with_blocked_asyncs you can now also use
661ae7ab
MV
5014scm_dynwind_block_asyncs in a 'dynwind context' (see above). Likewise for
5015scm_c_call_with_unblocked_asyncs and scm_dynwind_unblock_asyncs.
49c00ecc 5016
a558cc63
MV
5017** The macros SCM_DEFER_INTS, SCM_ALLOW_INTS, SCM_REDEFER_INTS,
5018 SCM_REALLOW_INTS have been deprecated.
5019
5020They do no longer fulfill their original role of blocking signal
5021delivery. Depending on what you want to achieve, replace a pair of
661ae7ab
MV
5022SCM_DEFER_INTS and SCM_ALLOW_INTS with a dynwind context that locks a
5023mutex, blocks asyncs, or both. See node "Critical Sections" in the
5024manual.
a6d75e53
MV
5025
5026** The value 'scm_mask_ints' is no longer writable.
5027
5028Previously, you could set scm_mask_ints directly. This is no longer
5029possible. Use scm_c_call_with_blocked_asyncs and
5030scm_c_call_with_unblocked_asyncs instead.
a558cc63 5031
49c00ecc
MV
5032** New way to temporarily set the current input, output or error ports
5033
661ae7ab 5034C code can now use scm_dynwind_current_<foo>_port in a 'dynwind
0f24e75b 5035context' (see above). <foo> is one of "input", "output" or "error".
49c00ecc 5036
fc6bb283
MV
5037** New way to temporarily set fluids
5038
661ae7ab 5039C code can now use scm_dynwind_fluid in a 'dynwind context' (see
fc6bb283
MV
5040above) to temporarily set the value of a fluid.
5041
89fcf1b4
MV
5042** New types scm_t_intmax and scm_t_uintmax.
5043
5044On platforms that have them, these types are identical to intmax_t and
5045uintmax_t, respectively. On other platforms, they are identical to
5046the largest integer types that Guile knows about.
5047
b0d10ba6 5048** The functions scm_unmemocopy and scm_unmemoize have been removed.
9fcf3cbb 5049
b0d10ba6 5050You should not have used them.
9fcf3cbb 5051
5ebbe4ef
RB
5052** Many public #defines with generic names have been made private.
5053
5054#defines with generic names like HAVE_FOO or SIZEOF_FOO have been made
b0d10ba6 5055private or renamed with a more suitable public name.
f03314f9
DH
5056
5057** The macro SCM_TYP16S has been deprecated.
5058
b0d10ba6 5059This macro is not intended for public use.
f03314f9 5060
0d5e3480
DH
5061** The macro SCM_SLOPPY_INEXACTP has been deprecated.
5062
b0d10ba6 5063Use scm_is_true (scm_inexact_p (...)) instead.
0d5e3480
DH
5064
5065** The macro SCM_SLOPPY_REALP has been deprecated.
5066
b0d10ba6 5067Use scm_is_real instead.
0d5e3480
DH
5068
5069** The macro SCM_SLOPPY_COMPLEXP has been deprecated.
5070
b0d10ba6 5071Use scm_is_complex instead.
5ebbe4ef 5072
b0d10ba6 5073** Some preprocessor defines have been deprecated.
5ebbe4ef 5074
b0d10ba6
MV
5075These defines indicated whether a certain feature was present in Guile
5076or not. Going forward, assume that the features are always present.
5ebbe4ef 5077
b0d10ba6
MV
5078The macros are: USE_THREADS, GUILE_ISELECT, READER_EXTENSIONS,
5079DEBUG_EXTENSIONS, DYNAMIC_LINKING.
5ebbe4ef 5080
b0d10ba6
MV
5081The following macros have been removed completely: MEMOIZE_LOCALS,
5082SCM_RECKLESS, SCM_CAUTIOUS.
5ebbe4ef
RB
5083
5084** The preprocessor define STACK_DIRECTION has been deprecated.
5085
5086There should be no need to know about the stack direction for ordinary
b0d10ba6 5087programs.
5ebbe4ef 5088
b2cbe8d8
RB
5089** New function: scm_effective_version
5090
5091Returns the "effective" version number. This is just the normal full
5092version string without the final micro-version number. See "Changes
5093to the distribution" above.
5094
2902a459
MV
5095** The function scm_call_with_new_thread has a new prototype.
5096
5097Instead of taking a list with the thunk and handler, these two
5098arguments are now passed directly:
5099
5100 SCM scm_call_with_new_thread (SCM thunk, SCM handler);
5101
5102This is an incompatible change.
5103
ffd0ef3b
MV
5104** New snarfer macro SCM_DEFINE_PUBLIC.
5105
5106This is like SCM_DEFINE, but also calls scm_c_export for the defined
5107function in the init section.
5108
8734ce02
MV
5109** The snarfer macro SCM_SNARF_INIT is now officially supported.
5110
39e8f371
HWN
5111** Garbage collector rewrite.
5112
5113The garbage collector is cleaned up a lot, and now uses lazy
5114sweeping. This is reflected in the output of (gc-stats); since cells
5115are being freed when they are allocated, the cells-allocated field
5116stays roughly constant.
5117
5118For malloc related triggers, the behavior is changed. It uses the same
5119heuristic as the cell-triggered collections. It may be tuned with the
5120environment variables GUILE_MIN_YIELD_MALLOC. This is the percentage
5121for minimum yield of malloc related triggers. The default is 40.
5122GUILE_INIT_MALLOC_LIMIT sets the initial trigger for doing a GC. The
5123default is 200 kb.
5124
5125Debugging operations for the freelist have been deprecated, along with
5126the C variables that control garbage collection. The environment
5127variables GUILE_MAX_SEGMENT_SIZE, GUILE_INIT_SEGMENT_SIZE_2,
5128GUILE_INIT_SEGMENT_SIZE_1, and GUILE_MIN_YIELD_2 should be used.
5129
1367aa5e
HWN
5130For understanding the memory usage of a GUILE program, the routine
5131gc-live-object-stats returns an alist containing the number of live
5132objects for every type.
5133
5134
5ec1d2c8
DH
5135** The function scm_definedp has been renamed to scm_defined_p
5136
5137The name scm_definedp is deprecated.
5138
b0d10ba6 5139** The struct scm_cell type has been renamed to scm_t_cell
228a24ef
DH
5140
5141This is in accordance to Guile's naming scheme for types. Note that
5142the name scm_cell is now used for a function that allocates and
5143initializes a new cell (see below).
5144
0906625f
MV
5145** New functions for memory management
5146
5147A new set of functions for memory management has been added since the
5148old way (scm_must_malloc, scm_must_free, etc) was error prone and
5149indeed, Guile itself contained some long standing bugs that could
5150cause aborts in long running programs.
5151
5152The new functions are more symmetrical and do not need cooperation
5153from smob free routines, among other improvements.
5154
eab1b259
HWN
5155The new functions are scm_malloc, scm_realloc, scm_calloc, scm_strdup,
5156scm_strndup, scm_gc_malloc, scm_gc_calloc, scm_gc_realloc,
5157scm_gc_free, scm_gc_register_collectable_memory, and
0906625f
MV
5158scm_gc_unregister_collectable_memory. Refer to the manual for more
5159details and for upgrading instructions.
5160
5161The old functions for memory management have been deprecated. They
5162are: scm_must_malloc, scm_must_realloc, scm_must_free,
5163scm_must_strdup, scm_must_strndup, scm_done_malloc, scm_done_free.
5164
4aa104a4
MV
5165** Declarations of exported features are marked with SCM_API.
5166
5167Every declaration of a feature that belongs to the exported Guile API
5168has been marked by adding the macro "SCM_API" to the start of the
5169declaration. This macro can expand into different things, the most
5170common of which is just "extern" for Unix platforms. On Win32, it can
5171be used to control which symbols are exported from a DLL.
5172
8f99e3f3 5173If you `#define SCM_IMPORT' before including <libguile.h>, SCM_API
4aa104a4
MV
5174will expand into "__declspec (dllimport) extern", which is needed for
5175linking to the Guile DLL in Windows.
5176
b0d10ba6 5177There are also SCM_RL_IMPORT, SCM_SRFI1314_IMPORT, and
8f99e3f3 5178SCM_SRFI4_IMPORT, for the corresponding libraries.
4aa104a4 5179
a9930d22
MV
5180** SCM_NEWCELL and SCM_NEWCELL2 have been deprecated.
5181
b0d10ba6
MV
5182Use the new functions scm_cell and scm_double_cell instead. The old
5183macros had problems because with them allocation and initialization
5184was separated and the GC could sometimes observe half initialized
5185cells. Only careful coding by the user of SCM_NEWCELL and
5186SCM_NEWCELL2 could make this safe and efficient.
a9930d22 5187
5132eef0
DH
5188** CHECK_ENTRY, CHECK_APPLY and CHECK_EXIT have been deprecated.
5189
5190Use the variables scm_check_entry_p, scm_check_apply_p and scm_check_exit_p
5191instead.
5192
bc76d628
DH
5193** SRCBRKP has been deprecated.
5194
5195Use scm_c_source_property_breakpoint_p instead.
5196
3063e30a
DH
5197** Deprecated: scm_makmacro
5198
b0d10ba6
MV
5199Change your code to use either scm_makmmacro or to define macros in
5200Scheme, using 'define-macro'.
1e5f92ce 5201
1a61d41b
MV
5202** New function scm_c_port_for_each.
5203
5204This function is like scm_port_for_each but takes a pointer to a C
5205function as the callback instead of a SCM value.
5206
1f834c95
MV
5207** The names scm_internal_select, scm_thread_sleep, and
5208 scm_thread_usleep have been discouraged.
5209
5210Use scm_std_select, scm_std_sleep, scm_std_usleep instead.
5211
aa9200e5
MV
5212** The GC can no longer be blocked.
5213
5214The global flags scm_gc_heap_lock and scm_block_gc have been removed.
5215The GC can now run (partially) concurrently with other code and thus
5216blocking it is not well defined.
5217
b0d10ba6
MV
5218** Many definitions have been removed that were previously deprecated.
5219
5220scm_lisp_nil, scm_lisp_t, s_nil_ify, scm_m_nil_ify, s_t_ify,
5221scm_m_t_ify, s_0_cond, scm_m_0_cond, s_0_ify, scm_m_0_ify, s_1_ify,
5222scm_m_1_ify, scm_debug_newcell, scm_debug_newcell2,
5223scm_tc16_allocated, SCM_SET_SYMBOL_HASH, SCM_IM_NIL_IFY, SCM_IM_T_IFY,
5224SCM_IM_0_COND, SCM_IM_0_IFY, SCM_IM_1_IFY, SCM_GC_SET_ALLOCATED,
5225scm_debug_newcell, scm_debug_newcell2, SCM_HUP_SIGNAL, SCM_INT_SIGNAL,
5226SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL, SCM_ALRM_SIGNAL,
5227SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD, SCM_ORD_SIG,
5228SCM_NUM_SIGS, scm_top_level_lookup_closure_var,
5229*top-level-lookup-closure*, scm_system_transformer, scm_eval_3,
5230scm_eval2, root_module_lookup_closure, SCM_SLOPPY_STRINGP,
5231SCM_RWSTRINGP, scm_read_only_string_p, scm_make_shared_substring,
5232scm_tc7_substring, sym_huh, SCM_VARVCELL, SCM_UDVARIABLEP,
5233SCM_DEFVARIABLEP, scm_mkbig, scm_big2inum, scm_adjbig, scm_normbig,
5234scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl, SCM_FIXNUM_BIT,
5235SCM_SETCHARS, SCM_SLOPPY_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET,
5236SCM_LENGTH_MAX, SCM_SETLENGTH, SCM_ROSTRINGP, SCM_ROLENGTH,
5237SCM_ROCHARS, SCM_ROUCHARS, SCM_SUBSTRP, SCM_COERCE_SUBSTR,
5238scm_sym2vcell, scm_intern, scm_intern0, scm_sysintern, scm_sysintern0,
66c8ded2 5239scm_sysintern0_no_module_lookup, scm_init_symbols_deprecated,
2109da78 5240scm_vector_set_length_x, scm_contregs, scm_debug_info,
983e697d
MV
5241scm_debug_frame, SCM_DSIDEVAL, SCM_CONST_LONG, SCM_VCELL,
5242SCM_GLOBAL_VCELL, SCM_VCELL_INIT, SCM_GLOBAL_VCELL_INIT,
5243SCM_HUGE_LENGTH, SCM_VALIDATE_STRINGORSUBSTR, SCM_VALIDATE_ROSTRING,
5244SCM_VALIDATE_ROSTRING_COPY, SCM_VALIDATE_NULLORROSTRING_COPY,
5245SCM_VALIDATE_RWSTRING, DIGITS, scm_small_istr2int, scm_istr2int,
2109da78
MV
5246scm_istr2flo, scm_istring2number, scm_istr2int, scm_istr2flo,
5247scm_istring2number, scm_vtable_index_vcell, scm_si_vcell, SCM_ECONSP,
5248SCM_NECONSP, SCM_GLOC_VAR, SCM_GLOC_VAL, SCM_GLOC_SET_VAL,
c41acab3
MV
5249SCM_GLOC_VAL_LOC, scm_make_gloc, scm_gloc_p, scm_tc16_variable,
5250SCM_CHARS, SCM_LENGTH, SCM_SET_STRING_CHARS, SCM_SET_STRING_LENGTH.
b51bad08 5251
09172f9c
NJ
5252* Changes to bundled modules
5253
5254** (ice-9 debug)
5255
5256Using the (ice-9 debug) module no longer automatically switches Guile
5257to use the debugging evaluator. If you want to switch to the
5258debugging evaluator (which is needed for backtrace information if you
5259hit an error), please add an explicit "(debug-enable 'debug)" to your
5260code just after the code to use (ice-9 debug).
5261
328dc9a3 5262\f
c299f186
MD
5263Changes since Guile 1.4:
5264
5265* Changes to the distribution
5266
32d6f999
TTN
5267** A top-level TODO file is included.
5268
311b6a3c 5269** Guile now uses a versioning scheme similar to that of the Linux kernel.
c81ea65d
RB
5270
5271Guile now always uses three numbers to represent the version,
5272i.e. "1.6.5". The first number, 1, is the major version number, the
5273second number, 6, is the minor version number, and the third number,
52745, is the micro version number. Changes in major version number
5275indicate major changes in Guile.
5276
5277Minor version numbers that are even denote stable releases, and odd
5278minor version numbers denote development versions (which may be
5279unstable). The micro version number indicates a minor sub-revision of
5280a given MAJOR.MINOR release.
5281
5282In keeping with the new scheme, (minor-version) and scm_minor_version
5283no longer return everything but the major version number. They now
5284just return the minor version number. Two new functions
5285(micro-version) and scm_micro_version have been added to report the
5286micro version number.
5287
5288In addition, ./GUILE-VERSION now defines GUILE_MICRO_VERSION.
5289
5c790b44
RB
5290** New preprocessor definitions are available for checking versions.
5291
5292version.h now #defines SCM_MAJOR_VERSION, SCM_MINOR_VERSION, and
5293SCM_MICRO_VERSION to the appropriate integer values.
5294
311b6a3c
MV
5295** Guile now actively warns about deprecated features.
5296
5297The new configure option `--enable-deprecated=LEVEL' and the
5298environment variable GUILE_WARN_DEPRECATED control this mechanism.
5299See INSTALL and README for more information.
5300
0b073f0f
RB
5301** Guile is much more likely to work on 64-bit architectures.
5302
5303Guile now compiles and passes "make check" with only two UNRESOLVED GC
5e137c65
RB
5304cases on Alpha and ia64 based machines now. Thanks to John Goerzen
5305for the use of a test machine, and thanks to Stefan Jahn for ia64
5306patches.
0b073f0f 5307
e658215a
RB
5308** New functions: setitimer and getitimer.
5309
5310These implement a fairly direct interface to the libc functions of the
5311same name.
5312
8630fdfc
RB
5313** The #. reader extension is now disabled by default.
5314
5315For safety reasons, #. evaluation is disabled by default. To
5316re-enable it, set the fluid read-eval? to #t. For example:
5317
67b7dd9e 5318 (fluid-set! read-eval? #t)
8630fdfc
RB
5319
5320but make sure you realize the potential security risks involved. With
5321read-eval? enabled, reading a data file from an untrusted source can
5322be dangerous.
5323
f2a75d81 5324** New SRFI modules have been added:
4df36934 5325
dfdf5826
MG
5326SRFI-0 `cond-expand' is now supported in Guile, without requiring
5327using a module.
5328
e8bb0476
MG
5329(srfi srfi-1) is a library containing many useful pair- and list-processing
5330 procedures.
5331
7adc2c58 5332(srfi srfi-2) exports and-let*.
4df36934 5333
b74a7ec8
MG
5334(srfi srfi-4) implements homogeneous numeric vector datatypes.
5335
7adc2c58
RB
5336(srfi srfi-6) is a dummy module for now, since guile already provides
5337 all of the srfi-6 procedures by default: open-input-string,
5338 open-output-string, get-output-string.
4df36934 5339
7adc2c58 5340(srfi srfi-8) exports receive.
4df36934 5341
7adc2c58 5342(srfi srfi-9) exports define-record-type.
4df36934 5343
dfdf5826
MG
5344(srfi srfi-10) exports define-reader-ctor and implements the reader
5345 extension #,().
5346
7adc2c58 5347(srfi srfi-11) exports let-values and let*-values.
4df36934 5348
7adc2c58 5349(srfi srfi-13) implements the SRFI String Library.
53e29a1e 5350
7adc2c58 5351(srfi srfi-14) implements the SRFI Character-Set Library.
53e29a1e 5352
dfdf5826
MG
5353(srfi srfi-17) implements setter and getter-with-setter and redefines
5354 some accessor procedures as procedures with getters. (such as car,
5355 cdr, vector-ref etc.)
5356
5357(srfi srfi-19) implements the SRFI Time/Date Library.
2b60bc95 5358
466bb4b3
TTN
5359** New scripts / "executable modules"
5360
5361Subdirectory "scripts" contains Scheme modules that are packaged to
5362also be executable as scripts. At this time, these scripts are available:
5363
5364 display-commentary
5365 doc-snarf
5366 generate-autoload
5367 punify
58e5b910 5368 read-scheme-source
466bb4b3
TTN
5369 use2dot
5370
5371See README there for more info.
5372
54c17ccb
TTN
5373These scripts can be invoked from the shell with the new program
5374"guile-tools", which keeps track of installation directory for you.
5375For example:
5376
5377 $ guile-tools display-commentary srfi/*.scm
5378
5379guile-tools is copied to the standard $bindir on "make install".
5380
0109c4bf
MD
5381** New module (ice-9 stack-catch):
5382
5383stack-catch is like catch, but saves the current state of the stack in
3c1d1301
RB
5384the fluid the-last-stack. This fluid can be useful when using the
5385debugger and when re-throwing an error.
0109c4bf 5386
fbf0c8c7
MV
5387** The module (ice-9 and-let*) has been renamed to (ice-9 and-let-star)
5388
5389This has been done to prevent problems on lesser operating systems
5390that can't tolerate `*'s in file names. The exported macro continues
5391to be named `and-let*', of course.
5392
4f60cc33 5393On systems that support it, there is also a compatibility module named
fbf0c8c7 5394(ice-9 and-let*). It will go away in the next release.
6c0201ad 5395
9d774814 5396** New modules (oop goops) etc.:
14f1d9fe
MD
5397
5398 (oop goops)
5399 (oop goops describe)
5400 (oop goops save)
5401 (oop goops active-slot)
5402 (oop goops composite-slot)
5403
9d774814 5404The Guile Object Oriented Programming System (GOOPS) has been
311b6a3c
MV
5405integrated into Guile. For further information, consult the GOOPS
5406manual and tutorial in the `doc' directory.
14f1d9fe 5407
9d774814
GH
5408** New module (ice-9 rdelim).
5409
5410This exports the following procedures which were previously defined
1c8cbd62 5411in the default environment:
9d774814 5412
1c8cbd62
GH
5413read-line read-line! read-delimited read-delimited! %read-delimited!
5414%read-line write-line
9d774814 5415
1c8cbd62
GH
5416For backwards compatibility the definitions are still imported into the
5417default environment in this version of Guile. However you should add:
9d774814
GH
5418
5419(use-modules (ice-9 rdelim))
5420
1c8cbd62
GH
5421to any program which uses the definitions, since this may change in
5422future.
9d774814
GH
5423
5424Alternatively, if guile-scsh is installed, the (scsh rdelim) module
5425can be used for similar functionality.
5426
7e267da1
GH
5427** New module (ice-9 rw)
5428
5429This is a subset of the (scsh rw) module from guile-scsh. Currently
373f4948 5430it defines two procedures:
7e267da1 5431
311b6a3c 5432*** New function: read-string!/partial str [port_or_fdes [start [end]]]
7e267da1 5433
4bcdfe46
GH
5434 Read characters from a port or file descriptor into a string STR.
5435 A port must have an underlying file descriptor -- a so-called
5436 fport. This procedure is scsh-compatible and can efficiently read
311b6a3c 5437 large strings.
7e267da1 5438
4bcdfe46
GH
5439*** New function: write-string/partial str [port_or_fdes [start [end]]]
5440
5441 Write characters from a string STR to a port or file descriptor.
5442 A port must have an underlying file descriptor -- a so-called
5443 fport. This procedure is mostly compatible and can efficiently
5444 write large strings.
5445
e5005373
KN
5446** New module (ice-9 match)
5447
311b6a3c
MV
5448This module includes Andrew K. Wright's pattern matcher. See
5449ice-9/match.scm for brief description or
e5005373 5450
311b6a3c 5451 http://www.star-lab.com/wright/code.html
e5005373 5452
311b6a3c 5453for complete documentation.
e5005373 5454
4f60cc33
NJ
5455** New module (ice-9 buffered-input)
5456
5457This module provides procedures to construct an input port from an
5458underlying source of input that reads and returns its input in chunks.
5459The underlying input source is a Scheme procedure, specified by the
5460caller, which the port invokes whenever it needs more input.
5461
5462This is useful when building an input port whose back end is Readline
5463or a UI element such as the GtkEntry widget.
5464
5465** Documentation
5466
5467The reference and tutorial documentation that was previously
5468distributed separately, as `guile-doc', is now included in the core
5469Guile distribution. The documentation consists of the following
5470manuals.
5471
5472- The Guile Tutorial (guile-tut.texi) contains a tutorial introduction
5473 to using Guile.
5474
5475- The Guile Reference Manual (guile.texi) contains (or is intended to
5476 contain) reference documentation on all aspects of Guile.
5477
5478- The GOOPS Manual (goops.texi) contains both tutorial-style and
5479 reference documentation for using GOOPS, Guile's Object Oriented
5480 Programming System.
5481
c3e62877
NJ
5482- The Revised^5 Report on the Algorithmic Language Scheme
5483 (r5rs.texi).
4f60cc33
NJ
5484
5485See the README file in the `doc' directory for more details.
5486
094a67bb
MV
5487** There are a couple of examples in the examples/ directory now.
5488
9d774814
GH
5489* Changes to the stand-alone interpreter
5490
e7e58018
MG
5491** New command line option `--use-srfi'
5492
5493Using this option, SRFI modules can be loaded on startup and be
5494available right from the beginning. This makes programming portable
5495Scheme programs easier.
5496
5497The option `--use-srfi' expects a comma-separated list of numbers,
5498each representing a SRFI number to be loaded into the interpreter
5499before starting evaluating a script file or the REPL. Additionally,
5500the feature identifier for the loaded SRFIs is recognized by
5501`cond-expand' when using this option.
5502
5503Example:
5504$ guile --use-srfi=8,13
5505guile> (receive (x z) (values 1 2) (+ 1 2))
55063
58e5b910 5507guile> (string-pad "bla" 20)
e7e58018
MG
5508" bla"
5509
094a67bb
MV
5510** Guile now always starts up in the `(guile-user)' module.
5511
6e9382f1 5512Previously, scripts executed via the `-s' option would run in the
094a67bb
MV
5513`(guile)' module and the repl would run in the `(guile-user)' module.
5514Now every user action takes place in the `(guile-user)' module by
5515default.
e7e58018 5516
c299f186
MD
5517* Changes to Scheme functions and syntax
5518
720e1c30
MV
5519** Character classifiers work for non-ASCII characters.
5520
5521The predicates `char-alphabetic?', `char-numeric?',
5522`char-whitespace?', `char-lower?', `char-upper?' and `char-is-both?'
5523no longer check whether their arguments are ASCII characters.
5524Previously, a character would only be considered alphabetic when it
5525was also ASCII, for example.
5526
311b6a3c
MV
5527** Previously deprecated Scheme functions have been removed:
5528
5529 tag - no replacement.
5530 fseek - replaced by seek.
5531 list* - replaced by cons*.
5532
5533** It's now possible to create modules with controlled environments
5534
5535Example:
5536
5537(use-modules (ice-9 safe))
5538(define m (make-safe-module))
5539;;; m will now be a module containing only a safe subset of R5RS
5540(eval '(+ 1 2) m) --> 3
5541(eval 'load m) --> ERROR: Unbound variable: load
5542
5543** Evaluation of "()", the empty list, is now an error.
8c2c9967
MV
5544
5545Previously, the expression "()" evaluated to the empty list. This has
5546been changed to signal a "missing expression" error. The correct way
5547to write the empty list as a literal constant is to use quote: "'()".
5548
311b6a3c
MV
5549** New concept of `Guile Extensions'.
5550
5551A Guile Extension is just a ordinary shared library that can be linked
5552at run-time. We found it advantageous to give this simple concept a
5553dedicated name to distinguish the issues related to shared libraries
5554from the issues related to the module system.
5555
5556*** New function: load-extension
5557
5558Executing (load-extension lib init) is mostly equivalent to
5559
5560 (dynamic-call init (dynamic-link lib))
5561
5562except when scm_register_extension has been called previously.
5563Whenever appropriate, you should use `load-extension' instead of
5564dynamic-link and dynamic-call.
5565
5566*** New C function: scm_c_register_extension
5567
5568This function registers a initialization function for use by
5569`load-extension'. Use it when you don't want specific extensions to
5570be loaded as shared libraries (for example on platforms that don't
5571support dynamic linking).
5572
8c2c9967
MV
5573** Auto-loading of compiled-code modules is deprecated.
5574
5575Guile used to be able to automatically find and link a shared
c10ecc4c 5576library to satisfy requests for a module. For example, the module
8c2c9967
MV
5577`(foo bar)' could be implemented by placing a shared library named
5578"foo/libbar.so" (or with a different extension) in a directory on the
5579load path of Guile.
5580
311b6a3c
MV
5581This has been found to be too tricky, and is no longer supported. The
5582shared libraries are now called "extensions". You should now write a
5583small Scheme file that calls `load-extension' to load the shared
e299cee2 5584library and initialize it explicitly.
8c2c9967
MV
5585
5586The shared libraries themselves should be installed in the usual
5587places for shared libraries, with names like "libguile-foo-bar".
5588
5589For example, place this into a file "foo/bar.scm"
5590
5591 (define-module (foo bar))
5592
311b6a3c
MV
5593 (load-extension "libguile-foo-bar" "foobar_init")
5594
5595** Backward incompatible change: eval EXP ENVIRONMENT-SPECIFIER
5596
5597`eval' is now R5RS, that is it takes two arguments.
5598The second argument is an environment specifier, i.e. either
5599
5600 (scheme-report-environment 5)
5601 (null-environment 5)
5602 (interaction-environment)
5603
5604or
8c2c9967 5605
311b6a3c 5606 any module.
8c2c9967 5607
6f76852b
MV
5608** The module system has been made more disciplined.
5609
311b6a3c
MV
5610The function `eval' will save and restore the current module around
5611the evaluation of the specified expression. While this expression is
5612evaluated, `(current-module)' will now return the right module, which
5613is the module specified as the second argument to `eval'.
6f76852b 5614
311b6a3c 5615A consequence of this change is that `eval' is not particularly
6f76852b
MV
5616useful when you want allow the evaluated code to change what module is
5617designated as the current module and have this change persist from one
5618call to `eval' to the next. The read-eval-print-loop is an example
5619where `eval' is now inadequate. To compensate, there is a new
5620function `primitive-eval' that does not take a module specifier and
5621that does not save/restore the current module. You should use this
5622function together with `set-current-module', `current-module', etc
5623when you want to have more control over the state that is carried from
5624one eval to the next.
5625
5626Additionally, it has been made sure that forms that are evaluated at
5627the top level are always evaluated with respect to the current module.
5628Previously, subforms of top-level forms such as `begin', `case',
5629etc. did not respect changes to the current module although these
5630subforms are at the top-level as well.
5631
311b6a3c 5632To prevent strange behavior, the forms `define-module',
6f76852b
MV
5633`use-modules', `use-syntax', and `export' have been restricted to only
5634work on the top level. The forms `define-public' and
5635`defmacro-public' only export the new binding on the top level. They
5636behave just like `define' and `defmacro', respectively, when they are
5637used in a lexical environment.
5638
0a892a2c
MV
5639Also, `export' will no longer silently re-export bindings imported
5640from a used module. It will emit a `deprecation' warning and will
5641cease to perform any re-export in the next version. If you actually
5642want to re-export bindings, use the new `re-export' in place of
5643`export'. The new `re-export' will not make copies of variables when
5644rexporting them, as `export' did wrongly.
5645
047dc3ae
TTN
5646** Module system now allows selection and renaming of imported bindings
5647
5648Previously, when using `use-modules' or the `#:use-module' clause in
5649the `define-module' form, all the bindings (association of symbols to
5650values) for imported modules were added to the "current module" on an
5651as-is basis. This has been changed to allow finer control through two
5652new facilities: selection and renaming.
5653
5654You can now select which of the imported module's bindings are to be
5655visible in the current module by using the `:select' clause. This
5656clause also can be used to rename individual bindings. For example:
5657
5658 ;; import all bindings no questions asked
5659 (use-modules (ice-9 common-list))
5660
5661 ;; import four bindings, renaming two of them;
5662 ;; the current module sees: every some zonk-y zonk-n
5663 (use-modules ((ice-9 common-list)
5664 :select (every some
5665 (remove-if . zonk-y)
5666 (remove-if-not . zonk-n))))
5667
5668You can also programmatically rename all selected bindings using the
5669`:renamer' clause, which specifies a proc that takes a symbol and
5670returns another symbol. Because it is common practice to use a prefix,
5671we now provide the convenience procedure `symbol-prefix-proc'. For
5672example:
5673
5674 ;; import four bindings, renaming two of them specifically,
5675 ;; and all four w/ prefix "CL:";
5676 ;; the current module sees: CL:every CL:some CL:zonk-y CL:zonk-n
5677 (use-modules ((ice-9 common-list)
5678 :select (every some
5679 (remove-if . zonk-y)
5680 (remove-if-not . zonk-n))
5681 :renamer (symbol-prefix-proc 'CL:)))
5682
5683 ;; import four bindings, renaming two of them specifically,
5684 ;; and all four by upcasing.
5685 ;; the current module sees: EVERY SOME ZONK-Y ZONK-N
5686 (define (upcase-symbol sym)
5687 (string->symbol (string-upcase (symbol->string sym))))
5688
5689 (use-modules ((ice-9 common-list)
5690 :select (every some
5691 (remove-if . zonk-y)
5692 (remove-if-not . zonk-n))
5693 :renamer upcase-symbol))
5694
5695Note that programmatic renaming is done *after* individual renaming.
5696Also, the above examples show `use-modules', but the same facilities are
5697available for the `#:use-module' clause of `define-module'.
5698
5699See manual for more info.
5700
b7d69200 5701** The semantics of guardians have changed.
56495472 5702
b7d69200 5703The changes are for the most part compatible. An important criterion
6c0201ad 5704was to keep the typical usage of guardians as simple as before, but to
c0a5d888 5705make the semantics safer and (as a result) more useful.
56495472 5706
c0a5d888 5707*** All objects returned from guardians are now properly alive.
56495472 5708
c0a5d888
ML
5709It is now guaranteed that any object referenced by an object returned
5710from a guardian is alive. It's now impossible for a guardian to
5711return a "contained" object before its "containing" object.
56495472
ML
5712
5713One incompatible (but probably not very important) change resulting
5714from this is that it is no longer possible to guard objects that
5715indirectly reference themselves (i.e. are parts of cycles). If you do
5716so accidentally, you'll get a warning.
5717
c0a5d888
ML
5718*** There are now two types of guardians: greedy and sharing.
5719
5720If you call (make-guardian #t) or just (make-guardian), you'll get a
5721greedy guardian, and for (make-guardian #f) a sharing guardian.
5722
5723Greedy guardians are the default because they are more "defensive".
5724You can only greedily guard an object once. If you guard an object
5725more than once, once in a greedy guardian and the rest of times in
5726sharing guardians, then it is guaranteed that the object won't be
5727returned from sharing guardians as long as it is greedily guarded
5728and/or alive.
5729
5730Guardians returned by calls to `make-guardian' can now take one more
5731optional parameter, which says whether to throw an error in case an
5732attempt is made to greedily guard an object that is already greedily
5733guarded. The default is true, i.e. throw an error. If the parameter
5734is false, the guardian invocation returns #t if guarding was
5735successful and #f if it wasn't.
5736
5737Also, since greedy guarding is, in effect, a side-effecting operation
5738on objects, a new function is introduced: `destroy-guardian!'.
5739Invoking this function on a guardian renders it unoperative and, if
5740the guardian is greedy, clears the "greedily guarded" property of the
5741objects that were guarded by it, thus undoing the side effect.
5742
5743Note that all this hair is hardly very important, since guardian
5744objects are usually permanent.
5745
311b6a3c
MV
5746** Continuations created by call-with-current-continuation now accept
5747any number of arguments, as required by R5RS.
818febc0 5748
c10ecc4c 5749** New function `issue-deprecation-warning'
56426fdb 5750
311b6a3c 5751This function is used to display the deprecation messages that are
c10ecc4c 5752controlled by GUILE_WARN_DEPRECATION as explained in the README.
56426fdb
KN
5753
5754 (define (id x)
c10ecc4c
MV
5755 (issue-deprecation-warning "`id' is deprecated. Use `identity' instead.")
5756 (identity x))
56426fdb
KN
5757
5758 guile> (id 1)
5759 ;; `id' is deprecated. Use `identity' instead.
5760 1
5761 guile> (id 1)
5762 1
5763
c10ecc4c
MV
5764** New syntax `begin-deprecated'
5765
5766When deprecated features are included (as determined by the configure
5767option --enable-deprecated), `begin-deprecated' is identical to
5768`begin'. When deprecated features are excluded, it always evaluates
5769to `#f', ignoring the body forms.
5770
17f367e0
MV
5771** New function `make-object-property'
5772
5773This function returns a new `procedure with setter' P that can be used
5774to attach a property to objects. When calling P as
5775
5776 (set! (P obj) val)
5777
5778where `obj' is any kind of object, it attaches `val' to `obj' in such
5779a way that it can be retrieved by calling P as
5780
5781 (P obj)
5782
5783This function will replace procedure properties, symbol properties and
5784source properties eventually.
5785
76ef92f3
MV
5786** Module (ice-9 optargs) now uses keywords instead of `#&'.
5787
5788Instead of #&optional, #&key, etc you should now use #:optional,
5789#:key, etc. Since #:optional is a keyword, you can write it as just
5790:optional when (read-set! keywords 'prefix) is active.
5791
5792The old reader syntax `#&' is still supported, but deprecated. It
5793will be removed in the next release.
5794
c0997079
MD
5795** New define-module option: pure
5796
5797Tells the module system not to include any bindings from the root
5798module.
5799
5800Example:
5801
5802(define-module (totally-empty-module)
5803 :pure)
5804
5805** New define-module option: export NAME1 ...
5806
5807Export names NAME1 ...
5808
5809This option is required if you want to be able to export bindings from
5810a module which doesn't import one of `define-public' or `export'.
5811
5812Example:
5813
311b6a3c
MV
5814 (define-module (foo)
5815 :pure
5816 :use-module (ice-9 r5rs)
5817 :export (bar))
69b5f65a 5818
311b6a3c 5819 ;;; Note that we're pure R5RS below this point!
69b5f65a 5820
311b6a3c
MV
5821 (define (bar)
5822 ...)
daa6ba18 5823
1f3908c4
KN
5824** New function: object->string OBJ
5825
5826Return a Scheme string obtained by printing a given object.
5827
eb5c0a2a
GH
5828** New function: port? X
5829
5830Returns a boolean indicating whether X is a port. Equivalent to
5831`(or (input-port? X) (output-port? X))'.
5832
efa40607
DH
5833** New function: file-port?
5834
5835Determines whether a given object is a port that is related to a file.
5836
34b56ec4
GH
5837** New function: port-for-each proc
5838
311b6a3c
MV
5839Apply PROC to each port in the Guile port table in turn. The return
5840value is unspecified. More specifically, PROC is applied exactly once
5841to every port that exists in the system at the time PORT-FOR-EACH is
5842invoked. Changes to the port table while PORT-FOR-EACH is running
5843have no effect as far as PORT-FOR-EACH is concerned.
34b56ec4
GH
5844
5845** New function: dup2 oldfd newfd
5846
5847A simple wrapper for the `dup2' system call. Copies the file
5848descriptor OLDFD to descriptor number NEWFD, replacing the
5849previous meaning of NEWFD. Both OLDFD and NEWFD must be integers.
5850Unlike for dup->fdes or primitive-move->fdes, no attempt is made
264e9cbc 5851to move away ports which are using NEWFD. The return value is
34b56ec4
GH
5852unspecified.
5853
5854** New function: close-fdes fd
5855
5856A simple wrapper for the `close' system call. Close file
5857descriptor FD, which must be an integer. Unlike close (*note
5858close: Ports and File Descriptors.), the file descriptor will be
5859closed even if a port is using it. The return value is
5860unspecified.
5861
94e6d793
MG
5862** New function: crypt password salt
5863
5864Encrypts `password' using the standard unix password encryption
5865algorithm.
5866
5867** New function: chroot path
5868
5869Change the root directory of the running process to `path'.
5870
5871** New functions: getlogin, cuserid
5872
5873Return the login name or the user name of the current effective user
5874id, respectively.
5875
5876** New functions: getpriority which who, setpriority which who prio
5877
5878Get or set the priority of the running process.
5879
5880** New function: getpass prompt
5881
5882Read a password from the terminal, first displaying `prompt' and
5883disabling echoing.
5884
5885** New function: flock file operation
5886
5887Set/remove an advisory shared or exclusive lock on `file'.
5888
5889** New functions: sethostname name, gethostname
5890
5891Set or get the hostname of the machine the current process is running
5892on.
5893
6d163216 5894** New function: mkstemp! tmpl
4f60cc33 5895
6d163216
GH
5896mkstemp creates a new unique file in the file system and returns a
5897new buffered port open for reading and writing to the file. TMPL
5898is a string specifying where the file should be created: it must
5899end with `XXXXXX' and will be changed in place to return the name
5900of the temporary file.
5901
62e63ba9
MG
5902** New function: open-input-string string
5903
5904Return an input string port which delivers the characters from
4f60cc33 5905`string'. This procedure, together with `open-output-string' and
62e63ba9
MG
5906`get-output-string' implements SRFI-6.
5907
5908** New function: open-output-string
5909
5910Return an output string port which collects all data written to it.
5911The data can then be retrieved by `get-output-string'.
5912
5913** New function: get-output-string
5914
5915Return the contents of an output string port.
5916
56426fdb
KN
5917** New function: identity
5918
5919Return the argument.
5920
5bef627d
GH
5921** socket, connect, accept etc., now have support for IPv6. IPv6 addresses
5922 are represented in Scheme as integers with normal host byte ordering.
5923
5924** New function: inet-pton family address
5925
311b6a3c
MV
5926Convert a printable string network address into an integer. Note that
5927unlike the C version of this function, the result is an integer with
5928normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
5929e.g.,
5930
5931 (inet-pton AF_INET "127.0.0.1") => 2130706433
5932 (inet-pton AF_INET6 "::1") => 1
5bef627d
GH
5933
5934** New function: inet-ntop family address
5935
311b6a3c
MV
5936Convert an integer network address into a printable string. Note that
5937unlike the C version of this function, the input is an integer with
5938normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
5939e.g.,
5940
5941 (inet-ntop AF_INET 2130706433) => "127.0.0.1"
5942 (inet-ntop AF_INET6 (- (expt 2 128) 1)) =>
5bef627d
GH
5943 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
5944
56426fdb
KN
5945** Deprecated: id
5946
5947Use `identity' instead.
5948
5cd06d5e
DH
5949** Deprecated: -1+
5950
5951Use `1-' instead.
5952
5953** Deprecated: return-it
5954
311b6a3c 5955Do without it.
5cd06d5e
DH
5956
5957** Deprecated: string-character-length
5958
5959Use `string-length' instead.
5960
5961** Deprecated: flags
5962
5963Use `logior' instead.
5964
4f60cc33
NJ
5965** Deprecated: close-all-ports-except.
5966
5967This was intended for closing ports in a child process after a fork,
5968but it has the undesirable side effect of flushing buffers.
5969port-for-each is more flexible.
34b56ec4
GH
5970
5971** The (ice-9 popen) module now attempts to set up file descriptors in
5972the child process from the current Scheme ports, instead of using the
5973current values of file descriptors 0, 1, and 2 in the parent process.
5974
b52e071b
DH
5975** Removed function: builtin-weak-bindings
5976
5977There is no such concept as a weak binding any more.
5978
9d774814 5979** Removed constants: bignum-radix, scm-line-incrementors
0f979f3f 5980
7d435120
MD
5981** define-method: New syntax mandatory.
5982
5983The new method syntax is now mandatory:
5984
5985(define-method (NAME ARG-SPEC ...) BODY ...)
5986(define-method (NAME ARG-SPEC ... . REST-ARG) BODY ...)
5987
5988 ARG-SPEC ::= ARG-NAME | (ARG-NAME TYPE)
5989 REST-ARG ::= ARG-NAME
5990
5991If you have old code using the old syntax, import
5992(oop goops old-define-method) before (oop goops) as in:
5993
5994 (use-modules (oop goops old-define-method) (oop goops))
5995
f3f9dcbc
MV
5996** Deprecated function: builtin-variable
5997 Removed function: builtin-bindings
5998
5999There is no longer a distinction between builtin or other variables.
6000Use module system operations for all variables.
6001
311b6a3c
MV
6002** Lazy-catch handlers are no longer allowed to return.
6003
6004That is, a call to `throw', `error', etc is now guaranteed to not
6005return.
6006
a583bf1e 6007** Bugfixes for (ice-9 getopt-long)
8c84b81e 6008
a583bf1e
TTN
6009This module is now tested using test-suite/tests/getopt-long.test.
6010The following bugs have been fixed:
6011
6012*** Parsing for options that are specified to have `optional' args now checks
6013if the next element is an option instead of unconditionally taking it as the
8c84b81e
TTN
6014option arg.
6015
a583bf1e
TTN
6016*** An error is now thrown for `--opt=val' when the option description
6017does not specify `(value #t)' or `(value optional)'. This condition used to
6018be accepted w/o error, contrary to the documentation.
6019
6020*** The error message for unrecognized options is now more informative.
6021It used to be "not a record", an artifact of the implementation.
6022
6023*** The error message for `--opt' terminating the arg list (no value), when
6024`(value #t)' is specified, is now more informative. It used to be "not enough
6025args".
6026
6027*** "Clumped" single-char args now preserve trailing string, use it as arg.
6028The expansion used to be like so:
6029
6030 ("-abc5d" "--xyz") => ("-a" "-b" "-c" "--xyz")
6031
6032Note that the "5d" is dropped. Now it is like so:
6033
6034 ("-abc5d" "--xyz") => ("-a" "-b" "-c" "5d" "--xyz")
6035
6036This enables single-char options to have adjoining arguments as long as their
6037constituent characters are not potential single-char options.
8c84b81e 6038
998bfc70
TTN
6039** (ice-9 session) procedure `arity' now works with (ice-9 optargs) `lambda*'
6040
6041The `lambda*' and derivative forms in (ice-9 optargs) now set a procedure
6042property `arglist', which can be retrieved by `arity'. The result is that
6043`arity' can give more detailed information than before:
6044
6045Before:
6046
6047 guile> (use-modules (ice-9 optargs))
6048 guile> (define* (foo #:optional a b c) a)
6049 guile> (arity foo)
6050 0 or more arguments in `lambda*:G0'.
6051
6052After:
6053
6054 guile> (arity foo)
6055 3 optional arguments: `a', `b' and `c'.
6056 guile> (define* (bar a b #:key c d #:allow-other-keys) a)
6057 guile> (arity bar)
6058 2 required arguments: `a' and `b', 2 keyword arguments: `c'
6059 and `d', other keywords allowed.
6060 guile> (define* (baz a b #:optional c #:rest r) a)
6061 guile> (arity baz)
6062 2 required arguments: `a' and `b', 1 optional argument: `c',
6063 the rest in `r'.
6064
311b6a3c
MV
6065* Changes to the C interface
6066
c81c130e
MV
6067** Types have been renamed from scm_*_t to scm_t_*.
6068
6069This has been done for POSIX sake. It reserves identifiers ending
6070with "_t". What a concept.
6071
6072The old names are still available with status `deprecated'.
6073
6074** scm_t_bits (former scm_bits_t) is now a unsigned type.
6075
6e9382f1 6076** Deprecated features have been removed.
e6c9e497
MV
6077
6078*** Macros removed
6079
6080 SCM_INPORTP, SCM_OUTPORTP SCM_ICHRP, SCM_ICHR, SCM_MAKICHR
6081 SCM_SETJMPBUF SCM_NSTRINGP SCM_NRWSTRINGP SCM_NVECTORP SCM_DOUBLE_CELLP
6082
6083*** C Functions removed
6084
6085 scm_sysmissing scm_tag scm_tc16_flo scm_tc_flo
6086 scm_fseek - replaced by scm_seek.
6087 gc-thunk - replaced by after-gc-hook.
6088 gh_int2scmb - replaced by gh_bool2scm.
6089 scm_tc_dblr - replaced by scm_tc16_real.
6090 scm_tc_dblc - replaced by scm_tc16_complex.
6091 scm_list_star - replaced by scm_cons_star.
6092
36284627
DH
6093** Deprecated: scm_makfromstr
6094
6095Use scm_mem2string instead.
6096
311b6a3c
MV
6097** Deprecated: scm_make_shared_substring
6098
6099Explicit shared substrings will disappear from Guile.
6100
6101Instead, "normal" strings will be implemented using sharing
6102internally, combined with a copy-on-write strategy.
6103
6104** Deprecated: scm_read_only_string_p
6105
6106The concept of read-only strings will disappear in next release of
6107Guile.
6108
6109** Deprecated: scm_sloppy_memq, scm_sloppy_memv, scm_sloppy_member
c299f186 6110
311b6a3c 6111Instead, use scm_c_memq or scm_memq, scm_memv, scm_member.
c299f186 6112
dd0e04ed
KN
6113** New functions: scm_call_0, scm_call_1, scm_call_2, scm_call_3
6114
83dbedcc
KR
6115Call a procedure with the indicated number of arguments. See "Fly
6116Evaluation" in the manual.
dd0e04ed
KN
6117
6118** New functions: scm_apply_0, scm_apply_1, scm_apply_2, scm_apply_3
6119
83dbedcc
KR
6120Call a procedure with the indicated number of arguments and a list of
6121further arguments. See "Fly Evaluation" in the manual.
dd0e04ed 6122
e235f2a6
KN
6123** New functions: scm_list_1, scm_list_2, scm_list_3, scm_list_4, scm_list_5
6124
83dbedcc
KR
6125Create a list of the given number of elements. See "List
6126Constructors" in the manual.
e235f2a6
KN
6127
6128** Renamed function: scm_listify has been replaced by scm_list_n.
6129
6130** Deprecated macros: SCM_LIST0, SCM_LIST1, SCM_LIST2, SCM_LIST3, SCM_LIST4,
6131SCM_LIST5, SCM_LIST6, SCM_LIST7, SCM_LIST8, SCM_LIST9.
6132
6133Use functions scm_list_N instead.
6134
6fe692e9
MD
6135** New function: scm_c_read (SCM port, void *buffer, scm_sizet size)
6136
6137Used by an application to read arbitrary number of bytes from a port.
6138Same semantics as libc read, except that scm_c_read only returns less
6139than SIZE bytes if at end-of-file.
6140
6141Warning: Doesn't update port line and column counts!
6142
6143** New function: scm_c_write (SCM port, const void *ptr, scm_sizet size)
6144
6145Used by an application to write arbitrary number of bytes to an SCM
6146port. Similar semantics as libc write. However, unlike libc
6147write, scm_c_write writes the requested number of bytes and has no
6148return value.
6149
6150Warning: Doesn't update port line and column counts!
6151
17f367e0
MV
6152** New function: scm_init_guile ()
6153
6154In contrast to scm_boot_guile, scm_init_guile will return normally
6155after initializing Guile. It is not available on all systems, tho.
6156
23ade5e7
DH
6157** New functions: scm_str2symbol, scm_mem2symbol
6158
6159The function scm_str2symbol takes a const char* pointing to a zero-terminated
6160field of characters and creates a scheme symbol object from that C string.
6161The function scm_mem2symbol takes a const char* and a number of characters and
6162creates a symbol from the characters in that memory area.
6163
17f367e0
MV
6164** New functions: scm_primitive_make_property
6165 scm_primitive_property_ref
6166 scm_primitive_property_set_x
6167 scm_primitive_property_del_x
6168
6169These functions implement a new way to deal with object properties.
6170See libguile/properties.c for their documentation.
6171
9d47a1e6
ML
6172** New function: scm_done_free (long size)
6173
6174This function is the inverse of scm_done_malloc. Use it to report the
6175amount of smob memory you free. The previous method, which involved
6176calling scm_done_malloc with negative argument, was somewhat
6177unintuitive (and is still available, of course).
6178
79a3dafe
DH
6179** New function: scm_c_memq (SCM obj, SCM list)
6180
6181This function provides a fast C level alternative for scm_memq for the case
6182that the list parameter is known to be a proper list. The function is a
6183replacement for scm_sloppy_memq, but is stricter in its requirements on its
6184list input parameter, since for anything else but a proper list the function's
6185behaviour is undefined - it may even crash or loop endlessly. Further, for
6186the case that the object is not found in the list, scm_c_memq returns #f which
6187is similar to scm_memq, but different from scm_sloppy_memq's behaviour.
6188
6c0201ad 6189** New functions: scm_remember_upto_here_1, scm_remember_upto_here_2,
5d2b97cd
DH
6190scm_remember_upto_here
6191
6192These functions replace the function scm_remember.
6193
6194** Deprecated function: scm_remember
6195
6196Use one of the new functions scm_remember_upto_here_1,
6197scm_remember_upto_here_2 or scm_remember_upto_here instead.
6198
be54b15d
DH
6199** New function: scm_allocate_string
6200
6201This function replaces the function scm_makstr.
6202
6203** Deprecated function: scm_makstr
6204
6205Use the new function scm_allocate_string instead.
6206
32d0d4b1
DH
6207** New global variable scm_gc_running_p introduced.
6208
6209Use this variable to find out if garbage collection is being executed. Up to
6210now applications have used scm_gc_heap_lock to test if garbage collection was
6211running, which also works because of the fact that up to know only the garbage
6212collector has set this variable. But, this is an implementation detail that
6213may change. Further, scm_gc_heap_lock is not set throughout gc, thus the use
6214of this variable is (and has been) not fully safe anyway.
6215
5b9eb8ae
DH
6216** New macros: SCM_BITVECTOR_MAX_LENGTH, SCM_UVECTOR_MAX_LENGTH
6217
6218Use these instead of SCM_LENGTH_MAX.
6219
6c0201ad 6220** New macros: SCM_CONTINUATION_LENGTH, SCM_CCLO_LENGTH, SCM_STACK_LENGTH,
a6d9e5ab
DH
6221SCM_STRING_LENGTH, SCM_SYMBOL_LENGTH, SCM_UVECTOR_LENGTH,
6222SCM_BITVECTOR_LENGTH, SCM_VECTOR_LENGTH.
6223
6224Use these instead of SCM_LENGTH.
6225
6c0201ad 6226** New macros: SCM_SET_CONTINUATION_LENGTH, SCM_SET_STRING_LENGTH,
93778877
DH
6227SCM_SET_SYMBOL_LENGTH, SCM_SET_VECTOR_LENGTH, SCM_SET_UVECTOR_LENGTH,
6228SCM_SET_BITVECTOR_LENGTH
bc0eaf7b
DH
6229
6230Use these instead of SCM_SETLENGTH
6231
6c0201ad 6232** New macros: SCM_STRING_CHARS, SCM_SYMBOL_CHARS, SCM_CCLO_BASE,
a6d9e5ab
DH
6233SCM_VECTOR_BASE, SCM_UVECTOR_BASE, SCM_BITVECTOR_BASE, SCM_COMPLEX_MEM,
6234SCM_ARRAY_MEM
6235
e51fe79c
DH
6236Use these instead of SCM_CHARS, SCM_UCHARS, SCM_ROCHARS, SCM_ROUCHARS or
6237SCM_VELTS.
a6d9e5ab 6238
6c0201ad 6239** New macros: SCM_SET_BIGNUM_BASE, SCM_SET_STRING_CHARS,
6a0476fd
DH
6240SCM_SET_SYMBOL_CHARS, SCM_SET_UVECTOR_BASE, SCM_SET_BITVECTOR_BASE,
6241SCM_SET_VECTOR_BASE
6242
6243Use these instead of SCM_SETCHARS.
6244
a6d9e5ab
DH
6245** New macro: SCM_BITVECTOR_P
6246
6247** New macro: SCM_STRING_COERCE_0TERMINATION_X
6248
6249Use instead of SCM_COERCE_SUBSTR.
6250
30ea841d
DH
6251** New macros: SCM_DIR_OPEN_P, SCM_DIR_FLAG_OPEN
6252
6253For directory objects, use these instead of SCM_OPDIRP and SCM_OPN.
6254
6c0201ad
TTN
6255** Deprecated macros: SCM_OUTOFRANGE, SCM_NALLOC, SCM_HUP_SIGNAL,
6256SCM_INT_SIGNAL, SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL,
6257SCM_ALRM_SIGNAL, SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD,
d1ca2c64 6258SCM_ORD_SIG, SCM_NUM_SIGS, SCM_SYMBOL_SLOTS, SCM_SLOTS, SCM_SLOPPY_STRINGP,
a6d9e5ab
DH
6259SCM_VALIDATE_STRINGORSUBSTR, SCM_FREEP, SCM_NFREEP, SCM_CHARS, SCM_UCHARS,
6260SCM_VALIDATE_ROSTRING, SCM_VALIDATE_ROSTRING_COPY,
6261SCM_VALIDATE_NULLORROSTRING_COPY, SCM_ROLENGTH, SCM_LENGTH, SCM_HUGE_LENGTH,
b24b5e13 6262SCM_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET, SCM_COERCE_SUBSTR,
34f0f2b8 6263SCM_ROSTRINGP, SCM_RWSTRINGP, SCM_VALIDATE_RWSTRING, SCM_ROCHARS,
fd336365 6264SCM_ROUCHARS, SCM_SETLENGTH, SCM_SETCHARS, SCM_LENGTH_MAX, SCM_GC8MARKP,
30ea841d 6265SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR, SCM_SUBR_DOC,
b3fcac34
DH
6266SCM_OPDIRP, SCM_VALIDATE_OPDIR, SCM_WTA, RETURN_SCM_WTA, SCM_CONST_LONG,
6267SCM_WNA, SCM_FUNC_NAME, SCM_VALIDATE_NUMBER_COPY,
61045190 6268SCM_VALIDATE_NUMBER_DEF_COPY, SCM_SLOPPY_CONSP, SCM_SLOPPY_NCONSP,
e038c042 6269SCM_SETAND_CDR, SCM_SETOR_CDR, SCM_SETAND_CAR, SCM_SETOR_CAR
b63a956d
DH
6270
6271Use SCM_ASSERT_RANGE or SCM_VALIDATE_XXX_RANGE instead of SCM_OUTOFRANGE.
6272Use scm_memory_error instead of SCM_NALLOC.
c1aef037 6273Use SCM_STRINGP instead of SCM_SLOPPY_STRINGP.
d1ca2c64
DH
6274Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_STRINGORSUBSTR.
6275Use SCM_FREE_CELL_P instead of SCM_FREEP/SCM_NFREEP
a6d9e5ab 6276Use a type specific accessor macro instead of SCM_CHARS/SCM_UCHARS.
6c0201ad 6277Use a type specific accessor instead of SCM(_|_RO|_HUGE_)LENGTH.
a6d9e5ab
DH
6278Use SCM_VALIDATE_(SYMBOL|STRING) instead of SCM_VALIDATE_ROSTRING.
6279Use SCM_STRING_COERCE_0TERMINATION_X instead of SCM_COERCE_SUBSTR.
b24b5e13 6280Use SCM_STRINGP or SCM_SYMBOLP instead of SCM_ROSTRINGP.
f0942910
DH
6281Use SCM_STRINGP instead of SCM_RWSTRINGP.
6282Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_RWSTRING.
34f0f2b8
DH
6283Use SCM_STRING_CHARS instead of SCM_ROCHARS.
6284Use SCM_STRING_UCHARS instead of SCM_ROUCHARS.
93778877 6285Use a type specific setter macro instead of SCM_SETLENGTH.
6a0476fd 6286Use a type specific setter macro instead of SCM_SETCHARS.
5b9eb8ae 6287Use a type specific length macro instead of SCM_LENGTH_MAX.
fd336365
DH
6288Use SCM_GCMARKP instead of SCM_GC8MARKP.
6289Use SCM_SETGCMARK instead of SCM_SETGC8MARK.
6290Use SCM_CLRGCMARK instead of SCM_CLRGC8MARK.
6291Use SCM_TYP16 instead of SCM_GCTYP16.
6292Use SCM_CDR instead of SCM_GCCDR.
30ea841d 6293Use SCM_DIR_OPEN_P instead of SCM_OPDIRP.
276dd677
DH
6294Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of SCM_WTA.
6295Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of RETURN_SCM_WTA.
8dea8611 6296Use SCM_VCELL_INIT instead of SCM_CONST_LONG.
b3fcac34 6297Use SCM_WRONG_NUM_ARGS instead of SCM_WNA.
ced99e92
DH
6298Use SCM_CONSP instead of SCM_SLOPPY_CONSP.
6299Use !SCM_CONSP instead of SCM_SLOPPY_NCONSP.
b63a956d 6300
f7620510
DH
6301** Removed function: scm_struct_init
6302
93d40df2
DH
6303** Removed variable: scm_symhash_dim
6304
818febc0
GH
6305** Renamed function: scm_make_cont has been replaced by
6306scm_make_continuation, which has a different interface.
6307
cc4feeca
DH
6308** Deprecated function: scm_call_catching_errors
6309
6310Use scm_catch or scm_lazy_catch from throw.[ch] instead.
6311
28b06554
DH
6312** Deprecated function: scm_strhash
6313
6314Use scm_string_hash instead.
6315
1b9be268
DH
6316** Deprecated function: scm_vector_set_length_x
6317
6318Instead, create a fresh vector of the desired size and copy the contents.
6319
302f229e
MD
6320** scm_gensym has changed prototype
6321
6322scm_gensym now only takes one argument.
6323
1660782e
DH
6324** Deprecated type tags: scm_tc7_ssymbol, scm_tc7_msymbol, scm_tcs_symbols,
6325scm_tc7_lvector
28b06554
DH
6326
6327There is now only a single symbol type scm_tc7_symbol.
1660782e 6328The tag scm_tc7_lvector was not used anyway.
28b06554 6329
2f6fb7c5
KN
6330** Deprecated function: scm_make_smob_type_mfpe, scm_set_smob_mfpe.
6331
6332Use scm_make_smob_type and scm_set_smob_XXX instead.
6333
6334** New function scm_set_smob_apply.
6335
6336This can be used to set an apply function to a smob type.
6337
1f3908c4
KN
6338** Deprecated function: scm_strprint_obj
6339
6340Use scm_object_to_string instead.
6341
b3fcac34
DH
6342** Deprecated function: scm_wta
6343
6344Use scm_wrong_type_arg, or another appropriate error signalling function
6345instead.
6346
f3f9dcbc
MV
6347** Explicit support for obarrays has been deprecated.
6348
6349Use `scm_str2symbol' and the generic hashtable functions instead.
6350
6351** The concept of `vcells' has been deprecated.
6352
6353The data type `variable' is now used exclusively. `Vcells' have been
6354a low-level concept so you are likely not affected by this change.
6355
6356*** Deprecated functions: scm_sym2vcell, scm_sysintern,
6357 scm_sysintern0, scm_symbol_value0, scm_intern, scm_intern0.
6358
6359Use scm_c_define or scm_c_lookup instead, as appropriate.
6360
6361*** New functions: scm_c_module_lookup, scm_c_lookup,
6362 scm_c_module_define, scm_c_define, scm_module_lookup, scm_lookup,
6363 scm_module_define, scm_define.
6364
6365These functions work with variables instead of with vcells.
6366
311b6a3c
MV
6367** New functions for creating and defining `subr's and `gsubr's.
6368
6369The new functions more clearly distinguish between creating a subr (or
6370gsubr) object and adding it to the current module.
6371
6372These new functions are available: scm_c_make_subr, scm_c_define_subr,
6373scm_c_make_subr_with_generic, scm_c_define_subr_with_generic,
6374scm_c_make_gsubr, scm_c_define_gsubr, scm_c_make_gsubr_with_generic,
6375scm_c_define_gsubr_with_generic.
6376
6377** Deprecated functions: scm_make_subr, scm_make_subr_opt,
6378 scm_make_subr_with_generic, scm_make_gsubr,
6379 scm_make_gsubr_with_generic.
6380
6381Use the new ones from above instead.
6382
6383** C interface to the module system has changed.
6384
6385While we suggest that you avoid as many explicit module system
6386operations from C as possible for the time being, the C interface has
6387been made more similar to the high-level Scheme module system.
6388
6389*** New functions: scm_c_define_module, scm_c_use_module,
6390 scm_c_export, scm_c_resolve_module.
6391
6392They mostly work like their Scheme namesakes. scm_c_define_module
6393takes a function that is called a context where the new module is
6394current.
6395
6396*** Deprecated functions: scm_the_root_module, scm_make_module,
6397 scm_ensure_user_module, scm_load_scheme_module.
6398
6399Use the new functions instead.
6400
6401** Renamed function: scm_internal_with_fluids becomes
6402 scm_c_with_fluids.
6403
6404scm_internal_with_fluids is available as a deprecated function.
6405
6406** New function: scm_c_with_fluid.
6407
6408Just like scm_c_with_fluids, but takes one fluid and one value instead
6409of lists of same.
6410
1be6b49c
ML
6411** Deprecated typedefs: long_long, ulong_long.
6412
6413They are of questionable utility and they pollute the global
6414namespace.
6415
1be6b49c
ML
6416** Deprecated typedef: scm_sizet
6417
6418It is of questionable utility now that Guile requires ANSI C, and is
6419oddly named.
6420
6421** Deprecated typedefs: scm_port_rw_active, scm_port,
6422 scm_ptob_descriptor, scm_debug_info, scm_debug_frame, scm_fport,
6423 scm_option, scm_rstate, scm_rng, scm_array, scm_array_dim.
6424
6425Made more compliant with the naming policy by adding a _t at the end.
6426
6427** Deprecated functions: scm_mkbig, scm_big2num, scm_adjbig,
6428 scm_normbig, scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl
6429
373f4948 6430With the exception of the mysterious scm_2ulong2big, they are still
1be6b49c
ML
6431available under new names (scm_i_mkbig etc). These functions are not
6432intended to be used in user code. You should avoid dealing with
6433bignums directly, and should deal with numbers in general (which can
6434be bignums).
6435
147c18a0
MD
6436** Change in behavior: scm_num2long, scm_num2ulong
6437
6438The scm_num2[u]long functions don't any longer accept an inexact
6439argument. This change in behavior is motivated by concordance with
6440R5RS: It is more common that a primitive doesn't want to accept an
6441inexact for an exact.
6442
1be6b49c 6443** New functions: scm_short2num, scm_ushort2num, scm_int2num,
f3f70257
ML
6444 scm_uint2num, scm_size2num, scm_ptrdiff2num, scm_num2short,
6445 scm_num2ushort, scm_num2int, scm_num2uint, scm_num2ptrdiff,
1be6b49c
ML
6446 scm_num2size.
6447
6448These are conversion functions between the various ANSI C integral
147c18a0
MD
6449types and Scheme numbers. NOTE: The scm_num2xxx functions don't
6450accept an inexact argument.
1be6b49c 6451
5437598b
MD
6452** New functions: scm_float2num, scm_double2num,
6453 scm_num2float, scm_num2double.
6454
6455These are conversion functions between the two ANSI C float types and
6456Scheme numbers.
6457
1be6b49c 6458** New number validation macros:
f3f70257 6459 SCM_NUM2{SIZE,PTRDIFF,SHORT,USHORT,INT,UINT}[_DEF]
1be6b49c
ML
6460
6461See above.
6462
fc62c86a
ML
6463** New functions: scm_gc_protect_object, scm_gc_unprotect_object
6464
6465These are just nicer-named old scm_protect_object and
6466scm_unprotect_object.
6467
6468** Deprecated functions: scm_protect_object, scm_unprotect_object
6469
6470** New functions: scm_gc_[un]register_root, scm_gc_[un]register_roots
6471
6472These functions can be used to register pointers to locations that
6473hold SCM values.
6474
5b2ad23b
ML
6475** Deprecated function: scm_create_hook.
6476
6477Its sins are: misleading name, non-modularity and lack of general
6478usefulness.
6479
c299f186 6480\f
cc36e791
JB
6481Changes since Guile 1.3.4:
6482
80f27102
JB
6483* Changes to the distribution
6484
ce358662
JB
6485** Trees from nightly snapshots and CVS now require you to run autogen.sh.
6486
6487We've changed the way we handle generated files in the Guile source
6488repository. As a result, the procedure for building trees obtained
6489from the nightly FTP snapshots or via CVS has changed:
6490- You must have appropriate versions of autoconf, automake, and
6491 libtool installed on your system. See README for info on how to
6492 obtain these programs.
6493- Before configuring the tree, you must first run the script
6494 `autogen.sh' at the top of the source tree.
6495
6496The Guile repository used to contain not only source files, written by
6497humans, but also some generated files, like configure scripts and
6498Makefile.in files. Even though the contents of these files could be
6499derived mechanically from other files present, we thought it would
6500make the tree easier to build if we checked them into CVS.
6501
6502However, this approach means that minor differences between
6503developer's installed tools and habits affected the whole team.
6504So we have removed the generated files from the repository, and
6505added the autogen.sh script, which will reconstruct them
6506appropriately.
6507
6508
dc914156
GH
6509** configure now has experimental options to remove support for certain
6510features:
52cfc69b 6511
dc914156
GH
6512--disable-arrays omit array and uniform array support
6513--disable-posix omit posix interfaces
6514--disable-networking omit networking interfaces
6515--disable-regex omit regular expression interfaces
52cfc69b
GH
6516
6517These are likely to become separate modules some day.
6518
9764c29b 6519** New configure option --enable-debug-freelist
e1b0d0ac 6520
38a15cfd
GB
6521This enables a debugging version of SCM_NEWCELL(), and also registers
6522an extra primitive, the setter `gc-set-debug-check-freelist!'.
6523
6524Configure with the --enable-debug-freelist option to enable
6525the gc-set-debug-check-freelist! primitive, and then use:
6526
6527(gc-set-debug-check-freelist! #t) # turn on checking of the freelist
6528(gc-set-debug-check-freelist! #f) # turn off checking
6529
6530Checking of the freelist forces a traversal of the freelist and
6531a garbage collection before each allocation of a cell. This can
6532slow down the interpreter dramatically, so the setter should be used to
6533turn on this extra processing only when necessary.
e1b0d0ac 6534
9764c29b
MD
6535** New configure option --enable-debug-malloc
6536
6537Include code for debugging of calls to scm_must_malloc/realloc/free.
6538
6539Checks that
6540
65411. objects freed by scm_must_free has been mallocated by scm_must_malloc
65422. objects reallocated by scm_must_realloc has been allocated by
6543 scm_must_malloc
65443. reallocated objects are reallocated with the same what string
6545
6546But, most importantly, it records the number of allocated objects of
6547each kind. This is useful when searching for memory leaks.
6548
6549A Guile compiled with this option provides the primitive
6550`malloc-stats' which returns an alist with pairs of kind and the
6551number of objects of that kind.
6552
e415cb06
MD
6553** All includes are now referenced relative to the root directory
6554
6555Since some users have had problems with mixups between Guile and
6556system headers, we have decided to always refer to Guile headers via
6557their parent directories. This essentially creates a "private name
6558space" for Guile headers. This means that the compiler only is given
6559-I options for the root build and root source directory.
6560
341f78c9
MD
6561** Header files kw.h and genio.h have been removed.
6562
6563** The module (ice-9 getopt-gnu-style) has been removed.
6564
e8855f8d
MD
6565** New module (ice-9 documentation)
6566
6567Implements the interface to documentation strings associated with
6568objects.
6569
0c0ffe09
KN
6570** New module (ice-9 time)
6571
6572Provides a macro `time', which displays execution time of a given form.
6573
cf7a5ee5
KN
6574** New module (ice-9 history)
6575
6576Loading this module enables value history in the repl.
6577
0af43c4a 6578* Changes to the stand-alone interpreter
bd9e24b3 6579
67ef2dca
MD
6580** New command line option --debug
6581
6582Start Guile with debugging evaluator and backtraces enabled.
6583
6584This is useful when debugging your .guile init file or scripts.
6585
aa4bb95d
MD
6586** New help facility
6587
341f78c9
MD
6588Usage: (help NAME) gives documentation about objects named NAME (a symbol)
6589 (help REGEXP) ditto for objects with names matching REGEXP (a string)
58e5b910 6590 (help 'NAME) gives documentation for NAME, even if it is not an object
341f78c9 6591 (help ,EXPR) gives documentation for object returned by EXPR
6c0201ad 6592 (help (my module)) gives module commentary for `(my module)'
341f78c9
MD
6593 (help) gives this text
6594
6595`help' searches among bindings exported from loaded modules, while
6596`apropos' searches among bindings visible from the "current" module.
6597
6598Examples: (help help)
6599 (help cons)
6600 (help "output-string")
aa4bb95d 6601
e8855f8d
MD
6602** `help' and `apropos' now prints full module names
6603
0af43c4a 6604** Dynamic linking now uses libltdl from the libtool package.
bd9e24b3 6605
0af43c4a
MD
6606The old system dependent code for doing dynamic linking has been
6607replaced with calls to the libltdl functions which do all the hairy
6608details for us.
bd9e24b3 6609
0af43c4a
MD
6610The major improvement is that you can now directly pass libtool
6611library names like "libfoo.la" to `dynamic-link' and `dynamic-link'
6612will be able to do the best shared library job you can get, via
6613libltdl.
bd9e24b3 6614
0af43c4a
MD
6615The way dynamic libraries are found has changed and is not really
6616portable across platforms, probably. It is therefore recommended to
6617use absolute filenames when possible.
6618
6619If you pass a filename without an extension to `dynamic-link', it will
6620try a few appropriate ones. Thus, the most platform ignorant way is
6621to specify a name like "libfoo", without any directories and
6622extensions.
0573ddae 6623
91163914
MD
6624** Guile COOP threads are now compatible with LinuxThreads
6625
6626Previously, COOP threading wasn't possible in applications linked with
6627Linux POSIX threads due to their use of the stack pointer to find the
6628thread context. This has now been fixed with a workaround which uses
6629the pthreads to allocate the stack.
6630
6c0201ad 6631** New primitives: `pkgdata-dir', `site-dir', `library-dir'
62b82274 6632
9770d235
MD
6633** Positions of erring expression in scripts
6634
6635With version 1.3.4, the location of the erring expression in Guile
6636scipts is no longer automatically reported. (This should have been
6637documented before the 1.3.4 release.)
6638
6639You can get this information by enabling recording of positions of
6640source expressions and running the debugging evaluator. Put this at
6641the top of your script (or in your "site" file):
6642
6643 (read-enable 'positions)
6644 (debug-enable 'debug)
6645
0573ddae
MD
6646** Backtraces in scripts
6647
6648It is now possible to get backtraces in scripts.
6649
6650Put
6651
6652 (debug-enable 'debug 'backtrace)
6653
6654at the top of the script.
6655
6656(The first options enables the debugging evaluator.
6657 The second enables backtraces.)
6658
e8855f8d
MD
6659** Part of module system symbol lookup now implemented in C
6660
6661The eval closure of most modules is now implemented in C. Since this
6662was one of the bottlenecks for loading speed, Guile now loads code
6663substantially faster than before.
6664
f25f761d
GH
6665** Attempting to get the value of an unbound variable now produces
6666an exception with a key of 'unbound-variable instead of 'misc-error.
6667
1a35eadc
GH
6668** The initial default output port is now unbuffered if it's using a
6669tty device. Previously in this situation it was line-buffered.
6670
820920e6
MD
6671** New hook: after-gc-hook
6672
6673after-gc-hook takes over the role of gc-thunk. This hook is run at
6674the first SCM_TICK after a GC. (Thus, the code is run at the same
6675point during evaluation as signal handlers.)
6676
6677Note that this hook should be used only for diagnostic and debugging
6678purposes. It is not certain that it will continue to be well-defined
6679when this hook is run in the future.
6680
6681C programmers: Note the new C level hooks scm_before_gc_c_hook,
6682scm_before_sweep_c_hook, scm_after_gc_c_hook.
6683
b5074b23
MD
6684** Improvements to garbage collector
6685
6686Guile 1.4 has a new policy for triggering heap allocation and
6687determining the sizes of heap segments. It fixes a number of problems
6688in the old GC.
6689
66901. The new policy can handle two separate pools of cells
6691 (2-word/4-word) better. (The old policy would run wild, allocating
6692 more and more memory for certain programs.)
6693
66942. The old code would sometimes allocate far too much heap so that the
6695 Guile process became gigantic. The new code avoids this.
6696
66973. The old code would sometimes allocate too little so that few cells
6698 were freed at GC so that, in turn, too much time was spent in GC.
6699
67004. The old code would often trigger heap allocation several times in a
6701 row. (The new scheme predicts how large the segments needs to be
6702 in order not to need further allocation.)
6703
e8855f8d
MD
6704All in all, the new GC policy will make larger applications more
6705efficient.
6706
b5074b23
MD
6707The new GC scheme also is prepared for POSIX threading. Threads can
6708allocate private pools of cells ("clusters") with just a single
6709function call. Allocation of single cells from such a cluster can
6710then proceed without any need of inter-thread synchronization.
6711
6712** New environment variables controlling GC parameters
6713
6714GUILE_MAX_SEGMENT_SIZE Maximal segment size
6715 (default = 2097000)
6716
6717Allocation of 2-word cell heaps:
6718
6719GUILE_INIT_SEGMENT_SIZE_1 Size of initial heap segment in bytes
6720 (default = 360000)
6721
6722GUILE_MIN_YIELD_1 Minimum number of freed cells at each
6723 GC in percent of total heap size
6724 (default = 40)
6725
6726Allocation of 4-word cell heaps
6727(used for real numbers and misc other objects):
6728
6729GUILE_INIT_SEGMENT_SIZE_2, GUILE_MIN_YIELD_2
6730
6731(See entry "Way for application to customize GC parameters" under
6732 section "Changes to the scm_ interface" below.)
6733
67ef2dca
MD
6734** Guile now implements reals using 4-word cells
6735
6736This speeds up computation with reals. (They were earlier allocated
6737with `malloc'.) There is still some room for optimizations, however.
6738
6739** Some further steps toward POSIX thread support have been taken
6740
6741*** Guile's critical sections (SCM_DEFER/ALLOW_INTS)
6742don't have much effect any longer, and many of them will be removed in
6743next release.
6744
6745*** Signals
6746are only handled at the top of the evaluator loop, immediately after
6747I/O, and in scm_equalp.
6748
6749*** The GC can allocate thread private pools of pairs.
6750
0af43c4a
MD
6751* Changes to Scheme functions and syntax
6752
a0128ebe 6753** close-input-port and close-output-port are now R5RS
7c1e0b12 6754
a0128ebe 6755These procedures have been turned into primitives and have R5RS behaviour.
7c1e0b12 6756
0af43c4a
MD
6757** New procedure: simple-format PORT MESSAGE ARG1 ...
6758
6759(ice-9 boot) makes `format' an alias for `simple-format' until possibly
6760extended by the more sophisticated version in (ice-9 format)
6761
6762(simple-format port message . args)
6763Write MESSAGE to DESTINATION, defaulting to `current-output-port'.
6764MESSAGE can contain ~A (was %s) and ~S (was %S) escapes. When printed,
6765the escapes are replaced with corresponding members of ARGS:
6766~A formats using `display' and ~S formats using `write'.
6767If DESTINATION is #t, then use the `current-output-port',
6768if DESTINATION is #f, then return a string containing the formatted text.
6769Does not add a trailing newline."
6770
6771** string-ref: the second argument is no longer optional.
6772
6773** string, list->string: no longer accept strings in their arguments,
6774only characters, for compatibility with R5RS.
6775
6776** New procedure: port-closed? PORT
6777Returns #t if PORT is closed or #f if it is open.
6778
0a9e521f
MD
6779** Deprecated: list*
6780
6781The list* functionality is now provided by cons* (SRFI-1 compliant)
6782
b5074b23
MD
6783** New procedure: cons* ARG1 ARG2 ... ARGn
6784
6785Like `list', but the last arg provides the tail of the constructed list,
6786returning (cons ARG1 (cons ARG2 (cons ... ARGn))).
6787
6788Requires at least one argument. If given one argument, that argument
6789is returned as result.
6790
6791This function is called `list*' in some other Schemes and in Common LISP.
6792
341f78c9
MD
6793** Removed deprecated: serial-map, serial-array-copy!, serial-array-map!
6794
e8855f8d
MD
6795** New procedure: object-documentation OBJECT
6796
6797Returns the documentation string associated with OBJECT. The
6798procedure uses a caching mechanism so that subsequent lookups are
6799faster.
6800
6801Exported by (ice-9 documentation).
6802
6803** module-name now returns full names of modules
6804
6805Previously, only the last part of the name was returned (`session' for
6806`(ice-9 session)'). Ex: `(ice-9 session)'.
6807
894a712b
DH
6808* Changes to the gh_ interface
6809
6810** Deprecated: gh_int2scmb
6811
6812Use gh_bool2scm instead.
6813
a2349a28
GH
6814* Changes to the scm_ interface
6815
810e1aec
MD
6816** Guile primitives now carry docstrings!
6817
6818Thanks to Greg Badros!
6819
0a9e521f 6820** Guile primitives are defined in a new way: SCM_DEFINE/SCM_DEFINE1/SCM_PROC
0af43c4a 6821
0a9e521f
MD
6822Now Guile primitives are defined using the SCM_DEFINE/SCM_DEFINE1/SCM_PROC
6823macros and must contain a docstring that is extracted into foo.doc using a new
0af43c4a
MD
6824guile-doc-snarf script (that uses guile-doc-snarf.awk).
6825
0a9e521f
MD
6826However, a major overhaul of these macros is scheduled for the next release of
6827guile.
6828
0af43c4a
MD
6829** Guile primitives use a new technique for validation of arguments
6830
6831SCM_VALIDATE_* macros are defined to ease the redundancy and improve
6832the readability of argument checking.
6833
6834** All (nearly?) K&R prototypes for functions replaced with ANSI C equivalents.
6835
894a712b 6836** New macros: SCM_PACK, SCM_UNPACK
f8a72ca4
MD
6837
6838Compose/decompose an SCM value.
6839
894a712b
DH
6840The SCM type is now treated as an abstract data type and may be defined as a
6841long, a void* or as a struct, depending on the architecture and compile time
6842options. This makes it easier to find several types of bugs, for example when
6843SCM values are treated as integers without conversion. Values of the SCM type
6844should be treated as "atomic" values. These macros are used when
f8a72ca4
MD
6845composing/decomposing an SCM value, either because you want to access
6846individual bits, or because you want to treat it as an integer value.
6847
6848E.g., in order to set bit 7 in an SCM value x, use the expression
6849
6850 SCM_PACK (SCM_UNPACK (x) | 0x80)
6851
e11f8b42
DH
6852** The name property of hooks is deprecated.
6853Thus, the use of SCM_HOOK_NAME and scm_make_hook_with_name is deprecated.
6854
6855You can emulate this feature by using object properties.
6856
6c0201ad 6857** Deprecated macros: SCM_INPORTP, SCM_OUTPORTP, SCM_CRDY, SCM_ICHRP,
894a712b
DH
6858SCM_ICHR, SCM_MAKICHR, SCM_SETJMPBUF, SCM_NSTRINGP, SCM_NRWSTRINGP,
6859SCM_NVECTORP
f8a72ca4 6860
894a712b 6861These macros will be removed in a future release of Guile.
7c1e0b12 6862
6c0201ad 6863** The following types, functions and macros from numbers.h are deprecated:
0a9e521f
MD
6864scm_dblproc, SCM_UNEGFIXABLE, SCM_FLOBUFLEN, SCM_INEXP, SCM_CPLXP, SCM_REAL,
6865SCM_IMAG, SCM_REALPART, scm_makdbl, SCM_SINGP, SCM_NUM2DBL, SCM_NO_BIGDIG
6866
a2349a28
GH
6867** Port internals: the rw_random variable in the scm_port structure
6868must be set to non-zero in any random access port. In recent Guile
6869releases it was only set for bidirectional random-access ports.
6870
7dcb364d
GH
6871** Port internals: the seek ptob procedure is now responsible for
6872resetting the buffers if required. The change was made so that in the
6873special case of reading the current position (i.e., seek p 0 SEEK_CUR)
6874the fport and strport ptobs can avoid resetting the buffers,
6875in particular to avoid discarding unread chars. An existing port
6876type can be fixed by adding something like the following to the
6877beginning of the ptob seek procedure:
6878
6879 if (pt->rw_active == SCM_PORT_READ)
6880 scm_end_input (object);
6881 else if (pt->rw_active == SCM_PORT_WRITE)
6882 ptob->flush (object);
6883
6884although to actually avoid resetting the buffers and discard unread
6885chars requires further hacking that depends on the characteristics
6886of the ptob.
6887
894a712b
DH
6888** Deprecated functions: scm_fseek, scm_tag
6889
6890These functions are no longer used and will be removed in a future version.
6891
f25f761d
GH
6892** The scm_sysmissing procedure is no longer used in libguile.
6893Unless it turns out to be unexpectedly useful to somebody, it will be
6894removed in a future version.
6895
0af43c4a
MD
6896** The format of error message strings has changed
6897
6898The two C procedures: scm_display_error and scm_error, as well as the
6899primitive `scm-error', now use scm_simple_format to do their work.
6900This means that the message strings of all code must be updated to use
6901~A where %s was used before, and ~S where %S was used before.
6902
6903During the period when there still are a lot of old Guiles out there,
6904you might want to support both old and new versions of Guile.
6905
6906There are basically two methods to achieve this. Both methods use
6907autoconf. Put
6908
6909 AC_CHECK_FUNCS(scm_simple_format)
6910
6911in your configure.in.
6912
6913Method 1: Use the string concatenation features of ANSI C's
6914 preprocessor.
6915
6916In C:
6917
6918#ifdef HAVE_SCM_SIMPLE_FORMAT
6919#define FMT_S "~S"
6920#else
6921#define FMT_S "%S"
6922#endif
6923
6924Then represent each of your error messages using a preprocessor macro:
6925
6926#define E_SPIDER_ERROR "There's a spider in your " ## FMT_S ## "!!!"
6927
6928In Scheme:
6929
6930(define fmt-s (if (defined? 'simple-format) "~S" "%S"))
6931(define make-message string-append)
6932
6933(define e-spider-error (make-message "There's a spider in your " fmt-s "!!!"))
6934
6935Method 2: Use the oldfmt function found in doc/oldfmt.c.
6936
6937In C:
6938
6939scm_misc_error ("picnic", scm_c_oldfmt0 ("There's a spider in your ~S!!!"),
6940 ...);
6941
6942In Scheme:
6943
6944(scm-error 'misc-error "picnic" (oldfmt "There's a spider in your ~S!!!")
6945 ...)
6946
6947
f3b5e185
MD
6948** Deprecated: coop_mutex_init, coop_condition_variable_init
6949
6950Don't use the functions coop_mutex_init and
6951coop_condition_variable_init. They will change.
6952
6953Use scm_mutex_init and scm_cond_init instead.
6954
f3b5e185
MD
6955** New function: int scm_cond_timedwait (scm_cond_t *COND, scm_mutex_t *MUTEX, const struct timespec *ABSTIME)
6956 `scm_cond_timedwait' atomically unlocks MUTEX and waits on
6957 COND, as `scm_cond_wait' does, but it also bounds the duration
6958 of the wait. If COND has not been signaled before time ABSTIME,
6959 the mutex MUTEX is re-acquired and `scm_cond_timedwait'
6960 returns the error code `ETIMEDOUT'.
6961
6962 The ABSTIME parameter specifies an absolute time, with the same
6963 origin as `time' and `gettimeofday': an ABSTIME of 0 corresponds
6964 to 00:00:00 GMT, January 1, 1970.
6965
6966** New function: scm_cond_broadcast (scm_cond_t *COND)
6967 `scm_cond_broadcast' restarts all the threads that are waiting
6968 on the condition variable COND. Nothing happens if no threads are
6969 waiting on COND.
6970
6971** New function: scm_key_create (scm_key_t *KEY, void (*destr_function) (void *))
6972 `scm_key_create' allocates a new TSD key. The key is stored in
6973 the location pointed to by KEY. There is no limit on the number
6974 of keys allocated at a given time. The value initially associated
6975 with the returned key is `NULL' in all currently executing threads.
6976
6977 The DESTR_FUNCTION argument, if not `NULL', specifies a destructor
6978 function associated with the key. When a thread terminates,
6979 DESTR_FUNCTION is called on the value associated with the key in
6980 that thread. The DESTR_FUNCTION is not called if a key is deleted
6981 with `scm_key_delete' or a value is changed with
6982 `scm_setspecific'. The order in which destructor functions are
6983 called at thread termination time is unspecified.
6984
6985 Destructors are not yet implemented.
6986
6987** New function: scm_setspecific (scm_key_t KEY, const void *POINTER)
6988 `scm_setspecific' changes the value associated with KEY in the
6989 calling thread, storing the given POINTER instead.
6990
6991** New function: scm_getspecific (scm_key_t KEY)
6992 `scm_getspecific' returns the value currently associated with
6993 KEY in the calling thread.
6994
6995** New function: scm_key_delete (scm_key_t KEY)
6996 `scm_key_delete' deallocates a TSD key. It does not check
6997 whether non-`NULL' values are associated with that key in the
6998 currently executing threads, nor call the destructor function
6999 associated with the key.
7000
820920e6
MD
7001** New function: scm_c_hook_init (scm_c_hook_t *HOOK, void *HOOK_DATA, scm_c_hook_type_t TYPE)
7002
7003Initialize a C level hook HOOK with associated HOOK_DATA and type
7004TYPE. (See scm_c_hook_run ().)
7005
7006** New function: scm_c_hook_add (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA, int APPENDP)
7007
7008Add hook function FUNC with associated FUNC_DATA to HOOK. If APPENDP
7009is true, add it last, otherwise first. The same FUNC can be added
7010multiple times if FUNC_DATA differ and vice versa.
7011
7012** New function: scm_c_hook_remove (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA)
7013
7014Remove hook function FUNC with associated FUNC_DATA from HOOK. A
7015function is only removed if both FUNC and FUNC_DATA matches.
7016
7017** New function: void *scm_c_hook_run (scm_c_hook_t *HOOK, void *DATA)
7018
7019Run hook HOOK passing DATA to the hook functions.
7020
7021If TYPE is SCM_C_HOOK_NORMAL, all hook functions are run. The value
7022returned is undefined.
7023
7024If TYPE is SCM_C_HOOK_OR, hook functions are run until a function
7025returns a non-NULL value. This value is returned as the result of
7026scm_c_hook_run. If all functions return NULL, NULL is returned.
7027
7028If TYPE is SCM_C_HOOK_AND, hook functions are run until a function
7029returns a NULL value, and NULL is returned. If all functions returns
7030a non-NULL value, the last value is returned.
7031
7032** New C level GC hooks
7033
7034Five new C level hooks has been added to the garbage collector.
7035
7036 scm_before_gc_c_hook
7037 scm_after_gc_c_hook
7038
7039are run before locking and after unlocking the heap. The system is
7040thus in a mode where evaluation can take place. (Except that
7041scm_before_gc_c_hook must not allocate new cells.)
7042
7043 scm_before_mark_c_hook
7044 scm_before_sweep_c_hook
7045 scm_after_sweep_c_hook
7046
7047are run when the heap is locked. These are intended for extension of
7048the GC in a modular fashion. Examples are the weaks and guardians
7049modules.
7050
b5074b23
MD
7051** Way for application to customize GC parameters
7052
7053The application can set up other default values for the GC heap
7054allocation parameters
7055
7056 GUILE_INIT_HEAP_SIZE_1, GUILE_MIN_YIELD_1,
7057 GUILE_INIT_HEAP_SIZE_2, GUILE_MIN_YIELD_2,
7058 GUILE_MAX_SEGMENT_SIZE,
7059
7060by setting
7061
7062 scm_default_init_heap_size_1, scm_default_min_yield_1,
7063 scm_default_init_heap_size_2, scm_default_min_yield_2,
7064 scm_default_max_segment_size
7065
7066respectively before callong scm_boot_guile.
7067
7068(See entry "New environment variables ..." in section
7069"Changes to the stand-alone interpreter" above.)
7070
9704841c
MD
7071** scm_protect_object/scm_unprotect_object now nest
7072
67ef2dca
MD
7073This means that you can call scm_protect_object multiple times on an
7074object and count on the object being protected until
7075scm_unprotect_object has been call the same number of times.
7076
7077The functions also have better time complexity.
7078
7079Still, it is usually possible to structure the application in a way
7080that you don't need to use these functions. For example, if you use a
7081protected standard Guile list to keep track of live objects rather
7082than some custom data type, objects will die a natural death when they
7083are no longer needed.
7084
0a9e521f
MD
7085** Deprecated type tags: scm_tc16_flo, scm_tc_flo, scm_tc_dblr, scm_tc_dblc
7086
7087Guile does not provide the float representation for inexact real numbers any
7088more. Now, only doubles are used to represent inexact real numbers. Further,
7089the tag names scm_tc_dblr and scm_tc_dblc have been changed to scm_tc16_real
7090and scm_tc16_complex, respectively.
7091
341f78c9
MD
7092** Removed deprecated type scm_smobfuns
7093
7094** Removed deprecated function scm_newsmob
7095
b5074b23
MD
7096** Warning: scm_make_smob_type_mfpe might become deprecated in a future release
7097
7098There is an ongoing discussion among the developers whether to
7099deprecate `scm_make_smob_type_mfpe' or not. Please use the current
7100standard interface (scm_make_smob_type, scm_set_smob_XXX) in new code
7101until this issue has been settled.
7102
341f78c9
MD
7103** Removed deprecated type tag scm_tc16_kw
7104
2728d7f4
MD
7105** Added type tag scm_tc16_keyword
7106
7107(This was introduced already in release 1.3.4 but was not documented
7108 until now.)
7109
67ef2dca
MD
7110** gdb_print now prints "*** Guile not initialized ***" until Guile initialized
7111
f25f761d
GH
7112* Changes to system call interfaces:
7113
28d77376
GH
7114** The "select" procedure now tests port buffers for the ability to
7115provide input or accept output. Previously only the underlying file
7116descriptors were checked.
7117
bd9e24b3
GH
7118** New variable PIPE_BUF: the maximum number of bytes that can be
7119atomically written to a pipe.
7120
f25f761d
GH
7121** If a facility is not available on the system when Guile is
7122compiled, the corresponding primitive procedure will not be defined.
7123Previously it would have been defined but would throw a system-error
7124exception if called. Exception handlers which catch this case may
7125need minor modification: an error will be thrown with key
7126'unbound-variable instead of 'system-error. Alternatively it's
7127now possible to use `defined?' to check whether the facility is
7128available.
7129
38c1d3c4 7130** Procedures which depend on the timezone should now give the correct
6c0201ad 7131result on systems which cache the TZ environment variable, even if TZ
38c1d3c4
GH
7132is changed without calling tzset.
7133
5c11cc9d
GH
7134* Changes to the networking interfaces:
7135
7136** New functions: htons, ntohs, htonl, ntohl: for converting short and
7137long integers between network and host format. For now, it's not
7138particularly convenient to do this kind of thing, but consider:
7139
7140(define write-network-long
7141 (lambda (value port)
7142 (let ((v (make-uniform-vector 1 1 0)))
7143 (uniform-vector-set! v 0 (htonl value))
7144 (uniform-vector-write v port))))
7145
7146(define read-network-long
7147 (lambda (port)
7148 (let ((v (make-uniform-vector 1 1 0)))
7149 (uniform-vector-read! v port)
7150 (ntohl (uniform-vector-ref v 0)))))
7151
7152** If inet-aton fails, it now throws an error with key 'misc-error
7153instead of 'system-error, since errno is not relevant.
7154
7155** Certain gethostbyname/gethostbyaddr failures now throw errors with
7156specific keys instead of 'system-error. The latter is inappropriate
7157since errno will not have been set. The keys are:
afe5177e 7158'host-not-found, 'try-again, 'no-recovery and 'no-data.
5c11cc9d
GH
7159
7160** sethostent, setnetent, setprotoent, setservent: now take an
7161optional argument STAYOPEN, which specifies whether the database
7162remains open after a database entry is accessed randomly (e.g., using
7163gethostbyname for the hosts database.) The default is #f. Previously
7164#t was always used.
7165
cc36e791 7166\f
43fa9a05
JB
7167Changes since Guile 1.3.2:
7168
0fdcbcaa
MD
7169* Changes to the stand-alone interpreter
7170
7171** Debugger
7172
7173An initial version of the Guile debugger written by Chris Hanson has
7174been added. The debugger is still under development but is included
7175in the distribution anyway since it is already quite useful.
7176
7177Type
7178
7179 (debug)
7180
7181after an error to enter the debugger. Type `help' inside the debugger
7182for a description of available commands.
7183
7184If you prefer to have stack frames numbered and printed in
7185anti-chronological order and prefer up in the stack to be down on the
7186screen as is the case in gdb, you can put
7187
7188 (debug-enable 'backwards)
7189
7190in your .guile startup file. (However, this means that Guile can't
7191use indentation to indicate stack level.)
7192
7193The debugger is autoloaded into Guile at the first use.
7194
7195** Further enhancements to backtraces
7196
7197There is a new debug option `width' which controls the maximum width
7198on the screen of printed stack frames. Fancy printing parameters
7199("level" and "length" as in Common LISP) are adaptively adjusted for
7200each stack frame to give maximum information while still fitting
7201within the bounds. If the stack frame can't be made to fit by
7202adjusting parameters, it is simply cut off at the end. This is marked
7203with a `$'.
7204
7205** Some modules are now only loaded when the repl is started
7206
7207The modules (ice-9 debug), (ice-9 session), (ice-9 threads) and (ice-9
7208regex) are now loaded into (guile-user) only if the repl has been
7209started. The effect is that the startup time for scripts has been
7210reduced to 30% of what it was previously.
7211
7212Correctly written scripts load the modules they require at the top of
7213the file and should not be affected by this change.
7214
ece41168
MD
7215** Hooks are now represented as smobs
7216
6822fe53
MD
7217* Changes to Scheme functions and syntax
7218
0ce204b0
MV
7219** Readline support has changed again.
7220
7221The old (readline-activator) module is gone. Use (ice-9 readline)
7222instead, which now contains all readline functionality. So the code
7223to activate readline is now
7224
7225 (use-modules (ice-9 readline))
7226 (activate-readline)
7227
7228This should work at any time, including from the guile prompt.
7229
5d195868
JB
7230To avoid confusion about the terms of Guile's license, please only
7231enable readline for your personal use; please don't make it the
7232default for others. Here is why we make this rather odd-sounding
7233request:
7234
7235Guile is normally licensed under a weakened form of the GNU General
7236Public License, which allows you to link code with Guile without
7237placing that code under the GPL. This exception is important to some
7238people.
7239
7240However, since readline is distributed under the GNU General Public
7241License, when you link Guile with readline, either statically or
7242dynamically, you effectively change Guile's license to the strict GPL.
7243Whenever you link any strictly GPL'd code into Guile, uses of Guile
7244which are normally permitted become forbidden. This is a rather
7245non-obvious consequence of the licensing terms.
7246
7247So, to make sure things remain clear, please let people choose for
7248themselves whether to link GPL'd libraries like readline with Guile.
7249
25b0654e
JB
7250** regexp-substitute/global has changed slightly, but incompatibly.
7251
7252If you include a function in the item list, the string of the match
7253object it receives is the same string passed to
7254regexp-substitute/global, not some suffix of that string.
7255Correspondingly, the match's positions are relative to the entire
7256string, not the suffix.
7257
7258If the regexp can match the empty string, the way matches are chosen
7259from the string has changed. regexp-substitute/global recognizes the
7260same set of matches that list-matches does; see below.
7261
7262** New function: list-matches REGEXP STRING [FLAGS]
7263
7264Return a list of match objects, one for every non-overlapping, maximal
7265match of REGEXP in STRING. The matches appear in left-to-right order.
7266list-matches only reports matches of the empty string if there are no
7267other matches which begin on, end at, or include the empty match's
7268position.
7269
7270If present, FLAGS is passed as the FLAGS argument to regexp-exec.
7271
7272** New function: fold-matches REGEXP STRING INIT PROC [FLAGS]
7273
7274For each match of REGEXP in STRING, apply PROC to the match object,
7275and the last value PROC returned, or INIT for the first call. Return
7276the last value returned by PROC. We apply PROC to the matches as they
7277appear from left to right.
7278
7279This function recognizes matches according to the same criteria as
7280list-matches.
7281
7282Thus, you could define list-matches like this:
7283
7284 (define (list-matches regexp string . flags)
7285 (reverse! (apply fold-matches regexp string '() cons flags)))
7286
7287If present, FLAGS is passed as the FLAGS argument to regexp-exec.
7288
bc848f7f
MD
7289** Hooks
7290
7291*** New function: hook? OBJ
7292
7293Return #t if OBJ is a hook, otherwise #f.
7294
ece41168
MD
7295*** New function: make-hook-with-name NAME [ARITY]
7296
7297Return a hook with name NAME and arity ARITY. The default value for
7298ARITY is 0. The only effect of NAME is that it will appear when the
7299hook object is printed to ease debugging.
7300
bc848f7f
MD
7301*** New function: hook-empty? HOOK
7302
7303Return #t if HOOK doesn't contain any procedures, otherwise #f.
7304
7305*** New function: hook->list HOOK
7306
7307Return a list of the procedures that are called when run-hook is
7308applied to HOOK.
7309
b074884f
JB
7310** `map' signals an error if its argument lists are not all the same length.
7311
7312This is the behavior required by R5RS, so this change is really a bug
7313fix. But it seems to affect a lot of people's code, so we're
7314mentioning it here anyway.
7315
6822fe53
MD
7316** Print-state handling has been made more transparent
7317
7318Under certain circumstances, ports are represented as a port with an
7319associated print state. Earlier, this pair was represented as a pair
7320(see "Some magic has been added to the printer" below). It is now
7321indistinguishable (almost; see `get-print-state') from a port on the
7322user level.
7323
7324*** New function: port-with-print-state OUTPUT-PORT PRINT-STATE
7325
7326Return a new port with the associated print state PRINT-STATE.
7327
7328*** New function: get-print-state OUTPUT-PORT
7329
7330Return the print state associated with this port if it exists,
7331otherwise return #f.
7332
340a8770 7333*** New function: directory-stream? OBJECT
77242ff9 7334
340a8770 7335Returns true iff OBJECT is a directory stream --- the sort of object
77242ff9
GH
7336returned by `opendir'.
7337
0fdcbcaa
MD
7338** New function: using-readline?
7339
7340Return #t if readline is in use in the current repl.
7341
26405bc1
MD
7342** structs will be removed in 1.4
7343
7344Structs will be replaced in Guile 1.4. We will merge GOOPS into Guile
7345and use GOOPS objects as the fundamental record type.
7346
49199eaa
MD
7347* Changes to the scm_ interface
7348
26405bc1
MD
7349** structs will be removed in 1.4
7350
7351The entire current struct interface (struct.c, struct.h) will be
7352replaced in Guile 1.4. We will merge GOOPS into libguile and use
7353GOOPS objects as the fundamental record type.
7354
49199eaa
MD
7355** The internal representation of subr's has changed
7356
7357Instead of giving a hint to the subr name, the CAR field of the subr
7358now contains an index to a subr entry in scm_subr_table.
7359
7360*** New variable: scm_subr_table
7361
7362An array of subr entries. A subr entry contains the name, properties
7363and documentation associated with the subr. The properties and
7364documentation slots are not yet used.
7365
7366** A new scheme for "forwarding" calls to a builtin to a generic function
7367
7368It is now possible to extend the functionality of some Guile
7369primitives by letting them defer a call to a GOOPS generic function on
240ed66f 7370argument mismatch. This means that there is no loss of efficiency in
daf516d6 7371normal evaluation.
49199eaa
MD
7372
7373Example:
7374
daf516d6 7375 (use-modules (oop goops)) ; Must be GOOPS version 0.2.
49199eaa
MD
7376 (define-method + ((x <string>) (y <string>))
7377 (string-append x y))
7378
86a4d62e
MD
7379+ will still be as efficient as usual in numerical calculations, but
7380can also be used for concatenating strings.
49199eaa 7381
86a4d62e 7382Who will be the first one to extend Guile's numerical tower to
daf516d6
MD
7383rationals? :) [OK, there a few other things to fix before this can
7384be made in a clean way.]
49199eaa
MD
7385
7386*** New snarf macros for defining primitives: SCM_GPROC, SCM_GPROC1
7387
7388 New macro: SCM_GPROC (CNAME, SNAME, REQ, OPT, VAR, CFUNC, GENERIC)
7389
7390 New macro: SCM_GPROC1 (CNAME, SNAME, TYPE, CFUNC, GENERIC)
7391
d02cafe7 7392These do the same job as SCM_PROC and SCM_PROC1, but they also define
49199eaa
MD
7393a variable GENERIC which can be used by the dispatch macros below.
7394
7395[This is experimental code which may change soon.]
7396
7397*** New macros for forwarding control to a generic on arg type error
7398
7399 New macro: SCM_WTA_DISPATCH_1 (GENERIC, ARG1, POS, SUBR)
7400
7401 New macro: SCM_WTA_DISPATCH_2 (GENERIC, ARG1, ARG2, POS, SUBR)
7402
7403These correspond to the scm_wta function call, and have the same
7404behaviour until the user has called the GOOPS primitive
7405`enable-primitive-generic!'. After that, these macros will apply the
7406generic function GENERIC to the argument(s) instead of calling
7407scm_wta.
7408
7409[This is experimental code which may change soon.]
7410
7411*** New macros for argument testing with generic dispatch
7412
7413 New macro: SCM_GASSERT1 (COND, GENERIC, ARG1, POS, SUBR)
7414
7415 New macro: SCM_GASSERT2 (COND, GENERIC, ARG1, ARG2, POS, SUBR)
7416
7417These correspond to the SCM_ASSERT macro, but will defer control to
7418GENERIC on error after `enable-primitive-generic!' has been called.
7419
7420[This is experimental code which may change soon.]
7421
7422** New function: SCM scm_eval_body (SCM body, SCM env)
7423
7424Evaluates the body of a special form.
7425
7426** The internal representation of struct's has changed
7427
7428Previously, four slots were allocated for the procedure(s) of entities
7429and operators. The motivation for this representation had to do with
7430the structure of the evaluator, the wish to support tail-recursive
7431generic functions, and efficiency. Since the generic function
7432dispatch mechanism has changed, there is no longer a need for such an
7433expensive representation, and the representation has been simplified.
7434
7435This should not make any difference for most users.
7436
7437** GOOPS support has been cleaned up.
7438
7439Some code has been moved from eval.c to objects.c and code in both of
7440these compilation units has been cleaned up and better structured.
7441
7442*** New functions for applying generic functions
7443
7444 New function: SCM scm_apply_generic (GENERIC, ARGS)
7445 New function: SCM scm_call_generic_0 (GENERIC)
7446 New function: SCM scm_call_generic_1 (GENERIC, ARG1)
7447 New function: SCM scm_call_generic_2 (GENERIC, ARG1, ARG2)
7448 New function: SCM scm_call_generic_3 (GENERIC, ARG1, ARG2, ARG3)
7449
ece41168
MD
7450** Deprecated function: scm_make_named_hook
7451
7452It is now replaced by:
7453
7454** New function: SCM scm_create_hook (const char *name, int arity)
7455
7456Creates a hook in the same way as make-hook above but also
7457binds a variable named NAME to it.
7458
7459This is the typical way of creating a hook from C code.
7460
7461Currently, the variable is created in the "current" module.
7462This might change when we get the new module system.
7463
7464[The behaviour is identical to scm_make_named_hook.]
7465
7466
43fa9a05 7467\f
f3227c7a
JB
7468Changes since Guile 1.3:
7469
6ca345f3
JB
7470* Changes to mailing lists
7471
7472** Some of the Guile mailing lists have moved to sourceware.cygnus.com.
7473
7474See the README file to find current addresses for all the Guile
7475mailing lists.
7476
d77fb593
JB
7477* Changes to the distribution
7478
1d335863
JB
7479** Readline support is no longer included with Guile by default.
7480
7481Based on the different license terms of Guile and Readline, we
7482concluded that Guile should not *by default* cause the linking of
7483Readline into an application program. Readline support is now offered
7484as a separate module, which is linked into an application only when
7485you explicitly specify it.
7486
7487Although Guile is GNU software, its distribution terms add a special
7488exception to the usual GNU General Public License (GPL). Guile's
7489license includes a clause that allows you to link Guile with non-free
7490programs. We add this exception so as not to put Guile at a
7491disadvantage vis-a-vis other extensibility packages that support other
7492languages.
7493
7494In contrast, the GNU Readline library is distributed under the GNU
7495General Public License pure and simple. This means that you may not
7496link Readline, even dynamically, into an application unless it is
7497distributed under a free software license that is compatible the GPL.
7498
7499Because of this difference in distribution terms, an application that
7500can use Guile may not be able to use Readline. Now users will be
7501explicitly offered two independent decisions about the use of these
7502two packages.
d77fb593 7503
0e8a8468
MV
7504You can activate the readline support by issuing
7505
7506 (use-modules (readline-activator))
7507 (activate-readline)
7508
7509from your ".guile" file, for example.
7510
e4eae9b1
MD
7511* Changes to the stand-alone interpreter
7512
67ad463a
MD
7513** All builtins now print as primitives.
7514Previously builtin procedures not belonging to the fundamental subr
7515types printed as #<compiled closure #<primitive-procedure gsubr-apply>>.
7516Now, they print as #<primitive-procedure NAME>.
7517
7518** Backtraces slightly more intelligible.
7519gsubr-apply and macro transformer application frames no longer appear
7520in backtraces.
7521
69c6acbb
JB
7522* Changes to Scheme functions and syntax
7523
2a52b429
MD
7524** Guile now correctly handles internal defines by rewriting them into
7525their equivalent letrec. Previously, internal defines would
7526incrementally add to the innermost environment, without checking
7527whether the restrictions specified in RnRS were met. This lead to the
7528correct behaviour when these restriction actually were met, but didn't
7529catch all illegal uses. Such an illegal use could lead to crashes of
b3da54d1 7530the Guile interpreter or other unwanted results. An example of
2a52b429
MD
7531incorrect internal defines that made Guile behave erratically:
7532
7533 (let ()
7534 (define a 1)
7535 (define (b) a)
7536 (define c (1+ (b)))
7537 (define d 3)
7538
7539 (b))
7540
7541 => 2
7542
7543The problem with this example is that the definition of `c' uses the
7544value of `b' directly. This confuses the meoization machine of Guile
7545so that the second call of `b' (this time in a larger environment that
7546also contains bindings for `c' and `d') refers to the binding of `c'
7547instead of `a'. You could also make Guile crash with a variation on
7548this theme:
7549
7550 (define (foo flag)
7551 (define a 1)
7552 (define (b flag) (if flag a 1))
7553 (define c (1+ (b flag)))
7554 (define d 3)
7555
7556 (b #t))
7557
7558 (foo #f)
7559 (foo #t)
7560
7561From now on, Guile will issue an `Unbound variable: b' error message
7562for both examples.
7563
36d3d540
MD
7564** Hooks
7565
7566A hook contains a list of functions which should be called on
7567particular occasions in an existing program. Hooks are used for
7568customization.
7569
7570A window manager might have a hook before-window-map-hook. The window
7571manager uses the function run-hooks to call all functions stored in
7572before-window-map-hook each time a window is mapped. The user can
7573store functions in the hook using add-hook!.
7574
7575In Guile, hooks are first class objects.
7576
7577*** New function: make-hook [N_ARGS]
7578
7579Return a hook for hook functions which can take N_ARGS arguments.
7580The default value for N_ARGS is 0.
7581
ad91d6c3
MD
7582(See also scm_make_named_hook below.)
7583
36d3d540
MD
7584*** New function: add-hook! HOOK PROC [APPEND_P]
7585
7586Put PROC at the beginning of the list of functions stored in HOOK.
7587If APPEND_P is supplied, and non-false, put PROC at the end instead.
7588
7589PROC must be able to take the number of arguments specified when the
7590hook was created.
7591
7592If PROC already exists in HOOK, then remove it first.
7593
7594*** New function: remove-hook! HOOK PROC
7595
7596Remove PROC from the list of functions in HOOK.
7597
7598*** New function: reset-hook! HOOK
7599
7600Clear the list of hook functions stored in HOOK.
7601
7602*** New function: run-hook HOOK ARG1 ...
7603
7604Run all hook functions stored in HOOK with arguments ARG1 ... .
7605The number of arguments supplied must correspond to the number given
7606when the hook was created.
7607
56a19408
MV
7608** The function `dynamic-link' now takes optional keyword arguments.
7609 The only keyword argument that is currently defined is `:global
7610 BOOL'. With it, you can control whether the shared library will be
7611 linked in global mode or not. In global mode, the symbols from the
7612 linked library can be used to resolve references from other
7613 dynamically linked libraries. In non-global mode, the linked
7614 library is essentially invisible and can only be accessed via
7615 `dynamic-func', etc. The default is now to link in global mode.
7616 Previously, the default has been non-global mode.
7617
7618 The `#:global' keyword is only effective on platforms that support
7619 the dlopen family of functions.
7620
ad226f25 7621** New function `provided?'
b7e13f65
JB
7622
7623 - Function: provided? FEATURE
7624 Return true iff FEATURE is supported by this installation of
7625 Guile. FEATURE must be a symbol naming a feature; the global
7626 variable `*features*' is a list of available features.
7627
ad226f25
JB
7628** Changes to the module (ice-9 expect):
7629
7630*** The expect-strings macro now matches `$' in a regular expression
7631 only at a line-break or end-of-file by default. Previously it would
ab711359
JB
7632 match the end of the string accumulated so far. The old behaviour
7633 can be obtained by setting the variable `expect-strings-exec-flags'
7634 to 0.
ad226f25
JB
7635
7636*** The expect-strings macro now uses a variable `expect-strings-exec-flags'
7637 for the regexp-exec flags. If `regexp/noteol' is included, then `$'
7638 in a regular expression will still match before a line-break or
7639 end-of-file. The default is `regexp/noteol'.
7640
6c0201ad 7641*** The expect-strings macro now uses a variable
ad226f25
JB
7642 `expect-strings-compile-flags' for the flags to be supplied to
7643 `make-regexp'. The default is `regexp/newline', which was previously
7644 hard-coded.
7645
7646*** The expect macro now supplies two arguments to a match procedure:
ab711359
JB
7647 the current accumulated string and a flag to indicate whether
7648 end-of-file has been reached. Previously only the string was supplied.
7649 If end-of-file is reached, the match procedure will be called an
7650 additional time with the same accumulated string as the previous call
7651 but with the flag set.
ad226f25 7652
b7e13f65
JB
7653** New module (ice-9 format), implementing the Common Lisp `format' function.
7654
7655This code, and the documentation for it that appears here, was
7656borrowed from SLIB, with minor adaptations for Guile.
7657
7658 - Function: format DESTINATION FORMAT-STRING . ARGUMENTS
7659 An almost complete implementation of Common LISP format description
7660 according to the CL reference book `Common LISP' from Guy L.
7661 Steele, Digital Press. Backward compatible to most of the
7662 available Scheme format implementations.
7663
7664 Returns `#t', `#f' or a string; has side effect of printing
7665 according to FORMAT-STRING. If DESTINATION is `#t', the output is
7666 to the current output port and `#t' is returned. If DESTINATION
7667 is `#f', a formatted string is returned as the result of the call.
7668 NEW: If DESTINATION is a string, DESTINATION is regarded as the
7669 format string; FORMAT-STRING is then the first argument and the
7670 output is returned as a string. If DESTINATION is a number, the
7671 output is to the current error port if available by the
7672 implementation. Otherwise DESTINATION must be an output port and
7673 `#t' is returned.
7674
7675 FORMAT-STRING must be a string. In case of a formatting error
7676 format returns `#f' and prints a message on the current output or
7677 error port. Characters are output as if the string were output by
7678 the `display' function with the exception of those prefixed by a
7679 tilde (~). For a detailed description of the FORMAT-STRING syntax
7680 please consult a Common LISP format reference manual. For a test
7681 suite to verify this format implementation load `formatst.scm'.
7682 Please send bug reports to `lutzeb@cs.tu-berlin.de'.
7683
7684 Note: `format' is not reentrant, i.e. only one `format'-call may
7685 be executed at a time.
7686
7687
7688*** Format Specification (Format version 3.0)
7689
7690 Please consult a Common LISP format reference manual for a detailed
7691description of the format string syntax. For a demonstration of the
7692implemented directives see `formatst.scm'.
7693
7694 This implementation supports directive parameters and modifiers (`:'
7695and `@' characters). Multiple parameters must be separated by a comma
7696(`,'). Parameters can be numerical parameters (positive or negative),
7697character parameters (prefixed by a quote character (`''), variable
7698parameters (`v'), number of rest arguments parameter (`#'), empty and
7699default parameters. Directive characters are case independent. The
7700general form of a directive is:
7701
7702DIRECTIVE ::= ~{DIRECTIVE-PARAMETER,}[:][@]DIRECTIVE-CHARACTER
7703
7704DIRECTIVE-PARAMETER ::= [ [-|+]{0-9}+ | 'CHARACTER | v | # ]
7705
7706*** Implemented CL Format Control Directives
7707
7708 Documentation syntax: Uppercase characters represent the
7709corresponding control directive characters. Lowercase characters
7710represent control directive parameter descriptions.
7711
7712`~A'
7713 Any (print as `display' does).
7714 `~@A'
7715 left pad.
7716
7717 `~MINCOL,COLINC,MINPAD,PADCHARA'
7718 full padding.
7719
7720`~S'
7721 S-expression (print as `write' does).
7722 `~@S'
7723 left pad.
7724
7725 `~MINCOL,COLINC,MINPAD,PADCHARS'
7726 full padding.
7727
7728`~D'
7729 Decimal.
7730 `~@D'
7731 print number sign always.
7732
7733 `~:D'
7734 print comma separated.
7735
7736 `~MINCOL,PADCHAR,COMMACHARD'
7737 padding.
7738
7739`~X'
7740 Hexadecimal.
7741 `~@X'
7742 print number sign always.
7743
7744 `~:X'
7745 print comma separated.
7746
7747 `~MINCOL,PADCHAR,COMMACHARX'
7748 padding.
7749
7750`~O'
7751 Octal.
7752 `~@O'
7753 print number sign always.
7754
7755 `~:O'
7756 print comma separated.
7757
7758 `~MINCOL,PADCHAR,COMMACHARO'
7759 padding.
7760
7761`~B'
7762 Binary.
7763 `~@B'
7764 print number sign always.
7765
7766 `~:B'
7767 print comma separated.
7768
7769 `~MINCOL,PADCHAR,COMMACHARB'
7770 padding.
7771
7772`~NR'
7773 Radix N.
7774 `~N,MINCOL,PADCHAR,COMMACHARR'
7775 padding.
7776
7777`~@R'
7778 print a number as a Roman numeral.
7779
7780`~:@R'
7781 print a number as an "old fashioned" Roman numeral.
7782
7783`~:R'
7784 print a number as an ordinal English number.
7785
7786`~:@R'
7787 print a number as a cardinal English number.
7788
7789`~P'
7790 Plural.
7791 `~@P'
7792 prints `y' and `ies'.
7793
7794 `~:P'
7795 as `~P but jumps 1 argument backward.'
7796
7797 `~:@P'
7798 as `~@P but jumps 1 argument backward.'
7799
7800`~C'
7801 Character.
7802 `~@C'
7803 prints a character as the reader can understand it (i.e. `#\'
7804 prefixing).
7805
7806 `~:C'
7807 prints a character as emacs does (eg. `^C' for ASCII 03).
7808
7809`~F'
7810 Fixed-format floating-point (prints a flonum like MMM.NNN).
7811 `~WIDTH,DIGITS,SCALE,OVERFLOWCHAR,PADCHARF'
7812 `~@F'
7813 If the number is positive a plus sign is printed.
7814
7815`~E'
7816 Exponential floating-point (prints a flonum like MMM.NNN`E'EE).
7817 `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARE'
7818 `~@E'
7819 If the number is positive a plus sign is printed.
7820
7821`~G'
7822 General floating-point (prints a flonum either fixed or
7823 exponential).
7824 `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARG'
7825 `~@G'
7826 If the number is positive a plus sign is printed.
7827
7828`~$'
7829 Dollars floating-point (prints a flonum in fixed with signs
7830 separated).
7831 `~DIGITS,SCALE,WIDTH,PADCHAR$'
7832 `~@$'
7833 If the number is positive a plus sign is printed.
7834
7835 `~:@$'
7836 A sign is always printed and appears before the padding.
7837
7838 `~:$'
7839 The sign appears before the padding.
7840
7841`~%'
7842 Newline.
7843 `~N%'
7844 print N newlines.
7845
7846`~&'
7847 print newline if not at the beginning of the output line.
7848 `~N&'
7849 prints `~&' and then N-1 newlines.
7850
7851`~|'
7852 Page Separator.
7853 `~N|'
7854 print N page separators.
7855
7856`~~'
7857 Tilde.
7858 `~N~'
7859 print N tildes.
7860
7861`~'<newline>
7862 Continuation Line.
7863 `~:'<newline>
7864 newline is ignored, white space left.
7865
7866 `~@'<newline>
7867 newline is left, white space ignored.
7868
7869`~T'
7870 Tabulation.
7871 `~@T'
7872 relative tabulation.
7873
7874 `~COLNUM,COLINCT'
7875 full tabulation.
7876
7877`~?'
7878 Indirection (expects indirect arguments as a list).
7879 `~@?'
7880 extracts indirect arguments from format arguments.
7881
7882`~(STR~)'
7883 Case conversion (converts by `string-downcase').
7884 `~:(STR~)'
7885 converts by `string-capitalize'.
7886
7887 `~@(STR~)'
7888 converts by `string-capitalize-first'.
7889
7890 `~:@(STR~)'
7891 converts by `string-upcase'.
7892
7893`~*'
7894 Argument Jumping (jumps 1 argument forward).
7895 `~N*'
7896 jumps N arguments forward.
7897
7898 `~:*'
7899 jumps 1 argument backward.
7900
7901 `~N:*'
7902 jumps N arguments backward.
7903
7904 `~@*'
7905 jumps to the 0th argument.
7906
7907 `~N@*'
7908 jumps to the Nth argument (beginning from 0)
7909
7910`~[STR0~;STR1~;...~;STRN~]'
7911 Conditional Expression (numerical clause conditional).
7912 `~N['
7913 take argument from N.
7914
7915 `~@['
7916 true test conditional.
7917
7918 `~:['
7919 if-else-then conditional.
7920
7921 `~;'
7922 clause separator.
7923
7924 `~:;'
7925 default clause follows.
7926
7927`~{STR~}'
7928 Iteration (args come from the next argument (a list)).
7929 `~N{'
7930 at most N iterations.
7931
7932 `~:{'
7933 args from next arg (a list of lists).
7934
7935 `~@{'
7936 args from the rest of arguments.
7937
7938 `~:@{'
7939 args from the rest args (lists).
7940
7941`~^'
7942 Up and out.
7943 `~N^'
7944 aborts if N = 0
7945
7946 `~N,M^'
7947 aborts if N = M
7948
7949 `~N,M,K^'
7950 aborts if N <= M <= K
7951
7952*** Not Implemented CL Format Control Directives
7953
7954`~:A'
7955 print `#f' as an empty list (see below).
7956
7957`~:S'
7958 print `#f' as an empty list (see below).
7959
7960`~<~>'
7961 Justification.
7962
7963`~:^'
7964 (sorry I don't understand its semantics completely)
7965
7966*** Extended, Replaced and Additional Control Directives
7967
7968`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHD'
7969`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHX'
7970`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHO'
7971`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHB'
7972`~N,MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHR'
7973 COMMAWIDTH is the number of characters between two comma
7974 characters.
7975
7976`~I'
7977 print a R4RS complex number as `~F~@Fi' with passed parameters for
7978 `~F'.
7979
7980`~Y'
7981 Pretty print formatting of an argument for scheme code lists.
7982
7983`~K'
7984 Same as `~?.'
7985
7986`~!'
7987 Flushes the output if format DESTINATION is a port.
7988
7989`~_'
7990 Print a `#\space' character
7991 `~N_'
7992 print N `#\space' characters.
7993
7994`~/'
7995 Print a `#\tab' character
7996 `~N/'
7997 print N `#\tab' characters.
7998
7999`~NC'
8000 Takes N as an integer representation for a character. No arguments
8001 are consumed. N is converted to a character by `integer->char'. N
8002 must be a positive decimal number.
8003
8004`~:S'
8005 Print out readproof. Prints out internal objects represented as
8006 `#<...>' as strings `"#<...>"' so that the format output can always
8007 be processed by `read'.
8008
8009`~:A'
8010 Print out readproof. Prints out internal objects represented as
8011 `#<...>' as strings `"#<...>"' so that the format output can always
8012 be processed by `read'.
8013
8014`~Q'
8015 Prints information and a copyright notice on the format
8016 implementation.
8017 `~:Q'
8018 prints format version.
8019
8020`~F, ~E, ~G, ~$'
8021 may also print number strings, i.e. passing a number as a string
8022 and format it accordingly.
8023
8024*** Configuration Variables
8025
8026 The format module exports some configuration variables to suit the
8027systems and users needs. There should be no modification necessary for
8028the configuration that comes with Guile. Format detects automatically
8029if the running scheme system implements floating point numbers and
8030complex numbers.
8031
8032format:symbol-case-conv
8033 Symbols are converted by `symbol->string' so the case type of the
8034 printed symbols is implementation dependent.
8035 `format:symbol-case-conv' is a one arg closure which is either
8036 `#f' (no conversion), `string-upcase', `string-downcase' or
8037 `string-capitalize'. (default `#f')
8038
8039format:iobj-case-conv
8040 As FORMAT:SYMBOL-CASE-CONV but applies for the representation of
8041 implementation internal objects. (default `#f')
8042
8043format:expch
8044 The character prefixing the exponent value in `~E' printing.
8045 (default `#\E')
8046
8047*** Compatibility With Other Format Implementations
8048
8049SLIB format 2.x:
8050 See `format.doc'.
8051
8052SLIB format 1.4:
8053 Downward compatible except for padding support and `~A', `~S',
8054 `~P', `~X' uppercase printing. SLIB format 1.4 uses C-style
8055 `printf' padding support which is completely replaced by the CL
8056 `format' padding style.
8057
8058MIT C-Scheme 7.1:
8059 Downward compatible except for `~', which is not documented
8060 (ignores all characters inside the format string up to a newline
8061 character). (7.1 implements `~a', `~s', ~NEWLINE, `~~', `~%',
8062 numerical and variable parameters and `:/@' modifiers in the CL
8063 sense).
8064
8065Elk 1.5/2.0:
8066 Downward compatible except for `~A' and `~S' which print in
8067 uppercase. (Elk implements `~a', `~s', `~~', and `~%' (no
8068 directive parameters or modifiers)).
8069
8070Scheme->C 01nov91:
8071 Downward compatible except for an optional destination parameter:
8072 S2C accepts a format call without a destination which returns a
8073 formatted string. This is equivalent to a #f destination in S2C.
8074 (S2C implements `~a', `~s', `~c', `~%', and `~~' (no directive
8075 parameters or modifiers)).
8076
8077
e7d37b0a 8078** Changes to string-handling functions.
b7e13f65 8079
e7d37b0a 8080These functions were added to support the (ice-9 format) module, above.
b7e13f65 8081
e7d37b0a
JB
8082*** New function: string-upcase STRING
8083*** New function: string-downcase STRING
b7e13f65 8084
e7d37b0a
JB
8085These are non-destructive versions of the existing string-upcase! and
8086string-downcase! functions.
b7e13f65 8087
e7d37b0a
JB
8088*** New function: string-capitalize! STRING
8089*** New function: string-capitalize STRING
8090
8091These functions convert the first letter of each word in the string to
8092upper case. Thus:
8093
8094 (string-capitalize "howdy there")
8095 => "Howdy There"
8096
8097As with the other functions, string-capitalize! modifies the string in
8098place, while string-capitalize returns a modified copy of its argument.
8099
8100*** New function: string-ci->symbol STRING
8101
8102Return a symbol whose name is STRING, but having the same case as if
8103the symbol had be read by `read'.
8104
8105Guile can be configured to be sensitive or insensitive to case
8106differences in Scheme identifiers. If Guile is case-insensitive, all
8107symbols are converted to lower case on input. The `string-ci->symbol'
8108function returns a symbol whose name in STRING, transformed as Guile
8109would if STRING were input.
8110
8111*** New function: substring-move! STRING1 START END STRING2 START
8112
8113Copy the substring of STRING1 from START (inclusive) to END
8114(exclusive) to STRING2 at START. STRING1 and STRING2 may be the same
8115string, and the source and destination areas may overlap; in all
8116cases, the function behaves as if all the characters were copied
8117simultanously.
8118
6c0201ad 8119*** Extended functions: substring-move-left! substring-move-right!
e7d37b0a
JB
8120
8121These functions now correctly copy arbitrarily overlapping substrings;
8122they are both synonyms for substring-move!.
b7e13f65 8123
b7e13f65 8124
deaceb4e
JB
8125** New module (ice-9 getopt-long), with the function `getopt-long'.
8126
8127getopt-long is a function for parsing command-line arguments in a
8128manner consistent with other GNU programs.
8129
8130(getopt-long ARGS GRAMMAR)
8131Parse the arguments ARGS according to the argument list grammar GRAMMAR.
8132
8133ARGS should be a list of strings. Its first element should be the
8134name of the program; subsequent elements should be the arguments
8135that were passed to the program on the command line. The
8136`program-arguments' procedure returns a list of this form.
8137
8138GRAMMAR is a list of the form:
8139((OPTION (PROPERTY VALUE) ...) ...)
8140
8141Each OPTION should be a symbol. `getopt-long' will accept a
8142command-line option named `--OPTION'.
8143Each option can have the following (PROPERTY VALUE) pairs:
8144
8145 (single-char CHAR) --- Accept `-CHAR' as a single-character
8146 equivalent to `--OPTION'. This is how to specify traditional
8147 Unix-style flags.
8148 (required? BOOL) --- If BOOL is true, the option is required.
8149 getopt-long will raise an error if it is not found in ARGS.
8150 (value BOOL) --- If BOOL is #t, the option accepts a value; if
8151 it is #f, it does not; and if it is the symbol
8152 `optional', the option may appear in ARGS with or
6c0201ad 8153 without a value.
deaceb4e
JB
8154 (predicate FUNC) --- If the option accepts a value (i.e. you
8155 specified `(value #t)' for this option), then getopt
8156 will apply FUNC to the value, and throw an exception
8157 if it returns #f. FUNC should be a procedure which
8158 accepts a string and returns a boolean value; you may
8159 need to use quasiquotes to get it into GRAMMAR.
8160
8161The (PROPERTY VALUE) pairs may occur in any order, but each
8162property may occur only once. By default, options do not have
8163single-character equivalents, are not required, and do not take
8164values.
8165
8166In ARGS, single-character options may be combined, in the usual
8167Unix fashion: ("-x" "-y") is equivalent to ("-xy"). If an option
8168accepts values, then it must be the last option in the
8169combination; the value is the next argument. So, for example, using
8170the following grammar:
8171 ((apples (single-char #\a))
8172 (blimps (single-char #\b) (value #t))
8173 (catalexis (single-char #\c) (value #t)))
8174the following argument lists would be acceptable:
8175 ("-a" "-b" "bang" "-c" "couth") ("bang" and "couth" are the values
8176 for "blimps" and "catalexis")
8177 ("-ab" "bang" "-c" "couth") (same)
8178 ("-ac" "couth" "-b" "bang") (same)
8179 ("-abc" "couth" "bang") (an error, since `-b' is not the
8180 last option in its combination)
8181
8182If an option's value is optional, then `getopt-long' decides
8183whether it has a value by looking at what follows it in ARGS. If
8184the next element is a string, and it does not appear to be an
8185option itself, then that string is the option's value.
8186
8187The value of a long option can appear as the next element in ARGS,
8188or it can follow the option name, separated by an `=' character.
8189Thus, using the same grammar as above, the following argument lists
8190are equivalent:
8191 ("--apples" "Braeburn" "--blimps" "Goodyear")
8192 ("--apples=Braeburn" "--blimps" "Goodyear")
8193 ("--blimps" "Goodyear" "--apples=Braeburn")
8194
8195If the option "--" appears in ARGS, argument parsing stops there;
8196subsequent arguments are returned as ordinary arguments, even if
8197they resemble options. So, in the argument list:
8198 ("--apples" "Granny Smith" "--" "--blimp" "Goodyear")
8199`getopt-long' will recognize the `apples' option as having the
8200value "Granny Smith", but it will not recognize the `blimp'
8201option; it will return the strings "--blimp" and "Goodyear" as
8202ordinary argument strings.
8203
8204The `getopt-long' function returns the parsed argument list as an
8205assocation list, mapping option names --- the symbols from GRAMMAR
8206--- onto their values, or #t if the option does not accept a value.
8207Unused options do not appear in the alist.
8208
8209All arguments that are not the value of any option are returned
8210as a list, associated with the empty list.
8211
8212`getopt-long' throws an exception if:
8213- it finds an unrecognized option in ARGS
8214- a required option is omitted
8215- an option that requires an argument doesn't get one
8216- an option that doesn't accept an argument does get one (this can
8217 only happen using the long option `--opt=value' syntax)
8218- an option predicate fails
8219
8220So, for example:
8221
8222(define grammar
8223 `((lockfile-dir (required? #t)
8224 (value #t)
8225 (single-char #\k)
8226 (predicate ,file-is-directory?))
8227 (verbose (required? #f)
8228 (single-char #\v)
8229 (value #f))
8230 (x-includes (single-char #\x))
6c0201ad 8231 (rnet-server (single-char #\y)
deaceb4e
JB
8232 (predicate ,string?))))
8233
6c0201ad 8234(getopt-long '("my-prog" "-vk" "/tmp" "foo1" "--x-includes=/usr/include"
deaceb4e
JB
8235 "--rnet-server=lamprod" "--" "-fred" "foo2" "foo3")
8236 grammar)
8237=> ((() "foo1" "-fred" "foo2" "foo3")
8238 (rnet-server . "lamprod")
8239 (x-includes . "/usr/include")
8240 (lockfile-dir . "/tmp")
8241 (verbose . #t))
8242
8243** The (ice-9 getopt-gnu-style) module is obsolete; use (ice-9 getopt-long).
8244
8245It will be removed in a few releases.
8246
08394899
MS
8247** New syntax: lambda*
8248** New syntax: define*
6c0201ad 8249** New syntax: define*-public
08394899
MS
8250** New syntax: defmacro*
8251** New syntax: defmacro*-public
6c0201ad 8252Guile now supports optional arguments.
08394899
MS
8253
8254`lambda*', `define*', `define*-public', `defmacro*' and
8255`defmacro*-public' are identical to the non-* versions except that
8256they use an extended type of parameter list that has the following BNF
8257syntax (parentheses are literal, square brackets indicate grouping,
8258and `*', `+' and `?' have the usual meaning):
8259
8260 ext-param-list ::= ( [identifier]* [#&optional [ext-var-decl]+]?
6c0201ad 8261 [#&key [ext-var-decl]+ [#&allow-other-keys]?]?
08394899
MS
8262 [[#&rest identifier]|[. identifier]]? ) | [identifier]
8263
6c0201ad 8264 ext-var-decl ::= identifier | ( identifier expression )
08394899
MS
8265
8266The semantics are best illustrated with the following documentation
8267and examples for `lambda*':
8268
8269 lambda* args . body
8270 lambda extended for optional and keyword arguments
6c0201ad 8271
08394899
MS
8272 lambda* creates a procedure that takes optional arguments. These
8273 are specified by putting them inside brackets at the end of the
8274 paramater list, but before any dotted rest argument. For example,
8275 (lambda* (a b #&optional c d . e) '())
8276 creates a procedure with fixed arguments a and b, optional arguments c
8277 and d, and rest argument e. If the optional arguments are omitted
8278 in a call, the variables for them are unbound in the procedure. This
8279 can be checked with the bound? macro.
8280
8281 lambda* can also take keyword arguments. For example, a procedure
8282 defined like this:
8283 (lambda* (#&key xyzzy larch) '())
8284 can be called with any of the argument lists (#:xyzzy 11)
8285 (#:larch 13) (#:larch 42 #:xyzzy 19) (). Whichever arguments
8286 are given as keywords are bound to values.
8287
8288 Optional and keyword arguments can also be given default values
8289 which they take on when they are not present in a call, by giving a
8290 two-item list in place of an optional argument, for example in:
6c0201ad 8291 (lambda* (foo #&optional (bar 42) #&key (baz 73)) (list foo bar baz))
08394899
MS
8292 foo is a fixed argument, bar is an optional argument with default
8293 value 42, and baz is a keyword argument with default value 73.
8294 Default value expressions are not evaluated unless they are needed
6c0201ad 8295 and until the procedure is called.
08394899
MS
8296
8297 lambda* now supports two more special parameter list keywords.
8298
8299 lambda*-defined procedures now throw an error by default if a
8300 keyword other than one of those specified is found in the actual
8301 passed arguments. However, specifying #&allow-other-keys
8302 immediately after the kyword argument declarations restores the
8303 previous behavior of ignoring unknown keywords. lambda* also now
8304 guarantees that if the same keyword is passed more than once, the
8305 last one passed is the one that takes effect. For example,
8306 ((lambda* (#&key (heads 0) (tails 0)) (display (list heads tails)))
8307 #:heads 37 #:tails 42 #:heads 99)
8308 would result in (99 47) being displayed.
8309
8310 #&rest is also now provided as a synonym for the dotted syntax rest
8311 argument. The argument lists (a . b) and (a #&rest b) are equivalent in
8312 all respects to lambda*. This is provided for more similarity to DSSSL,
8313 MIT-Scheme and Kawa among others, as well as for refugees from other
8314 Lisp dialects.
8315
8316Further documentation may be found in the optargs.scm file itself.
8317
8318The optional argument module also exports the macros `let-optional',
8319`let-optional*', `let-keywords', `let-keywords*' and `bound?'. These
8320are not documented here because they may be removed in the future, but
8321full documentation is still available in optargs.scm.
8322
2e132553
JB
8323** New syntax: and-let*
8324Guile now supports the `and-let*' form, described in the draft SRFI-2.
8325
8326Syntax: (land* (<clause> ...) <body> ...)
8327Each <clause> should have one of the following forms:
8328 (<variable> <expression>)
8329 (<expression>)
8330 <bound-variable>
8331Each <variable> or <bound-variable> should be an identifier. Each
8332<expression> should be a valid expression. The <body> should be a
8333possibly empty sequence of expressions, like the <body> of a
8334lambda form.
8335
8336Semantics: A LAND* expression is evaluated by evaluating the
8337<expression> or <bound-variable> of each of the <clause>s from
8338left to right. The value of the first <expression> or
8339<bound-variable> that evaluates to a false value is returned; the
8340remaining <expression>s and <bound-variable>s are not evaluated.
8341The <body> forms are evaluated iff all the <expression>s and
8342<bound-variable>s evaluate to true values.
8343
8344The <expression>s and the <body> are evaluated in an environment
8345binding each <variable> of the preceding (<variable> <expression>)
8346clauses to the value of the <expression>. Later bindings
8347shadow earlier bindings.
8348
8349Guile's and-let* macro was contributed by Michael Livshin.
8350
36d3d540
MD
8351** New sorting functions
8352
8353*** New function: sorted? SEQUENCE LESS?
ed8c8636
MD
8354Returns `#t' when the sequence argument is in non-decreasing order
8355according to LESS? (that is, there is no adjacent pair `... x y
8356...' for which `(less? y x)').
8357
8358Returns `#f' when the sequence contains at least one out-of-order
8359pair. It is an error if the sequence is neither a list nor a
8360vector.
8361
36d3d540 8362*** New function: merge LIST1 LIST2 LESS?
ed8c8636
MD
8363LIST1 and LIST2 are sorted lists.
8364Returns the sorted list of all elements in LIST1 and LIST2.
8365
8366Assume that the elements a and b1 in LIST1 and b2 in LIST2 are "equal"
8367in the sense that (LESS? x y) --> #f for x, y in {a, b1, b2},
8368and that a < b1 in LIST1. Then a < b1 < b2 in the result.
8369(Here "<" should read "comes before".)
8370
36d3d540 8371*** New procedure: merge! LIST1 LIST2 LESS?
ed8c8636
MD
8372Merges two lists, re-using the pairs of LIST1 and LIST2 to build
8373the result. If the code is compiled, and LESS? constructs no new
8374pairs, no pairs at all will be allocated. The first pair of the
8375result will be either the first pair of LIST1 or the first pair of
8376LIST2.
8377
36d3d540 8378*** New function: sort SEQUENCE LESS?
ed8c8636
MD
8379Accepts either a list or a vector, and returns a new sequence
8380which is sorted. The new sequence is the same type as the input.
8381Always `(sorted? (sort sequence less?) less?)'. The original
8382sequence is not altered in any way. The new sequence shares its
8383elements with the old one; no elements are copied.
8384
36d3d540 8385*** New procedure: sort! SEQUENCE LESS
ed8c8636
MD
8386Returns its sorted result in the original boxes. No new storage is
8387allocated at all. Proper usage: (set! slist (sort! slist <))
8388
36d3d540 8389*** New function: stable-sort SEQUENCE LESS?
ed8c8636
MD
8390Similar to `sort' but stable. That is, if "equal" elements are
8391ordered a < b in the original sequence, they will have the same order
8392in the result.
8393
36d3d540 8394*** New function: stable-sort! SEQUENCE LESS?
ed8c8636
MD
8395Similar to `sort!' but stable.
8396Uses temporary storage when sorting vectors.
8397
36d3d540 8398*** New functions: sort-list, sort-list!
ed8c8636
MD
8399Added for compatibility with scsh.
8400
36d3d540
MD
8401** New built-in random number support
8402
8403*** New function: random N [STATE]
3e8370c3
MD
8404Accepts a positive integer or real N and returns a number of the
8405same type between zero (inclusive) and N (exclusive). The values
8406returned have a uniform distribution.
8407
8408The optional argument STATE must be of the type produced by
416075f1
MD
8409`copy-random-state' or `seed->random-state'. It defaults to the value
8410of the variable `*random-state*'. This object is used to maintain the
8411state of the pseudo-random-number generator and is altered as a side
8412effect of the `random' operation.
3e8370c3 8413
36d3d540 8414*** New variable: *random-state*
3e8370c3
MD
8415Holds a data structure that encodes the internal state of the
8416random-number generator that `random' uses by default. The nature
8417of this data structure is implementation-dependent. It may be
8418printed out and successfully read back in, but may or may not
8419function correctly as a random-number state object in another
8420implementation.
8421
36d3d540 8422*** New function: copy-random-state [STATE]
3e8370c3
MD
8423Returns a new object of type suitable for use as the value of the
8424variable `*random-state*' and as a second argument to `random'.
8425If argument STATE is given, a copy of it is returned. Otherwise a
8426copy of `*random-state*' is returned.
416075f1 8427
36d3d540 8428*** New function: seed->random-state SEED
416075f1
MD
8429Returns a new object of type suitable for use as the value of the
8430variable `*random-state*' and as a second argument to `random'.
8431SEED is a string or a number. A new state is generated and
8432initialized using SEED.
3e8370c3 8433
36d3d540 8434*** New function: random:uniform [STATE]
3e8370c3
MD
8435Returns an uniformly distributed inexact real random number in the
8436range between 0 and 1.
8437
36d3d540 8438*** New procedure: random:solid-sphere! VECT [STATE]
3e8370c3
MD
8439Fills VECT with inexact real random numbers the sum of whose
8440squares is less than 1.0. Thinking of VECT as coordinates in
8441space of dimension N = `(vector-length VECT)', the coordinates are
8442uniformly distributed within the unit N-shere. The sum of the
8443squares of the numbers is returned. VECT can be either a vector
8444or a uniform vector of doubles.
8445
36d3d540 8446*** New procedure: random:hollow-sphere! VECT [STATE]
3e8370c3
MD
8447Fills VECT with inexact real random numbers the sum of whose squares
8448is equal to 1.0. Thinking of VECT as coordinates in space of
8449dimension n = `(vector-length VECT)', the coordinates are uniformly
8450distributed over the surface of the unit n-shere. VECT can be either
8451a vector or a uniform vector of doubles.
8452
36d3d540 8453*** New function: random:normal [STATE]
3e8370c3
MD
8454Returns an inexact real in a normal distribution with mean 0 and
8455standard deviation 1. For a normal distribution with mean M and
8456standard deviation D use `(+ M (* D (random:normal)))'.
8457
36d3d540 8458*** New procedure: random:normal-vector! VECT [STATE]
3e8370c3
MD
8459Fills VECT with inexact real random numbers which are independent and
8460standard normally distributed (i.e., with mean 0 and variance 1).
8461VECT can be either a vector or a uniform vector of doubles.
8462
36d3d540 8463*** New function: random:exp STATE
3e8370c3
MD
8464Returns an inexact real in an exponential distribution with mean 1.
8465For an exponential distribution with mean U use (* U (random:exp)).
8466
69c6acbb
JB
8467** The range of logand, logior, logxor, logtest, and logbit? have changed.
8468
8469These functions now operate on numbers in the range of a C unsigned
8470long.
8471
8472These functions used to operate on numbers in the range of a C signed
8473long; however, this seems inappropriate, because Guile integers don't
8474overflow.
8475
ba4ee0d6
MD
8476** New function: make-guardian
8477This is an implementation of guardians as described in
8478R. Kent Dybvig, Carl Bruggeman, and David Eby (1993) "Guardians in a
8479Generation-Based Garbage Collector" ACM SIGPLAN Conference on
8480Programming Language Design and Implementation, June 1993
8481ftp://ftp.cs.indiana.edu/pub/scheme-repository/doc/pubs/guardians.ps.gz
8482
88ceea5c
MD
8483** New functions: delq1!, delv1!, delete1!
8484These procedures behave similar to delq! and friends but delete only
8485one object if at all.
8486
55254a6a
MD
8487** New function: unread-string STRING PORT
8488Unread STRING to PORT, that is, push it back onto the port so that
8489next read operation will work on the pushed back characters.
8490
8491** unread-char can now be called multiple times
8492If unread-char is called multiple times, the unread characters will be
8493read again in last-in first-out order.
8494
9e97c52d
GH
8495** the procedures uniform-array-read! and uniform-array-write! now
8496work on any kind of port, not just ports which are open on a file.
8497
b074884f 8498** Now 'l' in a port mode requests line buffering.
9e97c52d 8499
69bc9ff3
GH
8500** The procedure truncate-file now works on string ports as well
8501as file ports. If the size argument is omitted, the current
1b9c3dae 8502file position is used.
9e97c52d 8503
c94577b4 8504** new procedure: seek PORT/FDES OFFSET WHENCE
9e97c52d
GH
8505The arguments are the same as for the old fseek procedure, but it
8506works on string ports as well as random-access file ports.
8507
8508** the fseek procedure now works on string ports, since it has been
c94577b4 8509redefined using seek.
9e97c52d
GH
8510
8511** the setvbuf procedure now uses a default size if mode is _IOFBF and
8512size is not supplied.
8513
8514** the newline procedure no longer flushes the port if it's not
8515line-buffered: previously it did if it was the current output port.
8516
8517** open-pipe and close-pipe are no longer primitive procedures, but
8518an emulation can be obtained using `(use-modules (ice-9 popen))'.
8519
8520** the freopen procedure has been removed.
8521
8522** new procedure: drain-input PORT
8523Drains PORT's read buffers (including any pushed-back characters)
8524and returns the contents as a single string.
8525
67ad463a 8526** New function: map-in-order PROC LIST1 LIST2 ...
d41b3904
MD
8527Version of `map' which guarantees that the procedure is applied to the
8528lists in serial order.
8529
67ad463a
MD
8530** Renamed `serial-array-copy!' and `serial-array-map!' to
8531`array-copy-in-order!' and `array-map-in-order!'. The old names are
8532now obsolete and will go away in release 1.5.
8533
cf7132b3 8534** New syntax: collect BODY1 ...
d41b3904
MD
8535Version of `begin' which returns a list of the results of the body
8536forms instead of the result of the last body form. In contrast to
cf7132b3 8537`begin', `collect' allows an empty body.
d41b3904 8538
e4eae9b1
MD
8539** New functions: read-history FILENAME, write-history FILENAME
8540Read/write command line history from/to file. Returns #t on success
8541and #f if an error occured.
8542
d21ffe26
JB
8543** `ls' and `lls' in module (ice-9 ls) now handle no arguments.
8544
8545These procedures return a list of definitions available in the specified
8546argument, a relative module reference. In the case of no argument,
8547`(current-module)' is now consulted for definitions to return, instead
8548of simply returning #f, the former behavior.
8549
f8c9d497
JB
8550** The #/ syntax for lists is no longer supported.
8551
8552Earlier versions of Scheme accepted this syntax, but printed a
8553warning.
8554
8555** Guile no longer consults the SCHEME_LOAD_PATH environment variable.
8556
8557Instead, you should set GUILE_LOAD_PATH to tell Guile where to find
8558modules.
8559
3ffc7a36
MD
8560* Changes to the gh_ interface
8561
8562** gh_scm2doubles
8563
8564Now takes a second argument which is the result array. If this
8565pointer is NULL, a new array is malloced (the old behaviour).
8566
8567** gh_chars2byvect, gh_shorts2svect, gh_floats2fvect, gh_scm2chars,
8568 gh_scm2shorts, gh_scm2longs, gh_scm2floats
8569
8570New functions.
8571
3e8370c3
MD
8572* Changes to the scm_ interface
8573
ad91d6c3
MD
8574** Function: scm_make_named_hook (char* name, int n_args)
8575
8576Creates a hook in the same way as make-hook above but also
8577binds a variable named NAME to it.
8578
8579This is the typical way of creating a hook from C code.
8580
ece41168
MD
8581Currently, the variable is created in the "current" module. This
8582might change when we get the new module system.
ad91d6c3 8583
16a5a9a4
MD
8584** The smob interface
8585
8586The interface for creating smobs has changed. For documentation, see
8587data-rep.info (made from guile-core/doc/data-rep.texi).
8588
8589*** Deprecated function: SCM scm_newsmob (scm_smobfuns *)
8590
8591>>> This function will be removed in 1.3.4. <<<
8592
8593It is replaced by:
8594
8595*** Function: SCM scm_make_smob_type (const char *name, scm_sizet size)
8596This function adds a new smob type, named NAME, with instance size
8597SIZE to the system. The return value is a tag that is used in
8598creating instances of the type. If SIZE is 0, then no memory will
8599be allocated when instances of the smob are created, and nothing
8600will be freed by the default free function.
6c0201ad 8601
16a5a9a4
MD
8602*** Function: void scm_set_smob_mark (long tc, SCM (*mark) (SCM))
8603This function sets the smob marking procedure for the smob type
8604specified by the tag TC. TC is the tag returned by
8605`scm_make_smob_type'.
8606
8607*** Function: void scm_set_smob_free (long tc, SCM (*mark) (SCM))
8608This function sets the smob freeing procedure for the smob type
8609specified by the tag TC. TC is the tag returned by
8610`scm_make_smob_type'.
8611
8612*** Function: void scm_set_smob_print (tc, print)
8613
8614 - Function: void scm_set_smob_print (long tc,
8615 scm_sizet (*print) (SCM,
8616 SCM,
8617 scm_print_state *))
8618
8619This function sets the smob printing procedure for the smob type
8620specified by the tag TC. TC is the tag returned by
8621`scm_make_smob_type'.
8622
8623*** Function: void scm_set_smob_equalp (long tc, SCM (*equalp) (SCM, SCM))
8624This function sets the smob equality-testing predicate for the
8625smob type specified by the tag TC. TC is the tag returned by
8626`scm_make_smob_type'.
8627
8628*** Macro: void SCM_NEWSMOB (SCM var, long tc, void *data)
8629Make VALUE contain a smob instance of the type with type code TC and
8630smob data DATA. VALUE must be previously declared as C type `SCM'.
8631
8632*** Macro: fn_returns SCM_RETURN_NEWSMOB (long tc, void *data)
8633This macro expands to a block of code that creates a smob instance
8634of the type with type code TC and smob data DATA, and returns that
8635`SCM' value. It should be the last piece of code in a block.
8636
9e97c52d
GH
8637** The interfaces for using I/O ports and implementing port types
8638(ptobs) have changed significantly. The new interface is based on
8639shared access to buffers and a new set of ptob procedures.
8640
16a5a9a4
MD
8641*** scm_newptob has been removed
8642
8643It is replaced by:
8644
8645*** Function: SCM scm_make_port_type (type_name, fill_buffer, write_flush)
8646
8647- Function: SCM scm_make_port_type (char *type_name,
8648 int (*fill_buffer) (SCM port),
8649 void (*write_flush) (SCM port));
8650
8651Similarly to the new smob interface, there is a set of function
8652setters by which the user can customize the behaviour of his port
544e9093 8653type. See ports.h (scm_set_port_XXX).
16a5a9a4 8654
9e97c52d
GH
8655** scm_strport_to_string: New function: creates a new string from
8656a string port's buffer.
8657
3e8370c3
MD
8658** Plug in interface for random number generators
8659The variable `scm_the_rng' in random.c contains a value and three
8660function pointers which together define the current random number
8661generator being used by the Scheme level interface and the random
8662number library functions.
8663
8664The user is free to replace the default generator with the generator
8665of his own choice.
8666
8667*** Variable: size_t scm_the_rng.rstate_size
8668The size of the random state type used by the current RNG
8669measured in chars.
8670
8671*** Function: unsigned long scm_the_rng.random_bits (scm_rstate *STATE)
8672Given the random STATE, return 32 random bits.
8673
8674*** Function: void scm_the_rng.init_rstate (scm_rstate *STATE, chars *S, int N)
8675Seed random state STATE using string S of length N.
8676
8677*** Function: scm_rstate *scm_the_rng.copy_rstate (scm_rstate *STATE)
8678Given random state STATE, return a malloced copy.
8679
8680** Default RNG
8681The default RNG is the MWC (Multiply With Carry) random number
8682generator described by George Marsaglia at the Department of
8683Statistics and Supercomputer Computations Research Institute, The
8684Florida State University (http://stat.fsu.edu/~geo).
8685
8686It uses 64 bits, has a period of 4578426017172946943 (4.6e18), and
8687passes all tests in the DIEHARD test suite
8688(http://stat.fsu.edu/~geo/diehard.html). The generation of 32 bits
8689costs one multiply and one add on platforms which either supports long
8690longs (gcc does this on most systems) or have 64 bit longs. The cost
8691is four multiply on other systems but this can be optimized by writing
8692scm_i_uniform32 in assembler.
8693
8694These functions are provided through the scm_the_rng interface for use
8695by libguile and the application.
8696
8697*** Function: unsigned long scm_i_uniform32 (scm_i_rstate *STATE)
8698Given the random STATE, return 32 random bits.
8699Don't use this function directly. Instead go through the plugin
8700interface (see "Plug in interface" above).
8701
8702*** Function: void scm_i_init_rstate (scm_i_rstate *STATE, char *SEED, int N)
8703Initialize STATE using SEED of length N.
8704
8705*** Function: scm_i_rstate *scm_i_copy_rstate (scm_i_rstate *STATE)
8706Return a malloc:ed copy of STATE. This function can easily be re-used
8707in the interfaces to other RNGs.
8708
8709** Random number library functions
8710These functions use the current RNG through the scm_the_rng interface.
8711It might be a good idea to use these functions from your C code so
8712that only one random generator is used by all code in your program.
8713
259529f2 8714The default random state is stored in:
3e8370c3
MD
8715
8716*** Variable: SCM scm_var_random_state
8717Contains the vcell of the Scheme variable "*random-state*" which is
8718used as default state by all random number functions in the Scheme
8719level interface.
8720
8721Example:
8722
259529f2 8723 double x = scm_c_uniform01 (SCM_RSTATE (SCM_CDR (scm_var_random_state)));
3e8370c3 8724
259529f2
MD
8725*** Function: scm_rstate *scm_c_default_rstate (void)
8726This is a convenience function which returns the value of
8727scm_var_random_state. An error message is generated if this value
8728isn't a random state.
8729
8730*** Function: scm_rstate *scm_c_make_rstate (char *SEED, int LENGTH)
8731Make a new random state from the string SEED of length LENGTH.
8732
8733It is generally not a good idea to use multiple random states in a
8734program. While subsequent random numbers generated from one random
8735state are guaranteed to be reasonably independent, there is no such
8736guarantee for numbers generated from different random states.
8737
8738*** Macro: unsigned long scm_c_uniform32 (scm_rstate *STATE)
8739Return 32 random bits.
8740
8741*** Function: double scm_c_uniform01 (scm_rstate *STATE)
3e8370c3
MD
8742Return a sample from the uniform(0,1) distribution.
8743
259529f2 8744*** Function: double scm_c_normal01 (scm_rstate *STATE)
3e8370c3
MD
8745Return a sample from the normal(0,1) distribution.
8746
259529f2 8747*** Function: double scm_c_exp1 (scm_rstate *STATE)
3e8370c3
MD
8748Return a sample from the exp(1) distribution.
8749
259529f2
MD
8750*** Function: unsigned long scm_c_random (scm_rstate *STATE, unsigned long M)
8751Return a sample from the discrete uniform(0,M) distribution.
8752
8753*** Function: SCM scm_c_random_bignum (scm_rstate *STATE, SCM M)
3e8370c3 8754Return a sample from the discrete uniform(0,M) distribution.
259529f2 8755M must be a bignum object. The returned value may be an INUM.
3e8370c3 8756
9e97c52d 8757
f3227c7a 8758\f
d23bbf3e 8759Changes in Guile 1.3 (released Monday, October 19, 1998):
c484bf7f
JB
8760
8761* Changes to the distribution
8762
e2d6569c
JB
8763** We renamed the SCHEME_LOAD_PATH environment variable to GUILE_LOAD_PATH.
8764To avoid conflicts, programs should name environment variables after
8765themselves, except when there's a common practice establishing some
8766other convention.
8767
8768For now, Guile supports both GUILE_LOAD_PATH and SCHEME_LOAD_PATH,
8769giving the former precedence, and printing a warning message if the
8770latter is set. Guile 1.4 will not recognize SCHEME_LOAD_PATH at all.
8771
8772** The header files related to multi-byte characters have been removed.
8773They were: libguile/extchrs.h and libguile/mbstrings.h. Any C code
8774which referred to these explicitly will probably need to be rewritten,
8775since the support for the variant string types has been removed; see
8776below.
8777
8778** The header files append.h and sequences.h have been removed. These
8779files implemented non-R4RS operations which would encourage
8780non-portable programming style and less easy-to-read code.
3a97e020 8781
c484bf7f
JB
8782* Changes to the stand-alone interpreter
8783
2e368582 8784** New procedures have been added to implement a "batch mode":
ec4ab4fd 8785
2e368582 8786*** Function: batch-mode?
ec4ab4fd
GH
8787
8788 Returns a boolean indicating whether the interpreter is in batch
8789 mode.
8790
2e368582 8791*** Function: set-batch-mode?! ARG
ec4ab4fd
GH
8792
8793 If ARG is true, switches the interpreter to batch mode. The `#f'
8794 case has not been implemented.
8795
2e368582
JB
8796** Guile now provides full command-line editing, when run interactively.
8797To use this feature, you must have the readline library installed.
8798The Guile build process will notice it, and automatically include
8799support for it.
8800
8801The readline library is available via anonymous FTP from any GNU
8802mirror site; the canonical location is "ftp://prep.ai.mit.edu/pub/gnu".
8803
a5d6d578
MD
8804** the-last-stack is now a fluid.
8805
c484bf7f
JB
8806* Changes to the procedure for linking libguile with your programs
8807
71f20534 8808** You can now use the `guile-config' utility to build programs that use Guile.
2e368582 8809
2adfe1c0 8810Guile now includes a command-line utility called `guile-config', which
71f20534
JB
8811can provide information about how to compile and link programs that
8812use Guile.
8813
8814*** `guile-config compile' prints any C compiler flags needed to use Guile.
8815You should include this command's output on the command line you use
8816to compile C or C++ code that #includes the Guile header files. It's
8817usually just a `-I' flag to help the compiler find the Guile headers.
8818
8819
8820*** `guile-config link' prints any linker flags necessary to link with Guile.
8aa5c148 8821
71f20534 8822This command writes to its standard output a list of flags which you
8aa5c148
JB
8823must pass to the linker to link your code against the Guile library.
8824The flags include '-lguile' itself, any other libraries the Guile
8825library depends upon, and any `-L' flags needed to help the linker
8826find those libraries.
2e368582
JB
8827
8828For example, here is a Makefile rule that builds a program named 'foo'
8829from the object files ${FOO_OBJECTS}, and links them against Guile:
8830
8831 foo: ${FOO_OBJECTS}
2adfe1c0 8832 ${CC} ${CFLAGS} ${FOO_OBJECTS} `guile-config link` -o foo
2e368582 8833
e2d6569c
JB
8834Previous Guile releases recommended that you use autoconf to detect
8835which of a predefined set of libraries were present on your system.
2adfe1c0 8836It is more robust to use `guile-config', since it records exactly which
e2d6569c
JB
8837libraries the installed Guile library requires.
8838
2adfe1c0
JB
8839This was originally called `build-guile', but was renamed to
8840`guile-config' before Guile 1.3 was released, to be consistent with
8841the analogous script for the GTK+ GUI toolkit, which is called
8842`gtk-config'.
8843
2e368582 8844
8aa5c148
JB
8845** Use the GUILE_FLAGS macro in your configure.in file to find Guile.
8846
8847If you are using the GNU autoconf package to configure your program,
8848you can use the GUILE_FLAGS autoconf macro to call `guile-config'
8849(described above) and gather the necessary values for use in your
8850Makefiles.
8851
8852The GUILE_FLAGS macro expands to configure script code which runs the
8853`guile-config' script, to find out where Guile's header files and
8854libraries are installed. It sets two variables, marked for
8855substitution, as by AC_SUBST.
8856
8857 GUILE_CFLAGS --- flags to pass to a C or C++ compiler to build
8858 code that uses Guile header files. This is almost always just a
8859 -I flag.
8860
8861 GUILE_LDFLAGS --- flags to pass to the linker to link a
8862 program against Guile. This includes `-lguile' for the Guile
8863 library itself, any libraries that Guile itself requires (like
8864 -lqthreads), and so on. It may also include a -L flag to tell the
8865 compiler where to find the libraries.
8866
8867GUILE_FLAGS is defined in the file guile.m4, in the top-level
8868directory of the Guile distribution. You can copy it into your
8869package's aclocal.m4 file, and then use it in your configure.in file.
8870
8871If you are using the `aclocal' program, distributed with GNU automake,
8872to maintain your aclocal.m4 file, the Guile installation process
8873installs guile.m4 where aclocal will find it. All you need to do is
8874use GUILE_FLAGS in your configure.in file, and then run `aclocal';
8875this will copy the definition of GUILE_FLAGS into your aclocal.m4
8876file.
8877
8878
c484bf7f 8879* Changes to Scheme functions and syntax
7ad3c1e7 8880
02755d59 8881** Multi-byte strings have been removed, as have multi-byte and wide
e2d6569c
JB
8882ports. We felt that these were the wrong approach to
8883internationalization support.
02755d59 8884
2e368582
JB
8885** New function: readline [PROMPT]
8886Read a line from the terminal, and allow the user to edit it,
8887prompting with PROMPT. READLINE provides a large set of Emacs-like
8888editing commands, lets the user recall previously typed lines, and
8889works on almost every kind of terminal, including dumb terminals.
8890
8891READLINE assumes that the cursor is at the beginning of the line when
8892it is invoked. Thus, you can't print a prompt yourself, and then call
8893READLINE; you need to package up your prompt as a string, pass it to
8894the function, and let READLINE print the prompt itself. This is
8895because READLINE needs to know the prompt's screen width.
8896
8cd57bd0
JB
8897For Guile to provide this function, you must have the readline
8898library, version 2.1 or later, installed on your system. Readline is
8899available via anonymous FTP from prep.ai.mit.edu in pub/gnu, or from
8900any GNU mirror site.
2e368582
JB
8901
8902See also ADD-HISTORY function.
8903
8904** New function: add-history STRING
8905Add STRING as the most recent line in the history used by the READLINE
8906command. READLINE does not add lines to the history itself; you must
8907call ADD-HISTORY to make previous input available to the user.
8908
8cd57bd0
JB
8909** The behavior of the read-line function has changed.
8910
8911This function now uses standard C library functions to read the line,
8912for speed. This means that it doesn not respect the value of
8913scm-line-incrementors; it assumes that lines are delimited with
8914#\newline.
8915
8916(Note that this is read-line, the function that reads a line of text
8917from a port, not readline, the function that reads a line from a
8918terminal, providing full editing capabilities.)
8919
1a0106ef
JB
8920** New module (ice-9 getopt-gnu-style): Parse command-line arguments.
8921
8922This module provides some simple argument parsing. It exports one
8923function:
8924
8925Function: getopt-gnu-style ARG-LS
8926 Parse a list of program arguments into an alist of option
8927 descriptions.
8928
8929 Each item in the list of program arguments is examined to see if
8930 it meets the syntax of a GNU long-named option. An argument like
8931 `--MUMBLE' produces an element of the form (MUMBLE . #t) in the
8932 returned alist, where MUMBLE is a keyword object with the same
8933 name as the argument. An argument like `--MUMBLE=FROB' produces
8934 an element of the form (MUMBLE . FROB), where FROB is a string.
8935
8936 As a special case, the returned alist also contains a pair whose
8937 car is the symbol `rest'. The cdr of this pair is a list
8938 containing all the items in the argument list that are not options
8939 of the form mentioned above.
8940
8941 The argument `--' is treated specially: all items in the argument
8942 list appearing after such an argument are not examined, and are
8943 returned in the special `rest' list.
8944
8945 This function does not parse normal single-character switches.
8946 You will need to parse them out of the `rest' list yourself.
8947
8cd57bd0
JB
8948** The read syntax for byte vectors and short vectors has changed.
8949
8950Instead of #bytes(...), write #y(...).
8951
8952Instead of #short(...), write #h(...).
8953
8954This may seem nutty, but, like the other uniform vectors, byte vectors
8955and short vectors want to have the same print and read syntax (and,
8956more basic, want to have read syntax!). Changing the read syntax to
8957use multiple characters after the hash sign breaks with the
8958conventions used in R5RS and the conventions used for the other
8959uniform vectors. It also introduces complexity in the current reader,
8960both on the C and Scheme levels. (The Right solution is probably to
8961change the syntax and prototypes for uniform vectors entirely.)
8962
8963
8964** The new module (ice-9 session) provides useful interactive functions.
8965
8966*** New procedure: (apropos REGEXP OPTION ...)
8967
8968Display a list of top-level variables whose names match REGEXP, and
8969the modules they are imported from. Each OPTION should be one of the
8970following symbols:
8971
8972 value --- Show the value of each matching variable.
8973 shadow --- Show bindings shadowed by subsequently imported modules.
8974 full --- Same as both `shadow' and `value'.
8975
8976For example:
8977
8978 guile> (apropos "trace" 'full)
8979 debug: trace #<procedure trace args>
8980 debug: untrace #<procedure untrace args>
8981 the-scm-module: display-backtrace #<compiled-closure #<primitive-procedure gsubr-apply>>
8982 the-scm-module: before-backtrace-hook ()
8983 the-scm-module: backtrace #<primitive-procedure backtrace>
8984 the-scm-module: after-backtrace-hook ()
8985 the-scm-module: has-shown-backtrace-hint? #f
6c0201ad 8986 guile>
8cd57bd0
JB
8987
8988** There are new functions and syntax for working with macros.
8989
8990Guile implements macros as a special object type. Any variable whose
8991top-level binding is a macro object acts as a macro. The macro object
8992specifies how the expression should be transformed before evaluation.
8993
8994*** Macro objects now print in a reasonable way, resembling procedures.
8995
8996*** New function: (macro? OBJ)
8997True iff OBJ is a macro object.
8998
8999*** New function: (primitive-macro? OBJ)
9000Like (macro? OBJ), but true only if OBJ is one of the Guile primitive
9001macro transformers, implemented in eval.c rather than Scheme code.
9002
dbdd0c16
JB
9003Why do we have this function?
9004- For symmetry with procedure? and primitive-procedure?,
9005- to allow custom print procedures to tell whether a macro is
9006 primitive, and display it differently, and
9007- to allow compilers and user-written evaluators to distinguish
9008 builtin special forms from user-defined ones, which could be
9009 compiled.
9010
8cd57bd0
JB
9011*** New function: (macro-type OBJ)
9012Return a value indicating what kind of macro OBJ is. Possible return
9013values are:
9014
9015 The symbol `syntax' --- a macro created by procedure->syntax.
9016 The symbol `macro' --- a macro created by procedure->macro.
9017 The symbol `macro!' --- a macro created by procedure->memoizing-macro.
6c0201ad 9018 The boolean #f --- if OBJ is not a macro object.
8cd57bd0
JB
9019
9020*** New function: (macro-name MACRO)
9021Return the name of the macro object MACRO's procedure, as returned by
9022procedure-name.
9023
9024*** New function: (macro-transformer MACRO)
9025Return the transformer procedure for MACRO.
9026
9027*** New syntax: (use-syntax MODULE ... TRANSFORMER)
9028
9029Specify a new macro expander to use in the current module. Each
9030MODULE is a module name, with the same meaning as in the `use-modules'
9031form; each named module's exported bindings are added to the current
9032top-level environment. TRANSFORMER is an expression evaluated in the
9033resulting environment which must yield a procedure to use as the
9034module's eval transformer: every expression evaluated in this module
9035is passed to this function, and the result passed to the Guile
6c0201ad 9036interpreter.
8cd57bd0
JB
9037
9038*** macro-eval! is removed. Use local-eval instead.
29521173 9039
8d9dcb3c
MV
9040** Some magic has been added to the printer to better handle user
9041written printing routines (like record printers, closure printers).
9042
9043The problem is that these user written routines must have access to
7fbd77df 9044the current `print-state' to be able to handle fancy things like
8d9dcb3c
MV
9045detection of circular references. These print-states have to be
9046passed to the builtin printing routines (display, write, etc) to
9047properly continue the print chain.
9048
9049We didn't want to change all existing print code so that it
8cd57bd0 9050explicitly passes thru a print state in addition to a port. Instead,
8d9dcb3c
MV
9051we extented the possible values that the builtin printing routines
9052accept as a `port'. In addition to a normal port, they now also take
9053a pair of a normal port and a print-state. Printing will go to the
9054port and the print-state will be used to control the detection of
9055circular references, etc. If the builtin function does not care for a
9056print-state, it is simply ignored.
9057
9058User written callbacks are now called with such a pair as their
9059`port', but because every function now accepts this pair as a PORT
9060argument, you don't have to worry about that. In fact, it is probably
9061safest to not check for these pairs.
9062
9063However, it is sometimes necessary to continue a print chain on a
9064different port, for example to get a intermediate string
9065representation of the printed value, mangle that string somehow, and
9066then to finally print the mangled string. Use the new function
9067
9068 inherit-print-state OLD-PORT NEW-PORT
9069
9070for this. It constructs a new `port' that prints to NEW-PORT but
9071inherits the print-state of OLD-PORT.
9072
ef1ea498
MD
9073** struct-vtable-offset renamed to vtable-offset-user
9074
9075** New constants: vtable-index-layout, vtable-index-vtable, vtable-index-printer
9076
e478dffa
MD
9077** There is now a third optional argument to make-vtable-vtable
9078 (and fourth to make-struct) when constructing new types (vtables).
9079 This argument initializes field vtable-index-printer of the vtable.
ef1ea498 9080
4851dc57
MV
9081** The detection of circular references has been extended to structs.
9082That is, a structure that -- in the process of being printed -- prints
9083itself does not lead to infinite recursion.
9084
9085** There is now some basic support for fluids. Please read
9086"libguile/fluid.h" to find out more. It is accessible from Scheme with
9087the following functions and macros:
9088
9c3fb66f
MV
9089Function: make-fluid
9090
9091 Create a new fluid object. Fluids are not special variables or
9092 some other extension to the semantics of Scheme, but rather
9093 ordinary Scheme objects. You can store them into variables (that
9094 are still lexically scoped, of course) or into any other place you
9095 like. Every fluid has a initial value of `#f'.
04c76b58 9096
9c3fb66f 9097Function: fluid? OBJ
04c76b58 9098
9c3fb66f 9099 Test whether OBJ is a fluid.
04c76b58 9100
9c3fb66f
MV
9101Function: fluid-ref FLUID
9102Function: fluid-set! FLUID VAL
04c76b58
MV
9103
9104 Access/modify the fluid FLUID. Modifications are only visible
9105 within the current dynamic root (that includes threads).
9106
9c3fb66f
MV
9107Function: with-fluids* FLUIDS VALUES THUNK
9108
9109 FLUIDS is a list of fluids and VALUES a corresponding list of
9110 values for these fluids. Before THUNK gets called the values are
6c0201ad 9111 installed in the fluids and the old values of the fluids are
9c3fb66f
MV
9112 saved in the VALUES list. When the flow of control leaves THUNK
9113 or reenters it, the values get swapped again. You might think of
9114 this as a `safe-fluid-excursion'. Note that the VALUES list is
9115 modified by `with-fluids*'.
9116
9117Macro: with-fluids ((FLUID VALUE) ...) FORM ...
9118
9119 The same as `with-fluids*' but with a different syntax. It looks
9120 just like `let', but both FLUID and VALUE are evaluated. Remember,
9121 fluids are not special variables but ordinary objects. FLUID
9122 should evaluate to a fluid.
04c76b58 9123
e2d6569c 9124** Changes to system call interfaces:
64d01d13 9125
e2d6569c 9126*** close-port, close-input-port and close-output-port now return a
64d01d13
GH
9127boolean instead of an `unspecified' object. #t means that the port
9128was successfully closed, while #f means it was already closed. It is
9129also now possible for these procedures to raise an exception if an
9130error occurs (some errors from write can be delayed until close.)
9131
e2d6569c 9132*** the first argument to chmod, fcntl, ftell and fseek can now be a
6afcd3b2
GH
9133file descriptor.
9134
e2d6569c 9135*** the third argument to fcntl is now optional.
6afcd3b2 9136
e2d6569c 9137*** the first argument to chown can now be a file descriptor or a port.
6afcd3b2 9138
e2d6569c 9139*** the argument to stat can now be a port.
6afcd3b2 9140
e2d6569c 9141*** The following new procedures have been added (most use scsh
64d01d13
GH
9142interfaces):
9143
e2d6569c 9144*** procedure: close PORT/FD
ec4ab4fd
GH
9145 Similar to close-port (*note close-port: Closing Ports.), but also
9146 works on file descriptors. A side effect of closing a file
9147 descriptor is that any ports using that file descriptor are moved
9148 to a different file descriptor and have their revealed counts set
9149 to zero.
9150
e2d6569c 9151*** procedure: port->fdes PORT
ec4ab4fd
GH
9152 Returns the integer file descriptor underlying PORT. As a side
9153 effect the revealed count of PORT is incremented.
9154
e2d6569c 9155*** procedure: fdes->ports FDES
ec4ab4fd
GH
9156 Returns a list of existing ports which have FDES as an underlying
9157 file descriptor, without changing their revealed counts.
9158
e2d6569c 9159*** procedure: fdes->inport FDES
ec4ab4fd
GH
9160 Returns an existing input port which has FDES as its underlying
9161 file descriptor, if one exists, and increments its revealed count.
9162 Otherwise, returns a new input port with a revealed count of 1.
9163
e2d6569c 9164*** procedure: fdes->outport FDES
ec4ab4fd
GH
9165 Returns an existing output port which has FDES as its underlying
9166 file descriptor, if one exists, and increments its revealed count.
9167 Otherwise, returns a new output port with a revealed count of 1.
9168
9169 The next group of procedures perform a `dup2' system call, if NEWFD
9170(an integer) is supplied, otherwise a `dup'. The file descriptor to be
9171duplicated can be supplied as an integer or contained in a port. The
64d01d13
GH
9172type of value returned varies depending on which procedure is used.
9173
ec4ab4fd
GH
9174 All procedures also have the side effect when performing `dup2' that
9175any ports using NEWFD are moved to a different file descriptor and have
64d01d13
GH
9176their revealed counts set to zero.
9177
e2d6569c 9178*** procedure: dup->fdes PORT/FD [NEWFD]
ec4ab4fd 9179 Returns an integer file descriptor.
64d01d13 9180
e2d6569c 9181*** procedure: dup->inport PORT/FD [NEWFD]
ec4ab4fd 9182 Returns a new input port using the new file descriptor.
64d01d13 9183
e2d6569c 9184*** procedure: dup->outport PORT/FD [NEWFD]
ec4ab4fd 9185 Returns a new output port using the new file descriptor.
64d01d13 9186
e2d6569c 9187*** procedure: dup PORT/FD [NEWFD]
ec4ab4fd
GH
9188 Returns a new port if PORT/FD is a port, with the same mode as the
9189 supplied port, otherwise returns an integer file descriptor.
64d01d13 9190
e2d6569c 9191*** procedure: dup->port PORT/FD MODE [NEWFD]
ec4ab4fd
GH
9192 Returns a new port using the new file descriptor. MODE supplies a
9193 mode string for the port (*note open-file: File Ports.).
64d01d13 9194
e2d6569c 9195*** procedure: setenv NAME VALUE
ec4ab4fd
GH
9196 Modifies the environment of the current process, which is also the
9197 default environment inherited by child processes.
64d01d13 9198
ec4ab4fd
GH
9199 If VALUE is `#f', then NAME is removed from the environment.
9200 Otherwise, the string NAME=VALUE is added to the environment,
9201 replacing any existing string with name matching NAME.
64d01d13 9202
ec4ab4fd 9203 The return value is unspecified.
956055a9 9204
e2d6569c 9205*** procedure: truncate-file OBJ SIZE
6afcd3b2
GH
9206 Truncates the file referred to by OBJ to at most SIZE bytes. OBJ
9207 can be a string containing a file name or an integer file
9208 descriptor or port open for output on the file. The underlying
9209 system calls are `truncate' and `ftruncate'.
9210
9211 The return value is unspecified.
9212
e2d6569c 9213*** procedure: setvbuf PORT MODE [SIZE]
7a6f1ffa
GH
9214 Set the buffering mode for PORT. MODE can be:
9215 `_IONBF'
9216 non-buffered
9217
9218 `_IOLBF'
9219 line buffered
9220
9221 `_IOFBF'
9222 block buffered, using a newly allocated buffer of SIZE bytes.
9223 However if SIZE is zero or unspecified, the port will be made
9224 non-buffered.
9225
9226 This procedure should not be used after I/O has been performed with
9227 the port.
9228
9229 Ports are usually block buffered by default, with a default buffer
9230 size. Procedures e.g., *Note open-file: File Ports, which accept a
9231 mode string allow `0' to be added to request an unbuffered port.
9232
e2d6569c 9233*** procedure: fsync PORT/FD
6afcd3b2
GH
9234 Copies any unwritten data for the specified output file descriptor
9235 to disk. If PORT/FD is a port, its buffer is flushed before the
9236 underlying file descriptor is fsync'd. The return value is
9237 unspecified.
9238
e2d6569c 9239*** procedure: open-fdes PATH FLAGS [MODES]
6afcd3b2
GH
9240 Similar to `open' but returns a file descriptor instead of a port.
9241
e2d6569c 9242*** procedure: execle PATH ENV [ARG] ...
6afcd3b2
GH
9243 Similar to `execl', but the environment of the new process is
9244 specified by ENV, which must be a list of strings as returned by
9245 the `environ' procedure.
9246
9247 This procedure is currently implemented using the `execve' system
9248 call, but we call it `execle' because of its Scheme calling
9249 interface.
9250
e2d6569c 9251*** procedure: strerror ERRNO
ec4ab4fd
GH
9252 Returns the Unix error message corresponding to ERRNO, an integer.
9253
e2d6569c 9254*** procedure: primitive-exit [STATUS]
6afcd3b2
GH
9255 Terminate the current process without unwinding the Scheme stack.
9256 This is would typically be useful after a fork. The exit status
9257 is STATUS if supplied, otherwise zero.
9258
e2d6569c 9259*** procedure: times
6afcd3b2
GH
9260 Returns an object with information about real and processor time.
9261 The following procedures accept such an object as an argument and
9262 return a selected component:
9263
9264 `tms:clock'
9265 The current real time, expressed as time units relative to an
9266 arbitrary base.
9267
9268 `tms:utime'
9269 The CPU time units used by the calling process.
9270
9271 `tms:stime'
9272 The CPU time units used by the system on behalf of the
9273 calling process.
9274
9275 `tms:cutime'
9276 The CPU time units used by terminated child processes of the
9277 calling process, whose status has been collected (e.g., using
9278 `waitpid').
9279
9280 `tms:cstime'
9281 Similarly, the CPU times units used by the system on behalf of
9282 terminated child processes.
7ad3c1e7 9283
e2d6569c
JB
9284** Removed: list-length
9285** Removed: list-append, list-append!
9286** Removed: list-reverse, list-reverse!
9287
9288** array-map renamed to array-map!
9289
9290** serial-array-map renamed to serial-array-map!
9291
660f41fa
MD
9292** catch doesn't take #f as first argument any longer
9293
9294Previously, it was possible to pass #f instead of a key to `catch'.
9295That would cause `catch' to pass a jump buffer object to the procedure
9296passed as second argument. The procedure could then use this jump
9297buffer objekt as an argument to throw.
9298
9299This mechanism has been removed since its utility doesn't motivate the
9300extra complexity it introduces.
9301
332d00f6
JB
9302** The `#/' notation for lists now provokes a warning message from Guile.
9303This syntax will be removed from Guile in the near future.
9304
9305To disable the warning message, set the GUILE_HUSH environment
9306variable to any non-empty value.
9307
8cd57bd0
JB
9308** The newline character now prints as `#\newline', following the
9309normal Scheme notation, not `#\nl'.
9310
c484bf7f
JB
9311* Changes to the gh_ interface
9312
8986901b
JB
9313** The gh_enter function now takes care of loading the Guile startup files.
9314gh_enter works by calling scm_boot_guile; see the remarks below.
9315
5424b4f7
MD
9316** Function: void gh_write (SCM x)
9317
9318Write the printed representation of the scheme object x to the current
9319output port. Corresponds to the scheme level `write'.
9320
3a97e020
MD
9321** gh_list_length renamed to gh_length.
9322
8d6787b6
MG
9323** vector handling routines
9324
9325Several major changes. In particular, gh_vector() now resembles
9326(vector ...) (with a caveat -- see manual), and gh_make_vector() now
956328d2
MG
9327exists and behaves like (make-vector ...). gh_vset() and gh_vref()
9328have been renamed gh_vector_set_x() and gh_vector_ref(). Some missing
8d6787b6
MG
9329vector-related gh_ functions have been implemented.
9330
7fee59bd
MG
9331** pair and list routines
9332
9333Implemented several of the R4RS pair and list functions that were
9334missing.
9335
171422a9
MD
9336** gh_scm2doubles, gh_doubles2scm, gh_doubles2dvect
9337
9338New function. Converts double arrays back and forth between Scheme
9339and C.
9340
c484bf7f
JB
9341* Changes to the scm_ interface
9342
8986901b
JB
9343** The function scm_boot_guile now takes care of loading the startup files.
9344
9345Guile's primary initialization function, scm_boot_guile, now takes
9346care of loading `boot-9.scm', in the `ice-9' module, to initialize
9347Guile, define the module system, and put together some standard
9348bindings. It also loads `init.scm', which is intended to hold
9349site-specific initialization code.
9350
9351Since Guile cannot operate properly until boot-9.scm is loaded, there
9352is no reason to separate loading boot-9.scm from Guile's other
9353initialization processes.
9354
9355This job used to be done by scm_compile_shell_switches, which didn't
9356make much sense; in particular, it meant that people using Guile for
9357non-shell-like applications had to jump through hoops to get Guile
9358initialized properly.
9359
9360** The function scm_compile_shell_switches no longer loads the startup files.
9361Now, Guile always loads the startup files, whenever it is initialized;
9362see the notes above for scm_boot_guile and scm_load_startup_files.
9363
9364** Function: scm_load_startup_files
9365This new function takes care of loading Guile's initialization file
9366(`boot-9.scm'), and the site initialization file, `init.scm'. Since
9367this is always called by the Guile initialization process, it's
9368probably not too useful to call this yourself, but it's there anyway.
9369
87148d9e
JB
9370** The semantics of smob marking have changed slightly.
9371
9372The smob marking function (the `mark' member of the scm_smobfuns
9373structure) is no longer responsible for setting the mark bit on the
9374smob. The generic smob handling code in the garbage collector will
9375set this bit. The mark function need only ensure that any other
9376objects the smob refers to get marked.
9377
9378Note that this change means that the smob's GC8MARK bit is typically
9379already set upon entry to the mark function. Thus, marking functions
9380which look like this:
9381
9382 {
9383 if (SCM_GC8MARKP (ptr))
9384 return SCM_BOOL_F;
9385 SCM_SETGC8MARK (ptr);
9386 ... mark objects to which the smob refers ...
9387 }
9388
9389are now incorrect, since they will return early, and fail to mark any
9390other objects the smob refers to. Some code in the Guile library used
9391to work this way.
9392
1cf84ea5
JB
9393** The semantics of the I/O port functions in scm_ptobfuns have changed.
9394
9395If you have implemented your own I/O port type, by writing the
9396functions required by the scm_ptobfuns and then calling scm_newptob,
9397you will need to change your functions slightly.
9398
9399The functions in a scm_ptobfuns structure now expect the port itself
9400as their argument; they used to expect the `stream' member of the
9401port's scm_port_table structure. This allows functions in an
9402scm_ptobfuns structure to easily access the port's cell (and any flags
9403it its CAR), and the port's scm_port_table structure.
9404
9405Guile now passes the I/O port itself as the `port' argument in the
9406following scm_ptobfuns functions:
9407
9408 int (*free) (SCM port);
9409 int (*fputc) (int, SCM port);
9410 int (*fputs) (char *, SCM port);
9411 scm_sizet (*fwrite) SCM_P ((char *ptr,
9412 scm_sizet size,
9413 scm_sizet nitems,
9414 SCM port));
9415 int (*fflush) (SCM port);
9416 int (*fgetc) (SCM port);
9417 int (*fclose) (SCM port);
9418
9419The interfaces to the `mark', `print', `equalp', and `fgets' methods
9420are unchanged.
9421
9422If you have existing code which defines its own port types, it is easy
9423to convert your code to the new interface; simply apply SCM_STREAM to
9424the port argument to yield the value you code used to expect.
9425
9426Note that since both the port and the stream have the same type in the
9427C code --- they are both SCM values --- the C compiler will not remind
9428you if you forget to update your scm_ptobfuns functions.
9429
9430
933a7411
MD
9431** Function: int scm_internal_select (int fds,
9432 SELECT_TYPE *rfds,
9433 SELECT_TYPE *wfds,
9434 SELECT_TYPE *efds,
9435 struct timeval *timeout);
9436
9437This is a replacement for the `select' function provided by the OS.
9438It enables I/O blocking and sleeping to happen for one cooperative
9439thread without blocking other threads. It also avoids busy-loops in
9440these situations. It is intended that all I/O blocking and sleeping
9441will finally go through this function. Currently, this function is
9442only available on systems providing `gettimeofday' and `select'.
9443
5424b4f7
MD
9444** Function: SCM scm_internal_stack_catch (SCM tag,
9445 scm_catch_body_t body,
9446 void *body_data,
9447 scm_catch_handler_t handler,
9448 void *handler_data)
9449
9450A new sibling to the other two C level `catch' functions
9451scm_internal_catch and scm_internal_lazy_catch. Use it if you want
9452the stack to be saved automatically into the variable `the-last-stack'
9453(scm_the_last_stack_var) on error. This is necessary if you want to
9454use advanced error reporting, such as calling scm_display_error and
9455scm_display_backtrace. (They both take a stack object as argument.)
9456
df366c26
MD
9457** Function: SCM scm_spawn_thread (scm_catch_body_t body,
9458 void *body_data,
9459 scm_catch_handler_t handler,
9460 void *handler_data)
9461
9462Spawns a new thread. It does a job similar to
9463scm_call_with_new_thread but takes arguments more suitable when
9464spawning threads from application C code.
9465
88482b31
MD
9466** The hook scm_error_callback has been removed. It was originally
9467intended as a way for the user to install his own error handler. But
9468that method works badly since it intervenes between throw and catch,
9469thereby changing the semantics of expressions like (catch #t ...).
9470The correct way to do it is to use one of the C level catch functions
9471in throw.c: scm_internal_catch/lazy_catch/stack_catch.
9472
3a97e020
MD
9473** Removed functions:
9474
9475scm_obj_length, scm_list_length, scm_list_append, scm_list_append_x,
9476scm_list_reverse, scm_list_reverse_x
9477
9478** New macros: SCM_LISTn where n is one of the integers 0-9.
9479
9480These can be used for pretty list creation from C. The idea is taken
9481from Erick Gallesio's STk.
9482
298aa6e3
MD
9483** scm_array_map renamed to scm_array_map_x
9484
527da704
MD
9485** mbstrings are now removed
9486
9487This means that the type codes scm_tc7_mb_string and
9488scm_tc7_mb_substring has been removed.
9489
8cd57bd0
JB
9490** scm_gen_putc, scm_gen_puts, scm_gen_write, and scm_gen_getc have changed.
9491
9492Since we no longer support multi-byte strings, these I/O functions
9493have been simplified, and renamed. Here are their old names, and
9494their new names and arguments:
9495
9496scm_gen_putc -> void scm_putc (int c, SCM port);
9497scm_gen_puts -> void scm_puts (char *s, SCM port);
9498scm_gen_write -> void scm_lfwrite (char *ptr, scm_sizet size, SCM port);
9499scm_gen_getc -> void scm_getc (SCM port);
9500
9501
527da704
MD
9502** The macros SCM_TYP7D and SCM_TYP7SD has been removed.
9503
9504** The macro SCM_TYP7S has taken the role of the old SCM_TYP7D
9505
9506SCM_TYP7S now masks away the bit which distinguishes substrings from
9507strings.
9508
660f41fa
MD
9509** scm_catch_body_t: Backward incompatible change!
9510
9511Body functions to scm_internal_catch and friends do not any longer
9512take a second argument. This is because it is no longer possible to
9513pass a #f arg to catch.
9514
a8e05009
JB
9515** Calls to scm_protect_object and scm_unprotect now nest properly.
9516
9517The function scm_protect_object protects its argument from being freed
9518by the garbage collector. scm_unprotect_object removes that
9519protection.
9520
9521These functions now nest properly. That is, for every object O, there
9522is a counter which scm_protect_object(O) increments and
9523scm_unprotect_object(O) decrements, if the counter is greater than
9524zero. Every object's counter is zero when it is first created. If an
9525object's counter is greater than zero, the garbage collector will not
9526reclaim its storage.
9527
9528This allows you to use scm_protect_object in your code without
9529worrying that some other function you call will call
9530scm_unprotect_object, and allow it to be freed. Assuming that the
9531functions you call are well-behaved, and unprotect only those objects
9532they protect, you can follow the same rule and have confidence that
9533objects will be freed only at appropriate times.
9534
c484bf7f
JB
9535\f
9536Changes in Guile 1.2 (released Tuesday, June 24 1997):
cf78e9e8 9537
737c9113
JB
9538* Changes to the distribution
9539
832b09ed
JB
9540** Nightly snapshots are now available from ftp.red-bean.com.
9541The old server, ftp.cyclic.com, has been relinquished to its rightful
9542owner.
9543
9544Nightly snapshots of the Guile development sources are now available via
9545anonymous FTP from ftp.red-bean.com, as /pub/guile/guile-snap.tar.gz.
9546
9547Via the web, that's: ftp://ftp.red-bean.com/pub/guile/guile-snap.tar.gz
9548For getit, that's: ftp.red-bean.com:/pub/guile/guile-snap.tar.gz
9549
0fcab5ed
JB
9550** To run Guile without installing it, the procedure has changed a bit.
9551
9552If you used a separate build directory to compile Guile, you'll need
9553to include the build directory in SCHEME_LOAD_PATH, as well as the
9554source directory. See the `INSTALL' file for examples.
9555
737c9113
JB
9556* Changes to the procedure for linking libguile with your programs
9557
94982a4e
JB
9558** The standard Guile load path for Scheme code now includes
9559$(datadir)/guile (usually /usr/local/share/guile). This means that
9560you can install your own Scheme files there, and Guile will find them.
9561(Previous versions of Guile only checked a directory whose name
9562contained the Guile version number, so you had to re-install or move
9563your Scheme sources each time you installed a fresh version of Guile.)
9564
9565The load path also includes $(datadir)/guile/site; we recommend
9566putting individual Scheme files there. If you want to install a
9567package with multiple source files, create a directory for them under
9568$(datadir)/guile.
9569
9570** Guile 1.2 will now use the Rx regular expression library, if it is
9571installed on your system. When you are linking libguile into your own
9572programs, this means you will have to link against -lguile, -lqt (if
9573you configured Guile with thread support), and -lrx.
27590f82
JB
9574
9575If you are using autoconf to generate configuration scripts for your
9576application, the following lines should suffice to add the appropriate
9577libraries to your link command:
9578
9579### Find Rx, quickthreads and libguile.
9580AC_CHECK_LIB(rx, main)
9581AC_CHECK_LIB(qt, main)
9582AC_CHECK_LIB(guile, scm_shell)
9583
94982a4e
JB
9584The Guile 1.2 distribution does not contain sources for the Rx
9585library, as Guile 1.0 did. If you want to use Rx, you'll need to
9586retrieve it from a GNU FTP site and install it separately.
9587
b83b8bee
JB
9588* Changes to Scheme functions and syntax
9589
e035e7e6
MV
9590** The dynamic linking features of Guile are now enabled by default.
9591You can disable them by giving the `--disable-dynamic-linking' option
9592to configure.
9593
e035e7e6
MV
9594 (dynamic-link FILENAME)
9595
9596 Find the object file denoted by FILENAME (a string) and link it
9597 into the running Guile application. When everything works out,
9598 return a Scheme object suitable for representing the linked object
9599 file. Otherwise an error is thrown. How object files are
9600 searched is system dependent.
9601
9602 (dynamic-object? VAL)
9603
9604 Determine whether VAL represents a dynamically linked object file.
9605
9606 (dynamic-unlink DYNOBJ)
9607
9608 Unlink the indicated object file from the application. DYNOBJ
9609 should be one of the values returned by `dynamic-link'.
9610
9611 (dynamic-func FUNCTION DYNOBJ)
9612
9613 Search the C function indicated by FUNCTION (a string or symbol)
9614 in DYNOBJ and return some Scheme object that can later be used
9615 with `dynamic-call' to actually call this function. Right now,
9616 these Scheme objects are formed by casting the address of the
9617 function to `long' and converting this number to its Scheme
9618 representation.
9619
9620 (dynamic-call FUNCTION DYNOBJ)
9621
9622 Call the C function indicated by FUNCTION and DYNOBJ. The
9623 function is passed no arguments and its return value is ignored.
9624 When FUNCTION is something returned by `dynamic-func', call that
9625 function and ignore DYNOBJ. When FUNCTION is a string (or symbol,
9626 etc.), look it up in DYNOBJ; this is equivalent to
9627
9628 (dynamic-call (dynamic-func FUNCTION DYNOBJ) #f)
9629
9630 Interrupts are deferred while the C function is executing (with
9631 SCM_DEFER_INTS/SCM_ALLOW_INTS).
9632
9633 (dynamic-args-call FUNCTION DYNOBJ ARGS)
9634
9635 Call the C function indicated by FUNCTION and DYNOBJ, but pass it
9636 some arguments and return its return value. The C function is
9637 expected to take two arguments and return an `int', just like
9638 `main':
9639
9640 int c_func (int argc, char **argv);
9641
9642 ARGS must be a list of strings and is converted into an array of
9643 `char *'. The array is passed in ARGV and its size in ARGC. The
9644 return value is converted to a Scheme number and returned from the
9645 call to `dynamic-args-call'.
9646
0fcab5ed
JB
9647When dynamic linking is disabled or not supported on your system,
9648the above functions throw errors, but they are still available.
9649
e035e7e6
MV
9650Here is a small example that works on GNU/Linux:
9651
9652 (define libc-obj (dynamic-link "libc.so"))
9653 (dynamic-args-call 'rand libc-obj '())
9654
9655See the file `libguile/DYNAMIC-LINKING' for additional comments.
9656
27590f82 9657** The #/ syntax for module names is depreciated, and will be removed
6c0201ad 9658in a future version of Guile. Instead of
27590f82
JB
9659
9660 #/foo/bar/baz
9661
9662instead write
9663
9664 (foo bar baz)
9665
9666The latter syntax is more consistent with existing Lisp practice.
9667
5dade857
MV
9668** Guile now does fancier printing of structures. Structures are the
9669underlying implementation for records, which in turn are used to
9670implement modules, so all of these object now print differently and in
9671a more informative way.
9672
161029df
JB
9673The Scheme printer will examine the builtin variable *struct-printer*
9674whenever it needs to print a structure object. When this variable is
9675not `#f' it is deemed to be a procedure and will be applied to the
9676structure object and the output port. When *struct-printer* is `#f'
9677or the procedure return `#f' the structure object will be printed in
9678the boring #<struct 80458270> form.
5dade857
MV
9679
9680This hook is used by some routines in ice-9/boot-9.scm to implement
9681type specific printing routines. Please read the comments there about
9682"printing structs".
9683
9684One of the more specific uses of structs are records. The printing
9685procedure that could be passed to MAKE-RECORD-TYPE is now actually
9686called. It should behave like a *struct-printer* procedure (described
9687above).
9688
b83b8bee
JB
9689** Guile now supports a new R4RS-compliant syntax for keywords. A
9690token of the form #:NAME, where NAME has the same syntax as a Scheme
9691symbol, is the external representation of the keyword named NAME.
9692Keyword objects print using this syntax as well, so values containing
1e5afba0
JB
9693keyword objects can be read back into Guile. When used in an
9694expression, keywords are self-quoting objects.
b83b8bee
JB
9695
9696Guile suports this read syntax, and uses this print syntax, regardless
9697of the current setting of the `keyword' read option. The `keyword'
9698read option only controls whether Guile recognizes the `:NAME' syntax,
9699which is incompatible with R4RS. (R4RS says such token represent
9700symbols.)
737c9113
JB
9701
9702** Guile has regular expression support again. Guile 1.0 included
9703functions for matching regular expressions, based on the Rx library.
9704In Guile 1.1, the Guile/Rx interface was removed to simplify the
9705distribution, and thus Guile had no regular expression support. Guile
94982a4e
JB
97061.2 again supports the most commonly used functions, and supports all
9707of SCSH's regular expression functions.
2409cdfa 9708
94982a4e
JB
9709If your system does not include a POSIX regular expression library,
9710and you have not linked Guile with a third-party regexp library such as
9711Rx, these functions will not be available. You can tell whether your
9712Guile installation includes regular expression support by checking
9713whether the `*features*' list includes the `regex' symbol.
737c9113 9714
94982a4e 9715*** regexp functions
161029df 9716
94982a4e
JB
9717By default, Guile supports POSIX extended regular expressions. That
9718means that the characters `(', `)', `+' and `?' are special, and must
9719be escaped if you wish to match the literal characters.
e1a191a8 9720
94982a4e
JB
9721This regular expression interface was modeled after that implemented
9722by SCSH, the Scheme Shell. It is intended to be upwardly compatible
9723with SCSH regular expressions.
9724
9725**** Function: string-match PATTERN STR [START]
9726 Compile the string PATTERN into a regular expression and compare
9727 it with STR. The optional numeric argument START specifies the
9728 position of STR at which to begin matching.
9729
9730 `string-match' returns a "match structure" which describes what,
9731 if anything, was matched by the regular expression. *Note Match
9732 Structures::. If STR does not match PATTERN at all,
9733 `string-match' returns `#f'.
9734
9735 Each time `string-match' is called, it must compile its PATTERN
9736argument into a regular expression structure. This operation is
9737expensive, which makes `string-match' inefficient if the same regular
9738expression is used several times (for example, in a loop). For better
9739performance, you can compile a regular expression in advance and then
9740match strings against the compiled regexp.
9741
9742**** Function: make-regexp STR [FLAGS]
9743 Compile the regular expression described by STR, and return the
9744 compiled regexp structure. If STR does not describe a legal
9745 regular expression, `make-regexp' throws a
9746 `regular-expression-syntax' error.
9747
9748 FLAGS may be the bitwise-or of one or more of the following:
9749
9750**** Constant: regexp/extended
9751 Use POSIX Extended Regular Expression syntax when interpreting
9752 STR. If not set, POSIX Basic Regular Expression syntax is used.
9753 If the FLAGS argument is omitted, we assume regexp/extended.
9754
9755**** Constant: regexp/icase
9756 Do not differentiate case. Subsequent searches using the
9757 returned regular expression will be case insensitive.
9758
9759**** Constant: regexp/newline
9760 Match-any-character operators don't match a newline.
9761
9762 A non-matching list ([^...]) not containing a newline matches a
9763 newline.
9764
9765 Match-beginning-of-line operator (^) matches the empty string
9766 immediately after a newline, regardless of whether the FLAGS
9767 passed to regexp-exec contain regexp/notbol.
9768
9769 Match-end-of-line operator ($) matches the empty string
9770 immediately before a newline, regardless of whether the FLAGS
9771 passed to regexp-exec contain regexp/noteol.
9772
9773**** Function: regexp-exec REGEXP STR [START [FLAGS]]
9774 Match the compiled regular expression REGEXP against `str'. If
9775 the optional integer START argument is provided, begin matching
9776 from that position in the string. Return a match structure
9777 describing the results of the match, or `#f' if no match could be
9778 found.
9779
9780 FLAGS may be the bitwise-or of one or more of the following:
9781
9782**** Constant: regexp/notbol
9783 The match-beginning-of-line operator always fails to match (but
9784 see the compilation flag regexp/newline above) This flag may be
9785 used when different portions of a string are passed to
9786 regexp-exec and the beginning of the string should not be
9787 interpreted as the beginning of the line.
9788
9789**** Constant: regexp/noteol
9790 The match-end-of-line operator always fails to match (but see the
9791 compilation flag regexp/newline above)
9792
9793**** Function: regexp? OBJ
9794 Return `#t' if OBJ is a compiled regular expression, or `#f'
9795 otherwise.
9796
9797 Regular expressions are commonly used to find patterns in one string
9798and replace them with the contents of another string.
9799
9800**** Function: regexp-substitute PORT MATCH [ITEM...]
9801 Write to the output port PORT selected contents of the match
9802 structure MATCH. Each ITEM specifies what should be written, and
9803 may be one of the following arguments:
9804
9805 * A string. String arguments are written out verbatim.
9806
9807 * An integer. The submatch with that number is written.
9808
9809 * The symbol `pre'. The portion of the matched string preceding
9810 the regexp match is written.
9811
9812 * The symbol `post'. The portion of the matched string
9813 following the regexp match is written.
9814
9815 PORT may be `#f', in which case nothing is written; instead,
9816 `regexp-substitute' constructs a string from the specified ITEMs
9817 and returns that.
9818
9819**** Function: regexp-substitute/global PORT REGEXP TARGET [ITEM...]
9820 Similar to `regexp-substitute', but can be used to perform global
9821 substitutions on STR. Instead of taking a match structure as an
9822 argument, `regexp-substitute/global' takes two string arguments: a
9823 REGEXP string describing a regular expression, and a TARGET string
9824 which should be matched against this regular expression.
9825
9826 Each ITEM behaves as in REGEXP-SUBSTITUTE, with the following
9827 exceptions:
9828
9829 * A function may be supplied. When this function is called, it
9830 will be passed one argument: a match structure for a given
9831 regular expression match. It should return a string to be
9832 written out to PORT.
9833
9834 * The `post' symbol causes `regexp-substitute/global' to recurse
9835 on the unmatched portion of STR. This *must* be supplied in
9836 order to perform global search-and-replace on STR; if it is
9837 not present among the ITEMs, then `regexp-substitute/global'
9838 will return after processing a single match.
9839
9840*** Match Structures
9841
9842 A "match structure" is the object returned by `string-match' and
9843`regexp-exec'. It describes which portion of a string, if any, matched
9844the given regular expression. Match structures include: a reference to
9845the string that was checked for matches; the starting and ending
9846positions of the regexp match; and, if the regexp included any
9847parenthesized subexpressions, the starting and ending positions of each
9848submatch.
9849
9850 In each of the regexp match functions described below, the `match'
9851argument must be a match structure returned by a previous call to
9852`string-match' or `regexp-exec'. Most of these functions return some
9853information about the original target string that was matched against a
9854regular expression; we will call that string TARGET for easy reference.
9855
9856**** Function: regexp-match? OBJ
9857 Return `#t' if OBJ is a match structure returned by a previous
9858 call to `regexp-exec', or `#f' otherwise.
9859
9860**** Function: match:substring MATCH [N]
9861 Return the portion of TARGET matched by subexpression number N.
9862 Submatch 0 (the default) represents the entire regexp match. If
9863 the regular expression as a whole matched, but the subexpression
9864 number N did not match, return `#f'.
9865
9866**** Function: match:start MATCH [N]
9867 Return the starting position of submatch number N.
9868
9869**** Function: match:end MATCH [N]
9870 Return the ending position of submatch number N.
9871
9872**** Function: match:prefix MATCH
9873 Return the unmatched portion of TARGET preceding the regexp match.
9874
9875**** Function: match:suffix MATCH
9876 Return the unmatched portion of TARGET following the regexp match.
9877
9878**** Function: match:count MATCH
9879 Return the number of parenthesized subexpressions from MATCH.
9880 Note that the entire regular expression match itself counts as a
9881 subexpression, and failed submatches are included in the count.
9882
9883**** Function: match:string MATCH
9884 Return the original TARGET string.
9885
9886*** Backslash Escapes
9887
9888 Sometimes you will want a regexp to match characters like `*' or `$'
9889exactly. For example, to check whether a particular string represents
9890a menu entry from an Info node, it would be useful to match it against
9891a regexp like `^* [^:]*::'. However, this won't work; because the
9892asterisk is a metacharacter, it won't match the `*' at the beginning of
9893the string. In this case, we want to make the first asterisk un-magic.
9894
9895 You can do this by preceding the metacharacter with a backslash
9896character `\'. (This is also called "quoting" the metacharacter, and
9897is known as a "backslash escape".) When Guile sees a backslash in a
9898regular expression, it considers the following glyph to be an ordinary
9899character, no matter what special meaning it would ordinarily have.
9900Therefore, we can make the above example work by changing the regexp to
9901`^\* [^:]*::'. The `\*' sequence tells the regular expression engine
9902to match only a single asterisk in the target string.
9903
9904 Since the backslash is itself a metacharacter, you may force a
9905regexp to match a backslash in the target string by preceding the
9906backslash with itself. For example, to find variable references in a
9907TeX program, you might want to find occurrences of the string `\let\'
9908followed by any number of alphabetic characters. The regular expression
9909`\\let\\[A-Za-z]*' would do this: the double backslashes in the regexp
9910each match a single backslash in the target string.
9911
9912**** Function: regexp-quote STR
9913 Quote each special character found in STR with a backslash, and
9914 return the resulting string.
9915
9916 *Very important:* Using backslash escapes in Guile source code (as
9917in Emacs Lisp or C) can be tricky, because the backslash character has
9918special meaning for the Guile reader. For example, if Guile encounters
9919the character sequence `\n' in the middle of a string while processing
9920Scheme code, it replaces those characters with a newline character.
9921Similarly, the character sequence `\t' is replaced by a horizontal tab.
9922Several of these "escape sequences" are processed by the Guile reader
9923before your code is executed. Unrecognized escape sequences are
9924ignored: if the characters `\*' appear in a string, they will be
9925translated to the single character `*'.
9926
9927 This translation is obviously undesirable for regular expressions,
9928since we want to be able to include backslashes in a string in order to
9929escape regexp metacharacters. Therefore, to make sure that a backslash
9930is preserved in a string in your Guile program, you must use *two*
9931consecutive backslashes:
9932
9933 (define Info-menu-entry-pattern (make-regexp "^\\* [^:]*"))
9934
9935 The string in this example is preprocessed by the Guile reader before
9936any code is executed. The resulting argument to `make-regexp' is the
9937string `^\* [^:]*', which is what we really want.
9938
9939 This also means that in order to write a regular expression that
9940matches a single backslash character, the regular expression string in
9941the source code must include *four* backslashes. Each consecutive pair
9942of backslashes gets translated by the Guile reader to a single
9943backslash, and the resulting double-backslash is interpreted by the
9944regexp engine as matching a single backslash character. Hence:
9945
9946 (define tex-variable-pattern (make-regexp "\\\\let\\\\=[A-Za-z]*"))
9947
9948 The reason for the unwieldiness of this syntax is historical. Both
9949regular expression pattern matchers and Unix string processing systems
9950have traditionally used backslashes with the special meanings described
9951above. The POSIX regular expression specification and ANSI C standard
9952both require these semantics. Attempting to abandon either convention
9953would cause other kinds of compatibility problems, possibly more severe
9954ones. Therefore, without extending the Scheme reader to support
9955strings with different quoting conventions (an ungainly and confusing
9956extension when implemented in other languages), we must adhere to this
9957cumbersome escape syntax.
9958
7ad3c1e7
GH
9959* Changes to the gh_ interface
9960
9961* Changes to the scm_ interface
9962
9963* Changes to system call interfaces:
94982a4e 9964
7ad3c1e7 9965** The value returned by `raise' is now unspecified. It throws an exception
e1a191a8
GH
9966if an error occurs.
9967
94982a4e 9968*** A new procedure `sigaction' can be used to install signal handlers
115b09a5
GH
9969
9970(sigaction signum [action] [flags])
9971
9972signum is the signal number, which can be specified using the value
9973of SIGINT etc.
9974
9975If action is omitted, sigaction returns a pair: the CAR is the current
9976signal hander, which will be either an integer with the value SIG_DFL
9977(default action) or SIG_IGN (ignore), or the Scheme procedure which
9978handles the signal, or #f if a non-Scheme procedure handles the
9979signal. The CDR contains the current sigaction flags for the handler.
9980
9981If action is provided, it is installed as the new handler for signum.
9982action can be a Scheme procedure taking one argument, or the value of
9983SIG_DFL (default action) or SIG_IGN (ignore), or #f to restore
9984whatever signal handler was installed before sigaction was first used.
9985Flags can optionally be specified for the new handler (SA_RESTART is
9986always used if the system provides it, so need not be specified.) The
9987return value is a pair with information about the old handler as
9988described above.
9989
9990This interface does not provide access to the "signal blocking"
9991facility. Maybe this is not needed, since the thread support may
9992provide solutions to the problem of consistent access to data
9993structures.
e1a191a8 9994
94982a4e 9995*** A new procedure `flush-all-ports' is equivalent to running
89ea5b7c
GH
9996`force-output' on every port open for output.
9997
94982a4e
JB
9998** Guile now provides information on how it was built, via the new
9999global variable, %guile-build-info. This variable records the values
10000of the standard GNU makefile directory variables as an assocation
10001list, mapping variable names (symbols) onto directory paths (strings).
10002For example, to find out where the Guile link libraries were
10003installed, you can say:
10004
10005guile -c "(display (assq-ref %guile-build-info 'libdir)) (newline)"
10006
10007
10008* Changes to the scm_ interface
10009
10010** The new function scm_handle_by_message_noexit is just like the
10011existing scm_handle_by_message function, except that it doesn't call
10012exit to terminate the process. Instead, it prints a message and just
10013returns #f. This might be a more appropriate catch-all handler for
10014new dynamic roots and threads.
10015
cf78e9e8 10016\f
c484bf7f 10017Changes in Guile 1.1 (released Friday, May 16 1997):
f3b1485f
JB
10018
10019* Changes to the distribution.
10020
10021The Guile 1.0 distribution has been split up into several smaller
10022pieces:
10023guile-core --- the Guile interpreter itself.
10024guile-tcltk --- the interface between the Guile interpreter and
10025 Tcl/Tk; Tcl is an interpreter for a stringy language, and Tk
10026 is a toolkit for building graphical user interfaces.
10027guile-rgx-ctax --- the interface between Guile and the Rx regular
10028 expression matcher, and the translator for the Ctax
10029 programming language. These are packaged together because the
10030 Ctax translator uses Rx to parse Ctax source code.
10031
095936d2
JB
10032This NEWS file describes the changes made to guile-core since the 1.0
10033release.
10034
48d224d7
JB
10035We no longer distribute the documentation, since it was either out of
10036date, or incomplete. As soon as we have current documentation, we
10037will distribute it.
10038
0fcab5ed
JB
10039
10040
f3b1485f
JB
10041* Changes to the stand-alone interpreter
10042
48d224d7
JB
10043** guile now accepts command-line arguments compatible with SCSH, Olin
10044Shivers' Scheme Shell.
10045
10046In general, arguments are evaluated from left to right, but there are
10047exceptions. The following switches stop argument processing, and
10048stash all remaining command-line arguments as the value returned by
10049the (command-line) function.
10050 -s SCRIPT load Scheme source code from FILE, and exit
10051 -c EXPR evalute Scheme expression EXPR, and exit
10052 -- stop scanning arguments; run interactively
10053
10054The switches below are processed as they are encountered.
10055 -l FILE load Scheme source code from FILE
10056 -e FUNCTION after reading script, apply FUNCTION to
10057 command line arguments
10058 -ds do -s script at this point
10059 --emacs enable Emacs protocol (experimental)
10060 -h, --help display this help and exit
10061 -v, --version display version information and exit
10062 \ read arguments from following script lines
10063
10064So, for example, here is a Guile script named `ekko' (thanks, Olin)
10065which re-implements the traditional "echo" command:
10066
10067#!/usr/local/bin/guile -s
10068!#
10069(define (main args)
10070 (map (lambda (arg) (display arg) (display " "))
10071 (cdr args))
10072 (newline))
10073
10074(main (command-line))
10075
10076Suppose we invoke this script as follows:
10077
10078 ekko a speckled gecko
10079
10080Through the magic of Unix script processing (triggered by the `#!'
10081token at the top of the file), /usr/local/bin/guile receives the
10082following list of command-line arguments:
10083
10084 ("-s" "./ekko" "a" "speckled" "gecko")
10085
10086Unix inserts the name of the script after the argument specified on
10087the first line of the file (in this case, "-s"), and then follows that
10088with the arguments given to the script. Guile loads the script, which
10089defines the `main' function, and then applies it to the list of
10090remaining command-line arguments, ("a" "speckled" "gecko").
10091
095936d2
JB
10092In Unix, the first line of a script file must take the following form:
10093
10094#!INTERPRETER ARGUMENT
10095
10096where INTERPRETER is the absolute filename of the interpreter
10097executable, and ARGUMENT is a single command-line argument to pass to
10098the interpreter.
10099
10100You may only pass one argument to the interpreter, and its length is
10101limited. These restrictions can be annoying to work around, so Guile
10102provides a general mechanism (borrowed from, and compatible with,
10103SCSH) for circumventing them.
10104
10105If the ARGUMENT in a Guile script is a single backslash character,
10106`\', Guile will open the script file, parse arguments from its second
10107and subsequent lines, and replace the `\' with them. So, for example,
10108here is another implementation of the `ekko' script:
10109
10110#!/usr/local/bin/guile \
10111-e main -s
10112!#
10113(define (main args)
10114 (for-each (lambda (arg) (display arg) (display " "))
10115 (cdr args))
10116 (newline))
10117
10118If the user invokes this script as follows:
10119
10120 ekko a speckled gecko
10121
10122Unix expands this into
10123
10124 /usr/local/bin/guile \ ekko a speckled gecko
10125
10126When Guile sees the `\' argument, it replaces it with the arguments
10127read from the second line of the script, producing:
10128
10129 /usr/local/bin/guile -e main -s ekko a speckled gecko
10130
10131This tells Guile to load the `ekko' script, and apply the function
10132`main' to the argument list ("a" "speckled" "gecko").
10133
10134Here is how Guile parses the command-line arguments:
10135- Each space character terminates an argument. This means that two
10136 spaces in a row introduce an empty-string argument.
10137- The tab character is not permitted (unless you quote it with the
10138 backslash character, as described below), to avoid confusion.
10139- The newline character terminates the sequence of arguments, and will
10140 also terminate a final non-empty argument. (However, a newline
10141 following a space will not introduce a final empty-string argument;
10142 it only terminates the argument list.)
10143- The backslash character is the escape character. It escapes
10144 backslash, space, tab, and newline. The ANSI C escape sequences
10145 like \n and \t are also supported. These produce argument
10146 constituents; the two-character combination \n doesn't act like a
10147 terminating newline. The escape sequence \NNN for exactly three
10148 octal digits reads as the character whose ASCII code is NNN. As
10149 above, characters produced this way are argument constituents.
10150 Backslash followed by other characters is not allowed.
10151
48d224d7
JB
10152* Changes to the procedure for linking libguile with your programs
10153
10154** Guile now builds and installs a shared guile library, if your
10155system support shared libraries. (It still builds a static library on
10156all systems.) Guile automatically detects whether your system
10157supports shared libraries. To prevent Guile from buildisg shared
10158libraries, pass the `--disable-shared' flag to the configure script.
10159
10160Guile takes longer to compile when it builds shared libraries, because
10161it must compile every file twice --- once to produce position-
10162independent object code, and once to produce normal object code.
10163
10164** The libthreads library has been merged into libguile.
10165
10166To link a program against Guile, you now need only link against
10167-lguile and -lqt; -lthreads is no longer needed. If you are using
10168autoconf to generate configuration scripts for your application, the
10169following lines should suffice to add the appropriate libraries to
10170your link command:
10171
10172### Find quickthreads and libguile.
10173AC_CHECK_LIB(qt, main)
10174AC_CHECK_LIB(guile, scm_shell)
f3b1485f
JB
10175
10176* Changes to Scheme functions
10177
095936d2
JB
10178** Guile Scheme's special syntax for keyword objects is now optional,
10179and disabled by default.
10180
10181The syntax variation from R4RS made it difficult to port some
10182interesting packages to Guile. The routines which accepted keyword
10183arguments (mostly in the module system) have been modified to also
10184accept symbols whose names begin with `:'.
10185
10186To change the keyword syntax, you must first import the (ice-9 debug)
10187module:
10188 (use-modules (ice-9 debug))
10189
10190Then you can enable the keyword syntax as follows:
10191 (read-set! keywords 'prefix)
10192
10193To disable keyword syntax, do this:
10194 (read-set! keywords #f)
10195
10196** Many more primitive functions accept shared substrings as
10197arguments. In the past, these functions required normal, mutable
10198strings as arguments, although they never made use of this
10199restriction.
10200
10201** The uniform array functions now operate on byte vectors. These
10202functions are `array-fill!', `serial-array-copy!', `array-copy!',
10203`serial-array-map', `array-map', `array-for-each', and
10204`array-index-map!'.
10205
10206** The new functions `trace' and `untrace' implement simple debugging
10207support for Scheme functions.
10208
10209The `trace' function accepts any number of procedures as arguments,
10210and tells the Guile interpreter to display each procedure's name and
10211arguments each time the procedure is invoked. When invoked with no
10212arguments, `trace' returns the list of procedures currently being
10213traced.
10214
10215The `untrace' function accepts any number of procedures as arguments,
10216and tells the Guile interpreter not to trace them any more. When
10217invoked with no arguments, `untrace' untraces all curretly traced
10218procedures.
10219
10220The tracing in Guile has an advantage over most other systems: we
10221don't create new procedure objects, but mark the procedure objects
10222themselves. This means that anonymous and internal procedures can be
10223traced.
10224
10225** The function `assert-repl-prompt' has been renamed to
10226`set-repl-prompt!'. It takes one argument, PROMPT.
10227- If PROMPT is #f, the Guile read-eval-print loop will not prompt.
10228- If PROMPT is a string, we use it as a prompt.
10229- If PROMPT is a procedure accepting no arguments, we call it, and
10230 display the result as a prompt.
10231- Otherwise, we display "> ".
10232
10233** The new function `eval-string' reads Scheme expressions from a
10234string and evaluates them, returning the value of the last expression
10235in the string. If the string contains no expressions, it returns an
10236unspecified value.
10237
10238** The new function `thunk?' returns true iff its argument is a
10239procedure of zero arguments.
10240
10241** `defined?' is now a builtin function, instead of syntax. This
10242means that its argument should be quoted. It returns #t iff its
10243argument is bound in the current module.
10244
10245** The new syntax `use-modules' allows you to add new modules to your
10246environment without re-typing a complete `define-module' form. It
10247accepts any number of module names as arguments, and imports their
10248public bindings into the current module.
10249
10250** The new function (module-defined? NAME MODULE) returns true iff
10251NAME, a symbol, is defined in MODULE, a module object.
10252
10253** The new function `builtin-bindings' creates and returns a hash
10254table containing copies of all the root module's bindings.
10255
10256** The new function `builtin-weak-bindings' does the same as
10257`builtin-bindings', but creates a doubly-weak hash table.
10258
10259** The `equal?' function now considers variable objects to be
10260equivalent if they have the same name and the same value.
10261
10262** The new function `command-line' returns the command-line arguments
10263given to Guile, as a list of strings.
10264
10265When using guile as a script interpreter, `command-line' returns the
10266script's arguments; those processed by the interpreter (like `-s' or
10267`-c') are omitted. (In other words, you get the normal, expected
10268behavior.) Any application that uses scm_shell to process its
10269command-line arguments gets this behavior as well.
10270
10271** The new function `load-user-init' looks for a file called `.guile'
10272in the user's home directory, and loads it if it exists. This is
10273mostly for use by the code generated by scm_compile_shell_switches,
10274but we thought it might also be useful in other circumstances.
10275
10276** The new function `log10' returns the base-10 logarithm of its
10277argument.
10278
10279** Changes to I/O functions
10280
6c0201ad 10281*** The functions `read', `primitive-load', `read-and-eval!', and
095936d2
JB
10282`primitive-load-path' no longer take optional arguments controlling
10283case insensitivity and a `#' parser.
10284
10285Case sensitivity is now controlled by a read option called
10286`case-insensitive'. The user can add new `#' syntaxes with the
10287`read-hash-extend' function (see below).
10288
10289*** The new function `read-hash-extend' allows the user to change the
10290syntax of Guile Scheme in a somewhat controlled way.
10291
10292(read-hash-extend CHAR PROC)
10293 When parsing S-expressions, if we read a `#' character followed by
10294 the character CHAR, use PROC to parse an object from the stream.
10295 If PROC is #f, remove any parsing procedure registered for CHAR.
10296
10297 The reader applies PROC to two arguments: CHAR and an input port.
10298
6c0201ad 10299*** The new functions read-delimited and read-delimited! provide a
095936d2
JB
10300general mechanism for doing delimited input on streams.
10301
10302(read-delimited DELIMS [PORT HANDLE-DELIM])
10303 Read until we encounter one of the characters in DELIMS (a string),
10304 or end-of-file. PORT is the input port to read from; it defaults to
10305 the current input port. The HANDLE-DELIM parameter determines how
10306 the terminating character is handled; it should be one of the
10307 following symbols:
10308
10309 'trim omit delimiter from result
10310 'peek leave delimiter character in input stream
10311 'concat append delimiter character to returned value
10312 'split return a pair: (RESULT . TERMINATOR)
10313
10314 HANDLE-DELIM defaults to 'peek.
10315
10316(read-delimited! DELIMS BUF [PORT HANDLE-DELIM START END])
10317 A side-effecting variant of `read-delimited'.
10318
10319 The data is written into the string BUF at the indices in the
10320 half-open interval [START, END); the default interval is the whole
10321 string: START = 0 and END = (string-length BUF). The values of
10322 START and END must specify a well-defined interval in BUF, i.e.
10323 0 <= START <= END <= (string-length BUF).
10324
10325 It returns NBYTES, the number of bytes read. If the buffer filled
10326 up without a delimiter character being found, it returns #f. If the
10327 port is at EOF when the read starts, it returns the EOF object.
10328
10329 If an integer is returned (i.e., the read is successfully terminated
10330 by reading a delimiter character), then the HANDLE-DELIM parameter
10331 determines how to handle the terminating character. It is described
10332 above, and defaults to 'peek.
10333
10334(The descriptions of these functions were borrowed from the SCSH
10335manual, by Olin Shivers and Brian Carlstrom.)
10336
10337*** The `%read-delimited!' function is the primitive used to implement
10338`read-delimited' and `read-delimited!'.
10339
10340(%read-delimited! DELIMS BUF GOBBLE? [PORT START END])
10341
10342This returns a pair of values: (TERMINATOR . NUM-READ).
10343- TERMINATOR describes why the read was terminated. If it is a
10344 character or the eof object, then that is the value that terminated
10345 the read. If it is #f, the function filled the buffer without finding
10346 a delimiting character.
10347- NUM-READ is the number of characters read into BUF.
10348
10349If the read is successfully terminated by reading a delimiter
10350character, then the gobble? parameter determines what to do with the
10351terminating character. If true, the character is removed from the
10352input stream; if false, the character is left in the input stream
10353where a subsequent read operation will retrieve it. In either case,
10354the character is also the first value returned by the procedure call.
10355
10356(The descriptions of this function was borrowed from the SCSH manual,
10357by Olin Shivers and Brian Carlstrom.)
10358
10359*** The `read-line' and `read-line!' functions have changed; they now
10360trim the terminator by default; previously they appended it to the
10361returned string. For the old behavior, use (read-line PORT 'concat).
10362
10363*** The functions `uniform-array-read!' and `uniform-array-write!' now
10364take new optional START and END arguments, specifying the region of
10365the array to read and write.
10366
f348c807
JB
10367*** The `ungetc-char-ready?' function has been removed. We feel it's
10368inappropriate for an interface to expose implementation details this
10369way.
095936d2
JB
10370
10371** Changes to the Unix library and system call interface
10372
10373*** The new fcntl function provides access to the Unix `fcntl' system
10374call.
10375
10376(fcntl PORT COMMAND VALUE)
10377 Apply COMMAND to PORT's file descriptor, with VALUE as an argument.
10378 Values for COMMAND are:
10379
10380 F_DUPFD duplicate a file descriptor
10381 F_GETFD read the descriptor's close-on-exec flag
10382 F_SETFD set the descriptor's close-on-exec flag to VALUE
10383 F_GETFL read the descriptor's flags, as set on open
10384 F_SETFL set the descriptor's flags, as set on open to VALUE
10385 F_GETOWN return the process ID of a socket's owner, for SIGIO
10386 F_SETOWN set the process that owns a socket to VALUE, for SIGIO
10387 FD_CLOEXEC not sure what this is
10388
10389For details, see the documentation for the fcntl system call.
10390
10391*** The arguments to `select' have changed, for compatibility with
10392SCSH. The TIMEOUT parameter may now be non-integral, yielding the
10393expected behavior. The MILLISECONDS parameter has been changed to
10394MICROSECONDS, to more closely resemble the underlying system call.
10395The RVEC, WVEC, and EVEC arguments can now be vectors; the type of the
10396corresponding return set will be the same.
10397
10398*** The arguments to the `mknod' system call have changed. They are
10399now:
10400
10401(mknod PATH TYPE PERMS DEV)
10402 Create a new file (`node') in the file system. PATH is the name of
10403 the file to create. TYPE is the kind of file to create; it should
10404 be 'fifo, 'block-special, or 'char-special. PERMS specifies the
10405 permission bits to give the newly created file. If TYPE is
10406 'block-special or 'char-special, DEV specifies which device the
10407 special file refers to; its interpretation depends on the kind of
10408 special file being created.
10409
10410*** The `fork' function has been renamed to `primitive-fork', to avoid
10411clashing with various SCSH forks.
10412
10413*** The `recv' and `recvfrom' functions have been renamed to `recv!'
10414and `recvfrom!'. They no longer accept a size for a second argument;
10415you must pass a string to hold the received value. They no longer
10416return the buffer. Instead, `recv' returns the length of the message
10417received, and `recvfrom' returns a pair containing the packet's length
6c0201ad 10418and originating address.
095936d2
JB
10419
10420*** The file descriptor datatype has been removed, as have the
10421`read-fd', `write-fd', `close', `lseek', and `dup' functions.
10422We plan to replace these functions with a SCSH-compatible interface.
10423
10424*** The `create' function has been removed; it's just a special case
10425of `open'.
10426
10427*** There are new functions to break down process termination status
10428values. In the descriptions below, STATUS is a value returned by
10429`waitpid'.
10430
10431(status:exit-val STATUS)
10432 If the child process exited normally, this function returns the exit
10433 code for the child process (i.e., the value passed to exit, or
10434 returned from main). If the child process did not exit normally,
10435 this function returns #f.
10436
10437(status:stop-sig STATUS)
10438 If the child process was suspended by a signal, this function
10439 returns the signal that suspended the child. Otherwise, it returns
10440 #f.
10441
10442(status:term-sig STATUS)
10443 If the child process terminated abnormally, this function returns
10444 the signal that terminated the child. Otherwise, this function
10445 returns false.
10446
10447POSIX promises that exactly one of these functions will return true on
10448a valid STATUS value.
10449
10450These functions are compatible with SCSH.
10451
10452*** There are new accessors and setters for the broken-out time vectors
48d224d7
JB
10453returned by `localtime', `gmtime', and that ilk. They are:
10454
10455 Component Accessor Setter
10456 ========================= ============ ============
10457 seconds tm:sec set-tm:sec
10458 minutes tm:min set-tm:min
10459 hours tm:hour set-tm:hour
10460 day of the month tm:mday set-tm:mday
10461 month tm:mon set-tm:mon
10462 year tm:year set-tm:year
10463 day of the week tm:wday set-tm:wday
10464 day in the year tm:yday set-tm:yday
10465 daylight saving time tm:isdst set-tm:isdst
10466 GMT offset, seconds tm:gmtoff set-tm:gmtoff
10467 name of time zone tm:zone set-tm:zone
10468
095936d2
JB
10469*** There are new accessors for the vectors returned by `uname',
10470describing the host system:
48d224d7
JB
10471
10472 Component Accessor
10473 ============================================== ================
10474 name of the operating system implementation utsname:sysname
10475 network name of this machine utsname:nodename
10476 release level of the operating system utsname:release
10477 version level of the operating system utsname:version
10478 machine hardware platform utsname:machine
10479
095936d2
JB
10480*** There are new accessors for the vectors returned by `getpw',
10481`getpwnam', `getpwuid', and `getpwent', describing entries from the
10482system's user database:
10483
10484 Component Accessor
10485 ====================== =================
10486 user name passwd:name
10487 user password passwd:passwd
10488 user id passwd:uid
10489 group id passwd:gid
10490 real name passwd:gecos
10491 home directory passwd:dir
10492 shell program passwd:shell
10493
10494*** There are new accessors for the vectors returned by `getgr',
10495`getgrnam', `getgrgid', and `getgrent', describing entries from the
10496system's group database:
10497
10498 Component Accessor
10499 ======================= ============
10500 group name group:name
10501 group password group:passwd
10502 group id group:gid
10503 group members group:mem
10504
10505*** There are new accessors for the vectors returned by `gethost',
10506`gethostbyaddr', `gethostbyname', and `gethostent', describing
10507internet hosts:
10508
10509 Component Accessor
10510 ========================= ===============
10511 official name of host hostent:name
10512 alias list hostent:aliases
10513 host address type hostent:addrtype
10514 length of address hostent:length
10515 list of addresses hostent:addr-list
10516
10517*** There are new accessors for the vectors returned by `getnet',
10518`getnetbyaddr', `getnetbyname', and `getnetent', describing internet
10519networks:
10520
10521 Component Accessor
10522 ========================= ===============
10523 official name of net netent:name
10524 alias list netent:aliases
10525 net number type netent:addrtype
10526 net number netent:net
10527
10528*** There are new accessors for the vectors returned by `getproto',
10529`getprotobyname', `getprotobynumber', and `getprotoent', describing
10530internet protocols:
10531
10532 Component Accessor
10533 ========================= ===============
10534 official protocol name protoent:name
10535 alias list protoent:aliases
10536 protocol number protoent:proto
10537
10538*** There are new accessors for the vectors returned by `getserv',
10539`getservbyname', `getservbyport', and `getservent', describing
10540internet protocols:
10541
10542 Component Accessor
10543 ========================= ===============
6c0201ad 10544 official service name servent:name
095936d2 10545 alias list servent:aliases
6c0201ad
TTN
10546 port number servent:port
10547 protocol to use servent:proto
095936d2
JB
10548
10549*** There are new accessors for the sockaddr structures returned by
10550`accept', `getsockname', `getpeername', `recvfrom!':
10551
10552 Component Accessor
10553 ======================================== ===============
6c0201ad 10554 address format (`family') sockaddr:fam
095936d2
JB
10555 path, for file domain addresses sockaddr:path
10556 address, for internet domain addresses sockaddr:addr
10557 TCP or UDP port, for internet sockaddr:port
10558
10559*** The `getpwent', `getgrent', `gethostent', `getnetent',
10560`getprotoent', and `getservent' functions now return #f at the end of
10561the user database. (They used to throw an exception.)
10562
10563Note that calling MUMBLEent function is equivalent to calling the
10564corresponding MUMBLE function with no arguments.
10565
10566*** The `setpwent', `setgrent', `sethostent', `setnetent',
10567`setprotoent', and `setservent' routines now take no arguments.
10568
10569*** The `gethost', `getproto', `getnet', and `getserv' functions now
10570provide more useful information when they throw an exception.
10571
10572*** The `lnaof' function has been renamed to `inet-lnaof'.
10573
10574*** Guile now claims to have the `current-time' feature.
10575
10576*** The `mktime' function now takes an optional second argument ZONE,
10577giving the time zone to use for the conversion. ZONE should be a
10578string, in the same format as expected for the "TZ" environment variable.
10579
10580*** The `strptime' function now returns a pair (TIME . COUNT), where
10581TIME is the parsed time as a vector, and COUNT is the number of
10582characters from the string left unparsed. This function used to
10583return the remaining characters as a string.
10584
10585*** The `gettimeofday' function has replaced the old `time+ticks' function.
10586The return value is now (SECONDS . MICROSECONDS); the fractional
10587component is no longer expressed in "ticks".
10588
10589*** The `ticks/sec' constant has been removed, in light of the above change.
6685dc83 10590
ea00ecba
MG
10591* Changes to the gh_ interface
10592
10593** gh_eval_str() now returns an SCM object which is the result of the
10594evaluation
10595
aaef0d2a
MG
10596** gh_scm2str() now copies the Scheme data to a caller-provided C
10597array
10598
10599** gh_scm2newstr() now makes a C array, copies the Scheme data to it,
10600and returns the array
10601
10602** gh_scm2str0() is gone: there is no need to distinguish
10603null-terminated from non-null-terminated, since gh_scm2newstr() allows
10604the user to interpret the data both ways.
10605
f3b1485f
JB
10606* Changes to the scm_ interface
10607
095936d2
JB
10608** The new function scm_symbol_value0 provides an easy way to get a
10609symbol's value from C code:
10610
10611SCM scm_symbol_value0 (char *NAME)
10612 Return the value of the symbol named by the null-terminated string
10613 NAME in the current module. If the symbol named NAME is unbound in
10614 the current module, return SCM_UNDEFINED.
10615
10616** The new function scm_sysintern0 creates new top-level variables,
10617without assigning them a value.
10618
10619SCM scm_sysintern0 (char *NAME)
10620 Create a new Scheme top-level variable named NAME. NAME is a
10621 null-terminated string. Return the variable's value cell.
10622
10623** The function scm_internal_catch is the guts of catch. It handles
10624all the mechanics of setting up a catch target, invoking the catch
10625body, and perhaps invoking the handler if the body does a throw.
10626
10627The function is designed to be usable from C code, but is general
10628enough to implement all the semantics Guile Scheme expects from throw.
10629
10630TAG is the catch tag. Typically, this is a symbol, but this function
10631doesn't actually care about that.
10632
10633BODY is a pointer to a C function which runs the body of the catch;
10634this is the code you can throw from. We call it like this:
10635 BODY (BODY_DATA, JMPBUF)
10636where:
10637 BODY_DATA is just the BODY_DATA argument we received; we pass it
10638 through to BODY as its first argument. The caller can make
10639 BODY_DATA point to anything useful that BODY might need.
10640 JMPBUF is the Scheme jmpbuf object corresponding to this catch,
10641 which we have just created and initialized.
10642
10643HANDLER is a pointer to a C function to deal with a throw to TAG,
10644should one occur. We call it like this:
10645 HANDLER (HANDLER_DATA, THROWN_TAG, THROW_ARGS)
10646where
10647 HANDLER_DATA is the HANDLER_DATA argument we recevied; it's the
10648 same idea as BODY_DATA above.
10649 THROWN_TAG is the tag that the user threw to; usually this is
10650 TAG, but it could be something else if TAG was #t (i.e., a
10651 catch-all), or the user threw to a jmpbuf.
10652 THROW_ARGS is the list of arguments the user passed to the THROW
10653 function.
10654
10655BODY_DATA is just a pointer we pass through to BODY. HANDLER_DATA
10656is just a pointer we pass through to HANDLER. We don't actually
10657use either of those pointers otherwise ourselves. The idea is
10658that, if our caller wants to communicate something to BODY or
10659HANDLER, it can pass a pointer to it as MUMBLE_DATA, which BODY and
10660HANDLER can then use. Think of it as a way to make BODY and
10661HANDLER closures, not just functions; MUMBLE_DATA points to the
10662enclosed variables.
10663
10664Of course, it's up to the caller to make sure that any data a
10665MUMBLE_DATA needs is protected from GC. A common way to do this is
10666to make MUMBLE_DATA a pointer to data stored in an automatic
10667structure variable; since the collector must scan the stack for
10668references anyway, this assures that any references in MUMBLE_DATA
10669will be found.
10670
10671** The new function scm_internal_lazy_catch is exactly like
10672scm_internal_catch, except:
10673
10674- It does not unwind the stack (this is the major difference).
10675- If handler returns, its value is returned from the throw.
10676- BODY always receives #f as its JMPBUF argument (since there's no
10677 jmpbuf associated with a lazy catch, because we don't unwind the
10678 stack.)
10679
10680** scm_body_thunk is a new body function you can pass to
10681scm_internal_catch if you want the body to be like Scheme's `catch'
10682--- a thunk, or a function of one argument if the tag is #f.
10683
10684BODY_DATA is a pointer to a scm_body_thunk_data structure, which
10685contains the Scheme procedure to invoke as the body, and the tag
10686we're catching. If the tag is #f, then we pass JMPBUF (created by
10687scm_internal_catch) to the body procedure; otherwise, the body gets
10688no arguments.
10689
10690** scm_handle_by_proc is a new handler function you can pass to
10691scm_internal_catch if you want the handler to act like Scheme's catch
10692--- call a procedure with the tag and the throw arguments.
10693
10694If the user does a throw to this catch, this function runs a handler
10695procedure written in Scheme. HANDLER_DATA is a pointer to an SCM
10696variable holding the Scheme procedure object to invoke. It ought to
10697be a pointer to an automatic variable (i.e., one living on the stack),
10698or the procedure object should be otherwise protected from GC.
10699
10700** scm_handle_by_message is a new handler function to use with
10701`scm_internal_catch' if you want Guile to print a message and die.
10702It's useful for dealing with throws to uncaught keys at the top level.
10703
10704HANDLER_DATA, if non-zero, is assumed to be a char * pointing to a
10705message header to print; if zero, we use "guile" instead. That
10706text is followed by a colon, then the message described by ARGS.
10707
10708** The return type of scm_boot_guile is now void; the function does
10709not return a value, and indeed, never returns at all.
10710
f3b1485f
JB
10711** The new function scm_shell makes it easy for user applications to
10712process command-line arguments in a way that is compatible with the
10713stand-alone guile interpreter (which is in turn compatible with SCSH,
10714the Scheme shell).
10715
10716To use the scm_shell function, first initialize any guile modules
10717linked into your application, and then call scm_shell with the values
7ed46dc8 10718of ARGC and ARGV your `main' function received. scm_shell will add
f3b1485f
JB
10719any SCSH-style meta-arguments from the top of the script file to the
10720argument vector, and then process the command-line arguments. This
10721generally means loading a script file or starting up an interactive
10722command interpreter. For details, see "Changes to the stand-alone
10723interpreter" above.
10724
095936d2 10725** The new functions scm_get_meta_args and scm_count_argv help you
6c0201ad 10726implement the SCSH-style meta-argument, `\'.
095936d2
JB
10727
10728char **scm_get_meta_args (int ARGC, char **ARGV)
10729 If the second element of ARGV is a string consisting of a single
10730 backslash character (i.e. "\\" in Scheme notation), open the file
10731 named by the following argument, parse arguments from it, and return
10732 the spliced command line. The returned array is terminated by a
10733 null pointer.
6c0201ad 10734
095936d2
JB
10735 For details of argument parsing, see above, under "guile now accepts
10736 command-line arguments compatible with SCSH..."
10737
10738int scm_count_argv (char **ARGV)
10739 Count the arguments in ARGV, assuming it is terminated by a null
10740 pointer.
10741
10742For an example of how these functions might be used, see the source
10743code for the function scm_shell in libguile/script.c.
10744
10745You will usually want to use scm_shell instead of calling this
10746function yourself.
10747
10748** The new function scm_compile_shell_switches turns an array of
10749command-line arguments into Scheme code to carry out the actions they
10750describe. Given ARGC and ARGV, it returns a Scheme expression to
10751evaluate, and calls scm_set_program_arguments to make any remaining
10752command-line arguments available to the Scheme code. For example,
10753given the following arguments:
10754
10755 -e main -s ekko a speckled gecko
10756
10757scm_set_program_arguments will return the following expression:
10758
10759 (begin (load "ekko") (main (command-line)) (quit))
10760
10761You will usually want to use scm_shell instead of calling this
10762function yourself.
10763
10764** The function scm_shell_usage prints a usage message appropriate for
10765an interpreter that uses scm_compile_shell_switches to handle its
10766command-line arguments.
10767
10768void scm_shell_usage (int FATAL, char *MESSAGE)
10769 Print a usage message to the standard error output. If MESSAGE is
10770 non-zero, write it before the usage message, followed by a newline.
10771 If FATAL is non-zero, exit the process, using FATAL as the
10772 termination status. (If you want to be compatible with Guile,
10773 always use 1 as the exit status when terminating due to command-line
10774 usage problems.)
10775
10776You will usually want to use scm_shell instead of calling this
10777function yourself.
48d224d7
JB
10778
10779** scm_eval_0str now returns SCM_UNSPECIFIED if the string contains no
095936d2
JB
10780expressions. It used to return SCM_EOL. Earth-shattering.
10781
10782** The macros for declaring scheme objects in C code have been
10783rearranged slightly. They are now:
10784
10785SCM_SYMBOL (C_NAME, SCHEME_NAME)
10786 Declare a static SCM variable named C_NAME, and initialize it to
10787 point to the Scheme symbol whose name is SCHEME_NAME. C_NAME should
10788 be a C identifier, and SCHEME_NAME should be a C string.
10789
10790SCM_GLOBAL_SYMBOL (C_NAME, SCHEME_NAME)
10791 Just like SCM_SYMBOL, but make C_NAME globally visible.
10792
10793SCM_VCELL (C_NAME, SCHEME_NAME)
10794 Create a global variable at the Scheme level named SCHEME_NAME.
10795 Declare a static SCM variable named C_NAME, and initialize it to
10796 point to the Scheme variable's value cell.
10797
10798SCM_GLOBAL_VCELL (C_NAME, SCHEME_NAME)
10799 Just like SCM_VCELL, but make C_NAME globally visible.
10800
10801The `guile-snarf' script writes initialization code for these macros
10802to its standard output, given C source code as input.
10803
10804The SCM_GLOBAL macro is gone.
10805
10806** The scm_read_line and scm_read_line_x functions have been replaced
10807by Scheme code based on the %read-delimited! procedure (known to C
10808code as scm_read_delimited_x). See its description above for more
10809information.
48d224d7 10810
095936d2
JB
10811** The function scm_sys_open has been renamed to scm_open. It now
10812returns a port instead of an FD object.
ea00ecba 10813
095936d2
JB
10814* The dynamic linking support has changed. For more information, see
10815libguile/DYNAMIC-LINKING.
ea00ecba 10816
f7b47737
JB
10817\f
10818Guile 1.0b3
3065a62a 10819
f3b1485f
JB
10820User-visible changes from Thursday, September 5, 1996 until Guile 1.0
10821(Sun 5 Jan 1997):
3065a62a 10822
4b521edb 10823* Changes to the 'guile' program:
3065a62a 10824
4b521edb
JB
10825** Guile now loads some new files when it starts up. Guile first
10826searches the load path for init.scm, and loads it if found. Then, if
10827Guile is not being used to execute a script, and the user's home
10828directory contains a file named `.guile', Guile loads that.
c6486f8a 10829
4b521edb 10830** You can now use Guile as a shell script interpreter.
3065a62a
JB
10831
10832To paraphrase the SCSH manual:
10833
10834 When Unix tries to execute an executable file whose first two
10835 characters are the `#!', it treats the file not as machine code to
10836 be directly executed by the native processor, but as source code
10837 to be executed by some interpreter. The interpreter to use is
10838 specified immediately after the #! sequence on the first line of
10839 the source file. The kernel reads in the name of the interpreter,
10840 and executes that instead. It passes the interpreter the source
10841 filename as its first argument, with the original arguments
10842 following. Consult the Unix man page for the `exec' system call
10843 for more information.
10844
1a1945be
JB
10845Now you can use Guile as an interpreter, using a mechanism which is a
10846compatible subset of that provided by SCSH.
10847
3065a62a
JB
10848Guile now recognizes a '-s' command line switch, whose argument is the
10849name of a file of Scheme code to load. It also treats the two
10850characters `#!' as the start of a comment, terminated by `!#'. Thus,
10851to make a file of Scheme code directly executable by Unix, insert the
10852following two lines at the top of the file:
10853
10854#!/usr/local/bin/guile -s
10855!#
10856
10857Guile treats the argument of the `-s' command-line switch as the name
10858of a file of Scheme code to load, and treats the sequence `#!' as the
10859start of a block comment, terminated by `!#'.
10860
10861For example, here's a version of 'echo' written in Scheme:
10862
10863#!/usr/local/bin/guile -s
10864!#
10865(let loop ((args (cdr (program-arguments))))
10866 (if (pair? args)
10867 (begin
10868 (display (car args))
10869 (if (pair? (cdr args))
10870 (display " "))
10871 (loop (cdr args)))))
10872(newline)
10873
10874Why does `#!' start a block comment terminated by `!#', instead of the
10875end of the line? That is the notation SCSH uses, and although we
10876don't yet support the other SCSH features that motivate that choice,
10877we would like to be backward-compatible with any existing Guile
3763761c
JB
10878scripts once we do. Furthermore, if the path to Guile on your system
10879is too long for your kernel, you can start the script with this
10880horrible hack:
10881
10882#!/bin/sh
10883exec /really/long/path/to/guile -s "$0" ${1+"$@"}
10884!#
3065a62a
JB
10885
10886Note that some very old Unix systems don't support the `#!' syntax.
10887
c6486f8a 10888
4b521edb 10889** You can now run Guile without installing it.
6685dc83
JB
10890
10891Previous versions of the interactive Guile interpreter (`guile')
10892couldn't start up unless Guile's Scheme library had been installed;
10893they used the value of the environment variable `SCHEME_LOAD_PATH'
10894later on in the startup process, but not to find the startup code
10895itself. Now Guile uses `SCHEME_LOAD_PATH' in all searches for Scheme
10896code.
10897
10898To run Guile without installing it, build it in the normal way, and
10899then set the environment variable `SCHEME_LOAD_PATH' to a
10900colon-separated list of directories, including the top-level directory
10901of the Guile sources. For example, if you unpacked Guile so that the
10902full filename of this NEWS file is /home/jimb/guile-1.0b3/NEWS, then
10903you might say
10904
10905 export SCHEME_LOAD_PATH=/home/jimb/my-scheme:/home/jimb/guile-1.0b3
10906
c6486f8a 10907
4b521edb
JB
10908** Guile's read-eval-print loop no longer prints #<unspecified>
10909results. If the user wants to see this, she can evaluate the
10910expression (assert-repl-print-unspecified #t), perhaps in her startup
48d224d7 10911file.
6685dc83 10912
4b521edb
JB
10913** Guile no longer shows backtraces by default when an error occurs;
10914however, it does display a message saying how to get one, and how to
10915request that they be displayed by default. After an error, evaluate
10916 (backtrace)
10917to see a backtrace, and
10918 (debug-enable 'backtrace)
10919to see them by default.
6685dc83 10920
6685dc83 10921
d9fb83d9 10922
4b521edb
JB
10923* Changes to Guile Scheme:
10924
10925** Guile now distinguishes between #f and the empty list.
10926
10927This is for compatibility with the IEEE standard, the (possibly)
10928upcoming Revised^5 Report on Scheme, and many extant Scheme
10929implementations.
10930
10931Guile used to have #f and '() denote the same object, to make Scheme's
10932type system more compatible with Emacs Lisp's. However, the change
10933caused too much trouble for Scheme programmers, and we found another
10934way to reconcile Emacs Lisp with Scheme that didn't require this.
10935
10936
10937** Guile's delq, delv, delete functions, and their destructive
c6486f8a
JB
10938counterparts, delq!, delv!, and delete!, now remove all matching
10939elements from the list, not just the first. This matches the behavior
10940of the corresponding Emacs Lisp functions, and (I believe) the Maclisp
10941functions which inspired them.
10942
10943I recognize that this change may break code in subtle ways, but it
10944seems best to make the change before the FSF's first Guile release,
10945rather than after.
10946
10947
4b521edb 10948** The compiled-library-path function has been deleted from libguile.
6685dc83 10949
4b521edb 10950** The facilities for loading Scheme source files have changed.
c6486f8a 10951
4b521edb 10952*** The variable %load-path now tells Guile which directories to search
6685dc83
JB
10953for Scheme code. Its value is a list of strings, each of which names
10954a directory.
10955
4b521edb
JB
10956*** The variable %load-extensions now tells Guile which extensions to
10957try appending to a filename when searching the load path. Its value
10958is a list of strings. Its default value is ("" ".scm").
10959
10960*** (%search-load-path FILENAME) searches the directories listed in the
10961value of the %load-path variable for a Scheme file named FILENAME,
10962with all the extensions listed in %load-extensions. If it finds a
10963match, then it returns its full filename. If FILENAME is absolute, it
10964returns it unchanged. Otherwise, it returns #f.
6685dc83 10965
4b521edb
JB
10966%search-load-path will not return matches that refer to directories.
10967
10968*** (primitive-load FILENAME :optional CASE-INSENSITIVE-P SHARP)
10969uses %seach-load-path to find a file named FILENAME, and loads it if
10970it finds it. If it can't read FILENAME for any reason, it throws an
10971error.
6685dc83
JB
10972
10973The arguments CASE-INSENSITIVE-P and SHARP are interpreted as by the
4b521edb
JB
10974`read' function.
10975
10976*** load uses the same searching semantics as primitive-load.
10977
10978*** The functions %try-load, try-load-with-path, %load, load-with-path,
10979basic-try-load-with-path, basic-load-with-path, try-load-module-with-
10980path, and load-module-with-path have been deleted. The functions
10981above should serve their purposes.
10982
10983*** If the value of the variable %load-hook is a procedure,
10984`primitive-load' applies its value to the name of the file being
10985loaded (without the load path directory name prepended). If its value
10986is #f, it is ignored. Otherwise, an error occurs.
10987
10988This is mostly useful for printing load notification messages.
10989
10990
10991** The function `eval!' is no longer accessible from the scheme level.
10992We can't allow operations which introduce glocs into the scheme level,
10993because Guile's type system can't handle these as data. Use `eval' or
10994`read-and-eval!' (see below) as replacement.
10995
10996** The new function read-and-eval! reads an expression from PORT,
10997evaluates it, and returns the result. This is more efficient than
10998simply calling `read' and `eval', since it is not necessary to make a
10999copy of the expression for the evaluator to munge.
11000
11001Its optional arguments CASE_INSENSITIVE_P and SHARP are interpreted as
11002for the `read' function.
11003
11004
11005** The function `int?' has been removed; its definition was identical
11006to that of `integer?'.
11007
11008** The functions `<?', `<?', `<=?', `=?', `>?', and `>=?'. Code should
11009use the R4RS names for these functions.
11010
11011** The function object-properties no longer returns the hash handle;
11012it simply returns the object's property list.
11013
11014** Many functions have been changed to throw errors, instead of
11015returning #f on failure. The point of providing exception handling in
11016the language is to simplify the logic of user code, but this is less
11017useful if Guile's primitives don't throw exceptions.
11018
11019** The function `fileno' has been renamed from `%fileno'.
11020
11021** The function primitive-mode->fdes returns #t or #f now, not 1 or 0.
11022
11023
11024* Changes to Guile's C interface:
11025
11026** The library's initialization procedure has been simplified.
11027scm_boot_guile now has the prototype:
11028
11029void scm_boot_guile (int ARGC,
11030 char **ARGV,
11031 void (*main_func) (),
11032 void *closure);
11033
11034scm_boot_guile calls MAIN_FUNC, passing it CLOSURE, ARGC, and ARGV.
11035MAIN_FUNC should do all the work of the program (initializing other
11036packages, reading user input, etc.) before returning. When MAIN_FUNC
11037returns, call exit (0); this function never returns. If you want some
11038other exit value, MAIN_FUNC may call exit itself.
11039
11040scm_boot_guile arranges for program-arguments to return the strings
11041given by ARGC and ARGV. If MAIN_FUNC modifies ARGC/ARGV, should call
11042scm_set_program_arguments with the final list, so Scheme code will
11043know which arguments have been processed.
11044
11045scm_boot_guile establishes a catch-all catch handler which prints an
11046error message and exits the process. This means that Guile exits in a
11047coherent way when system errors occur and the user isn't prepared to
11048handle it. If the user doesn't like this behavior, they can establish
11049their own universal catcher in MAIN_FUNC to shadow this one.
11050
11051Why must the caller do all the real work from MAIN_FUNC? The garbage
11052collector assumes that all local variables of type SCM will be above
11053scm_boot_guile's stack frame on the stack. If you try to manipulate
11054SCM values after this function returns, it's the luck of the draw
11055whether the GC will be able to find the objects you allocate. So,
11056scm_boot_guile function exits, rather than returning, to discourage
11057people from making that mistake.
11058
11059The IN, OUT, and ERR arguments were removed; there are other
11060convenient ways to override these when desired.
11061
11062The RESULT argument was deleted; this function should never return.
11063
11064The BOOT_CMD argument was deleted; the MAIN_FUNC argument is more
11065general.
11066
11067
11068** Guile's header files should no longer conflict with your system's
11069header files.
11070
11071In order to compile code which #included <libguile.h>, previous
11072versions of Guile required you to add a directory containing all the
11073Guile header files to your #include path. This was a problem, since
11074Guile's header files have names which conflict with many systems'
11075header files.
11076
11077Now only <libguile.h> need appear in your #include path; you must
11078refer to all Guile's other header files as <libguile/mumble.h>.
11079Guile's installation procedure puts libguile.h in $(includedir), and
11080the rest in $(includedir)/libguile.
11081
11082
11083** Two new C functions, scm_protect_object and scm_unprotect_object,
11084have been added to the Guile library.
11085
11086scm_protect_object (OBJ) protects OBJ from the garbage collector.
11087OBJ will not be freed, even if all other references are dropped,
11088until someone does scm_unprotect_object (OBJ). Both functions
11089return OBJ.
11090
11091Note that calls to scm_protect_object do not nest. You can call
11092scm_protect_object any number of times on a given object, and the
11093next call to scm_unprotect_object will unprotect it completely.
11094
11095Basically, scm_protect_object and scm_unprotect_object just
11096maintain a list of references to things. Since the GC knows about
11097this list, all objects it mentions stay alive. scm_protect_object
11098adds its argument to the list; scm_unprotect_object remove its
11099argument from the list.
11100
11101
11102** scm_eval_0str now returns the value of the last expression
11103evaluated.
11104
11105** The new function scm_read_0str reads an s-expression from a
11106null-terminated string, and returns it.
11107
11108** The new function `scm_stdio_to_port' converts a STDIO file pointer
11109to a Scheme port object.
11110
11111** The new function `scm_set_program_arguments' allows C code to set
e80c8fea 11112the value returned by the Scheme `program-arguments' function.
6685dc83 11113
6685dc83 11114\f
1a1945be
JB
11115Older changes:
11116
11117* Guile no longer includes sophisticated Tcl/Tk support.
11118
11119The old Tcl/Tk support was unsatisfying to us, because it required the
11120user to link against the Tcl library, as well as Tk and Guile. The
11121interface was also un-lispy, in that it preserved Tcl/Tk's practice of
11122referring to widgets by names, rather than exporting widgets to Scheme
11123code as a special datatype.
11124
11125In the Usenix Tk Developer's Workshop held in July 1996, the Tcl/Tk
11126maintainers described some very interesting changes in progress to the
11127Tcl/Tk internals, which would facilitate clean interfaces between lone
11128Tk and other interpreters --- even for garbage-collected languages
11129like Scheme. They expected the new Tk to be publicly available in the
11130fall of 1996.
11131
11132Since it seems that Guile might soon have a new, cleaner interface to
11133lone Tk, and that the old Guile/Tk glue code would probably need to be
11134completely rewritten, we (Jim Blandy and Richard Stallman) have
11135decided not to support the old code. We'll spend the time instead on
11136a good interface to the newer Tk, as soon as it is available.
5c54da76 11137
8512dea6 11138Until then, gtcltk-lib provides trivial, low-maintenance functionality.
deb95d71 11139
5c54da76
JB
11140\f
11141Copyright information:
11142
4f416616 11143Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2006 Free Software Foundation, Inc.
5c54da76
JB
11144
11145 Permission is granted to anyone to make or distribute verbatim copies
11146 of this document as received, in any medium, provided that the
11147 copyright notice and this permission notice are preserved,
11148 thus giving the recipient permission to redistribute in turn.
11149
11150 Permission is granted to distribute modified versions
11151 of this document, or of portions of it,
11152 under the above conditions, provided also that they
11153 carry prominent notices stating who last changed them.
11154
48d224d7
JB
11155\f
11156Local variables:
11157mode: outline
11158paragraph-separate: "[ \f]*$"
11159end: