incremental NEWS work
[bpt/guile.git] / NEWS
CommitLineData
b2cbe8d8 1Guile NEWS --- history of user-visible changes.
de2811cc 2Copyright (C) 1996-2013 Free Software Foundation, Inc.
5c54da76
JB
3See the end for copying conditions.
4
1e457544 5Please send Guile bug reports to bug-guile@gnu.org.
5ebbe4ef 6
66ad445d 7
de2811cc
AW
8Changes in 2.0.8 (since 2.0.7):
9
10* TODO
11
12Reorder points in order of importance and make comprehensible
13
14Assemble thanks
15
f361bb93 16file name docs
de2811cc 17
f361bb93 18gnulib version
de2811cc 19
f361bb93 20* Notable changes
de2811cc 21
f361bb93 22** New guile.m4
de2811cc 23
f361bb93
AW
24The `guile.m4' autoconf macros have been rewritten to use `guild' and
25`pkg-config' instead of the deprecated `guile-config' (which itself
26calls pkg-config).
de2811cc 27
f361bb93
AW
28There is also a new macro, `GUILE_PKG', which allows packages to select
29the version of Guile that they want to compile against. See "Autoconf
30Macros" in the manual, for more information.
de2811cc 31
f361bb93 32** Better Windows support
de2811cc 33
f361bb93
AW
34Guile now correctly identifies absolute paths on Windows (MinGW), and
35creates files on that platform according to its path conventions. See
36XXX in the manual, for all details.
de2811cc 37
f361bb93
AW
38In addition, the new Gnulib imports provide `select' and `poll' on
39Windows builds.
de2811cc 40
f361bb93
AW
41As an incompatible change, systems that are missing <sys/select.h> were
42previously provided a public `scm_std_select' C function that defined a
43version of `select', but unhappily it also provided its own incompatible
44definitions for FD_SET, FD_ZERO, and other system interface. Guile
45should not be setting these macros in public API, so this interface was
46removed on those plaforms (basically only MinGW).
de2811cc 47
f361bb93 48** Gnulib update
de2811cc 49
f361bb93
AW
50Guile's copy of Gnulib was updated to XXX. The following modules were
51imported from Gnulib: select, times, pipe-posix, fstat, getlogin, and
52poll.
de2811cc 53
f361bb93 54** Optimizations
de2811cc 55
f361bb93
AW
56There were a number of improvements to the partial evaluator, allowing
57complete reduction of forms like:
de2811cc 58
f361bb93 59 ((let ((_ 10)) (lambda () _)))
de2811cc 60
f361bb93 61 ((lambda _ _))
de2811cc 62
f361bb93 63 (apply (lambda _) 1 2 3 4)
de2811cc 64
f361bb93 65 (call-with-values (lambda () (values 1 2)) (lambda _ _))
de2811cc 66
f361bb93
AW
67A number (ahem) of numeric operations on have been made faster, among
68them GCD and logarithms.
de2811cc 69
f361bb93
AW
70Finally, `array-ref' and `array-set!' on arrays of rank 1 or 2 is now
71faster, because it avoids building a rest list.
de2811cc 72
f361bb93 73** `include' relative file names relative to including file
de2811cc 74
f361bb93
AW
75Given a relative file name, `include' will look for it relative to the
76directory of the including file. This harmonizes the behavior of
77`include' with that of `load'.
de2811cc 78
f361bb93 79** SLIB compatibility restored
de2811cc 80
f361bb93
AW
81Guile 2.0.8 is now compatible with SLIB. You will have to use a
82development version of SLIB, however, until a new version of SLIB is
83released.
de2811cc 84
f361bb93
AW
85** Better ,trace REPL command
86
87Sometimes the ,trace output for nested function calls could overflow the
88terminal width, which wasn't useful. Now there is a limit to the amount
89of space the prefix will take. See the documentation for ",trace" for
90more information.
de2811cc
AW
91
92** Update predefined character sets to Unicode 6.2
93
94* Manual updates
95
f361bb93 96** Better SXML documentation
de2811cc 97
f361bb93
AW
98The documentation for SXML modules was much improved, though there is
99still far to go. See "SXML" in manual.
de2811cc 100
f361bb93 101** Style updates
de2811cc 102
f361bb93
AW
103Use of "iff" was replaced with standard English. Keyword arguments are
104now documented consistently, along with their default values.
de2811cc 105
f361bb93 106** An end to the generated-documentation experiment
de2811cc 107
f361bb93
AW
108When Guile 2.0 imported some modules from Guile-Lib, they came with a
109system that generated documentation from docstrings and module
110commentaries. This produced terrible documentation. We finally bit the
111bullet and incorporated these modules into the main text, and will be
112improving them manually over time, as is the case with SXML. Help is
113appreciated.
de2811cc 114
f361bb93 115** New documentation
de2811cc 116
f361bb93
AW
117There is now documentation for `scm_array_type', and `scm_array_ref', as
118well as for the new `array-length' / 'scm_c_array_length' /
119`scm_array_length' functions. `array-in-bounds?' has better
120documentation as well. The `program-arguments-alist' and
121`program-lambda-list' functions are now documented. Finally, the GOOPS
122class hierarchy diagram has been regenerated for the web and print
123output formats.
de2811cc 124
f361bb93 125* New deprecations
de2811cc 126
f361bb93 127** Deprecate generalized vector interface
de2811cc 128
f361bb93
AW
129The generalized vector interface, introduced in 1.8.0, is simply a
130redundant, verbose interface to arrays of rank 1. `array-ref' and
131similar functions are entirely sufficient. Thus,
132`scm_generalized_vector_p', `scm_generalized_vector_length',
133`scm_generalized_vector_ref', `scm_generalized_vector_set_x', and
134`scm_generalized_vector_to_list' are now deprecated.
de2811cc 135
f361bb93 136** Deprecate SCM_CHAR_CODE_LIMIT and char-code-limit
de2811cc 137
f361bb93
AW
138These constants were defined to 256, which is not the highest codepoint
139supported by Guile. Given that they were useless and incorrect, they
140have been deprecated.
de2811cc 141
f361bb93 142** Deprecate `http-get*'
de2811cc 143
f361bb93
AW
144The new `#:streaming?' argument to `http-get' subsumes the functionality
145of `http-get*'. Also, the `#:extra-headers' argument is deprecated in
146favor of `#:headers'.
de2811cc 147
f361bb93 148** Deprecate (ice-9 mapping)
de2811cc 149
f361bb93
AW
150This module, present in Guile since 1996 but never used or documented,
151has never worked in Guile 2.0. It has now been deprecated and will be
152removed in Guile 2.2.
de2811cc
AW
153
154* New interfaces
155
156** round-ash
157
158"Bitwise Operations"
159
160** GUILE_STACK_SIZE
161
162"Environment Variables"
163
164** GUILE_INSTALL_LOCALE
165
166"Environment Variables"
167
168** file names
169
170system-file-name-convention, file-name-separator?,
171absolute-file-name? file-name-separator-string
172
173missing docs
174
175** array-length
176
177Array Procedures
178
179** add hash-count for native tables
180
181Hash Tables
182
183** Add foreign types: ssize_t and ptrdiff_t.
184
185Foreign Types
186
187** Add scm_from_ptrdiff_t and scm_to_ptrdiff_t.
188
189Integers
190
191** much more capable xml->sxml
192
193namespaces, processed entities, doctypes, literal strings... see
194"Reading and Writing XML"
195
196** add --language argument to guile
197
198needs docs
199
200** current-language is a parameter in boot-9
201
202Compiler Tower; repl, compile-and-load default to current language
203
204** add fluid->parameter
205
206Parameters in manual
207
208** add read-string and read-string! to (ice-9 rdelim)
209
210Line/Delimited in manual
211
212** http-head, http-post, http-put, http-delete, http-trace http-options
213
214"Web Client"
215
216** add bytevector->string and string->bytevector in new (ice-9 iconv) module
217
218"Representing Strings as Bytes"
219
220** add repl-option for customized print
221
222"REPL Commands" in the manual (,option print ...)
223
224** current-ssax-error-port is a parameter
225
226** %site-ccache-dir
227
228"Installing Site Packages", "Build Config"
229
230* Build fixes
231
f361bb93 232** Fix compilation against libgc 7.3.
de2811cc 233** Fix cross-compilation of `c-tokenize.o'.
f361bb93
AW
234** Fix warning when compiling against glibc 2.17.
235** Fix documentation build against Texinfo 5.0.
236** Fix building Guile from a directory with non-ASCII characters
237** Fix native MinGW build
238** Fix MinGW builds with networking, POSIX, and thread support
de2811cc
AW
239
240* Bug fixes
241
f361bb93
AW
242** warn on multithreaded fork
243
de2811cc
AW
244** allow for spurious wakeups from pthread_cond_wait
245 (http://bugs.gnu.org/10641)
246** fix psyntax vs autoload
247 (http://bugs.gnu.org/12202)
248** use chmod portably in (system base compile)
249** fix response-body-port for responses without content-length
250** allow case-lambda expressions with no clauses
251** Improve standards conformance of string->number.
252 (http://bugs.gnu.org/11887)
253** support calls and tail-calls with more than 255 formals
254** ,option evaluates its right-hand-side
255 (http://bugs.gnu.org/13076)
256** structs with tail arrays are not simple
257 (http://bugs.gnu.org/12808)
258** Make `SCM_LONG_BIT' usable in preprocessor conditionals.
259 (http://bugs.gnu.org/13848)
260** Fix thread-unsafe lazy initializations.
261** Allow the SMOB mark procedures to be called when libgc uses parallel markers.
262 (http://bugs.gnu.org/13611)
263** Fix later-bindings-win logic in with-fluids.
264 (http://bugs.gnu.org/13843)
265** Fix duplicate removal of with-fluids.
266 (http://bugs.gnu.org/13838)
267** Support calling foreign functions of 10 arguments or more.
268** Let reverse! accept arbitrary types as second argument (new_tail)
269** Recognize the `x86_64.*-gnux32' triplet.
270** Check whether a triplet's OS part specifies an ABI.
271** Recognize mips64* as having 32-bit pointers by default.
272** remove language/glil/decompile-assembly.scm
273** random_state_of_last_resort doesn't rely on HAVE_POSIX
274** copy-file, load-objcode, mkstemp use O_BINARY
275** fix compilation of functions with more than 255 local variables.
276** Fix `getgroups' for when zero supplementary group IDs exist.
277** allow (define-macro name (lambda ...))
278** (texinfo): add a command-spec for @math{}.
279** (texinfo docbook): informaltable is a block element.
280** (texinfo plain-text): Pass @math{} through as-is.
281** (texinfo serialize): don't break words when wrapping
282** guild: Gracefully handle failures to install the locale.
283** Fix argument count for various format string escape sequences (in warning pass)
284** Fix source annotation bug in psyntax 'expand-body'.
285** ecmascript: Fix conversion to boolean for non-numbers.
286** fix try-module-autoload, which did not detect failure to find the file
287
288file not found vs failure to load module.
289
290** Many (oop goops save) fixes
291** http-get: don't shutdown write end of socket
292** Avoid signed integer overflow in scm_product
293** http: read-response-body always returns bytevector or #f (not EOF in one case)
294** web: Correctly detect "No route to host" conditions.
295** `system*': failure to execvp no longer leaks dangling processes
296 (http://bugs.gnu.org/13166)
297** More sensible case-lambda* dispatch
298 (http://bugs.gnu.org/12929; see "Case-Lambda" in the manual)
299** Do not defer expansion of internal define-syntax forms.
300 (http://bugs.gnu.org/13509)
301
302
303\f
13fac282
LC
304Changes in 2.0.7 (since 2.0.6):
305
306* Notable changes
307
308** SRFI-105 curly infix expressions are supported
309
310Curly infix expressions as described at
311http://srfi.schemers.org/srfi-105/srfi-105.html are now supported by
312Guile's reader. This allows users to write things like {a * {b + c}}
313instead of (* a (+ b c)). SRFI-105 support is enabled by using the
314`#!curly-infix' directive in source code, or the `curly-infix' reader
315option. See the manual for details.
316
317** Reader options may now be per-port
318
319Historically, `read-options' and related procedures would manipulate
320global options, affecting the `read' procedure for all threads, and all
321current uses of `read'.
322
323Guile can now associate `read' options with specific ports, allowing
324different ports to use different options. For instance, the
325`#!fold-case' and `#!no-fold-case' reader directives have been
326implemented, and their effect is to modify the current read options of
327the current port only; similarly for `#!curly-infix'. Thus, it is
328possible, for instance, to have one port reading case-sensitive code,
329while another port reads case-insensitive code.
330
331** Futures may now be nested
332
333Futures may now be nested: a future can itself spawn and then `touch'
334other futures. In addition, any thread that touches a future that has
335not completed now processes other futures while waiting for the touched
336future to completed. This allows all threads to be kept busy, and was
337made possible by the use of delimited continuations (see the manual for
338details.)
339
2813d725
MW
340Consequently, `par-map' and `par-for-each' have been rewritten and can
341now use all cores.
13fac282 342
3919585f
MW
343** `GUILE_LOAD_PATH' et al can now add directories to the end of the path
344
345`GUILE_LOAD_PATH' and `GUILE_LOAD_COMPILED_PATH' can now be used to add
346directories to both ends of the load path. If the special path
347component `...' (ellipsis) is present in these environment variables,
348then the default path is put in place of the ellipsis, otherwise the
349default path is placed at the end. See "Environment Variables" in the
350manual for details.
351
13fac282
LC
352** `load-in-vicinity' search for `.go' files in `%load-compiled-path'
353
354Previously, `load-in-vicinity' would look for compiled files in the
355auto-compilation cache, but not in `%load-compiled-path'. This is now
356fixed. This affects `load', and the `-l' command-line flag. See
357<http://bugs.gnu.org/12519> for details.
358
359** Extension search order fixed, and LD_LIBRARY_PATH preserved
360
361Up to 2.0.6, Guile would modify the `LD_LIBRARY_PATH' environment
362variable (or whichever is relevant for the host OS) to insert its own
363default extension directories in the search path (using GNU libltdl
364facilities was not possible here.) This approach was problematic in two
365ways.
366
367First, the `LD_LIBRARY_PATH' modification would be visible to
368sub-processes, and would also affect future calls to `dlopen', which
369could lead to subtle bugs in the application or sub-processes. Second,
a94e7d85
MW
370when the installation prefix is /usr, the `LD_LIBRARY_PATH' modification
371would typically end up inserting /usr/lib before /usr/local/lib in the
372search path, which is often the opposite of system-wide settings such as
373`ld.so.conf'.
13fac282
LC
374
375Both issues have now been fixed.
376
377** `make-vtable-vtable' is now deprecated
378
379Programs should instead use `make-vtable' and `<standard-vtable>'.
380
381** The `-Wduplicate-case-datum' and `-Wbad-case-datum' are enabled
382
383These recently introduced warnings have been documented and are now
384enabled by default when auto-compiling.
385
a94e7d85 386** Optimize calls to `equal?' or `eqv?' with a constant argument
13fac282 387
a94e7d85
MW
388The compiler simplifies calls to `equal?' or `eqv?' with a constant
389argument to use `eq?' instead, when applicable.
13fac282
LC
390
391* Manual updates
392
393** SRFI-9 records now documented under "Compound Data Types"
394
395The documentation of SRFI-9 record types has been moved in the "Compound
396Data Types", next to Guile's other record APIs. A new section
397introduces the various record APIs, and describes the trade-offs they
398make. These changes were made in an attempt to better guide users
399through the maze of records API, and to recommend SRFI-9 as the main
400API.
401
402The documentation of Guile's raw `struct' API has also been improved.
403
404** (ice-9 and-let-star) and (ice-9 curried-definitions) now documented
405
406These modules were missing from the manual.
407
408* New interfaces
409
410** New "functional record setters" as a GNU extension of SRFI-9
411
412The (srfi srfi-9 gnu) module now provides three new macros to deal with
413"updates" of immutable records: `define-immutable-record-type',
414`set-field', and `set-fields'.
415
416The first one allows record type "functional setters" to be defined;
417such setters keep the record unchanged, and instead return a new record
418with only one different field. The remaining macros provide the same
419functionality, and also optimize updates of multiple or nested fields.
420See the manual for details.
421
422** web: New `http-get*', `response-body-port', and `text-content-type?'
423 procedures
424
425These procedures return a port from which to read the response's body.
426Unlike `http-get' and `read-response-body', they allow the body to be
427processed incrementally instead of being stored entirely in memory.
428
429The `text-content-type?' predicate allows users to determine whether the
430content type of a response is textual.
431
432See the manual for details.
433
434** `string-split' accepts character sets and predicates
435
436The `string-split' procedure can now be given a SRFI-14 character set or
437a predicate, instead of just a character.
438
3b539098 439** R6RS SRFI support
13fac282 440
3b539098
LC
441Previously, in R6RS modules, Guile incorrectly ignored components of
442SRFI module names after the SRFI number, making it impossible to specify
443sub-libraries. This release corrects this, bringing us into accordance
444with SRFI 97.
13fac282
LC
445
446** `define-public' is no a longer curried definition by default
447
448The (ice-9 curried-definitions) should be used for such uses. See the
449manual for details.
450
451* Build fixes
452
453** Remove reference to `scm_init_popen' when `fork' is unavailable
454
455This fixes a MinGW build issue (http://bugs.gnu.org/12477).
456
457** Fix race between installing `guild' and the `guile-tools' symlink
458
459* Bug fixes
460
461** Procedures returned by `eval' now have docstrings
462 (http://bugs.gnu.org/12173)
463** web client: correctly handle uri-query, etc. in relative URI headers
464 (http://bugs.gnu.org/12827)
465** Fix docs for R6RS `hashtable-copy'
466** R6RS `string-for-each' now accepts multiple string arguments
467** Fix out-of-range error in the compiler's CSE pass
468 (http://bugs.gnu.org/12883)
469** Add missing R6RS `open-file-input/output-port' procedure
470** Futures: Avoid creating the worker pool more than once
471** Fix invalid assertion about mutex ownership in threads.c
472 (http://bugs.gnu.org/12719)
473** Have `SCM_NUM2FLOAT' and `SCM_NUM2DOUBLE' use `scm_to_double'
474** The `scandir' procedure now uses `lstat' instead of `stat'
475** Fix `generalized-vector->list' indexing bug with shared arrays
476 (http://bugs.gnu.org/12465)
477** web: Change `http-get' to try all the addresses for the given URI
478** Implement `hash' for structs
479 (http://lists.gnu.org/archive/html/guile-devel/2012-10/msg00031.html)
480** `read' now adds source properties for data types beyond pairs
481** Improve error reporting in `append!'
482** In fold-matches, set regexp/notbol unless matching string start
483** Don't stat(2) and access(2) the .go location before using it
484** SRFI-19: use zero padding for hours in ISO 8601 format, not blanks
485** web: Fix uri-encoding for strings with no unreserved chars, and octets 0-15
486** More robust texinfo alias handling
487** Optimize `format' and `simple-format'
488 (http://bugs.gnu.org/12033)
489** Angle of -0.0 is pi, not zero
490
491\f
d2e35793
AW
492Changes in 2.0.6 (since 2.0.5):
493
494* Notable changes
495
496** New optimization pass: common subexpression elimination (CSE)
497
498Guile's optimizer will now run a CSE pass after partial evaluation.
499This pass propagates static information about branches taken, bound
500lexicals, and effects from an expression's dominators. It can replace
501common subexpressions with their boolean values (potentially enabling
502dead code elimination), equivalent bound lexicals, or it can elide them
503entirely, depending on the context in which they are executed. This
504pass is especially useful in removing duplicate type checks, such as
d7a33b64 505those produced by SRFI-9 record accessors.
d2e35793
AW
506
507** Improvements to the partial evaluator
508
509Peval can now hoist tests that are common to both branches of a
510conditional into the test. This can help with long chains of
511conditionals, such as those generated by the `match' macro. Peval can
512now do simple beta-reductions of procedures with rest arguments. It
513also avoids residualizing degenerate lexical aliases, even when full
514inlining is not possible. Finally, peval now uses the effects analysis
515introduced for the CSE pass. More precise effects analysis allows peval
516to move more code.
517
518** Run finalizers asynchronously in asyncs
519
520Finalizers are now run asynchronously, via an async. See Asyncs in the
521manual. This allows Guile and user code to safely allocate memory while
522holding a mutex.
523
524** Update SRFI-14 character sets to Unicode 6.1
525
526Note that this update causes the Latin-1 characters `§' and `¶' to be
527reclassified as punctuation. They were previously considered to be part
528of `char-set:symbol'.
529
530** Better source information for datums
531
532When the `positions' reader option is on, as it is by default, Guile's
533reader will record source information for more kinds of datums.
534
535** Improved error and warning messages
536
d7a33b64
LC
537`syntax-violation' errors now prefer `subform' for source info, with
538`form' as fallback. Syntactic errors in `cond' and `case' now produce
d2e35793
AW
539better errors. `case' can now warn on duplicate datums, or datums that
540cannot be usefully compared with `eqv?'. `-Warity-mismatch' now handles
541applicable structs. `-Wformat' is more robust in the presence of
542`gettext'. Finally, various exceptions thrown by the Web modules now
543define appropriate exception printers.
544
545** A few important bug fixes in the HTTP modules.
546
547Guile's web server framework now checks if an application returns a body
d7a33b64 548where it is not permitted, for example in response to a HEAD request,
d2e35793
AW
549and warn or truncate the response as appropriate. Bad requests now
550cause a 400 Bad Request response to be printed before closing the port.
551Finally, some date-printing and URL-parsing bugs were fixed.
552
553** Pretty-print improvements
554
555When Guile needs to pretty-print Tree-IL, it will try to reconstruct
556`cond', `or`, and other derived syntax forms from the primitive tree-IL
557forms. It also uses the original names instead of the fresh unique
558names, when it is unambiguous to do so. This can be seen in the output
559of REPL commands like `,optimize'.
560
561Also, the `pretty-print' procedure has a new keyword argument,
562`#:max-expr-width'.
563
564** Fix memory leak involving applicable SMOBs
565
566At some point in the 1.9.x series, Guile began leaking any applicable
567SMOB that was actually applied. (There was a weak-key map from SMOB to
568trampoline functions, where the value had a strong reference on the
569key.) This has been fixed. There was much rejoicing!
570
32299e49
AW
571** Support for HTTP/1.1 chunked transfer coding
572
573See "Transfer Codings" in the manual, for more.
574
d2e35793
AW
575** Micro-optimizations
576
577A pile of micro-optimizations: the `string-trim' function when called
578with `char-set:whitespace'; the `(web http)' parsers; SMOB application;
579conversion of raw UTF-8 and UTF-32 data to and from SCM strings; vlists
580and vhashes; `read' when processing string literals.
581
582** Incompatible change to `scandir'
583
584As was the original intention, `scandir' now runs the `select?'
585procedure on all items, including subdirectories and the `.' and `..'
586entries. It receives the basename of the file in question instead of
587the full name. We apologize for this incompatible change to this
588function introduced in the 2.0.4 release.
589
590* Manual updates
591
592The manual has been made much more consistent in its naming conventions
593with regards to formal parameters of functions. Thanks to Bake Timmons.
594
595* New interfaces
596
597** New C function: `scm_to_pointer'
32299e49 598** New C inline functions: `scm_new_smob', `scm_new_double_smob'
d2e35793
AW
599** (ice-9 format): Add ~h specifier for localized number output.
600** (web response): New procedure: `response-must-not-include-body?'
601** New predicate: 'supports-source-properties?'
8898f43c 602** New C helpers: `scm_c_values', `scm_c_nvalues'
d2e35793
AW
603** Newly public inline C function: `scm_unget_byte'
604** (language tree-il): New functions: `tree-il=?', `tree-il-hash'
605** New fluid: `%default-port-conversion-strategy'
606** New syntax: `=>' within `case'
32299e49
AW
607** (web http): `make-chunked-input-port', `make-chunked-output-port'
608** (web http): `declare-opaque-header!'
d2e35793
AW
609
610Search the manual for these identifiers, for more information.
611
612* New deprecations
613
614** `close-io-port' deprecated
615
616Use `close-port'.
617
618** `scm_sym2var' deprecated
619
620In most cases, replace with `scm_lookup' or `scm_module_variable'. Use
621`scm_define' or `scm_module_ensure_local_variable' if the second
622argument is nonzero. See "Accessing Modules from C" in the manual, for
623full details.
624
625** Lookup closures deprecated
626
627These were never documented. See "Module System Reflection" in the
628manual for replacements.
629
630* Build fixes
631
632** Fix compilation against uninstalled Guile on non-GNU platforms.
633** Fix `SCM_I_ERROR' definition for MinGW without networking.
634** Fix compilation with the Sun C compiler.
635** Fix check for `clock_gettime' on OpenBSD and some other systems.
636** Fix build with --enable-debug-malloc.
637** Honor $(program_transform_name) for the `guile-tools' symlink.
638** Fix cross-compilation of GOOPS-using code.
639
640* Bug fixes
641
642** Fix use of unitialized stat buffer in search-path of absolute paths.
643** Avoid calling `freelocale' with a NULL argument.
644** Work around erroneous tr_TR locale in Darwin 8 in tests.
645** Fix `getaddrinfo' test for Darwin 8.
646** Use Gnulib's `regex' module for better regex portability.
647** `source-properties' and friends work on any object
648** Rewrite open-process in C, for robustness related to threads and fork
649** Fix <TAG>vector-length when applied to other uniform vector types
650** Fix escape-only prompt optimization (was disabled previously)
651** Fix a segfault when /dev/urandom is not accessible
652** Fix flush on soft ports, so that it actually runs.
653** Better compatibility of SRFI-9 records with core records
654** Fix and clarify documentation of `sorted?'.
655** Fix IEEE-754 endianness conversion in bytevectors.
656** Correct thunk check in the `wind' instruction.
657** Add @acronym support to texinfo modules
658** Fix docbook->texi for <ulink> without URL
659** Fix `setvbuf' to leave the line/column number unchanged.
660** Add missing public declaration for `scm_take_from_input_buffers'.
661** Fix relative file name canonicalization with empty %LOAD-PATH entries.
662** Import newer (ice-9 match) from Chibi-Scheme.
663** Fix unbound variables and unbound values in ECMAScript runtime.
664** Make SRFI-6 string ports Unicode-capable.
665
666\f
f7cf5898
LC
667Changes in 2.0.5 (since 2.0.4):
668
669This release fixes the binary interface information (SONAME) of
670libguile, which was incorrect in 2.0.4. It does not contain other
671changes.
672
673\f
f43622a2
AW
674Changes in 2.0.4 (since 2.0.3):
675
f41ef416 676* Notable changes
f43622a2 677
f41ef416 678** Better debuggability for interpreted procedures.
f43622a2
AW
679
680Guile 2.0 came with a great debugging experience for compiled
681procedures, but the story for interpreted procedures was terrible. Now,
486bd70d
AW
682at least, interpreted procedures have names, and the `arity' procedure
683property is always correct (or, as correct as it can be, in the presence
684of `case-lambda').
f43622a2
AW
685
686** Support for cross-compilation.
687
688One can now use a native Guile to cross-compile `.go' files for a
689different architecture. See the documentation for `--target' in the
486bd70d
AW
690"Compilation" section of the manual, for information on how to use the
691cross-compiler. See the "Cross building Guile" section of the README,
692for more on how to cross-compile Guile itself.
f43622a2 693
d4b5c773
AW
694** The return of `local-eval'.
695
696Back by popular demand, `the-environment' and `local-eval' allow the
697user to capture a lexical environment, and then evaluate arbitrary
698expressions in that context. There is also a new `local-compile'
699command. See "Local Evaluation" in the manual, for more. Special
700thanks to Mark Weaver for an initial implementation of this feature.
701
f43622a2
AW
702** Fluids can now have default values.
703
704Fluids are used for dynamic and thread-local binding. They have always
705inherited their values from the context or thread that created them.
706However, there was a case in which a new thread would enter Guile, and
707the default values of all the fluids would be `#f' for that thread.
708
709This has now been fixed so that `make-fluid' has an optional default
486bd70d 710value for fluids in unrelated dynamic roots, which defaults to `#f'.
f43622a2
AW
711
712** Garbage collector tuning.
713
714The garbage collector has now been tuned to run more often under some
715circumstances.
716
717*** Unmanaged allocation
718
719The new `scm_gc_register_allocation' function will notify the collector
720of unmanaged allocation. This will cause the collector to run sooner.
721Guile's `scm_malloc', `scm_calloc', and `scm_realloc' unmanaged
722allocators eventually call this function. This leads to better
723performance under steady-state unmanaged allocation.
724
725*** Transient allocation
726
727When the collector runs, it will try to record the total memory
728footprint of a process, if the platform supports this information. If
729the memory footprint is growing, the collector will run more frequently.
730This reduces the increase of the resident size of a process in response
731to a transient increase in allocation.
732
733*** Management of threads, bignums
734
735Creating a thread will allocate a fair amount of memory. Guile now does
736some GC work (using `GC_collect_a_little') when allocating a thread.
737This leads to a better memory footprint when creating many short-lived
738threads.
739
740Similarly, bignums can occupy a lot of memory. Guile now offers hooks
741to enable custom GMP allocators that end up calling
486bd70d 742`scm_gc_register_allocation'. These allocators are enabled by default
f43622a2
AW
743when running Guile from the command-line. To enable them in libraries,
744set the `scm_install_gmp_memory_functions' variable to a nonzero value
745before loading Guile.
746
f43622a2
AW
747** SRFI-39 parameters are available by default.
748
f41ef416
AW
749Guile now includes support for parameters, as defined by SRFI-39, in the
750default environment. See "Parameters" in the manual, for more
751information. `current-input-port', `current-output-port', and
752`current-error-port' are now parameters.
f43622a2 753
d4b5c773 754** Add `current-warning-port'.
f43622a2 755
f41ef416
AW
756Guile now outputs warnings on a separate port, `current-warning-port',
757initialized to the value that `current-error-port' has on startup.
f43622a2 758
f41ef416 759** Syntax parameters.
f43622a2 760
f41ef416
AW
761Following Racket's lead, Guile now supports syntax parameters. See
762"Syntax parameters" in the manual, for more.
f43622a2 763
f41ef416
AW
764Also see Barzilay, Culpepper, and Flatt's 2011 SFP workshop paper,
765"Keeping it Clean with syntax-parameterize".
f43622a2 766
f41ef416 767** Parse command-line arguments from the locale encoding.
f43622a2 768
f41ef416
AW
769Guile now attempts to parse command-line arguments using the user's
770locale. However for backwards compatibility with other 2.0.x releases,
771it does so without actually calling `setlocale'. Please report any bugs
772in this facility to bug-guile@gnu.org.
f43622a2 773
d4b5c773
AW
774** One-armed conditionals: `when' and `unless'
775
776Guile finally has `when' and `unless' in the default environment. Use
777them whenever you would use an `if' with only one branch. See
778"Conditionals" in the manual, for more.
779
780** `current-filename', `add-to-load-path'
781
782There is a new form, `(current-filename)', which expands out to the
783source file in which it occurs. Combined with the new
784`add-to-load-path', this allows simple scripts to easily add nearby
785directories to the load path. See "Load Paths" in the manual, for more.
786
787** `random-state-from-platform'
788
789This procedure initializes a random seed using good random sources
790available on your platform, such as /dev/urandom. See "Random Number
791Generation" in the manual, for more.
792
7cb11224
LC
793** Warn about unsupported `simple-format' options.
794
795The `-Wformat' compilation option now reports unsupported format options
796passed to `simple-format'.
797
241247e8
AW
798** Manual updates
799
800Besides the sections already mentioned, the following manual sections
801are new in this release: "Modules and the File System", "Module System
802Reflection", "Syntax Transformer Helpers", and "Local Inclusion".
803
f41ef416
AW
804* New interfaces
805
806** (ice-9 session): `apropos-hook'
807** New print option: `escape-newlines', defaults to #t.
808** (ice-9 ftw): `file-system-fold', `file-system-tree', `scandir'
d4b5c773 809** `scm_c_value_ref': access to multiple returned values from C
07c2ca0f 810** scm_call (a varargs version), scm_call_7, scm_call_8, scm_call_9
d4b5c773
AW
811** Some new syntax helpers in (system syntax)
812
813Search the manual for these identifiers and modules, for more.
814
815* Build fixes
816
817** FreeBSD build fixes.
818** OpenBSD compilation fixes.
819** Solaris 2.10 test suite fixes.
820** IA64 compilation fix.
821** MinGW build fixes.
822** Work around instruction reordering on SPARC and HPPA in the VM.
823** Gnulib updates: added `dirfd', `setenv' modules.
f43622a2 824
f43622a2
AW
825* Bug fixes
826
d4b5c773
AW
827** Add a deprecated alias for $expt.
828** Add an exception printer for `getaddrinfo-error'.
829** Add deprecated shim for `scm_display_error' with stack as first argument.
830** Add warnings for unsupported `simple-format' options.
831** Allow overlapping regions to be passed to `bytevector-copy!'.
d4b5c773
AW
832** Better function prologue disassembly
833** Compiler: fix miscompilation of (values foo ...) in some contexts.
834** Compiler: fix serialization of #nil-terminated lists.
835** Compiler: allow values bound in non-tail let expressions to be collected.
836** Deprecate SCM_ASRTGO.
837** Document invalidity of (begin) as expression; add back-compat shim.
838** Don't leak file descriptors when mmaping objcode.
839** Empty substrings no longer reference the original stringbuf.
840** FFI: Fix `set-pointer-finalizer!' to leave the type cell unchanged.
f43622a2 841** FFI: Hold a weak reference to the CIF made by `procedure->pointer'.
f41ef416
AW
842** FFI: Hold a weak reference to the procedure passed to `procedure->pointer'.
843** FFI: Properly unpack small integer return values in closure call.
d4b5c773 844** Fix R6RS `fold-left' so the accumulator is the first argument.
d4b5c773
AW
845** Fix bit-set*! bug from 2005.
846** Fix bug in `make-repl' when `lang' is actually a <language>.
847** Fix bugs related to mutation, the null string, and shared substrings.
848** Fix <dynwind> serialization.
849** Fix erroneous check in `set-procedure-properties!'.
850** Fix generalized-vector-{ref,set!} for slices.
40e92f09 851** Fix error messages involving definition forms.
adb8054c 852** Fix primitive-eval to return #<unspecified> for definitions.
f41ef416 853** HTTP: Extend handling of "Cache-Control" header.
f43622a2 854** HTTP: Fix qstring writing of cache-extension values
d4b5c773 855** HTTP: Fix validators for various list-style headers.
f41ef416 856** HTTP: Permit non-date values for Expires header.
d4b5c773
AW
857** HTTP: `write-request-line' writes absolute paths, not absolute URIs.
858** Hack the port-column of current-output-port after printing a prompt.
d4b5c773
AW
859** Make sure `regexp-quote' tests use Unicode-capable string ports.
860** Peval: Fix bugs in the new optimizer.
d4b5c773
AW
861** Statistically unique marks and labels, for robust hygiene across sessions.
862** Web: Allow URIs with empty authorities, like "file:///etc/hosts".
863** `,language' at REPL sets the current-language fluid.
864** `primitive-load' returns the value(s) of the last expression.
f41ef416 865** `scm_from_stringn' always returns unique strings.
f41ef416 866** `scm_i_substring_copy' tries to narrow the substring.
d4b5c773 867** i18n: Fix gc_malloc/free mismatch on non-GNU systems.
f43622a2 868
7cb11224 869\f
02f91898
AW
870Changes in 2.0.3 (since 2.0.2):
871
872* Speed improvements
873
874** Guile has a new optimizer, `peval'.
875
876`Peval' is a partial evaluator that performs constant folding, dead code
877elimination, copy propagation, and inlining. By default it runs on
878every piece of code that Guile compiles, to fold computations that can
879happen at compile-time, so they don't have to happen at runtime.
880
881If we did our job right, the only impact you would see would be your
882programs getting faster. But if you notice slowdowns or bloated code,
883please send a mail to bug-guile@gnu.org with details.
884
885Thanks to William R. Cook, Oscar Waddell, and Kent Dybvig for inspiring
886peval and its implementation.
887
888You can see what peval does on a given piece of code by running the new
889`,optimize' REPL meta-command, and comparing it to the output of
890`,expand'. See "Compile Commands" in the manual, for more.
891
892** Fewer calls to `stat'.
893
894Guile now stats only the .go file and the .scm file when loading a fresh
895compiled file.
896
897* Notable changes
898
899** New module: `(web client)', a simple synchronous web client.
900
901See "Web Client" in the manual, for more.
902
903** Users can now install compiled `.go' files.
904
905See "Installing Site Packages" in the manual.
906
907** Remove Front-Cover and Back-Cover text from the manual.
908
909The manual is still under the GNU Free Documentation License, but no
910longer has any invariant sections.
911
912** More helpful `guild help'.
913
914`guild' is Guile's multi-tool, for use in shell scripting. Now it has a
915nicer interface for querying the set of existing commands, and getting
916help on those commands. Try it out and see!
917
918** New macro: `define-syntax-rule'
919
920`define-syntax-rule' is a shorthand to make a `syntax-rules' macro with
921one clause. See "Syntax Rules" in the manual, for more.
922
923** The `,time' REPL meta-command now has more precision.
924
925The output of this command now has microsecond precision, instead of
92610-millisecond precision.
927
928** `(ice-9 match)' can now match records.
929
930See "Pattern Matching" in the manual, for more on matching records.
931
932** New module: `(language tree-il debug)'.
933
934This module provides a tree-il verifier. This is useful for people that
935generate tree-il, usually as part of a language compiler.
936
937** New functions: `scm_is_exact', `scm_is_inexact'.
938
939These provide a nice C interface for Scheme's `exact?' and `inexact?',
940respectively.
941
942* Bugs fixed
943
944See the git log (or the ChangeLog) for more details on these bugs.
945
946** Fix order of importing modules and resolving duplicates handlers.
947** Fix a number of bugs involving extended (merged) generics.
948** Fix invocation of merge-generics duplicate handler.
949** Fix write beyond array end in arrays.c.
950** Fix read beyond end of hashtable size array in hashtab.c.
951** (web http): Locale-independent parsing and serialization of dates.
952** Ensure presence of Host header in HTTP/1.1 requests.
953** Fix take-right and drop-right for improper lists.
954** Fix leak in get_current_locale().
955** Fix recursive define-inlinable expansions.
956** Check that srfi-1 procedure arguments are procedures.
957** Fix r6rs `map' for multiple returns.
958** Fix scm_tmpfile leak on POSIX platforms.
959** Fix a couple of leaks (objcode->bytecode, make-boot-program).
960** Fix guile-lib back-compatibility for module-stexi-documentation.
961** Fix --listen option to allow other ports.
962** Fix scm_to_latin1_stringn for substrings.
963** Fix compilation of untyped arrays of rank not 1.
964** Fix unparse-tree-il of <dynset>.
965** Fix reading of #||||#.
2be3feb1
LC
966** Fix segfault in GOOPS when class fields are redefined.
967** Prefer poll(2) over select(2) to allow file descriptors above FD_SETSIZE.
02f91898
AW
968
969\f
e4a2807e
AW
970Changes in 2.0.2 (since 2.0.1):
971
972* Notable changes
973
2dd49486
AW
974** `guile-tools' renamed to `guild'
975
976The new name is shorter. Its intended future use is for a CPAN-like
977system for Guile wizards and journeyfolk to band together to share code;
978hence the name. `guile-tools' is provided as a backward-compatible
979symbolic link. See "Using Guile Tools" in the manual, for more.
980
e4a2807e
AW
981** New control operators: `shift' and `reset'
982
983See "Shift and Reset" in the manual, for more information.
984
985** `while' as an expression
986
987Previously the return value of `while' was unspecified. Now its
988values are specified both in the case of normal termination, and via
989termination by invoking `break', possibly with arguments. See "while
990do" in the manual for more.
991
992** Disallow access to handles of weak hash tables
993
994`hash-get-handle' and `hash-create-handle!' are no longer permitted to
995be called on weak hash tables, because the fields in a weak handle could
996be nulled out by the garbage collector at any time, but yet they are
997otherwise indistinguishable from pairs. Use `hash-ref' and `hash-set!'
998instead.
999
1000** More precision for `get-internal-run-time', `get-internal-real-time'
1001
1002On 64-bit systems which support POSIX clocks, Guile's internal timing
1003procedures offer nanosecond resolution instead of the 10-millisecond
1004resolution previously available. 32-bit systems now use 1-millisecond
1005timers.
1006
1007** Guile now measures time spent in GC
1008
1009`gc-stats' now returns a meaningful value for `gc-time-taken'.
1010
1011** Add `gcprof'
1012
1013The statprof profiler now exports a `gcprof' procedure, driven by the
1014`after-gc-hook', to see which parts of your program are causing GC. Let
1015us know if you find it useful.
1016
1017** `map', `for-each' and some others now implemented in Scheme
1018
1019We would not mention this in NEWS, as it is not a user-visible change,
1020if it were not for one thing: `map' and `for-each' are no longer
1021primitive generics. Instead they are normal bindings, which can be
1022wrapped by normal generics. This fixes some modularity issues between
1023core `map', SRFI-1 `map', and GOOPS.
1024
1025Also it's pretty cool that we can do this without a performance impact.
1026
1027** Add `scm_peek_byte_or_eof'.
1028
1029This helper is like `scm_peek_char_or_eof', but for bytes instead of
1030full characters.
1031
1032** Implement #:stop-at-first-non-option option for getopt-long
1033
1034See "getopt-long Reference" in the manual, for more information.
1035
1036** Improve R6RS conformance for conditions in the I/O libraries
1037
1038The `(rnrs io simple)' module now raises the correct R6RS conditions in
1039error cases. `(rnrs io ports)' is also more correct now, though it is
1040still a work in progress.
1041
1042** All deprecated routines emit warnings
1043
1044A few deprecated routines were lacking deprecation warnings. This has
1045been fixed now.
1046
1047* Speed improvements
1048
1049** Constants in compiled code now share state better
1050
1051Constants with shared state, like `("foo")' and `"foo"', now share state
1052as much as possible, in the entire compilation unit. This cuts compiled
1053`.go' file sizes in half, generally, and speeds startup.
1054
1055** VLists: optimize `vlist-fold-right', and add `vhash-fold-right'
1056
1057These procedures are now twice as fast as they were.
1058
1059** UTF-8 ports to bypass `iconv' entirely
1060
1061This reduces memory usage in a very common case.
1062
1063** Compiler speedups
1064
1065The compiler is now about 40% faster. (Note that this is only the case
1066once the compiler is itself compiled, so the build still takes as long
1067as it did before.)
1068
1069** VM speed tuning
1070
1071Some assertions that were mostly useful for sanity-checks on the
1072bytecode compiler are now off for both "regular" and "debug" engines.
1073This together with a fix to cache a TLS access and some other tweaks
1074improve the VM's performance by about 20%.
1075
1076** SRFI-1 list-set optimizations
1077
1078lset-adjoin and lset-union now have fast paths for eq? sets.
1079
1080** `memq', `memv' optimizations
1081
1082These procedures are now at least twice as fast than in 2.0.1.
1083
1084* Deprecations
1085
1086** Deprecate scm_whash API
1087
1088`scm_whash_get_handle', `SCM_WHASHFOUNDP', `SCM_WHASHREF',
1089`SCM_WHASHSET', `scm_whash_create_handle', `scm_whash_lookup', and
1090`scm_whash_insert' are now deprecated. Use the normal hash table API
1091instead.
1092
1093** Deprecate scm_struct_table
1094
1095`SCM_STRUCT_TABLE_NAME', `SCM_SET_STRUCT_TABLE_NAME',
1096`SCM_STRUCT_TABLE_CLASS', `SCM_SET_STRUCT_TABLE_CLASS',
1097`scm_struct_table', and `scm_struct_create_handle' are now deprecated.
1098These routines formed part of the internals of the map between structs
1099and classes.
1100
1101** Deprecate scm_internal_dynamic_wind
1102
1103The `scm_t_inner' type and `scm_internal_dynamic_wind' are deprecated,
1104as the `scm_dynwind' API is better, and this API encourages users to
1105stuff SCM values into pointers.
1106
1107** Deprecate scm_immutable_cell, scm_immutable_double_cell
1108
1109These routines are deprecated, as the GC_STUBBORN API doesn't do
1110anything any more.
1111
1112* Manual updates
1113
1114Andreas Rottman kindly transcribed the missing parts of the `(rnrs io
1115ports)' documentation from the R6RS documentation. Thanks Andreas!
1116
1117* Bugs fixed
1118
1119** Fix double-loading of script in -ds case
1120** -x error message fix
1121** iconveh-related cross-compilation fixes
1122** Fix small integer return value packing on big endian machines.
1123** Fix hash-set! in weak-value table from non-immediate to immediate
1124** Fix call-with-input-file & relatives for multiple values
1125** Fix `hash' for inf and nan
1126** Fix libguile internal type errors caught by typing-strictness==2
f39779b1
LC
1127** Fix compile error in MinGW fstat socket detection
1128** Fix generation of auto-compiled file names on MinGW
e4a2807e
AW
1129** Fix multithreaded access to internal hash tables
1130** Emit a 1-based line number in error messages
1131** Fix define-module ordering
7505c6e0 1132** Fix several POSIX functions to use the locale encoding
f39779b1
LC
1133** Add type and range checks to the complex generalized vector accessors
1134** Fix unaligned accesses for bytevectors of complex numbers
1135** Fix '(a #{.} b)
1136** Fix erroneous VM stack overflow for canceled threads
e4a2807e
AW
1137
1138\f
882c8963
MW
1139Changes in 2.0.1 (since 2.0.0):
1140
7c81eba2 1141* Notable changes
9d6a151f 1142
7c81eba2 1143** guile.m4 supports linking with rpath
9d6a151f 1144
7c81eba2
AW
1145The GUILE_FLAGS macro now sets GUILE_LIBS and GUILE_LTLIBS, which
1146include appropriate directives to the linker to include libguile-2.0.so
1147in the runtime library lookup path.
9d6a151f 1148
7c81eba2 1149** `begin' expands macros in its body before other expressions
9d6a151f 1150
7c81eba2 1151This enables support for programs like the following:
9d6a151f 1152
7c81eba2
AW
1153 (begin
1154 (define even?
1155 (lambda (x)
1156 (or (= x 0) (odd? (- x 1)))))
1157 (define-syntax odd?
1158 (syntax-rules ()
1159 ((odd? x) (not (even? x)))))
1160 (even? 10))
9d6a151f 1161
7c81eba2 1162** REPL reader usability enhancements
9d6a151f 1163
7c81eba2
AW
1164The REPL now flushes input after a read error, which should prevent one
1165error from causing other errors. The REPL also now interprets comments
1166as whitespace.
9d6a151f 1167
7c81eba2 1168** REPL output has configurable width
9d6a151f 1169
7c81eba2
AW
1170The REPL now defaults to output with the current terminal's width, in
1171columns. See "Debug Commands" in the manual for more information on
1172the ,width command.
9d6a151f 1173
7c81eba2 1174** Better C access to the module system
9d6a151f 1175
7c81eba2
AW
1176Guile now has convenient C accessors to look up variables or values in
1177modules and their public interfaces. See `scm_c_public_ref' and friends
1178in "Accessing Modules from C" in the manual.
9d6a151f 1179
7c81eba2 1180** Added `scm_call_5', `scm_call_6'
9d6a151f 1181
7c81eba2 1182See "Fly Evaluation" in the manual.
9d6a151f 1183
7c81eba2 1184** Added `scm_from_latin1_keyword', `scm_from_utf8_keyword'
9d6a151f 1185
7c81eba2
AW
1186See "Keyword Procedures" in the manual, for more. Note that
1187`scm_from_locale_keyword' should not be used when the name is a C string
1188constant.
9d6a151f 1189
7c81eba2 1190** R6RS unicode and string I/O work
9d6a151f 1191
7c81eba2
AW
1192Added efficient implementations of `get-string-n' and `get-string-n!'
1193for binary ports. Exported `current-input-port', `current-output-port'
1194and `current-error-port' from `(rnrs io ports)', and enhanced support
1195for transcoders.
9d6a151f 1196
7c81eba2 1197** Added `pointer->scm', `scm->pointer' to `(system foreign)'
9d6a151f 1198
7c81eba2
AW
1199These procedure are useful if one needs to pass and receive SCM values
1200to and from foreign functions. See "Foreign Variables" in the manual,
1201for more.
9d6a151f 1202
7c81eba2 1203** Added `heap-allocated-since-gc' to `(gc-stats)'
9d6a151f 1204
7c81eba2 1205Also fixed the long-standing bug in the REPL `,stat' command.
9d6a151f 1206
7c81eba2 1207** Add `on-error' REPL option
9d6a151f 1208
7c81eba2
AW
1209This option controls what happens when an error occurs at the REPL, and
1210defaults to `debug', indicating that Guile should enter the debugger.
1211Other values include `report', which will simply print a backtrace
1212without entering the debugger. See "System Commands" in the manual.
9d6a151f 1213
7c81eba2 1214** Enforce immutability of string literals
9d6a151f 1215
7c81eba2 1216Attempting to mutate a string literal now causes a runtime error.
9d6a151f 1217
7c81eba2 1218** Fix pthread redirection
9d6a151f 1219
7c81eba2
AW
1220Guile 2.0.0 shipped with headers that, if configured with pthread
1221support, would re-define `pthread_create', `pthread_join', and other API
1222to redirect to the BDW-GC wrappers, `GC_pthread_create', etc. This was
1223unintended, and not necessary: because threads must enter Guile with
2e6829d2 1224`scm_with_guile', Guile can handle thread registration itself, without
7c81eba2
AW
1225needing to make the GC aware of all threads. This oversight has been
1226fixed.
9d6a151f 1227
7c81eba2 1228** `with-continuation-barrier' now unwinds on `quit'
9d6a151f 1229
7c81eba2
AW
1230A throw to `quit' in a continuation barrier will cause Guile to exit.
1231Before, it would do so before unwinding to the barrier, which would
1232prevent cleanup handlers from running. This has been fixed so that it
1233exits only after unwinding.
9d6a151f 1234
7c81eba2 1235** `string->pointer' and `pointer->string' have optional encoding arg
9d6a151f 1236
7c81eba2
AW
1237This allows users of the FFI to more easily deal in strings with
1238particular (non-locale) encodings, like "utf-8". See "Void Pointers and
1239Byte Access" in the manual, for more.
9d6a151f 1240
7c81eba2 1241** R6RS fixnum arithmetic optimizations
9d6a151f 1242
7c81eba2
AW
1243R6RS fixnum operations are are still slower than generic arithmetic,
1244however.
9d6a151f 1245
7c81eba2 1246** New procedure: `define-inlinable'
9d6a151f 1247
7c81eba2 1248See "Inlinable Procedures" in the manual, for more.
9d6a151f 1249
7c81eba2 1250** New procedure: `exact-integer-sqrt'
9d6a151f 1251
7c81eba2 1252See "Integer Operations" in the manual, for more.
9d6a151f 1253
7c81eba2 1254** "Extended read syntax" for symbols parses better
9d6a151f 1255
7c81eba2
AW
1256In #{foo}# symbols, backslashes are now treated as escapes, as the
1257symbol-printing code intended. Additionally, "\x" within #{foo}# is now
1258interpreted as starting an R6RS hex escape. This is backward compatible
1259because the symbol printer would never produce a "\x" before. The
1260printer also works better too.
9d6a151f 1261
6b480ced 1262** Added `--fresh-auto-compile' option
1e56cff2
AW
1263
1264This allows a user to invalidate the auto-compilation cache. It's
1265usually not needed. See "Compilation" in the manual, for a discussion.
1266
7c81eba2 1267* Manual updates
9d6a151f 1268
7c81eba2 1269** GOOPS documentation updates
9d6a151f 1270
7c81eba2 1271** New man page
9d6a151f 1272
7c81eba2 1273Thanks to Mark Harig for improvements to guile.1.
9d6a151f 1274
7c81eba2 1275** SRFI-23 documented
9d6a151f 1276
7c81eba2 1277The humble `error' SRFI now has an entry in the manual.
9d6a151f 1278
7c81eba2 1279* New modules
9d6a151f 1280
de424d95 1281** `(ice-9 binary-ports)': "R6RS I/O Ports", in the manual
7c81eba2 1282** `(ice-9 eval-string)': "Fly Evaluation", in the manual
2e6829d2 1283** `(ice-9 command-line)', not documented yet
9d6a151f 1284
882c8963
MW
1285* Bugs fixed
1286
2e6829d2 1287** Fixed `iconv_t' memory leak on close-port
7c81eba2
AW
1288** Fixed some leaks with weak hash tables
1289** Export `vhash-delq' and `vhash-delv' from `(ice-9 vlist)'
1290** `after-gc-hook' works again
1291** `define-record-type' now allowed in nested contexts
1292** `exact-integer-sqrt' now handles large integers correctly
1293** Fixed C extension examples in manual
1294** `vhash-delete' honors HASH argument
1295** Make `locale-digit-grouping' more robust
1296** Default exception printer robustness fixes
1297** Fix presence of non-I CPPFLAGS in `guile-2.0.pc'
1298** `read' updates line/column numbers when reading SCSH block comments
1299** Fix imports of multiple custom interfaces of same module
1300** Fix encoding scanning for non-seekable ports
1301** Fix `setter' when called with a non-setter generic
1302** Fix f32 and f64 bytevectors to not accept rationals
1303** Fix description of the R6RS `finite?' in manual
1304** Quotient, remainder and modulo accept inexact integers again
1305** Fix `continue' within `while' to take zero arguments
1306** Fix alignment for structures in FFI
1307** Fix port-filename of stdin, stdout, stderr to match the docs
1308** Fix weak hash table-related bug in `define-wrapped-pointer-type'
1309** Fix partial continuation application with pending procedure calls
1310** scm_{to,from}_locale_string use current locale, not current ports
1311** Fix thread cleanup, by using a pthread_key destructor
1312** Fix `quit' at the REPL
1313** Fix a failure to sync regs in vm bytevector ops
1314** Fix (texinfo reflection) to handle nested structures like syntax patterns
1315** Fix stexi->html double translation
1316** Fix tree-il->scheme fix for <prompt>
1317** Fix compilation of <prompt> in <fix> in single-value context
1318** Fix race condition in ensure-writable-dir
1319** Fix error message on ,disassemble "non-procedure"
1320** Fix prompt and abort with the boot evaluator
1321** Fix `procedure->pointer' for functions returning `void'
1322** Fix error reporting in dynamic-pointer
1323** Fix problems detecting coding: in block comments
1324** Fix duplicate load-path and load-compiled-path in compilation environment
1325** Add fallback read(2) suppport for .go files if mmap(2) unavailable
1326** Fix c32vector-set!, c64vector-set!
1327** Fix mistakenly deprecated read syntax for uniform complex vectors
1328** Fix parsing of exact numbers with negative exponents
1329** Ignore SIGPIPE in (system repl server)
1330** Fix optional second arg to R6RS log function
1331** Fix R6RS `assert' to return true value.
1332** Fix fencepost error when seeking in bytevector input ports
2e6829d2
LC
1333** Gracefully handle `setlocale' errors when starting the REPL
1334** Improve support of the `--disable-posix' configure option
1335** Make sure R6RS binary ports pass `binary-port?' regardless of the locale
1336** Gracefully handle unterminated UTF-8 sequences instead of hitting an `assert'
882c8963 1337
882c8963
MW
1338
1339\f
d9f46472 1340Changes in 2.0.0 (changes since the 1.8.x series):
96b73e84
AW
1341
1342* New modules (see the manual for details)
1343
1344** `(srfi srfi-18)', more sophisticated multithreading support
ef6b0e8d 1345** `(srfi srfi-27)', sources of random bits
7cd99cba 1346** `(srfi srfi-38)', External Representation for Data With Shared Structure
ef6b0e8d
AW
1347** `(srfi srfi-42)', eager comprehensions
1348** `(srfi srfi-45)', primitives for expressing iterative lazy algorithms
1349** `(srfi srfi-67)', compare procedures
96b73e84 1350** `(ice-9 i18n)', internationalization support
7cd99cba 1351** `(ice-9 futures)', fine-grain parallelism
0f13fcde 1352** `(rnrs bytevectors)', the R6RS bytevector API
93617170 1353** `(rnrs io ports)', a subset of the R6RS I/O port API
96b73e84 1354** `(system xref)', a cross-referencing facility (FIXME undocumented)
dbd9532e 1355** `(ice-9 vlist)', lists with constant-time random access; hash lists
fb53c347 1356** `(system foreign)', foreign function interface
18e90860
AW
1357** `(sxml match)', a pattern matcher for SXML
1358** `(srfi srfi-9 gnu)', extensions to the SRFI-9 record library
1359** `(system vm coverage)', a line-by-line code coverage library
7cd99cba
AW
1360** `(web uri)', URI data type, parser, and unparser
1361** `(web http)', HTTP header parsers and unparsers
1362** `(web request)', HTTP request data type, reader, and writer
1363** `(web response)', HTTP response data type, reader, and writer
1364** `(web server)', Generic HTTP server
1365** `(ice-9 poll)', a poll wrapper
1366** `(web server http)', HTTP-over-TCP web server implementation
66ad445d 1367
51cb0cca
AW
1368** Replaced `(ice-9 match)' with Alex Shinn's compatible, hygienic matcher.
1369
1370Guile's copy of Andrew K. Wright's `match' library has been replaced by
1371a compatible hygienic implementation by Alex Shinn. It is now
1372documented, see "Pattern Matching" in the manual.
1373
1374Compared to Andrew K. Wright's `match', the new `match' lacks
1375`match-define', `match:error-control', `match:set-error-control',
1376`match:error', `match:set-error', and all structure-related procedures.
1377
cf8ec359
AW
1378** Imported statprof, SSAX, and texinfo modules from Guile-Lib
1379
1380The statprof statistical profiler, the SSAX XML toolkit, and the texinfo
1381toolkit from Guile-Lib have been imported into Guile proper. See
1382"Standard Library" in the manual for more details.
1383
139fa149
AW
1384** Integration of lalr-scm, a parser generator
1385
1386Guile has included Dominique Boucher's fine `lalr-scm' parser generator
1387as `(system base lalr)'. See "LALR(1) Parsing" in the manual, for more
1388information.
1389
96b73e84
AW
1390* Changes to the stand-alone interpreter
1391
1392** Guile now can compile Scheme to bytecode for a custom virtual machine.
1393
1394Compiled code loads much faster than Scheme source code, and runs around
13953 or 4 times as fast, generating much less garbage in the process.
fa1804e9 1396
29b98fb2 1397** Evaluating Scheme code does not use the C stack.
fa1804e9 1398
29b98fb2
AW
1399Besides when compiling Guile itself, Guile no longer uses a recursive C
1400function as an evaluator. This obviates the need to check the C stack
1401pointer for overflow. Continuations still capture the C stack, however.
fa1804e9 1402
96b73e84
AW
1403** New environment variables: GUILE_LOAD_COMPILED_PATH,
1404 GUILE_SYSTEM_LOAD_COMPILED_PATH
fa1804e9 1405
96b73e84
AW
1406GUILE_LOAD_COMPILED_PATH is for compiled files what GUILE_LOAD_PATH is
1407for source files. It is a different path, however, because compiled
1408files are architecture-specific. GUILE_SYSTEM_LOAD_COMPILED_PATH is like
1409GUILE_SYSTEM_PATH.
1410
1411** New read-eval-print loop (REPL) implementation
1412
51cb0cca
AW
1413Running Guile with no arguments drops the user into the new REPL. See
1414"Using Guile Interactively" in the manual, for more information.
96b73e84 1415
51cb0cca
AW
1416** Remove old Emacs interface
1417
1418Guile had an unused `--emacs' command line argument that was supposed to
1419help when running Guile inside Emacs. This option has been removed, and
1420the helper functions `named-module-use!' and `load-emacs-interface' have
1421been deprecated.
1422
ef6b0e8d
AW
1423** Add `(system repl server)' module and `--listen' command-line argument
1424
1425The `(system repl server)' module exposes procedures to listen on
1426sockets for connections, and serve REPLs to those clients. The --listen
1427command-line argument allows any Guile program to thus be remotely
1428debuggable.
1429
1430See "Invoking Guile" for more information on `--listen'.
1431
7cd99cba
AW
1432** Command line additions
1433
1434The guile binary now supports a new switch "-x", which can be used to
1435extend the list of filename extensions tried when loading files
1436(%load-extensions).
1437
487bacf4
AW
1438** New reader options: `square-brackets', `r6rs-hex-escapes',
1439 `hungry-eol-escapes'
6bf927ab
LC
1440
1441The reader supports a new option (changeable via `read-options'),
1442`square-brackets', which instructs it to interpret square brackets as
29b98fb2 1443parentheses. This option is on by default.
6bf927ab
LC
1444
1445When the new `r6rs-hex-escapes' reader option is enabled, the reader
51cb0cca
AW
1446will recognize string escape sequences as defined in R6RS. R6RS string
1447escape sequences are incompatible with Guile's existing escapes, though,
1448so this option is off by default.
6bf927ab 1449
487bacf4
AW
1450Additionally, Guile follows the R6RS newline escaping rules when the
1451`hungry-eol-escapes' option is enabled.
1452
1453See "String Syntax" in the manual, for more information.
1454
cf8ec359
AW
1455** Function profiling and tracing at the REPL
1456
1457The `,profile FORM' REPL meta-command can now be used to statistically
1458profile execution of a form, to see which functions are taking the most
1459time. See `,help profile' for more information.
1460
1461Similarly, `,trace FORM' traces all function applications that occur
1462during the execution of `FORM'. See `,help trace' for more information.
1463
51cb0cca
AW
1464** Recursive debugging REPL on error
1465
1466When Guile sees an error at the REPL, instead of saving the stack, Guile
1467will directly enter a recursive REPL in the dynamic context of the
1468error. See "Error Handling" in the manual, for more information.
1469
1470A recursive REPL is the same as any other REPL, except that it
1471has been augmented with debugging information, so that one can inspect
1472the context of the error. The debugger has been integrated with the REPL
1473via a set of debugging meta-commands.
cf8ec359 1474
51cb0cca
AW
1475For example, one may access a backtrace with `,backtrace' (or
1476`,bt'). See "Interactive Debugging" in the manual, for more
1477information.
cf8ec359 1478
96b73e84
AW
1479** New `guile-tools' commands: `compile', `disassemble'
1480
93617170 1481Pass the `--help' command-line option to these commands for more
96b73e84
AW
1482information.
1483
b0217d17
AW
1484** Guile now adds its install prefix to the LTDL_LIBRARY_PATH
1485
1486Users may now install Guile to nonstandard prefixes and just run
1487`/path/to/bin/guile', instead of also having to set LTDL_LIBRARY_PATH to
1488include `/path/to/lib'.
1489
1490** Guile's Emacs integration is now more keyboard-friendly
1491
1492Backtraces may now be disclosed with the keyboard in addition to the
1493mouse.
1494
cf8ec359
AW
1495** Load path change: search in version-specific paths before site paths
1496
1497When looking for a module, Guile now searches first in Guile's
1498version-specific path (the library path), *then* in the site dir. This
1499allows Guile's copy of SSAX to override any Guile-Lib copy the user has
1500installed. Also it should cut the number of `stat' system calls by half,
1501in the common case.
1502
51cb0cca
AW
1503** Value history in the REPL on by default
1504
1505By default, the REPL will save computed values in variables like `$1',
1506`$2', and the like. There are programmatic and interactive interfaces to
1507control this. See "Value History" in the manual, for more information.
1508
1509** Readline tab completion for arguments
1510
1511When readline is enabled, tab completion works for arguments too, not
1512just for the operator position.
1513
7cd99cba
AW
1514** Expression-oriented readline history
1515
1516Guile's readline history now tries to operate on expressions instead of
1517input lines. Let us know what you think!
1518
139fa149
AW
1519** Interactive Guile follows GNU conventions
1520
1521As recommended by the GPL, Guile now shows a brief copyright and
1522warranty disclaimer on startup, along with pointers to more information.
cf8ec359 1523
96b73e84
AW
1524* Changes to Scheme functions and syntax
1525
18e90860
AW
1526** Support for R6RS libraries
1527
1528The `library' and `import' forms from the latest Scheme report have been
1529added to Guile, in such a way that R6RS libraries share a namespace with
1530Guile modules. R6RS modules may import Guile modules, and are available
1531for Guile modules to import via use-modules and all the rest. See "R6RS
1532Libraries" in the manual for more information.
1533
1534** Implementations of R6RS libraries
1535
1536Guile now has implementations for all of the libraries defined in the
1537R6RS. Thanks to Julian Graham for this excellent hack. See "R6RS
1538Standard Libraries" in the manual for a full list of libraries.
1539
1540** Partial R6RS compatibility
1541
1542Guile now has enough support for R6RS to run a reasonably large subset
1543of R6RS programs.
1544
1545Guile is not fully R6RS compatible. Many incompatibilities are simply
1546bugs, though some parts of Guile will remain R6RS-incompatible for the
1547foreseeable future. See "R6RS Incompatibilities" in the manual, for more
1548information.
1549
1550Please contact bug-guile@gnu.org if you have found an issue not
1551mentioned in that compatibility list.
1552
4a457691
AW
1553** New implementation of `primitive-eval'
1554
1555Guile's `primitive-eval' is now implemented in Scheme. Actually there is
1556still a C evaluator, used when building a fresh Guile to interpret the
1557compiler, so we can compile eval.scm. Thereafter all calls to
1558primitive-eval are implemented by VM-compiled code.
1559
1560This allows all of Guile's procedures, be they interpreted or compiled,
1561to execute on the same stack, unifying multiple-value return semantics,
1562providing for proper tail recursion between interpreted and compiled
1563code, and simplifying debugging.
1564
1565As part of this change, the evaluator no longer mutates the internal
1566representation of the code being evaluated in a thread-unsafe manner.
1567
1568There are two negative aspects of this change, however. First, Guile
1569takes a lot longer to compile now. Also, there is less debugging
1570information available for debugging interpreted code. We hope to improve
1571both of these situations.
1572
1573There are many changes to the internal C evalator interface, but all
1574public interfaces should be the same. See the ChangeLog for details. If
1575we have inadvertantly changed an interface that you were using, please
1576contact bug-guile@gnu.org.
1577
96b73e84
AW
1578** Procedure removed: `the-environment'
1579
1580This procedure was part of the interpreter's execution model, and does
1581not apply to the compiler.
fa1804e9 1582
4a457691
AW
1583** No more `local-eval'
1584
1585`local-eval' used to exist so that one could evaluate code in the
1586lexical context of a function. Since there is no way to get the lexical
1587environment any more, as that concept has no meaning for the compiler,
1588and a different meaning for the interpreter, we have removed the
1589function.
1590
1591If you think you need `local-eval', you should probably implement your
1592own metacircular evaluator. It will probably be as fast as Guile's
1593anyway.
1594
139fa149 1595** Scheme source files will now be compiled automatically.
fa1804e9
AW
1596
1597If a compiled .go file corresponding to a .scm file is not found or is
1598not fresh, the .scm file will be compiled on the fly, and the resulting
1599.go file stored away. An advisory note will be printed on the console.
1600
51cb0cca
AW
1601Note that this mechanism depends on the timestamp of the .go file being
1602newer than that of the .scm file; if the .scm or .go files are moved
1603after installation, care should be taken to preserve their original
fa1804e9
AW
1604timestamps.
1605
6f06e8d3 1606Auto-compiled files will be stored in the $XDG_CACHE_HOME/guile/ccache
19fef497
AW
1607directory, where $XDG_CACHE_HOME defaults to ~/.cache. This directory
1608will be created if needed.
fa1804e9 1609
6f06e8d3
AW
1610To inhibit automatic compilation, set the GUILE_AUTO_COMPILE environment
1611variable to 0, or pass --no-auto-compile on the Guile command line.
fa1804e9 1612
96b73e84 1613** New POSIX procedures: `getrlimit' and `setrlimit'
fa1804e9 1614
96b73e84
AW
1615Note however that the interface of these functions is likely to change
1616in the next prerelease.
fa1804e9 1617
4a457691
AW
1618** New POSIX procedure: `getsid'
1619
1620Scheme binding for the `getsid' C library call.
1621
dbd9532e
LC
1622** New POSIX procedure: `getaddrinfo'
1623
1624Scheme binding for the `getaddrinfo' C library function.
1625
7cd99cba
AW
1626** Multicast socket options
1627
1628Support was added for the IP_MULTICAST_TTL and IP_MULTICAST_IF socket
1629options. See "Network Sockets and Communication" in the manual, for
1630more information.
1631
487bacf4
AW
1632** `recv!', `recvfrom!', `send', `sendto' now deal in bytevectors
1633
1634These socket procedures now take bytevectors as arguments, instead of
1635strings. There is some deprecated string support, however.
1636
7cd99cba
AW
1637** New GNU procedures: `setaffinity' and `getaffinity'.
1638
1639See "Processes" in the manual, for more information.
1640
1641** New procedures: `compose', `negate', and `const'
1642
1643See "Higher-Order Functions" in the manual, for more information.
1644
96b73e84 1645** New procedure in `(oops goops)': `method-formals'
fa1804e9 1646
96b73e84
AW
1647** New procedures in (ice-9 session): `add-value-help-handler!',
1648 `remove-value-help-handler!', `add-name-help-handler!'
29b98fb2 1649 `remove-name-help-handler!', `procedure-arguments'
fa1804e9 1650
96b73e84
AW
1651The value and name help handlers provide some minimal extensibility to
1652the help interface. Guile-lib's `(texinfo reflection)' uses them, for
1653example, to make stexinfo help documentation available. See those
1654procedures' docstrings for more information.
1655
1656`procedure-arguments' describes the arguments that a procedure can take,
1657combining arity and formals. For example:
1658
1659 (procedure-arguments resolve-interface)
1660 => ((required . (name)) (rest . args))
fa1804e9 1661
96b73e84
AW
1662Additionally, `module-commentary' is now publically exported from
1663`(ice-9 session).
1664
cf8ec359 1665** Removed: `procedure->memoizing-macro', `procedure->syntax'
96b73e84 1666
cf8ec359
AW
1667These procedures created primitive fexprs for the old evaluator, and are
1668no longer supported. If you feel that you need these functions, you
1669probably need to write your own metacircular evaluator (which will
1670probably be as fast as Guile's, anyway).
96b73e84
AW
1671
1672** New language: ECMAScript
1673
1674Guile now ships with one other high-level language supported,
1675ECMAScript. The goal is to support all of version 3.1 of the standard,
1676but not all of the libraries are there yet. This support is not yet
1677documented; ask on the mailing list if you are interested.
1678
19fef497
AW
1679** New language: Brainfuck
1680
1681Brainfuck is a toy language that closely models Turing machines. Guile's
1682brainfuck compiler is meant to be an example of implementing other
1683languages. See the manual for details, or
1684http://en.wikipedia.org/wiki/Brainfuck for more information about the
1685Brainfuck language itself.
1686
4a457691
AW
1687** New language: Elisp
1688
1689Guile now has an experimental Emacs Lisp compiler and runtime. You can
1690now switch to Elisp at the repl: `,language elisp'. All kudos to Daniel
7cd99cba 1691Kraft and Brian Templeton, and all bugs to bug-guile@gnu.org.
4a457691 1692
139fa149
AW
1693** Better documentation infrastructure for macros
1694
1695It is now possible to introspect on the type of a macro, e.g.
1696syntax-rules, identifier-syntax, etc, and extract information about that
1697macro, such as the syntax-rules patterns or the defmacro arguments.
1698`(texinfo reflection)' takes advantage of this to give better macro
1699documentation.
1700
139fa149
AW
1701** Support for arbitrary procedure metadata
1702
1703Building on its support for docstrings, Guile now supports multiple
1704docstrings, adding them to the tail of a compiled procedure's
1705properties. For example:
1706
1707 (define (foo)
1708 "one"
1709 "two"
1710 3)
29b98fb2 1711 (procedure-properties foo)
139fa149
AW
1712 => ((name . foo) (documentation . "one") (documentation . "two"))
1713
1714Also, vectors of pairs are now treated as additional metadata entries:
1715
1716 (define (bar)
1717 #((quz . #f) (docstring . "xyzzy"))
1718 3)
29b98fb2 1719 (procedure-properties bar)
139fa149
AW
1720 => ((name . bar) (quz . #f) (docstring . "xyzzy"))
1721
1722This allows arbitrary literals to be embedded as metadata in a compiled
1723procedure.
1724
96b73e84
AW
1725** The psyntax expander now knows how to interpret the @ and @@ special
1726 forms.
1727
1728** The psyntax expander is now hygienic with respect to modules.
1729
1730Free variables in a macro are scoped in the module that the macro was
1731defined in, not in the module the macro is used in. For example, code
1732like this works now:
1733
1734 (define-module (foo) #:export (bar))
1735 (define (helper x) ...)
1736 (define-syntax bar
1737 (syntax-rules () ((_ x) (helper x))))
1738
1739 (define-module (baz) #:use-module (foo))
1740 (bar qux)
1741
1742It used to be you had to export `helper' from `(foo)' as well.
1743Thankfully, this has been fixed.
1744
51cb0cca 1745** Support for version information in Guile's `module' form
cf8ec359 1746
51cb0cca
AW
1747Guile modules now have a `#:version' field. See "R6RS Version
1748References", "General Information about Modules", "Using Guile Modules",
1749and "Creating Guile Modules" in the manual for more information.
96b73e84 1750
cf8ec359
AW
1751** Support for renaming bindings on module export
1752
1753Wherever Guile accepts a symbol as an argument to specify a binding to
1754export, it now also accepts a pair of symbols, indicating that a binding
1755should be renamed on export. See "Creating Guile Modules" in the manual
1756for more information.
96b73e84 1757
18e90860
AW
1758** New procedure: `module-export-all!'
1759
1760This procedure exports all current and future bindings from a module.
1761Use as `(module-export-all! (current-module))'.
1762
7cd99cba
AW
1763** New procedure `reload-module', and `,reload' REPL command
1764
1765See "Module System Reflection" and "Module Commands" in the manual, for
1766more information.
1767
96b73e84
AW
1768** `eval-case' has been deprecated, and replaced by `eval-when'.
1769
29b98fb2
AW
1770The semantics of `eval-when' are easier to understand. See "Eval When"
1771in the manual, for more information.
96b73e84
AW
1772
1773** Guile is now more strict about prohibiting definitions in expression
1774 contexts.
1775
1776Although previous versions of Guile accepted it, the following
1777expression is not valid, in R5RS or R6RS:
1778
1779 (if test (define foo 'bar) (define foo 'baz))
1780
1781In this specific case, it would be better to do:
1782
1783 (define foo (if test 'bar 'baz))
1784
79b3863d
AW
1785It is possible to circumvent this restriction with e.g.
1786`(module-define! (current-module) 'foo 'baz)'. Contact the list if you
1787have any questions.
96b73e84 1788
51cb0cca
AW
1789** Support for `letrec*'
1790
1791Guile now supports `letrec*', a recursive lexical binding operator in
1792which the identifiers are bound in order. See "Local Bindings" in the
1793manual, for more details.
1794
1795** Internal definitions now expand to `letrec*'
1796
1797Following the R6RS, internal definitions now expand to letrec* instead
1798of letrec. The following program is invalid for R5RS, but valid for
1799R6RS:
1800
1801 (define (foo)
1802 (define bar 10)
1803 (define baz (+ bar 20))
1804 baz)
1805
1806 ;; R5RS and Guile <= 1.8:
1807 (foo) => Unbound variable: bar
1808 ;; R6RS and Guile >= 2.0:
1809 (foo) => 30
1810
1811This change should not affect correct R5RS programs, or programs written
1812in earlier Guile dialects.
1813
18e90860
AW
1814** Macro expansion produces structures instead of s-expressions
1815
1816In the olden days, macroexpanding an s-expression would yield another
1817s-expression. Though the lexical variables were renamed, expansions of
1818core forms like `if' and `begin' were still non-hygienic, as they relied
1819on the toplevel definitions of `if' et al being the conventional ones.
1820
1821The solution is to expand to structures instead of s-expressions. There
1822is an `if' structure, a `begin' structure, a `toplevel-ref' structure,
1823etc. The expander already did this for compilation, producing Tree-IL
1824directly; it has been changed now to do so when expanding for the
1825evaluator as well.
1826
96b73e84
AW
1827** Defmacros must now produce valid Scheme expressions.
1828
1829It used to be that defmacros could unquote in Scheme values, as a way of
1830supporting partial evaluation, and avoiding some hygiene issues. For
1831example:
1832
1833 (define (helper x) ...)
1834 (define-macro (foo bar)
1835 `(,helper ,bar))
1836
1837Assuming this macro is in the `(baz)' module, the direct translation of
1838this code would be:
1839
1840 (define (helper x) ...)
1841 (define-macro (foo bar)
1842 `((@@ (baz) helper) ,bar))
1843
1844Of course, one could just use a hygienic macro instead:
1845
1846 (define-syntax foo
1847 (syntax-rules ()
1848 ((_ bar) (helper bar))))
1849
1850** Guile's psyntax now supports docstrings and internal definitions.
1851
1852The following Scheme is not strictly legal:
1853
1854 (define (foo)
1855 "bar"
1856 (define (baz) ...)
1857 (baz))
1858
1859However its intent is fairly clear. Guile interprets "bar" to be the
1860docstring of `foo', and the definition of `baz' is still in definition
1861context.
1862
51cb0cca
AW
1863** Support for settable identifier syntax
1864
1865Following the R6RS, "variable transformers" are settable
1866identifier-syntax. See "Identifier macros" in the manual, for more
1867information.
1868
1869** syntax-case treats `_' as a placeholder
1870
1871Following R6RS, a `_' in a syntax-rules or syntax-case pattern matches
1872anything, and binds no pattern variables. Unlike the R6RS, Guile also
1873permits `_' to be in the literals list for a pattern.
1874
96b73e84
AW
1875** Macros need to be defined before their first use.
1876
1877It used to be that with lazy memoization, this might work:
1878
1879 (define (foo x)
1880 (ref x))
1881 (define-macro (ref x) x)
1882 (foo 1) => 1
1883
1884But now, the body of `foo' is interpreted to mean a call to the toplevel
1885`ref' function, instead of a macro expansion. The solution is to define
1886macros before code that uses them.
1887
1888** Functions needed by macros at expand-time need to be present at
1889 expand-time.
1890
1891For example, this code will work at the REPL:
1892
1893 (define (double-helper x) (* x x))
1894 (define-macro (double-literal x) (double-helper x))
1895 (double-literal 2) => 4
1896
1897But it will not work when a file is compiled, because the definition of
1898`double-helper' is not present at expand-time. The solution is to wrap
1899the definition of `double-helper' in `eval-when':
1900
1901 (eval-when (load compile eval)
1902 (define (double-helper x) (* x x)))
1903 (define-macro (double-literal x) (double-helper x))
1904 (double-literal 2) => 4
1905
29b98fb2 1906See the documentation for eval-when for more information.
96b73e84 1907
29b98fb2 1908** `macroexpand' produces structures, not S-expressions.
96b73e84 1909
29b98fb2
AW
1910Given the need to maintain referential transparency, both lexically and
1911modular, the result of expanding Scheme expressions is no longer itself
1912an s-expression. If you want a human-readable approximation of the
1913result of `macroexpand', call `tree-il->scheme' from `(language
1914tree-il)'.
96b73e84 1915
29b98fb2 1916** Removed function: `macroexpand-1'
96b73e84 1917
29b98fb2
AW
1918It is unclear how to implement `macroexpand-1' with syntax-case, though
1919PLT Scheme does prove that it is possible.
fa1804e9
AW
1920
1921** New reader macros: #' #` #, #,@
1922
1923These macros translate, respectively, to `syntax', `quasisyntax',
1924`unsyntax', and `unsyntax-splicing'. See the R6RS for more information.
1925These reader macros may be overridden by `read-hash-extend'.
1926
1927** Incompatible change to #'
1928
1929Guile did have a #' hash-extension, by default, which just returned the
1930subsequent datum: #'foo => foo. In the unlikely event that anyone
1931actually used this, this behavior may be reinstated via the
1932`read-hash-extend' mechanism.
1933
b47fea09
AW
1934** `unquote' and `unquote-splicing' accept multiple expressions
1935
1936As per the R6RS, these syntax operators can now accept any number of
1937expressions to unquote.
1938
fa1804e9
AW
1939** Scheme expresssions may be commented out with #;
1940
93617170
LC
1941#; comments out an entire expression. See SRFI-62 or the R6RS for more
1942information.
fa1804e9 1943
b0abbaa7
AW
1944** Prompts: Delimited, composable continuations
1945
1946Guile now has prompts as part of its primitive language. See "Prompts"
1947in the manual, for more information.
1948
1949Expressions entered in at the REPL, or from the command line, are
1950surrounded by a prompt with the default prompt tag.
1951
93617170 1952** `make-stack' with a tail-called procedural narrowing argument no longer
fa1804e9
AW
1953 works (with compiled procedures)
1954
1955It used to be the case that a captured stack could be narrowed to select
1956calls only up to or from a certain procedure, even if that procedure
1957already tail-called another procedure. This was because the debug
1958information from the original procedure was kept on the stack.
1959
1960Now with the new compiler, the stack only contains active frames from
1961the current continuation. A narrow to a procedure that is not in the
1962stack will result in an empty stack. To fix this, narrow to a procedure
1963that is active in the current continuation, or narrow to a specific
1964number of stack frames.
1965
29b98fb2 1966** Backtraces through compiled procedures only show procedures that are
fa1804e9
AW
1967 active in the current continuation
1968
1969Similarly to the previous issue, backtraces in compiled code may be
1970different from backtraces in interpreted code. There are no semantic
1971differences, however. Please mail bug-guile@gnu.org if you see any
1972deficiencies with Guile's backtraces.
1973
b47fea09
AW
1974** `positions' reader option enabled by default
1975
1976This change allows primitive-load without --auto-compile to also
1977propagate source information through the expander, for better errors and
1978to let macros know their source locations. The compiler was already
1979turning it on anyway.
1980
51cb0cca
AW
1981** New macro: `current-source-location'
1982
1983The macro returns the current source location (to be documented).
1984
fa1804e9
AW
1985** syntax-rules and syntax-case macros now propagate source information
1986 through to the expanded code
1987
1988This should result in better backtraces.
1989
1990** The currying behavior of `define' has been removed.
1991
1992Before, `(define ((f a) b) (* a b))' would translate to
1993
1994 (define f (lambda (a) (lambda (b) (* a b))))
1995
93617170 1996Now a syntax error is signaled, as this syntax is not supported by
29b98fb2
AW
1997default. Use the `(ice-9 curried-definitions)' module to get back the
1998old behavior.
fa1804e9 1999
4a457691
AW
2000** New procedure, `define!'
2001
2002`define!' is a procedure that takes two arguments, a symbol and a value,
2003and binds the value to the symbol in the current module. It's useful to
2004programmatically make definitions in the current module, and is slightly
2005less verbose than `module-define!'.
2006
fa1804e9
AW
2007** All modules have names now
2008
2009Before, you could have anonymous modules: modules without names. Now,
2010because of hygiene and macros, all modules have names. If a module was
2011created without a name, the first time `module-name' is called on it, a
2012fresh name will be lazily generated for it.
2013
18e90860
AW
2014** The module namespace is now separate from the value namespace
2015
2016It was a little-known implementation detail of Guile's module system
2017that it was built on a single hierarchical namespace of values -- that
2018if there was a module named `(foo bar)', then in the module named
2019`(foo)' there was a binding from `bar' to the `(foo bar)' module.
2020
2021This was a neat trick, but presented a number of problems. One problem
2022was that the bindings in a module were not apparent from the module
2023itself; perhaps the `(foo)' module had a private binding for `bar', and
2024then an external contributor defined `(foo bar)'. In the end there can
2025be only one binding, so one of the two will see the wrong thing, and
2026produce an obtuse error of unclear provenance.
2027
2028Also, the public interface of a module was also bound in the value
2029namespace, as `%module-public-interface'. This was a hack from the early
2030days of Guile's modules.
2031
2032Both of these warts have been fixed by the addition of fields in the
2033`module' data type. Access to modules and their interfaces from the
2034value namespace has been deprecated, and all accessors use the new
2035record accessors appropriately.
2036
2037When Guile is built with support for deprecated code, as is the default,
2038the value namespace is still searched for modules and public interfaces,
2039and a deprecation warning is raised as appropriate.
2040
2041Finally, to support lazy loading of modules as one used to be able to do
2042with module binder procedures, Guile now has submodule binders, called
2043if a given submodule is not found. See boot-9.scm for more information.
2044
2045** New procedures: module-ref-submodule, module-define-submodule,
2046 nested-ref-module, nested-define-module!, local-ref-module,
2047 local-define-module
2048
2049These new accessors are like their bare variants, but operate on
2050namespaces instead of values.
2051
2052** The (app modules) module tree is officially deprecated
2053
2054It used to be that one could access a module named `(foo bar)' via
2055`(nested-ref the-root-module '(app modules foo bar))'. The `(app
2056modules)' bit was a never-used and never-documented abstraction, and has
2057been deprecated. See the following mail for a full discussion:
2058
2059 http://lists.gnu.org/archive/html/guile-devel/2010-04/msg00168.html
2060
2061The `%app' binding is also deprecated.
2062
51cb0cca
AW
2063** `module-filename' field and accessor
2064
2065Modules now record the file in which they are defined. This field may be
2066accessed with the new `module-filename' procedure.
2067
2068** Modules load within a known environment
2069
2070It takes a few procedure calls to define a module, and those procedure
2071calls need to be in scope. Now we ensure that the current module when
2072loading a module is one that has the needed bindings, instead of relying
2073on chance.
2074
b47fea09
AW
2075** `load' is a macro (!) that resolves paths relative to source file dir
2076
2077The familiar Schem `load' procedure is now a macro that captures the
2078name of the source file being expanded, and dispatches to the new
2079`load-in-vicinity'. Referencing `load' by bare name returns a closure
2080that embeds the current source file name.
2081
2082This fix allows `load' of relative paths to be resolved with respect to
2083the location of the file that calls `load'.
2084
fa1804e9
AW
2085** Many syntax errors have different texts now
2086
2087Syntax errors still throw to the `syntax-error' key, but the arguments
2088are often different now. Perhaps in the future, Guile will switch to
93617170 2089using standard SRFI-35 conditions.
fa1804e9
AW
2090
2091** Returning multiple values to compiled code will silently truncate the
2092 values to the expected number
2093
2094For example, the interpreter would raise an error evaluating the form,
2095`(+ (values 1 2) (values 3 4))', because it would see the operands as
2096being two compound "values" objects, to which `+' does not apply.
2097
2098The compiler, on the other hand, receives multiple values on the stack,
2099not as a compound object. Given that it must check the number of values
2100anyway, if too many values are provided for a continuation, it chooses
2101to truncate those values, effectively evaluating `(+ 1 3)' instead.
2102
2103The idea is that the semantics that the compiler implements is more
2104intuitive, and the use of the interpreter will fade out with time.
2105This behavior is allowed both by the R5RS and the R6RS.
2106
2107** Multiple values in compiled code are not represented by compound
2108 objects
2109
2110This change may manifest itself in the following situation:
2111
2112 (let ((val (foo))) (do-something) val)
2113
2114In the interpreter, if `foo' returns multiple values, multiple values
2115are produced from the `let' expression. In the compiler, those values
2116are truncated to the first value, and that first value is returned. In
2117the compiler, if `foo' returns no values, an error will be raised, while
2118the interpreter would proceed.
2119
2120Both of these behaviors are allowed by R5RS and R6RS. The compiler's
2121behavior is more correct, however. If you wish to preserve a potentially
2122multiply-valued return, you will need to set up a multiple-value
2123continuation, using `call-with-values'.
2124
2125** Defmacros are now implemented in terms of syntax-case.
2126
2127The practical ramification of this is that the `defmacro?' predicate has
2128been removed, along with `defmacro-transformer', `macro-table',
2129`xformer-table', `assert-defmacro?!', `set-defmacro-transformer!' and
2130`defmacro:transformer'. This is because defmacros are simply macros. If
2131any of these procedures provided useful facilities to you, we encourage
2132you to contact the Guile developers.
2133
139fa149
AW
2134** Hygienic macros documented as the primary syntactic extension mechanism.
2135
2136The macro documentation was finally fleshed out with some documentation
29b98fb2
AW
2137on `syntax-rules' and `syntax-case' macros, and other parts of the macro
2138expansion process. See "Macros" in the manual, for details.
139fa149 2139
fa1804e9
AW
2140** psyntax is now the default expander
2141
2142Scheme code is now expanded by default by the psyntax hygienic macro
2143expander. Expansion is performed completely before compilation or
2144interpretation.
2145
2146Notably, syntax errors will be signalled before interpretation begins.
2147In the past, many syntax errors were only detected at runtime if the
2148code in question was memoized.
2149
2150As part of its expansion, psyntax renames all lexically-bound
2151identifiers. Original identifier names are preserved and given to the
2152compiler, but the interpreter will see the renamed variables, e.g.,
2153`x432' instead of `x'.
2154
2155Note that the psyntax that Guile uses is a fork, as Guile already had
2156modules before incompatible modules were added to psyntax -- about 10
2157years ago! Thus there are surely a number of bugs that have been fixed
2158in psyntax since then. If you find one, please notify bug-guile@gnu.org.
2159
2160** syntax-rules and syntax-case are available by default.
2161
2162There is no longer any need to import the `(ice-9 syncase)' module
2163(which is now deprecated). The expander may be invoked directly via
29b98fb2 2164`macroexpand', though it is normally searched for via the current module
fa1804e9
AW
2165transformer.
2166
2167Also, the helper routines for syntax-case are available in the default
2168environment as well: `syntax->datum', `datum->syntax',
2169`bound-identifier=?', `free-identifier=?', `generate-temporaries',
2170`identifier?', and `syntax-violation'. See the R6RS for documentation.
2171
4a457691
AW
2172** Tail patterns in syntax-case
2173
2174Guile has pulled in some more recent changes from the psyntax portable
2175syntax expander, to implement support for "tail patterns". Such patterns
2176are supported by syntax-rules and syntax-case. This allows a syntax-case
2177match clause to have ellipses, then a pattern at the end. For example:
2178
2179 (define-syntax case
2180 (syntax-rules (else)
2181 ((_ val match-clause ... (else e e* ...))
2182 [...])))
2183
2184Note how there is MATCH-CLAUSE, which is ellipsized, then there is a
2185tail pattern for the else clause. Thanks to Andreas Rottmann for the
2186patch, and Kent Dybvig for the code.
2187
fa1804e9
AW
2188** Lexical bindings introduced by hygienic macros may not be referenced
2189 by nonhygienic macros.
2190
2191If a lexical binding is introduced by a hygienic macro, it may not be
2192referenced by a nonhygienic macro. For example, this works:
2193
2194 (let ()
2195 (define-macro (bind-x val body)
2196 `(let ((x ,val)) ,body))
2197 (define-macro (ref x)
2198 x)
2199 (bind-x 10 (ref x)))
2200
2201But this does not:
2202
2203 (let ()
2204 (define-syntax bind-x
2205 (syntax-rules ()
2206 ((_ val body) (let ((x val)) body))))
2207 (define-macro (ref x)
2208 x)
2209 (bind-x 10 (ref x)))
2210
2211It is not normal to run into this situation with existing code. However,
51cb0cca 2212if you have defmacros that expand to hygienic macros, it is possible to
66ad445d
AW
2213run into situations like this. For example, if you have a defmacro that
2214generates a `while' expression, the `break' bound by the `while' may not
2215be visible within other parts of your defmacro. The solution is to port
2216from defmacros to syntax-rules or syntax-case.
fa1804e9
AW
2217
2218** Macros may no longer be referenced as first-class values.
2219
2220In the past, you could evaluate e.g. `if', and get its macro value. Now,
2221expanding this form raises a syntax error.
2222
2223Macros still /exist/ as first-class values, but they must be
2224/referenced/ via the module system, e.g. `(module-ref (current-module)
2225'if)'.
2226
29b98fb2
AW
2227** Macros may now have docstrings.
2228
2229`object-documentation' from `(ice-9 documentation)' may be used to
2230retrieve the docstring, once you have a macro value -- but see the above
2231note about first-class macros. Docstrings are associated with the syntax
2232transformer procedures.
fa1804e9 2233
e614d375
AW
2234** `case-lambda' is now available in the default environment.
2235
2236The binding in the default environment is equivalent to the one from the
2237`(srfi srfi-16)' module. Use the srfi-16 module explicitly if you wish
2238to maintain compatibility with Guile 1.8 and earlier.
2239
29b98fb2 2240** Procedures may now have more than one arity.
5bb408cc
AW
2241
2242This can be the case, for example, in case-lambda procedures. The
2243arities of compiled procedures may be accessed via procedures from the
2244`(system vm program)' module; see "Compiled Procedures", "Optional
2245Arguments", and "Case-lambda" in the manual.
2246
18e90860
AW
2247** Deprecate arity access via (procedure-properties proc 'arity)
2248
2249Instead of accessing a procedure's arity as a property, use the new
2250`procedure-minimum-arity' function, which gives the most permissive
b3da54d1 2251arity that the function has, in the same format as the old arity
18e90860
AW
2252accessor.
2253
e614d375
AW
2254** `lambda*' and `define*' are now available in the default environment
2255
2256As with `case-lambda', `(ice-9 optargs)' continues to be supported, for
2257compatibility purposes. No semantic change has been made (we hope).
2258Optional and keyword arguments now dispatch via special VM operations,
2259without the need to cons rest arguments, making them very fast.
2260
487bacf4
AW
2261** New syntax: define-once
2262
2263`define-once' is like Lisp's `defvar': it creates a toplevel binding,
2264but only if one does not exist already.
2265
cf8ec359
AW
2266** New function, `truncated-print', with `format' support
2267
2268`(ice-9 pretty-print)' now exports `truncated-print', a printer that
2269will ensure that the output stays within a certain width, truncating the
2270output in what is hopefully an intelligent manner. See the manual for
2271more details.
2272
2273There is a new `format' specifier, `~@y', for doing a truncated
2274print (as opposed to `~y', which does a pretty-print). See the `format'
2275documentation for more details.
2276
7cd99cba
AW
2277** Better pretty-printing
2278
2279Indentation recognizes more special forms, like `syntax-case', and read
2280macros like `quote' are printed better.
2281
51cb0cca
AW
2282** Passing a number as the destination of `format' is deprecated
2283
2284The `format' procedure in `(ice-9 format)' now emits a deprecation
2285warning if a number is passed as its first argument.
2286
487bacf4
AW
2287Also, it used to be that you could omit passing a port to `format', in
2288some cases. This still works, but has been formally deprecated.
2289
cf8ec359
AW
2290** SRFI-4 vectors reimplemented in terms of R6RS bytevectors
2291
2292Guile now implements SRFI-4 vectors using bytevectors. Often when you
2293have a numeric vector, you end up wanting to write its bytes somewhere,
2294or have access to the underlying bytes, or read in bytes from somewhere
2295else. Bytevectors are very good at this sort of thing. But the SRFI-4
2296APIs are nicer to use when doing number-crunching, because they are
2297addressed by element and not by byte.
2298
2299So as a compromise, Guile allows all bytevector functions to operate on
2300numeric vectors. They address the underlying bytes in the native
2301endianness, as one would expect.
2302
2303Following the same reasoning, that it's just bytes underneath, Guile
2304also allows uniform vectors of a given type to be accessed as if they
2305were of any type. One can fill a u32vector, and access its elements with
2306u8vector-ref. One can use f64vector-ref on bytevectors. It's all the
2307same to Guile.
2308
2309In this way, uniform numeric vectors may be written to and read from
2310input/output ports using the procedures that operate on bytevectors.
2311
2312Calls to SRFI-4 accessors (ref and set functions) from Scheme are now
2313inlined to the VM instructions for bytevector access.
2314
2315See "SRFI-4" in the manual, for more information.
2316
2317** Nonstandard SRFI-4 procedures now available from `(srfi srfi-4 gnu)'
2318
2319Guile's `(srfi srfi-4)' now only exports those srfi-4 procedures that
2320are part of the standard. Complex uniform vectors and the
2321`any->FOOvector' family are now available only from `(srfi srfi-4 gnu)'.
2322
2323Guile's default environment imports `(srfi srfi-4)', and probably should
2324import `(srfi srfi-4 gnu)' as well.
2325
2326See "SRFI-4 Extensions" in the manual, for more information.
2327
e614d375
AW
2328** New syntax: include-from-path.
2329
2330`include-from-path' is like `include', except it looks for its file in
2331the load path. It can be used to compile other files into a file.
2332
2333** New syntax: quasisyntax.
2334
2335`quasisyntax' is to `syntax' as `quasiquote' is to `quote'. See the R6RS
2336documentation for more information. Thanks to Andre van Tonder for the
2337implementation.
2338
51cb0cca
AW
2339** `*unspecified*' is identifier syntax
2340
2341`*unspecified*' is no longer a variable, so it is optimized properly by
2342the compiler, and is not `set!'-able.
2343
487bacf4
AW
2344** Changes and bugfixes in numerics code
2345
2346*** Added six new sets of fast quotient and remainder operators
2347
2348Added six new sets of fast quotient and remainder operator pairs with
2349different semantics than the R5RS operators. They support not only
2350integers, but all reals, including exact rationals and inexact
2351floating point numbers.
2352
2353These procedures accept two real numbers N and D, where the divisor D
2354must be non-zero. Each set of operators computes an integer quotient
2355Q and a real remainder R such that N = Q*D + R and |R| < |D|. They
2356differ only in how N/D is rounded to produce Q.
2357
2358`euclidean-quotient' returns the integer Q and `euclidean-remainder'
2359returns the real R such that N = Q*D + R and 0 <= R < |D|. `euclidean/'
2360returns both Q and R, and is more efficient than computing each
2361separately. Note that when D > 0, `euclidean-quotient' returns
2362floor(N/D), and when D < 0 it returns ceiling(N/D).
2363
2364`centered-quotient', `centered-remainder', and `centered/' are similar
2365except that the range of remainders is -abs(D/2) <= R < abs(D/2), and
2366`centered-quotient' rounds N/D to the nearest integer. Note that these
2367operators are equivalent to the R6RS integer division operators `div',
2368`mod', `div-and-mod', `div0', `mod0', and `div0-and-mod0'.
2369
2370`floor-quotient' and `floor-remainder' compute Q and R, respectively,
2371where Q has been rounded toward negative infinity. `floor/' returns
2372both Q and R, and is more efficient than computing each separately.
2373Note that when applied to integers, `floor-remainder' is equivalent to
2374the R5RS integer-only `modulo' operator. `ceiling-quotient',
2375`ceiling-remainder', and `ceiling/' are similar except that Q is
2376rounded toward positive infinity.
2377
2378For `truncate-quotient', `truncate-remainder', and `truncate/', Q is
2379rounded toward zero. Note that when applied to integers,
2380`truncate-quotient' and `truncate-remainder' are equivalent to the
2381R5RS integer-only operators `quotient' and `remainder'.
2382
2383For `round-quotient', `round-remainder', and `round/', Q is rounded to
2384the nearest integer, with ties going to the nearest even integer.
2385
2386*** Complex number changes
2387
2388Guile is now able to represent non-real complex numbers whose
2389imaginary part is an _inexact_ zero (0.0 or -0.0), per R6RS.
2390Previously, such numbers were immediately changed into inexact reals.
2391
2392(real? 0.0+0.0i) now returns #f, per R6RS, although (zero? 0.0+0.0i)
2393still returns #t, per R6RS. (= 0 0.0+0.0i) and (= 0.0 0.0+0.0i) are
2394#t, but the same comparisons using `eqv?' or `equal?' are #f.
2395
2396Like other non-real numbers, these complex numbers with inexact zero
2397imaginary part will raise exceptions is passed to procedures requiring
2398reals, such as `<', `>', `<=', `>=', `min', `max', `positive?',
2399`negative?', `inf?', `nan?', `finite?', etc.
2400
2401**** `make-rectangular' changes
2402
2403scm_make_rectangular `make-rectangular' now returns a real number only
2404if the imaginary part is an _exact_ 0. Previously, it would return a
2405real number if the imaginary part was an inexact zero.
2406
2407scm_c_make_rectangular now always returns a non-real complex number,
2408even if the imaginary part is zero. Previously, it would return a
2409real number if the imaginary part was zero.
2410
2411**** `make-polar' changes
2412
2413scm_make_polar `make-polar' now returns a real number only if the
2414angle or magnitude is an _exact_ 0. If the magnitude is an exact 0,
2415it now returns an exact 0. Previously, it would return a real
2416number if the imaginary part was an inexact zero.
2417
2418scm_c_make_polar now always returns a non-real complex number, even if
2419the imaginary part is 0.0. Previously, it would return a real number
2420if the imaginary part was 0.0.
2421
2422**** `imag-part' changes
2423
2424scm_imag_part `imag-part' now returns an exact 0 if applied to an
2425inexact real number. Previously it returned an inexact zero in this
2426case.
2427
2428*** `eqv?' and `equal?' now compare numbers equivalently
2429
2430scm_equal_p `equal?' now behaves equivalently to scm_eqv_p `eqv?' for
2431numeric values, per R5RS. Previously, equal? worked differently,
2432e.g. `(equal? 0.0 -0.0)' returned #t but `(eqv? 0.0 -0.0)' returned #f,
2433and `(equal? +nan.0 +nan.0)' returned #f but `(eqv? +nan.0 +nan.0)'
2434returned #t.
2435
2436*** `(equal? +nan.0 +nan.0)' now returns #t
2437
2438Previously, `(equal? +nan.0 +nan.0)' returned #f, although
2439`(let ((x +nan.0)) (equal? x x))' and `(eqv? +nan.0 +nan.0)'
2440both returned #t. R5RS requires that `equal?' behave like
2441`eqv?' when comparing numbers.
2442
2443*** Change in handling products `*' involving exact 0
2444
2445scm_product `*' now handles exact 0 differently. A product containing
2446an exact 0 now returns an exact 0 if and only if the other arguments
2447are all exact. An inexact zero is returned if and only if the other
2448arguments are all finite but not all exact. If an infinite or NaN
2449value is present, a NaN value is returned. Previously, any product
2450containing an exact 0 yielded an exact 0, regardless of the other
2451arguments.
2452
2453*** `expt' and `integer-expt' changes when the base is 0
2454
2455While `(expt 0 0)' is still 1, and `(expt 0 N)' for N > 0 is still
2456zero, `(expt 0 N)' for N < 0 is now a NaN value, and likewise for
2457integer-expt. This is more correct, and conforming to R6RS, but seems
2458to be incompatible with R5RS, which would return 0 for all non-zero
2459values of N.
2460
2461*** `expt' and `integer-expt' are more generic, less strict
2462
2463When raising to an exact non-negative integer exponent, `expt' and
2464`integer-expt' are now able to exponentiate any object that can be
2465multiplied using `*'. They can also raise an object to an exact
2466negative integer power if its reciprocal can be taken using `/'.
2467In order to allow this, the type of the first argument is no longer
2468checked when raising to an exact integer power. If the exponent is 0
2469or 1, the first parameter is not manipulated at all, and need not
2470even support multiplication.
2471
2472*** Infinities are no longer integers, nor rationals
2473
2474scm_integer_p `integer?' and scm_rational_p `rational?' now return #f
2475for infinities, per R6RS. Previously they returned #t for real
2476infinities. The real infinities and NaNs are still considered real by
2477scm_real `real?' however, per R6RS.
2478
2479*** NaNs are no longer rationals
2480
2481scm_rational_p `rational?' now returns #f for NaN values, per R6RS.
2482Previously it returned #t for real NaN values. They are still
2483considered real by scm_real `real?' however, per R6RS.
2484
2485*** `inf?' and `nan?' now throw exceptions for non-reals
2486
2487The domain of `inf?' and `nan?' is the real numbers. Guile now signals
2488an error when a non-real number or non-number is passed to these
2489procedures. (Note that NaNs _are_ considered numbers by scheme, despite
2490their name).
2491
2492*** `rationalize' bugfixes and changes
2493
2494Fixed bugs in scm_rationalize `rationalize'. Previously, it returned
2495exact integers unmodified, although that was incorrect if the epsilon
2496was at least 1 or inexact, e.g. (rationalize 4 1) should return 3 per
2497R5RS and R6RS, but previously it returned 4. It also now handles
2498cases involving infinities and NaNs properly, per R6RS.
2499
2500*** Trigonometric functions now return exact numbers in some cases
2501
2502scm_sin `sin', scm_cos `cos', scm_tan `tan', scm_asin `asin', scm_acos
2503`acos', scm_atan `atan', scm_sinh `sinh', scm_cosh `cosh', scm_tanh
2504`tanh', scm_sys_asinh `asinh', scm_sys_acosh `acosh', and
2505scm_sys_atanh `atanh' now return exact results in some cases.
2506
2507*** New procedure: `finite?'
2508
2509Add scm_finite_p `finite?' from R6RS to guile core, which returns #t
2510if and only if its argument is neither infinite nor a NaN. Note that
2511this is not the same as (not (inf? x)) or (not (infinite? x)), since
2512NaNs are neither finite nor infinite.
2513
2514*** Improved exactness handling for complex number parsing
2515
2516When parsing non-real complex numbers, exactness specifiers are now
2517applied to each component, as is done in PLT Scheme. For complex
2518numbers written in rectangular form, exactness specifiers are applied
2519to the real and imaginary parts before calling scm_make_rectangular.
2520For complex numbers written in polar form, exactness specifiers are
2521applied to the magnitude and angle before calling scm_make_polar.
2522
2523Previously, exactness specifiers were applied to the number as a whole
2524_after_ calling scm_make_rectangular or scm_make_polar.
2525
2526For example, (string->number "#i5.0+0i") now does the equivalent of:
2527
2528 (make-rectangular (exact->inexact 5.0) (exact->inexact 0))
2529
2530which yields 5.0+0.0i. Previously it did the equivalent of:
2531
2532 (exact->inexact (make-rectangular 5.0 0))
2533
2534which yielded 5.0.
2535
108e18b1
AW
2536** Unicode characters
2537
2538Unicode characters may be entered in octal format via e.g. `#\454', or
2539created via (integer->char 300). A hex external representation will
2540probably be introduced at some point.
2541
2542** Unicode strings
2543
2544Internally, strings are now represented either in the `latin-1'
2545encoding, one byte per character, or in UTF-32, with four bytes per
2546character. Strings manage their own allocation, switching if needed.
2547
99e31c32
AW
2548Extended characters may be written in a literal string using the
2549hexadecimal escapes `\xXX', `\uXXXX', or `\UXXXXXX', for 8-bit, 16-bit,
2550or 24-bit codepoints, respectively, or entered directly in the native
2551encoding of the port on which the string is read.
2552
56664c08
AW
2553** Unicode symbols
2554
2555One may now use U+03BB (GREEK SMALL LETTER LAMBDA) as an identifier.
2556
99e31c32
AW
2557** Support for non-ASCII source code files
2558
2559The default reader now handles source code files for some of the
2560non-ASCII character encodings, such as UTF-8. A non-ASCII source file
2561should have an encoding declaration near the top of the file. Also,
2562there is a new function, `file-encoding', that scans a port for a coding
2563declaration. See the section of the manual entitled, "Character Encoding
2564of Source Files".
2565
2566The pre-1.9.3 reader handled 8-bit clean but otherwise unspecified source
51cb0cca
AW
2567code. This use is now discouraged. Binary input and output is
2568currently supported by opening ports in the ISO-8859-1 locale.
99e31c32 2569
487bacf4
AW
2570** Source files default to UTF-8.
2571
2572If source files do not specify their encoding via a `coding:' block,
2573the default encoding is UTF-8, instead of being taken from the current
2574locale.
2575
2576** Interactive Guile installs the current locale.
2577
2578Instead of leaving the user in the "C" locale, running the Guile REPL
2579installs the current locale. [FIXME xref?]
2580
99e31c32
AW
2581** Support for locale transcoding when reading from and writing to ports
2582
2583Ports now have an associated character encoding, and port read and write
2584operations do conversion to and from locales automatically. Ports also
2585have an associated strategy for how to deal with locale conversion
2586failures.
2587
2588See the documentation in the manual for the four new support functions,
2589`set-port-encoding!', `port-encoding', `set-port-conversion-strategy!',
2590and `port-conversion-strategy'.
2591
2592** String and SRFI-13 functions can operate on Unicode strings
2593
2594** Unicode support for SRFI-14 character sets
2595
2596The default character sets are no longer locale dependent and contain
2597characters from the whole Unicode range. There is a new predefined
2598character set, `char-set:designated', which contains all assigned
2599Unicode characters. There is a new debugging function, `%char-set-dump'.
2600
2601** Character functions operate on Unicode characters
2602
2603`char-upcase' and `char-downcase' use default Unicode casing rules.
2604Character comparisons such as `char<?' and `char-ci<?' now sort based on
2605Unicode code points.
108e18b1
AW
2606
2607** Global variables `scm_charnames' and `scm_charnums' are removed
2608
2609These variables contained the names of control characters and were
2610used when writing characters. While these were global, they were
2611never intended to be public API. They have been replaced with private
2612functions.
2613
2614** EBCDIC support is removed
2615
2616There was an EBCDIC compile flag that altered some of the character
2617processing. It appeared that full EBCDIC support was never completed
2618and was unmaintained.
2619
6bf927ab 2620** Compile-time warnings
b0217d17
AW
2621
2622Guile can warn about potentially unbound free variables. Pass the
2623-Wunbound-variable on the `guile-tools compile' command line, or add
2624`#:warnings '(unbound-variable)' to your `compile' or `compile-file'
51cb0cca
AW
2625invocation. Warnings are also enabled by default for expressions entered
2626at the REPL.
b0217d17 2627
6cf43047
AW
2628Guile can also warn when you pass the wrong number of arguments to a
2629procedure, with -Warity-mismatch, or `arity-mismatch' in the
2630`#:warnings' as above.
2631
6bf927ab 2632Other warnings include `-Wunused-variable' and `-Wunused-toplevel', to
ef6b0e8d
AW
2633warn about unused local or global (top-level) variables, and `-Wformat',
2634to check for various errors related to the `format' procedure.
6bf927ab 2635
93617170
LC
2636** A new `memoize-symbol' evaluator trap has been added.
2637
2638This trap can be used for efficiently implementing a Scheme code
2639coverage.
fa1804e9 2640
96b73e84 2641** Duplicate bindings among used modules are resolved lazily.
93617170 2642
96b73e84 2643This slightly improves program startup times.
fa1804e9 2644
96b73e84 2645** New thread cancellation and thread cleanup API
93617170 2646
96b73e84 2647See `cancel-thread', `set-thread-cleanup!', and `thread-cleanup'.
fa1804e9 2648
51cb0cca
AW
2649** New threads are in `(guile-user)' by default, not `(guile)'
2650
2651It used to be that a new thread entering Guile would do so in the
2652`(guile)' module, unless this was the first time Guile was initialized,
2653in which case it was `(guile-user)'. This has been fixed to have all
2654new threads unknown to Guile default to `(guile-user)'.
2655
b47fea09
AW
2656** New helpers: `print-exception', `set-exception-printer!'
2657
2658These functions implement an extensible exception printer. Guile
2659registers printers for all of the exceptions it throws. Users may add
2660their own printers. There is also `scm_print_exception', for use by C
2661programs. Pleasantly, this allows SRFI-35 and R6RS exceptions to be
2662printed appropriately.
2663
4a457691
AW
2664** GOOPS dispatch in scheme
2665
2666As an implementation detail, GOOPS dispatch is no longer implemented by
2667special evaluator bytecodes, but rather directly via a Scheme function
2668associated with an applicable struct. There is some VM support for the
2669underlying primitives, like `class-of'.
2670
2671This change will in the future allow users to customize generic function
2672dispatch without incurring a performance penalty, and allow us to
2673implement method combinations.
2674
4a457691
AW
2675** Applicable struct support
2676
2677One may now make structs from Scheme that may be applied as procedures.
2678To do so, make a struct whose vtable is `<applicable-struct-vtable>'.
2679That struct will be the vtable of your applicable structs; instances of
2680that new struct are assumed to have the procedure in their first slot.
2681`<applicable-struct-vtable>' is like Common Lisp's
2682`funcallable-standard-class'. Likewise there is
2683`<applicable-struct-with-setter-vtable>', which looks for the setter in
2684the second slot. This needs to be better documented.
2685
29b98fb2
AW
2686** GOOPS cleanups.
2687
2688GOOPS had a number of concepts that were relevant to the days of Tcl,
2689but not any more: operators and entities, mainly. These objects were
2690never documented, and it is unlikely that they were ever used. Operators
2691were a kind of generic specific to the Tcl support. Entities were
2692replaced by applicable structs, mentioned above.
2693
4a457691
AW
2694** New struct slot allocation: "hidden"
2695
2696A hidden slot is readable and writable, but will not be initialized by a
2697call to make-struct. For example in your layout you would say "ph"
2698instead of "pw". Hidden slots are useful for adding new slots to a
2699vtable without breaking existing invocations to make-struct.
2700
2701** eqv? not a generic
2702
2703One used to be able to extend `eqv?' as a primitive-generic, but no
2704more. Because `eqv?' is in the expansion of `case' (via `memv'), which
2705should be able to compile to static dispatch tables, it doesn't make
2706sense to allow extensions that would subvert this optimization.
2707
e614d375
AW
2708** `inet-ntop' and `inet-pton' are always available.
2709
2710Guile now use a portable implementation of `inet_pton'/`inet_ntop', so
2711there is no more need to use `inet-aton'/`inet-ntoa'. The latter
2712functions are deprecated.
2713
b47fea09
AW
2714** `getopt-long' parsing errors throw to `quit', not `misc-error'
2715
2716This change should inhibit backtraces on argument parsing errors.
2717`getopt-long' has been modified to print out the error that it throws
2718itself.
2719
51cb0cca
AW
2720** New primitive: `tmpfile'.
2721
2722See "File System" in the manual.
2723
2724** Random generator state may be serialized to a datum
2725
2726`random-state->datum' will serialize a random state to a datum, which
2727may be written out, read back in later, and revivified using
2728`datum->random-state'. See "Random" in the manual, for more details.
2729
2730** Fix random number generator on 64-bit platforms
2731
2732There was a nasty bug on 64-bit platforms in which asking for a random
2733integer with a range between 2**32 and 2**64 caused a segfault. After
2734many embarrassing iterations, this was fixed.
2735
5bb408cc
AW
2736** Fast bit operations.
2737
2738The bit-twiddling operations `ash', `logand', `logior', and `logxor' now
2739have dedicated bytecodes. Guile is not just for symbolic computation,
2740it's for number crunching too.
2741
4a457691
AW
2742** Faster SRFI-9 record access
2743
2744SRFI-9 records are now implemented directly on top of Guile's structs,
2745and their accessors are defined in such a way that normal call-sites
2746inline to special VM opcodes, while still allowing for the general case
2747(e.g. passing a record accessor to `apply').
2748
e614d375
AW
2749** R6RS block comment support
2750
2751Guile now supports R6RS nested block comments. The start of a comment is
2752marked with `#|', and the end with `|#'.
2753
2754** `guile-2' cond-expand feature
2755
2756To test if your code is running under Guile 2.0 (or its alpha releases),
2757test for the `guile-2' cond-expand feature. Like this:
2758
2759 (cond-expand (guile-2 (eval-when (compile)
2760 ;; This must be evaluated at compile time.
2761 (fluid-set! current-reader my-reader)))
2762 (guile
2763 ;; Earlier versions of Guile do not have a
2764 ;; separate compilation phase.
2765 (fluid-set! current-reader my-reader)))
2766
96b73e84 2767** New global variables: %load-compiled-path, %load-compiled-extensions
fa1804e9 2768
96b73e84 2769These are analogous to %load-path and %load-extensions.
fa1804e9 2770
18e90860
AW
2771** New fluid: `%file-port-name-canonicalization'
2772
2773This fluid parameterizes the file names that are associated with file
2774ports. If %file-port-name-canonicalization is 'absolute, then file names
2775are canonicalized to be absolute paths. If it is 'relative, then the
2776name is canonicalized, but any prefix corresponding to a member of
2777`%load-path' is stripped off. Otherwise the names are passed through
2778unchanged.
2779
2780In addition, the `compile-file' and `compile-and-load' procedures bind
2781%file-port-name-canonicalization to their `#:canonicalization' keyword
2782argument, which defaults to 'relative. In this way, one might compile
2783"../module/ice-9/boot-9.scm", but the path that gets residualized into
2784the .go is "ice-9/boot-9.scm".
2785
96b73e84 2786** New procedure, `make-promise'
fa1804e9 2787
96b73e84 2788`(make-promise (lambda () foo))' is equivalent to `(delay foo)'.
fa1804e9 2789
108e18b1
AW
2790** `defined?' may accept a module as its second argument
2791
2792Previously it only accepted internal structures from the evaluator.
2793
96b73e84 2794** New entry into %guile-build-info: `ccachedir'
fa1804e9 2795
96b73e84 2796** Fix bug in `module-bound?'.
fa1804e9 2797
96b73e84
AW
2798`module-bound?' was returning true if a module did have a local
2799variable, but one that was unbound, but another imported module bound
2800the variable. This was an error, and was fixed.
fa1804e9 2801
96b73e84 2802** `(ice-9 syncase)' has been deprecated.
fa1804e9 2803
96b73e84
AW
2804As syntax-case is available by default, importing `(ice-9 syncase)' has
2805no effect, and will trigger a deprecation warning.
fa1804e9 2806
b0217d17
AW
2807** New readline history functions
2808
2809The (ice-9 readline) module now provides add-history, read-history,
2810write-history and clear-history, which wrap the corresponding GNU
2811History library functions.
2812
86d88a22
AW
2813** Removed deprecated uniform array procedures:
2814 dimensions->uniform-array, list->uniform-array, array-prototype
2815
2816Instead, use make-typed-array, list->typed-array, or array-type,
2817respectively.
2818
51cb0cca
AW
2819** Deprecate the old `scm-style-repl'
2820
2821The following bindings from boot-9 are now found in `(ice-9
2822scm-style-repl)': `scm-style-repl', `error-catching-loop',
2823`error-catching-repl', `bad-throw', `scm-repl-silent'
2824`assert-repl-silence', `repl-print-unspecified',
2825`assert-repl-print-unspecified', `scm-repl-verbose',
2826`assert-repl-verbosity', `scm-repl-prompt', `set-repl-prompt!', `repl',
2827`default-pre-unwind-handler', `handle-system-error',
2828
2829The following bindings have been deprecated, with no replacement:
2830`pre-unwind-handler-dispatch'.
2831
2832The following bindings have been totally removed:
2833`before-signal-stack'.
2834
2835Deprecated forwarding shims have been installed so that users that
2836expect these bindings in the main namespace will still work, but receive
2837a deprecation warning.
2838
2839** `set-batch-mode?!' replaced by `ensure-batch-mode!'
2840
2841"Batch mode" is a flag used to tell a program that it is not running
2842interactively. One usually turns it on after a fork. It may not be
2843turned off. `ensure-batch-mode!' deprecates the old `set-batch-mode?!',
2844because it is a better interface, as it can only turn on batch mode, not
2845turn it off.
2846
2847** Deprecate `save-stack', `the-last-stack'
2848
2849It used to be that the way to debug programs in Guile was to capture the
2850stack at the time of error, drop back to the REPL, then debug that
2851stack. But this approach didn't compose, was tricky to get right in the
2852presence of threads, and was not very powerful.
2853
2854So `save-stack', `stack-saved?', and `the-last-stack' have been moved to
2855`(ice-9 save-stack)', with deprecated bindings left in the root module.
2856
2857** `top-repl' has its own module
2858
2859The `top-repl' binding, called with Guile is run interactively, is now
2860is its own module, `(ice-9 top-repl)'. A deprecated forwarding shim was
2861left in the default environment.
2862
2863** `display-error' takes a frame
2864
2865The `display-error' / `scm_display_error' helper now takes a frame as an
2866argument instead of a stack. Stacks are still supported in deprecated
2867builds. Additionally, `display-error' will again source location
2868information for the error.
2869
2870** No more `(ice-9 debug)'
2871
2872This module had some debugging helpers that are no longer applicable to
2873the current debugging model. Importing this module will produce a
2874deprecation warning. Users should contact bug-guile for support.
2875
ef6b0e8d
AW
2876** Remove obsolete debug-options
2877
2878Removed `breakpoints', `trace', `procnames', `indent', `frames',
2879`maxdepth', and `debug' debug-options.
2880
2881** `backtrace' debug option on by default
2882
2883Given that Guile 2.0 can always give you a backtrace, backtraces are now
2884on by default.
2885
2886** `turn-on-debugging' deprecated
2887
2888** Remove obsolete print-options
2889
2890The `source' and `closure-hook' print options are obsolete, and have
2891been removed.
2892
2893** Remove obsolete read-options
2894
2895The "elisp-strings" and "elisp-vectors" read options were unused and
2896obsolete, so they have been removed.
2897
2898** Remove eval-options and trap-options
2899
2900Eval-options and trap-options are obsolete with the new VM and
2901evaluator.
2902
2903** Remove (ice-9 debugger) and (ice-9 debugging)
2904
2905See "Traps" and "Interactive Debugging" in the manual, for information
2906on their replacements.
2907
2908** Remove the GDS Emacs integration
2909
2910See "Using Guile in Emacs" in the manual, for info on how we think you
2911should use Guile with Emacs.
2912
b0abbaa7
AW
2913** Deprecated: `lazy-catch'
2914
2915`lazy-catch' was a form that captured the stack at the point of a
2916`throw', but the dynamic state at the point of the `catch'. It was a bit
2917crazy. Please change to use `catch', possibly with a throw-handler, or
2918`with-throw-handler'.
2919
487bacf4
AW
2920** Deprecated: primitive properties
2921
2922The `primitive-make-property', `primitive-property-set!',
2923`primitive-property-ref', and `primitive-property-del!' procedures were
2924crufty and only used to implement object properties, which has a new,
2925threadsafe implementation. Use object properties or weak hash tables
2926instead.
2927
18e90860
AW
2928** Deprecated `@bind' syntax
2929
2930`@bind' was part of an older implementation of the Emacs Lisp language,
2931and is no longer used.
2932
51cb0cca
AW
2933** Miscellaneous other deprecations
2934
7cd99cba
AW
2935`cuserid' has been deprecated, as it only returns 8 bytes of a user's
2936login. Use `(passwd:name (getpwuid (geteuid)))' instead.
2937
487bacf4
AW
2938Additionally, the procedures `apply-to-args', `has-suffix?', `scheme-file-suffix'
2939`get-option', `for-next-option', `display-usage-report',
2940`transform-usage-lambda', `collect', and `set-batch-mode?!' have all
2941been deprecated.
2942
7cd99cba
AW
2943** Add support for unbound fluids
2944
2945See `make-unbound-fluid', `fluid-unset!', and `fluid-bound?' in the
2946manual.
2947
2948** Add `variable-unset!'
2949
2950See "Variables" in the manual, for more details.
51cb0cca 2951
87e00370
LC
2952** Last but not least, the `λ' macro can be used in lieu of `lambda'
2953
96b73e84 2954* Changes to the C interface
fa1804e9 2955
7b96f3dd
LC
2956** Guile now uses libgc, the Boehm-Demers-Weiser garbage collector
2957
2958The semantics of `scm_gc_malloc ()' have been changed, in a
2959backward-compatible way. A new allocation routine,
2960`scm_gc_malloc_pointerless ()', was added.
2961
2962Libgc is a conservative GC, which we hope will make interaction with C
2963code easier and less error-prone.
2964
487bacf4
AW
2965** New procedures: `scm_to_stringn', `scm_from_stringn'
2966** New procedures: scm_{to,from}_{utf8,latin1}_symbol{n,}
2967** New procedures: scm_{to,from}_{utf8,utf32,latin1}_string{n,}
2968
2969These new procedures convert to and from string representations in
2970particular encodings.
ef6b0e8d 2971
487bacf4
AW
2972Users should continue to use locale encoding for user input, user
2973output, or interacting with the C library.
ef6b0e8d 2974
487bacf4 2975Use the Latin-1 functions for ASCII, and for literals in source code.
ef6b0e8d 2976
487bacf4
AW
2977Use UTF-8 functions for interaction with modern libraries which deal in
2978UTF-8, and UTF-32 for interaction with utf32-using libraries.
2979
2980Otherwise, use scm_to_stringn or scm_from_stringn with a specific
2981encoding.
ef6b0e8d 2982
4a457691
AW
2983** New type definitions for `scm_t_intptr' and friends.
2984
2985`SCM_T_UINTPTR_MAX', `SCM_T_INTPTR_MIN', `SCM_T_INTPTR_MAX',
2986`SIZEOF_SCM_T_BITS', `scm_t_intptr' and `scm_t_uintptr' are now
2987available to C. Have fun!
2988
96b73e84 2989** The GH interface (deprecated in version 1.6, 2001) was removed.
fa1804e9 2990
96b73e84 2991** Internal `scm_i_' functions now have "hidden" linkage with GCC/ELF
fa1804e9 2992
96b73e84
AW
2993This makes these internal functions technically not callable from
2994application code.
fa1804e9 2995
96b73e84
AW
2996** Functions for handling `scm_option' now no longer require an argument
2997indicating length of the `scm_t_option' array.
fa1804e9 2998
4a457691
AW
2999** Procedures-with-setters are now implemented using applicable structs
3000
3001From a user's perspective this doesn't mean very much. But if, for some
3002odd reason, you used the SCM_PROCEDURE_WITH_SETTER_P, SCM_PROCEDURE, or
3003SCM_SETTER macros, know that they're deprecated now. Also, scm_tc7_pws
3004is gone.
3005
3006** Remove old evaluator closures
3007
3008There used to be ranges of typecodes allocated to interpreted data
3009structures, but that it no longer the case, given that interpreted
3010procedure are now just regular VM closures. As a result, there is a
3011newly free tc3, and a number of removed macros. See the ChangeLog for
3012details.
3013
cf8ec359 3014** Primitive procedures are now VM trampoline procedures
4a457691
AW
3015
3016It used to be that there were something like 12 different typecodes
3017allocated to primitive procedures, each with its own calling convention.
3018Now there is only one, the gsubr. This may affect user code if you were
3019defining a procedure using scm_c_make_subr rather scm_c_make_gsubr. The
3020solution is to switch to use scm_c_make_gsubr. This solution works well
b3da54d1 3021both with the old 1.8 and with the current 1.9 branch.
4a457691 3022
cf8ec359
AW
3023Guile's old evaluator used to have special cases for applying "gsubrs",
3024primitive procedures with specified numbers of required, optional, and
3025rest arguments. Now, however, Guile represents gsubrs as normal VM
3026procedures, with appropriate bytecode to parse out the correct number of
3027arguments, including optional and rest arguments, and then with a
3028special bytecode to apply the gsubr.
3029
3030This allows primitive procedures to appear on the VM stack, allowing
3031them to be accurately counted in profiles. Also they now have more
3032debugging information attached to them -- their number of arguments, for
3033example. In addition, the VM can completely inline the application
3034mechanics, allowing for faster primitive calls.
3035
3036However there are some changes on the C level. There is no more
3037`scm_tc7_gsubr' or `scm_tcs_subrs' typecode for primitive procedures, as
3038they are just VM procedures. Likewise the macros `SCM_GSUBR_TYPE',
3039`SCM_GSUBR_MAKTYPE', `SCM_GSUBR_REQ', `SCM_GSUBR_OPT', and
3040`SCM_GSUBR_REST' are gone, as are `SCM_SUBR_META_INFO', `SCM_SUBR_PROPS'
3041`SCM_SET_SUBR_GENERIC_LOC', and `SCM_SUBR_ARITY_TO_TYPE'.
3042
3043Perhaps more significantly, `scm_c_make_subr',
3044`scm_c_make_subr_with_generic', `scm_c_define_subr', and
3045`scm_c_define_subr_with_generic'. They all operated on subr typecodes,
3046and there are no more subr typecodes. Use the scm_c_make_gsubr family
3047instead.
3048
3049Normal users of gsubrs should not be affected, though, as the
3050scm_c_make_gsubr family still is the correct way to create primitive
3051procedures.
3052
3053** Remove deprecated array C interfaces
3054
3055Removed the deprecated array functions `scm_i_arrayp',
3056`scm_i_array_ndim', `scm_i_array_mem', `scm_i_array_v',
3057`scm_i_array_base', `scm_i_array_dims', and the deprecated macros
3058`SCM_ARRAYP', `SCM_ARRAY_NDIM', `SCM_ARRAY_CONTP', `SCM_ARRAY_MEM',
3059`SCM_ARRAY_V', `SCM_ARRAY_BASE', and `SCM_ARRAY_DIMS'.
3060
3061** Remove unused snarf macros
3062
3063`SCM_DEFINE1', `SCM_PRIMITIVE_GENERIC_1', `SCM_PROC1, and `SCM_GPROC1'
3064are no more. Use SCM_DEFINE or SCM_PRIMITIVE_GENERIC instead.
3065
cf8ec359
AW
3066** New functions: `scm_call_n', `scm_c_run_hookn'
3067
3068`scm_call_n' applies to apply a function to an array of arguments.
3069`scm_c_run_hookn' runs a hook with an array of arguments.
3070
4a457691
AW
3071** Some SMOB types changed to have static typecodes
3072
3073Fluids, dynamic states, and hash tables used to be SMOB objects, but now
3074they have statically allocated tc7 typecodes.
3075
3076** Preparations for changing SMOB representation
3077
3078If things go right, we'll be changing the SMOB representation soon. To
3079that end, we did a lot of cleanups to calls to e.g. SCM_CELL_WORD_2(x) when
3080the code meant SCM_SMOB_DATA_2(x); user code will need similar changes
3081in the future. Code accessing SMOBs using SCM_CELL macros was never
3082correct, but until now things still worked. Users should be aware of
3083such changes.
fa1804e9 3084
cf8ec359
AW
3085** Changed invocation mechanics of applicable SMOBs
3086
3087Guile's old evaluator used to have special cases for applying SMOB
3088objects. Now, with the VM, when Guile sees a SMOB, it looks up a VM
3089trampoline procedure for it, and use the normal mechanics to apply the
3090trampoline. This simplifies procedure application in the normal,
3091non-SMOB case.
3092
3093The upshot is that the mechanics used to apply a SMOB are different from
30941.8. Descriptors no longer have `apply_0', `apply_1', `apply_2', and
3095`apply_3' functions, and the macros SCM_SMOB_APPLY_0 and friends are now
3096deprecated. Just use the scm_call_0 family of procedures.
3097
ef6b0e8d
AW
3098** Removed support shlibs for SRFIs 1, 4, 13, 14, and 60
3099
3100Though these SRFI support libraries did expose API, they encoded a
3101strange version string into their library names. That version was never
3102programmatically exported, so there was no way people could use the
3103libs.
3104
3105This was a fortunate oversight, as it allows us to remove the need for
3106extra, needless shared libraries --- the C support code for SRFIs 4, 13,
3107and 14 was already in core --- and allow us to incrementally return the
3108SRFI implementation to Scheme.
3109
96b73e84 3110** New C function: scm_module_public_interface
a4f1c77d 3111
96b73e84 3112This procedure corresponds to Scheme's `module-public-interface'.
24d6fae8 3113
4a457691
AW
3114** Undeprecate `scm_the_root_module ()'
3115
3116It's useful to be able to get the root module from C without doing a
3117full module lookup.
3118
e614d375
AW
3119** Inline vector allocation
3120
3121Instead of having vectors point out into the heap for their data, their
3122data is now allocated inline to the vector object itself. The same is
3123true for bytevectors, by default, though there is an indirection
3124available which should allow for making a bytevector from an existing
3125memory region.
3126
4a457691
AW
3127** New struct constructors that don't involve making lists
3128
3129`scm_c_make_struct' and `scm_c_make_structv' are new varargs and array
3130constructors, respectively, for structs. You might find them useful.
3131
3132** Stack refactor
3133
3134In Guile 1.8, there were debugging frames on the C stack. Now there is
3135no more need to explicitly mark the stack in this way, because Guile has
3136a VM stack that it knows how to walk, which simplifies the C API
3137considerably. See the ChangeLog for details; the relevant interface is
3138in libguile/stacks.h. The Scheme API has not been changed significantly.
3139
e614d375
AW
3140** Removal of Guile's primitive object system.
3141
3142There were a number of pieces in `objects.[ch]' that tried to be a
3143minimal object system, but were never documented, and were quickly
3144obseleted by GOOPS' merge into Guile proper. So `scm_make_class_object',
3145`scm_make_subclass_object', `scm_metaclass_standard', and like symbols
3146from objects.h are no more. In the very unlikely case in which these
3147were useful to you, we urge you to contact guile-devel.
3148
3149** No future.
3150
3151Actually the future is still in the state that it was, is, and ever
3152shall be, Amen, except that `futures.c' and `futures.h' are no longer a
3153part of it. These files were experimental, never compiled, and would be
3154better implemented in Scheme anyway. In the future, that is.
3155
4a457691
AW
3156** Deprecate trampolines
3157
3158There used to be C functions `scm_trampoline_0', `scm_trampoline_1', and
3159so on. The point was to do some precomputation on the type of the
3160procedure, then return a specialized "call" procedure. However this
3161optimization wasn't actually an optimization, so it is now deprecated.
3162Just use `scm_call_0', etc instead.
3163
18e90860
AW
3164** Deprecated `scm_badargsp'
3165
3166This function is unused in Guile, but was part of its API.
3167
5bb408cc
AW
3168** Better support for Lisp `nil'.
3169
3170The bit representation of `nil' has been tweaked so that it is now very
3171efficient to check e.g. if a value is equal to Scheme's end-of-list or
3172Lisp's nil. Additionally there are a heap of new, specific predicates
b390b008 3173like scm_is_null_or_nil.
5bb408cc 3174
139fa149
AW
3175** Better integration of Lisp `nil'.
3176
3177`scm_is_boolean', `scm_is_false', and `scm_is_null' all return true now
3178for Lisp's `nil'. This shouldn't affect any Scheme code at this point,
3179but when we start to integrate more with Emacs, it is possible that we
3180break code that assumes that, for example, `(not x)' implies that `x' is
3181`eq?' to `#f'. This is not a common assumption. Refactoring affected
3182code to rely on properties instead of identities will improve code
3183correctness. See "Nil" in the manual, for more details.
3184
e614d375
AW
3185** Support for static allocation of strings, symbols, and subrs.
3186
3187Calls to snarfing CPP macros like SCM_DEFINE macro will now allocate
3188much of their associated data as static variables, reducing Guile's
3189memory footprint.
3190
93617170
LC
3191** `scm_stat' has an additional argument, `exception_on_error'
3192** `scm_primitive_load_path' has an additional argument `exception_on_not_found'
24d6fae8 3193
f1ce9199
LC
3194** `scm_set_port_seek' and `scm_set_port_truncate' use the `scm_t_off' type
3195
3196Previously they would use the `off_t' type, which is fragile since its
3197definition depends on the application's value for `_FILE_OFFSET_BITS'.
3198
ba4c43dc
LC
3199** The `long_long' C type, deprecated in 1.8, has been removed
3200
86d88a22
AW
3201** Removed deprecated uniform array procedures: scm_make_uve,
3202 scm_array_prototype, scm_list_to_uniform_array,
3203 scm_dimensions_to_uniform_array, scm_make_ra, scm_shap2ra, scm_cvref,
3204 scm_ra_set_contp, scm_aind, scm_raprin1
3205
3206These functions have been deprecated since early 2005.
3207
a4f1c77d 3208* Changes to the distribution
6caac03c 3209
53befeb7
NJ
3210** Guile's license is now LGPLv3+
3211
3212In other words the GNU Lesser General Public License, version 3 or
3213later (at the discretion of each person that chooses to redistribute
3214part of Guile).
3215
51cb0cca
AW
3216** AM_SILENT_RULES
3217
3218Guile's build is visually quieter, due to the use of Automake 1.11's
3219AM_SILENT_RULES. Build as `make V=1' to see all of the output.
3220
56664c08
AW
3221** GOOPS documentation folded into Guile reference manual
3222
3223GOOPS, Guile's object system, used to be documented in separate manuals.
3224This content is now included in Guile's manual directly.
3225
96b73e84 3226** `guile-config' will be deprecated in favor of `pkg-config'
8a9faebc 3227
96b73e84 3228`guile-config' has been rewritten to get its information from
93617170 3229`pkg-config', so this should be a transparent change. Note however that
96b73e84
AW
3230guile.m4 has yet to be modified to call pkg-config instead of
3231guile-config.
2e77f720 3232
54dd0ca5
LC
3233** Guile now provides `guile-2.0.pc' instead of `guile-1.8.pc'
3234
3235Programs that use `pkg-config' to find Guile or one of its Autoconf
3236macros should now require `guile-2.0' instead of `guile-1.8'.
3237
96b73e84 3238** New installation directory: $(pkglibdir)/1.9/ccache
62560650 3239
96b73e84
AW
3240If $(libdir) is /usr/lib, for example, Guile will install its .go files
3241to /usr/lib/guile/1.9/ccache. These files are architecture-specific.
89bc270d 3242
b0abbaa7
AW
3243** Parallel installability fixes
3244
3245Guile now installs its header files to a effective-version-specific
3246directory, and includes the effective version (e.g. 2.0) in the library
3247name (e.g. libguile-2.0.so).
3248
3249This change should be transparent to users, who should detect Guile via
3250the guile.m4 macro, or the guile-2.0.pc pkg-config file. It will allow
3251parallel installs for multiple versions of Guile development
3252environments.
3253
b0217d17
AW
3254** Dynamically loadable extensions may be placed in a Guile-specific path
3255
3256Before, Guile only searched the system library paths for extensions
3257(e.g. /usr/lib), which meant that the names of Guile extensions had to
3258be globally unique. Installing them to a Guile-specific extensions
66ad445d 3259directory is cleaner. Use `pkg-config --variable=extensiondir
b0217d17
AW
3260guile-2.0' to get the location of the extensions directory.
3261
51cb0cca
AW
3262** User Scheme code may be placed in a version-specific path
3263
3264Before, there was only one way to install user Scheme code to a
3265version-specific Guile directory: install to Guile's own path,
3266e.g. /usr/share/guile/2.0. The site directory,
3267e.g. /usr/share/guile/site, was unversioned. This has been changed to
3268add a version-specific site directory, e.g. /usr/share/guile/site/2.0,
3269searched before the global site directory.
3270
7b96f3dd
LC
3271** New dependency: libgc
3272
3273See http://www.hpl.hp.com/personal/Hans_Boehm/gc/, for more information.
3274
3275** New dependency: GNU libunistring
32e29e24 3276
108e18b1 3277See http://www.gnu.org/software/libunistring/, for more information. Our
7b96f3dd 3278Unicode support uses routines from libunistring.
32e29e24 3279
dbd9532e
LC
3280** New dependency: libffi
3281
3282See http://sourceware.org/libffi/, for more information.
3283
a4f1c77d 3284
dc686d7b 3285\f
9957b1c7
LC
3286Changes in 1.8.8 (since 1.8.7)
3287
3288* Bugs fixed
3289
3290** Fix possible buffer overruns when parsing numbers
c15d8e6a 3291** Avoid clash with system setjmp/longjmp on IA64
1ff4da65 3292** Fix `wrong type arg' exceptions with IPv6 addresses
9957b1c7
LC
3293
3294\f
dc686d7b
NJ
3295Changes in 1.8.7 (since 1.8.6)
3296
922d417b
JG
3297* New modules (see the manual for details)
3298
3299** `(srfi srfi-98)', an interface to access environment variables
3300
dc686d7b
NJ
3301* Bugs fixed
3302
f5851b89 3303** Fix compilation with `--disable-deprecated'
dc686d7b 3304** Fix %fast-slot-ref/set!, to avoid possible segmentation fault
cbee5075 3305** Fix MinGW build problem caused by HAVE_STRUCT_TIMESPEC confusion
ab878b0f 3306** Fix build problem when scm_t_timespec is different from struct timespec
95a040cd 3307** Fix build when compiled with -Wundef -Werror
1bcf7993 3308** More build fixes for `alphaev56-dec-osf5.1b' (Tru64)
5374ec9c 3309** Build fixes for `powerpc-ibm-aix5.3.0.0' (AIX 5.3)
5c006c3f
LC
3310** With GCC, always compile with `-mieee' on `alpha*' and `sh*'
3311** Better diagnose broken `(strftime "%z" ...)' in `time.test' (bug #24130)
fc76c08d 3312** Fix parsing of SRFI-88/postfix keywords longer than 128 characters
40f89215 3313** Fix reading of complex numbers where both parts are inexact decimals
d41668fa 3314
ad5f5ada
NJ
3315** Allow @ macro to work with (ice-9 syncase)
3316
3317Previously, use of the @ macro in a module whose code is being
3318transformed by (ice-9 syncase) would cause an "Invalid syntax" error.
3319Now it works as you would expect (giving the value of the specified
3320module binding).
3321
05588a1a
LC
3322** Have `scm_take_locale_symbol ()' return an interned symbol (bug #25865)
3323
d41668fa 3324\f
8c40b75d
LC
3325Changes in 1.8.6 (since 1.8.5)
3326
071bb6a8
LC
3327* New features (see the manual for details)
3328
3329** New convenience function `scm_c_symbol_length ()'
3330
091baf9e
NJ
3331** Single stepping through code from Emacs
3332
3333When you use GDS to evaluate Scheme code from Emacs, you can now use
3334`C-u' to indicate that you want to single step through that code. See
3335`Evaluating Scheme Code' in the manual for more details.
3336
9e4db0ef
LC
3337** New "guile(1)" man page!
3338
242ebeaf
LC
3339* Changes to the distribution
3340
3341** Automake's `AM_MAINTAINER_MODE' is no longer used
3342
3343Thus, the `--enable-maintainer-mode' configure option is no longer
3344available: Guile is now always configured in "maintainer mode".
3345
e0063477
LC
3346** `ChangeLog' files are no longer updated
3347
3348Instead, changes are detailed in the version control system's logs. See
3349the top-level `ChangeLog' files for details.
3350
3351
8c40b75d
LC
3352* Bugs fixed
3353
fd2b17b9 3354** `symbol->string' now returns a read-only string, as per R5RS
c6333102 3355** Fix incorrect handling of the FLAGS argument of `fold-matches'
589d9eb8 3356** `guile-config link' now prints `-L$libdir' before `-lguile'
4a1db3a9 3357** Fix memory corruption involving GOOPS' `class-redefinition'
191e7165 3358** Fix possible deadlock in `mutex-lock'
95c6523b 3359** Fix build issue on Tru64 and ia64-hp-hpux11.23 (`SCM_UNPACK' macro)
4696a666 3360** Fix build issue on mips, mipsel, powerpc and ia64 (stack direction)
450be18d 3361** Fix build issue on hppa2.0w-hp-hpux11.11 (`dirent64' and `readdir64_r')
88cefbc7 3362** Fix build issue on i386-unknown-freebsd7.0 ("break strict-aliasing rules")
76dae881 3363** Fix misleading output from `(help rationalize)'
5ea8e76e 3364** Fix build failure on Debian hppa architecture (bad stack growth detection)
1dd79792 3365** Fix `gcd' when called with a single, negative argument.
d8b6e191 3366** Fix `Stack overflow' errors seen when building on some platforms
ccf1ca4a
LC
3367** Fix bug when `scm_with_guile ()' was called several times from the
3368 same thread
76350432
LC
3369** The handler of SRFI-34 `with-exception-handler' is now invoked in the
3370 dynamic environment of the call to `raise'
cb823e63 3371** Fix potential deadlock in `make-struct'
691343ea 3372** Fix compilation problem with libltdl from Libtool 2.2.x
3ae3166b 3373** Fix sloppy bound checking in `string-{ref,set!}' with the empty string
6eadcdab 3374
8c40b75d 3375\f
5305df84
LC
3376Changes in 1.8.5 (since 1.8.4)
3377
4b824aae
LC
3378* Infrastructure changes
3379
3380** Guile repository switched from CVS to Git
3381
3382The new repository can be accessed using
3383"git-clone git://git.sv.gnu.org/guile.git", or can be browsed on-line at
3384http://git.sv.gnu.org/gitweb/?p=guile.git . See `README' for details.
3385
92826dd0
LC
3386** Add support for `pkg-config'
3387
3388See "Autoconf Support" in the manual for details.
3389
189681f5
LC
3390* New modules (see the manual for details)
3391
3392** `(srfi srfi-88)'
3393
ef4cbc08
LC
3394* New features (see the manual for details)
3395
3396** New `postfix' read option, for SRFI-88 keyword syntax
f5c2af4b 3397** Some I/O primitives have been inlined, which improves I/O performance
b20ef3a6 3398** New object-based traps infrastructure
ef4cbc08 3399
b20ef3a6
NJ
3400This is a GOOPS-based infrastructure that builds on Guile's low-level
3401evaluator trap calls and facilitates the development of debugging
3402features like single-stepping, breakpoints, tracing and profiling.
3403See the `Traps' node of the manual for details.
3404
3405** New support for working on Guile code from within Emacs
3406
3407Guile now incorporates the `GDS' library (previously distributed
3408separately) for working on Guile code from within Emacs. See the
3409`Using Guile In Emacs' node of the manual for details.
3410
5305df84
LC
3411* Bugs fixed
3412
e27d2495
LC
3413** `scm_add_slot ()' no longer segfaults (fixes bug #22369)
3414** Fixed `(ice-9 match)' for patterns like `((_ ...) ...)'
3415
3416Previously, expressions like `(match '((foo) (bar)) (((_ ...) ...) #t))'
3417would trigger an unbound variable error for `match:andmap'.
3418
62c5382b
LC
3419** `(oop goops describe)' now properly provides the `describe' feature
3420** Fixed `args-fold' from `(srfi srfi-37)'
3421
3422Previously, parsing short option names of argument-less options would
3423lead to a stack overflow.
3424
816e3edf 3425** `(srfi srfi-35)' is now visible through `cond-expand'
61b6542a 3426** Fixed type-checking for the second argument of `eval'
0fb11ae4 3427** Fixed type-checking for SRFI-1 `partition'
f1c212b1
LC
3428** Fixed `struct-ref' and `struct-set!' on "light structs"
3429** Honor struct field access rights in GOOPS
be10cba8 3430** Changed the storage strategy of source properties, which fixes a deadlock
979eade6 3431** Allow compilation of Guile-using programs in C99 mode with GCC 4.3 and later
bfb64eb4 3432** Fixed build issue for GNU/Linux on IA64
fa80e280 3433** Fixed build issues on NetBSD 1.6
a2c25234 3434** Fixed build issue on Solaris 2.10 x86_64
3f520967 3435** Fixed build issue with DEC/Compaq/HP's compiler
c2ad98ad
LC
3436** Fixed `scm_from_complex_double' build issue on FreeBSD
3437** Fixed `alloca' build issue on FreeBSD 6
a7286720 3438** Removed use of non-portable makefile constructs
535b3592 3439** Fixed shadowing of libc's <random.h> on Tru64, which broke compilation
eedcb08a 3440** Make sure all tests honor `$TMPDIR'
5305df84
LC
3441
3442\f
d41668fa
LC
3443Changes in 1.8.4 (since 1.8.3)
3444
3445* Bugs fixed
3446
3447** CR (ASCII 0x0d) is (again) recognized as a token delimiter by the reader
6e14de7d
NJ
3448** Fixed a segmentation fault which occurred when displaying the
3449backtrace of a stack with a promise object (made by `delay') in it.
7d1fc872 3450** Make `accept' leave guile mode while blocking
693758d5 3451** `scm_c_read ()' and `scm_c_write ()' now type-check their port argument
378cc645 3452** Fixed a build problem on AIX (use of func_data identifier)
15bd90ea
NJ
3453** Fixed a segmentation fault which occurred when hashx-ref or hashx-set! was
3454called with an associator proc that returns neither a pair nor #f.
3ac8359a 3455** Secondary threads now always return a valid module for (current-module).
d05bcb2e
NJ
3456** Avoid MacOS build problems caused by incorrect combination of "64"
3457system and library calls.
9a6fac59 3458** `guile-snarf' now honors `$TMPDIR'
25a640ca 3459** `guile-config compile' now reports CPPFLAGS used at compile-time
7f74cf9a 3460** Fixed build with Sun Studio (Solaris 9)
4a19ed04
NJ
3461** Fixed wrong-type-arg errors when creating zero length SRFI-4
3462uniform vectors on AIX.
86a597f8 3463** Fixed a deadlock that occurs upon GC with multiple threads.
4b26c03e 3464** Fixed compile problem with GCC on Solaris and AIX (use of _Complex_I)
d4a00708 3465** Fixed autotool-derived build problems on AIX 6.1.
9a6fac59 3466** Fixed NetBSD/alpha support
b226295a 3467** Fixed MacOS build problem caused by use of rl_get_keymap(_name)
7d1fc872
LC
3468
3469* New modules (see the manual for details)
3470
3471** `(srfi srfi-69)'
d41668fa 3472
b226295a
NJ
3473* Documentation fixes and improvements
3474
3475** Removed premature breakpoint documentation
3476
3477The features described are not available in the series of 1.8.x
3478releases, so the documentation was misleading and has been removed.
3479
3480** More about Guile's default *random-state* variable
3481
3482** GOOPS: more about how to use `next-method'
3483
d3cf93bc
NJ
3484* Changes to the distribution
3485
3486** Corrected a few files that referred incorrectly to the old GPL + special exception licence
3487
3488In fact Guile since 1.8.0 has been licensed with the GNU Lesser
3489General Public License, and the few incorrect files have now been
3490fixed to agree with the rest of the Guile distribution.
3491
5e42b8e7
NJ
3492** Removed unnecessary extra copies of COPYING*
3493
3494The distribution now contains a single COPYING.LESSER at its top level.
3495
a4f1c77d 3496\f
d4c38221
LC
3497Changes in 1.8.3 (since 1.8.2)
3498
3499* New modules (see the manual for details)
3500
f50ca8da 3501** `(srfi srfi-35)'
d4c38221
LC
3502** `(srfi srfi-37)'
3503
e08f3f7a
LC
3504* Bugs fixed
3505
dc061a74 3506** The `(ice-9 slib)' module now works as expected
e08f3f7a 3507** Expressions like "(set! 'x #t)" no longer yield a crash
d7c0c26d 3508** Warnings about duplicate bindings now go to stderr
1ac5fb45 3509** A memory leak in `make-socket-address' was fixed
f43f3620 3510** Alignment issues (e.g., on SPARC) in network routines were fixed
29776e85 3511** A threading issue that showed up at least on NetBSD was fixed
66302618 3512** Build problems on Solaris and IRIX fixed
e08f3f7a 3513
1fdd8ffa
LC
3514* Implementation improvements
3515
7ff6c169 3516** The reader is now faster, which reduces startup time
1fdd8ffa
LC
3517** Procedures returned by `record-accessor' and `record-modifier' are faster
3518
d4c38221 3519\f
45c0ff10
KR
3520Changes in 1.8.2 (since 1.8.1):
3521
3522* New procedures (see the manual for details)
3523
3524** set-program-arguments
b3aa4626 3525** make-vtable
45c0ff10 3526
9320e933
LC
3527* Incompatible changes
3528
3529** The body of a top-level `define' no longer sees the binding being created
3530
3531In a top-level `define', the binding being created is no longer visible
3532from the `define' body. This breaks code like
3533"(define foo (begin (set! foo 1) (+ foo 1)))", where `foo' is now
3534unbound in the body. However, such code was not R5RS-compliant anyway,
3535per Section 5.2.1.
3536
45c0ff10
KR
3537* Bugs fixed
3538
3539** Fractions were not `equal?' if stored in unreduced form.
3540(A subtle problem, since printing a value reduced it, making it work.)
3541** srfi-60 `copy-bit' failed on 64-bit systems
3542** "guile --use-srfi" option at the REPL can replace core functions
3543(Programs run with that option were ok, but in the interactive REPL
3544the core bindings got priority, preventing SRFI replacements or
3545extensions.)
3546** `regexp-exec' doesn't abort() on #\nul in the input or bad flags arg
df449722 3547** `kill' on mingw throws an error for a PID other than oneself
45c0ff10
KR
3548** Procedure names are attached to procedure-with-setters
3549** Array read syntax works with negative lower bound
3550** `array-in-bounds?' fix if an array has different lower bounds on each index
3551** `*' returns exact 0 for "(* inexact 0)"
3552This follows what it always did for "(* 0 inexact)".
c122500a 3553** SRFI-19: Value returned by `(current-time time-process)' was incorrect
0867f7ba 3554** SRFI-19: `date->julian-day' did not account for timezone offset
a1ef7406 3555** `ttyname' no longer crashes when passed a non-tty argument
27782696 3556** `inet-ntop' no longer crashes on SPARC when passed an `AF_INET' address
0867f7ba 3557** Small memory leaks have been fixed in `make-fluid' and `add-history'
b1f57ea4 3558** GOOPS: Fixed a bug in `method-more-specific?'
45c0ff10 3559** Build problems on Solaris fixed
df449722
LC
3560** Build problems on HP-UX IA64 fixed
3561** Build problems on MinGW fixed
45c0ff10
KR
3562
3563\f
a4f1c77d
KR
3564Changes in 1.8.1 (since 1.8.0):
3565
8ab3d8a0 3566* LFS functions are now used to access 64-bit files on 32-bit systems.
a4f1c77d 3567
8ab3d8a0 3568* New procedures (see the manual for details)
4f416616 3569
8ab3d8a0
KR
3570** primitive-_exit - [Scheme] the-root-module
3571** scm_primitive__exit - [C]
3572** make-completion-function - [Scheme] (ice-9 readline)
3573** scm_c_locale_stringn_to_number - [C]
3574** scm_srfi1_append_reverse [C]
3575** scm_srfi1_append_reverse_x [C]
3576** scm_log - [C]
3577** scm_log10 - [C]
3578** scm_exp - [C]
3579** scm_sqrt - [C]
3580
3581* Bugs fixed
3582
3583** Build problems have been fixed on MacOS, SunOS, and QNX.
af4f8612 3584
b3aa4626
KR
3585** `strftime' fix sign of %z timezone offset.
3586
534cd148 3587** A one-dimensional array can now be 'equal?' to a vector.
8ab3d8a0 3588
ad97642e 3589** Structures, records, and SRFI-9 records can now be compared with `equal?'.
af4f8612 3590
8ab3d8a0
KR
3591** SRFI-14 standard char sets are recomputed upon a successful `setlocale'.
3592
3593** `record-accessor' and `record-modifier' now have strict type checks.
3594
3595Record accessor and modifier procedures now throw an error if the
3596record type of the record they're given is not the type expected.
3597(Previously accessors returned #f and modifiers silently did nothing).
3598
3599** It is now OK to use both autoload and use-modules on a given module.
3600
3601** `apply' checks the number of arguments more carefully on "0 or 1" funcs.
3602
3603Previously there was no checking on primatives like make-vector that
3604accept "one or two" arguments. Now there is.
3605
3606** The srfi-1 assoc function now calls its equality predicate properly.
3607
3608Previously srfi-1 assoc would call the equality predicate with the key
3609last. According to the SRFI, the key should be first.
3610
3611** A bug in n-par-for-each and n-for-each-par-map has been fixed.
3612
3613** The array-set! procedure no longer segfaults when given a bit vector.
3614
3615** Bugs in make-shared-array have been fixed.
3616
3617** string<? and friends now follow char<? etc order on 8-bit chars.
3618
3619** The format procedure now handles inf and nan values for ~f correctly.
3620
3621** exact->inexact should no longer overflow when given certain large fractions.
3622
3623** srfi-9 accessor and modifier procedures now have strict record type checks.
a4f1c77d 3624
8ab3d8a0 3625This matches the srfi-9 specification.
a4f1c77d 3626
8ab3d8a0 3627** (ice-9 ftw) procedures won't ignore different files with same inode number.
a4f1c77d 3628
8ab3d8a0
KR
3629Previously the (ice-9 ftw) procedures would ignore any file that had
3630the same inode number as a file they had already seen, even if that
3631file was on a different device.
4f416616
KR
3632
3633\f
8ab3d8a0 3634Changes in 1.8.0 (changes since the 1.6.x series):
ee0c7345 3635
4e250ded
MV
3636* Changes to the distribution
3637
eff2965e
MV
3638** Guile is now licensed with the GNU Lesser General Public License.
3639
77e51fd6
MV
3640** The manual is now licensed with the GNU Free Documentation License.
3641
e2d0a649
RB
3642** Guile now requires GNU MP (http://swox.com/gmp).
3643
3644Guile now uses the GNU MP library for arbitrary precision arithmetic.
e2d0a649 3645
5ebbe4ef
RB
3646** Guile now has separate private and public configuration headers.
3647
b0d10ba6
MV
3648That is, things like HAVE_STRING_H no longer leak from Guile's
3649headers.
5ebbe4ef
RB
3650
3651** Guile now provides and uses an "effective" version number.
b2cbe8d8
RB
3652
3653Guile now provides scm_effective_version and effective-version
3654functions which return the "effective" version number. This is just
3655the normal full version string without the final micro-version number,
a4f1c77d 3656so the current effective-version is "1.8". The effective version
b2cbe8d8
RB
3657should remain unchanged during a stable series, and should be used for
3658items like the versioned share directory name
a4f1c77d 3659i.e. /usr/share/guile/1.8.
b2cbe8d8
RB
3660
3661Providing an unchanging version number during a stable release for
3662things like the versioned share directory can be particularly
3663important for Guile "add-on" packages, since it provides a directory
3664that they can install to that won't be changed out from under them
3665with each micro release during a stable series.
3666
8d54e73a 3667** Thread implementation has changed.
f0b4d944
MV
3668
3669When you configure "--with-threads=null", you will get the usual
3670threading API (call-with-new-thread, make-mutex, etc), but you can't
429d88d4
MV
3671actually create new threads. Also, "--with-threads=no" is now
3672equivalent to "--with-threads=null". This means that the thread API
3673is always present, although you might not be able to create new
3674threads.
f0b4d944 3675
8d54e73a
MV
3676When you configure "--with-threads=pthreads" or "--with-threads=yes",
3677you will get threads that are implemented with the portable POSIX
3678threads. These threads can run concurrently (unlike the previous
3679"coop" thread implementation), but need to cooperate for things like
a558cc63 3680the GC.
f0b4d944 3681
8d54e73a
MV
3682The default is "pthreads", unless your platform doesn't have pthreads,
3683in which case "null" threads are used.
2902a459 3684
a6d75e53
MV
3685See the manual for details, nodes "Initialization", "Multi-Threading",
3686"Blocking", and others.
a558cc63 3687
f74bdbd3
MV
3688** There is the new notion of 'discouraged' features.
3689
3690This is a milder form of deprecation.
3691
3692Things that are discouraged should not be used in new code, but it is
3693OK to leave them in old code for now. When a discouraged feature is
3694used, no warning message is printed like there is for 'deprecated'
3695features. Also, things that are merely discouraged are nevertheless
3696implemented efficiently, while deprecated features can be very slow.
3697
3698You can omit discouraged features from libguile by configuring it with
3699the '--disable-discouraged' option.
3700
3701** Deprecation warnings can be controlled at run-time.
3702
3703(debug-enable 'warn-deprecated) switches them on and (debug-disable
3704'warn-deprecated) switches them off.
3705
0f24e75b 3706** Support for SRFI 61, extended cond syntax for multiple values has
a81d0de1
MV
3707 been added.
3708
3709This SRFI is always available.
3710
f7fb2f39 3711** Support for require-extension, SRFI-55, has been added.
9a5fc8c2 3712
f7fb2f39
RB
3713The SRFI-55 special form `require-extension' has been added. It is
3714available at startup, and provides a portable way to load Scheme
3715extensions. SRFI-55 only requires support for one type of extension,
3716"srfi"; so a set of SRFIs may be loaded via (require-extension (srfi 1
371713 14)).
3718
3719** New module (srfi srfi-26) provides support for `cut' and `cute'.
3720
3721The (srfi srfi-26) module is an implementation of SRFI-26 which
3722provides the `cut' and `cute' syntax. These may be used to specialize
3723parameters without currying.
9a5fc8c2 3724
f5d54eb7
RB
3725** New module (srfi srfi-31)
3726
3727This is an implementation of SRFI-31 which provides a special form
3728`rec' for recursive evaluation.
3729
7b1574ed
MV
3730** The modules (srfi srfi-13), (srfi srfi-14) and (srfi srfi-4) have
3731 been merged with the core, making their functionality always
3732 available.
c5080b51 3733
ce7c0293
MV
3734The modules are still available, tho, and you could use them together
3735with a renaming import, for example.
c5080b51 3736
6191ccec 3737** Guile no longer includes its own version of libltdl.
4e250ded 3738
6191ccec 3739The official version is good enough now.
4e250ded 3740
ae7ded56
MV
3741** The --enable-htmldoc option has been removed from 'configure'.
3742
3743Support for translating the documentation into HTML is now always
3744provided. Use 'make html'.
3745
0f24e75b
MV
3746** New module (ice-9 serialize):
3747
3748(serialize FORM1 ...) and (parallelize FORM1 ...) are useful when you
3749don't trust the thread safety of most of your program, but where you
3750have some section(s) of code which you consider can run in parallel to
3751other sections. See ice-9/serialize.scm for more information.
3752
c34e5780
MV
3753** The configure option '--disable-arrays' has been removed.
3754
3755Support for arrays and uniform numeric arrays is now always included
3756in Guile.
3757
328dc9a3 3758* Changes to the stand-alone interpreter
f12ef3fd 3759
3ece39d6
MV
3760** New command line option `-L'.
3761
3762This option adds a directory to the front of the load path.
3763
f12ef3fd
MV
3764** New command line option `--no-debug'.
3765
3766Specifying `--no-debug' on the command line will keep the debugging
3767evaluator turned off, even for interactive sessions.
3768
3769** User-init file ~/.guile is now loaded with the debugging evaluator.
3770
3771Previously, the normal evaluator would have been used. Using the
3772debugging evaluator gives better error messages.
3773
aff7e166
MV
3774** The '-e' option now 'read's its argument.
3775
3776This is to allow the new '(@ MODULE-NAME VARIABLE-NAME)' construct to
3777be used with '-e'. For example, you can now write a script like
3778
3779 #! /bin/sh
3780 exec guile -e '(@ (demo) main)' -s "$0" "$@"
3781 !#
3782
3783 (define-module (demo)
3784 :export (main))
3785
3786 (define (main args)
3787 (format #t "Demo: ~a~%" args))
3788
3789
f12ef3fd
MV
3790* Changes to Scheme functions and syntax
3791
930888e8
MV
3792** Guardians have changed back to their original semantics
3793
3794Guardians now behave like described in the paper by Dybvig et al. In
3795particular, they no longer make guarantees about the order in which
3796they return objects, and they can no longer be greedy.
3797
3798They no longer drop cyclic data structures.
3799
3800The C function scm_make_guardian has been changed incompatibly and no
3801longer takes the 'greedy_p' argument.
3802
87bdbdbc
MV
3803** New function hashx-remove!
3804
3805This function completes the set of 'hashx' functions.
3806
a558cc63
MV
3807** The concept of dynamic roots has been factored into continuation
3808 barriers and dynamic states.
3809
3810Each thread has a current dynamic state that carries the values of the
3811fluids. You can create and copy dynamic states and use them as the
3812second argument for 'eval'. See "Fluids and Dynamic States" in the
3813manual.
3814
3815To restrict the influence that captured continuations can have on the
3816control flow, you can errect continuation barriers. See "Continuation
3817Barriers" in the manual.
3818
3819The function call-with-dynamic-root now essentially temporarily
3820installs a new dynamic state and errects a continuation barrier.
3821
a2b6a0e7
MV
3822** The default load path no longer includes "." at the end.
3823
3824Automatically loading modules from the current directory should not
3825happen by default. If you want to allow it in a more controlled
3826manner, set the environment variable GUILE_LOAD_PATH or the Scheme
3827variable %load-path.
3828
7b1574ed
MV
3829** The uniform vector and array support has been overhauled.
3830
3831It now complies with SRFI-4 and the weird prototype based uniform
3832array creation has been deprecated. See the manual for more details.
3833
d233b123
MV
3834Some non-compatible changes have been made:
3835 - characters can no longer be stored into byte arrays.
0f24e75b
MV
3836 - strings and bit vectors are no longer considered to be uniform numeric
3837 vectors.
3167d5e4
MV
3838 - array-rank throws an error for non-arrays instead of returning zero.
3839 - array-ref does no longer accept non-arrays when no indices are given.
d233b123
MV
3840
3841There is the new notion of 'generalized vectors' and corresponding
3842procedures like 'generalized-vector-ref'. Generalized vectors include
c34e5780 3843strings, bitvectors, ordinary vectors, and uniform numeric vectors.
d233b123 3844
a558cc63
MV
3845Arrays use generalized vectors as their storage, so that you still
3846have arrays of characters, bits, etc. However, uniform-array-read!
3847and uniform-array-write can no longer read/write strings and
3848bitvectors.
bb9f50ae 3849
ce7c0293
MV
3850** There is now support for copy-on-write substrings, mutation-sharing
3851 substrings and read-only strings.
3ff9283d 3852
ce7c0293
MV
3853Three new procedures are related to this: substring/shared,
3854substring/copy, and substring/read-only. See the manual for more
3855information.
3856
6a1d27ea
MV
3857** Backtraces will now highlight the value that caused the error.
3858
3859By default, these values are enclosed in "{...}", such as in this
3860example:
3861
3862 guile> (car 'a)
3863
3864 Backtrace:
3865 In current input:
3866 1: 0* [car {a}]
3867
3868 <unnamed port>:1:1: In procedure car in expression (car (quote a)):
3869 <unnamed port>:1:1: Wrong type (expecting pair): a
3870 ABORT: (wrong-type-arg)
3871
3872The prefix and suffix used for highlighting can be set via the two new
3873printer options 'highlight-prefix' and 'highlight-suffix'. For
3874example, putting this into ~/.guile will output the bad value in bold
3875on an ANSI terminal:
3876
3877 (print-set! highlight-prefix "\x1b[1m")
3878 (print-set! highlight-suffix "\x1b[22m")
3879
3880
8dbafacd
MV
3881** 'gettext' support for internationalization has been added.
3882
3883See the manual for details.
3884
aff7e166
MV
3885** New syntax '@' and '@@':
3886
3887You can now directly refer to variables exported from a module by
3888writing
3889
3890 (@ MODULE-NAME VARIABLE-NAME)
3891
3892For example (@ (ice-9 pretty-print) pretty-print) will directly access
3893the pretty-print variable exported from the (ice-9 pretty-print)
3894module. You don't need to 'use' that module first. You can also use
b0d10ba6 3895'@' as a target of 'set!', as in (set! (@ mod var) val).
aff7e166
MV
3896
3897The related syntax (@@ MODULE-NAME VARIABLE-NAME) works just like '@',
3898but it can also access variables that have not been exported. It is
3899intended only for kluges and temporary fixes and for debugging, not
3900for ordinary code.
3901
aef0bdb4
MV
3902** Keyword syntax has been made more disciplined.
3903
3904Previously, the name of a keyword was read as a 'token' but printed as
3905a symbol. Now, it is read as a general Scheme datum which must be a
3906symbol.
3907
3908Previously:
3909
3910 guile> #:12
3911 #:#{12}#
3912 guile> #:#{12}#
3913 #:#{\#{12}\#}#
3914 guile> #:(a b c)
3915 #:#{}#
3916 ERROR: In expression (a b c):
3917 Unbound variable: a
3918 guile> #: foo
3919 #:#{}#
3920 ERROR: Unbound variable: foo
3921
3922Now:
3923
3924 guile> #:12
3925 ERROR: Wrong type (expecting symbol): 12
3926 guile> #:#{12}#
3927 #:#{12}#
3928 guile> #:(a b c)
3929 ERROR: Wrong type (expecting symbol): (a b c)
3930 guile> #: foo
3931 #:foo
3932
227eafdb
MV
3933** The printing of symbols that might look like keywords can be
3934 controlled.
3935
3936The new printer option 'quote-keywordish-symbols' controls how symbols
3937are printed that have a colon as their first or last character. The
3938default now is to only quote a symbol with #{...}# when the read
3939option 'keywords' is not '#f'. Thus:
3940
3941 guile> (define foo (string->symbol ":foo"))
3942 guile> (read-set! keywords #f)
3943 guile> foo
3944 :foo
3945 guile> (read-set! keywords 'prefix)
3946 guile> foo
3947 #{:foo}#
3948 guile> (print-set! quote-keywordish-symbols #f)
3949 guile> foo
3950 :foo
3951
1363e3e7
KR
3952** 'while' now provides 'break' and 'continue'
3953
3954break and continue were previously bound in a while loop, but not
3955documented, and continue didn't quite work properly. The undocumented
3956parameter to break which gave a return value for the while has been
3957dropped.
3958
570b5b14
MV
3959** 'call-with-current-continuation' is now also available under the name
3960 'call/cc'.
3961
b0d10ba6 3962** The module system now checks for duplicate bindings.
7b07e5ef 3963
fe6ee052
MD
3964The module system now can check for name conflicts among imported
3965bindings.
f595ccfe 3966
b0d10ba6 3967The behavior can be controlled by specifying one or more 'duplicates'
fe6ee052
MD
3968handlers. For example, to make Guile return an error for every name
3969collision, write:
7b07e5ef
MD
3970
3971(define-module (foo)
3972 :use-module (bar)
3973 :use-module (baz)
fe6ee052 3974 :duplicates check)
f595ccfe 3975
fe6ee052
MD
3976The new default behavior of the module system when a name collision
3977has been detected is to
3978
3979 1. Give priority to bindings marked as a replacement.
6496a663 3980 2. Issue a warning (different warning if overriding core binding).
fe6ee052
MD
3981 3. Give priority to the last encountered binding (this corresponds to
3982 the old behavior).
3983
3984If you want the old behavior back without replacements or warnings you
3985can add the line:
f595ccfe 3986
70a9dc9c 3987 (default-duplicate-binding-handler 'last)
7b07e5ef 3988
fe6ee052 3989to your .guile init file.
7b07e5ef 3990
f595ccfe
MD
3991** New define-module option: :replace
3992
3993:replace works as :export, but, in addition, marks the binding as a
3994replacement.
3995
3996A typical example is `format' in (ice-9 format) which is a replacement
3997for the core binding `format'.
7b07e5ef 3998
70da0033
MD
3999** Adding prefixes to imported bindings in the module system
4000
4001There is now a new :use-module option :prefix. It can be used to add
4002a prefix to all imported bindings.
4003
4004 (define-module (foo)
4005 :use-module ((bar) :prefix bar:))
4006
4007will import all bindings exported from bar, but rename them by adding
4008the prefix `bar:'.
4009
b0d10ba6
MV
4010** Conflicting generic functions can be automatically merged.
4011
4012When two imported bindings conflict and they are both generic
4013functions, the two functions can now be merged automatically. This is
4014activated with the 'duplicates' handler 'merge-generics'.
4015
b2cbe8d8
RB
4016** New function: effective-version
4017
4018Returns the "effective" version number. This is just the normal full
4019version string without the final micro-version number. See "Changes
4020to the distribution" above.
4021
382053e9 4022** New threading functions: parallel, letpar, par-map, and friends
dbe30084 4023
382053e9
KR
4024These are convenient ways to run calculations in parallel in new
4025threads. See "Parallel forms" in the manual for details.
359aab24 4026
e2d820a1
MV
4027** New function 'try-mutex'.
4028
4029This function will attempt to lock a mutex but will return immediately
0f24e75b 4030instead of blocking and indicate failure.
e2d820a1
MV
4031
4032** Waiting on a condition variable can have a timeout.
4033
0f24e75b 4034The function 'wait-condition-variable' now takes a third, optional
e2d820a1
MV
4035argument that specifies the point in time where the waiting should be
4036aborted.
4037
4038** New function 'broadcast-condition-variable'.
4039
5e405a60
MV
4040** New functions 'all-threads' and 'current-thread'.
4041
4042** Signals and system asyncs work better with threads.
4043
4044The function 'sigaction' now takes a fourth, optional, argument that
4045specifies the thread that the handler should run in. When the
4046argument is omitted, the handler will run in the thread that called
4047'sigaction'.
4048
4049Likewise, 'system-async-mark' takes a second, optional, argument that
4050specifies the thread that the async should run in. When it is
4051omitted, the async will run in the thread that called
4052'system-async-mark'.
4053
4054C code can use the new functions scm_sigaction_for_thread and
4055scm_system_async_mark_for_thread to pass the new thread argument.
4056
a558cc63
MV
4057When a thread blocks on a mutex, a condition variable or is waiting
4058for IO to be possible, it will still execute system asyncs. This can
4059be used to interrupt such a thread by making it execute a 'throw', for
4060example.
4061
5e405a60
MV
4062** The function 'system-async' is deprecated.
4063
4064You can now pass any zero-argument procedure to 'system-async-mark'.
4065The function 'system-async' will just return its argument unchanged
4066now.
4067
acfa1f52
MV
4068** New functions 'call-with-blocked-asyncs' and
4069 'call-with-unblocked-asyncs'
4070
4071The expression (call-with-blocked-asyncs PROC) will call PROC and will
4072block execution of system asyncs for the current thread by one level
4073while PROC runs. Likewise, call-with-unblocked-asyncs will call a
4074procedure and will unblock the execution of system asyncs by one
4075level for the current thread.
4076
4077Only system asyncs are affected by these functions.
4078
4079** The functions 'mask-signals' and 'unmask-signals' are deprecated.
4080
4081Use 'call-with-blocked-asyncs' or 'call-with-unblocked-asyncs'
4082instead. Those functions are easier to use correctly and can be
4083nested.
4084
7b232758
MV
4085** New function 'unsetenv'.
4086
f30482f3
MV
4087** New macro 'define-syntax-public'.
4088
4089It works like 'define-syntax' and also exports the defined macro (but
4090only on top-level).
4091
1ee34062
MV
4092** There is support for Infinity and NaNs.
4093
4094Following PLT Scheme, Guile can now work with infinite numbers, and
4095'not-a-numbers'.
4096
4097There is new syntax for numbers: "+inf.0" (infinity), "-inf.0"
4098(negative infinity), "+nan.0" (not-a-number), and "-nan.0" (same as
4099"+nan.0"). These numbers are inexact and have no exact counterpart.
4100
4101Dividing by an inexact zero returns +inf.0 or -inf.0, depending on the
4102sign of the dividend. The infinities are integers, and they answer #t
4103for both 'even?' and 'odd?'. The +nan.0 value is not an integer and is
4104not '=' to itself, but '+nan.0' is 'eqv?' to itself.
4105
4106For example
4107
4108 (/ 1 0.0)
4109 => +inf.0
4110
4111 (/ 0 0.0)
4112 => +nan.0
4113
4114 (/ 0)
4115 ERROR: Numerical overflow
4116
7b232758
MV
4117Two new predicates 'inf?' and 'nan?' can be used to test for the
4118special values.
4119
ba1b077b
MV
4120** Inexact zero can have a sign.
4121
4122Guile can now distinguish between plus and minus inexact zero, if your
4123platform supports this, too. The two zeros are equal according to
4124'=', but not according to 'eqv?'. For example
4125
4126 (- 0.0)
4127 => -0.0
4128
4129 (= 0.0 (- 0.0))
4130 => #t
4131
4132 (eqv? 0.0 (- 0.0))
4133 => #f
4134
bdf26b60
MV
4135** Guile now has exact rationals.
4136
4137Guile can now represent fractions such as 1/3 exactly. Computing with
4138them is also done exactly, of course:
4139
4140 (* 1/3 3/2)
4141 => 1/2
4142
4143** 'floor', 'ceiling', 'round' and 'truncate' now return exact numbers
4144 for exact arguments.
4145
4146For example: (floor 2) now returns an exact 2 where in the past it
4147returned an inexact 2.0. Likewise, (floor 5/4) returns an exact 1.
4148
4149** inexact->exact no longer returns only integers.
4150
4151Without exact rationals, the closest exact number was always an
4152integer, but now inexact->exact returns the fraction that is exactly
4153equal to a floating point number. For example:
4154
4155 (inexact->exact 1.234)
4156 => 694680242521899/562949953421312
4157
e299cee2 4158When you want the old behavior, use 'round' explicitly:
bdf26b60
MV
4159
4160 (inexact->exact (round 1.234))
4161 => 1
4162
4163** New function 'rationalize'.
4164
4165This function finds a simple fraction that is close to a given real
4166number. For example (and compare with inexact->exact above):
4167
fb16d26e 4168 (rationalize (inexact->exact 1.234) 1/2000)
bdf26b60
MV
4169 => 58/47
4170
fb16d26e
MV
4171Note that, as required by R5RS, rationalize returns only then an exact
4172result when both its arguments are exact.
4173
bdf26b60
MV
4174** 'odd?' and 'even?' work also for inexact integers.
4175
4176Previously, (odd? 1.0) would signal an error since only exact integers
4177were recognized as integers. Now (odd? 1.0) returns #t, (odd? 2.0)
4178returns #f and (odd? 1.5) signals an error.
4179
b0d10ba6 4180** Guile now has uninterned symbols.
610922b2 4181
b0d10ba6 4182The new function 'make-symbol' will return an uninterned symbol. This
610922b2
MV
4183is a symbol that is unique and is guaranteed to remain unique.
4184However, uninterned symbols can not yet be read back in.
4185
4186Use the new function 'symbol-interned?' to check whether a symbol is
4187interned or not.
4188
0e6f7775
MV
4189** pretty-print has more options.
4190
4191The function pretty-print from the (ice-9 pretty-print) module can now
4192also be invoked with keyword arguments that control things like
71f271b2 4193maximum output width. See the manual for details.
0e6f7775 4194
8c84b81e 4195** Variables have no longer a special behavior for `equal?'.
ee0c7345
MV
4196
4197Previously, comparing two variables with `equal?' would recursivly
4198compare their values. This is no longer done. Variables are now only
4199`equal?' if they are `eq?'.
4200
4e21fa60
MV
4201** `(begin)' is now valid.
4202
4203You can now use an empty `begin' form. It will yield #<unspecified>
4204when evaluated and simply be ignored in a definition context.
4205
3063e30a
DH
4206** Deprecated: procedure->macro
4207
b0d10ba6
MV
4208Change your code to use 'define-macro' or r5rs macros. Also, be aware
4209that macro expansion will not be done during evaluation, but prior to
4210evaluation.
3063e30a 4211
0a50eeaa
NJ
4212** Soft ports now allow a `char-ready?' procedure
4213
4214The vector argument to `make-soft-port' can now have a length of
4215either 5 or 6. (Previously the length had to be 5.) The optional 6th
4216element is interpreted as an `input-waiting' thunk -- i.e. a thunk
4217that returns the number of characters that can be read immediately
4218without the soft port blocking.
4219
63dd3413
DH
4220** Deprecated: undefine
4221
4222There is no replacement for undefine.
4223
9abd541e
NJ
4224** The functions make-keyword-from-dash-symbol and keyword-dash-symbol
4225 have been discouraged.
aef0bdb4
MV
4226
4227They are relics from a time where a keyword like #:foo was used
4228directly as a Tcl option "-foo" and thus keywords were internally
4229stored as a symbol with a starting dash. We now store a symbol
4230without the dash.
4231
4232Use symbol->keyword and keyword->symbol instead.
4233
9abd541e
NJ
4234** The `cheap' debug option is now obsolete
4235
4236Evaluator trap calls are now unconditionally "cheap" - in other words,
4237they pass a debug object to the trap handler rather than a full
4238continuation. The trap handler code can capture a full continuation
4239by using `call-with-current-continuation' in the usual way, if it so
4240desires.
4241
4242The `cheap' option is retained for now so as not to break existing
4243code which gets or sets it, but setting it now has no effect. It will
4244be removed in the next major Guile release.
4245
4246** Evaluator trap calls now support `tweaking'
4247
4248`Tweaking' means that the trap handler code can modify the Scheme
4249expression that is about to be evaluated (in the case of an
4250enter-frame trap) or the value that is being returned (in the case of
4251an exit-frame trap). The trap handler code indicates that it wants to
4252do this by returning a pair whose car is the symbol 'instead and whose
4253cdr is the modified expression or return value.
36a9b236 4254
b00418df
DH
4255* Changes to the C interface
4256
87bdbdbc
MV
4257** The functions scm_hash_fn_remove_x and scm_hashx_remove_x no longer
4258 take a 'delete' function argument.
4259
4260This argument makes no sense since the delete function is used to
4261remove a pair from an alist, and this must not be configurable.
4262
4263This is an incompatible change.
4264
1cf1bb95
MV
4265** The GH interface is now subject to the deprecation mechanism
4266
4267The GH interface has been deprecated for quite some time but now it is
4268actually removed from Guile when it is configured with
4269--disable-deprecated.
4270
4271See the manual "Transitioning away from GH" for more information.
4272
f7f3964e
MV
4273** A new family of functions for converting between C values and
4274 Scheme values has been added.
4275
4276These functions follow a common naming scheme and are designed to be
4277easier to use, thread-safe and more future-proof than the older
4278alternatives.
4279
4280 - int scm_is_* (...)
4281
4282 These are predicates that return a C boolean: 1 or 0. Instead of
4283 SCM_NFALSEP, you can now use scm_is_true, for example.
4284
4285 - <type> scm_to_<type> (SCM val, ...)
4286
4287 These are functions that convert a Scheme value into an appropriate
4288 C value. For example, you can use scm_to_int to safely convert from
4289 a SCM to an int.
4290
a2b6a0e7 4291 - SCM scm_from_<type> (<type> val, ...)
f7f3964e
MV
4292
4293 These functions convert from a C type to a SCM value; for example,
4294 scm_from_int for ints.
4295
4296There is a huge number of these functions, for numbers, strings,
4297symbols, vectors, etc. They are documented in the reference manual in
4298the API section together with the types that they apply to.
4299
96d8c217
MV
4300** New functions for dealing with complex numbers in C have been added.
4301
4302The new functions are scm_c_make_rectangular, scm_c_make_polar,
4303scm_c_real_part, scm_c_imag_part, scm_c_magnitude and scm_c_angle.
4304They work like scm_make_rectangular etc but take or return doubles
4305directly.
4306
4307** The function scm_make_complex has been discouraged.
4308
4309Use scm_c_make_rectangular instead.
4310
f7f3964e
MV
4311** The INUM macros have been deprecated.
4312
4313A lot of code uses these macros to do general integer conversions,
b0d10ba6
MV
4314although the macros only work correctly with fixnums. Use the
4315following alternatives.
f7f3964e
MV
4316
4317 SCM_INUMP -> scm_is_integer or similar
4318 SCM_NINUMP -> !scm_is_integer or similar
4319 SCM_MAKINUM -> scm_from_int or similar
4320 SCM_INUM -> scm_to_int or similar
4321
b0d10ba6 4322 SCM_VALIDATE_INUM_* -> Do not use these; scm_to_int, etc. will
f7f3964e
MV
4323 do the validating for you.
4324
f9656a9f
MV
4325** The scm_num2<type> and scm_<type>2num functions and scm_make_real
4326 have been discouraged.
f7f3964e
MV
4327
4328Use the newer scm_to_<type> and scm_from_<type> functions instead for
4329new code. The functions have been discouraged since they don't fit
4330the naming scheme.
4331
4332** The 'boolean' macros SCM_FALSEP etc have been discouraged.
4333
4334They have strange names, especially SCM_NFALSEP, and SCM_BOOLP
4335evaluates its argument twice. Use scm_is_true, etc. instead for new
4336code.
4337
4338** The macro SCM_EQ_P has been discouraged.
4339
4340Use scm_is_eq for new code, which fits better into the naming
4341conventions.
d5b203a6 4342
d5ac9b2a
MV
4343** The macros SCM_CONSP, SCM_NCONSP, SCM_NULLP, and SCM_NNULLP have
4344 been discouraged.
4345
4346Use the function scm_is_pair or scm_is_null instead.
4347
409eb4e5
MV
4348** The functions scm_round and scm_truncate have been deprecated and
4349 are now available as scm_c_round and scm_c_truncate, respectively.
4350
4351These functions occupy the names that scm_round_number and
4352scm_truncate_number should have.
4353
3ff9283d
MV
4354** The functions scm_c_string2str, scm_c_substring2str, and
4355 scm_c_symbol2str have been deprecated.
c41acab3
MV
4356
4357Use scm_to_locale_stringbuf or similar instead, maybe together with
4358scm_substring.
4359
3ff9283d
MV
4360** New functions scm_c_make_string, scm_c_string_length,
4361 scm_c_string_ref, scm_c_string_set_x, scm_c_substring,
4362 scm_c_substring_shared, scm_c_substring_copy.
4363
4364These are like scm_make_string, scm_length, etc. but are slightly
4365easier to use from C.
4366
4367** The macros SCM_STRINGP, SCM_STRING_CHARS, SCM_STRING_LENGTH,
4368 SCM_SYMBOL_CHARS, and SCM_SYMBOL_LENGTH have been deprecated.
4369
4370They export too many assumptions about the implementation of strings
4371and symbols that are no longer true in the presence of
b0d10ba6
MV
4372mutation-sharing substrings and when Guile switches to some form of
4373Unicode.
3ff9283d
MV
4374
4375When working with strings, it is often best to use the normal string
4376functions provided by Guile, such as scm_c_string_ref,
b0d10ba6
MV
4377scm_c_string_set_x, scm_string_append, etc. Be sure to look in the
4378manual since many more such functions are now provided than
4379previously.
3ff9283d
MV
4380
4381When you want to convert a SCM string to a C string, use the
4382scm_to_locale_string function or similar instead. For symbols, use
4383scm_symbol_to_string and then work with that string. Because of the
4384new string representation, scm_symbol_to_string does not need to copy
4385and is thus quite efficient.
4386
aef0bdb4 4387** Some string, symbol and keyword functions have been discouraged.
3ff9283d 4388
b0d10ba6 4389They don't fit into the uniform naming scheme and are not explicit
3ff9283d
MV
4390about the character encoding.
4391
4392Replace according to the following table:
4393
4394 scm_allocate_string -> scm_c_make_string
4395 scm_take_str -> scm_take_locale_stringn
4396 scm_take0str -> scm_take_locale_string
4397 scm_mem2string -> scm_from_locale_stringn
4398 scm_str2string -> scm_from_locale_string
4399 scm_makfrom0str -> scm_from_locale_string
4400 scm_mem2symbol -> scm_from_locale_symboln
b0d10ba6 4401 scm_mem2uninterned_symbol -> scm_from_locale_stringn + scm_make_symbol
3ff9283d
MV
4402 scm_str2symbol -> scm_from_locale_symbol
4403
4404 SCM_SYMBOL_HASH -> scm_hashq
4405 SCM_SYMBOL_INTERNED_P -> scm_symbol_interned_p
4406
aef0bdb4
MV
4407 scm_c_make_keyword -> scm_from_locale_keyword
4408
4409** The functions scm_keyword_to_symbol and sym_symbol_to_keyword are
4410 now also available to C code.
4411
4412** SCM_KEYWORDP and SCM_KEYWORDSYM have been deprecated.
4413
4414Use scm_is_keyword and scm_keyword_to_symbol instead, but note that
4415the latter returns the true name of the keyword, not the 'dash name',
4416as SCM_KEYWORDSYM used to do.
4417
dc91d8de
MV
4418** A new way to access arrays in a thread-safe and efficient way has
4419 been added.
4420
4421See the manual, node "Accessing Arrays From C".
4422
3167d5e4
MV
4423** The old uniform vector and bitvector implementations have been
4424 unceremoniously removed.
d4ea47c8 4425
a558cc63 4426This implementation exposed the details of the tagging system of
d4ea47c8 4427Guile. Use the new C API explained in the manual in node "Uniform
c34e5780 4428Numeric Vectors" and "Bit Vectors", respectively.
d4ea47c8
MV
4429
4430The following macros are gone: SCM_UVECTOR_BASE, SCM_SET_UVECTOR_BASE,
4431SCM_UVECTOR_MAXLENGTH, SCM_UVECTOR_LENGTH, SCM_MAKE_UVECTOR_TAG,
3167d5e4
MV
4432SCM_SET_UVECTOR_LENGTH, SCM_BITVECTOR_P, SCM_BITVECTOR_BASE,
4433SCM_SET_BITVECTOR_BASE, SCM_BITVECTOR_MAX_LENGTH,
4434SCM_BITVECTOR_LENGTH, SCM_MAKE_BITVECTOR_TAG,
0b63c1ee
MV
4435SCM_SET_BITVECTOR_LENGTH, SCM_BITVEC_REF, SCM_BITVEC_SET,
4436SCM_BITVEC_CLR.
d4ea47c8 4437
c34e5780
MV
4438** The macros dealing with vectors have been deprecated.
4439
4440Use the new functions scm_is_vector, scm_vector_elements,
0b63c1ee
MV
4441scm_vector_writable_elements, etc, or scm_is_simple_vector,
4442SCM_SIMPLE_VECTOR_REF, SCM_SIMPLE_VECTOR_SET, etc instead. See the
4443manual for more details.
c34e5780
MV
4444
4445Deprecated are SCM_VECTORP, SCM_VELTS, SCM_VECTOR_MAX_LENGTH,
4446SCM_VECTOR_LENGTH, SCM_VECTOR_REF, SCM_VECTOR_SET, SCM_WRITABLE_VELTS.
4447
4448The following macros have been removed: SCM_VECTOR_BASE,
4449SCM_SET_VECTOR_BASE, SCM_MAKE_VECTOR_TAG, SCM_SET_VECTOR_LENGTH,
4450SCM_VELTS_AS_STACKITEMS, SCM_SETVELTS, SCM_GC_WRITABLE_VELTS.
4451
0c7a5cab 4452** Some C functions and macros related to arrays have been deprecated.
dc91d8de
MV
4453
4454Migrate according to the following table:
4455
e94d0be2 4456 scm_make_uve -> scm_make_typed_array, scm_make_u8vector etc.
dc91d8de
MV
4457 scm_make_ra -> scm_make_array
4458 scm_shap2ra -> scm_make_array
4459 scm_cvref -> scm_c_generalized_vector_ref
4460 scm_ra_set_contp -> do not use
4461 scm_aind -> scm_array_handle_pos
4462 scm_raprin1 -> scm_display or scm_write
4463
0c7a5cab
MV
4464 SCM_ARRAYP -> scm_is_array
4465 SCM_ARRAY_NDIM -> scm_c_array_rank
4466 SCM_ARRAY_DIMS -> scm_array_handle_dims
4467 SCM_ARRAY_CONTP -> do not use
4468 SCM_ARRAY_MEM -> do not use
4469 SCM_ARRAY_V -> scm_array_handle_elements or similar
4470 SCM_ARRAY_BASE -> do not use
4471
c1e7caf7
MV
4472** SCM_CELL_WORD_LOC has been deprecated.
4473
b0d10ba6 4474Use the new macro SCM_CELL_OBJECT_LOC instead, which returns a pointer
c1e7caf7
MV
4475to a SCM, as opposed to a pointer to a scm_t_bits.
4476
4477This was done to allow the correct use of pointers into the Scheme
4478heap. Previously, the heap words were of type scm_t_bits and local
4479variables and function arguments were of type SCM, making it
4480non-standards-conformant to have a pointer that can point to both.
4481
3ff9283d 4482** New macros SCM_SMOB_DATA_2, SCM_SMOB_DATA_3, etc.
27968825
MV
4483
4484These macros should be used instead of SCM_CELL_WORD_2/3 to access the
4485second and third words of double smobs. Likewise for
4486SCM_SET_SMOB_DATA_2 and SCM_SET_SMOB_DATA_3.
4487
4488Also, there is SCM_SMOB_FLAGS and SCM_SET_SMOB_FLAGS that should be
4489used to get and set the 16 exra bits in the zeroth word of a smob.
4490
4491And finally, there is SCM_SMOB_OBJECT and SCM_SMOB_SET_OBJECT for
4492accesing the first immediate word of a smob as a SCM value, and there
4493is SCM_SMOB_OBJECT_LOC for getting a pointer to the first immediate
b0d10ba6 4494smob word. Like wise for SCM_SMOB_OBJECT_2, etc.
27968825 4495
b0d10ba6 4496** New way to deal with non-local exits and re-entries.
9879d390
MV
4497
4498There is a new set of functions that essentially do what
fc6bb283
MV
4499scm_internal_dynamic_wind does, but in a way that is more convenient
4500for C code in some situations. Here is a quick example of how to
4501prevent a potential memory leak:
9879d390
MV
4502
4503 void
4504 foo ()
4505 {
4506 char *mem;
4507
661ae7ab 4508 scm_dynwind_begin (0);
9879d390
MV
4509
4510 mem = scm_malloc (100);
661ae7ab 4511 scm_dynwind_unwind_handler (free, mem, SCM_F_WIND_EXPLICITLY);
f1da8e4e
MV
4512
4513 /* MEM would leak if BAR throws an error.
661ae7ab 4514 SCM_DYNWIND_UNWIND_HANDLER frees it nevertheless.
c41acab3 4515 */
9879d390 4516
9879d390
MV
4517 bar ();
4518
661ae7ab 4519 scm_dynwind_end ();
9879d390 4520
e299cee2 4521 /* Because of SCM_F_WIND_EXPLICITLY, MEM will be freed by
661ae7ab 4522 SCM_DYNWIND_END as well.
9879d390
MV
4523 */
4524 }
4525
661ae7ab 4526For full documentation, see the node "Dynamic Wind" in the manual.
9879d390 4527
661ae7ab 4528** New function scm_dynwind_free
c41acab3 4529
661ae7ab
MV
4530This function calls 'free' on a given pointer when a dynwind context
4531is left. Thus the call to scm_dynwind_unwind_handler above could be
4532replaced with simply scm_dynwind_free (mem).
c41acab3 4533
a6d75e53
MV
4534** New functions scm_c_call_with_blocked_asyncs and
4535 scm_c_call_with_unblocked_asyncs
4536
4537Like scm_call_with_blocked_asyncs etc. but for C functions.
4538
661ae7ab 4539** New functions scm_dynwind_block_asyncs and scm_dynwind_unblock_asyncs
49c00ecc
MV
4540
4541In addition to scm_c_call_with_blocked_asyncs you can now also use
661ae7ab
MV
4542scm_dynwind_block_asyncs in a 'dynwind context' (see above). Likewise for
4543scm_c_call_with_unblocked_asyncs and scm_dynwind_unblock_asyncs.
49c00ecc 4544
a558cc63
MV
4545** The macros SCM_DEFER_INTS, SCM_ALLOW_INTS, SCM_REDEFER_INTS,
4546 SCM_REALLOW_INTS have been deprecated.
4547
4548They do no longer fulfill their original role of blocking signal
4549delivery. Depending on what you want to achieve, replace a pair of
661ae7ab
MV
4550SCM_DEFER_INTS and SCM_ALLOW_INTS with a dynwind context that locks a
4551mutex, blocks asyncs, or both. See node "Critical Sections" in the
4552manual.
a6d75e53
MV
4553
4554** The value 'scm_mask_ints' is no longer writable.
4555
4556Previously, you could set scm_mask_ints directly. This is no longer
4557possible. Use scm_c_call_with_blocked_asyncs and
4558scm_c_call_with_unblocked_asyncs instead.
a558cc63 4559
49c00ecc
MV
4560** New way to temporarily set the current input, output or error ports
4561
661ae7ab 4562C code can now use scm_dynwind_current_<foo>_port in a 'dynwind
0f24e75b 4563context' (see above). <foo> is one of "input", "output" or "error".
49c00ecc 4564
fc6bb283
MV
4565** New way to temporarily set fluids
4566
661ae7ab 4567C code can now use scm_dynwind_fluid in a 'dynwind context' (see
fc6bb283
MV
4568above) to temporarily set the value of a fluid.
4569
89fcf1b4
MV
4570** New types scm_t_intmax and scm_t_uintmax.
4571
4572On platforms that have them, these types are identical to intmax_t and
4573uintmax_t, respectively. On other platforms, they are identical to
4574the largest integer types that Guile knows about.
4575
b0d10ba6 4576** The functions scm_unmemocopy and scm_unmemoize have been removed.
9fcf3cbb 4577
b0d10ba6 4578You should not have used them.
9fcf3cbb 4579
5ebbe4ef
RB
4580** Many public #defines with generic names have been made private.
4581
4582#defines with generic names like HAVE_FOO or SIZEOF_FOO have been made
b0d10ba6 4583private or renamed with a more suitable public name.
f03314f9
DH
4584
4585** The macro SCM_TYP16S has been deprecated.
4586
b0d10ba6 4587This macro is not intended for public use.
f03314f9 4588
0d5e3480
DH
4589** The macro SCM_SLOPPY_INEXACTP has been deprecated.
4590
b0d10ba6 4591Use scm_is_true (scm_inexact_p (...)) instead.
0d5e3480
DH
4592
4593** The macro SCM_SLOPPY_REALP has been deprecated.
4594
b0d10ba6 4595Use scm_is_real instead.
0d5e3480
DH
4596
4597** The macro SCM_SLOPPY_COMPLEXP has been deprecated.
4598
b0d10ba6 4599Use scm_is_complex instead.
5ebbe4ef 4600
b0d10ba6 4601** Some preprocessor defines have been deprecated.
5ebbe4ef 4602
b0d10ba6
MV
4603These defines indicated whether a certain feature was present in Guile
4604or not. Going forward, assume that the features are always present.
5ebbe4ef 4605
b0d10ba6
MV
4606The macros are: USE_THREADS, GUILE_ISELECT, READER_EXTENSIONS,
4607DEBUG_EXTENSIONS, DYNAMIC_LINKING.
5ebbe4ef 4608
b0d10ba6
MV
4609The following macros have been removed completely: MEMOIZE_LOCALS,
4610SCM_RECKLESS, SCM_CAUTIOUS.
5ebbe4ef
RB
4611
4612** The preprocessor define STACK_DIRECTION has been deprecated.
4613
4614There should be no need to know about the stack direction for ordinary
b0d10ba6 4615programs.
5ebbe4ef 4616
b2cbe8d8
RB
4617** New function: scm_effective_version
4618
4619Returns the "effective" version number. This is just the normal full
4620version string without the final micro-version number. See "Changes
4621to the distribution" above.
4622
2902a459
MV
4623** The function scm_call_with_new_thread has a new prototype.
4624
4625Instead of taking a list with the thunk and handler, these two
4626arguments are now passed directly:
4627
4628 SCM scm_call_with_new_thread (SCM thunk, SCM handler);
4629
4630This is an incompatible change.
4631
ffd0ef3b
MV
4632** New snarfer macro SCM_DEFINE_PUBLIC.
4633
4634This is like SCM_DEFINE, but also calls scm_c_export for the defined
4635function in the init section.
4636
8734ce02
MV
4637** The snarfer macro SCM_SNARF_INIT is now officially supported.
4638
39e8f371
HWN
4639** Garbage collector rewrite.
4640
4641The garbage collector is cleaned up a lot, and now uses lazy
4642sweeping. This is reflected in the output of (gc-stats); since cells
4643are being freed when they are allocated, the cells-allocated field
4644stays roughly constant.
4645
4646For malloc related triggers, the behavior is changed. It uses the same
4647heuristic as the cell-triggered collections. It may be tuned with the
4648environment variables GUILE_MIN_YIELD_MALLOC. This is the percentage
4649for minimum yield of malloc related triggers. The default is 40.
4650GUILE_INIT_MALLOC_LIMIT sets the initial trigger for doing a GC. The
4651default is 200 kb.
4652
4653Debugging operations for the freelist have been deprecated, along with
4654the C variables that control garbage collection. The environment
4655variables GUILE_MAX_SEGMENT_SIZE, GUILE_INIT_SEGMENT_SIZE_2,
4656GUILE_INIT_SEGMENT_SIZE_1, and GUILE_MIN_YIELD_2 should be used.
4657
1367aa5e
HWN
4658For understanding the memory usage of a GUILE program, the routine
4659gc-live-object-stats returns an alist containing the number of live
4660objects for every type.
4661
4662
5ec1d2c8
DH
4663** The function scm_definedp has been renamed to scm_defined_p
4664
4665The name scm_definedp is deprecated.
4666
b0d10ba6 4667** The struct scm_cell type has been renamed to scm_t_cell
228a24ef
DH
4668
4669This is in accordance to Guile's naming scheme for types. Note that
4670the name scm_cell is now used for a function that allocates and
4671initializes a new cell (see below).
4672
0906625f
MV
4673** New functions for memory management
4674
4675A new set of functions for memory management has been added since the
4676old way (scm_must_malloc, scm_must_free, etc) was error prone and
4677indeed, Guile itself contained some long standing bugs that could
4678cause aborts in long running programs.
4679
4680The new functions are more symmetrical and do not need cooperation
4681from smob free routines, among other improvements.
4682
eab1b259
HWN
4683The new functions are scm_malloc, scm_realloc, scm_calloc, scm_strdup,
4684scm_strndup, scm_gc_malloc, scm_gc_calloc, scm_gc_realloc,
4685scm_gc_free, scm_gc_register_collectable_memory, and
0906625f
MV
4686scm_gc_unregister_collectable_memory. Refer to the manual for more
4687details and for upgrading instructions.
4688
4689The old functions for memory management have been deprecated. They
4690are: scm_must_malloc, scm_must_realloc, scm_must_free,
4691scm_must_strdup, scm_must_strndup, scm_done_malloc, scm_done_free.
4692
4aa104a4
MV
4693** Declarations of exported features are marked with SCM_API.
4694
4695Every declaration of a feature that belongs to the exported Guile API
4696has been marked by adding the macro "SCM_API" to the start of the
4697declaration. This macro can expand into different things, the most
4698common of which is just "extern" for Unix platforms. On Win32, it can
4699be used to control which symbols are exported from a DLL.
4700
8f99e3f3 4701If you `#define SCM_IMPORT' before including <libguile.h>, SCM_API
4aa104a4
MV
4702will expand into "__declspec (dllimport) extern", which is needed for
4703linking to the Guile DLL in Windows.
4704
b0d10ba6 4705There are also SCM_RL_IMPORT, SCM_SRFI1314_IMPORT, and
8f99e3f3 4706SCM_SRFI4_IMPORT, for the corresponding libraries.
4aa104a4 4707
a9930d22
MV
4708** SCM_NEWCELL and SCM_NEWCELL2 have been deprecated.
4709
b0d10ba6
MV
4710Use the new functions scm_cell and scm_double_cell instead. The old
4711macros had problems because with them allocation and initialization
4712was separated and the GC could sometimes observe half initialized
4713cells. Only careful coding by the user of SCM_NEWCELL and
4714SCM_NEWCELL2 could make this safe and efficient.
a9930d22 4715
5132eef0
DH
4716** CHECK_ENTRY, CHECK_APPLY and CHECK_EXIT have been deprecated.
4717
4718Use the variables scm_check_entry_p, scm_check_apply_p and scm_check_exit_p
4719instead.
4720
bc76d628
DH
4721** SRCBRKP has been deprecated.
4722
4723Use scm_c_source_property_breakpoint_p instead.
4724
3063e30a
DH
4725** Deprecated: scm_makmacro
4726
b0d10ba6
MV
4727Change your code to use either scm_makmmacro or to define macros in
4728Scheme, using 'define-macro'.
1e5f92ce 4729
1a61d41b
MV
4730** New function scm_c_port_for_each.
4731
4732This function is like scm_port_for_each but takes a pointer to a C
4733function as the callback instead of a SCM value.
4734
1f834c95
MV
4735** The names scm_internal_select, scm_thread_sleep, and
4736 scm_thread_usleep have been discouraged.
4737
4738Use scm_std_select, scm_std_sleep, scm_std_usleep instead.
4739
aa9200e5
MV
4740** The GC can no longer be blocked.
4741
4742The global flags scm_gc_heap_lock and scm_block_gc have been removed.
4743The GC can now run (partially) concurrently with other code and thus
4744blocking it is not well defined.
4745
b0d10ba6
MV
4746** Many definitions have been removed that were previously deprecated.
4747
4748scm_lisp_nil, scm_lisp_t, s_nil_ify, scm_m_nil_ify, s_t_ify,
4749scm_m_t_ify, s_0_cond, scm_m_0_cond, s_0_ify, scm_m_0_ify, s_1_ify,
4750scm_m_1_ify, scm_debug_newcell, scm_debug_newcell2,
4751scm_tc16_allocated, SCM_SET_SYMBOL_HASH, SCM_IM_NIL_IFY, SCM_IM_T_IFY,
4752SCM_IM_0_COND, SCM_IM_0_IFY, SCM_IM_1_IFY, SCM_GC_SET_ALLOCATED,
4753scm_debug_newcell, scm_debug_newcell2, SCM_HUP_SIGNAL, SCM_INT_SIGNAL,
4754SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL, SCM_ALRM_SIGNAL,
4755SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD, SCM_ORD_SIG,
4756SCM_NUM_SIGS, scm_top_level_lookup_closure_var,
4757*top-level-lookup-closure*, scm_system_transformer, scm_eval_3,
4758scm_eval2, root_module_lookup_closure, SCM_SLOPPY_STRINGP,
4759SCM_RWSTRINGP, scm_read_only_string_p, scm_make_shared_substring,
4760scm_tc7_substring, sym_huh, SCM_VARVCELL, SCM_UDVARIABLEP,
4761SCM_DEFVARIABLEP, scm_mkbig, scm_big2inum, scm_adjbig, scm_normbig,
4762scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl, SCM_FIXNUM_BIT,
4763SCM_SETCHARS, SCM_SLOPPY_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET,
4764SCM_LENGTH_MAX, SCM_SETLENGTH, SCM_ROSTRINGP, SCM_ROLENGTH,
4765SCM_ROCHARS, SCM_ROUCHARS, SCM_SUBSTRP, SCM_COERCE_SUBSTR,
4766scm_sym2vcell, scm_intern, scm_intern0, scm_sysintern, scm_sysintern0,
66c8ded2 4767scm_sysintern0_no_module_lookup, scm_init_symbols_deprecated,
2109da78 4768scm_vector_set_length_x, scm_contregs, scm_debug_info,
983e697d
MV
4769scm_debug_frame, SCM_DSIDEVAL, SCM_CONST_LONG, SCM_VCELL,
4770SCM_GLOBAL_VCELL, SCM_VCELL_INIT, SCM_GLOBAL_VCELL_INIT,
4771SCM_HUGE_LENGTH, SCM_VALIDATE_STRINGORSUBSTR, SCM_VALIDATE_ROSTRING,
4772SCM_VALIDATE_ROSTRING_COPY, SCM_VALIDATE_NULLORROSTRING_COPY,
4773SCM_VALIDATE_RWSTRING, DIGITS, scm_small_istr2int, scm_istr2int,
2109da78
MV
4774scm_istr2flo, scm_istring2number, scm_istr2int, scm_istr2flo,
4775scm_istring2number, scm_vtable_index_vcell, scm_si_vcell, SCM_ECONSP,
4776SCM_NECONSP, SCM_GLOC_VAR, SCM_GLOC_VAL, SCM_GLOC_SET_VAL,
c41acab3
MV
4777SCM_GLOC_VAL_LOC, scm_make_gloc, scm_gloc_p, scm_tc16_variable,
4778SCM_CHARS, SCM_LENGTH, SCM_SET_STRING_CHARS, SCM_SET_STRING_LENGTH.
b51bad08 4779
09172f9c
NJ
4780* Changes to bundled modules
4781
4782** (ice-9 debug)
4783
4784Using the (ice-9 debug) module no longer automatically switches Guile
4785to use the debugging evaluator. If you want to switch to the
4786debugging evaluator (which is needed for backtrace information if you
4787hit an error), please add an explicit "(debug-enable 'debug)" to your
4788code just after the code to use (ice-9 debug).
4789
328dc9a3 4790\f
c299f186
MD
4791Changes since Guile 1.4:
4792
4793* Changes to the distribution
4794
32d6f999
TTN
4795** A top-level TODO file is included.
4796
311b6a3c 4797** Guile now uses a versioning scheme similar to that of the Linux kernel.
c81ea65d
RB
4798
4799Guile now always uses three numbers to represent the version,
4800i.e. "1.6.5". The first number, 1, is the major version number, the
4801second number, 6, is the minor version number, and the third number,
48025, is the micro version number. Changes in major version number
4803indicate major changes in Guile.
4804
4805Minor version numbers that are even denote stable releases, and odd
4806minor version numbers denote development versions (which may be
4807unstable). The micro version number indicates a minor sub-revision of
4808a given MAJOR.MINOR release.
4809
4810In keeping with the new scheme, (minor-version) and scm_minor_version
4811no longer return everything but the major version number. They now
4812just return the minor version number. Two new functions
4813(micro-version) and scm_micro_version have been added to report the
4814micro version number.
4815
4816In addition, ./GUILE-VERSION now defines GUILE_MICRO_VERSION.
4817
5c790b44
RB
4818** New preprocessor definitions are available for checking versions.
4819
4820version.h now #defines SCM_MAJOR_VERSION, SCM_MINOR_VERSION, and
4821SCM_MICRO_VERSION to the appropriate integer values.
4822
311b6a3c
MV
4823** Guile now actively warns about deprecated features.
4824
4825The new configure option `--enable-deprecated=LEVEL' and the
4826environment variable GUILE_WARN_DEPRECATED control this mechanism.
4827See INSTALL and README for more information.
4828
0b073f0f
RB
4829** Guile is much more likely to work on 64-bit architectures.
4830
4831Guile now compiles and passes "make check" with only two UNRESOLVED GC
5e137c65
RB
4832cases on Alpha and ia64 based machines now. Thanks to John Goerzen
4833for the use of a test machine, and thanks to Stefan Jahn for ia64
4834patches.
0b073f0f 4835
e658215a
RB
4836** New functions: setitimer and getitimer.
4837
4838These implement a fairly direct interface to the libc functions of the
4839same name.
4840
8630fdfc
RB
4841** The #. reader extension is now disabled by default.
4842
4843For safety reasons, #. evaluation is disabled by default. To
4844re-enable it, set the fluid read-eval? to #t. For example:
4845
67b7dd9e 4846 (fluid-set! read-eval? #t)
8630fdfc
RB
4847
4848but make sure you realize the potential security risks involved. With
4849read-eval? enabled, reading a data file from an untrusted source can
4850be dangerous.
4851
f2a75d81 4852** New SRFI modules have been added:
4df36934 4853
dfdf5826
MG
4854SRFI-0 `cond-expand' is now supported in Guile, without requiring
4855using a module.
4856
e8bb0476
MG
4857(srfi srfi-1) is a library containing many useful pair- and list-processing
4858 procedures.
4859
7adc2c58 4860(srfi srfi-2) exports and-let*.
4df36934 4861
b74a7ec8
MG
4862(srfi srfi-4) implements homogeneous numeric vector datatypes.
4863
7adc2c58
RB
4864(srfi srfi-6) is a dummy module for now, since guile already provides
4865 all of the srfi-6 procedures by default: open-input-string,
4866 open-output-string, get-output-string.
4df36934 4867
7adc2c58 4868(srfi srfi-8) exports receive.
4df36934 4869
7adc2c58 4870(srfi srfi-9) exports define-record-type.
4df36934 4871
dfdf5826
MG
4872(srfi srfi-10) exports define-reader-ctor and implements the reader
4873 extension #,().
4874
7adc2c58 4875(srfi srfi-11) exports let-values and let*-values.
4df36934 4876
7adc2c58 4877(srfi srfi-13) implements the SRFI String Library.
53e29a1e 4878
7adc2c58 4879(srfi srfi-14) implements the SRFI Character-Set Library.
53e29a1e 4880
dfdf5826
MG
4881(srfi srfi-17) implements setter and getter-with-setter and redefines
4882 some accessor procedures as procedures with getters. (such as car,
4883 cdr, vector-ref etc.)
4884
4885(srfi srfi-19) implements the SRFI Time/Date Library.
2b60bc95 4886
466bb4b3
TTN
4887** New scripts / "executable modules"
4888
4889Subdirectory "scripts" contains Scheme modules that are packaged to
4890also be executable as scripts. At this time, these scripts are available:
4891
4892 display-commentary
4893 doc-snarf
4894 generate-autoload
4895 punify
58e5b910 4896 read-scheme-source
466bb4b3
TTN
4897 use2dot
4898
4899See README there for more info.
4900
54c17ccb
TTN
4901These scripts can be invoked from the shell with the new program
4902"guile-tools", which keeps track of installation directory for you.
4903For example:
4904
4905 $ guile-tools display-commentary srfi/*.scm
4906
4907guile-tools is copied to the standard $bindir on "make install".
4908
0109c4bf
MD
4909** New module (ice-9 stack-catch):
4910
4911stack-catch is like catch, but saves the current state of the stack in
3c1d1301
RB
4912the fluid the-last-stack. This fluid can be useful when using the
4913debugger and when re-throwing an error.
0109c4bf 4914
fbf0c8c7
MV
4915** The module (ice-9 and-let*) has been renamed to (ice-9 and-let-star)
4916
4917This has been done to prevent problems on lesser operating systems
4918that can't tolerate `*'s in file names. The exported macro continues
4919to be named `and-let*', of course.
4920
4f60cc33 4921On systems that support it, there is also a compatibility module named
fbf0c8c7 4922(ice-9 and-let*). It will go away in the next release.
6c0201ad 4923
9d774814 4924** New modules (oop goops) etc.:
14f1d9fe
MD
4925
4926 (oop goops)
4927 (oop goops describe)
4928 (oop goops save)
4929 (oop goops active-slot)
4930 (oop goops composite-slot)
4931
9d774814 4932The Guile Object Oriented Programming System (GOOPS) has been
311b6a3c
MV
4933integrated into Guile. For further information, consult the GOOPS
4934manual and tutorial in the `doc' directory.
14f1d9fe 4935
9d774814
GH
4936** New module (ice-9 rdelim).
4937
4938This exports the following procedures which were previously defined
1c8cbd62 4939in the default environment:
9d774814 4940
1c8cbd62
GH
4941read-line read-line! read-delimited read-delimited! %read-delimited!
4942%read-line write-line
9d774814 4943
1c8cbd62
GH
4944For backwards compatibility the definitions are still imported into the
4945default environment in this version of Guile. However you should add:
9d774814
GH
4946
4947(use-modules (ice-9 rdelim))
4948
1c8cbd62
GH
4949to any program which uses the definitions, since this may change in
4950future.
9d774814
GH
4951
4952Alternatively, if guile-scsh is installed, the (scsh rdelim) module
4953can be used for similar functionality.
4954
7e267da1
GH
4955** New module (ice-9 rw)
4956
4957This is a subset of the (scsh rw) module from guile-scsh. Currently
373f4948 4958it defines two procedures:
7e267da1 4959
311b6a3c 4960*** New function: read-string!/partial str [port_or_fdes [start [end]]]
7e267da1 4961
4bcdfe46
GH
4962 Read characters from a port or file descriptor into a string STR.
4963 A port must have an underlying file descriptor -- a so-called
4964 fport. This procedure is scsh-compatible and can efficiently read
311b6a3c 4965 large strings.
7e267da1 4966
4bcdfe46
GH
4967*** New function: write-string/partial str [port_or_fdes [start [end]]]
4968
4969 Write characters from a string STR to a port or file descriptor.
4970 A port must have an underlying file descriptor -- a so-called
4971 fport. This procedure is mostly compatible and can efficiently
4972 write large strings.
4973
e5005373
KN
4974** New module (ice-9 match)
4975
311b6a3c
MV
4976This module includes Andrew K. Wright's pattern matcher. See
4977ice-9/match.scm for brief description or
e5005373 4978
311b6a3c 4979 http://www.star-lab.com/wright/code.html
e5005373 4980
311b6a3c 4981for complete documentation.
e5005373 4982
4f60cc33
NJ
4983** New module (ice-9 buffered-input)
4984
4985This module provides procedures to construct an input port from an
4986underlying source of input that reads and returns its input in chunks.
4987The underlying input source is a Scheme procedure, specified by the
4988caller, which the port invokes whenever it needs more input.
4989
4990This is useful when building an input port whose back end is Readline
4991or a UI element such as the GtkEntry widget.
4992
4993** Documentation
4994
4995The reference and tutorial documentation that was previously
4996distributed separately, as `guile-doc', is now included in the core
4997Guile distribution. The documentation consists of the following
4998manuals.
4999
5000- The Guile Tutorial (guile-tut.texi) contains a tutorial introduction
5001 to using Guile.
5002
5003- The Guile Reference Manual (guile.texi) contains (or is intended to
5004 contain) reference documentation on all aspects of Guile.
5005
5006- The GOOPS Manual (goops.texi) contains both tutorial-style and
5007 reference documentation for using GOOPS, Guile's Object Oriented
5008 Programming System.
5009
c3e62877
NJ
5010- The Revised^5 Report on the Algorithmic Language Scheme
5011 (r5rs.texi).
4f60cc33
NJ
5012
5013See the README file in the `doc' directory for more details.
5014
094a67bb
MV
5015** There are a couple of examples in the examples/ directory now.
5016
9d774814
GH
5017* Changes to the stand-alone interpreter
5018
e7e58018
MG
5019** New command line option `--use-srfi'
5020
5021Using this option, SRFI modules can be loaded on startup and be
5022available right from the beginning. This makes programming portable
5023Scheme programs easier.
5024
5025The option `--use-srfi' expects a comma-separated list of numbers,
5026each representing a SRFI number to be loaded into the interpreter
5027before starting evaluating a script file or the REPL. Additionally,
5028the feature identifier for the loaded SRFIs is recognized by
5029`cond-expand' when using this option.
5030
5031Example:
5032$ guile --use-srfi=8,13
5033guile> (receive (x z) (values 1 2) (+ 1 2))
50343
58e5b910 5035guile> (string-pad "bla" 20)
e7e58018
MG
5036" bla"
5037
094a67bb
MV
5038** Guile now always starts up in the `(guile-user)' module.
5039
6e9382f1 5040Previously, scripts executed via the `-s' option would run in the
094a67bb
MV
5041`(guile)' module and the repl would run in the `(guile-user)' module.
5042Now every user action takes place in the `(guile-user)' module by
5043default.
e7e58018 5044
c299f186
MD
5045* Changes to Scheme functions and syntax
5046
720e1c30
MV
5047** Character classifiers work for non-ASCII characters.
5048
5049The predicates `char-alphabetic?', `char-numeric?',
5050`char-whitespace?', `char-lower?', `char-upper?' and `char-is-both?'
5051no longer check whether their arguments are ASCII characters.
5052Previously, a character would only be considered alphabetic when it
5053was also ASCII, for example.
5054
311b6a3c
MV
5055** Previously deprecated Scheme functions have been removed:
5056
5057 tag - no replacement.
5058 fseek - replaced by seek.
5059 list* - replaced by cons*.
5060
5061** It's now possible to create modules with controlled environments
5062
5063Example:
5064
5065(use-modules (ice-9 safe))
5066(define m (make-safe-module))
5067;;; m will now be a module containing only a safe subset of R5RS
5068(eval '(+ 1 2) m) --> 3
5069(eval 'load m) --> ERROR: Unbound variable: load
5070
5071** Evaluation of "()", the empty list, is now an error.
8c2c9967
MV
5072
5073Previously, the expression "()" evaluated to the empty list. This has
5074been changed to signal a "missing expression" error. The correct way
5075to write the empty list as a literal constant is to use quote: "'()".
5076
311b6a3c
MV
5077** New concept of `Guile Extensions'.
5078
5079A Guile Extension is just a ordinary shared library that can be linked
5080at run-time. We found it advantageous to give this simple concept a
5081dedicated name to distinguish the issues related to shared libraries
5082from the issues related to the module system.
5083
5084*** New function: load-extension
5085
5086Executing (load-extension lib init) is mostly equivalent to
5087
5088 (dynamic-call init (dynamic-link lib))
5089
5090except when scm_register_extension has been called previously.
5091Whenever appropriate, you should use `load-extension' instead of
5092dynamic-link and dynamic-call.
5093
5094*** New C function: scm_c_register_extension
5095
5096This function registers a initialization function for use by
5097`load-extension'. Use it when you don't want specific extensions to
5098be loaded as shared libraries (for example on platforms that don't
5099support dynamic linking).
5100
8c2c9967
MV
5101** Auto-loading of compiled-code modules is deprecated.
5102
5103Guile used to be able to automatically find and link a shared
c10ecc4c 5104library to satisfy requests for a module. For example, the module
8c2c9967
MV
5105`(foo bar)' could be implemented by placing a shared library named
5106"foo/libbar.so" (or with a different extension) in a directory on the
5107load path of Guile.
5108
311b6a3c
MV
5109This has been found to be too tricky, and is no longer supported. The
5110shared libraries are now called "extensions". You should now write a
5111small Scheme file that calls `load-extension' to load the shared
e299cee2 5112library and initialize it explicitly.
8c2c9967
MV
5113
5114The shared libraries themselves should be installed in the usual
5115places for shared libraries, with names like "libguile-foo-bar".
5116
5117For example, place this into a file "foo/bar.scm"
5118
5119 (define-module (foo bar))
5120
311b6a3c
MV
5121 (load-extension "libguile-foo-bar" "foobar_init")
5122
5123** Backward incompatible change: eval EXP ENVIRONMENT-SPECIFIER
5124
5125`eval' is now R5RS, that is it takes two arguments.
5126The second argument is an environment specifier, i.e. either
5127
5128 (scheme-report-environment 5)
5129 (null-environment 5)
5130 (interaction-environment)
5131
5132or
8c2c9967 5133
311b6a3c 5134 any module.
8c2c9967 5135
6f76852b
MV
5136** The module system has been made more disciplined.
5137
311b6a3c
MV
5138The function `eval' will save and restore the current module around
5139the evaluation of the specified expression. While this expression is
5140evaluated, `(current-module)' will now return the right module, which
5141is the module specified as the second argument to `eval'.
6f76852b 5142
311b6a3c 5143A consequence of this change is that `eval' is not particularly
6f76852b
MV
5144useful when you want allow the evaluated code to change what module is
5145designated as the current module and have this change persist from one
5146call to `eval' to the next. The read-eval-print-loop is an example
5147where `eval' is now inadequate. To compensate, there is a new
5148function `primitive-eval' that does not take a module specifier and
5149that does not save/restore the current module. You should use this
5150function together with `set-current-module', `current-module', etc
5151when you want to have more control over the state that is carried from
5152one eval to the next.
5153
5154Additionally, it has been made sure that forms that are evaluated at
5155the top level are always evaluated with respect to the current module.
5156Previously, subforms of top-level forms such as `begin', `case',
5157etc. did not respect changes to the current module although these
5158subforms are at the top-level as well.
5159
311b6a3c 5160To prevent strange behavior, the forms `define-module',
6f76852b
MV
5161`use-modules', `use-syntax', and `export' have been restricted to only
5162work on the top level. The forms `define-public' and
5163`defmacro-public' only export the new binding on the top level. They
5164behave just like `define' and `defmacro', respectively, when they are
5165used in a lexical environment.
5166
0a892a2c
MV
5167Also, `export' will no longer silently re-export bindings imported
5168from a used module. It will emit a `deprecation' warning and will
5169cease to perform any re-export in the next version. If you actually
5170want to re-export bindings, use the new `re-export' in place of
5171`export'. The new `re-export' will not make copies of variables when
5172rexporting them, as `export' did wrongly.
5173
047dc3ae
TTN
5174** Module system now allows selection and renaming of imported bindings
5175
5176Previously, when using `use-modules' or the `#:use-module' clause in
5177the `define-module' form, all the bindings (association of symbols to
5178values) for imported modules were added to the "current module" on an
5179as-is basis. This has been changed to allow finer control through two
5180new facilities: selection and renaming.
5181
5182You can now select which of the imported module's bindings are to be
5183visible in the current module by using the `:select' clause. This
5184clause also can be used to rename individual bindings. For example:
5185
5186 ;; import all bindings no questions asked
5187 (use-modules (ice-9 common-list))
5188
5189 ;; import four bindings, renaming two of them;
5190 ;; the current module sees: every some zonk-y zonk-n
5191 (use-modules ((ice-9 common-list)
5192 :select (every some
5193 (remove-if . zonk-y)
5194 (remove-if-not . zonk-n))))
5195
5196You can also programmatically rename all selected bindings using the
5197`:renamer' clause, which specifies a proc that takes a symbol and
5198returns another symbol. Because it is common practice to use a prefix,
5199we now provide the convenience procedure `symbol-prefix-proc'. For
5200example:
5201
5202 ;; import four bindings, renaming two of them specifically,
5203 ;; and all four w/ prefix "CL:";
5204 ;; the current module sees: CL:every CL:some CL:zonk-y CL:zonk-n
5205 (use-modules ((ice-9 common-list)
5206 :select (every some
5207 (remove-if . zonk-y)
5208 (remove-if-not . zonk-n))
5209 :renamer (symbol-prefix-proc 'CL:)))
5210
5211 ;; import four bindings, renaming two of them specifically,
5212 ;; and all four by upcasing.
5213 ;; the current module sees: EVERY SOME ZONK-Y ZONK-N
5214 (define (upcase-symbol sym)
5215 (string->symbol (string-upcase (symbol->string sym))))
5216
5217 (use-modules ((ice-9 common-list)
5218 :select (every some
5219 (remove-if . zonk-y)
5220 (remove-if-not . zonk-n))
5221 :renamer upcase-symbol))
5222
5223Note that programmatic renaming is done *after* individual renaming.
5224Also, the above examples show `use-modules', but the same facilities are
5225available for the `#:use-module' clause of `define-module'.
5226
5227See manual for more info.
5228
b7d69200 5229** The semantics of guardians have changed.
56495472 5230
b7d69200 5231The changes are for the most part compatible. An important criterion
6c0201ad 5232was to keep the typical usage of guardians as simple as before, but to
c0a5d888 5233make the semantics safer and (as a result) more useful.
56495472 5234
c0a5d888 5235*** All objects returned from guardians are now properly alive.
56495472 5236
c0a5d888
ML
5237It is now guaranteed that any object referenced by an object returned
5238from a guardian is alive. It's now impossible for a guardian to
5239return a "contained" object before its "containing" object.
56495472
ML
5240
5241One incompatible (but probably not very important) change resulting
5242from this is that it is no longer possible to guard objects that
5243indirectly reference themselves (i.e. are parts of cycles). If you do
5244so accidentally, you'll get a warning.
5245
c0a5d888
ML
5246*** There are now two types of guardians: greedy and sharing.
5247
5248If you call (make-guardian #t) or just (make-guardian), you'll get a
5249greedy guardian, and for (make-guardian #f) a sharing guardian.
5250
5251Greedy guardians are the default because they are more "defensive".
5252You can only greedily guard an object once. If you guard an object
5253more than once, once in a greedy guardian and the rest of times in
5254sharing guardians, then it is guaranteed that the object won't be
5255returned from sharing guardians as long as it is greedily guarded
5256and/or alive.
5257
5258Guardians returned by calls to `make-guardian' can now take one more
5259optional parameter, which says whether to throw an error in case an
5260attempt is made to greedily guard an object that is already greedily
5261guarded. The default is true, i.e. throw an error. If the parameter
5262is false, the guardian invocation returns #t if guarding was
5263successful and #f if it wasn't.
5264
5265Also, since greedy guarding is, in effect, a side-effecting operation
5266on objects, a new function is introduced: `destroy-guardian!'.
5267Invoking this function on a guardian renders it unoperative and, if
5268the guardian is greedy, clears the "greedily guarded" property of the
5269objects that were guarded by it, thus undoing the side effect.
5270
5271Note that all this hair is hardly very important, since guardian
5272objects are usually permanent.
5273
311b6a3c
MV
5274** Continuations created by call-with-current-continuation now accept
5275any number of arguments, as required by R5RS.
818febc0 5276
c10ecc4c 5277** New function `issue-deprecation-warning'
56426fdb 5278
311b6a3c 5279This function is used to display the deprecation messages that are
c10ecc4c 5280controlled by GUILE_WARN_DEPRECATION as explained in the README.
56426fdb
KN
5281
5282 (define (id x)
c10ecc4c
MV
5283 (issue-deprecation-warning "`id' is deprecated. Use `identity' instead.")
5284 (identity x))
56426fdb
KN
5285
5286 guile> (id 1)
5287 ;; `id' is deprecated. Use `identity' instead.
5288 1
5289 guile> (id 1)
5290 1
5291
c10ecc4c
MV
5292** New syntax `begin-deprecated'
5293
5294When deprecated features are included (as determined by the configure
5295option --enable-deprecated), `begin-deprecated' is identical to
5296`begin'. When deprecated features are excluded, it always evaluates
5297to `#f', ignoring the body forms.
5298
17f367e0
MV
5299** New function `make-object-property'
5300
5301This function returns a new `procedure with setter' P that can be used
5302to attach a property to objects. When calling P as
5303
5304 (set! (P obj) val)
5305
5306where `obj' is any kind of object, it attaches `val' to `obj' in such
5307a way that it can be retrieved by calling P as
5308
5309 (P obj)
5310
5311This function will replace procedure properties, symbol properties and
5312source properties eventually.
5313
76ef92f3
MV
5314** Module (ice-9 optargs) now uses keywords instead of `#&'.
5315
5316Instead of #&optional, #&key, etc you should now use #:optional,
5317#:key, etc. Since #:optional is a keyword, you can write it as just
5318:optional when (read-set! keywords 'prefix) is active.
5319
5320The old reader syntax `#&' is still supported, but deprecated. It
5321will be removed in the next release.
5322
c0997079
MD
5323** New define-module option: pure
5324
5325Tells the module system not to include any bindings from the root
5326module.
5327
5328Example:
5329
5330(define-module (totally-empty-module)
5331 :pure)
5332
5333** New define-module option: export NAME1 ...
5334
5335Export names NAME1 ...
5336
5337This option is required if you want to be able to export bindings from
5338a module which doesn't import one of `define-public' or `export'.
5339
5340Example:
5341
311b6a3c
MV
5342 (define-module (foo)
5343 :pure
5344 :use-module (ice-9 r5rs)
5345 :export (bar))
69b5f65a 5346
311b6a3c 5347 ;;; Note that we're pure R5RS below this point!
69b5f65a 5348
311b6a3c
MV
5349 (define (bar)
5350 ...)
daa6ba18 5351
1f3908c4
KN
5352** New function: object->string OBJ
5353
5354Return a Scheme string obtained by printing a given object.
5355
eb5c0a2a
GH
5356** New function: port? X
5357
5358Returns a boolean indicating whether X is a port. Equivalent to
5359`(or (input-port? X) (output-port? X))'.
5360
efa40607
DH
5361** New function: file-port?
5362
5363Determines whether a given object is a port that is related to a file.
5364
34b56ec4
GH
5365** New function: port-for-each proc
5366
311b6a3c
MV
5367Apply PROC to each port in the Guile port table in turn. The return
5368value is unspecified. More specifically, PROC is applied exactly once
5369to every port that exists in the system at the time PORT-FOR-EACH is
5370invoked. Changes to the port table while PORT-FOR-EACH is running
5371have no effect as far as PORT-FOR-EACH is concerned.
34b56ec4
GH
5372
5373** New function: dup2 oldfd newfd
5374
5375A simple wrapper for the `dup2' system call. Copies the file
5376descriptor OLDFD to descriptor number NEWFD, replacing the
5377previous meaning of NEWFD. Both OLDFD and NEWFD must be integers.
5378Unlike for dup->fdes or primitive-move->fdes, no attempt is made
264e9cbc 5379to move away ports which are using NEWFD. The return value is
34b56ec4
GH
5380unspecified.
5381
5382** New function: close-fdes fd
5383
5384A simple wrapper for the `close' system call. Close file
5385descriptor FD, which must be an integer. Unlike close (*note
5386close: Ports and File Descriptors.), the file descriptor will be
5387closed even if a port is using it. The return value is
5388unspecified.
5389
94e6d793
MG
5390** New function: crypt password salt
5391
5392Encrypts `password' using the standard unix password encryption
5393algorithm.
5394
5395** New function: chroot path
5396
5397Change the root directory of the running process to `path'.
5398
5399** New functions: getlogin, cuserid
5400
5401Return the login name or the user name of the current effective user
5402id, respectively.
5403
5404** New functions: getpriority which who, setpriority which who prio
5405
5406Get or set the priority of the running process.
5407
5408** New function: getpass prompt
5409
5410Read a password from the terminal, first displaying `prompt' and
5411disabling echoing.
5412
5413** New function: flock file operation
5414
5415Set/remove an advisory shared or exclusive lock on `file'.
5416
5417** New functions: sethostname name, gethostname
5418
5419Set or get the hostname of the machine the current process is running
5420on.
5421
6d163216 5422** New function: mkstemp! tmpl
4f60cc33 5423
6d163216
GH
5424mkstemp creates a new unique file in the file system and returns a
5425new buffered port open for reading and writing to the file. TMPL
5426is a string specifying where the file should be created: it must
5427end with `XXXXXX' and will be changed in place to return the name
5428of the temporary file.
5429
62e63ba9
MG
5430** New function: open-input-string string
5431
5432Return an input string port which delivers the characters from
4f60cc33 5433`string'. This procedure, together with `open-output-string' and
62e63ba9
MG
5434`get-output-string' implements SRFI-6.
5435
5436** New function: open-output-string
5437
5438Return an output string port which collects all data written to it.
5439The data can then be retrieved by `get-output-string'.
5440
5441** New function: get-output-string
5442
5443Return the contents of an output string port.
5444
56426fdb
KN
5445** New function: identity
5446
5447Return the argument.
5448
5bef627d
GH
5449** socket, connect, accept etc., now have support for IPv6. IPv6 addresses
5450 are represented in Scheme as integers with normal host byte ordering.
5451
5452** New function: inet-pton family address
5453
311b6a3c
MV
5454Convert a printable string network address into an integer. Note that
5455unlike the C version of this function, the result is an integer with
5456normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
5457e.g.,
5458
5459 (inet-pton AF_INET "127.0.0.1") => 2130706433
5460 (inet-pton AF_INET6 "::1") => 1
5bef627d
GH
5461
5462** New function: inet-ntop family address
5463
311b6a3c
MV
5464Convert an integer network address into a printable string. Note that
5465unlike the C version of this function, the input is an integer with
5466normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
5467e.g.,
5468
5469 (inet-ntop AF_INET 2130706433) => "127.0.0.1"
5470 (inet-ntop AF_INET6 (- (expt 2 128) 1)) =>
5bef627d
GH
5471 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
5472
56426fdb
KN
5473** Deprecated: id
5474
5475Use `identity' instead.
5476
5cd06d5e
DH
5477** Deprecated: -1+
5478
5479Use `1-' instead.
5480
5481** Deprecated: return-it
5482
311b6a3c 5483Do without it.
5cd06d5e
DH
5484
5485** Deprecated: string-character-length
5486
5487Use `string-length' instead.
5488
5489** Deprecated: flags
5490
5491Use `logior' instead.
5492
4f60cc33
NJ
5493** Deprecated: close-all-ports-except.
5494
5495This was intended for closing ports in a child process after a fork,
5496but it has the undesirable side effect of flushing buffers.
5497port-for-each is more flexible.
34b56ec4
GH
5498
5499** The (ice-9 popen) module now attempts to set up file descriptors in
5500the child process from the current Scheme ports, instead of using the
5501current values of file descriptors 0, 1, and 2 in the parent process.
5502
b52e071b
DH
5503** Removed function: builtin-weak-bindings
5504
5505There is no such concept as a weak binding any more.
5506
9d774814 5507** Removed constants: bignum-radix, scm-line-incrementors
0f979f3f 5508
7d435120
MD
5509** define-method: New syntax mandatory.
5510
5511The new method syntax is now mandatory:
5512
5513(define-method (NAME ARG-SPEC ...) BODY ...)
5514(define-method (NAME ARG-SPEC ... . REST-ARG) BODY ...)
5515
5516 ARG-SPEC ::= ARG-NAME | (ARG-NAME TYPE)
5517 REST-ARG ::= ARG-NAME
5518
5519If you have old code using the old syntax, import
5520(oop goops old-define-method) before (oop goops) as in:
5521
5522 (use-modules (oop goops old-define-method) (oop goops))
5523
f3f9dcbc
MV
5524** Deprecated function: builtin-variable
5525 Removed function: builtin-bindings
5526
5527There is no longer a distinction between builtin or other variables.
5528Use module system operations for all variables.
5529
311b6a3c
MV
5530** Lazy-catch handlers are no longer allowed to return.
5531
5532That is, a call to `throw', `error', etc is now guaranteed to not
5533return.
5534
a583bf1e 5535** Bugfixes for (ice-9 getopt-long)
8c84b81e 5536
a583bf1e
TTN
5537This module is now tested using test-suite/tests/getopt-long.test.
5538The following bugs have been fixed:
5539
5540*** Parsing for options that are specified to have `optional' args now checks
5541if the next element is an option instead of unconditionally taking it as the
8c84b81e
TTN
5542option arg.
5543
a583bf1e
TTN
5544*** An error is now thrown for `--opt=val' when the option description
5545does not specify `(value #t)' or `(value optional)'. This condition used to
5546be accepted w/o error, contrary to the documentation.
5547
5548*** The error message for unrecognized options is now more informative.
5549It used to be "not a record", an artifact of the implementation.
5550
5551*** The error message for `--opt' terminating the arg list (no value), when
5552`(value #t)' is specified, is now more informative. It used to be "not enough
5553args".
5554
5555*** "Clumped" single-char args now preserve trailing string, use it as arg.
5556The expansion used to be like so:
5557
5558 ("-abc5d" "--xyz") => ("-a" "-b" "-c" "--xyz")
5559
5560Note that the "5d" is dropped. Now it is like so:
5561
5562 ("-abc5d" "--xyz") => ("-a" "-b" "-c" "5d" "--xyz")
5563
5564This enables single-char options to have adjoining arguments as long as their
5565constituent characters are not potential single-char options.
8c84b81e 5566
998bfc70
TTN
5567** (ice-9 session) procedure `arity' now works with (ice-9 optargs) `lambda*'
5568
5569The `lambda*' and derivative forms in (ice-9 optargs) now set a procedure
5570property `arglist', which can be retrieved by `arity'. The result is that
5571`arity' can give more detailed information than before:
5572
5573Before:
5574
5575 guile> (use-modules (ice-9 optargs))
5576 guile> (define* (foo #:optional a b c) a)
5577 guile> (arity foo)
5578 0 or more arguments in `lambda*:G0'.
5579
5580After:
5581
5582 guile> (arity foo)
5583 3 optional arguments: `a', `b' and `c'.
5584 guile> (define* (bar a b #:key c d #:allow-other-keys) a)
5585 guile> (arity bar)
5586 2 required arguments: `a' and `b', 2 keyword arguments: `c'
5587 and `d', other keywords allowed.
5588 guile> (define* (baz a b #:optional c #:rest r) a)
5589 guile> (arity baz)
5590 2 required arguments: `a' and `b', 1 optional argument: `c',
5591 the rest in `r'.
5592
311b6a3c
MV
5593* Changes to the C interface
5594
c81c130e
MV
5595** Types have been renamed from scm_*_t to scm_t_*.
5596
5597This has been done for POSIX sake. It reserves identifiers ending
5598with "_t". What a concept.
5599
5600The old names are still available with status `deprecated'.
5601
5602** scm_t_bits (former scm_bits_t) is now a unsigned type.
5603
6e9382f1 5604** Deprecated features have been removed.
e6c9e497
MV
5605
5606*** Macros removed
5607
5608 SCM_INPORTP, SCM_OUTPORTP SCM_ICHRP, SCM_ICHR, SCM_MAKICHR
5609 SCM_SETJMPBUF SCM_NSTRINGP SCM_NRWSTRINGP SCM_NVECTORP SCM_DOUBLE_CELLP
5610
5611*** C Functions removed
5612
5613 scm_sysmissing scm_tag scm_tc16_flo scm_tc_flo
5614 scm_fseek - replaced by scm_seek.
5615 gc-thunk - replaced by after-gc-hook.
5616 gh_int2scmb - replaced by gh_bool2scm.
5617 scm_tc_dblr - replaced by scm_tc16_real.
5618 scm_tc_dblc - replaced by scm_tc16_complex.
5619 scm_list_star - replaced by scm_cons_star.
5620
36284627
DH
5621** Deprecated: scm_makfromstr
5622
5623Use scm_mem2string instead.
5624
311b6a3c
MV
5625** Deprecated: scm_make_shared_substring
5626
5627Explicit shared substrings will disappear from Guile.
5628
5629Instead, "normal" strings will be implemented using sharing
5630internally, combined with a copy-on-write strategy.
5631
5632** Deprecated: scm_read_only_string_p
5633
5634The concept of read-only strings will disappear in next release of
5635Guile.
5636
5637** Deprecated: scm_sloppy_memq, scm_sloppy_memv, scm_sloppy_member
c299f186 5638
311b6a3c 5639Instead, use scm_c_memq or scm_memq, scm_memv, scm_member.
c299f186 5640
dd0e04ed
KN
5641** New functions: scm_call_0, scm_call_1, scm_call_2, scm_call_3
5642
83dbedcc
KR
5643Call a procedure with the indicated number of arguments. See "Fly
5644Evaluation" in the manual.
dd0e04ed
KN
5645
5646** New functions: scm_apply_0, scm_apply_1, scm_apply_2, scm_apply_3
5647
83dbedcc
KR
5648Call a procedure with the indicated number of arguments and a list of
5649further arguments. See "Fly Evaluation" in the manual.
dd0e04ed 5650
e235f2a6
KN
5651** New functions: scm_list_1, scm_list_2, scm_list_3, scm_list_4, scm_list_5
5652
83dbedcc
KR
5653Create a list of the given number of elements. See "List
5654Constructors" in the manual.
e235f2a6
KN
5655
5656** Renamed function: scm_listify has been replaced by scm_list_n.
5657
5658** Deprecated macros: SCM_LIST0, SCM_LIST1, SCM_LIST2, SCM_LIST3, SCM_LIST4,
5659SCM_LIST5, SCM_LIST6, SCM_LIST7, SCM_LIST8, SCM_LIST9.
5660
5661Use functions scm_list_N instead.
5662
6fe692e9
MD
5663** New function: scm_c_read (SCM port, void *buffer, scm_sizet size)
5664
5665Used by an application to read arbitrary number of bytes from a port.
5666Same semantics as libc read, except that scm_c_read only returns less
5667than SIZE bytes if at end-of-file.
5668
5669Warning: Doesn't update port line and column counts!
5670
5671** New function: scm_c_write (SCM port, const void *ptr, scm_sizet size)
5672
5673Used by an application to write arbitrary number of bytes to an SCM
5674port. Similar semantics as libc write. However, unlike libc
5675write, scm_c_write writes the requested number of bytes and has no
5676return value.
5677
5678Warning: Doesn't update port line and column counts!
5679
17f367e0
MV
5680** New function: scm_init_guile ()
5681
5682In contrast to scm_boot_guile, scm_init_guile will return normally
5683after initializing Guile. It is not available on all systems, tho.
5684
23ade5e7
DH
5685** New functions: scm_str2symbol, scm_mem2symbol
5686
5687The function scm_str2symbol takes a const char* pointing to a zero-terminated
5688field of characters and creates a scheme symbol object from that C string.
5689The function scm_mem2symbol takes a const char* and a number of characters and
5690creates a symbol from the characters in that memory area.
5691
17f367e0
MV
5692** New functions: scm_primitive_make_property
5693 scm_primitive_property_ref
5694 scm_primitive_property_set_x
5695 scm_primitive_property_del_x
5696
5697These functions implement a new way to deal with object properties.
5698See libguile/properties.c for their documentation.
5699
9d47a1e6
ML
5700** New function: scm_done_free (long size)
5701
5702This function is the inverse of scm_done_malloc. Use it to report the
5703amount of smob memory you free. The previous method, which involved
5704calling scm_done_malloc with negative argument, was somewhat
5705unintuitive (and is still available, of course).
5706
79a3dafe
DH
5707** New function: scm_c_memq (SCM obj, SCM list)
5708
5709This function provides a fast C level alternative for scm_memq for the case
5710that the list parameter is known to be a proper list. The function is a
5711replacement for scm_sloppy_memq, but is stricter in its requirements on its
5712list input parameter, since for anything else but a proper list the function's
5713behaviour is undefined - it may even crash or loop endlessly. Further, for
5714the case that the object is not found in the list, scm_c_memq returns #f which
5715is similar to scm_memq, but different from scm_sloppy_memq's behaviour.
5716
6c0201ad 5717** New functions: scm_remember_upto_here_1, scm_remember_upto_here_2,
5d2b97cd
DH
5718scm_remember_upto_here
5719
5720These functions replace the function scm_remember.
5721
5722** Deprecated function: scm_remember
5723
5724Use one of the new functions scm_remember_upto_here_1,
5725scm_remember_upto_here_2 or scm_remember_upto_here instead.
5726
be54b15d
DH
5727** New function: scm_allocate_string
5728
5729This function replaces the function scm_makstr.
5730
5731** Deprecated function: scm_makstr
5732
5733Use the new function scm_allocate_string instead.
5734
32d0d4b1
DH
5735** New global variable scm_gc_running_p introduced.
5736
5737Use this variable to find out if garbage collection is being executed. Up to
5738now applications have used scm_gc_heap_lock to test if garbage collection was
5739running, which also works because of the fact that up to know only the garbage
5740collector has set this variable. But, this is an implementation detail that
5741may change. Further, scm_gc_heap_lock is not set throughout gc, thus the use
5742of this variable is (and has been) not fully safe anyway.
5743
5b9eb8ae
DH
5744** New macros: SCM_BITVECTOR_MAX_LENGTH, SCM_UVECTOR_MAX_LENGTH
5745
5746Use these instead of SCM_LENGTH_MAX.
5747
6c0201ad 5748** New macros: SCM_CONTINUATION_LENGTH, SCM_CCLO_LENGTH, SCM_STACK_LENGTH,
a6d9e5ab
DH
5749SCM_STRING_LENGTH, SCM_SYMBOL_LENGTH, SCM_UVECTOR_LENGTH,
5750SCM_BITVECTOR_LENGTH, SCM_VECTOR_LENGTH.
5751
5752Use these instead of SCM_LENGTH.
5753
6c0201ad 5754** New macros: SCM_SET_CONTINUATION_LENGTH, SCM_SET_STRING_LENGTH,
93778877
DH
5755SCM_SET_SYMBOL_LENGTH, SCM_SET_VECTOR_LENGTH, SCM_SET_UVECTOR_LENGTH,
5756SCM_SET_BITVECTOR_LENGTH
bc0eaf7b
DH
5757
5758Use these instead of SCM_SETLENGTH
5759
6c0201ad 5760** New macros: SCM_STRING_CHARS, SCM_SYMBOL_CHARS, SCM_CCLO_BASE,
a6d9e5ab
DH
5761SCM_VECTOR_BASE, SCM_UVECTOR_BASE, SCM_BITVECTOR_BASE, SCM_COMPLEX_MEM,
5762SCM_ARRAY_MEM
5763
e51fe79c
DH
5764Use these instead of SCM_CHARS, SCM_UCHARS, SCM_ROCHARS, SCM_ROUCHARS or
5765SCM_VELTS.
a6d9e5ab 5766
6c0201ad 5767** New macros: SCM_SET_BIGNUM_BASE, SCM_SET_STRING_CHARS,
6a0476fd
DH
5768SCM_SET_SYMBOL_CHARS, SCM_SET_UVECTOR_BASE, SCM_SET_BITVECTOR_BASE,
5769SCM_SET_VECTOR_BASE
5770
5771Use these instead of SCM_SETCHARS.
5772
a6d9e5ab
DH
5773** New macro: SCM_BITVECTOR_P
5774
5775** New macro: SCM_STRING_COERCE_0TERMINATION_X
5776
5777Use instead of SCM_COERCE_SUBSTR.
5778
30ea841d
DH
5779** New macros: SCM_DIR_OPEN_P, SCM_DIR_FLAG_OPEN
5780
5781For directory objects, use these instead of SCM_OPDIRP and SCM_OPN.
5782
6c0201ad
TTN
5783** Deprecated macros: SCM_OUTOFRANGE, SCM_NALLOC, SCM_HUP_SIGNAL,
5784SCM_INT_SIGNAL, SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL,
5785SCM_ALRM_SIGNAL, SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD,
d1ca2c64 5786SCM_ORD_SIG, SCM_NUM_SIGS, SCM_SYMBOL_SLOTS, SCM_SLOTS, SCM_SLOPPY_STRINGP,
a6d9e5ab
DH
5787SCM_VALIDATE_STRINGORSUBSTR, SCM_FREEP, SCM_NFREEP, SCM_CHARS, SCM_UCHARS,
5788SCM_VALIDATE_ROSTRING, SCM_VALIDATE_ROSTRING_COPY,
5789SCM_VALIDATE_NULLORROSTRING_COPY, SCM_ROLENGTH, SCM_LENGTH, SCM_HUGE_LENGTH,
b24b5e13 5790SCM_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET, SCM_COERCE_SUBSTR,
34f0f2b8 5791SCM_ROSTRINGP, SCM_RWSTRINGP, SCM_VALIDATE_RWSTRING, SCM_ROCHARS,
fd336365 5792SCM_ROUCHARS, SCM_SETLENGTH, SCM_SETCHARS, SCM_LENGTH_MAX, SCM_GC8MARKP,
30ea841d 5793SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR, SCM_SUBR_DOC,
b3fcac34
DH
5794SCM_OPDIRP, SCM_VALIDATE_OPDIR, SCM_WTA, RETURN_SCM_WTA, SCM_CONST_LONG,
5795SCM_WNA, SCM_FUNC_NAME, SCM_VALIDATE_NUMBER_COPY,
61045190 5796SCM_VALIDATE_NUMBER_DEF_COPY, SCM_SLOPPY_CONSP, SCM_SLOPPY_NCONSP,
e038c042 5797SCM_SETAND_CDR, SCM_SETOR_CDR, SCM_SETAND_CAR, SCM_SETOR_CAR
b63a956d
DH
5798
5799Use SCM_ASSERT_RANGE or SCM_VALIDATE_XXX_RANGE instead of SCM_OUTOFRANGE.
5800Use scm_memory_error instead of SCM_NALLOC.
c1aef037 5801Use SCM_STRINGP instead of SCM_SLOPPY_STRINGP.
d1ca2c64
DH
5802Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_STRINGORSUBSTR.
5803Use SCM_FREE_CELL_P instead of SCM_FREEP/SCM_NFREEP
a6d9e5ab 5804Use a type specific accessor macro instead of SCM_CHARS/SCM_UCHARS.
6c0201ad 5805Use a type specific accessor instead of SCM(_|_RO|_HUGE_)LENGTH.
a6d9e5ab
DH
5806Use SCM_VALIDATE_(SYMBOL|STRING) instead of SCM_VALIDATE_ROSTRING.
5807Use SCM_STRING_COERCE_0TERMINATION_X instead of SCM_COERCE_SUBSTR.
b24b5e13 5808Use SCM_STRINGP or SCM_SYMBOLP instead of SCM_ROSTRINGP.
f0942910
DH
5809Use SCM_STRINGP instead of SCM_RWSTRINGP.
5810Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_RWSTRING.
34f0f2b8
DH
5811Use SCM_STRING_CHARS instead of SCM_ROCHARS.
5812Use SCM_STRING_UCHARS instead of SCM_ROUCHARS.
93778877 5813Use a type specific setter macro instead of SCM_SETLENGTH.
6a0476fd 5814Use a type specific setter macro instead of SCM_SETCHARS.
5b9eb8ae 5815Use a type specific length macro instead of SCM_LENGTH_MAX.
fd336365
DH
5816Use SCM_GCMARKP instead of SCM_GC8MARKP.
5817Use SCM_SETGCMARK instead of SCM_SETGC8MARK.
5818Use SCM_CLRGCMARK instead of SCM_CLRGC8MARK.
5819Use SCM_TYP16 instead of SCM_GCTYP16.
5820Use SCM_CDR instead of SCM_GCCDR.
30ea841d 5821Use SCM_DIR_OPEN_P instead of SCM_OPDIRP.
276dd677
DH
5822Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of SCM_WTA.
5823Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of RETURN_SCM_WTA.
8dea8611 5824Use SCM_VCELL_INIT instead of SCM_CONST_LONG.
b3fcac34 5825Use SCM_WRONG_NUM_ARGS instead of SCM_WNA.
ced99e92
DH
5826Use SCM_CONSP instead of SCM_SLOPPY_CONSP.
5827Use !SCM_CONSP instead of SCM_SLOPPY_NCONSP.
b63a956d 5828
f7620510
DH
5829** Removed function: scm_struct_init
5830
93d40df2
DH
5831** Removed variable: scm_symhash_dim
5832
818febc0
GH
5833** Renamed function: scm_make_cont has been replaced by
5834scm_make_continuation, which has a different interface.
5835
cc4feeca
DH
5836** Deprecated function: scm_call_catching_errors
5837
5838Use scm_catch or scm_lazy_catch from throw.[ch] instead.
5839
28b06554
DH
5840** Deprecated function: scm_strhash
5841
5842Use scm_string_hash instead.
5843
1b9be268
DH
5844** Deprecated function: scm_vector_set_length_x
5845
5846Instead, create a fresh vector of the desired size and copy the contents.
5847
302f229e
MD
5848** scm_gensym has changed prototype
5849
5850scm_gensym now only takes one argument.
5851
1660782e
DH
5852** Deprecated type tags: scm_tc7_ssymbol, scm_tc7_msymbol, scm_tcs_symbols,
5853scm_tc7_lvector
28b06554
DH
5854
5855There is now only a single symbol type scm_tc7_symbol.
1660782e 5856The tag scm_tc7_lvector was not used anyway.
28b06554 5857
2f6fb7c5
KN
5858** Deprecated function: scm_make_smob_type_mfpe, scm_set_smob_mfpe.
5859
5860Use scm_make_smob_type and scm_set_smob_XXX instead.
5861
5862** New function scm_set_smob_apply.
5863
5864This can be used to set an apply function to a smob type.
5865
1f3908c4
KN
5866** Deprecated function: scm_strprint_obj
5867
5868Use scm_object_to_string instead.
5869
b3fcac34
DH
5870** Deprecated function: scm_wta
5871
5872Use scm_wrong_type_arg, or another appropriate error signalling function
5873instead.
5874
f3f9dcbc
MV
5875** Explicit support for obarrays has been deprecated.
5876
5877Use `scm_str2symbol' and the generic hashtable functions instead.
5878
5879** The concept of `vcells' has been deprecated.
5880
5881The data type `variable' is now used exclusively. `Vcells' have been
5882a low-level concept so you are likely not affected by this change.
5883
5884*** Deprecated functions: scm_sym2vcell, scm_sysintern,
5885 scm_sysintern0, scm_symbol_value0, scm_intern, scm_intern0.
5886
5887Use scm_c_define or scm_c_lookup instead, as appropriate.
5888
5889*** New functions: scm_c_module_lookup, scm_c_lookup,
5890 scm_c_module_define, scm_c_define, scm_module_lookup, scm_lookup,
5891 scm_module_define, scm_define.
5892
5893These functions work with variables instead of with vcells.
5894
311b6a3c
MV
5895** New functions for creating and defining `subr's and `gsubr's.
5896
5897The new functions more clearly distinguish between creating a subr (or
5898gsubr) object and adding it to the current module.
5899
5900These new functions are available: scm_c_make_subr, scm_c_define_subr,
5901scm_c_make_subr_with_generic, scm_c_define_subr_with_generic,
5902scm_c_make_gsubr, scm_c_define_gsubr, scm_c_make_gsubr_with_generic,
5903scm_c_define_gsubr_with_generic.
5904
5905** Deprecated functions: scm_make_subr, scm_make_subr_opt,
5906 scm_make_subr_with_generic, scm_make_gsubr,
5907 scm_make_gsubr_with_generic.
5908
5909Use the new ones from above instead.
5910
5911** C interface to the module system has changed.
5912
5913While we suggest that you avoid as many explicit module system
5914operations from C as possible for the time being, the C interface has
5915been made more similar to the high-level Scheme module system.
5916
5917*** New functions: scm_c_define_module, scm_c_use_module,
5918 scm_c_export, scm_c_resolve_module.
5919
5920They mostly work like their Scheme namesakes. scm_c_define_module
5921takes a function that is called a context where the new module is
5922current.
5923
5924*** Deprecated functions: scm_the_root_module, scm_make_module,
5925 scm_ensure_user_module, scm_load_scheme_module.
5926
5927Use the new functions instead.
5928
5929** Renamed function: scm_internal_with_fluids becomes
5930 scm_c_with_fluids.
5931
5932scm_internal_with_fluids is available as a deprecated function.
5933
5934** New function: scm_c_with_fluid.
5935
5936Just like scm_c_with_fluids, but takes one fluid and one value instead
5937of lists of same.
5938
1be6b49c
ML
5939** Deprecated typedefs: long_long, ulong_long.
5940
5941They are of questionable utility and they pollute the global
5942namespace.
5943
1be6b49c
ML
5944** Deprecated typedef: scm_sizet
5945
5946It is of questionable utility now that Guile requires ANSI C, and is
5947oddly named.
5948
5949** Deprecated typedefs: scm_port_rw_active, scm_port,
5950 scm_ptob_descriptor, scm_debug_info, scm_debug_frame, scm_fport,
5951 scm_option, scm_rstate, scm_rng, scm_array, scm_array_dim.
5952
5953Made more compliant with the naming policy by adding a _t at the end.
5954
5955** Deprecated functions: scm_mkbig, scm_big2num, scm_adjbig,
5956 scm_normbig, scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl
5957
373f4948 5958With the exception of the mysterious scm_2ulong2big, they are still
1be6b49c
ML
5959available under new names (scm_i_mkbig etc). These functions are not
5960intended to be used in user code. You should avoid dealing with
5961bignums directly, and should deal with numbers in general (which can
5962be bignums).
5963
147c18a0
MD
5964** Change in behavior: scm_num2long, scm_num2ulong
5965
5966The scm_num2[u]long functions don't any longer accept an inexact
5967argument. This change in behavior is motivated by concordance with
5968R5RS: It is more common that a primitive doesn't want to accept an
5969inexact for an exact.
5970
1be6b49c 5971** New functions: scm_short2num, scm_ushort2num, scm_int2num,
f3f70257
ML
5972 scm_uint2num, scm_size2num, scm_ptrdiff2num, scm_num2short,
5973 scm_num2ushort, scm_num2int, scm_num2uint, scm_num2ptrdiff,
1be6b49c
ML
5974 scm_num2size.
5975
5976These are conversion functions between the various ANSI C integral
147c18a0
MD
5977types and Scheme numbers. NOTE: The scm_num2xxx functions don't
5978accept an inexact argument.
1be6b49c 5979
5437598b
MD
5980** New functions: scm_float2num, scm_double2num,
5981 scm_num2float, scm_num2double.
5982
5983These are conversion functions between the two ANSI C float types and
5984Scheme numbers.
5985
1be6b49c 5986** New number validation macros:
f3f70257 5987 SCM_NUM2{SIZE,PTRDIFF,SHORT,USHORT,INT,UINT}[_DEF]
1be6b49c
ML
5988
5989See above.
5990
fc62c86a
ML
5991** New functions: scm_gc_protect_object, scm_gc_unprotect_object
5992
5993These are just nicer-named old scm_protect_object and
5994scm_unprotect_object.
5995
5996** Deprecated functions: scm_protect_object, scm_unprotect_object
5997
5998** New functions: scm_gc_[un]register_root, scm_gc_[un]register_roots
5999
6000These functions can be used to register pointers to locations that
6001hold SCM values.
6002
5b2ad23b
ML
6003** Deprecated function: scm_create_hook.
6004
6005Its sins are: misleading name, non-modularity and lack of general
6006usefulness.
6007
c299f186 6008\f
cc36e791
JB
6009Changes since Guile 1.3.4:
6010
80f27102
JB
6011* Changes to the distribution
6012
ce358662
JB
6013** Trees from nightly snapshots and CVS now require you to run autogen.sh.
6014
6015We've changed the way we handle generated files in the Guile source
6016repository. As a result, the procedure for building trees obtained
6017from the nightly FTP snapshots or via CVS has changed:
6018- You must have appropriate versions of autoconf, automake, and
6019 libtool installed on your system. See README for info on how to
6020 obtain these programs.
6021- Before configuring the tree, you must first run the script
6022 `autogen.sh' at the top of the source tree.
6023
6024The Guile repository used to contain not only source files, written by
6025humans, but also some generated files, like configure scripts and
6026Makefile.in files. Even though the contents of these files could be
6027derived mechanically from other files present, we thought it would
6028make the tree easier to build if we checked them into CVS.
6029
6030However, this approach means that minor differences between
6031developer's installed tools and habits affected the whole team.
6032So we have removed the generated files from the repository, and
6033added the autogen.sh script, which will reconstruct them
6034appropriately.
6035
6036
dc914156
GH
6037** configure now has experimental options to remove support for certain
6038features:
52cfc69b 6039
dc914156
GH
6040--disable-arrays omit array and uniform array support
6041--disable-posix omit posix interfaces
6042--disable-networking omit networking interfaces
6043--disable-regex omit regular expression interfaces
52cfc69b
GH
6044
6045These are likely to become separate modules some day.
6046
9764c29b 6047** New configure option --enable-debug-freelist
e1b0d0ac 6048
38a15cfd
GB
6049This enables a debugging version of SCM_NEWCELL(), and also registers
6050an extra primitive, the setter `gc-set-debug-check-freelist!'.
6051
6052Configure with the --enable-debug-freelist option to enable
6053the gc-set-debug-check-freelist! primitive, and then use:
6054
6055(gc-set-debug-check-freelist! #t) # turn on checking of the freelist
6056(gc-set-debug-check-freelist! #f) # turn off checking
6057
6058Checking of the freelist forces a traversal of the freelist and
6059a garbage collection before each allocation of a cell. This can
6060slow down the interpreter dramatically, so the setter should be used to
6061turn on this extra processing only when necessary.
e1b0d0ac 6062
9764c29b
MD
6063** New configure option --enable-debug-malloc
6064
6065Include code for debugging of calls to scm_must_malloc/realloc/free.
6066
6067Checks that
6068
60691. objects freed by scm_must_free has been mallocated by scm_must_malloc
60702. objects reallocated by scm_must_realloc has been allocated by
6071 scm_must_malloc
60723. reallocated objects are reallocated with the same what string
6073
6074But, most importantly, it records the number of allocated objects of
6075each kind. This is useful when searching for memory leaks.
6076
6077A Guile compiled with this option provides the primitive
6078`malloc-stats' which returns an alist with pairs of kind and the
6079number of objects of that kind.
6080
e415cb06
MD
6081** All includes are now referenced relative to the root directory
6082
6083Since some users have had problems with mixups between Guile and
6084system headers, we have decided to always refer to Guile headers via
6085their parent directories. This essentially creates a "private name
6086space" for Guile headers. This means that the compiler only is given
6087-I options for the root build and root source directory.
6088
341f78c9
MD
6089** Header files kw.h and genio.h have been removed.
6090
6091** The module (ice-9 getopt-gnu-style) has been removed.
6092
e8855f8d
MD
6093** New module (ice-9 documentation)
6094
6095Implements the interface to documentation strings associated with
6096objects.
6097
0c0ffe09
KN
6098** New module (ice-9 time)
6099
6100Provides a macro `time', which displays execution time of a given form.
6101
cf7a5ee5
KN
6102** New module (ice-9 history)
6103
6104Loading this module enables value history in the repl.
6105
0af43c4a 6106* Changes to the stand-alone interpreter
bd9e24b3 6107
67ef2dca
MD
6108** New command line option --debug
6109
6110Start Guile with debugging evaluator and backtraces enabled.
6111
6112This is useful when debugging your .guile init file or scripts.
6113
aa4bb95d
MD
6114** New help facility
6115
341f78c9
MD
6116Usage: (help NAME) gives documentation about objects named NAME (a symbol)
6117 (help REGEXP) ditto for objects with names matching REGEXP (a string)
58e5b910 6118 (help 'NAME) gives documentation for NAME, even if it is not an object
341f78c9 6119 (help ,EXPR) gives documentation for object returned by EXPR
6c0201ad 6120 (help (my module)) gives module commentary for `(my module)'
341f78c9
MD
6121 (help) gives this text
6122
6123`help' searches among bindings exported from loaded modules, while
6124`apropos' searches among bindings visible from the "current" module.
6125
6126Examples: (help help)
6127 (help cons)
6128 (help "output-string")
aa4bb95d 6129
e8855f8d
MD
6130** `help' and `apropos' now prints full module names
6131
0af43c4a 6132** Dynamic linking now uses libltdl from the libtool package.
bd9e24b3 6133
0af43c4a
MD
6134The old system dependent code for doing dynamic linking has been
6135replaced with calls to the libltdl functions which do all the hairy
6136details for us.
bd9e24b3 6137
0af43c4a
MD
6138The major improvement is that you can now directly pass libtool
6139library names like "libfoo.la" to `dynamic-link' and `dynamic-link'
6140will be able to do the best shared library job you can get, via
6141libltdl.
bd9e24b3 6142
0af43c4a
MD
6143The way dynamic libraries are found has changed and is not really
6144portable across platforms, probably. It is therefore recommended to
6145use absolute filenames when possible.
6146
6147If you pass a filename without an extension to `dynamic-link', it will
6148try a few appropriate ones. Thus, the most platform ignorant way is
6149to specify a name like "libfoo", without any directories and
6150extensions.
0573ddae 6151
91163914
MD
6152** Guile COOP threads are now compatible with LinuxThreads
6153
6154Previously, COOP threading wasn't possible in applications linked with
6155Linux POSIX threads due to their use of the stack pointer to find the
6156thread context. This has now been fixed with a workaround which uses
6157the pthreads to allocate the stack.
6158
6c0201ad 6159** New primitives: `pkgdata-dir', `site-dir', `library-dir'
62b82274 6160
9770d235
MD
6161** Positions of erring expression in scripts
6162
6163With version 1.3.4, the location of the erring expression in Guile
6164scipts is no longer automatically reported. (This should have been
6165documented before the 1.3.4 release.)
6166
6167You can get this information by enabling recording of positions of
6168source expressions and running the debugging evaluator. Put this at
6169the top of your script (or in your "site" file):
6170
6171 (read-enable 'positions)
6172 (debug-enable 'debug)
6173
0573ddae
MD
6174** Backtraces in scripts
6175
6176It is now possible to get backtraces in scripts.
6177
6178Put
6179
6180 (debug-enable 'debug 'backtrace)
6181
6182at the top of the script.
6183
6184(The first options enables the debugging evaluator.
6185 The second enables backtraces.)
6186
e8855f8d
MD
6187** Part of module system symbol lookup now implemented in C
6188
6189The eval closure of most modules is now implemented in C. Since this
6190was one of the bottlenecks for loading speed, Guile now loads code
6191substantially faster than before.
6192
f25f761d
GH
6193** Attempting to get the value of an unbound variable now produces
6194an exception with a key of 'unbound-variable instead of 'misc-error.
6195
1a35eadc
GH
6196** The initial default output port is now unbuffered if it's using a
6197tty device. Previously in this situation it was line-buffered.
6198
820920e6
MD
6199** New hook: after-gc-hook
6200
6201after-gc-hook takes over the role of gc-thunk. This hook is run at
6202the first SCM_TICK after a GC. (Thus, the code is run at the same
6203point during evaluation as signal handlers.)
6204
6205Note that this hook should be used only for diagnostic and debugging
6206purposes. It is not certain that it will continue to be well-defined
6207when this hook is run in the future.
6208
6209C programmers: Note the new C level hooks scm_before_gc_c_hook,
6210scm_before_sweep_c_hook, scm_after_gc_c_hook.
6211
b5074b23
MD
6212** Improvements to garbage collector
6213
6214Guile 1.4 has a new policy for triggering heap allocation and
6215determining the sizes of heap segments. It fixes a number of problems
6216in the old GC.
6217
62181. The new policy can handle two separate pools of cells
6219 (2-word/4-word) better. (The old policy would run wild, allocating
6220 more and more memory for certain programs.)
6221
62222. The old code would sometimes allocate far too much heap so that the
6223 Guile process became gigantic. The new code avoids this.
6224
62253. The old code would sometimes allocate too little so that few cells
6226 were freed at GC so that, in turn, too much time was spent in GC.
6227
62284. The old code would often trigger heap allocation several times in a
6229 row. (The new scheme predicts how large the segments needs to be
6230 in order not to need further allocation.)
6231
e8855f8d
MD
6232All in all, the new GC policy will make larger applications more
6233efficient.
6234
b5074b23
MD
6235The new GC scheme also is prepared for POSIX threading. Threads can
6236allocate private pools of cells ("clusters") with just a single
6237function call. Allocation of single cells from such a cluster can
6238then proceed without any need of inter-thread synchronization.
6239
6240** New environment variables controlling GC parameters
6241
6242GUILE_MAX_SEGMENT_SIZE Maximal segment size
6243 (default = 2097000)
6244
6245Allocation of 2-word cell heaps:
6246
6247GUILE_INIT_SEGMENT_SIZE_1 Size of initial heap segment in bytes
6248 (default = 360000)
6249
6250GUILE_MIN_YIELD_1 Minimum number of freed cells at each
6251 GC in percent of total heap size
6252 (default = 40)
6253
6254Allocation of 4-word cell heaps
6255(used for real numbers and misc other objects):
6256
6257GUILE_INIT_SEGMENT_SIZE_2, GUILE_MIN_YIELD_2
6258
6259(See entry "Way for application to customize GC parameters" under
6260 section "Changes to the scm_ interface" below.)
6261
67ef2dca
MD
6262** Guile now implements reals using 4-word cells
6263
6264This speeds up computation with reals. (They were earlier allocated
6265with `malloc'.) There is still some room for optimizations, however.
6266
6267** Some further steps toward POSIX thread support have been taken
6268
6269*** Guile's critical sections (SCM_DEFER/ALLOW_INTS)
6270don't have much effect any longer, and many of them will be removed in
6271next release.
6272
6273*** Signals
6274are only handled at the top of the evaluator loop, immediately after
6275I/O, and in scm_equalp.
6276
6277*** The GC can allocate thread private pools of pairs.
6278
0af43c4a
MD
6279* Changes to Scheme functions and syntax
6280
a0128ebe 6281** close-input-port and close-output-port are now R5RS
7c1e0b12 6282
a0128ebe 6283These procedures have been turned into primitives and have R5RS behaviour.
7c1e0b12 6284
0af43c4a
MD
6285** New procedure: simple-format PORT MESSAGE ARG1 ...
6286
6287(ice-9 boot) makes `format' an alias for `simple-format' until possibly
6288extended by the more sophisticated version in (ice-9 format)
6289
6290(simple-format port message . args)
6291Write MESSAGE to DESTINATION, defaulting to `current-output-port'.
6292MESSAGE can contain ~A (was %s) and ~S (was %S) escapes. When printed,
6293the escapes are replaced with corresponding members of ARGS:
6294~A formats using `display' and ~S formats using `write'.
6295If DESTINATION is #t, then use the `current-output-port',
6296if DESTINATION is #f, then return a string containing the formatted text.
6297Does not add a trailing newline."
6298
6299** string-ref: the second argument is no longer optional.
6300
6301** string, list->string: no longer accept strings in their arguments,
6302only characters, for compatibility with R5RS.
6303
6304** New procedure: port-closed? PORT
6305Returns #t if PORT is closed or #f if it is open.
6306
0a9e521f
MD
6307** Deprecated: list*
6308
6309The list* functionality is now provided by cons* (SRFI-1 compliant)
6310
b5074b23
MD
6311** New procedure: cons* ARG1 ARG2 ... ARGn
6312
6313Like `list', but the last arg provides the tail of the constructed list,
6314returning (cons ARG1 (cons ARG2 (cons ... ARGn))).
6315
6316Requires at least one argument. If given one argument, that argument
6317is returned as result.
6318
6319This function is called `list*' in some other Schemes and in Common LISP.
6320
341f78c9
MD
6321** Removed deprecated: serial-map, serial-array-copy!, serial-array-map!
6322
e8855f8d
MD
6323** New procedure: object-documentation OBJECT
6324
6325Returns the documentation string associated with OBJECT. The
6326procedure uses a caching mechanism so that subsequent lookups are
6327faster.
6328
6329Exported by (ice-9 documentation).
6330
6331** module-name now returns full names of modules
6332
6333Previously, only the last part of the name was returned (`session' for
6334`(ice-9 session)'). Ex: `(ice-9 session)'.
6335
894a712b
DH
6336* Changes to the gh_ interface
6337
6338** Deprecated: gh_int2scmb
6339
6340Use gh_bool2scm instead.
6341
a2349a28
GH
6342* Changes to the scm_ interface
6343
810e1aec
MD
6344** Guile primitives now carry docstrings!
6345
6346Thanks to Greg Badros!
6347
0a9e521f 6348** Guile primitives are defined in a new way: SCM_DEFINE/SCM_DEFINE1/SCM_PROC
0af43c4a 6349
0a9e521f
MD
6350Now Guile primitives are defined using the SCM_DEFINE/SCM_DEFINE1/SCM_PROC
6351macros and must contain a docstring that is extracted into foo.doc using a new
0af43c4a
MD
6352guile-doc-snarf script (that uses guile-doc-snarf.awk).
6353
0a9e521f
MD
6354However, a major overhaul of these macros is scheduled for the next release of
6355guile.
6356
0af43c4a
MD
6357** Guile primitives use a new technique for validation of arguments
6358
6359SCM_VALIDATE_* macros are defined to ease the redundancy and improve
6360the readability of argument checking.
6361
6362** All (nearly?) K&R prototypes for functions replaced with ANSI C equivalents.
6363
894a712b 6364** New macros: SCM_PACK, SCM_UNPACK
f8a72ca4
MD
6365
6366Compose/decompose an SCM value.
6367
894a712b
DH
6368The SCM type is now treated as an abstract data type and may be defined as a
6369long, a void* or as a struct, depending on the architecture and compile time
6370options. This makes it easier to find several types of bugs, for example when
6371SCM values are treated as integers without conversion. Values of the SCM type
6372should be treated as "atomic" values. These macros are used when
f8a72ca4
MD
6373composing/decomposing an SCM value, either because you want to access
6374individual bits, or because you want to treat it as an integer value.
6375
6376E.g., in order to set bit 7 in an SCM value x, use the expression
6377
6378 SCM_PACK (SCM_UNPACK (x) | 0x80)
6379
e11f8b42
DH
6380** The name property of hooks is deprecated.
6381Thus, the use of SCM_HOOK_NAME and scm_make_hook_with_name is deprecated.
6382
6383You can emulate this feature by using object properties.
6384
6c0201ad 6385** Deprecated macros: SCM_INPORTP, SCM_OUTPORTP, SCM_CRDY, SCM_ICHRP,
894a712b
DH
6386SCM_ICHR, SCM_MAKICHR, SCM_SETJMPBUF, SCM_NSTRINGP, SCM_NRWSTRINGP,
6387SCM_NVECTORP
f8a72ca4 6388
894a712b 6389These macros will be removed in a future release of Guile.
7c1e0b12 6390
6c0201ad 6391** The following types, functions and macros from numbers.h are deprecated:
0a9e521f
MD
6392scm_dblproc, SCM_UNEGFIXABLE, SCM_FLOBUFLEN, SCM_INEXP, SCM_CPLXP, SCM_REAL,
6393SCM_IMAG, SCM_REALPART, scm_makdbl, SCM_SINGP, SCM_NUM2DBL, SCM_NO_BIGDIG
6394
a2349a28
GH
6395** Port internals: the rw_random variable in the scm_port structure
6396must be set to non-zero in any random access port. In recent Guile
6397releases it was only set for bidirectional random-access ports.
6398
7dcb364d
GH
6399** Port internals: the seek ptob procedure is now responsible for
6400resetting the buffers if required. The change was made so that in the
6401special case of reading the current position (i.e., seek p 0 SEEK_CUR)
6402the fport and strport ptobs can avoid resetting the buffers,
6403in particular to avoid discarding unread chars. An existing port
6404type can be fixed by adding something like the following to the
6405beginning of the ptob seek procedure:
6406
6407 if (pt->rw_active == SCM_PORT_READ)
6408 scm_end_input (object);
6409 else if (pt->rw_active == SCM_PORT_WRITE)
6410 ptob->flush (object);
6411
6412although to actually avoid resetting the buffers and discard unread
6413chars requires further hacking that depends on the characteristics
6414of the ptob.
6415
894a712b
DH
6416** Deprecated functions: scm_fseek, scm_tag
6417
6418These functions are no longer used and will be removed in a future version.
6419
f25f761d
GH
6420** The scm_sysmissing procedure is no longer used in libguile.
6421Unless it turns out to be unexpectedly useful to somebody, it will be
6422removed in a future version.
6423
0af43c4a
MD
6424** The format of error message strings has changed
6425
6426The two C procedures: scm_display_error and scm_error, as well as the
6427primitive `scm-error', now use scm_simple_format to do their work.
6428This means that the message strings of all code must be updated to use
6429~A where %s was used before, and ~S where %S was used before.
6430
6431During the period when there still are a lot of old Guiles out there,
6432you might want to support both old and new versions of Guile.
6433
6434There are basically two methods to achieve this. Both methods use
6435autoconf. Put
6436
6437 AC_CHECK_FUNCS(scm_simple_format)
6438
6439in your configure.in.
6440
6441Method 1: Use the string concatenation features of ANSI C's
6442 preprocessor.
6443
6444In C:
6445
6446#ifdef HAVE_SCM_SIMPLE_FORMAT
6447#define FMT_S "~S"
6448#else
6449#define FMT_S "%S"
6450#endif
6451
6452Then represent each of your error messages using a preprocessor macro:
6453
6454#define E_SPIDER_ERROR "There's a spider in your " ## FMT_S ## "!!!"
6455
6456In Scheme:
6457
6458(define fmt-s (if (defined? 'simple-format) "~S" "%S"))
6459(define make-message string-append)
6460
6461(define e-spider-error (make-message "There's a spider in your " fmt-s "!!!"))
6462
6463Method 2: Use the oldfmt function found in doc/oldfmt.c.
6464
6465In C:
6466
6467scm_misc_error ("picnic", scm_c_oldfmt0 ("There's a spider in your ~S!!!"),
6468 ...);
6469
6470In Scheme:
6471
6472(scm-error 'misc-error "picnic" (oldfmt "There's a spider in your ~S!!!")
6473 ...)
6474
6475
f3b5e185
MD
6476** Deprecated: coop_mutex_init, coop_condition_variable_init
6477
6478Don't use the functions coop_mutex_init and
6479coop_condition_variable_init. They will change.
6480
6481Use scm_mutex_init and scm_cond_init instead.
6482
f3b5e185
MD
6483** New function: int scm_cond_timedwait (scm_cond_t *COND, scm_mutex_t *MUTEX, const struct timespec *ABSTIME)
6484 `scm_cond_timedwait' atomically unlocks MUTEX and waits on
6485 COND, as `scm_cond_wait' does, but it also bounds the duration
6486 of the wait. If COND has not been signaled before time ABSTIME,
6487 the mutex MUTEX is re-acquired and `scm_cond_timedwait'
6488 returns the error code `ETIMEDOUT'.
6489
6490 The ABSTIME parameter specifies an absolute time, with the same
6491 origin as `time' and `gettimeofday': an ABSTIME of 0 corresponds
6492 to 00:00:00 GMT, January 1, 1970.
6493
6494** New function: scm_cond_broadcast (scm_cond_t *COND)
6495 `scm_cond_broadcast' restarts all the threads that are waiting
6496 on the condition variable COND. Nothing happens if no threads are
6497 waiting on COND.
6498
6499** New function: scm_key_create (scm_key_t *KEY, void (*destr_function) (void *))
6500 `scm_key_create' allocates a new TSD key. The key is stored in
6501 the location pointed to by KEY. There is no limit on the number
6502 of keys allocated at a given time. The value initially associated
6503 with the returned key is `NULL' in all currently executing threads.
6504
6505 The DESTR_FUNCTION argument, if not `NULL', specifies a destructor
6506 function associated with the key. When a thread terminates,
6507 DESTR_FUNCTION is called on the value associated with the key in
6508 that thread. The DESTR_FUNCTION is not called if a key is deleted
6509 with `scm_key_delete' or a value is changed with
6510 `scm_setspecific'. The order in which destructor functions are
6511 called at thread termination time is unspecified.
6512
6513 Destructors are not yet implemented.
6514
6515** New function: scm_setspecific (scm_key_t KEY, const void *POINTER)
6516 `scm_setspecific' changes the value associated with KEY in the
6517 calling thread, storing the given POINTER instead.
6518
6519** New function: scm_getspecific (scm_key_t KEY)
6520 `scm_getspecific' returns the value currently associated with
6521 KEY in the calling thread.
6522
6523** New function: scm_key_delete (scm_key_t KEY)
6524 `scm_key_delete' deallocates a TSD key. It does not check
6525 whether non-`NULL' values are associated with that key in the
6526 currently executing threads, nor call the destructor function
6527 associated with the key.
6528
820920e6
MD
6529** New function: scm_c_hook_init (scm_c_hook_t *HOOK, void *HOOK_DATA, scm_c_hook_type_t TYPE)
6530
6531Initialize a C level hook HOOK with associated HOOK_DATA and type
6532TYPE. (See scm_c_hook_run ().)
6533
6534** New function: scm_c_hook_add (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA, int APPENDP)
6535
6536Add hook function FUNC with associated FUNC_DATA to HOOK. If APPENDP
6537is true, add it last, otherwise first. The same FUNC can be added
6538multiple times if FUNC_DATA differ and vice versa.
6539
6540** New function: scm_c_hook_remove (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA)
6541
6542Remove hook function FUNC with associated FUNC_DATA from HOOK. A
6543function is only removed if both FUNC and FUNC_DATA matches.
6544
6545** New function: void *scm_c_hook_run (scm_c_hook_t *HOOK, void *DATA)
6546
6547Run hook HOOK passing DATA to the hook functions.
6548
6549If TYPE is SCM_C_HOOK_NORMAL, all hook functions are run. The value
6550returned is undefined.
6551
6552If TYPE is SCM_C_HOOK_OR, hook functions are run until a function
6553returns a non-NULL value. This value is returned as the result of
6554scm_c_hook_run. If all functions return NULL, NULL is returned.
6555
6556If TYPE is SCM_C_HOOK_AND, hook functions are run until a function
6557returns a NULL value, and NULL is returned. If all functions returns
6558a non-NULL value, the last value is returned.
6559
6560** New C level GC hooks
6561
6562Five new C level hooks has been added to the garbage collector.
6563
6564 scm_before_gc_c_hook
6565 scm_after_gc_c_hook
6566
6567are run before locking and after unlocking the heap. The system is
6568thus in a mode where evaluation can take place. (Except that
6569scm_before_gc_c_hook must not allocate new cells.)
6570
6571 scm_before_mark_c_hook
6572 scm_before_sweep_c_hook
6573 scm_after_sweep_c_hook
6574
6575are run when the heap is locked. These are intended for extension of
6576the GC in a modular fashion. Examples are the weaks and guardians
6577modules.
6578
b5074b23
MD
6579** Way for application to customize GC parameters
6580
6581The application can set up other default values for the GC heap
6582allocation parameters
6583
6584 GUILE_INIT_HEAP_SIZE_1, GUILE_MIN_YIELD_1,
6585 GUILE_INIT_HEAP_SIZE_2, GUILE_MIN_YIELD_2,
6586 GUILE_MAX_SEGMENT_SIZE,
6587
6588by setting
6589
6590 scm_default_init_heap_size_1, scm_default_min_yield_1,
6591 scm_default_init_heap_size_2, scm_default_min_yield_2,
6592 scm_default_max_segment_size
6593
6594respectively before callong scm_boot_guile.
6595
6596(See entry "New environment variables ..." in section
6597"Changes to the stand-alone interpreter" above.)
6598
9704841c
MD
6599** scm_protect_object/scm_unprotect_object now nest
6600
67ef2dca
MD
6601This means that you can call scm_protect_object multiple times on an
6602object and count on the object being protected until
6603scm_unprotect_object has been call the same number of times.
6604
6605The functions also have better time complexity.
6606
6607Still, it is usually possible to structure the application in a way
6608that you don't need to use these functions. For example, if you use a
6609protected standard Guile list to keep track of live objects rather
6610than some custom data type, objects will die a natural death when they
6611are no longer needed.
6612
0a9e521f
MD
6613** Deprecated type tags: scm_tc16_flo, scm_tc_flo, scm_tc_dblr, scm_tc_dblc
6614
6615Guile does not provide the float representation for inexact real numbers any
6616more. Now, only doubles are used to represent inexact real numbers. Further,
6617the tag names scm_tc_dblr and scm_tc_dblc have been changed to scm_tc16_real
6618and scm_tc16_complex, respectively.
6619
341f78c9
MD
6620** Removed deprecated type scm_smobfuns
6621
6622** Removed deprecated function scm_newsmob
6623
b5074b23
MD
6624** Warning: scm_make_smob_type_mfpe might become deprecated in a future release
6625
6626There is an ongoing discussion among the developers whether to
6627deprecate `scm_make_smob_type_mfpe' or not. Please use the current
6628standard interface (scm_make_smob_type, scm_set_smob_XXX) in new code
6629until this issue has been settled.
6630
341f78c9
MD
6631** Removed deprecated type tag scm_tc16_kw
6632
2728d7f4
MD
6633** Added type tag scm_tc16_keyword
6634
6635(This was introduced already in release 1.3.4 but was not documented
6636 until now.)
6637
67ef2dca
MD
6638** gdb_print now prints "*** Guile not initialized ***" until Guile initialized
6639
f25f761d
GH
6640* Changes to system call interfaces:
6641
28d77376
GH
6642** The "select" procedure now tests port buffers for the ability to
6643provide input or accept output. Previously only the underlying file
6644descriptors were checked.
6645
bd9e24b3
GH
6646** New variable PIPE_BUF: the maximum number of bytes that can be
6647atomically written to a pipe.
6648
f25f761d
GH
6649** If a facility is not available on the system when Guile is
6650compiled, the corresponding primitive procedure will not be defined.
6651Previously it would have been defined but would throw a system-error
6652exception if called. Exception handlers which catch this case may
6653need minor modification: an error will be thrown with key
6654'unbound-variable instead of 'system-error. Alternatively it's
6655now possible to use `defined?' to check whether the facility is
6656available.
6657
38c1d3c4 6658** Procedures which depend on the timezone should now give the correct
6c0201ad 6659result on systems which cache the TZ environment variable, even if TZ
38c1d3c4
GH
6660is changed without calling tzset.
6661
5c11cc9d
GH
6662* Changes to the networking interfaces:
6663
6664** New functions: htons, ntohs, htonl, ntohl: for converting short and
6665long integers between network and host format. For now, it's not
6666particularly convenient to do this kind of thing, but consider:
6667
6668(define write-network-long
6669 (lambda (value port)
6670 (let ((v (make-uniform-vector 1 1 0)))
6671 (uniform-vector-set! v 0 (htonl value))
6672 (uniform-vector-write v port))))
6673
6674(define read-network-long
6675 (lambda (port)
6676 (let ((v (make-uniform-vector 1 1 0)))
6677 (uniform-vector-read! v port)
6678 (ntohl (uniform-vector-ref v 0)))))
6679
6680** If inet-aton fails, it now throws an error with key 'misc-error
6681instead of 'system-error, since errno is not relevant.
6682
6683** Certain gethostbyname/gethostbyaddr failures now throw errors with
6684specific keys instead of 'system-error. The latter is inappropriate
6685since errno will not have been set. The keys are:
afe5177e 6686'host-not-found, 'try-again, 'no-recovery and 'no-data.
5c11cc9d
GH
6687
6688** sethostent, setnetent, setprotoent, setservent: now take an
6689optional argument STAYOPEN, which specifies whether the database
6690remains open after a database entry is accessed randomly (e.g., using
6691gethostbyname for the hosts database.) The default is #f. Previously
6692#t was always used.
6693
cc36e791 6694\f
43fa9a05
JB
6695Changes since Guile 1.3.2:
6696
0fdcbcaa
MD
6697* Changes to the stand-alone interpreter
6698
6699** Debugger
6700
6701An initial version of the Guile debugger written by Chris Hanson has
6702been added. The debugger is still under development but is included
6703in the distribution anyway since it is already quite useful.
6704
6705Type
6706
6707 (debug)
6708
6709after an error to enter the debugger. Type `help' inside the debugger
6710for a description of available commands.
6711
6712If you prefer to have stack frames numbered and printed in
6713anti-chronological order and prefer up in the stack to be down on the
6714screen as is the case in gdb, you can put
6715
6716 (debug-enable 'backwards)
6717
6718in your .guile startup file. (However, this means that Guile can't
6719use indentation to indicate stack level.)
6720
6721The debugger is autoloaded into Guile at the first use.
6722
6723** Further enhancements to backtraces
6724
6725There is a new debug option `width' which controls the maximum width
6726on the screen of printed stack frames. Fancy printing parameters
6727("level" and "length" as in Common LISP) are adaptively adjusted for
6728each stack frame to give maximum information while still fitting
6729within the bounds. If the stack frame can't be made to fit by
6730adjusting parameters, it is simply cut off at the end. This is marked
6731with a `$'.
6732
6733** Some modules are now only loaded when the repl is started
6734
6735The modules (ice-9 debug), (ice-9 session), (ice-9 threads) and (ice-9
6736regex) are now loaded into (guile-user) only if the repl has been
6737started. The effect is that the startup time for scripts has been
6738reduced to 30% of what it was previously.
6739
6740Correctly written scripts load the modules they require at the top of
6741the file and should not be affected by this change.
6742
ece41168
MD
6743** Hooks are now represented as smobs
6744
6822fe53
MD
6745* Changes to Scheme functions and syntax
6746
0ce204b0
MV
6747** Readline support has changed again.
6748
6749The old (readline-activator) module is gone. Use (ice-9 readline)
6750instead, which now contains all readline functionality. So the code
6751to activate readline is now
6752
6753 (use-modules (ice-9 readline))
6754 (activate-readline)
6755
6756This should work at any time, including from the guile prompt.
6757
5d195868
JB
6758To avoid confusion about the terms of Guile's license, please only
6759enable readline for your personal use; please don't make it the
6760default for others. Here is why we make this rather odd-sounding
6761request:
6762
6763Guile is normally licensed under a weakened form of the GNU General
6764Public License, which allows you to link code with Guile without
6765placing that code under the GPL. This exception is important to some
6766people.
6767
6768However, since readline is distributed under the GNU General Public
6769License, when you link Guile with readline, either statically or
6770dynamically, you effectively change Guile's license to the strict GPL.
6771Whenever you link any strictly GPL'd code into Guile, uses of Guile
6772which are normally permitted become forbidden. This is a rather
6773non-obvious consequence of the licensing terms.
6774
6775So, to make sure things remain clear, please let people choose for
6776themselves whether to link GPL'd libraries like readline with Guile.
6777
25b0654e
JB
6778** regexp-substitute/global has changed slightly, but incompatibly.
6779
6780If you include a function in the item list, the string of the match
6781object it receives is the same string passed to
6782regexp-substitute/global, not some suffix of that string.
6783Correspondingly, the match's positions are relative to the entire
6784string, not the suffix.
6785
6786If the regexp can match the empty string, the way matches are chosen
6787from the string has changed. regexp-substitute/global recognizes the
6788same set of matches that list-matches does; see below.
6789
6790** New function: list-matches REGEXP STRING [FLAGS]
6791
6792Return a list of match objects, one for every non-overlapping, maximal
6793match of REGEXP in STRING. The matches appear in left-to-right order.
6794list-matches only reports matches of the empty string if there are no
6795other matches which begin on, end at, or include the empty match's
6796position.
6797
6798If present, FLAGS is passed as the FLAGS argument to regexp-exec.
6799
6800** New function: fold-matches REGEXP STRING INIT PROC [FLAGS]
6801
6802For each match of REGEXP in STRING, apply PROC to the match object,
6803and the last value PROC returned, or INIT for the first call. Return
6804the last value returned by PROC. We apply PROC to the matches as they
6805appear from left to right.
6806
6807This function recognizes matches according to the same criteria as
6808list-matches.
6809
6810Thus, you could define list-matches like this:
6811
6812 (define (list-matches regexp string . flags)
6813 (reverse! (apply fold-matches regexp string '() cons flags)))
6814
6815If present, FLAGS is passed as the FLAGS argument to regexp-exec.
6816
bc848f7f
MD
6817** Hooks
6818
6819*** New function: hook? OBJ
6820
6821Return #t if OBJ is a hook, otherwise #f.
6822
ece41168
MD
6823*** New function: make-hook-with-name NAME [ARITY]
6824
6825Return a hook with name NAME and arity ARITY. The default value for
6826ARITY is 0. The only effect of NAME is that it will appear when the
6827hook object is printed to ease debugging.
6828
bc848f7f
MD
6829*** New function: hook-empty? HOOK
6830
6831Return #t if HOOK doesn't contain any procedures, otherwise #f.
6832
6833*** New function: hook->list HOOK
6834
6835Return a list of the procedures that are called when run-hook is
6836applied to HOOK.
6837
b074884f
JB
6838** `map' signals an error if its argument lists are not all the same length.
6839
6840This is the behavior required by R5RS, so this change is really a bug
6841fix. But it seems to affect a lot of people's code, so we're
6842mentioning it here anyway.
6843
6822fe53
MD
6844** Print-state handling has been made more transparent
6845
6846Under certain circumstances, ports are represented as a port with an
6847associated print state. Earlier, this pair was represented as a pair
6848(see "Some magic has been added to the printer" below). It is now
6849indistinguishable (almost; see `get-print-state') from a port on the
6850user level.
6851
6852*** New function: port-with-print-state OUTPUT-PORT PRINT-STATE
6853
6854Return a new port with the associated print state PRINT-STATE.
6855
6856*** New function: get-print-state OUTPUT-PORT
6857
6858Return the print state associated with this port if it exists,
6859otherwise return #f.
6860
340a8770 6861*** New function: directory-stream? OBJECT
77242ff9 6862
340a8770 6863Returns true iff OBJECT is a directory stream --- the sort of object
77242ff9
GH
6864returned by `opendir'.
6865
0fdcbcaa
MD
6866** New function: using-readline?
6867
6868Return #t if readline is in use in the current repl.
6869
26405bc1
MD
6870** structs will be removed in 1.4
6871
6872Structs will be replaced in Guile 1.4. We will merge GOOPS into Guile
6873and use GOOPS objects as the fundamental record type.
6874
49199eaa
MD
6875* Changes to the scm_ interface
6876
26405bc1
MD
6877** structs will be removed in 1.4
6878
6879The entire current struct interface (struct.c, struct.h) will be
6880replaced in Guile 1.4. We will merge GOOPS into libguile and use
6881GOOPS objects as the fundamental record type.
6882
49199eaa
MD
6883** The internal representation of subr's has changed
6884
6885Instead of giving a hint to the subr name, the CAR field of the subr
6886now contains an index to a subr entry in scm_subr_table.
6887
6888*** New variable: scm_subr_table
6889
6890An array of subr entries. A subr entry contains the name, properties
6891and documentation associated with the subr. The properties and
6892documentation slots are not yet used.
6893
6894** A new scheme for "forwarding" calls to a builtin to a generic function
6895
6896It is now possible to extend the functionality of some Guile
6897primitives by letting them defer a call to a GOOPS generic function on
240ed66f 6898argument mismatch. This means that there is no loss of efficiency in
daf516d6 6899normal evaluation.
49199eaa
MD
6900
6901Example:
6902
daf516d6 6903 (use-modules (oop goops)) ; Must be GOOPS version 0.2.
49199eaa
MD
6904 (define-method + ((x <string>) (y <string>))
6905 (string-append x y))
6906
86a4d62e
MD
6907+ will still be as efficient as usual in numerical calculations, but
6908can also be used for concatenating strings.
49199eaa 6909
86a4d62e 6910Who will be the first one to extend Guile's numerical tower to
daf516d6
MD
6911rationals? :) [OK, there a few other things to fix before this can
6912be made in a clean way.]
49199eaa
MD
6913
6914*** New snarf macros for defining primitives: SCM_GPROC, SCM_GPROC1
6915
6916 New macro: SCM_GPROC (CNAME, SNAME, REQ, OPT, VAR, CFUNC, GENERIC)
6917
6918 New macro: SCM_GPROC1 (CNAME, SNAME, TYPE, CFUNC, GENERIC)
6919
d02cafe7 6920These do the same job as SCM_PROC and SCM_PROC1, but they also define
49199eaa
MD
6921a variable GENERIC which can be used by the dispatch macros below.
6922
6923[This is experimental code which may change soon.]
6924
6925*** New macros for forwarding control to a generic on arg type error
6926
6927 New macro: SCM_WTA_DISPATCH_1 (GENERIC, ARG1, POS, SUBR)
6928
6929 New macro: SCM_WTA_DISPATCH_2 (GENERIC, ARG1, ARG2, POS, SUBR)
6930
6931These correspond to the scm_wta function call, and have the same
6932behaviour until the user has called the GOOPS primitive
6933`enable-primitive-generic!'. After that, these macros will apply the
6934generic function GENERIC to the argument(s) instead of calling
6935scm_wta.
6936
6937[This is experimental code which may change soon.]
6938
6939*** New macros for argument testing with generic dispatch
6940
6941 New macro: SCM_GASSERT1 (COND, GENERIC, ARG1, POS, SUBR)
6942
6943 New macro: SCM_GASSERT2 (COND, GENERIC, ARG1, ARG2, POS, SUBR)
6944
6945These correspond to the SCM_ASSERT macro, but will defer control to
6946GENERIC on error after `enable-primitive-generic!' has been called.
6947
6948[This is experimental code which may change soon.]
6949
6950** New function: SCM scm_eval_body (SCM body, SCM env)
6951
6952Evaluates the body of a special form.
6953
6954** The internal representation of struct's has changed
6955
6956Previously, four slots were allocated for the procedure(s) of entities
6957and operators. The motivation for this representation had to do with
6958the structure of the evaluator, the wish to support tail-recursive
6959generic functions, and efficiency. Since the generic function
6960dispatch mechanism has changed, there is no longer a need for such an
6961expensive representation, and the representation has been simplified.
6962
6963This should not make any difference for most users.
6964
6965** GOOPS support has been cleaned up.
6966
6967Some code has been moved from eval.c to objects.c and code in both of
6968these compilation units has been cleaned up and better structured.
6969
6970*** New functions for applying generic functions
6971
6972 New function: SCM scm_apply_generic (GENERIC, ARGS)
6973 New function: SCM scm_call_generic_0 (GENERIC)
6974 New function: SCM scm_call_generic_1 (GENERIC, ARG1)
6975 New function: SCM scm_call_generic_2 (GENERIC, ARG1, ARG2)
6976 New function: SCM scm_call_generic_3 (GENERIC, ARG1, ARG2, ARG3)
6977
ece41168
MD
6978** Deprecated function: scm_make_named_hook
6979
6980It is now replaced by:
6981
6982** New function: SCM scm_create_hook (const char *name, int arity)
6983
6984Creates a hook in the same way as make-hook above but also
6985binds a variable named NAME to it.
6986
6987This is the typical way of creating a hook from C code.
6988
6989Currently, the variable is created in the "current" module.
6990This might change when we get the new module system.
6991
6992[The behaviour is identical to scm_make_named_hook.]
6993
6994
43fa9a05 6995\f
f3227c7a
JB
6996Changes since Guile 1.3:
6997
6ca345f3
JB
6998* Changes to mailing lists
6999
7000** Some of the Guile mailing lists have moved to sourceware.cygnus.com.
7001
7002See the README file to find current addresses for all the Guile
7003mailing lists.
7004
d77fb593
JB
7005* Changes to the distribution
7006
1d335863
JB
7007** Readline support is no longer included with Guile by default.
7008
7009Based on the different license terms of Guile and Readline, we
7010concluded that Guile should not *by default* cause the linking of
7011Readline into an application program. Readline support is now offered
7012as a separate module, which is linked into an application only when
7013you explicitly specify it.
7014
7015Although Guile is GNU software, its distribution terms add a special
7016exception to the usual GNU General Public License (GPL). Guile's
7017license includes a clause that allows you to link Guile with non-free
7018programs. We add this exception so as not to put Guile at a
7019disadvantage vis-a-vis other extensibility packages that support other
7020languages.
7021
7022In contrast, the GNU Readline library is distributed under the GNU
7023General Public License pure and simple. This means that you may not
7024link Readline, even dynamically, into an application unless it is
7025distributed under a free software license that is compatible the GPL.
7026
7027Because of this difference in distribution terms, an application that
7028can use Guile may not be able to use Readline. Now users will be
7029explicitly offered two independent decisions about the use of these
7030two packages.
d77fb593 7031
0e8a8468
MV
7032You can activate the readline support by issuing
7033
7034 (use-modules (readline-activator))
7035 (activate-readline)
7036
7037from your ".guile" file, for example.
7038
e4eae9b1
MD
7039* Changes to the stand-alone interpreter
7040
67ad463a
MD
7041** All builtins now print as primitives.
7042Previously builtin procedures not belonging to the fundamental subr
7043types printed as #<compiled closure #<primitive-procedure gsubr-apply>>.
7044Now, they print as #<primitive-procedure NAME>.
7045
7046** Backtraces slightly more intelligible.
7047gsubr-apply and macro transformer application frames no longer appear
7048in backtraces.
7049
69c6acbb
JB
7050* Changes to Scheme functions and syntax
7051
2a52b429
MD
7052** Guile now correctly handles internal defines by rewriting them into
7053their equivalent letrec. Previously, internal defines would
7054incrementally add to the innermost environment, without checking
7055whether the restrictions specified in RnRS were met. This lead to the
7056correct behaviour when these restriction actually were met, but didn't
7057catch all illegal uses. Such an illegal use could lead to crashes of
b3da54d1 7058the Guile interpreter or other unwanted results. An example of
2a52b429
MD
7059incorrect internal defines that made Guile behave erratically:
7060
7061 (let ()
7062 (define a 1)
7063 (define (b) a)
7064 (define c (1+ (b)))
7065 (define d 3)
7066
7067 (b))
7068
7069 => 2
7070
7071The problem with this example is that the definition of `c' uses the
7072value of `b' directly. This confuses the meoization machine of Guile
7073so that the second call of `b' (this time in a larger environment that
7074also contains bindings for `c' and `d') refers to the binding of `c'
7075instead of `a'. You could also make Guile crash with a variation on
7076this theme:
7077
7078 (define (foo flag)
7079 (define a 1)
7080 (define (b flag) (if flag a 1))
7081 (define c (1+ (b flag)))
7082 (define d 3)
7083
7084 (b #t))
7085
7086 (foo #f)
7087 (foo #t)
7088
7089From now on, Guile will issue an `Unbound variable: b' error message
7090for both examples.
7091
36d3d540
MD
7092** Hooks
7093
7094A hook contains a list of functions which should be called on
7095particular occasions in an existing program. Hooks are used for
7096customization.
7097
7098A window manager might have a hook before-window-map-hook. The window
7099manager uses the function run-hooks to call all functions stored in
7100before-window-map-hook each time a window is mapped. The user can
7101store functions in the hook using add-hook!.
7102
7103In Guile, hooks are first class objects.
7104
7105*** New function: make-hook [N_ARGS]
7106
7107Return a hook for hook functions which can take N_ARGS arguments.
7108The default value for N_ARGS is 0.
7109
ad91d6c3
MD
7110(See also scm_make_named_hook below.)
7111
36d3d540
MD
7112*** New function: add-hook! HOOK PROC [APPEND_P]
7113
7114Put PROC at the beginning of the list of functions stored in HOOK.
7115If APPEND_P is supplied, and non-false, put PROC at the end instead.
7116
7117PROC must be able to take the number of arguments specified when the
7118hook was created.
7119
7120If PROC already exists in HOOK, then remove it first.
7121
7122*** New function: remove-hook! HOOK PROC
7123
7124Remove PROC from the list of functions in HOOK.
7125
7126*** New function: reset-hook! HOOK
7127
7128Clear the list of hook functions stored in HOOK.
7129
7130*** New function: run-hook HOOK ARG1 ...
7131
7132Run all hook functions stored in HOOK with arguments ARG1 ... .
7133The number of arguments supplied must correspond to the number given
7134when the hook was created.
7135
56a19408
MV
7136** The function `dynamic-link' now takes optional keyword arguments.
7137 The only keyword argument that is currently defined is `:global
7138 BOOL'. With it, you can control whether the shared library will be
7139 linked in global mode or not. In global mode, the symbols from the
7140 linked library can be used to resolve references from other
7141 dynamically linked libraries. In non-global mode, the linked
7142 library is essentially invisible and can only be accessed via
7143 `dynamic-func', etc. The default is now to link in global mode.
7144 Previously, the default has been non-global mode.
7145
7146 The `#:global' keyword is only effective on platforms that support
7147 the dlopen family of functions.
7148
ad226f25 7149** New function `provided?'
b7e13f65
JB
7150
7151 - Function: provided? FEATURE
7152 Return true iff FEATURE is supported by this installation of
7153 Guile. FEATURE must be a symbol naming a feature; the global
7154 variable `*features*' is a list of available features.
7155
ad226f25
JB
7156** Changes to the module (ice-9 expect):
7157
7158*** The expect-strings macro now matches `$' in a regular expression
7159 only at a line-break or end-of-file by default. Previously it would
ab711359
JB
7160 match the end of the string accumulated so far. The old behaviour
7161 can be obtained by setting the variable `expect-strings-exec-flags'
7162 to 0.
ad226f25
JB
7163
7164*** The expect-strings macro now uses a variable `expect-strings-exec-flags'
7165 for the regexp-exec flags. If `regexp/noteol' is included, then `$'
7166 in a regular expression will still match before a line-break or
7167 end-of-file. The default is `regexp/noteol'.
7168
6c0201ad 7169*** The expect-strings macro now uses a variable
ad226f25
JB
7170 `expect-strings-compile-flags' for the flags to be supplied to
7171 `make-regexp'. The default is `regexp/newline', which was previously
7172 hard-coded.
7173
7174*** The expect macro now supplies two arguments to a match procedure:
ab711359
JB
7175 the current accumulated string and a flag to indicate whether
7176 end-of-file has been reached. Previously only the string was supplied.
7177 If end-of-file is reached, the match procedure will be called an
7178 additional time with the same accumulated string as the previous call
7179 but with the flag set.
ad226f25 7180
b7e13f65
JB
7181** New module (ice-9 format), implementing the Common Lisp `format' function.
7182
7183This code, and the documentation for it that appears here, was
7184borrowed from SLIB, with minor adaptations for Guile.
7185
7186 - Function: format DESTINATION FORMAT-STRING . ARGUMENTS
7187 An almost complete implementation of Common LISP format description
7188 according to the CL reference book `Common LISP' from Guy L.
7189 Steele, Digital Press. Backward compatible to most of the
7190 available Scheme format implementations.
7191
7192 Returns `#t', `#f' or a string; has side effect of printing
7193 according to FORMAT-STRING. If DESTINATION is `#t', the output is
7194 to the current output port and `#t' is returned. If DESTINATION
7195 is `#f', a formatted string is returned as the result of the call.
7196 NEW: If DESTINATION is a string, DESTINATION is regarded as the
7197 format string; FORMAT-STRING is then the first argument and the
7198 output is returned as a string. If DESTINATION is a number, the
7199 output is to the current error port if available by the
7200 implementation. Otherwise DESTINATION must be an output port and
7201 `#t' is returned.
7202
7203 FORMAT-STRING must be a string. In case of a formatting error
7204 format returns `#f' and prints a message on the current output or
7205 error port. Characters are output as if the string were output by
7206 the `display' function with the exception of those prefixed by a
7207 tilde (~). For a detailed description of the FORMAT-STRING syntax
7208 please consult a Common LISP format reference manual. For a test
7209 suite to verify this format implementation load `formatst.scm'.
7210 Please send bug reports to `lutzeb@cs.tu-berlin.de'.
7211
7212 Note: `format' is not reentrant, i.e. only one `format'-call may
7213 be executed at a time.
7214
7215
7216*** Format Specification (Format version 3.0)
7217
7218 Please consult a Common LISP format reference manual for a detailed
7219description of the format string syntax. For a demonstration of the
7220implemented directives see `formatst.scm'.
7221
7222 This implementation supports directive parameters and modifiers (`:'
7223and `@' characters). Multiple parameters must be separated by a comma
7224(`,'). Parameters can be numerical parameters (positive or negative),
7225character parameters (prefixed by a quote character (`''), variable
7226parameters (`v'), number of rest arguments parameter (`#'), empty and
7227default parameters. Directive characters are case independent. The
7228general form of a directive is:
7229
7230DIRECTIVE ::= ~{DIRECTIVE-PARAMETER,}[:][@]DIRECTIVE-CHARACTER
7231
7232DIRECTIVE-PARAMETER ::= [ [-|+]{0-9}+ | 'CHARACTER | v | # ]
7233
7234*** Implemented CL Format Control Directives
7235
7236 Documentation syntax: Uppercase characters represent the
7237corresponding control directive characters. Lowercase characters
7238represent control directive parameter descriptions.
7239
7240`~A'
7241 Any (print as `display' does).
7242 `~@A'
7243 left pad.
7244
7245 `~MINCOL,COLINC,MINPAD,PADCHARA'
7246 full padding.
7247
7248`~S'
7249 S-expression (print as `write' does).
7250 `~@S'
7251 left pad.
7252
7253 `~MINCOL,COLINC,MINPAD,PADCHARS'
7254 full padding.
7255
7256`~D'
7257 Decimal.
7258 `~@D'
7259 print number sign always.
7260
7261 `~:D'
7262 print comma separated.
7263
7264 `~MINCOL,PADCHAR,COMMACHARD'
7265 padding.
7266
7267`~X'
7268 Hexadecimal.
7269 `~@X'
7270 print number sign always.
7271
7272 `~:X'
7273 print comma separated.
7274
7275 `~MINCOL,PADCHAR,COMMACHARX'
7276 padding.
7277
7278`~O'
7279 Octal.
7280 `~@O'
7281 print number sign always.
7282
7283 `~:O'
7284 print comma separated.
7285
7286 `~MINCOL,PADCHAR,COMMACHARO'
7287 padding.
7288
7289`~B'
7290 Binary.
7291 `~@B'
7292 print number sign always.
7293
7294 `~:B'
7295 print comma separated.
7296
7297 `~MINCOL,PADCHAR,COMMACHARB'
7298 padding.
7299
7300`~NR'
7301 Radix N.
7302 `~N,MINCOL,PADCHAR,COMMACHARR'
7303 padding.
7304
7305`~@R'
7306 print a number as a Roman numeral.
7307
7308`~:@R'
7309 print a number as an "old fashioned" Roman numeral.
7310
7311`~:R'
7312 print a number as an ordinal English number.
7313
7314`~:@R'
7315 print a number as a cardinal English number.
7316
7317`~P'
7318 Plural.
7319 `~@P'
7320 prints `y' and `ies'.
7321
7322 `~:P'
7323 as `~P but jumps 1 argument backward.'
7324
7325 `~:@P'
7326 as `~@P but jumps 1 argument backward.'
7327
7328`~C'
7329 Character.
7330 `~@C'
7331 prints a character as the reader can understand it (i.e. `#\'
7332 prefixing).
7333
7334 `~:C'
7335 prints a character as emacs does (eg. `^C' for ASCII 03).
7336
7337`~F'
7338 Fixed-format floating-point (prints a flonum like MMM.NNN).
7339 `~WIDTH,DIGITS,SCALE,OVERFLOWCHAR,PADCHARF'
7340 `~@F'
7341 If the number is positive a plus sign is printed.
7342
7343`~E'
7344 Exponential floating-point (prints a flonum like MMM.NNN`E'EE).
7345 `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARE'
7346 `~@E'
7347 If the number is positive a plus sign is printed.
7348
7349`~G'
7350 General floating-point (prints a flonum either fixed or
7351 exponential).
7352 `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARG'
7353 `~@G'
7354 If the number is positive a plus sign is printed.
7355
7356`~$'
7357 Dollars floating-point (prints a flonum in fixed with signs
7358 separated).
7359 `~DIGITS,SCALE,WIDTH,PADCHAR$'
7360 `~@$'
7361 If the number is positive a plus sign is printed.
7362
7363 `~:@$'
7364 A sign is always printed and appears before the padding.
7365
7366 `~:$'
7367 The sign appears before the padding.
7368
7369`~%'
7370 Newline.
7371 `~N%'
7372 print N newlines.
7373
7374`~&'
7375 print newline if not at the beginning of the output line.
7376 `~N&'
7377 prints `~&' and then N-1 newlines.
7378
7379`~|'
7380 Page Separator.
7381 `~N|'
7382 print N page separators.
7383
7384`~~'
7385 Tilde.
7386 `~N~'
7387 print N tildes.
7388
7389`~'<newline>
7390 Continuation Line.
7391 `~:'<newline>
7392 newline is ignored, white space left.
7393
7394 `~@'<newline>
7395 newline is left, white space ignored.
7396
7397`~T'
7398 Tabulation.
7399 `~@T'
7400 relative tabulation.
7401
7402 `~COLNUM,COLINCT'
7403 full tabulation.
7404
7405`~?'
7406 Indirection (expects indirect arguments as a list).
7407 `~@?'
7408 extracts indirect arguments from format arguments.
7409
7410`~(STR~)'
7411 Case conversion (converts by `string-downcase').
7412 `~:(STR~)'
7413 converts by `string-capitalize'.
7414
7415 `~@(STR~)'
7416 converts by `string-capitalize-first'.
7417
7418 `~:@(STR~)'
7419 converts by `string-upcase'.
7420
7421`~*'
7422 Argument Jumping (jumps 1 argument forward).
7423 `~N*'
7424 jumps N arguments forward.
7425
7426 `~:*'
7427 jumps 1 argument backward.
7428
7429 `~N:*'
7430 jumps N arguments backward.
7431
7432 `~@*'
7433 jumps to the 0th argument.
7434
7435 `~N@*'
7436 jumps to the Nth argument (beginning from 0)
7437
7438`~[STR0~;STR1~;...~;STRN~]'
7439 Conditional Expression (numerical clause conditional).
7440 `~N['
7441 take argument from N.
7442
7443 `~@['
7444 true test conditional.
7445
7446 `~:['
7447 if-else-then conditional.
7448
7449 `~;'
7450 clause separator.
7451
7452 `~:;'
7453 default clause follows.
7454
7455`~{STR~}'
7456 Iteration (args come from the next argument (a list)).
7457 `~N{'
7458 at most N iterations.
7459
7460 `~:{'
7461 args from next arg (a list of lists).
7462
7463 `~@{'
7464 args from the rest of arguments.
7465
7466 `~:@{'
7467 args from the rest args (lists).
7468
7469`~^'
7470 Up and out.
7471 `~N^'
7472 aborts if N = 0
7473
7474 `~N,M^'
7475 aborts if N = M
7476
7477 `~N,M,K^'
7478 aborts if N <= M <= K
7479
7480*** Not Implemented CL Format Control Directives
7481
7482`~:A'
7483 print `#f' as an empty list (see below).
7484
7485`~:S'
7486 print `#f' as an empty list (see below).
7487
7488`~<~>'
7489 Justification.
7490
7491`~:^'
7492 (sorry I don't understand its semantics completely)
7493
7494*** Extended, Replaced and Additional Control Directives
7495
7496`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHD'
7497`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHX'
7498`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHO'
7499`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHB'
7500`~N,MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHR'
7501 COMMAWIDTH is the number of characters between two comma
7502 characters.
7503
7504`~I'
7505 print a R4RS complex number as `~F~@Fi' with passed parameters for
7506 `~F'.
7507
7508`~Y'
7509 Pretty print formatting of an argument for scheme code lists.
7510
7511`~K'
7512 Same as `~?.'
7513
7514`~!'
7515 Flushes the output if format DESTINATION is a port.
7516
7517`~_'
7518 Print a `#\space' character
7519 `~N_'
7520 print N `#\space' characters.
7521
7522`~/'
7523 Print a `#\tab' character
7524 `~N/'
7525 print N `#\tab' characters.
7526
7527`~NC'
7528 Takes N as an integer representation for a character. No arguments
7529 are consumed. N is converted to a character by `integer->char'. N
7530 must be a positive decimal number.
7531
7532`~:S'
7533 Print out readproof. Prints out internal objects represented as
7534 `#<...>' as strings `"#<...>"' so that the format output can always
7535 be processed by `read'.
7536
7537`~:A'
7538 Print out readproof. Prints out internal objects represented as
7539 `#<...>' as strings `"#<...>"' so that the format output can always
7540 be processed by `read'.
7541
7542`~Q'
7543 Prints information and a copyright notice on the format
7544 implementation.
7545 `~:Q'
7546 prints format version.
7547
7548`~F, ~E, ~G, ~$'
7549 may also print number strings, i.e. passing a number as a string
7550 and format it accordingly.
7551
7552*** Configuration Variables
7553
7554 The format module exports some configuration variables to suit the
7555systems and users needs. There should be no modification necessary for
7556the configuration that comes with Guile. Format detects automatically
7557if the running scheme system implements floating point numbers and
7558complex numbers.
7559
7560format:symbol-case-conv
7561 Symbols are converted by `symbol->string' so the case type of the
7562 printed symbols is implementation dependent.
7563 `format:symbol-case-conv' is a one arg closure which is either
7564 `#f' (no conversion), `string-upcase', `string-downcase' or
7565 `string-capitalize'. (default `#f')
7566
7567format:iobj-case-conv
7568 As FORMAT:SYMBOL-CASE-CONV but applies for the representation of
7569 implementation internal objects. (default `#f')
7570
7571format:expch
7572 The character prefixing the exponent value in `~E' printing.
7573 (default `#\E')
7574
7575*** Compatibility With Other Format Implementations
7576
7577SLIB format 2.x:
7578 See `format.doc'.
7579
7580SLIB format 1.4:
7581 Downward compatible except for padding support and `~A', `~S',
7582 `~P', `~X' uppercase printing. SLIB format 1.4 uses C-style
7583 `printf' padding support which is completely replaced by the CL
7584 `format' padding style.
7585
7586MIT C-Scheme 7.1:
7587 Downward compatible except for `~', which is not documented
7588 (ignores all characters inside the format string up to a newline
7589 character). (7.1 implements `~a', `~s', ~NEWLINE, `~~', `~%',
7590 numerical and variable parameters and `:/@' modifiers in the CL
7591 sense).
7592
7593Elk 1.5/2.0:
7594 Downward compatible except for `~A' and `~S' which print in
7595 uppercase. (Elk implements `~a', `~s', `~~', and `~%' (no
7596 directive parameters or modifiers)).
7597
7598Scheme->C 01nov91:
7599 Downward compatible except for an optional destination parameter:
7600 S2C accepts a format call without a destination which returns a
7601 formatted string. This is equivalent to a #f destination in S2C.
7602 (S2C implements `~a', `~s', `~c', `~%', and `~~' (no directive
7603 parameters or modifiers)).
7604
7605
e7d37b0a 7606** Changes to string-handling functions.
b7e13f65 7607
e7d37b0a 7608These functions were added to support the (ice-9 format) module, above.
b7e13f65 7609
e7d37b0a
JB
7610*** New function: string-upcase STRING
7611*** New function: string-downcase STRING
b7e13f65 7612
e7d37b0a
JB
7613These are non-destructive versions of the existing string-upcase! and
7614string-downcase! functions.
b7e13f65 7615
e7d37b0a
JB
7616*** New function: string-capitalize! STRING
7617*** New function: string-capitalize STRING
7618
7619These functions convert the first letter of each word in the string to
7620upper case. Thus:
7621
7622 (string-capitalize "howdy there")
7623 => "Howdy There"
7624
7625As with the other functions, string-capitalize! modifies the string in
7626place, while string-capitalize returns a modified copy of its argument.
7627
7628*** New function: string-ci->symbol STRING
7629
7630Return a symbol whose name is STRING, but having the same case as if
7631the symbol had be read by `read'.
7632
7633Guile can be configured to be sensitive or insensitive to case
7634differences in Scheme identifiers. If Guile is case-insensitive, all
7635symbols are converted to lower case on input. The `string-ci->symbol'
7636function returns a symbol whose name in STRING, transformed as Guile
7637would if STRING were input.
7638
7639*** New function: substring-move! STRING1 START END STRING2 START
7640
7641Copy the substring of STRING1 from START (inclusive) to END
7642(exclusive) to STRING2 at START. STRING1 and STRING2 may be the same
7643string, and the source and destination areas may overlap; in all
7644cases, the function behaves as if all the characters were copied
7645simultanously.
7646
6c0201ad 7647*** Extended functions: substring-move-left! substring-move-right!
e7d37b0a
JB
7648
7649These functions now correctly copy arbitrarily overlapping substrings;
7650they are both synonyms for substring-move!.
b7e13f65 7651
b7e13f65 7652
deaceb4e
JB
7653** New module (ice-9 getopt-long), with the function `getopt-long'.
7654
7655getopt-long is a function for parsing command-line arguments in a
7656manner consistent with other GNU programs.
7657
7658(getopt-long ARGS GRAMMAR)
7659Parse the arguments ARGS according to the argument list grammar GRAMMAR.
7660
7661ARGS should be a list of strings. Its first element should be the
7662name of the program; subsequent elements should be the arguments
7663that were passed to the program on the command line. The
7664`program-arguments' procedure returns a list of this form.
7665
7666GRAMMAR is a list of the form:
7667((OPTION (PROPERTY VALUE) ...) ...)
7668
7669Each OPTION should be a symbol. `getopt-long' will accept a
7670command-line option named `--OPTION'.
7671Each option can have the following (PROPERTY VALUE) pairs:
7672
7673 (single-char CHAR) --- Accept `-CHAR' as a single-character
7674 equivalent to `--OPTION'. This is how to specify traditional
7675 Unix-style flags.
7676 (required? BOOL) --- If BOOL is true, the option is required.
7677 getopt-long will raise an error if it is not found in ARGS.
7678 (value BOOL) --- If BOOL is #t, the option accepts a value; if
7679 it is #f, it does not; and if it is the symbol
7680 `optional', the option may appear in ARGS with or
6c0201ad 7681 without a value.
deaceb4e
JB
7682 (predicate FUNC) --- If the option accepts a value (i.e. you
7683 specified `(value #t)' for this option), then getopt
7684 will apply FUNC to the value, and throw an exception
7685 if it returns #f. FUNC should be a procedure which
7686 accepts a string and returns a boolean value; you may
7687 need to use quasiquotes to get it into GRAMMAR.
7688
7689The (PROPERTY VALUE) pairs may occur in any order, but each
7690property may occur only once. By default, options do not have
7691single-character equivalents, are not required, and do not take
7692values.
7693
7694In ARGS, single-character options may be combined, in the usual
7695Unix fashion: ("-x" "-y") is equivalent to ("-xy"). If an option
7696accepts values, then it must be the last option in the
7697combination; the value is the next argument. So, for example, using
7698the following grammar:
7699 ((apples (single-char #\a))
7700 (blimps (single-char #\b) (value #t))
7701 (catalexis (single-char #\c) (value #t)))
7702the following argument lists would be acceptable:
7703 ("-a" "-b" "bang" "-c" "couth") ("bang" and "couth" are the values
7704 for "blimps" and "catalexis")
7705 ("-ab" "bang" "-c" "couth") (same)
7706 ("-ac" "couth" "-b" "bang") (same)
7707 ("-abc" "couth" "bang") (an error, since `-b' is not the
7708 last option in its combination)
7709
7710If an option's value is optional, then `getopt-long' decides
7711whether it has a value by looking at what follows it in ARGS. If
7712the next element is a string, and it does not appear to be an
7713option itself, then that string is the option's value.
7714
7715The value of a long option can appear as the next element in ARGS,
7716or it can follow the option name, separated by an `=' character.
7717Thus, using the same grammar as above, the following argument lists
7718are equivalent:
7719 ("--apples" "Braeburn" "--blimps" "Goodyear")
7720 ("--apples=Braeburn" "--blimps" "Goodyear")
7721 ("--blimps" "Goodyear" "--apples=Braeburn")
7722
7723If the option "--" appears in ARGS, argument parsing stops there;
7724subsequent arguments are returned as ordinary arguments, even if
7725they resemble options. So, in the argument list:
7726 ("--apples" "Granny Smith" "--" "--blimp" "Goodyear")
7727`getopt-long' will recognize the `apples' option as having the
7728value "Granny Smith", but it will not recognize the `blimp'
7729option; it will return the strings "--blimp" and "Goodyear" as
7730ordinary argument strings.
7731
7732The `getopt-long' function returns the parsed argument list as an
7733assocation list, mapping option names --- the symbols from GRAMMAR
7734--- onto their values, or #t if the option does not accept a value.
7735Unused options do not appear in the alist.
7736
7737All arguments that are not the value of any option are returned
7738as a list, associated with the empty list.
7739
7740`getopt-long' throws an exception if:
7741- it finds an unrecognized option in ARGS
7742- a required option is omitted
7743- an option that requires an argument doesn't get one
7744- an option that doesn't accept an argument does get one (this can
7745 only happen using the long option `--opt=value' syntax)
7746- an option predicate fails
7747
7748So, for example:
7749
7750(define grammar
7751 `((lockfile-dir (required? #t)
7752 (value #t)
7753 (single-char #\k)
7754 (predicate ,file-is-directory?))
7755 (verbose (required? #f)
7756 (single-char #\v)
7757 (value #f))
7758 (x-includes (single-char #\x))
6c0201ad 7759 (rnet-server (single-char #\y)
deaceb4e
JB
7760 (predicate ,string?))))
7761
6c0201ad 7762(getopt-long '("my-prog" "-vk" "/tmp" "foo1" "--x-includes=/usr/include"
deaceb4e
JB
7763 "--rnet-server=lamprod" "--" "-fred" "foo2" "foo3")
7764 grammar)
7765=> ((() "foo1" "-fred" "foo2" "foo3")
7766 (rnet-server . "lamprod")
7767 (x-includes . "/usr/include")
7768 (lockfile-dir . "/tmp")
7769 (verbose . #t))
7770
7771** The (ice-9 getopt-gnu-style) module is obsolete; use (ice-9 getopt-long).
7772
7773It will be removed in a few releases.
7774
08394899
MS
7775** New syntax: lambda*
7776** New syntax: define*
6c0201ad 7777** New syntax: define*-public
08394899
MS
7778** New syntax: defmacro*
7779** New syntax: defmacro*-public
6c0201ad 7780Guile now supports optional arguments.
08394899
MS
7781
7782`lambda*', `define*', `define*-public', `defmacro*' and
7783`defmacro*-public' are identical to the non-* versions except that
7784they use an extended type of parameter list that has the following BNF
7785syntax (parentheses are literal, square brackets indicate grouping,
7786and `*', `+' and `?' have the usual meaning):
7787
7788 ext-param-list ::= ( [identifier]* [#&optional [ext-var-decl]+]?
6c0201ad 7789 [#&key [ext-var-decl]+ [#&allow-other-keys]?]?
08394899
MS
7790 [[#&rest identifier]|[. identifier]]? ) | [identifier]
7791
6c0201ad 7792 ext-var-decl ::= identifier | ( identifier expression )
08394899
MS
7793
7794The semantics are best illustrated with the following documentation
7795and examples for `lambda*':
7796
7797 lambda* args . body
7798 lambda extended for optional and keyword arguments
6c0201ad 7799
08394899
MS
7800 lambda* creates a procedure that takes optional arguments. These
7801 are specified by putting them inside brackets at the end of the
7802 paramater list, but before any dotted rest argument. For example,
7803 (lambda* (a b #&optional c d . e) '())
7804 creates a procedure with fixed arguments a and b, optional arguments c
7805 and d, and rest argument e. If the optional arguments are omitted
7806 in a call, the variables for them are unbound in the procedure. This
7807 can be checked with the bound? macro.
7808
7809 lambda* can also take keyword arguments. For example, a procedure
7810 defined like this:
7811 (lambda* (#&key xyzzy larch) '())
7812 can be called with any of the argument lists (#:xyzzy 11)
7813 (#:larch 13) (#:larch 42 #:xyzzy 19) (). Whichever arguments
7814 are given as keywords are bound to values.
7815
7816 Optional and keyword arguments can also be given default values
7817 which they take on when they are not present in a call, by giving a
7818 two-item list in place of an optional argument, for example in:
6c0201ad 7819 (lambda* (foo #&optional (bar 42) #&key (baz 73)) (list foo bar baz))
08394899
MS
7820 foo is a fixed argument, bar is an optional argument with default
7821 value 42, and baz is a keyword argument with default value 73.
7822 Default value expressions are not evaluated unless they are needed
6c0201ad 7823 and until the procedure is called.
08394899
MS
7824
7825 lambda* now supports two more special parameter list keywords.
7826
7827 lambda*-defined procedures now throw an error by default if a
7828 keyword other than one of those specified is found in the actual
7829 passed arguments. However, specifying #&allow-other-keys
7830 immediately after the kyword argument declarations restores the
7831 previous behavior of ignoring unknown keywords. lambda* also now
7832 guarantees that if the same keyword is passed more than once, the
7833 last one passed is the one that takes effect. For example,
7834 ((lambda* (#&key (heads 0) (tails 0)) (display (list heads tails)))
7835 #:heads 37 #:tails 42 #:heads 99)
7836 would result in (99 47) being displayed.
7837
7838 #&rest is also now provided as a synonym for the dotted syntax rest
7839 argument. The argument lists (a . b) and (a #&rest b) are equivalent in
7840 all respects to lambda*. This is provided for more similarity to DSSSL,
7841 MIT-Scheme and Kawa among others, as well as for refugees from other
7842 Lisp dialects.
7843
7844Further documentation may be found in the optargs.scm file itself.
7845
7846The optional argument module also exports the macros `let-optional',
7847`let-optional*', `let-keywords', `let-keywords*' and `bound?'. These
7848are not documented here because they may be removed in the future, but
7849full documentation is still available in optargs.scm.
7850
2e132553
JB
7851** New syntax: and-let*
7852Guile now supports the `and-let*' form, described in the draft SRFI-2.
7853
7854Syntax: (land* (<clause> ...) <body> ...)
7855Each <clause> should have one of the following forms:
7856 (<variable> <expression>)
7857 (<expression>)
7858 <bound-variable>
7859Each <variable> or <bound-variable> should be an identifier. Each
7860<expression> should be a valid expression. The <body> should be a
7861possibly empty sequence of expressions, like the <body> of a
7862lambda form.
7863
7864Semantics: A LAND* expression is evaluated by evaluating the
7865<expression> or <bound-variable> of each of the <clause>s from
7866left to right. The value of the first <expression> or
7867<bound-variable> that evaluates to a false value is returned; the
7868remaining <expression>s and <bound-variable>s are not evaluated.
7869The <body> forms are evaluated iff all the <expression>s and
7870<bound-variable>s evaluate to true values.
7871
7872The <expression>s and the <body> are evaluated in an environment
7873binding each <variable> of the preceding (<variable> <expression>)
7874clauses to the value of the <expression>. Later bindings
7875shadow earlier bindings.
7876
7877Guile's and-let* macro was contributed by Michael Livshin.
7878
36d3d540
MD
7879** New sorting functions
7880
7881*** New function: sorted? SEQUENCE LESS?
ed8c8636
MD
7882Returns `#t' when the sequence argument is in non-decreasing order
7883according to LESS? (that is, there is no adjacent pair `... x y
7884...' for which `(less? y x)').
7885
7886Returns `#f' when the sequence contains at least one out-of-order
7887pair. It is an error if the sequence is neither a list nor a
7888vector.
7889
36d3d540 7890*** New function: merge LIST1 LIST2 LESS?
ed8c8636
MD
7891LIST1 and LIST2 are sorted lists.
7892Returns the sorted list of all elements in LIST1 and LIST2.
7893
7894Assume that the elements a and b1 in LIST1 and b2 in LIST2 are "equal"
7895in the sense that (LESS? x y) --> #f for x, y in {a, b1, b2},
7896and that a < b1 in LIST1. Then a < b1 < b2 in the result.
7897(Here "<" should read "comes before".)
7898
36d3d540 7899*** New procedure: merge! LIST1 LIST2 LESS?
ed8c8636
MD
7900Merges two lists, re-using the pairs of LIST1 and LIST2 to build
7901the result. If the code is compiled, and LESS? constructs no new
7902pairs, no pairs at all will be allocated. The first pair of the
7903result will be either the first pair of LIST1 or the first pair of
7904LIST2.
7905
36d3d540 7906*** New function: sort SEQUENCE LESS?
ed8c8636
MD
7907Accepts either a list or a vector, and returns a new sequence
7908which is sorted. The new sequence is the same type as the input.
7909Always `(sorted? (sort sequence less?) less?)'. The original
7910sequence is not altered in any way. The new sequence shares its
7911elements with the old one; no elements are copied.
7912
36d3d540 7913*** New procedure: sort! SEQUENCE LESS
ed8c8636
MD
7914Returns its sorted result in the original boxes. No new storage is
7915allocated at all. Proper usage: (set! slist (sort! slist <))
7916
36d3d540 7917*** New function: stable-sort SEQUENCE LESS?
ed8c8636
MD
7918Similar to `sort' but stable. That is, if "equal" elements are
7919ordered a < b in the original sequence, they will have the same order
7920in the result.
7921
36d3d540 7922*** New function: stable-sort! SEQUENCE LESS?
ed8c8636
MD
7923Similar to `sort!' but stable.
7924Uses temporary storage when sorting vectors.
7925
36d3d540 7926*** New functions: sort-list, sort-list!
ed8c8636
MD
7927Added for compatibility with scsh.
7928
36d3d540
MD
7929** New built-in random number support
7930
7931*** New function: random N [STATE]
3e8370c3
MD
7932Accepts a positive integer or real N and returns a number of the
7933same type between zero (inclusive) and N (exclusive). The values
7934returned have a uniform distribution.
7935
7936The optional argument STATE must be of the type produced by
416075f1
MD
7937`copy-random-state' or `seed->random-state'. It defaults to the value
7938of the variable `*random-state*'. This object is used to maintain the
7939state of the pseudo-random-number generator and is altered as a side
7940effect of the `random' operation.
3e8370c3 7941
36d3d540 7942*** New variable: *random-state*
3e8370c3
MD
7943Holds a data structure that encodes the internal state of the
7944random-number generator that `random' uses by default. The nature
7945of this data structure is implementation-dependent. It may be
7946printed out and successfully read back in, but may or may not
7947function correctly as a random-number state object in another
7948implementation.
7949
36d3d540 7950*** New function: copy-random-state [STATE]
3e8370c3
MD
7951Returns a new object of type suitable for use as the value of the
7952variable `*random-state*' and as a second argument to `random'.
7953If argument STATE is given, a copy of it is returned. Otherwise a
7954copy of `*random-state*' is returned.
416075f1 7955
36d3d540 7956*** New function: seed->random-state SEED
416075f1
MD
7957Returns a new object of type suitable for use as the value of the
7958variable `*random-state*' and as a second argument to `random'.
7959SEED is a string or a number. A new state is generated and
7960initialized using SEED.
3e8370c3 7961
36d3d540 7962*** New function: random:uniform [STATE]
3e8370c3
MD
7963Returns an uniformly distributed inexact real random number in the
7964range between 0 and 1.
7965
36d3d540 7966*** New procedure: random:solid-sphere! VECT [STATE]
3e8370c3
MD
7967Fills VECT with inexact real random numbers the sum of whose
7968squares is less than 1.0. Thinking of VECT as coordinates in
7969space of dimension N = `(vector-length VECT)', the coordinates are
7970uniformly distributed within the unit N-shere. The sum of the
7971squares of the numbers is returned. VECT can be either a vector
7972or a uniform vector of doubles.
7973
36d3d540 7974*** New procedure: random:hollow-sphere! VECT [STATE]
3e8370c3
MD
7975Fills VECT with inexact real random numbers the sum of whose squares
7976is equal to 1.0. Thinking of VECT as coordinates in space of
7977dimension n = `(vector-length VECT)', the coordinates are uniformly
7978distributed over the surface of the unit n-shere. VECT can be either
7979a vector or a uniform vector of doubles.
7980
36d3d540 7981*** New function: random:normal [STATE]
3e8370c3
MD
7982Returns an inexact real in a normal distribution with mean 0 and
7983standard deviation 1. For a normal distribution with mean M and
7984standard deviation D use `(+ M (* D (random:normal)))'.
7985
36d3d540 7986*** New procedure: random:normal-vector! VECT [STATE]
3e8370c3
MD
7987Fills VECT with inexact real random numbers which are independent and
7988standard normally distributed (i.e., with mean 0 and variance 1).
7989VECT can be either a vector or a uniform vector of doubles.
7990
36d3d540 7991*** New function: random:exp STATE
3e8370c3
MD
7992Returns an inexact real in an exponential distribution with mean 1.
7993For an exponential distribution with mean U use (* U (random:exp)).
7994
69c6acbb
JB
7995** The range of logand, logior, logxor, logtest, and logbit? have changed.
7996
7997These functions now operate on numbers in the range of a C unsigned
7998long.
7999
8000These functions used to operate on numbers in the range of a C signed
8001long; however, this seems inappropriate, because Guile integers don't
8002overflow.
8003
ba4ee0d6
MD
8004** New function: make-guardian
8005This is an implementation of guardians as described in
8006R. Kent Dybvig, Carl Bruggeman, and David Eby (1993) "Guardians in a
8007Generation-Based Garbage Collector" ACM SIGPLAN Conference on
8008Programming Language Design and Implementation, June 1993
8009ftp://ftp.cs.indiana.edu/pub/scheme-repository/doc/pubs/guardians.ps.gz
8010
88ceea5c
MD
8011** New functions: delq1!, delv1!, delete1!
8012These procedures behave similar to delq! and friends but delete only
8013one object if at all.
8014
55254a6a
MD
8015** New function: unread-string STRING PORT
8016Unread STRING to PORT, that is, push it back onto the port so that
8017next read operation will work on the pushed back characters.
8018
8019** unread-char can now be called multiple times
8020If unread-char is called multiple times, the unread characters will be
8021read again in last-in first-out order.
8022
9e97c52d
GH
8023** the procedures uniform-array-read! and uniform-array-write! now
8024work on any kind of port, not just ports which are open on a file.
8025
b074884f 8026** Now 'l' in a port mode requests line buffering.
9e97c52d 8027
69bc9ff3
GH
8028** The procedure truncate-file now works on string ports as well
8029as file ports. If the size argument is omitted, the current
1b9c3dae 8030file position is used.
9e97c52d 8031
c94577b4 8032** new procedure: seek PORT/FDES OFFSET WHENCE
9e97c52d
GH
8033The arguments are the same as for the old fseek procedure, but it
8034works on string ports as well as random-access file ports.
8035
8036** the fseek procedure now works on string ports, since it has been
c94577b4 8037redefined using seek.
9e97c52d
GH
8038
8039** the setvbuf procedure now uses a default size if mode is _IOFBF and
8040size is not supplied.
8041
8042** the newline procedure no longer flushes the port if it's not
8043line-buffered: previously it did if it was the current output port.
8044
8045** open-pipe and close-pipe are no longer primitive procedures, but
8046an emulation can be obtained using `(use-modules (ice-9 popen))'.
8047
8048** the freopen procedure has been removed.
8049
8050** new procedure: drain-input PORT
8051Drains PORT's read buffers (including any pushed-back characters)
8052and returns the contents as a single string.
8053
67ad463a 8054** New function: map-in-order PROC LIST1 LIST2 ...
d41b3904
MD
8055Version of `map' which guarantees that the procedure is applied to the
8056lists in serial order.
8057
67ad463a
MD
8058** Renamed `serial-array-copy!' and `serial-array-map!' to
8059`array-copy-in-order!' and `array-map-in-order!'. The old names are
8060now obsolete and will go away in release 1.5.
8061
cf7132b3 8062** New syntax: collect BODY1 ...
d41b3904
MD
8063Version of `begin' which returns a list of the results of the body
8064forms instead of the result of the last body form. In contrast to
cf7132b3 8065`begin', `collect' allows an empty body.
d41b3904 8066
e4eae9b1
MD
8067** New functions: read-history FILENAME, write-history FILENAME
8068Read/write command line history from/to file. Returns #t on success
8069and #f if an error occured.
8070
d21ffe26
JB
8071** `ls' and `lls' in module (ice-9 ls) now handle no arguments.
8072
8073These procedures return a list of definitions available in the specified
8074argument, a relative module reference. In the case of no argument,
8075`(current-module)' is now consulted for definitions to return, instead
8076of simply returning #f, the former behavior.
8077
f8c9d497
JB
8078** The #/ syntax for lists is no longer supported.
8079
8080Earlier versions of Scheme accepted this syntax, but printed a
8081warning.
8082
8083** Guile no longer consults the SCHEME_LOAD_PATH environment variable.
8084
8085Instead, you should set GUILE_LOAD_PATH to tell Guile where to find
8086modules.
8087
3ffc7a36
MD
8088* Changes to the gh_ interface
8089
8090** gh_scm2doubles
8091
8092Now takes a second argument which is the result array. If this
8093pointer is NULL, a new array is malloced (the old behaviour).
8094
8095** gh_chars2byvect, gh_shorts2svect, gh_floats2fvect, gh_scm2chars,
8096 gh_scm2shorts, gh_scm2longs, gh_scm2floats
8097
8098New functions.
8099
3e8370c3
MD
8100* Changes to the scm_ interface
8101
ad91d6c3
MD
8102** Function: scm_make_named_hook (char* name, int n_args)
8103
8104Creates a hook in the same way as make-hook above but also
8105binds a variable named NAME to it.
8106
8107This is the typical way of creating a hook from C code.
8108
ece41168
MD
8109Currently, the variable is created in the "current" module. This
8110might change when we get the new module system.
ad91d6c3 8111
16a5a9a4
MD
8112** The smob interface
8113
8114The interface for creating smobs has changed. For documentation, see
8115data-rep.info (made from guile-core/doc/data-rep.texi).
8116
8117*** Deprecated function: SCM scm_newsmob (scm_smobfuns *)
8118
8119>>> This function will be removed in 1.3.4. <<<
8120
8121It is replaced by:
8122
8123*** Function: SCM scm_make_smob_type (const char *name, scm_sizet size)
8124This function adds a new smob type, named NAME, with instance size
8125SIZE to the system. The return value is a tag that is used in
8126creating instances of the type. If SIZE is 0, then no memory will
8127be allocated when instances of the smob are created, and nothing
8128will be freed by the default free function.
6c0201ad 8129
16a5a9a4
MD
8130*** Function: void scm_set_smob_mark (long tc, SCM (*mark) (SCM))
8131This function sets the smob marking procedure for the smob type
8132specified by the tag TC. TC is the tag returned by
8133`scm_make_smob_type'.
8134
8135*** Function: void scm_set_smob_free (long tc, SCM (*mark) (SCM))
8136This function sets the smob freeing procedure for the smob type
8137specified by the tag TC. TC is the tag returned by
8138`scm_make_smob_type'.
8139
8140*** Function: void scm_set_smob_print (tc, print)
8141
8142 - Function: void scm_set_smob_print (long tc,
8143 scm_sizet (*print) (SCM,
8144 SCM,
8145 scm_print_state *))
8146
8147This function sets the smob printing procedure for the smob type
8148specified by the tag TC. TC is the tag returned by
8149`scm_make_smob_type'.
8150
8151*** Function: void scm_set_smob_equalp (long tc, SCM (*equalp) (SCM, SCM))
8152This function sets the smob equality-testing predicate for the
8153smob type specified by the tag TC. TC is the tag returned by
8154`scm_make_smob_type'.
8155
8156*** Macro: void SCM_NEWSMOB (SCM var, long tc, void *data)
8157Make VALUE contain a smob instance of the type with type code TC and
8158smob data DATA. VALUE must be previously declared as C type `SCM'.
8159
8160*** Macro: fn_returns SCM_RETURN_NEWSMOB (long tc, void *data)
8161This macro expands to a block of code that creates a smob instance
8162of the type with type code TC and smob data DATA, and returns that
8163`SCM' value. It should be the last piece of code in a block.
8164
9e97c52d
GH
8165** The interfaces for using I/O ports and implementing port types
8166(ptobs) have changed significantly. The new interface is based on
8167shared access to buffers and a new set of ptob procedures.
8168
16a5a9a4
MD
8169*** scm_newptob has been removed
8170
8171It is replaced by:
8172
8173*** Function: SCM scm_make_port_type (type_name, fill_buffer, write_flush)
8174
8175- Function: SCM scm_make_port_type (char *type_name,
8176 int (*fill_buffer) (SCM port),
8177 void (*write_flush) (SCM port));
8178
8179Similarly to the new smob interface, there is a set of function
8180setters by which the user can customize the behaviour of his port
544e9093 8181type. See ports.h (scm_set_port_XXX).
16a5a9a4 8182
9e97c52d
GH
8183** scm_strport_to_string: New function: creates a new string from
8184a string port's buffer.
8185
3e8370c3
MD
8186** Plug in interface for random number generators
8187The variable `scm_the_rng' in random.c contains a value and three
8188function pointers which together define the current random number
8189generator being used by the Scheme level interface and the random
8190number library functions.
8191
8192The user is free to replace the default generator with the generator
8193of his own choice.
8194
8195*** Variable: size_t scm_the_rng.rstate_size
8196The size of the random state type used by the current RNG
8197measured in chars.
8198
8199*** Function: unsigned long scm_the_rng.random_bits (scm_rstate *STATE)
8200Given the random STATE, return 32 random bits.
8201
8202*** Function: void scm_the_rng.init_rstate (scm_rstate *STATE, chars *S, int N)
8203Seed random state STATE using string S of length N.
8204
8205*** Function: scm_rstate *scm_the_rng.copy_rstate (scm_rstate *STATE)
8206Given random state STATE, return a malloced copy.
8207
8208** Default RNG
8209The default RNG is the MWC (Multiply With Carry) random number
8210generator described by George Marsaglia at the Department of
8211Statistics and Supercomputer Computations Research Institute, The
8212Florida State University (http://stat.fsu.edu/~geo).
8213
8214It uses 64 bits, has a period of 4578426017172946943 (4.6e18), and
8215passes all tests in the DIEHARD test suite
8216(http://stat.fsu.edu/~geo/diehard.html). The generation of 32 bits
8217costs one multiply and one add on platforms which either supports long
8218longs (gcc does this on most systems) or have 64 bit longs. The cost
8219is four multiply on other systems but this can be optimized by writing
8220scm_i_uniform32 in assembler.
8221
8222These functions are provided through the scm_the_rng interface for use
8223by libguile and the application.
8224
8225*** Function: unsigned long scm_i_uniform32 (scm_i_rstate *STATE)
8226Given the random STATE, return 32 random bits.
8227Don't use this function directly. Instead go through the plugin
8228interface (see "Plug in interface" above).
8229
8230*** Function: void scm_i_init_rstate (scm_i_rstate *STATE, char *SEED, int N)
8231Initialize STATE using SEED of length N.
8232
8233*** Function: scm_i_rstate *scm_i_copy_rstate (scm_i_rstate *STATE)
8234Return a malloc:ed copy of STATE. This function can easily be re-used
8235in the interfaces to other RNGs.
8236
8237** Random number library functions
8238These functions use the current RNG through the scm_the_rng interface.
8239It might be a good idea to use these functions from your C code so
8240that only one random generator is used by all code in your program.
8241
259529f2 8242The default random state is stored in:
3e8370c3
MD
8243
8244*** Variable: SCM scm_var_random_state
8245Contains the vcell of the Scheme variable "*random-state*" which is
8246used as default state by all random number functions in the Scheme
8247level interface.
8248
8249Example:
8250
259529f2 8251 double x = scm_c_uniform01 (SCM_RSTATE (SCM_CDR (scm_var_random_state)));
3e8370c3 8252
259529f2
MD
8253*** Function: scm_rstate *scm_c_default_rstate (void)
8254This is a convenience function which returns the value of
8255scm_var_random_state. An error message is generated if this value
8256isn't a random state.
8257
8258*** Function: scm_rstate *scm_c_make_rstate (char *SEED, int LENGTH)
8259Make a new random state from the string SEED of length LENGTH.
8260
8261It is generally not a good idea to use multiple random states in a
8262program. While subsequent random numbers generated from one random
8263state are guaranteed to be reasonably independent, there is no such
8264guarantee for numbers generated from different random states.
8265
8266*** Macro: unsigned long scm_c_uniform32 (scm_rstate *STATE)
8267Return 32 random bits.
8268
8269*** Function: double scm_c_uniform01 (scm_rstate *STATE)
3e8370c3
MD
8270Return a sample from the uniform(0,1) distribution.
8271
259529f2 8272*** Function: double scm_c_normal01 (scm_rstate *STATE)
3e8370c3
MD
8273Return a sample from the normal(0,1) distribution.
8274
259529f2 8275*** Function: double scm_c_exp1 (scm_rstate *STATE)
3e8370c3
MD
8276Return a sample from the exp(1) distribution.
8277
259529f2
MD
8278*** Function: unsigned long scm_c_random (scm_rstate *STATE, unsigned long M)
8279Return a sample from the discrete uniform(0,M) distribution.
8280
8281*** Function: SCM scm_c_random_bignum (scm_rstate *STATE, SCM M)
3e8370c3 8282Return a sample from the discrete uniform(0,M) distribution.
259529f2 8283M must be a bignum object. The returned value may be an INUM.
3e8370c3 8284
9e97c52d 8285
f3227c7a 8286\f
d23bbf3e 8287Changes in Guile 1.3 (released Monday, October 19, 1998):
c484bf7f
JB
8288
8289* Changes to the distribution
8290
e2d6569c
JB
8291** We renamed the SCHEME_LOAD_PATH environment variable to GUILE_LOAD_PATH.
8292To avoid conflicts, programs should name environment variables after
8293themselves, except when there's a common practice establishing some
8294other convention.
8295
8296For now, Guile supports both GUILE_LOAD_PATH and SCHEME_LOAD_PATH,
8297giving the former precedence, and printing a warning message if the
8298latter is set. Guile 1.4 will not recognize SCHEME_LOAD_PATH at all.
8299
8300** The header files related to multi-byte characters have been removed.
8301They were: libguile/extchrs.h and libguile/mbstrings.h. Any C code
8302which referred to these explicitly will probably need to be rewritten,
8303since the support for the variant string types has been removed; see
8304below.
8305
8306** The header files append.h and sequences.h have been removed. These
8307files implemented non-R4RS operations which would encourage
8308non-portable programming style and less easy-to-read code.
3a97e020 8309
c484bf7f
JB
8310* Changes to the stand-alone interpreter
8311
2e368582 8312** New procedures have been added to implement a "batch mode":
ec4ab4fd 8313
2e368582 8314*** Function: batch-mode?
ec4ab4fd
GH
8315
8316 Returns a boolean indicating whether the interpreter is in batch
8317 mode.
8318
2e368582 8319*** Function: set-batch-mode?! ARG
ec4ab4fd
GH
8320
8321 If ARG is true, switches the interpreter to batch mode. The `#f'
8322 case has not been implemented.
8323
2e368582
JB
8324** Guile now provides full command-line editing, when run interactively.
8325To use this feature, you must have the readline library installed.
8326The Guile build process will notice it, and automatically include
8327support for it.
8328
8329The readline library is available via anonymous FTP from any GNU
8330mirror site; the canonical location is "ftp://prep.ai.mit.edu/pub/gnu".
8331
a5d6d578
MD
8332** the-last-stack is now a fluid.
8333
c484bf7f
JB
8334* Changes to the procedure for linking libguile with your programs
8335
71f20534 8336** You can now use the `guile-config' utility to build programs that use Guile.
2e368582 8337
2adfe1c0 8338Guile now includes a command-line utility called `guile-config', which
71f20534
JB
8339can provide information about how to compile and link programs that
8340use Guile.
8341
8342*** `guile-config compile' prints any C compiler flags needed to use Guile.
8343You should include this command's output on the command line you use
8344to compile C or C++ code that #includes the Guile header files. It's
8345usually just a `-I' flag to help the compiler find the Guile headers.
8346
8347
8348*** `guile-config link' prints any linker flags necessary to link with Guile.
8aa5c148 8349
71f20534 8350This command writes to its standard output a list of flags which you
8aa5c148
JB
8351must pass to the linker to link your code against the Guile library.
8352The flags include '-lguile' itself, any other libraries the Guile
8353library depends upon, and any `-L' flags needed to help the linker
8354find those libraries.
2e368582
JB
8355
8356For example, here is a Makefile rule that builds a program named 'foo'
8357from the object files ${FOO_OBJECTS}, and links them against Guile:
8358
8359 foo: ${FOO_OBJECTS}
2adfe1c0 8360 ${CC} ${CFLAGS} ${FOO_OBJECTS} `guile-config link` -o foo
2e368582 8361
e2d6569c
JB
8362Previous Guile releases recommended that you use autoconf to detect
8363which of a predefined set of libraries were present on your system.
2adfe1c0 8364It is more robust to use `guile-config', since it records exactly which
e2d6569c
JB
8365libraries the installed Guile library requires.
8366
2adfe1c0
JB
8367This was originally called `build-guile', but was renamed to
8368`guile-config' before Guile 1.3 was released, to be consistent with
8369the analogous script for the GTK+ GUI toolkit, which is called
8370`gtk-config'.
8371
2e368582 8372
8aa5c148
JB
8373** Use the GUILE_FLAGS macro in your configure.in file to find Guile.
8374
8375If you are using the GNU autoconf package to configure your program,
8376you can use the GUILE_FLAGS autoconf macro to call `guile-config'
8377(described above) and gather the necessary values for use in your
8378Makefiles.
8379
8380The GUILE_FLAGS macro expands to configure script code which runs the
8381`guile-config' script, to find out where Guile's header files and
8382libraries are installed. It sets two variables, marked for
8383substitution, as by AC_SUBST.
8384
8385 GUILE_CFLAGS --- flags to pass to a C or C++ compiler to build
8386 code that uses Guile header files. This is almost always just a
8387 -I flag.
8388
8389 GUILE_LDFLAGS --- flags to pass to the linker to link a
8390 program against Guile. This includes `-lguile' for the Guile
8391 library itself, any libraries that Guile itself requires (like
8392 -lqthreads), and so on. It may also include a -L flag to tell the
8393 compiler where to find the libraries.
8394
8395GUILE_FLAGS is defined in the file guile.m4, in the top-level
8396directory of the Guile distribution. You can copy it into your
8397package's aclocal.m4 file, and then use it in your configure.in file.
8398
8399If you are using the `aclocal' program, distributed with GNU automake,
8400to maintain your aclocal.m4 file, the Guile installation process
8401installs guile.m4 where aclocal will find it. All you need to do is
8402use GUILE_FLAGS in your configure.in file, and then run `aclocal';
8403this will copy the definition of GUILE_FLAGS into your aclocal.m4
8404file.
8405
8406
c484bf7f 8407* Changes to Scheme functions and syntax
7ad3c1e7 8408
02755d59 8409** Multi-byte strings have been removed, as have multi-byte and wide
e2d6569c
JB
8410ports. We felt that these were the wrong approach to
8411internationalization support.
02755d59 8412
2e368582
JB
8413** New function: readline [PROMPT]
8414Read a line from the terminal, and allow the user to edit it,
8415prompting with PROMPT. READLINE provides a large set of Emacs-like
8416editing commands, lets the user recall previously typed lines, and
8417works on almost every kind of terminal, including dumb terminals.
8418
8419READLINE assumes that the cursor is at the beginning of the line when
8420it is invoked. Thus, you can't print a prompt yourself, and then call
8421READLINE; you need to package up your prompt as a string, pass it to
8422the function, and let READLINE print the prompt itself. This is
8423because READLINE needs to know the prompt's screen width.
8424
8cd57bd0
JB
8425For Guile to provide this function, you must have the readline
8426library, version 2.1 or later, installed on your system. Readline is
8427available via anonymous FTP from prep.ai.mit.edu in pub/gnu, or from
8428any GNU mirror site.
2e368582
JB
8429
8430See also ADD-HISTORY function.
8431
8432** New function: add-history STRING
8433Add STRING as the most recent line in the history used by the READLINE
8434command. READLINE does not add lines to the history itself; you must
8435call ADD-HISTORY to make previous input available to the user.
8436
8cd57bd0
JB
8437** The behavior of the read-line function has changed.
8438
8439This function now uses standard C library functions to read the line,
8440for speed. This means that it doesn not respect the value of
8441scm-line-incrementors; it assumes that lines are delimited with
8442#\newline.
8443
8444(Note that this is read-line, the function that reads a line of text
8445from a port, not readline, the function that reads a line from a
8446terminal, providing full editing capabilities.)
8447
1a0106ef
JB
8448** New module (ice-9 getopt-gnu-style): Parse command-line arguments.
8449
8450This module provides some simple argument parsing. It exports one
8451function:
8452
8453Function: getopt-gnu-style ARG-LS
8454 Parse a list of program arguments into an alist of option
8455 descriptions.
8456
8457 Each item in the list of program arguments is examined to see if
8458 it meets the syntax of a GNU long-named option. An argument like
8459 `--MUMBLE' produces an element of the form (MUMBLE . #t) in the
8460 returned alist, where MUMBLE is a keyword object with the same
8461 name as the argument. An argument like `--MUMBLE=FROB' produces
8462 an element of the form (MUMBLE . FROB), where FROB is a string.
8463
8464 As a special case, the returned alist also contains a pair whose
8465 car is the symbol `rest'. The cdr of this pair is a list
8466 containing all the items in the argument list that are not options
8467 of the form mentioned above.
8468
8469 The argument `--' is treated specially: all items in the argument
8470 list appearing after such an argument are not examined, and are
8471 returned in the special `rest' list.
8472
8473 This function does not parse normal single-character switches.
8474 You will need to parse them out of the `rest' list yourself.
8475
8cd57bd0
JB
8476** The read syntax for byte vectors and short vectors has changed.
8477
8478Instead of #bytes(...), write #y(...).
8479
8480Instead of #short(...), write #h(...).
8481
8482This may seem nutty, but, like the other uniform vectors, byte vectors
8483and short vectors want to have the same print and read syntax (and,
8484more basic, want to have read syntax!). Changing the read syntax to
8485use multiple characters after the hash sign breaks with the
8486conventions used in R5RS and the conventions used for the other
8487uniform vectors. It also introduces complexity in the current reader,
8488both on the C and Scheme levels. (The Right solution is probably to
8489change the syntax and prototypes for uniform vectors entirely.)
8490
8491
8492** The new module (ice-9 session) provides useful interactive functions.
8493
8494*** New procedure: (apropos REGEXP OPTION ...)
8495
8496Display a list of top-level variables whose names match REGEXP, and
8497the modules they are imported from. Each OPTION should be one of the
8498following symbols:
8499
8500 value --- Show the value of each matching variable.
8501 shadow --- Show bindings shadowed by subsequently imported modules.
8502 full --- Same as both `shadow' and `value'.
8503
8504For example:
8505
8506 guile> (apropos "trace" 'full)
8507 debug: trace #<procedure trace args>
8508 debug: untrace #<procedure untrace args>
8509 the-scm-module: display-backtrace #<compiled-closure #<primitive-procedure gsubr-apply>>
8510 the-scm-module: before-backtrace-hook ()
8511 the-scm-module: backtrace #<primitive-procedure backtrace>
8512 the-scm-module: after-backtrace-hook ()
8513 the-scm-module: has-shown-backtrace-hint? #f
6c0201ad 8514 guile>
8cd57bd0
JB
8515
8516** There are new functions and syntax for working with macros.
8517
8518Guile implements macros as a special object type. Any variable whose
8519top-level binding is a macro object acts as a macro. The macro object
8520specifies how the expression should be transformed before evaluation.
8521
8522*** Macro objects now print in a reasonable way, resembling procedures.
8523
8524*** New function: (macro? OBJ)
8525True iff OBJ is a macro object.
8526
8527*** New function: (primitive-macro? OBJ)
8528Like (macro? OBJ), but true only if OBJ is one of the Guile primitive
8529macro transformers, implemented in eval.c rather than Scheme code.
8530
dbdd0c16
JB
8531Why do we have this function?
8532- For symmetry with procedure? and primitive-procedure?,
8533- to allow custom print procedures to tell whether a macro is
8534 primitive, and display it differently, and
8535- to allow compilers and user-written evaluators to distinguish
8536 builtin special forms from user-defined ones, which could be
8537 compiled.
8538
8cd57bd0
JB
8539*** New function: (macro-type OBJ)
8540Return a value indicating what kind of macro OBJ is. Possible return
8541values are:
8542
8543 The symbol `syntax' --- a macro created by procedure->syntax.
8544 The symbol `macro' --- a macro created by procedure->macro.
8545 The symbol `macro!' --- a macro created by procedure->memoizing-macro.
6c0201ad 8546 The boolean #f --- if OBJ is not a macro object.
8cd57bd0
JB
8547
8548*** New function: (macro-name MACRO)
8549Return the name of the macro object MACRO's procedure, as returned by
8550procedure-name.
8551
8552*** New function: (macro-transformer MACRO)
8553Return the transformer procedure for MACRO.
8554
8555*** New syntax: (use-syntax MODULE ... TRANSFORMER)
8556
8557Specify a new macro expander to use in the current module. Each
8558MODULE is a module name, with the same meaning as in the `use-modules'
8559form; each named module's exported bindings are added to the current
8560top-level environment. TRANSFORMER is an expression evaluated in the
8561resulting environment which must yield a procedure to use as the
8562module's eval transformer: every expression evaluated in this module
8563is passed to this function, and the result passed to the Guile
6c0201ad 8564interpreter.
8cd57bd0
JB
8565
8566*** macro-eval! is removed. Use local-eval instead.
29521173 8567
8d9dcb3c
MV
8568** Some magic has been added to the printer to better handle user
8569written printing routines (like record printers, closure printers).
8570
8571The problem is that these user written routines must have access to
7fbd77df 8572the current `print-state' to be able to handle fancy things like
8d9dcb3c
MV
8573detection of circular references. These print-states have to be
8574passed to the builtin printing routines (display, write, etc) to
8575properly continue the print chain.
8576
8577We didn't want to change all existing print code so that it
8cd57bd0 8578explicitly passes thru a print state in addition to a port. Instead,
8d9dcb3c
MV
8579we extented the possible values that the builtin printing routines
8580accept as a `port'. In addition to a normal port, they now also take
8581a pair of a normal port and a print-state. Printing will go to the
8582port and the print-state will be used to control the detection of
8583circular references, etc. If the builtin function does not care for a
8584print-state, it is simply ignored.
8585
8586User written callbacks are now called with such a pair as their
8587`port', but because every function now accepts this pair as a PORT
8588argument, you don't have to worry about that. In fact, it is probably
8589safest to not check for these pairs.
8590
8591However, it is sometimes necessary to continue a print chain on a
8592different port, for example to get a intermediate string
8593representation of the printed value, mangle that string somehow, and
8594then to finally print the mangled string. Use the new function
8595
8596 inherit-print-state OLD-PORT NEW-PORT
8597
8598for this. It constructs a new `port' that prints to NEW-PORT but
8599inherits the print-state of OLD-PORT.
8600
ef1ea498
MD
8601** struct-vtable-offset renamed to vtable-offset-user
8602
8603** New constants: vtable-index-layout, vtable-index-vtable, vtable-index-printer
8604
e478dffa
MD
8605** There is now a third optional argument to make-vtable-vtable
8606 (and fourth to make-struct) when constructing new types (vtables).
8607 This argument initializes field vtable-index-printer of the vtable.
ef1ea498 8608
4851dc57
MV
8609** The detection of circular references has been extended to structs.
8610That is, a structure that -- in the process of being printed -- prints
8611itself does not lead to infinite recursion.
8612
8613** There is now some basic support for fluids. Please read
8614"libguile/fluid.h" to find out more. It is accessible from Scheme with
8615the following functions and macros:
8616
9c3fb66f
MV
8617Function: make-fluid
8618
8619 Create a new fluid object. Fluids are not special variables or
8620 some other extension to the semantics of Scheme, but rather
8621 ordinary Scheme objects. You can store them into variables (that
8622 are still lexically scoped, of course) or into any other place you
8623 like. Every fluid has a initial value of `#f'.
04c76b58 8624
9c3fb66f 8625Function: fluid? OBJ
04c76b58 8626
9c3fb66f 8627 Test whether OBJ is a fluid.
04c76b58 8628
9c3fb66f
MV
8629Function: fluid-ref FLUID
8630Function: fluid-set! FLUID VAL
04c76b58
MV
8631
8632 Access/modify the fluid FLUID. Modifications are only visible
8633 within the current dynamic root (that includes threads).
8634
9c3fb66f
MV
8635Function: with-fluids* FLUIDS VALUES THUNK
8636
8637 FLUIDS is a list of fluids and VALUES a corresponding list of
8638 values for these fluids. Before THUNK gets called the values are
6c0201ad 8639 installed in the fluids and the old values of the fluids are
9c3fb66f
MV
8640 saved in the VALUES list. When the flow of control leaves THUNK
8641 or reenters it, the values get swapped again. You might think of
8642 this as a `safe-fluid-excursion'. Note that the VALUES list is
8643 modified by `with-fluids*'.
8644
8645Macro: with-fluids ((FLUID VALUE) ...) FORM ...
8646
8647 The same as `with-fluids*' but with a different syntax. It looks
8648 just like `let', but both FLUID and VALUE are evaluated. Remember,
8649 fluids are not special variables but ordinary objects. FLUID
8650 should evaluate to a fluid.
04c76b58 8651
e2d6569c 8652** Changes to system call interfaces:
64d01d13 8653
e2d6569c 8654*** close-port, close-input-port and close-output-port now return a
64d01d13
GH
8655boolean instead of an `unspecified' object. #t means that the port
8656was successfully closed, while #f means it was already closed. It is
8657also now possible for these procedures to raise an exception if an
8658error occurs (some errors from write can be delayed until close.)
8659
e2d6569c 8660*** the first argument to chmod, fcntl, ftell and fseek can now be a
6afcd3b2
GH
8661file descriptor.
8662
e2d6569c 8663*** the third argument to fcntl is now optional.
6afcd3b2 8664
e2d6569c 8665*** the first argument to chown can now be a file descriptor or a port.
6afcd3b2 8666
e2d6569c 8667*** the argument to stat can now be a port.
6afcd3b2 8668
e2d6569c 8669*** The following new procedures have been added (most use scsh
64d01d13
GH
8670interfaces):
8671
e2d6569c 8672*** procedure: close PORT/FD
ec4ab4fd
GH
8673 Similar to close-port (*note close-port: Closing Ports.), but also
8674 works on file descriptors. A side effect of closing a file
8675 descriptor is that any ports using that file descriptor are moved
8676 to a different file descriptor and have their revealed counts set
8677 to zero.
8678
e2d6569c 8679*** procedure: port->fdes PORT
ec4ab4fd
GH
8680 Returns the integer file descriptor underlying PORT. As a side
8681 effect the revealed count of PORT is incremented.
8682
e2d6569c 8683*** procedure: fdes->ports FDES
ec4ab4fd
GH
8684 Returns a list of existing ports which have FDES as an underlying
8685 file descriptor, without changing their revealed counts.
8686
e2d6569c 8687*** procedure: fdes->inport FDES
ec4ab4fd
GH
8688 Returns an existing input port which has FDES as its underlying
8689 file descriptor, if one exists, and increments its revealed count.
8690 Otherwise, returns a new input port with a revealed count of 1.
8691
e2d6569c 8692*** procedure: fdes->outport FDES
ec4ab4fd
GH
8693 Returns an existing output port which has FDES as its underlying
8694 file descriptor, if one exists, and increments its revealed count.
8695 Otherwise, returns a new output port with a revealed count of 1.
8696
8697 The next group of procedures perform a `dup2' system call, if NEWFD
8698(an integer) is supplied, otherwise a `dup'. The file descriptor to be
8699duplicated can be supplied as an integer or contained in a port. The
64d01d13
GH
8700type of value returned varies depending on which procedure is used.
8701
ec4ab4fd
GH
8702 All procedures also have the side effect when performing `dup2' that
8703any ports using NEWFD are moved to a different file descriptor and have
64d01d13
GH
8704their revealed counts set to zero.
8705
e2d6569c 8706*** procedure: dup->fdes PORT/FD [NEWFD]
ec4ab4fd 8707 Returns an integer file descriptor.
64d01d13 8708
e2d6569c 8709*** procedure: dup->inport PORT/FD [NEWFD]
ec4ab4fd 8710 Returns a new input port using the new file descriptor.
64d01d13 8711
e2d6569c 8712*** procedure: dup->outport PORT/FD [NEWFD]
ec4ab4fd 8713 Returns a new output port using the new file descriptor.
64d01d13 8714
e2d6569c 8715*** procedure: dup PORT/FD [NEWFD]
ec4ab4fd
GH
8716 Returns a new port if PORT/FD is a port, with the same mode as the
8717 supplied port, otherwise returns an integer file descriptor.
64d01d13 8718
e2d6569c 8719*** procedure: dup->port PORT/FD MODE [NEWFD]
ec4ab4fd
GH
8720 Returns a new port using the new file descriptor. MODE supplies a
8721 mode string for the port (*note open-file: File Ports.).
64d01d13 8722
e2d6569c 8723*** procedure: setenv NAME VALUE
ec4ab4fd
GH
8724 Modifies the environment of the current process, which is also the
8725 default environment inherited by child processes.
64d01d13 8726
ec4ab4fd
GH
8727 If VALUE is `#f', then NAME is removed from the environment.
8728 Otherwise, the string NAME=VALUE is added to the environment,
8729 replacing any existing string with name matching NAME.
64d01d13 8730
ec4ab4fd 8731 The return value is unspecified.
956055a9 8732
e2d6569c 8733*** procedure: truncate-file OBJ SIZE
6afcd3b2
GH
8734 Truncates the file referred to by OBJ to at most SIZE bytes. OBJ
8735 can be a string containing a file name or an integer file
8736 descriptor or port open for output on the file. The underlying
8737 system calls are `truncate' and `ftruncate'.
8738
8739 The return value is unspecified.
8740
e2d6569c 8741*** procedure: setvbuf PORT MODE [SIZE]
7a6f1ffa
GH
8742 Set the buffering mode for PORT. MODE can be:
8743 `_IONBF'
8744 non-buffered
8745
8746 `_IOLBF'
8747 line buffered
8748
8749 `_IOFBF'
8750 block buffered, using a newly allocated buffer of SIZE bytes.
8751 However if SIZE is zero or unspecified, the port will be made
8752 non-buffered.
8753
8754 This procedure should not be used after I/O has been performed with
8755 the port.
8756
8757 Ports are usually block buffered by default, with a default buffer
8758 size. Procedures e.g., *Note open-file: File Ports, which accept a
8759 mode string allow `0' to be added to request an unbuffered port.
8760
e2d6569c 8761*** procedure: fsync PORT/FD
6afcd3b2
GH
8762 Copies any unwritten data for the specified output file descriptor
8763 to disk. If PORT/FD is a port, its buffer is flushed before the
8764 underlying file descriptor is fsync'd. The return value is
8765 unspecified.
8766
e2d6569c 8767*** procedure: open-fdes PATH FLAGS [MODES]
6afcd3b2
GH
8768 Similar to `open' but returns a file descriptor instead of a port.
8769
e2d6569c 8770*** procedure: execle PATH ENV [ARG] ...
6afcd3b2
GH
8771 Similar to `execl', but the environment of the new process is
8772 specified by ENV, which must be a list of strings as returned by
8773 the `environ' procedure.
8774
8775 This procedure is currently implemented using the `execve' system
8776 call, but we call it `execle' because of its Scheme calling
8777 interface.
8778
e2d6569c 8779*** procedure: strerror ERRNO
ec4ab4fd
GH
8780 Returns the Unix error message corresponding to ERRNO, an integer.
8781
e2d6569c 8782*** procedure: primitive-exit [STATUS]
6afcd3b2
GH
8783 Terminate the current process without unwinding the Scheme stack.
8784 This is would typically be useful after a fork. The exit status
8785 is STATUS if supplied, otherwise zero.
8786
e2d6569c 8787*** procedure: times
6afcd3b2
GH
8788 Returns an object with information about real and processor time.
8789 The following procedures accept such an object as an argument and
8790 return a selected component:
8791
8792 `tms:clock'
8793 The current real time, expressed as time units relative to an
8794 arbitrary base.
8795
8796 `tms:utime'
8797 The CPU time units used by the calling process.
8798
8799 `tms:stime'
8800 The CPU time units used by the system on behalf of the
8801 calling process.
8802
8803 `tms:cutime'
8804 The CPU time units used by terminated child processes of the
8805 calling process, whose status has been collected (e.g., using
8806 `waitpid').
8807
8808 `tms:cstime'
8809 Similarly, the CPU times units used by the system on behalf of
8810 terminated child processes.
7ad3c1e7 8811
e2d6569c
JB
8812** Removed: list-length
8813** Removed: list-append, list-append!
8814** Removed: list-reverse, list-reverse!
8815
8816** array-map renamed to array-map!
8817
8818** serial-array-map renamed to serial-array-map!
8819
660f41fa
MD
8820** catch doesn't take #f as first argument any longer
8821
8822Previously, it was possible to pass #f instead of a key to `catch'.
8823That would cause `catch' to pass a jump buffer object to the procedure
8824passed as second argument. The procedure could then use this jump
8825buffer objekt as an argument to throw.
8826
8827This mechanism has been removed since its utility doesn't motivate the
8828extra complexity it introduces.
8829
332d00f6
JB
8830** The `#/' notation for lists now provokes a warning message from Guile.
8831This syntax will be removed from Guile in the near future.
8832
8833To disable the warning message, set the GUILE_HUSH environment
8834variable to any non-empty value.
8835
8cd57bd0
JB
8836** The newline character now prints as `#\newline', following the
8837normal Scheme notation, not `#\nl'.
8838
c484bf7f
JB
8839* Changes to the gh_ interface
8840
8986901b
JB
8841** The gh_enter function now takes care of loading the Guile startup files.
8842gh_enter works by calling scm_boot_guile; see the remarks below.
8843
5424b4f7
MD
8844** Function: void gh_write (SCM x)
8845
8846Write the printed representation of the scheme object x to the current
8847output port. Corresponds to the scheme level `write'.
8848
3a97e020
MD
8849** gh_list_length renamed to gh_length.
8850
8d6787b6
MG
8851** vector handling routines
8852
8853Several major changes. In particular, gh_vector() now resembles
8854(vector ...) (with a caveat -- see manual), and gh_make_vector() now
956328d2
MG
8855exists and behaves like (make-vector ...). gh_vset() and gh_vref()
8856have been renamed gh_vector_set_x() and gh_vector_ref(). Some missing
8d6787b6
MG
8857vector-related gh_ functions have been implemented.
8858
7fee59bd
MG
8859** pair and list routines
8860
8861Implemented several of the R4RS pair and list functions that were
8862missing.
8863
171422a9
MD
8864** gh_scm2doubles, gh_doubles2scm, gh_doubles2dvect
8865
8866New function. Converts double arrays back and forth between Scheme
8867and C.
8868
c484bf7f
JB
8869* Changes to the scm_ interface
8870
8986901b
JB
8871** The function scm_boot_guile now takes care of loading the startup files.
8872
8873Guile's primary initialization function, scm_boot_guile, now takes
8874care of loading `boot-9.scm', in the `ice-9' module, to initialize
8875Guile, define the module system, and put together some standard
8876bindings. It also loads `init.scm', which is intended to hold
8877site-specific initialization code.
8878
8879Since Guile cannot operate properly until boot-9.scm is loaded, there
8880is no reason to separate loading boot-9.scm from Guile's other
8881initialization processes.
8882
8883This job used to be done by scm_compile_shell_switches, which didn't
8884make much sense; in particular, it meant that people using Guile for
8885non-shell-like applications had to jump through hoops to get Guile
8886initialized properly.
8887
8888** The function scm_compile_shell_switches no longer loads the startup files.
8889Now, Guile always loads the startup files, whenever it is initialized;
8890see the notes above for scm_boot_guile and scm_load_startup_files.
8891
8892** Function: scm_load_startup_files
8893This new function takes care of loading Guile's initialization file
8894(`boot-9.scm'), and the site initialization file, `init.scm'. Since
8895this is always called by the Guile initialization process, it's
8896probably not too useful to call this yourself, but it's there anyway.
8897
87148d9e
JB
8898** The semantics of smob marking have changed slightly.
8899
8900The smob marking function (the `mark' member of the scm_smobfuns
8901structure) is no longer responsible for setting the mark bit on the
8902smob. The generic smob handling code in the garbage collector will
8903set this bit. The mark function need only ensure that any other
8904objects the smob refers to get marked.
8905
8906Note that this change means that the smob's GC8MARK bit is typically
8907already set upon entry to the mark function. Thus, marking functions
8908which look like this:
8909
8910 {
8911 if (SCM_GC8MARKP (ptr))
8912 return SCM_BOOL_F;
8913 SCM_SETGC8MARK (ptr);
8914 ... mark objects to which the smob refers ...
8915 }
8916
8917are now incorrect, since they will return early, and fail to mark any
8918other objects the smob refers to. Some code in the Guile library used
8919to work this way.
8920
1cf84ea5
JB
8921** The semantics of the I/O port functions in scm_ptobfuns have changed.
8922
8923If you have implemented your own I/O port type, by writing the
8924functions required by the scm_ptobfuns and then calling scm_newptob,
8925you will need to change your functions slightly.
8926
8927The functions in a scm_ptobfuns structure now expect the port itself
8928as their argument; they used to expect the `stream' member of the
8929port's scm_port_table structure. This allows functions in an
8930scm_ptobfuns structure to easily access the port's cell (and any flags
8931it its CAR), and the port's scm_port_table structure.
8932
8933Guile now passes the I/O port itself as the `port' argument in the
8934following scm_ptobfuns functions:
8935
8936 int (*free) (SCM port);
8937 int (*fputc) (int, SCM port);
8938 int (*fputs) (char *, SCM port);
8939 scm_sizet (*fwrite) SCM_P ((char *ptr,
8940 scm_sizet size,
8941 scm_sizet nitems,
8942 SCM port));
8943 int (*fflush) (SCM port);
8944 int (*fgetc) (SCM port);
8945 int (*fclose) (SCM port);
8946
8947The interfaces to the `mark', `print', `equalp', and `fgets' methods
8948are unchanged.
8949
8950If you have existing code which defines its own port types, it is easy
8951to convert your code to the new interface; simply apply SCM_STREAM to
8952the port argument to yield the value you code used to expect.
8953
8954Note that since both the port and the stream have the same type in the
8955C code --- they are both SCM values --- the C compiler will not remind
8956you if you forget to update your scm_ptobfuns functions.
8957
8958
933a7411
MD
8959** Function: int scm_internal_select (int fds,
8960 SELECT_TYPE *rfds,
8961 SELECT_TYPE *wfds,
8962 SELECT_TYPE *efds,
8963 struct timeval *timeout);
8964
8965This is a replacement for the `select' function provided by the OS.
8966It enables I/O blocking and sleeping to happen for one cooperative
8967thread without blocking other threads. It also avoids busy-loops in
8968these situations. It is intended that all I/O blocking and sleeping
8969will finally go through this function. Currently, this function is
8970only available on systems providing `gettimeofday' and `select'.
8971
5424b4f7
MD
8972** Function: SCM scm_internal_stack_catch (SCM tag,
8973 scm_catch_body_t body,
8974 void *body_data,
8975 scm_catch_handler_t handler,
8976 void *handler_data)
8977
8978A new sibling to the other two C level `catch' functions
8979scm_internal_catch and scm_internal_lazy_catch. Use it if you want
8980the stack to be saved automatically into the variable `the-last-stack'
8981(scm_the_last_stack_var) on error. This is necessary if you want to
8982use advanced error reporting, such as calling scm_display_error and
8983scm_display_backtrace. (They both take a stack object as argument.)
8984
df366c26
MD
8985** Function: SCM scm_spawn_thread (scm_catch_body_t body,
8986 void *body_data,
8987 scm_catch_handler_t handler,
8988 void *handler_data)
8989
8990Spawns a new thread. It does a job similar to
8991scm_call_with_new_thread but takes arguments more suitable when
8992spawning threads from application C code.
8993
88482b31
MD
8994** The hook scm_error_callback has been removed. It was originally
8995intended as a way for the user to install his own error handler. But
8996that method works badly since it intervenes between throw and catch,
8997thereby changing the semantics of expressions like (catch #t ...).
8998The correct way to do it is to use one of the C level catch functions
8999in throw.c: scm_internal_catch/lazy_catch/stack_catch.
9000
3a97e020
MD
9001** Removed functions:
9002
9003scm_obj_length, scm_list_length, scm_list_append, scm_list_append_x,
9004scm_list_reverse, scm_list_reverse_x
9005
9006** New macros: SCM_LISTn where n is one of the integers 0-9.
9007
9008These can be used for pretty list creation from C. The idea is taken
9009from Erick Gallesio's STk.
9010
298aa6e3
MD
9011** scm_array_map renamed to scm_array_map_x
9012
527da704
MD
9013** mbstrings are now removed
9014
9015This means that the type codes scm_tc7_mb_string and
9016scm_tc7_mb_substring has been removed.
9017
8cd57bd0
JB
9018** scm_gen_putc, scm_gen_puts, scm_gen_write, and scm_gen_getc have changed.
9019
9020Since we no longer support multi-byte strings, these I/O functions
9021have been simplified, and renamed. Here are their old names, and
9022their new names and arguments:
9023
9024scm_gen_putc -> void scm_putc (int c, SCM port);
9025scm_gen_puts -> void scm_puts (char *s, SCM port);
9026scm_gen_write -> void scm_lfwrite (char *ptr, scm_sizet size, SCM port);
9027scm_gen_getc -> void scm_getc (SCM port);
9028
9029
527da704
MD
9030** The macros SCM_TYP7D and SCM_TYP7SD has been removed.
9031
9032** The macro SCM_TYP7S has taken the role of the old SCM_TYP7D
9033
9034SCM_TYP7S now masks away the bit which distinguishes substrings from
9035strings.
9036
660f41fa
MD
9037** scm_catch_body_t: Backward incompatible change!
9038
9039Body functions to scm_internal_catch and friends do not any longer
9040take a second argument. This is because it is no longer possible to
9041pass a #f arg to catch.
9042
a8e05009
JB
9043** Calls to scm_protect_object and scm_unprotect now nest properly.
9044
9045The function scm_protect_object protects its argument from being freed
9046by the garbage collector. scm_unprotect_object removes that
9047protection.
9048
9049These functions now nest properly. That is, for every object O, there
9050is a counter which scm_protect_object(O) increments and
9051scm_unprotect_object(O) decrements, if the counter is greater than
9052zero. Every object's counter is zero when it is first created. If an
9053object's counter is greater than zero, the garbage collector will not
9054reclaim its storage.
9055
9056This allows you to use scm_protect_object in your code without
9057worrying that some other function you call will call
9058scm_unprotect_object, and allow it to be freed. Assuming that the
9059functions you call are well-behaved, and unprotect only those objects
9060they protect, you can follow the same rule and have confidence that
9061objects will be freed only at appropriate times.
9062
c484bf7f
JB
9063\f
9064Changes in Guile 1.2 (released Tuesday, June 24 1997):
cf78e9e8 9065
737c9113
JB
9066* Changes to the distribution
9067
832b09ed
JB
9068** Nightly snapshots are now available from ftp.red-bean.com.
9069The old server, ftp.cyclic.com, has been relinquished to its rightful
9070owner.
9071
9072Nightly snapshots of the Guile development sources are now available via
9073anonymous FTP from ftp.red-bean.com, as /pub/guile/guile-snap.tar.gz.
9074
9075Via the web, that's: ftp://ftp.red-bean.com/pub/guile/guile-snap.tar.gz
9076For getit, that's: ftp.red-bean.com:/pub/guile/guile-snap.tar.gz
9077
0fcab5ed
JB
9078** To run Guile without installing it, the procedure has changed a bit.
9079
9080If you used a separate build directory to compile Guile, you'll need
9081to include the build directory in SCHEME_LOAD_PATH, as well as the
9082source directory. See the `INSTALL' file for examples.
9083
737c9113
JB
9084* Changes to the procedure for linking libguile with your programs
9085
94982a4e
JB
9086** The standard Guile load path for Scheme code now includes
9087$(datadir)/guile (usually /usr/local/share/guile). This means that
9088you can install your own Scheme files there, and Guile will find them.
9089(Previous versions of Guile only checked a directory whose name
9090contained the Guile version number, so you had to re-install or move
9091your Scheme sources each time you installed a fresh version of Guile.)
9092
9093The load path also includes $(datadir)/guile/site; we recommend
9094putting individual Scheme files there. If you want to install a
9095package with multiple source files, create a directory for them under
9096$(datadir)/guile.
9097
9098** Guile 1.2 will now use the Rx regular expression library, if it is
9099installed on your system. When you are linking libguile into your own
9100programs, this means you will have to link against -lguile, -lqt (if
9101you configured Guile with thread support), and -lrx.
27590f82
JB
9102
9103If you are using autoconf to generate configuration scripts for your
9104application, the following lines should suffice to add the appropriate
9105libraries to your link command:
9106
9107### Find Rx, quickthreads and libguile.
9108AC_CHECK_LIB(rx, main)
9109AC_CHECK_LIB(qt, main)
9110AC_CHECK_LIB(guile, scm_shell)
9111
94982a4e
JB
9112The Guile 1.2 distribution does not contain sources for the Rx
9113library, as Guile 1.0 did. If you want to use Rx, you'll need to
9114retrieve it from a GNU FTP site and install it separately.
9115
b83b8bee
JB
9116* Changes to Scheme functions and syntax
9117
e035e7e6
MV
9118** The dynamic linking features of Guile are now enabled by default.
9119You can disable them by giving the `--disable-dynamic-linking' option
9120to configure.
9121
e035e7e6
MV
9122 (dynamic-link FILENAME)
9123
9124 Find the object file denoted by FILENAME (a string) and link it
9125 into the running Guile application. When everything works out,
9126 return a Scheme object suitable for representing the linked object
9127 file. Otherwise an error is thrown. How object files are
9128 searched is system dependent.
9129
9130 (dynamic-object? VAL)
9131
9132 Determine whether VAL represents a dynamically linked object file.
9133
9134 (dynamic-unlink DYNOBJ)
9135
9136 Unlink the indicated object file from the application. DYNOBJ
9137 should be one of the values returned by `dynamic-link'.
9138
9139 (dynamic-func FUNCTION DYNOBJ)
9140
9141 Search the C function indicated by FUNCTION (a string or symbol)
9142 in DYNOBJ and return some Scheme object that can later be used
9143 with `dynamic-call' to actually call this function. Right now,
9144 these Scheme objects are formed by casting the address of the
9145 function to `long' and converting this number to its Scheme
9146 representation.
9147
9148 (dynamic-call FUNCTION DYNOBJ)
9149
9150 Call the C function indicated by FUNCTION and DYNOBJ. The
9151 function is passed no arguments and its return value is ignored.
9152 When FUNCTION is something returned by `dynamic-func', call that
9153 function and ignore DYNOBJ. When FUNCTION is a string (or symbol,
9154 etc.), look it up in DYNOBJ; this is equivalent to
9155
9156 (dynamic-call (dynamic-func FUNCTION DYNOBJ) #f)
9157
9158 Interrupts are deferred while the C function is executing (with
9159 SCM_DEFER_INTS/SCM_ALLOW_INTS).
9160
9161 (dynamic-args-call FUNCTION DYNOBJ ARGS)
9162
9163 Call the C function indicated by FUNCTION and DYNOBJ, but pass it
9164 some arguments and return its return value. The C function is
9165 expected to take two arguments and return an `int', just like
9166 `main':
9167
9168 int c_func (int argc, char **argv);
9169
9170 ARGS must be a list of strings and is converted into an array of
9171 `char *'. The array is passed in ARGV and its size in ARGC. The
9172 return value is converted to a Scheme number and returned from the
9173 call to `dynamic-args-call'.
9174
0fcab5ed
JB
9175When dynamic linking is disabled or not supported on your system,
9176the above functions throw errors, but they are still available.
9177
e035e7e6
MV
9178Here is a small example that works on GNU/Linux:
9179
9180 (define libc-obj (dynamic-link "libc.so"))
9181 (dynamic-args-call 'rand libc-obj '())
9182
9183See the file `libguile/DYNAMIC-LINKING' for additional comments.
9184
27590f82 9185** The #/ syntax for module names is depreciated, and will be removed
6c0201ad 9186in a future version of Guile. Instead of
27590f82
JB
9187
9188 #/foo/bar/baz
9189
9190instead write
9191
9192 (foo bar baz)
9193
9194The latter syntax is more consistent with existing Lisp practice.
9195
5dade857
MV
9196** Guile now does fancier printing of structures. Structures are the
9197underlying implementation for records, which in turn are used to
9198implement modules, so all of these object now print differently and in
9199a more informative way.
9200
161029df
JB
9201The Scheme printer will examine the builtin variable *struct-printer*
9202whenever it needs to print a structure object. When this variable is
9203not `#f' it is deemed to be a procedure and will be applied to the
9204structure object and the output port. When *struct-printer* is `#f'
9205or the procedure return `#f' the structure object will be printed in
9206the boring #<struct 80458270> form.
5dade857
MV
9207
9208This hook is used by some routines in ice-9/boot-9.scm to implement
9209type specific printing routines. Please read the comments there about
9210"printing structs".
9211
9212One of the more specific uses of structs are records. The printing
9213procedure that could be passed to MAKE-RECORD-TYPE is now actually
9214called. It should behave like a *struct-printer* procedure (described
9215above).
9216
b83b8bee
JB
9217** Guile now supports a new R4RS-compliant syntax for keywords. A
9218token of the form #:NAME, where NAME has the same syntax as a Scheme
9219symbol, is the external representation of the keyword named NAME.
9220Keyword objects print using this syntax as well, so values containing
1e5afba0
JB
9221keyword objects can be read back into Guile. When used in an
9222expression, keywords are self-quoting objects.
b83b8bee
JB
9223
9224Guile suports this read syntax, and uses this print syntax, regardless
9225of the current setting of the `keyword' read option. The `keyword'
9226read option only controls whether Guile recognizes the `:NAME' syntax,
9227which is incompatible with R4RS. (R4RS says such token represent
9228symbols.)
737c9113
JB
9229
9230** Guile has regular expression support again. Guile 1.0 included
9231functions for matching regular expressions, based on the Rx library.
9232In Guile 1.1, the Guile/Rx interface was removed to simplify the
9233distribution, and thus Guile had no regular expression support. Guile
94982a4e
JB
92341.2 again supports the most commonly used functions, and supports all
9235of SCSH's regular expression functions.
2409cdfa 9236
94982a4e
JB
9237If your system does not include a POSIX regular expression library,
9238and you have not linked Guile with a third-party regexp library such as
9239Rx, these functions will not be available. You can tell whether your
9240Guile installation includes regular expression support by checking
9241whether the `*features*' list includes the `regex' symbol.
737c9113 9242
94982a4e 9243*** regexp functions
161029df 9244
94982a4e
JB
9245By default, Guile supports POSIX extended regular expressions. That
9246means that the characters `(', `)', `+' and `?' are special, and must
9247be escaped if you wish to match the literal characters.
e1a191a8 9248
94982a4e
JB
9249This regular expression interface was modeled after that implemented
9250by SCSH, the Scheme Shell. It is intended to be upwardly compatible
9251with SCSH regular expressions.
9252
9253**** Function: string-match PATTERN STR [START]
9254 Compile the string PATTERN into a regular expression and compare
9255 it with STR. The optional numeric argument START specifies the
9256 position of STR at which to begin matching.
9257
9258 `string-match' returns a "match structure" which describes what,
9259 if anything, was matched by the regular expression. *Note Match
9260 Structures::. If STR does not match PATTERN at all,
9261 `string-match' returns `#f'.
9262
9263 Each time `string-match' is called, it must compile its PATTERN
9264argument into a regular expression structure. This operation is
9265expensive, which makes `string-match' inefficient if the same regular
9266expression is used several times (for example, in a loop). For better
9267performance, you can compile a regular expression in advance and then
9268match strings against the compiled regexp.
9269
9270**** Function: make-regexp STR [FLAGS]
9271 Compile the regular expression described by STR, and return the
9272 compiled regexp structure. If STR does not describe a legal
9273 regular expression, `make-regexp' throws a
9274 `regular-expression-syntax' error.
9275
9276 FLAGS may be the bitwise-or of one or more of the following:
9277
9278**** Constant: regexp/extended
9279 Use POSIX Extended Regular Expression syntax when interpreting
9280 STR. If not set, POSIX Basic Regular Expression syntax is used.
9281 If the FLAGS argument is omitted, we assume regexp/extended.
9282
9283**** Constant: regexp/icase
9284 Do not differentiate case. Subsequent searches using the
9285 returned regular expression will be case insensitive.
9286
9287**** Constant: regexp/newline
9288 Match-any-character operators don't match a newline.
9289
9290 A non-matching list ([^...]) not containing a newline matches a
9291 newline.
9292
9293 Match-beginning-of-line operator (^) matches the empty string
9294 immediately after a newline, regardless of whether the FLAGS
9295 passed to regexp-exec contain regexp/notbol.
9296
9297 Match-end-of-line operator ($) matches the empty string
9298 immediately before a newline, regardless of whether the FLAGS
9299 passed to regexp-exec contain regexp/noteol.
9300
9301**** Function: regexp-exec REGEXP STR [START [FLAGS]]
9302 Match the compiled regular expression REGEXP against `str'. If
9303 the optional integer START argument is provided, begin matching
9304 from that position in the string. Return a match structure
9305 describing the results of the match, or `#f' if no match could be
9306 found.
9307
9308 FLAGS may be the bitwise-or of one or more of the following:
9309
9310**** Constant: regexp/notbol
9311 The match-beginning-of-line operator always fails to match (but
9312 see the compilation flag regexp/newline above) This flag may be
9313 used when different portions of a string are passed to
9314 regexp-exec and the beginning of the string should not be
9315 interpreted as the beginning of the line.
9316
9317**** Constant: regexp/noteol
9318 The match-end-of-line operator always fails to match (but see the
9319 compilation flag regexp/newline above)
9320
9321**** Function: regexp? OBJ
9322 Return `#t' if OBJ is a compiled regular expression, or `#f'
9323 otherwise.
9324
9325 Regular expressions are commonly used to find patterns in one string
9326and replace them with the contents of another string.
9327
9328**** Function: regexp-substitute PORT MATCH [ITEM...]
9329 Write to the output port PORT selected contents of the match
9330 structure MATCH. Each ITEM specifies what should be written, and
9331 may be one of the following arguments:
9332
9333 * A string. String arguments are written out verbatim.
9334
9335 * An integer. The submatch with that number is written.
9336
9337 * The symbol `pre'. The portion of the matched string preceding
9338 the regexp match is written.
9339
9340 * The symbol `post'. The portion of the matched string
9341 following the regexp match is written.
9342
9343 PORT may be `#f', in which case nothing is written; instead,
9344 `regexp-substitute' constructs a string from the specified ITEMs
9345 and returns that.
9346
9347**** Function: regexp-substitute/global PORT REGEXP TARGET [ITEM...]
9348 Similar to `regexp-substitute', but can be used to perform global
9349 substitutions on STR. Instead of taking a match structure as an
9350 argument, `regexp-substitute/global' takes two string arguments: a
9351 REGEXP string describing a regular expression, and a TARGET string
9352 which should be matched against this regular expression.
9353
9354 Each ITEM behaves as in REGEXP-SUBSTITUTE, with the following
9355 exceptions:
9356
9357 * A function may be supplied. When this function is called, it
9358 will be passed one argument: a match structure for a given
9359 regular expression match. It should return a string to be
9360 written out to PORT.
9361
9362 * The `post' symbol causes `regexp-substitute/global' to recurse
9363 on the unmatched portion of STR. This *must* be supplied in
9364 order to perform global search-and-replace on STR; if it is
9365 not present among the ITEMs, then `regexp-substitute/global'
9366 will return after processing a single match.
9367
9368*** Match Structures
9369
9370 A "match structure" is the object returned by `string-match' and
9371`regexp-exec'. It describes which portion of a string, if any, matched
9372the given regular expression. Match structures include: a reference to
9373the string that was checked for matches; the starting and ending
9374positions of the regexp match; and, if the regexp included any
9375parenthesized subexpressions, the starting and ending positions of each
9376submatch.
9377
9378 In each of the regexp match functions described below, the `match'
9379argument must be a match structure returned by a previous call to
9380`string-match' or `regexp-exec'. Most of these functions return some
9381information about the original target string that was matched against a
9382regular expression; we will call that string TARGET for easy reference.
9383
9384**** Function: regexp-match? OBJ
9385 Return `#t' if OBJ is a match structure returned by a previous
9386 call to `regexp-exec', or `#f' otherwise.
9387
9388**** Function: match:substring MATCH [N]
9389 Return the portion of TARGET matched by subexpression number N.
9390 Submatch 0 (the default) represents the entire regexp match. If
9391 the regular expression as a whole matched, but the subexpression
9392 number N did not match, return `#f'.
9393
9394**** Function: match:start MATCH [N]
9395 Return the starting position of submatch number N.
9396
9397**** Function: match:end MATCH [N]
9398 Return the ending position of submatch number N.
9399
9400**** Function: match:prefix MATCH
9401 Return the unmatched portion of TARGET preceding the regexp match.
9402
9403**** Function: match:suffix MATCH
9404 Return the unmatched portion of TARGET following the regexp match.
9405
9406**** Function: match:count MATCH
9407 Return the number of parenthesized subexpressions from MATCH.
9408 Note that the entire regular expression match itself counts as a
9409 subexpression, and failed submatches are included in the count.
9410
9411**** Function: match:string MATCH
9412 Return the original TARGET string.
9413
9414*** Backslash Escapes
9415
9416 Sometimes you will want a regexp to match characters like `*' or `$'
9417exactly. For example, to check whether a particular string represents
9418a menu entry from an Info node, it would be useful to match it against
9419a regexp like `^* [^:]*::'. However, this won't work; because the
9420asterisk is a metacharacter, it won't match the `*' at the beginning of
9421the string. In this case, we want to make the first asterisk un-magic.
9422
9423 You can do this by preceding the metacharacter with a backslash
9424character `\'. (This is also called "quoting" the metacharacter, and
9425is known as a "backslash escape".) When Guile sees a backslash in a
9426regular expression, it considers the following glyph to be an ordinary
9427character, no matter what special meaning it would ordinarily have.
9428Therefore, we can make the above example work by changing the regexp to
9429`^\* [^:]*::'. The `\*' sequence tells the regular expression engine
9430to match only a single asterisk in the target string.
9431
9432 Since the backslash is itself a metacharacter, you may force a
9433regexp to match a backslash in the target string by preceding the
9434backslash with itself. For example, to find variable references in a
9435TeX program, you might want to find occurrences of the string `\let\'
9436followed by any number of alphabetic characters. The regular expression
9437`\\let\\[A-Za-z]*' would do this: the double backslashes in the regexp
9438each match a single backslash in the target string.
9439
9440**** Function: regexp-quote STR
9441 Quote each special character found in STR with a backslash, and
9442 return the resulting string.
9443
9444 *Very important:* Using backslash escapes in Guile source code (as
9445in Emacs Lisp or C) can be tricky, because the backslash character has
9446special meaning for the Guile reader. For example, if Guile encounters
9447the character sequence `\n' in the middle of a string while processing
9448Scheme code, it replaces those characters with a newline character.
9449Similarly, the character sequence `\t' is replaced by a horizontal tab.
9450Several of these "escape sequences" are processed by the Guile reader
9451before your code is executed. Unrecognized escape sequences are
9452ignored: if the characters `\*' appear in a string, they will be
9453translated to the single character `*'.
9454
9455 This translation is obviously undesirable for regular expressions,
9456since we want to be able to include backslashes in a string in order to
9457escape regexp metacharacters. Therefore, to make sure that a backslash
9458is preserved in a string in your Guile program, you must use *two*
9459consecutive backslashes:
9460
9461 (define Info-menu-entry-pattern (make-regexp "^\\* [^:]*"))
9462
9463 The string in this example is preprocessed by the Guile reader before
9464any code is executed. The resulting argument to `make-regexp' is the
9465string `^\* [^:]*', which is what we really want.
9466
9467 This also means that in order to write a regular expression that
9468matches a single backslash character, the regular expression string in
9469the source code must include *four* backslashes. Each consecutive pair
9470of backslashes gets translated by the Guile reader to a single
9471backslash, and the resulting double-backslash is interpreted by the
9472regexp engine as matching a single backslash character. Hence:
9473
9474 (define tex-variable-pattern (make-regexp "\\\\let\\\\=[A-Za-z]*"))
9475
9476 The reason for the unwieldiness of this syntax is historical. Both
9477regular expression pattern matchers and Unix string processing systems
9478have traditionally used backslashes with the special meanings described
9479above. The POSIX regular expression specification and ANSI C standard
9480both require these semantics. Attempting to abandon either convention
9481would cause other kinds of compatibility problems, possibly more severe
9482ones. Therefore, without extending the Scheme reader to support
9483strings with different quoting conventions (an ungainly and confusing
9484extension when implemented in other languages), we must adhere to this
9485cumbersome escape syntax.
9486
7ad3c1e7
GH
9487* Changes to the gh_ interface
9488
9489* Changes to the scm_ interface
9490
9491* Changes to system call interfaces:
94982a4e 9492
7ad3c1e7 9493** The value returned by `raise' is now unspecified. It throws an exception
e1a191a8
GH
9494if an error occurs.
9495
94982a4e 9496*** A new procedure `sigaction' can be used to install signal handlers
115b09a5
GH
9497
9498(sigaction signum [action] [flags])
9499
9500signum is the signal number, which can be specified using the value
9501of SIGINT etc.
9502
9503If action is omitted, sigaction returns a pair: the CAR is the current
9504signal hander, which will be either an integer with the value SIG_DFL
9505(default action) or SIG_IGN (ignore), or the Scheme procedure which
9506handles the signal, or #f if a non-Scheme procedure handles the
9507signal. The CDR contains the current sigaction flags for the handler.
9508
9509If action is provided, it is installed as the new handler for signum.
9510action can be a Scheme procedure taking one argument, or the value of
9511SIG_DFL (default action) or SIG_IGN (ignore), or #f to restore
9512whatever signal handler was installed before sigaction was first used.
9513Flags can optionally be specified for the new handler (SA_RESTART is
9514always used if the system provides it, so need not be specified.) The
9515return value is a pair with information about the old handler as
9516described above.
9517
9518This interface does not provide access to the "signal blocking"
9519facility. Maybe this is not needed, since the thread support may
9520provide solutions to the problem of consistent access to data
9521structures.
e1a191a8 9522
94982a4e 9523*** A new procedure `flush-all-ports' is equivalent to running
89ea5b7c
GH
9524`force-output' on every port open for output.
9525
94982a4e
JB
9526** Guile now provides information on how it was built, via the new
9527global variable, %guile-build-info. This variable records the values
9528of the standard GNU makefile directory variables as an assocation
9529list, mapping variable names (symbols) onto directory paths (strings).
9530For example, to find out where the Guile link libraries were
9531installed, you can say:
9532
9533guile -c "(display (assq-ref %guile-build-info 'libdir)) (newline)"
9534
9535
9536* Changes to the scm_ interface
9537
9538** The new function scm_handle_by_message_noexit is just like the
9539existing scm_handle_by_message function, except that it doesn't call
9540exit to terminate the process. Instead, it prints a message and just
9541returns #f. This might be a more appropriate catch-all handler for
9542new dynamic roots and threads.
9543
cf78e9e8 9544\f
c484bf7f 9545Changes in Guile 1.1 (released Friday, May 16 1997):
f3b1485f
JB
9546
9547* Changes to the distribution.
9548
9549The Guile 1.0 distribution has been split up into several smaller
9550pieces:
9551guile-core --- the Guile interpreter itself.
9552guile-tcltk --- the interface between the Guile interpreter and
9553 Tcl/Tk; Tcl is an interpreter for a stringy language, and Tk
9554 is a toolkit for building graphical user interfaces.
9555guile-rgx-ctax --- the interface between Guile and the Rx regular
9556 expression matcher, and the translator for the Ctax
9557 programming language. These are packaged together because the
9558 Ctax translator uses Rx to parse Ctax source code.
9559
095936d2
JB
9560This NEWS file describes the changes made to guile-core since the 1.0
9561release.
9562
48d224d7
JB
9563We no longer distribute the documentation, since it was either out of
9564date, or incomplete. As soon as we have current documentation, we
9565will distribute it.
9566
0fcab5ed
JB
9567
9568
f3b1485f
JB
9569* Changes to the stand-alone interpreter
9570
48d224d7
JB
9571** guile now accepts command-line arguments compatible with SCSH, Olin
9572Shivers' Scheme Shell.
9573
9574In general, arguments are evaluated from left to right, but there are
9575exceptions. The following switches stop argument processing, and
9576stash all remaining command-line arguments as the value returned by
9577the (command-line) function.
9578 -s SCRIPT load Scheme source code from FILE, and exit
9579 -c EXPR evalute Scheme expression EXPR, and exit
9580 -- stop scanning arguments; run interactively
9581
9582The switches below are processed as they are encountered.
9583 -l FILE load Scheme source code from FILE
9584 -e FUNCTION after reading script, apply FUNCTION to
9585 command line arguments
9586 -ds do -s script at this point
9587 --emacs enable Emacs protocol (experimental)
9588 -h, --help display this help and exit
9589 -v, --version display version information and exit
9590 \ read arguments from following script lines
9591
9592So, for example, here is a Guile script named `ekko' (thanks, Olin)
9593which re-implements the traditional "echo" command:
9594
9595#!/usr/local/bin/guile -s
9596!#
9597(define (main args)
9598 (map (lambda (arg) (display arg) (display " "))
9599 (cdr args))
9600 (newline))
9601
9602(main (command-line))
9603
9604Suppose we invoke this script as follows:
9605
9606 ekko a speckled gecko
9607
9608Through the magic of Unix script processing (triggered by the `#!'
9609token at the top of the file), /usr/local/bin/guile receives the
9610following list of command-line arguments:
9611
9612 ("-s" "./ekko" "a" "speckled" "gecko")
9613
9614Unix inserts the name of the script after the argument specified on
9615the first line of the file (in this case, "-s"), and then follows that
9616with the arguments given to the script. Guile loads the script, which
9617defines the `main' function, and then applies it to the list of
9618remaining command-line arguments, ("a" "speckled" "gecko").
9619
095936d2
JB
9620In Unix, the first line of a script file must take the following form:
9621
9622#!INTERPRETER ARGUMENT
9623
9624where INTERPRETER is the absolute filename of the interpreter
9625executable, and ARGUMENT is a single command-line argument to pass to
9626the interpreter.
9627
9628You may only pass one argument to the interpreter, and its length is
9629limited. These restrictions can be annoying to work around, so Guile
9630provides a general mechanism (borrowed from, and compatible with,
9631SCSH) for circumventing them.
9632
9633If the ARGUMENT in a Guile script is a single backslash character,
9634`\', Guile will open the script file, parse arguments from its second
9635and subsequent lines, and replace the `\' with them. So, for example,
9636here is another implementation of the `ekko' script:
9637
9638#!/usr/local/bin/guile \
9639-e main -s
9640!#
9641(define (main args)
9642 (for-each (lambda (arg) (display arg) (display " "))
9643 (cdr args))
9644 (newline))
9645
9646If the user invokes this script as follows:
9647
9648 ekko a speckled gecko
9649
9650Unix expands this into
9651
9652 /usr/local/bin/guile \ ekko a speckled gecko
9653
9654When Guile sees the `\' argument, it replaces it with the arguments
9655read from the second line of the script, producing:
9656
9657 /usr/local/bin/guile -e main -s ekko a speckled gecko
9658
9659This tells Guile to load the `ekko' script, and apply the function
9660`main' to the argument list ("a" "speckled" "gecko").
9661
9662Here is how Guile parses the command-line arguments:
9663- Each space character terminates an argument. This means that two
9664 spaces in a row introduce an empty-string argument.
9665- The tab character is not permitted (unless you quote it with the
9666 backslash character, as described below), to avoid confusion.
9667- The newline character terminates the sequence of arguments, and will
9668 also terminate a final non-empty argument. (However, a newline
9669 following a space will not introduce a final empty-string argument;
9670 it only terminates the argument list.)
9671- The backslash character is the escape character. It escapes
9672 backslash, space, tab, and newline. The ANSI C escape sequences
9673 like \n and \t are also supported. These produce argument
9674 constituents; the two-character combination \n doesn't act like a
9675 terminating newline. The escape sequence \NNN for exactly three
9676 octal digits reads as the character whose ASCII code is NNN. As
9677 above, characters produced this way are argument constituents.
9678 Backslash followed by other characters is not allowed.
9679
48d224d7
JB
9680* Changes to the procedure for linking libguile with your programs
9681
9682** Guile now builds and installs a shared guile library, if your
9683system support shared libraries. (It still builds a static library on
9684all systems.) Guile automatically detects whether your system
9685supports shared libraries. To prevent Guile from buildisg shared
9686libraries, pass the `--disable-shared' flag to the configure script.
9687
9688Guile takes longer to compile when it builds shared libraries, because
9689it must compile every file twice --- once to produce position-
9690independent object code, and once to produce normal object code.
9691
9692** The libthreads library has been merged into libguile.
9693
9694To link a program against Guile, you now need only link against
9695-lguile and -lqt; -lthreads is no longer needed. If you are using
9696autoconf to generate configuration scripts for your application, the
9697following lines should suffice to add the appropriate libraries to
9698your link command:
9699
9700### Find quickthreads and libguile.
9701AC_CHECK_LIB(qt, main)
9702AC_CHECK_LIB(guile, scm_shell)
f3b1485f
JB
9703
9704* Changes to Scheme functions
9705
095936d2
JB
9706** Guile Scheme's special syntax for keyword objects is now optional,
9707and disabled by default.
9708
9709The syntax variation from R4RS made it difficult to port some
9710interesting packages to Guile. The routines which accepted keyword
9711arguments (mostly in the module system) have been modified to also
9712accept symbols whose names begin with `:'.
9713
9714To change the keyword syntax, you must first import the (ice-9 debug)
9715module:
9716 (use-modules (ice-9 debug))
9717
9718Then you can enable the keyword syntax as follows:
9719 (read-set! keywords 'prefix)
9720
9721To disable keyword syntax, do this:
9722 (read-set! keywords #f)
9723
9724** Many more primitive functions accept shared substrings as
9725arguments. In the past, these functions required normal, mutable
9726strings as arguments, although they never made use of this
9727restriction.
9728
9729** The uniform array functions now operate on byte vectors. These
9730functions are `array-fill!', `serial-array-copy!', `array-copy!',
9731`serial-array-map', `array-map', `array-for-each', and
9732`array-index-map!'.
9733
9734** The new functions `trace' and `untrace' implement simple debugging
9735support for Scheme functions.
9736
9737The `trace' function accepts any number of procedures as arguments,
9738and tells the Guile interpreter to display each procedure's name and
9739arguments each time the procedure is invoked. When invoked with no
9740arguments, `trace' returns the list of procedures currently being
9741traced.
9742
9743The `untrace' function accepts any number of procedures as arguments,
9744and tells the Guile interpreter not to trace them any more. When
9745invoked with no arguments, `untrace' untraces all curretly traced
9746procedures.
9747
9748The tracing in Guile has an advantage over most other systems: we
9749don't create new procedure objects, but mark the procedure objects
9750themselves. This means that anonymous and internal procedures can be
9751traced.
9752
9753** The function `assert-repl-prompt' has been renamed to
9754`set-repl-prompt!'. It takes one argument, PROMPT.
9755- If PROMPT is #f, the Guile read-eval-print loop will not prompt.
9756- If PROMPT is a string, we use it as a prompt.
9757- If PROMPT is a procedure accepting no arguments, we call it, and
9758 display the result as a prompt.
9759- Otherwise, we display "> ".
9760
9761** The new function `eval-string' reads Scheme expressions from a
9762string and evaluates them, returning the value of the last expression
9763in the string. If the string contains no expressions, it returns an
9764unspecified value.
9765
9766** The new function `thunk?' returns true iff its argument is a
9767procedure of zero arguments.
9768
9769** `defined?' is now a builtin function, instead of syntax. This
9770means that its argument should be quoted. It returns #t iff its
9771argument is bound in the current module.
9772
9773** The new syntax `use-modules' allows you to add new modules to your
9774environment without re-typing a complete `define-module' form. It
9775accepts any number of module names as arguments, and imports their
9776public bindings into the current module.
9777
9778** The new function (module-defined? NAME MODULE) returns true iff
9779NAME, a symbol, is defined in MODULE, a module object.
9780
9781** The new function `builtin-bindings' creates and returns a hash
9782table containing copies of all the root module's bindings.
9783
9784** The new function `builtin-weak-bindings' does the same as
9785`builtin-bindings', but creates a doubly-weak hash table.
9786
9787** The `equal?' function now considers variable objects to be
9788equivalent if they have the same name and the same value.
9789
9790** The new function `command-line' returns the command-line arguments
9791given to Guile, as a list of strings.
9792
9793When using guile as a script interpreter, `command-line' returns the
9794script's arguments; those processed by the interpreter (like `-s' or
9795`-c') are omitted. (In other words, you get the normal, expected
9796behavior.) Any application that uses scm_shell to process its
9797command-line arguments gets this behavior as well.
9798
9799** The new function `load-user-init' looks for a file called `.guile'
9800in the user's home directory, and loads it if it exists. This is
9801mostly for use by the code generated by scm_compile_shell_switches,
9802but we thought it might also be useful in other circumstances.
9803
9804** The new function `log10' returns the base-10 logarithm of its
9805argument.
9806
9807** Changes to I/O functions
9808
6c0201ad 9809*** The functions `read', `primitive-load', `read-and-eval!', and
095936d2
JB
9810`primitive-load-path' no longer take optional arguments controlling
9811case insensitivity and a `#' parser.
9812
9813Case sensitivity is now controlled by a read option called
9814`case-insensitive'. The user can add new `#' syntaxes with the
9815`read-hash-extend' function (see below).
9816
9817*** The new function `read-hash-extend' allows the user to change the
9818syntax of Guile Scheme in a somewhat controlled way.
9819
9820(read-hash-extend CHAR PROC)
9821 When parsing S-expressions, if we read a `#' character followed by
9822 the character CHAR, use PROC to parse an object from the stream.
9823 If PROC is #f, remove any parsing procedure registered for CHAR.
9824
9825 The reader applies PROC to two arguments: CHAR and an input port.
9826
6c0201ad 9827*** The new functions read-delimited and read-delimited! provide a
095936d2
JB
9828general mechanism for doing delimited input on streams.
9829
9830(read-delimited DELIMS [PORT HANDLE-DELIM])
9831 Read until we encounter one of the characters in DELIMS (a string),
9832 or end-of-file. PORT is the input port to read from; it defaults to
9833 the current input port. The HANDLE-DELIM parameter determines how
9834 the terminating character is handled; it should be one of the
9835 following symbols:
9836
9837 'trim omit delimiter from result
9838 'peek leave delimiter character in input stream
9839 'concat append delimiter character to returned value
9840 'split return a pair: (RESULT . TERMINATOR)
9841
9842 HANDLE-DELIM defaults to 'peek.
9843
9844(read-delimited! DELIMS BUF [PORT HANDLE-DELIM START END])
9845 A side-effecting variant of `read-delimited'.
9846
9847 The data is written into the string BUF at the indices in the
9848 half-open interval [START, END); the default interval is the whole
9849 string: START = 0 and END = (string-length BUF). The values of
9850 START and END must specify a well-defined interval in BUF, i.e.
9851 0 <= START <= END <= (string-length BUF).
9852
9853 It returns NBYTES, the number of bytes read. If the buffer filled
9854 up without a delimiter character being found, it returns #f. If the
9855 port is at EOF when the read starts, it returns the EOF object.
9856
9857 If an integer is returned (i.e., the read is successfully terminated
9858 by reading a delimiter character), then the HANDLE-DELIM parameter
9859 determines how to handle the terminating character. It is described
9860 above, and defaults to 'peek.
9861
9862(The descriptions of these functions were borrowed from the SCSH
9863manual, by Olin Shivers and Brian Carlstrom.)
9864
9865*** The `%read-delimited!' function is the primitive used to implement
9866`read-delimited' and `read-delimited!'.
9867
9868(%read-delimited! DELIMS BUF GOBBLE? [PORT START END])
9869
9870This returns a pair of values: (TERMINATOR . NUM-READ).
9871- TERMINATOR describes why the read was terminated. If it is a
9872 character or the eof object, then that is the value that terminated
9873 the read. If it is #f, the function filled the buffer without finding
9874 a delimiting character.
9875- NUM-READ is the number of characters read into BUF.
9876
9877If the read is successfully terminated by reading a delimiter
9878character, then the gobble? parameter determines what to do with the
9879terminating character. If true, the character is removed from the
9880input stream; if false, the character is left in the input stream
9881where a subsequent read operation will retrieve it. In either case,
9882the character is also the first value returned by the procedure call.
9883
9884(The descriptions of this function was borrowed from the SCSH manual,
9885by Olin Shivers and Brian Carlstrom.)
9886
9887*** The `read-line' and `read-line!' functions have changed; they now
9888trim the terminator by default; previously they appended it to the
9889returned string. For the old behavior, use (read-line PORT 'concat).
9890
9891*** The functions `uniform-array-read!' and `uniform-array-write!' now
9892take new optional START and END arguments, specifying the region of
9893the array to read and write.
9894
f348c807
JB
9895*** The `ungetc-char-ready?' function has been removed. We feel it's
9896inappropriate for an interface to expose implementation details this
9897way.
095936d2
JB
9898
9899** Changes to the Unix library and system call interface
9900
9901*** The new fcntl function provides access to the Unix `fcntl' system
9902call.
9903
9904(fcntl PORT COMMAND VALUE)
9905 Apply COMMAND to PORT's file descriptor, with VALUE as an argument.
9906 Values for COMMAND are:
9907
9908 F_DUPFD duplicate a file descriptor
9909 F_GETFD read the descriptor's close-on-exec flag
9910 F_SETFD set the descriptor's close-on-exec flag to VALUE
9911 F_GETFL read the descriptor's flags, as set on open
9912 F_SETFL set the descriptor's flags, as set on open to VALUE
9913 F_GETOWN return the process ID of a socket's owner, for SIGIO
9914 F_SETOWN set the process that owns a socket to VALUE, for SIGIO
9915 FD_CLOEXEC not sure what this is
9916
9917For details, see the documentation for the fcntl system call.
9918
9919*** The arguments to `select' have changed, for compatibility with
9920SCSH. The TIMEOUT parameter may now be non-integral, yielding the
9921expected behavior. The MILLISECONDS parameter has been changed to
9922MICROSECONDS, to more closely resemble the underlying system call.
9923The RVEC, WVEC, and EVEC arguments can now be vectors; the type of the
9924corresponding return set will be the same.
9925
9926*** The arguments to the `mknod' system call have changed. They are
9927now:
9928
9929(mknod PATH TYPE PERMS DEV)
9930 Create a new file (`node') in the file system. PATH is the name of
9931 the file to create. TYPE is the kind of file to create; it should
9932 be 'fifo, 'block-special, or 'char-special. PERMS specifies the
9933 permission bits to give the newly created file. If TYPE is
9934 'block-special or 'char-special, DEV specifies which device the
9935 special file refers to; its interpretation depends on the kind of
9936 special file being created.
9937
9938*** The `fork' function has been renamed to `primitive-fork', to avoid
9939clashing with various SCSH forks.
9940
9941*** The `recv' and `recvfrom' functions have been renamed to `recv!'
9942and `recvfrom!'. They no longer accept a size for a second argument;
9943you must pass a string to hold the received value. They no longer
9944return the buffer. Instead, `recv' returns the length of the message
9945received, and `recvfrom' returns a pair containing the packet's length
6c0201ad 9946and originating address.
095936d2
JB
9947
9948*** The file descriptor datatype has been removed, as have the
9949`read-fd', `write-fd', `close', `lseek', and `dup' functions.
9950We plan to replace these functions with a SCSH-compatible interface.
9951
9952*** The `create' function has been removed; it's just a special case
9953of `open'.
9954
9955*** There are new functions to break down process termination status
9956values. In the descriptions below, STATUS is a value returned by
9957`waitpid'.
9958
9959(status:exit-val STATUS)
9960 If the child process exited normally, this function returns the exit
9961 code for the child process (i.e., the value passed to exit, or
9962 returned from main). If the child process did not exit normally,
9963 this function returns #f.
9964
9965(status:stop-sig STATUS)
9966 If the child process was suspended by a signal, this function
9967 returns the signal that suspended the child. Otherwise, it returns
9968 #f.
9969
9970(status:term-sig STATUS)
9971 If the child process terminated abnormally, this function returns
9972 the signal that terminated the child. Otherwise, this function
9973 returns false.
9974
9975POSIX promises that exactly one of these functions will return true on
9976a valid STATUS value.
9977
9978These functions are compatible with SCSH.
9979
9980*** There are new accessors and setters for the broken-out time vectors
48d224d7
JB
9981returned by `localtime', `gmtime', and that ilk. They are:
9982
9983 Component Accessor Setter
9984 ========================= ============ ============
9985 seconds tm:sec set-tm:sec
9986 minutes tm:min set-tm:min
9987 hours tm:hour set-tm:hour
9988 day of the month tm:mday set-tm:mday
9989 month tm:mon set-tm:mon
9990 year tm:year set-tm:year
9991 day of the week tm:wday set-tm:wday
9992 day in the year tm:yday set-tm:yday
9993 daylight saving time tm:isdst set-tm:isdst
9994 GMT offset, seconds tm:gmtoff set-tm:gmtoff
9995 name of time zone tm:zone set-tm:zone
9996
095936d2
JB
9997*** There are new accessors for the vectors returned by `uname',
9998describing the host system:
48d224d7
JB
9999
10000 Component Accessor
10001 ============================================== ================
10002 name of the operating system implementation utsname:sysname
10003 network name of this machine utsname:nodename
10004 release level of the operating system utsname:release
10005 version level of the operating system utsname:version
10006 machine hardware platform utsname:machine
10007
095936d2
JB
10008*** There are new accessors for the vectors returned by `getpw',
10009`getpwnam', `getpwuid', and `getpwent', describing entries from the
10010system's user database:
10011
10012 Component Accessor
10013 ====================== =================
10014 user name passwd:name
10015 user password passwd:passwd
10016 user id passwd:uid
10017 group id passwd:gid
10018 real name passwd:gecos
10019 home directory passwd:dir
10020 shell program passwd:shell
10021
10022*** There are new accessors for the vectors returned by `getgr',
10023`getgrnam', `getgrgid', and `getgrent', describing entries from the
10024system's group database:
10025
10026 Component Accessor
10027 ======================= ============
10028 group name group:name
10029 group password group:passwd
10030 group id group:gid
10031 group members group:mem
10032
10033*** There are new accessors for the vectors returned by `gethost',
10034`gethostbyaddr', `gethostbyname', and `gethostent', describing
10035internet hosts:
10036
10037 Component Accessor
10038 ========================= ===============
10039 official name of host hostent:name
10040 alias list hostent:aliases
10041 host address type hostent:addrtype
10042 length of address hostent:length
10043 list of addresses hostent:addr-list
10044
10045*** There are new accessors for the vectors returned by `getnet',
10046`getnetbyaddr', `getnetbyname', and `getnetent', describing internet
10047networks:
10048
10049 Component Accessor
10050 ========================= ===============
10051 official name of net netent:name
10052 alias list netent:aliases
10053 net number type netent:addrtype
10054 net number netent:net
10055
10056*** There are new accessors for the vectors returned by `getproto',
10057`getprotobyname', `getprotobynumber', and `getprotoent', describing
10058internet protocols:
10059
10060 Component Accessor
10061 ========================= ===============
10062 official protocol name protoent:name
10063 alias list protoent:aliases
10064 protocol number protoent:proto
10065
10066*** There are new accessors for the vectors returned by `getserv',
10067`getservbyname', `getservbyport', and `getservent', describing
10068internet protocols:
10069
10070 Component Accessor
10071 ========================= ===============
6c0201ad 10072 official service name servent:name
095936d2 10073 alias list servent:aliases
6c0201ad
TTN
10074 port number servent:port
10075 protocol to use servent:proto
095936d2
JB
10076
10077*** There are new accessors for the sockaddr structures returned by
10078`accept', `getsockname', `getpeername', `recvfrom!':
10079
10080 Component Accessor
10081 ======================================== ===============
6c0201ad 10082 address format (`family') sockaddr:fam
095936d2
JB
10083 path, for file domain addresses sockaddr:path
10084 address, for internet domain addresses sockaddr:addr
10085 TCP or UDP port, for internet sockaddr:port
10086
10087*** The `getpwent', `getgrent', `gethostent', `getnetent',
10088`getprotoent', and `getservent' functions now return #f at the end of
10089the user database. (They used to throw an exception.)
10090
10091Note that calling MUMBLEent function is equivalent to calling the
10092corresponding MUMBLE function with no arguments.
10093
10094*** The `setpwent', `setgrent', `sethostent', `setnetent',
10095`setprotoent', and `setservent' routines now take no arguments.
10096
10097*** The `gethost', `getproto', `getnet', and `getserv' functions now
10098provide more useful information when they throw an exception.
10099
10100*** The `lnaof' function has been renamed to `inet-lnaof'.
10101
10102*** Guile now claims to have the `current-time' feature.
10103
10104*** The `mktime' function now takes an optional second argument ZONE,
10105giving the time zone to use for the conversion. ZONE should be a
10106string, in the same format as expected for the "TZ" environment variable.
10107
10108*** The `strptime' function now returns a pair (TIME . COUNT), where
10109TIME is the parsed time as a vector, and COUNT is the number of
10110characters from the string left unparsed. This function used to
10111return the remaining characters as a string.
10112
10113*** The `gettimeofday' function has replaced the old `time+ticks' function.
10114The return value is now (SECONDS . MICROSECONDS); the fractional
10115component is no longer expressed in "ticks".
10116
10117*** The `ticks/sec' constant has been removed, in light of the above change.
6685dc83 10118
ea00ecba
MG
10119* Changes to the gh_ interface
10120
10121** gh_eval_str() now returns an SCM object which is the result of the
10122evaluation
10123
aaef0d2a
MG
10124** gh_scm2str() now copies the Scheme data to a caller-provided C
10125array
10126
10127** gh_scm2newstr() now makes a C array, copies the Scheme data to it,
10128and returns the array
10129
10130** gh_scm2str0() is gone: there is no need to distinguish
10131null-terminated from non-null-terminated, since gh_scm2newstr() allows
10132the user to interpret the data both ways.
10133
f3b1485f
JB
10134* Changes to the scm_ interface
10135
095936d2
JB
10136** The new function scm_symbol_value0 provides an easy way to get a
10137symbol's value from C code:
10138
10139SCM scm_symbol_value0 (char *NAME)
10140 Return the value of the symbol named by the null-terminated string
10141 NAME in the current module. If the symbol named NAME is unbound in
10142 the current module, return SCM_UNDEFINED.
10143
10144** The new function scm_sysintern0 creates new top-level variables,
10145without assigning them a value.
10146
10147SCM scm_sysintern0 (char *NAME)
10148 Create a new Scheme top-level variable named NAME. NAME is a
10149 null-terminated string. Return the variable's value cell.
10150
10151** The function scm_internal_catch is the guts of catch. It handles
10152all the mechanics of setting up a catch target, invoking the catch
10153body, and perhaps invoking the handler if the body does a throw.
10154
10155The function is designed to be usable from C code, but is general
10156enough to implement all the semantics Guile Scheme expects from throw.
10157
10158TAG is the catch tag. Typically, this is a symbol, but this function
10159doesn't actually care about that.
10160
10161BODY is a pointer to a C function which runs the body of the catch;
10162this is the code you can throw from. We call it like this:
10163 BODY (BODY_DATA, JMPBUF)
10164where:
10165 BODY_DATA is just the BODY_DATA argument we received; we pass it
10166 through to BODY as its first argument. The caller can make
10167 BODY_DATA point to anything useful that BODY might need.
10168 JMPBUF is the Scheme jmpbuf object corresponding to this catch,
10169 which we have just created and initialized.
10170
10171HANDLER is a pointer to a C function to deal with a throw to TAG,
10172should one occur. We call it like this:
10173 HANDLER (HANDLER_DATA, THROWN_TAG, THROW_ARGS)
10174where
10175 HANDLER_DATA is the HANDLER_DATA argument we recevied; it's the
10176 same idea as BODY_DATA above.
10177 THROWN_TAG is the tag that the user threw to; usually this is
10178 TAG, but it could be something else if TAG was #t (i.e., a
10179 catch-all), or the user threw to a jmpbuf.
10180 THROW_ARGS is the list of arguments the user passed to the THROW
10181 function.
10182
10183BODY_DATA is just a pointer we pass through to BODY. HANDLER_DATA
10184is just a pointer we pass through to HANDLER. We don't actually
10185use either of those pointers otherwise ourselves. The idea is
10186that, if our caller wants to communicate something to BODY or
10187HANDLER, it can pass a pointer to it as MUMBLE_DATA, which BODY and
10188HANDLER can then use. Think of it as a way to make BODY and
10189HANDLER closures, not just functions; MUMBLE_DATA points to the
10190enclosed variables.
10191
10192Of course, it's up to the caller to make sure that any data a
10193MUMBLE_DATA needs is protected from GC. A common way to do this is
10194to make MUMBLE_DATA a pointer to data stored in an automatic
10195structure variable; since the collector must scan the stack for
10196references anyway, this assures that any references in MUMBLE_DATA
10197will be found.
10198
10199** The new function scm_internal_lazy_catch is exactly like
10200scm_internal_catch, except:
10201
10202- It does not unwind the stack (this is the major difference).
10203- If handler returns, its value is returned from the throw.
10204- BODY always receives #f as its JMPBUF argument (since there's no
10205 jmpbuf associated with a lazy catch, because we don't unwind the
10206 stack.)
10207
10208** scm_body_thunk is a new body function you can pass to
10209scm_internal_catch if you want the body to be like Scheme's `catch'
10210--- a thunk, or a function of one argument if the tag is #f.
10211
10212BODY_DATA is a pointer to a scm_body_thunk_data structure, which
10213contains the Scheme procedure to invoke as the body, and the tag
10214we're catching. If the tag is #f, then we pass JMPBUF (created by
10215scm_internal_catch) to the body procedure; otherwise, the body gets
10216no arguments.
10217
10218** scm_handle_by_proc is a new handler function you can pass to
10219scm_internal_catch if you want the handler to act like Scheme's catch
10220--- call a procedure with the tag and the throw arguments.
10221
10222If the user does a throw to this catch, this function runs a handler
10223procedure written in Scheme. HANDLER_DATA is a pointer to an SCM
10224variable holding the Scheme procedure object to invoke. It ought to
10225be a pointer to an automatic variable (i.e., one living on the stack),
10226or the procedure object should be otherwise protected from GC.
10227
10228** scm_handle_by_message is a new handler function to use with
10229`scm_internal_catch' if you want Guile to print a message and die.
10230It's useful for dealing with throws to uncaught keys at the top level.
10231
10232HANDLER_DATA, if non-zero, is assumed to be a char * pointing to a
10233message header to print; if zero, we use "guile" instead. That
10234text is followed by a colon, then the message described by ARGS.
10235
10236** The return type of scm_boot_guile is now void; the function does
10237not return a value, and indeed, never returns at all.
10238
f3b1485f
JB
10239** The new function scm_shell makes it easy for user applications to
10240process command-line arguments in a way that is compatible with the
10241stand-alone guile interpreter (which is in turn compatible with SCSH,
10242the Scheme shell).
10243
10244To use the scm_shell function, first initialize any guile modules
10245linked into your application, and then call scm_shell with the values
7ed46dc8 10246of ARGC and ARGV your `main' function received. scm_shell will add
f3b1485f
JB
10247any SCSH-style meta-arguments from the top of the script file to the
10248argument vector, and then process the command-line arguments. This
10249generally means loading a script file or starting up an interactive
10250command interpreter. For details, see "Changes to the stand-alone
10251interpreter" above.
10252
095936d2 10253** The new functions scm_get_meta_args and scm_count_argv help you
6c0201ad 10254implement the SCSH-style meta-argument, `\'.
095936d2
JB
10255
10256char **scm_get_meta_args (int ARGC, char **ARGV)
10257 If the second element of ARGV is a string consisting of a single
10258 backslash character (i.e. "\\" in Scheme notation), open the file
10259 named by the following argument, parse arguments from it, and return
10260 the spliced command line. The returned array is terminated by a
10261 null pointer.
6c0201ad 10262
095936d2
JB
10263 For details of argument parsing, see above, under "guile now accepts
10264 command-line arguments compatible with SCSH..."
10265
10266int scm_count_argv (char **ARGV)
10267 Count the arguments in ARGV, assuming it is terminated by a null
10268 pointer.
10269
10270For an example of how these functions might be used, see the source
10271code for the function scm_shell in libguile/script.c.
10272
10273You will usually want to use scm_shell instead of calling this
10274function yourself.
10275
10276** The new function scm_compile_shell_switches turns an array of
10277command-line arguments into Scheme code to carry out the actions they
10278describe. Given ARGC and ARGV, it returns a Scheme expression to
10279evaluate, and calls scm_set_program_arguments to make any remaining
10280command-line arguments available to the Scheme code. For example,
10281given the following arguments:
10282
10283 -e main -s ekko a speckled gecko
10284
10285scm_set_program_arguments will return the following expression:
10286
10287 (begin (load "ekko") (main (command-line)) (quit))
10288
10289You will usually want to use scm_shell instead of calling this
10290function yourself.
10291
10292** The function scm_shell_usage prints a usage message appropriate for
10293an interpreter that uses scm_compile_shell_switches to handle its
10294command-line arguments.
10295
10296void scm_shell_usage (int FATAL, char *MESSAGE)
10297 Print a usage message to the standard error output. If MESSAGE is
10298 non-zero, write it before the usage message, followed by a newline.
10299 If FATAL is non-zero, exit the process, using FATAL as the
10300 termination status. (If you want to be compatible with Guile,
10301 always use 1 as the exit status when terminating due to command-line
10302 usage problems.)
10303
10304You will usually want to use scm_shell instead of calling this
10305function yourself.
48d224d7
JB
10306
10307** scm_eval_0str now returns SCM_UNSPECIFIED if the string contains no
095936d2
JB
10308expressions. It used to return SCM_EOL. Earth-shattering.
10309
10310** The macros for declaring scheme objects in C code have been
10311rearranged slightly. They are now:
10312
10313SCM_SYMBOL (C_NAME, SCHEME_NAME)
10314 Declare a static SCM variable named C_NAME, and initialize it to
10315 point to the Scheme symbol whose name is SCHEME_NAME. C_NAME should
10316 be a C identifier, and SCHEME_NAME should be a C string.
10317
10318SCM_GLOBAL_SYMBOL (C_NAME, SCHEME_NAME)
10319 Just like SCM_SYMBOL, but make C_NAME globally visible.
10320
10321SCM_VCELL (C_NAME, SCHEME_NAME)
10322 Create a global variable at the Scheme level named SCHEME_NAME.
10323 Declare a static SCM variable named C_NAME, and initialize it to
10324 point to the Scheme variable's value cell.
10325
10326SCM_GLOBAL_VCELL (C_NAME, SCHEME_NAME)
10327 Just like SCM_VCELL, but make C_NAME globally visible.
10328
10329The `guile-snarf' script writes initialization code for these macros
10330to its standard output, given C source code as input.
10331
10332The SCM_GLOBAL macro is gone.
10333
10334** The scm_read_line and scm_read_line_x functions have been replaced
10335by Scheme code based on the %read-delimited! procedure (known to C
10336code as scm_read_delimited_x). See its description above for more
10337information.
48d224d7 10338
095936d2
JB
10339** The function scm_sys_open has been renamed to scm_open. It now
10340returns a port instead of an FD object.
ea00ecba 10341
095936d2
JB
10342* The dynamic linking support has changed. For more information, see
10343libguile/DYNAMIC-LINKING.
ea00ecba 10344
f7b47737
JB
10345\f
10346Guile 1.0b3
3065a62a 10347
f3b1485f
JB
10348User-visible changes from Thursday, September 5, 1996 until Guile 1.0
10349(Sun 5 Jan 1997):
3065a62a 10350
4b521edb 10351* Changes to the 'guile' program:
3065a62a 10352
4b521edb
JB
10353** Guile now loads some new files when it starts up. Guile first
10354searches the load path for init.scm, and loads it if found. Then, if
10355Guile is not being used to execute a script, and the user's home
10356directory contains a file named `.guile', Guile loads that.
c6486f8a 10357
4b521edb 10358** You can now use Guile as a shell script interpreter.
3065a62a
JB
10359
10360To paraphrase the SCSH manual:
10361
10362 When Unix tries to execute an executable file whose first two
10363 characters are the `#!', it treats the file not as machine code to
10364 be directly executed by the native processor, but as source code
10365 to be executed by some interpreter. The interpreter to use is
10366 specified immediately after the #! sequence on the first line of
10367 the source file. The kernel reads in the name of the interpreter,
10368 and executes that instead. It passes the interpreter the source
10369 filename as its first argument, with the original arguments
10370 following. Consult the Unix man page for the `exec' system call
10371 for more information.
10372
1a1945be
JB
10373Now you can use Guile as an interpreter, using a mechanism which is a
10374compatible subset of that provided by SCSH.
10375
3065a62a
JB
10376Guile now recognizes a '-s' command line switch, whose argument is the
10377name of a file of Scheme code to load. It also treats the two
10378characters `#!' as the start of a comment, terminated by `!#'. Thus,
10379to make a file of Scheme code directly executable by Unix, insert the
10380following two lines at the top of the file:
10381
10382#!/usr/local/bin/guile -s
10383!#
10384
10385Guile treats the argument of the `-s' command-line switch as the name
10386of a file of Scheme code to load, and treats the sequence `#!' as the
10387start of a block comment, terminated by `!#'.
10388
10389For example, here's a version of 'echo' written in Scheme:
10390
10391#!/usr/local/bin/guile -s
10392!#
10393(let loop ((args (cdr (program-arguments))))
10394 (if (pair? args)
10395 (begin
10396 (display (car args))
10397 (if (pair? (cdr args))
10398 (display " "))
10399 (loop (cdr args)))))
10400(newline)
10401
10402Why does `#!' start a block comment terminated by `!#', instead of the
10403end of the line? That is the notation SCSH uses, and although we
10404don't yet support the other SCSH features that motivate that choice,
10405we would like to be backward-compatible with any existing Guile
3763761c
JB
10406scripts once we do. Furthermore, if the path to Guile on your system
10407is too long for your kernel, you can start the script with this
10408horrible hack:
10409
10410#!/bin/sh
10411exec /really/long/path/to/guile -s "$0" ${1+"$@"}
10412!#
3065a62a
JB
10413
10414Note that some very old Unix systems don't support the `#!' syntax.
10415
c6486f8a 10416
4b521edb 10417** You can now run Guile without installing it.
6685dc83
JB
10418
10419Previous versions of the interactive Guile interpreter (`guile')
10420couldn't start up unless Guile's Scheme library had been installed;
10421they used the value of the environment variable `SCHEME_LOAD_PATH'
10422later on in the startup process, but not to find the startup code
10423itself. Now Guile uses `SCHEME_LOAD_PATH' in all searches for Scheme
10424code.
10425
10426To run Guile without installing it, build it in the normal way, and
10427then set the environment variable `SCHEME_LOAD_PATH' to a
10428colon-separated list of directories, including the top-level directory
10429of the Guile sources. For example, if you unpacked Guile so that the
10430full filename of this NEWS file is /home/jimb/guile-1.0b3/NEWS, then
10431you might say
10432
10433 export SCHEME_LOAD_PATH=/home/jimb/my-scheme:/home/jimb/guile-1.0b3
10434
c6486f8a 10435
4b521edb
JB
10436** Guile's read-eval-print loop no longer prints #<unspecified>
10437results. If the user wants to see this, she can evaluate the
10438expression (assert-repl-print-unspecified #t), perhaps in her startup
48d224d7 10439file.
6685dc83 10440
4b521edb
JB
10441** Guile no longer shows backtraces by default when an error occurs;
10442however, it does display a message saying how to get one, and how to
10443request that they be displayed by default. After an error, evaluate
10444 (backtrace)
10445to see a backtrace, and
10446 (debug-enable 'backtrace)
10447to see them by default.
6685dc83 10448
6685dc83 10449
d9fb83d9 10450
4b521edb
JB
10451* Changes to Guile Scheme:
10452
10453** Guile now distinguishes between #f and the empty list.
10454
10455This is for compatibility with the IEEE standard, the (possibly)
10456upcoming Revised^5 Report on Scheme, and many extant Scheme
10457implementations.
10458
10459Guile used to have #f and '() denote the same object, to make Scheme's
10460type system more compatible with Emacs Lisp's. However, the change
10461caused too much trouble for Scheme programmers, and we found another
10462way to reconcile Emacs Lisp with Scheme that didn't require this.
10463
10464
10465** Guile's delq, delv, delete functions, and their destructive
c6486f8a
JB
10466counterparts, delq!, delv!, and delete!, now remove all matching
10467elements from the list, not just the first. This matches the behavior
10468of the corresponding Emacs Lisp functions, and (I believe) the Maclisp
10469functions which inspired them.
10470
10471I recognize that this change may break code in subtle ways, but it
10472seems best to make the change before the FSF's first Guile release,
10473rather than after.
10474
10475
4b521edb 10476** The compiled-library-path function has been deleted from libguile.
6685dc83 10477
4b521edb 10478** The facilities for loading Scheme source files have changed.
c6486f8a 10479
4b521edb 10480*** The variable %load-path now tells Guile which directories to search
6685dc83
JB
10481for Scheme code. Its value is a list of strings, each of which names
10482a directory.
10483
4b521edb
JB
10484*** The variable %load-extensions now tells Guile which extensions to
10485try appending to a filename when searching the load path. Its value
10486is a list of strings. Its default value is ("" ".scm").
10487
10488*** (%search-load-path FILENAME) searches the directories listed in the
10489value of the %load-path variable for a Scheme file named FILENAME,
10490with all the extensions listed in %load-extensions. If it finds a
10491match, then it returns its full filename. If FILENAME is absolute, it
10492returns it unchanged. Otherwise, it returns #f.
6685dc83 10493
4b521edb
JB
10494%search-load-path will not return matches that refer to directories.
10495
10496*** (primitive-load FILENAME :optional CASE-INSENSITIVE-P SHARP)
10497uses %seach-load-path to find a file named FILENAME, and loads it if
10498it finds it. If it can't read FILENAME for any reason, it throws an
10499error.
6685dc83
JB
10500
10501The arguments CASE-INSENSITIVE-P and SHARP are interpreted as by the
4b521edb
JB
10502`read' function.
10503
10504*** load uses the same searching semantics as primitive-load.
10505
10506*** The functions %try-load, try-load-with-path, %load, load-with-path,
10507basic-try-load-with-path, basic-load-with-path, try-load-module-with-
10508path, and load-module-with-path have been deleted. The functions
10509above should serve their purposes.
10510
10511*** If the value of the variable %load-hook is a procedure,
10512`primitive-load' applies its value to the name of the file being
10513loaded (without the load path directory name prepended). If its value
10514is #f, it is ignored. Otherwise, an error occurs.
10515
10516This is mostly useful for printing load notification messages.
10517
10518
10519** The function `eval!' is no longer accessible from the scheme level.
10520We can't allow operations which introduce glocs into the scheme level,
10521because Guile's type system can't handle these as data. Use `eval' or
10522`read-and-eval!' (see below) as replacement.
10523
10524** The new function read-and-eval! reads an expression from PORT,
10525evaluates it, and returns the result. This is more efficient than
10526simply calling `read' and `eval', since it is not necessary to make a
10527copy of the expression for the evaluator to munge.
10528
10529Its optional arguments CASE_INSENSITIVE_P and SHARP are interpreted as
10530for the `read' function.
10531
10532
10533** The function `int?' has been removed; its definition was identical
10534to that of `integer?'.
10535
10536** The functions `<?', `<?', `<=?', `=?', `>?', and `>=?'. Code should
10537use the R4RS names for these functions.
10538
10539** The function object-properties no longer returns the hash handle;
10540it simply returns the object's property list.
10541
10542** Many functions have been changed to throw errors, instead of
10543returning #f on failure. The point of providing exception handling in
10544the language is to simplify the logic of user code, but this is less
10545useful if Guile's primitives don't throw exceptions.
10546
10547** The function `fileno' has been renamed from `%fileno'.
10548
10549** The function primitive-mode->fdes returns #t or #f now, not 1 or 0.
10550
10551
10552* Changes to Guile's C interface:
10553
10554** The library's initialization procedure has been simplified.
10555scm_boot_guile now has the prototype:
10556
10557void scm_boot_guile (int ARGC,
10558 char **ARGV,
10559 void (*main_func) (),
10560 void *closure);
10561
10562scm_boot_guile calls MAIN_FUNC, passing it CLOSURE, ARGC, and ARGV.
10563MAIN_FUNC should do all the work of the program (initializing other
10564packages, reading user input, etc.) before returning. When MAIN_FUNC
10565returns, call exit (0); this function never returns. If you want some
10566other exit value, MAIN_FUNC may call exit itself.
10567
10568scm_boot_guile arranges for program-arguments to return the strings
10569given by ARGC and ARGV. If MAIN_FUNC modifies ARGC/ARGV, should call
10570scm_set_program_arguments with the final list, so Scheme code will
10571know which arguments have been processed.
10572
10573scm_boot_guile establishes a catch-all catch handler which prints an
10574error message and exits the process. This means that Guile exits in a
10575coherent way when system errors occur and the user isn't prepared to
10576handle it. If the user doesn't like this behavior, they can establish
10577their own universal catcher in MAIN_FUNC to shadow this one.
10578
10579Why must the caller do all the real work from MAIN_FUNC? The garbage
10580collector assumes that all local variables of type SCM will be above
10581scm_boot_guile's stack frame on the stack. If you try to manipulate
10582SCM values after this function returns, it's the luck of the draw
10583whether the GC will be able to find the objects you allocate. So,
10584scm_boot_guile function exits, rather than returning, to discourage
10585people from making that mistake.
10586
10587The IN, OUT, and ERR arguments were removed; there are other
10588convenient ways to override these when desired.
10589
10590The RESULT argument was deleted; this function should never return.
10591
10592The BOOT_CMD argument was deleted; the MAIN_FUNC argument is more
10593general.
10594
10595
10596** Guile's header files should no longer conflict with your system's
10597header files.
10598
10599In order to compile code which #included <libguile.h>, previous
10600versions of Guile required you to add a directory containing all the
10601Guile header files to your #include path. This was a problem, since
10602Guile's header files have names which conflict with many systems'
10603header files.
10604
10605Now only <libguile.h> need appear in your #include path; you must
10606refer to all Guile's other header files as <libguile/mumble.h>.
10607Guile's installation procedure puts libguile.h in $(includedir), and
10608the rest in $(includedir)/libguile.
10609
10610
10611** Two new C functions, scm_protect_object and scm_unprotect_object,
10612have been added to the Guile library.
10613
10614scm_protect_object (OBJ) protects OBJ from the garbage collector.
10615OBJ will not be freed, even if all other references are dropped,
10616until someone does scm_unprotect_object (OBJ). Both functions
10617return OBJ.
10618
10619Note that calls to scm_protect_object do not nest. You can call
10620scm_protect_object any number of times on a given object, and the
10621next call to scm_unprotect_object will unprotect it completely.
10622
10623Basically, scm_protect_object and scm_unprotect_object just
10624maintain a list of references to things. Since the GC knows about
10625this list, all objects it mentions stay alive. scm_protect_object
10626adds its argument to the list; scm_unprotect_object remove its
10627argument from the list.
10628
10629
10630** scm_eval_0str now returns the value of the last expression
10631evaluated.
10632
10633** The new function scm_read_0str reads an s-expression from a
10634null-terminated string, and returns it.
10635
10636** The new function `scm_stdio_to_port' converts a STDIO file pointer
10637to a Scheme port object.
10638
10639** The new function `scm_set_program_arguments' allows C code to set
e80c8fea 10640the value returned by the Scheme `program-arguments' function.
6685dc83 10641
6685dc83 10642\f
1a1945be
JB
10643Older changes:
10644
10645* Guile no longer includes sophisticated Tcl/Tk support.
10646
10647The old Tcl/Tk support was unsatisfying to us, because it required the
10648user to link against the Tcl library, as well as Tk and Guile. The
10649interface was also un-lispy, in that it preserved Tcl/Tk's practice of
10650referring to widgets by names, rather than exporting widgets to Scheme
10651code as a special datatype.
10652
10653In the Usenix Tk Developer's Workshop held in July 1996, the Tcl/Tk
10654maintainers described some very interesting changes in progress to the
10655Tcl/Tk internals, which would facilitate clean interfaces between lone
10656Tk and other interpreters --- even for garbage-collected languages
10657like Scheme. They expected the new Tk to be publicly available in the
10658fall of 1996.
10659
10660Since it seems that Guile might soon have a new, cleaner interface to
10661lone Tk, and that the old Guile/Tk glue code would probably need to be
10662completely rewritten, we (Jim Blandy and Richard Stallman) have
10663decided not to support the old code. We'll spend the time instead on
10664a good interface to the newer Tk, as soon as it is available.
5c54da76 10665
8512dea6 10666Until then, gtcltk-lib provides trivial, low-maintenance functionality.
deb95d71 10667
5c54da76
JB
10668\f
10669Copyright information:
10670
4f416616 10671Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2006 Free Software Foundation, Inc.
5c54da76
JB
10672
10673 Permission is granted to anyone to make or distribute verbatim copies
10674 of this document as received, in any medium, provided that the
10675 copyright notice and this permission notice are preserved,
10676 thus giving the recipient permission to redistribute in turn.
10677
10678 Permission is granted to distribute modified versions
10679 of this document, or of portions of it,
10680 under the above conditions, provided also that they
10681 carry prominent notices stating who last changed them.
10682
48d224d7
JB
10683\f
10684Local variables:
10685mode: outline
10686paragraph-separate: "[ \f]*$"
10687end: