Synchronized from libguile/guile.texi
[bpt/guile.git] / NEWS
CommitLineData
b2cbe8d8 1Guile NEWS --- history of user-visible changes.
9879d390 2Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
5c54da76
JB
3See the end for copying conditions.
4
e1b6c710 5Please send Guile bug reports to bug-guile@gnu.org.
5ebbe4ef
RB
6
7Each release reports the NEWS in the following sections:
8
9* Changes to the distribution
10* Changes to the stand-alone interpreter
11* Changes to Scheme functions and syntax
12* Changes to the C interface
13
5c54da76 14\f
b0d10ba6 15Changes since the 1.6.x series:
ee0c7345 16
4e250ded
MV
17* Changes to the distribution
18
eff2965e
MV
19** Guile is now licensed with the GNU Lesser General Public License.
20
77e51fd6
MV
21** The manual is now licensed with the GNU Free Documentation License.
22
e2d0a649
RB
23** Guile now requires GNU MP (http://swox.com/gmp).
24
25Guile now uses the GNU MP library for arbitrary precision arithmetic.
e2d0a649 26
5ebbe4ef
RB
27** Guile now has separate private and public configuration headers.
28
b0d10ba6
MV
29That is, things like HAVE_STRING_H no longer leak from Guile's
30headers.
5ebbe4ef
RB
31
32** Guile now provides and uses an "effective" version number.
b2cbe8d8
RB
33
34Guile now provides scm_effective_version and effective-version
35functions which return the "effective" version number. This is just
36the normal full version string without the final micro-version number,
b0d10ba6 37so the current effective-version is "1.7". The effective version
b2cbe8d8
RB
38should remain unchanged during a stable series, and should be used for
39items like the versioned share directory name
b0d10ba6 40i.e. /usr/share/guile/1.7.
b2cbe8d8
RB
41
42Providing an unchanging version number during a stable release for
43things like the versioned share directory can be particularly
44important for Guile "add-on" packages, since it provides a directory
45that they can install to that won't be changed out from under them
46with each micro release during a stable series.
47
8d54e73a 48** Thread implementation has changed.
f0b4d944
MV
49
50When you configure "--with-threads=null", you will get the usual
51threading API (call-with-new-thread, make-mutex, etc), but you can't
429d88d4
MV
52actually create new threads. Also, "--with-threads=no" is now
53equivalent to "--with-threads=null". This means that the thread API
54is always present, although you might not be able to create new
55threads.
f0b4d944 56
8d54e73a
MV
57When you configure "--with-threads=pthreads" or "--with-threads=yes",
58you will get threads that are implemented with the portable POSIX
59threads. These threads can run concurrently (unlike the previous
60"coop" thread implementation), but need to cooperate for things like
61the GC. See the manual for details. [XXX - write this.]
f0b4d944 62
8d54e73a
MV
63The default is "pthreads", unless your platform doesn't have pthreads,
64in which case "null" threads are used.
2902a459 65
56b97da9
MD
66** New module (ice-9 serialize):
67
68(serialize FORM1 ...) and (parallelize FORM1 ...) are useful when
69you don't trust the thread safety of most of your program, but
70where you have some section(s) of code which you consider can run
71in parallel to other sections.
72
b0d10ba6
MV
73### move rest to manual
74
56b97da9
MD
75They "flag" (with dynamic extent) sections of code to be of
76"serial" or "parallel" nature and have the single effect of
77preventing a serial section from being run in parallel with any
78serial section (including itself).
79
80Both serialize and parallelize can be nested. If so, the
81inner-most construct is in effect.
82
83NOTE 1: A serial section can run in parallel with a parallel
84section.
85
86NOTE 2: If a serial section S is "interrupted" by a parallel
87section P in the following manner: S = S1 P S2, S2 is not
88guaranteed to be resumed by the same thread that previously
89executed S1.
90
91WARNING: Spawning new threads within a serial section have
92undefined effects. It is OK, though, to spawn threads in unflagged
93sections of code where neither serialize or parallelize is in
94effect.
95
96A typical usage is when Guile is used as scripting language in some
97application doing heavy computations. If each thread is
98encapsulated with a serialize form, you can then put a parallelize
99form around the code performing the heavy computations (typically a
100C code primitive), enabling the computations to run in parallel
101while the scripting code runs single-threadedly.
102
9a5fc8c2
MV
103** New module (srfi srfi-26)
104
105This is an implementation of SRFI-26.
106
f5d54eb7
RB
107** New module (srfi srfi-31)
108
109This is an implementation of SRFI-31 which provides a special form
110`rec' for recursive evaluation.
111
7b1574ed
MV
112** The modules (srfi srfi-13), (srfi srfi-14) and (srfi srfi-4) have
113 been merged with the core, making their functionality always
114 available.
c5080b51 115
ce7c0293
MV
116The modules are still available, tho, and you could use them together
117with a renaming import, for example.
c5080b51 118
6191ccec 119** Guile no longer includes its own version of libltdl.
4e250ded 120
6191ccec 121The official version is good enough now.
4e250ded 122
ae7ded56
MV
123** The --enable-htmldoc option has been removed from 'configure'.
124
125Support for translating the documentation into HTML is now always
126provided. Use 'make html'.
127
328dc9a3 128* Changes to the stand-alone interpreter
f12ef3fd 129
3ece39d6
MV
130** New command line option `-L'.
131
132This option adds a directory to the front of the load path.
133
f12ef3fd
MV
134** New command line option `--no-debug'.
135
136Specifying `--no-debug' on the command line will keep the debugging
137evaluator turned off, even for interactive sessions.
138
139** User-init file ~/.guile is now loaded with the debugging evaluator.
140
141Previously, the normal evaluator would have been used. Using the
142debugging evaluator gives better error messages.
143
aff7e166
MV
144** The '-e' option now 'read's its argument.
145
146This is to allow the new '(@ MODULE-NAME VARIABLE-NAME)' construct to
147be used with '-e'. For example, you can now write a script like
148
149 #! /bin/sh
150 exec guile -e '(@ (demo) main)' -s "$0" "$@"
151 !#
152
153 (define-module (demo)
154 :export (main))
155
156 (define (main args)
157 (format #t "Demo: ~a~%" args))
158
159
f12ef3fd
MV
160* Changes to Scheme functions and syntax
161
a2b6a0e7
MV
162** The default load path no longer includes "." at the end.
163
164Automatically loading modules from the current directory should not
165happen by default. If you want to allow it in a more controlled
166manner, set the environment variable GUILE_LOAD_PATH or the Scheme
167variable %load-path.
168
7b1574ed
MV
169** The uniform vector and array support has been overhauled.
170
171It now complies with SRFI-4 and the weird prototype based uniform
172array creation has been deprecated. See the manual for more details.
173
d4ea47c8 174A non-compatible change is that characters can no longer be stored
bb9f50ae
MV
175into byte arrays.
176
ce7c0293
MV
177** There is now support for copy-on-write substrings, mutation-sharing
178 substrings and read-only strings.
3ff9283d 179
ce7c0293
MV
180Three new procedures are related to this: substring/shared,
181substring/copy, and substring/read-only. See the manual for more
182information.
183
6a1d27ea
MV
184** Backtraces will now highlight the value that caused the error.
185
186By default, these values are enclosed in "{...}", such as in this
187example:
188
189 guile> (car 'a)
190
191 Backtrace:
192 In current input:
193 1: 0* [car {a}]
194
195 <unnamed port>:1:1: In procedure car in expression (car (quote a)):
196 <unnamed port>:1:1: Wrong type (expecting pair): a
197 ABORT: (wrong-type-arg)
198
199The prefix and suffix used for highlighting can be set via the two new
200printer options 'highlight-prefix' and 'highlight-suffix'. For
201example, putting this into ~/.guile will output the bad value in bold
202on an ANSI terminal:
203
204 (print-set! highlight-prefix "\x1b[1m")
205 (print-set! highlight-suffix "\x1b[22m")
206
207
8dbafacd
MV
208** 'gettext' support for internationalization has been added.
209
210See the manual for details.
211
aff7e166
MV
212** New syntax '@' and '@@':
213
214You can now directly refer to variables exported from a module by
215writing
216
217 (@ MODULE-NAME VARIABLE-NAME)
218
219For example (@ (ice-9 pretty-print) pretty-print) will directly access
220the pretty-print variable exported from the (ice-9 pretty-print)
221module. You don't need to 'use' that module first. You can also use
b0d10ba6 222'@' as a target of 'set!', as in (set! (@ mod var) val).
aff7e166
MV
223
224The related syntax (@@ MODULE-NAME VARIABLE-NAME) works just like '@',
225but it can also access variables that have not been exported. It is
226intended only for kluges and temporary fixes and for debugging, not
227for ordinary code.
228
aef0bdb4
MV
229** Keyword syntax has been made more disciplined.
230
231Previously, the name of a keyword was read as a 'token' but printed as
232a symbol. Now, it is read as a general Scheme datum which must be a
233symbol.
234
235Previously:
236
237 guile> #:12
238 #:#{12}#
239 guile> #:#{12}#
240 #:#{\#{12}\#}#
241 guile> #:(a b c)
242 #:#{}#
243 ERROR: In expression (a b c):
244 Unbound variable: a
245 guile> #: foo
246 #:#{}#
247 ERROR: Unbound variable: foo
248
249Now:
250
251 guile> #:12
252 ERROR: Wrong type (expecting symbol): 12
253 guile> #:#{12}#
254 #:#{12}#
255 guile> #:(a b c)
256 ERROR: Wrong type (expecting symbol): (a b c)
257 guile> #: foo
258 #:foo
259
1363e3e7
KR
260** 'while' now provides 'break' and 'continue'
261
262break and continue were previously bound in a while loop, but not
263documented, and continue didn't quite work properly. The undocumented
264parameter to break which gave a return value for the while has been
265dropped.
266
570b5b14
MV
267** 'call-with-current-continuation' is now also available under the name
268 'call/cc'.
269
b0d10ba6 270** The module system now checks for duplicate bindings.
7b07e5ef 271
fe6ee052
MD
272The module system now can check for name conflicts among imported
273bindings.
f595ccfe 274
b0d10ba6 275The behavior can be controlled by specifying one or more 'duplicates'
fe6ee052
MD
276handlers. For example, to make Guile return an error for every name
277collision, write:
7b07e5ef
MD
278
279(define-module (foo)
280 :use-module (bar)
281 :use-module (baz)
fe6ee052 282 :duplicates check)
f595ccfe 283
fe6ee052
MD
284The new default behavior of the module system when a name collision
285has been detected is to
286
287 1. Give priority to bindings marked as a replacement.
6496a663 288 2. Issue a warning (different warning if overriding core binding).
fe6ee052
MD
289 3. Give priority to the last encountered binding (this corresponds to
290 the old behavior).
291
292If you want the old behavior back without replacements or warnings you
293can add the line:
f595ccfe 294
70a9dc9c 295 (default-duplicate-binding-handler 'last)
7b07e5ef 296
fe6ee052 297to your .guile init file.
7b07e5ef 298
b0d10ba6
MV
299### move rest to manual
300
7b07e5ef
MD
301The syntax for the :duplicates option is:
302
303 :duplicates HANDLER-NAME | (HANDLER1-NAME HANDLER2-NAME ...)
304
305Specifying multiple handlers is useful since some handlers (such as
f595ccfe
MD
306replace) can defer conflict resolution to others. Each handler is
307tried until a binding is selected.
7b07e5ef
MD
308
309Currently available duplicates handlers are:
310
f595ccfe
MD
311 check report an error for bindings with a common name
312 warn issue a warning for bindings with a common name
313 replace replace bindings which have an imported replacement
314 warn-override-core issue a warning for imports which override core bindings
fe6ee052 315 and accept the override
f595ccfe
MD
316 first select the first encountered binding (override)
317 last select the last encountered binding (override)
70a9dc9c
MD
318
319These two are provided by the (oop goops) module:
320
f595ccfe
MD
321 merge-generics merge generic functions with a common name
322 into an <extended-generic>
f8af5c6d 323 merge-accessors merge accessors with a common name
f595ccfe
MD
324
325The default duplicates handler is:
326
6496a663 327 (replace warn-override-core warn last)
fe6ee052
MD
328
329A recommended handler (which is likely to correspond to future Guile
330behavior) can be installed with:
331
332 (default-duplicate-binding-handler '(replace warn-override-core check))
f595ccfe
MD
333
334** New define-module option: :replace
335
336:replace works as :export, but, in addition, marks the binding as a
337replacement.
338
339A typical example is `format' in (ice-9 format) which is a replacement
340for the core binding `format'.
7b07e5ef 341
70da0033
MD
342** Adding prefixes to imported bindings in the module system
343
344There is now a new :use-module option :prefix. It can be used to add
345a prefix to all imported bindings.
346
347 (define-module (foo)
348 :use-module ((bar) :prefix bar:))
349
350will import all bindings exported from bar, but rename them by adding
351the prefix `bar:'.
352
b0d10ba6
MV
353** Conflicting generic functions can be automatically merged.
354
355When two imported bindings conflict and they are both generic
356functions, the two functions can now be merged automatically. This is
357activated with the 'duplicates' handler 'merge-generics'.
358
359### move the rest to the manual
7b07e5ef
MD
360
361It is sometimes tempting to use GOOPS accessors with short names.
362For example, it is tempting to use the name `x' for the x-coordinate
363in vector packages.
364
365Assume that we work with a graphical package which needs to use two
366independent vector packages for 2D and 3D vectors respectively. If
367both packages export `x' we will encounter a name collision.
368
f595ccfe
MD
369This can now be resolved automagically with the duplicates handler
370`merge-generics' which gives the module system license to merge all
371generic functions sharing a common name:
7b07e5ef
MD
372
373(define-module (math 2D-vectors)
374 :use-module (oop goops)
375 :export (x y ...))
376
377(define-module (math 3D-vectors)
378 :use-module (oop goops)
379 :export (x y z ...))
380
381(define-module (my-module)
382 :use-module (math 2D-vectors)
383 :use-module (math 3D-vectors)
384 :duplicates merge-generics)
385
386x in (my-module) will now share methods with x in both imported
387modules.
388
f595ccfe
MD
389There will, in fact, now be three distinct generic functions named
390`x': x in (2D-vectors), x in (3D-vectors), and x in (my-module). The
391last function will be an <extended-generic>, extending the previous
392two functions.
393
394Let's call the imported generic functions the "ancestor functions". x
395in (my-module) is, in turn, a "descendant function" of the imported
396functions, extending its ancestors.
397
398For any generic function G, the applicable methods are selected from
399the union of the methods of the descendant functions, the methods of G
400itself and the methods of the ancestor functions.
7b07e5ef 401
f595ccfe
MD
402This, ancestor functions share methods with their descendants and vice
403versa. This implies that x in (math 2D-vectors) can will share the
404methods of x in (my-module) and vice versa, while x in (math 2D-vectors)
405doesn't share the methods of x in (math 3D-vectors), thus preserving
406modularity.
7b07e5ef 407
f595ccfe
MD
408Sharing is dynamic, so that adding new methods to a descendant implies
409adding it to the ancestor.
7b07e5ef
MD
410
411If duplicates checking is desired in the above example, the following
412form of the :duplicates option can be used instead:
413
414 :duplicates (merge-generics check)
415
b2cbe8d8
RB
416** New function: effective-version
417
418Returns the "effective" version number. This is just the normal full
419version string without the final micro-version number. See "Changes
420to the distribution" above.
421
b0d10ba6 422** New feature, 'futures': future, make-future, future-ref
e2d820a1 423
b0d10ba6
MV
424Futures are like promises, but begin execution immediately in a new
425thread. See the "Futures" section in the reference manual.
dbe30084 426
382053e9 427** New threading functions: parallel, letpar, par-map, and friends
dbe30084 428
382053e9
KR
429These are convenient ways to run calculations in parallel in new
430threads. See "Parallel forms" in the manual for details.
359aab24 431
dbe30084
MD
432** Fair mutexes and condition variables
433
434Fair mutexes and condition variables have been added. The fairness
435means that scheduling is arranged to give as equal time shares as
436possible and that threads are awakened in a first-in-first-out
437manner. This is not guaranteed with standard mutexes and condition
438variables.
439
440In addition, fair mutexes are recursive. Locking a fair mutex that
441you have already locked will succeed. Every call to lock-mutex must
442be matched with a call to unlock-mutex. Only the last call to
443unlock-mutex will actually unlock the mutex.
444
445A fair condition variable must be used together with a fair mutex,
446just as a standard condition variable must be used together with a
447standard mutex.
448
b0d10ba6 449*** New functions: make-fair-mutex, make-fair-condition-variable'
dbe30084
MD
450
451Make a new fair mutex and a new fair condition variable respectively.
e2d820a1
MV
452
453** New function 'try-mutex'.
454
455This function will attempt to lock a mutex but will return immediately
1e5f92ce 456instead if blocking and indicate failure.
e2d820a1
MV
457
458** Waiting on a condition variable can have a timeout.
459
460The funtion 'wait-condition-variable' now takes a third, optional
461argument that specifies the point in time where the waiting should be
462aborted.
463
464** New function 'broadcast-condition-variable'.
465
5e405a60
MV
466** New functions 'all-threads' and 'current-thread'.
467
468** Signals and system asyncs work better with threads.
469
470The function 'sigaction' now takes a fourth, optional, argument that
471specifies the thread that the handler should run in. When the
472argument is omitted, the handler will run in the thread that called
473'sigaction'.
474
475Likewise, 'system-async-mark' takes a second, optional, argument that
476specifies the thread that the async should run in. When it is
477omitted, the async will run in the thread that called
478'system-async-mark'.
479
480C code can use the new functions scm_sigaction_for_thread and
481scm_system_async_mark_for_thread to pass the new thread argument.
482
483** The function 'system-async' is deprecated.
484
485You can now pass any zero-argument procedure to 'system-async-mark'.
486The function 'system-async' will just return its argument unchanged
487now.
488
acfa1f52
MV
489** New functions 'call-with-blocked-asyncs' and
490 'call-with-unblocked-asyncs'
491
492The expression (call-with-blocked-asyncs PROC) will call PROC and will
493block execution of system asyncs for the current thread by one level
494while PROC runs. Likewise, call-with-unblocked-asyncs will call a
495procedure and will unblock the execution of system asyncs by one
496level for the current thread.
497
498Only system asyncs are affected by these functions.
499
500** The functions 'mask-signals' and 'unmask-signals' are deprecated.
501
502Use 'call-with-blocked-asyncs' or 'call-with-unblocked-asyncs'
503instead. Those functions are easier to use correctly and can be
504nested.
505
7b232758
MV
506** New function 'unsetenv'.
507
f30482f3
MV
508** New macro 'define-syntax-public'.
509
510It works like 'define-syntax' and also exports the defined macro (but
511only on top-level).
512
1ee34062
MV
513** There is support for Infinity and NaNs.
514
515Following PLT Scheme, Guile can now work with infinite numbers, and
516'not-a-numbers'.
517
518There is new syntax for numbers: "+inf.0" (infinity), "-inf.0"
519(negative infinity), "+nan.0" (not-a-number), and "-nan.0" (same as
520"+nan.0"). These numbers are inexact and have no exact counterpart.
521
522Dividing by an inexact zero returns +inf.0 or -inf.0, depending on the
523sign of the dividend. The infinities are integers, and they answer #t
524for both 'even?' and 'odd?'. The +nan.0 value is not an integer and is
525not '=' to itself, but '+nan.0' is 'eqv?' to itself.
526
527For example
528
529 (/ 1 0.0)
530 => +inf.0
531
532 (/ 0 0.0)
533 => +nan.0
534
535 (/ 0)
536 ERROR: Numerical overflow
537
7b232758
MV
538Two new predicates 'inf?' and 'nan?' can be used to test for the
539special values.
540
ba1b077b
MV
541** Inexact zero can have a sign.
542
543Guile can now distinguish between plus and minus inexact zero, if your
544platform supports this, too. The two zeros are equal according to
545'=', but not according to 'eqv?'. For example
546
547 (- 0.0)
548 => -0.0
549
550 (= 0.0 (- 0.0))
551 => #t
552
553 (eqv? 0.0 (- 0.0))
554 => #f
555
bdf26b60
MV
556** Guile now has exact rationals.
557
558Guile can now represent fractions such as 1/3 exactly. Computing with
559them is also done exactly, of course:
560
561 (* 1/3 3/2)
562 => 1/2
563
564** 'floor', 'ceiling', 'round' and 'truncate' now return exact numbers
565 for exact arguments.
566
567For example: (floor 2) now returns an exact 2 where in the past it
568returned an inexact 2.0. Likewise, (floor 5/4) returns an exact 1.
569
570** inexact->exact no longer returns only integers.
571
572Without exact rationals, the closest exact number was always an
573integer, but now inexact->exact returns the fraction that is exactly
574equal to a floating point number. For example:
575
576 (inexact->exact 1.234)
577 => 694680242521899/562949953421312
578
579When you want the old behavior, use 'round' explicitely:
580
581 (inexact->exact (round 1.234))
582 => 1
583
584** New function 'rationalize'.
585
586This function finds a simple fraction that is close to a given real
587number. For example (and compare with inexact->exact above):
588
fb16d26e 589 (rationalize (inexact->exact 1.234) 1/2000)
bdf26b60
MV
590 => 58/47
591
fb16d26e
MV
592Note that, as required by R5RS, rationalize returns only then an exact
593result when both its arguments are exact.
594
bdf26b60
MV
595** 'odd?' and 'even?' work also for inexact integers.
596
597Previously, (odd? 1.0) would signal an error since only exact integers
598were recognized as integers. Now (odd? 1.0) returns #t, (odd? 2.0)
599returns #f and (odd? 1.5) signals an error.
600
b0d10ba6 601** Guile now has uninterned symbols.
610922b2 602
b0d10ba6 603The new function 'make-symbol' will return an uninterned symbol. This
610922b2
MV
604is a symbol that is unique and is guaranteed to remain unique.
605However, uninterned symbols can not yet be read back in.
606
607Use the new function 'symbol-interned?' to check whether a symbol is
608interned or not.
609
0e6f7775
MV
610** pretty-print has more options.
611
612The function pretty-print from the (ice-9 pretty-print) module can now
613also be invoked with keyword arguments that control things like
71f271b2 614maximum output width. See the manual for details.
0e6f7775 615
8c84b81e 616** Variables have no longer a special behavior for `equal?'.
ee0c7345
MV
617
618Previously, comparing two variables with `equal?' would recursivly
619compare their values. This is no longer done. Variables are now only
620`equal?' if they are `eq?'.
621
4e21fa60
MV
622** `(begin)' is now valid.
623
624You can now use an empty `begin' form. It will yield #<unspecified>
625when evaluated and simply be ignored in a definition context.
626
3063e30a
DH
627** Deprecated: procedure->macro
628
b0d10ba6
MV
629Change your code to use 'define-macro' or r5rs macros. Also, be aware
630that macro expansion will not be done during evaluation, but prior to
631evaluation.
3063e30a 632
0a50eeaa
NJ
633** Soft ports now allow a `char-ready?' procedure
634
635The vector argument to `make-soft-port' can now have a length of
636either 5 or 6. (Previously the length had to be 5.) The optional 6th
637element is interpreted as an `input-waiting' thunk -- i.e. a thunk
638that returns the number of characters that can be read immediately
639without the soft port blocking.
640
9a69a50e
NJ
641** New debugging feature: breakpoints.
642
7195a60f
NJ
643Guile now has breakpoints. For details see the `Debugging Features'
644chapter in the reference manual.
645
63dd3413
DH
646** Deprecated: undefine
647
648There is no replacement for undefine.
649
aef0bdb4
MV
650* The functions make-keyword-from-dash-symbol and keyword-dash-symbol
651 have been discouraged.
652
653They are relics from a time where a keyword like #:foo was used
654directly as a Tcl option "-foo" and thus keywords were internally
655stored as a symbol with a starting dash. We now store a symbol
656without the dash.
657
658Use symbol->keyword and keyword->symbol instead.
659
36a9b236 660
b00418df
DH
661* Changes to the C interface
662
f7f3964e
MV
663** There is the new notion of 'discouraged' features.
664
665This is a milder form of deprecation.
666
667Things that are discouraged should not be used in new code, but it is
668OK to leave them in old code for now. When a discouraged feature is
669used, no warning message is printed like there is for 'deprecated'
670features. Also, things that are merely discouraged are nevertheless
671implemented efficiently, while deprecated features can be very slow.
672
673You can omit discouraged features from libguile by configuring it with
674the '--disable-discouraged' option.
675
676** A new family of functions for converting between C values and
677 Scheme values has been added.
678
679These functions follow a common naming scheme and are designed to be
680easier to use, thread-safe and more future-proof than the older
681alternatives.
682
683 - int scm_is_* (...)
684
685 These are predicates that return a C boolean: 1 or 0. Instead of
686 SCM_NFALSEP, you can now use scm_is_true, for example.
687
688 - <type> scm_to_<type> (SCM val, ...)
689
690 These are functions that convert a Scheme value into an appropriate
691 C value. For example, you can use scm_to_int to safely convert from
692 a SCM to an int.
693
a2b6a0e7 694 - SCM scm_from_<type> (<type> val, ...)
f7f3964e
MV
695
696 These functions convert from a C type to a SCM value; for example,
697 scm_from_int for ints.
698
699There is a huge number of these functions, for numbers, strings,
700symbols, vectors, etc. They are documented in the reference manual in
701the API section together with the types that they apply to.
702
96d8c217
MV
703** New functions for dealing with complex numbers in C have been added.
704
705The new functions are scm_c_make_rectangular, scm_c_make_polar,
706scm_c_real_part, scm_c_imag_part, scm_c_magnitude and scm_c_angle.
707They work like scm_make_rectangular etc but take or return doubles
708directly.
709
710** The function scm_make_complex has been discouraged.
711
712Use scm_c_make_rectangular instead.
713
f7f3964e
MV
714** The INUM macros have been deprecated.
715
716A lot of code uses these macros to do general integer conversions,
b0d10ba6
MV
717although the macros only work correctly with fixnums. Use the
718following alternatives.
f7f3964e
MV
719
720 SCM_INUMP -> scm_is_integer or similar
721 SCM_NINUMP -> !scm_is_integer or similar
722 SCM_MAKINUM -> scm_from_int or similar
723 SCM_INUM -> scm_to_int or similar
724
b0d10ba6 725 SCM_VALIDATE_INUM_* -> Do not use these; scm_to_int, etc. will
f7f3964e
MV
726 do the validating for you.
727
f9656a9f
MV
728** The scm_num2<type> and scm_<type>2num functions and scm_make_real
729 have been discouraged.
f7f3964e
MV
730
731Use the newer scm_to_<type> and scm_from_<type> functions instead for
732new code. The functions have been discouraged since they don't fit
733the naming scheme.
734
735** The 'boolean' macros SCM_FALSEP etc have been discouraged.
736
737They have strange names, especially SCM_NFALSEP, and SCM_BOOLP
738evaluates its argument twice. Use scm_is_true, etc. instead for new
739code.
740
741** The macro SCM_EQ_P has been discouraged.
742
743Use scm_is_eq for new code, which fits better into the naming
744conventions.
d5b203a6 745
d5ac9b2a
MV
746** The macros SCM_CONSP, SCM_NCONSP, SCM_NULLP, and SCM_NNULLP have
747 been discouraged.
748
749Use the function scm_is_pair or scm_is_null instead.
750
409eb4e5
MV
751** The functions scm_round and scm_truncate have been deprecated and
752 are now available as scm_c_round and scm_c_truncate, respectively.
753
754These functions occupy the names that scm_round_number and
755scm_truncate_number should have.
756
3ff9283d
MV
757** The functions scm_c_string2str, scm_c_substring2str, and
758 scm_c_symbol2str have been deprecated.
c41acab3
MV
759
760Use scm_to_locale_stringbuf or similar instead, maybe together with
761scm_substring.
762
3ff9283d
MV
763** New functions scm_c_make_string, scm_c_string_length,
764 scm_c_string_ref, scm_c_string_set_x, scm_c_substring,
765 scm_c_substring_shared, scm_c_substring_copy.
766
767These are like scm_make_string, scm_length, etc. but are slightly
768easier to use from C.
769
770** The macros SCM_STRINGP, SCM_STRING_CHARS, SCM_STRING_LENGTH,
771 SCM_SYMBOL_CHARS, and SCM_SYMBOL_LENGTH have been deprecated.
772
773They export too many assumptions about the implementation of strings
774and symbols that are no longer true in the presence of
b0d10ba6
MV
775mutation-sharing substrings and when Guile switches to some form of
776Unicode.
3ff9283d
MV
777
778When working with strings, it is often best to use the normal string
779functions provided by Guile, such as scm_c_string_ref,
b0d10ba6
MV
780scm_c_string_set_x, scm_string_append, etc. Be sure to look in the
781manual since many more such functions are now provided than
782previously.
3ff9283d
MV
783
784When you want to convert a SCM string to a C string, use the
785scm_to_locale_string function or similar instead. For symbols, use
786scm_symbol_to_string and then work with that string. Because of the
787new string representation, scm_symbol_to_string does not need to copy
788and is thus quite efficient.
789
aef0bdb4 790** Some string, symbol and keyword functions have been discouraged.
3ff9283d 791
b0d10ba6 792They don't fit into the uniform naming scheme and are not explicit
3ff9283d
MV
793about the character encoding.
794
795Replace according to the following table:
796
797 scm_allocate_string -> scm_c_make_string
798 scm_take_str -> scm_take_locale_stringn
799 scm_take0str -> scm_take_locale_string
800 scm_mem2string -> scm_from_locale_stringn
801 scm_str2string -> scm_from_locale_string
802 scm_makfrom0str -> scm_from_locale_string
803 scm_mem2symbol -> scm_from_locale_symboln
b0d10ba6 804 scm_mem2uninterned_symbol -> scm_from_locale_stringn + scm_make_symbol
3ff9283d
MV
805 scm_str2symbol -> scm_from_locale_symbol
806
807 SCM_SYMBOL_HASH -> scm_hashq
808 SCM_SYMBOL_INTERNED_P -> scm_symbol_interned_p
809
aef0bdb4
MV
810 scm_c_make_keyword -> scm_from_locale_keyword
811
812** The functions scm_keyword_to_symbol and sym_symbol_to_keyword are
813 now also available to C code.
814
815** SCM_KEYWORDP and SCM_KEYWORDSYM have been deprecated.
816
817Use scm_is_keyword and scm_keyword_to_symbol instead, but note that
818the latter returns the true name of the keyword, not the 'dash name',
819as SCM_KEYWORDSYM used to do.
820
d4ea47c8
MV
821** The old uniform vector implementation has been unceremoniously
822 removed.
823
824This implementation exposed the detailes of the tagging system of
825Guile. Use the new C API explained in the manual in node "Uniform
826Vectors".
827
828The following macros are gone: SCM_UVECTOR_BASE, SCM_SET_UVECTOR_BASE,
829SCM_UVECTOR_MAXLENGTH, SCM_UVECTOR_LENGTH, SCM_MAKE_UVECTOR_TAG,
830SCM_SET_UVECTOR_LENGTH.
831
c1e7caf7
MV
832** SCM_CELL_WORD_LOC has been deprecated.
833
b0d10ba6 834Use the new macro SCM_CELL_OBJECT_LOC instead, which returns a pointer
c1e7caf7
MV
835to a SCM, as opposed to a pointer to a scm_t_bits.
836
837This was done to allow the correct use of pointers into the Scheme
838heap. Previously, the heap words were of type scm_t_bits and local
839variables and function arguments were of type SCM, making it
840non-standards-conformant to have a pointer that can point to both.
841
3ff9283d 842** New macros SCM_SMOB_DATA_2, SCM_SMOB_DATA_3, etc.
27968825
MV
843
844These macros should be used instead of SCM_CELL_WORD_2/3 to access the
845second and third words of double smobs. Likewise for
846SCM_SET_SMOB_DATA_2 and SCM_SET_SMOB_DATA_3.
847
848Also, there is SCM_SMOB_FLAGS and SCM_SET_SMOB_FLAGS that should be
849used to get and set the 16 exra bits in the zeroth word of a smob.
850
851And finally, there is SCM_SMOB_OBJECT and SCM_SMOB_SET_OBJECT for
852accesing the first immediate word of a smob as a SCM value, and there
853is SCM_SMOB_OBJECT_LOC for getting a pointer to the first immediate
b0d10ba6 854smob word. Like wise for SCM_SMOB_OBJECT_2, etc.
27968825 855
b0d10ba6 856** New way to deal with non-local exits and re-entries.
9879d390
MV
857
858There is a new set of functions that essentially do what
fc6bb283
MV
859scm_internal_dynamic_wind does, but in a way that is more convenient
860for C code in some situations. Here is a quick example of how to
861prevent a potential memory leak:
9879d390
MV
862
863 void
864 foo ()
865 {
866 char *mem;
867
fc6bb283 868 scm_frame_begin (0);
9879d390
MV
869
870 mem = scm_malloc (100);
f1da8e4e
MV
871 scm_frame_unwind_handler (free, mem, SCM_F_WIND_EXPLICITELY);
872
873 /* MEM would leak if BAR throws an error.
c41acab3
MV
874 SCM_FRAME_UNWIND_HANDLER frees it nevertheless.
875 */
9879d390 876
9879d390
MV
877 bar ();
878
fc6bb283 879 scm_frame_end ();
9879d390
MV
880
881 /* Because of SCM_F_WIND_EXPLICITELY, MEM will be freed by
fc6bb283 882 SCM_FRAME_END as well.
9879d390
MV
883 */
884 }
885
886For full documentation, see the node "Frames" in the manual.
887
c41acab3
MV
888** New function scm_frame_free
889
890This function calls 'free' on a given pointer when a frame is left.
891Thus the call to scm_frame_unwind_handler above could be replaced with
892simply scm_frame_free (mem).
893
49c00ecc
MV
894** New way to block and unblock asyncs
895
896In addition to scm_c_call_with_blocked_asyncs you can now also use
fc6bb283
MV
897scm_frame_block_asyncs in a 'frame' (see above). Likewise for
898scm_c_call_with_unblocked_asyncs and scm_frame_unblock_asyncs.
49c00ecc
MV
899
900** New way to temporarily set the current input, output or error ports
901
fc6bb283 902C code can now use scm_frame_current_<foo>_port in a 'frame' (see
49c00ecc
MV
903above). <foo> is one of "input", "output" or "error".
904
fc6bb283
MV
905** New way to temporarily set fluids
906
907C code can now use scm_frame_fluid in a 'frame' (see
908above) to temporarily set the value of a fluid.
909
89fcf1b4
MV
910** New types scm_t_intmax and scm_t_uintmax.
911
912On platforms that have them, these types are identical to intmax_t and
913uintmax_t, respectively. On other platforms, they are identical to
914the largest integer types that Guile knows about.
915
b0d10ba6 916** The functions scm_unmemocopy and scm_unmemoize have been removed.
9fcf3cbb 917
b0d10ba6 918You should not have used them.
9fcf3cbb 919
5ebbe4ef
RB
920** Many public #defines with generic names have been made private.
921
922#defines with generic names like HAVE_FOO or SIZEOF_FOO have been made
b0d10ba6 923private or renamed with a more suitable public name.
f03314f9
DH
924
925** The macro SCM_TYP16S has been deprecated.
926
b0d10ba6 927This macro is not intended for public use.
f03314f9 928
0d5e3480
DH
929** The macro SCM_SLOPPY_INEXACTP has been deprecated.
930
b0d10ba6 931Use scm_is_true (scm_inexact_p (...)) instead.
0d5e3480
DH
932
933** The macro SCM_SLOPPY_REALP has been deprecated.
934
b0d10ba6 935Use scm_is_real instead.
0d5e3480
DH
936
937** The macro SCM_SLOPPY_COMPLEXP has been deprecated.
938
b0d10ba6 939Use scm_is_complex instead.
5ebbe4ef 940
b0d10ba6 941** Some preprocessor defines have been deprecated.
5ebbe4ef 942
b0d10ba6
MV
943These defines indicated whether a certain feature was present in Guile
944or not. Going forward, assume that the features are always present.
5ebbe4ef 945
b0d10ba6
MV
946The macros are: USE_THREADS, GUILE_ISELECT, READER_EXTENSIONS,
947DEBUG_EXTENSIONS, DYNAMIC_LINKING.
5ebbe4ef 948
b0d10ba6
MV
949The following macros have been removed completely: MEMOIZE_LOCALS,
950SCM_RECKLESS, SCM_CAUTIOUS.
5ebbe4ef
RB
951
952** The preprocessor define STACK_DIRECTION has been deprecated.
953
954There should be no need to know about the stack direction for ordinary
b0d10ba6 955programs.
5ebbe4ef 956
b2cbe8d8
RB
957** New function: scm_effective_version
958
959Returns the "effective" version number. This is just the normal full
960version string without the final micro-version number. See "Changes
961to the distribution" above.
962
2902a459
MV
963** The function scm_call_with_new_thread has a new prototype.
964
965Instead of taking a list with the thunk and handler, these two
966arguments are now passed directly:
967
968 SCM scm_call_with_new_thread (SCM thunk, SCM handler);
969
970This is an incompatible change.
971
acfa1f52
MV
972** The value 'scm_mask_ints' is no longer writable.
973
974Previously, you could set scm_mask_ints directly. This is no longer
975possible. Use scm_c_call_with_blocked_asyncs and
976scm_c_call_with_unblocked_asyncs instead.
977
978** New functions scm_c_call_with_blocked_asyncs and
979 scm_c_call_with_unblocked_asyncs
980
981Like scm_call_with_blocked_asyncs etc. but for C functions.
982
ffd0ef3b
MV
983** New snarfer macro SCM_DEFINE_PUBLIC.
984
985This is like SCM_DEFINE, but also calls scm_c_export for the defined
986function in the init section.
987
8734ce02
MV
988** The snarfer macro SCM_SNARF_INIT is now officially supported.
989
f30482f3
MV
990** New macros SCM_VECTOR_REF and SCM_VECTOR_SET.
991
992Use these in preference to SCM_VELTS.
993
39e8f371 994** The SCM_VELTS macros now returns a read-only vector. For writing,
f30482f3 995use the new macros SCM_WRITABLE_VELTS or SCM_VECTOR_SET. The use of
ffd0ef3b 996SCM_WRITABLE_VELTS is discouraged, though.
39e8f371
HWN
997
998** Garbage collector rewrite.
999
1000The garbage collector is cleaned up a lot, and now uses lazy
1001sweeping. This is reflected in the output of (gc-stats); since cells
1002are being freed when they are allocated, the cells-allocated field
1003stays roughly constant.
1004
1005For malloc related triggers, the behavior is changed. It uses the same
1006heuristic as the cell-triggered collections. It may be tuned with the
1007environment variables GUILE_MIN_YIELD_MALLOC. This is the percentage
1008for minimum yield of malloc related triggers. The default is 40.
1009GUILE_INIT_MALLOC_LIMIT sets the initial trigger for doing a GC. The
1010default is 200 kb.
1011
1012Debugging operations for the freelist have been deprecated, along with
1013the C variables that control garbage collection. The environment
1014variables GUILE_MAX_SEGMENT_SIZE, GUILE_INIT_SEGMENT_SIZE_2,
1015GUILE_INIT_SEGMENT_SIZE_1, and GUILE_MIN_YIELD_2 should be used.
1016
5ec1d2c8
DH
1017** The function scm_definedp has been renamed to scm_defined_p
1018
1019The name scm_definedp is deprecated.
1020
b0d10ba6 1021** The struct scm_cell type has been renamed to scm_t_cell
228a24ef
DH
1022
1023This is in accordance to Guile's naming scheme for types. Note that
1024the name scm_cell is now used for a function that allocates and
1025initializes a new cell (see below).
1026
0906625f
MV
1027** New functions for memory management
1028
1029A new set of functions for memory management has been added since the
1030old way (scm_must_malloc, scm_must_free, etc) was error prone and
1031indeed, Guile itself contained some long standing bugs that could
1032cause aborts in long running programs.
1033
1034The new functions are more symmetrical and do not need cooperation
1035from smob free routines, among other improvements.
1036
eab1b259
HWN
1037The new functions are scm_malloc, scm_realloc, scm_calloc, scm_strdup,
1038scm_strndup, scm_gc_malloc, scm_gc_calloc, scm_gc_realloc,
1039scm_gc_free, scm_gc_register_collectable_memory, and
0906625f
MV
1040scm_gc_unregister_collectable_memory. Refer to the manual for more
1041details and for upgrading instructions.
1042
1043The old functions for memory management have been deprecated. They
1044are: scm_must_malloc, scm_must_realloc, scm_must_free,
1045scm_must_strdup, scm_must_strndup, scm_done_malloc, scm_done_free.
1046
4aa104a4
MV
1047** Declarations of exported features are marked with SCM_API.
1048
1049Every declaration of a feature that belongs to the exported Guile API
1050has been marked by adding the macro "SCM_API" to the start of the
1051declaration. This macro can expand into different things, the most
1052common of which is just "extern" for Unix platforms. On Win32, it can
1053be used to control which symbols are exported from a DLL.
1054
8f99e3f3 1055If you `#define SCM_IMPORT' before including <libguile.h>, SCM_API
4aa104a4
MV
1056will expand into "__declspec (dllimport) extern", which is needed for
1057linking to the Guile DLL in Windows.
1058
b0d10ba6 1059There are also SCM_RL_IMPORT, SCM_SRFI1314_IMPORT, and
8f99e3f3 1060SCM_SRFI4_IMPORT, for the corresponding libraries.
4aa104a4 1061
a9930d22
MV
1062** SCM_NEWCELL and SCM_NEWCELL2 have been deprecated.
1063
b0d10ba6
MV
1064Use the new functions scm_cell and scm_double_cell instead. The old
1065macros had problems because with them allocation and initialization
1066was separated and the GC could sometimes observe half initialized
1067cells. Only careful coding by the user of SCM_NEWCELL and
1068SCM_NEWCELL2 could make this safe and efficient.
a9930d22 1069
5132eef0
DH
1070** CHECK_ENTRY, CHECK_APPLY and CHECK_EXIT have been deprecated.
1071
1072Use the variables scm_check_entry_p, scm_check_apply_p and scm_check_exit_p
1073instead.
1074
bc76d628
DH
1075** SRCBRKP has been deprecated.
1076
1077Use scm_c_source_property_breakpoint_p instead.
1078
3063e30a
DH
1079** Deprecated: scm_makmacro
1080
b0d10ba6
MV
1081Change your code to use either scm_makmmacro or to define macros in
1082Scheme, using 'define-macro'.
1e5f92ce 1083
1a61d41b
MV
1084** New function scm_c_port_for_each.
1085
1086This function is like scm_port_for_each but takes a pointer to a C
1087function as the callback instead of a SCM value.
1088
b0d10ba6
MV
1089** Many definitions have been removed that were previously deprecated.
1090
1091scm_lisp_nil, scm_lisp_t, s_nil_ify, scm_m_nil_ify, s_t_ify,
1092scm_m_t_ify, s_0_cond, scm_m_0_cond, s_0_ify, scm_m_0_ify, s_1_ify,
1093scm_m_1_ify, scm_debug_newcell, scm_debug_newcell2,
1094scm_tc16_allocated, SCM_SET_SYMBOL_HASH, SCM_IM_NIL_IFY, SCM_IM_T_IFY,
1095SCM_IM_0_COND, SCM_IM_0_IFY, SCM_IM_1_IFY, SCM_GC_SET_ALLOCATED,
1096scm_debug_newcell, scm_debug_newcell2, SCM_HUP_SIGNAL, SCM_INT_SIGNAL,
1097SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL, SCM_ALRM_SIGNAL,
1098SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD, SCM_ORD_SIG,
1099SCM_NUM_SIGS, scm_top_level_lookup_closure_var,
1100*top-level-lookup-closure*, scm_system_transformer, scm_eval_3,
1101scm_eval2, root_module_lookup_closure, SCM_SLOPPY_STRINGP,
1102SCM_RWSTRINGP, scm_read_only_string_p, scm_make_shared_substring,
1103scm_tc7_substring, sym_huh, SCM_VARVCELL, SCM_UDVARIABLEP,
1104SCM_DEFVARIABLEP, scm_mkbig, scm_big2inum, scm_adjbig, scm_normbig,
1105scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl, SCM_FIXNUM_BIT,
1106SCM_SETCHARS, SCM_SLOPPY_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET,
1107SCM_LENGTH_MAX, SCM_SETLENGTH, SCM_ROSTRINGP, SCM_ROLENGTH,
1108SCM_ROCHARS, SCM_ROUCHARS, SCM_SUBSTRP, SCM_COERCE_SUBSTR,
1109scm_sym2vcell, scm_intern, scm_intern0, scm_sysintern, scm_sysintern0,
66c8ded2 1110scm_sysintern0_no_module_lookup, scm_init_symbols_deprecated,
2109da78 1111scm_vector_set_length_x, scm_contregs, scm_debug_info,
983e697d
MV
1112scm_debug_frame, SCM_DSIDEVAL, SCM_CONST_LONG, SCM_VCELL,
1113SCM_GLOBAL_VCELL, SCM_VCELL_INIT, SCM_GLOBAL_VCELL_INIT,
1114SCM_HUGE_LENGTH, SCM_VALIDATE_STRINGORSUBSTR, SCM_VALIDATE_ROSTRING,
1115SCM_VALIDATE_ROSTRING_COPY, SCM_VALIDATE_NULLORROSTRING_COPY,
1116SCM_VALIDATE_RWSTRING, DIGITS, scm_small_istr2int, scm_istr2int,
2109da78
MV
1117scm_istr2flo, scm_istring2number, scm_istr2int, scm_istr2flo,
1118scm_istring2number, scm_vtable_index_vcell, scm_si_vcell, SCM_ECONSP,
1119SCM_NECONSP, SCM_GLOC_VAR, SCM_GLOC_VAL, SCM_GLOC_SET_VAL,
c41acab3
MV
1120SCM_GLOC_VAL_LOC, scm_make_gloc, scm_gloc_p, scm_tc16_variable,
1121SCM_CHARS, SCM_LENGTH, SCM_SET_STRING_CHARS, SCM_SET_STRING_LENGTH.
b51bad08 1122
328dc9a3 1123\f
c299f186
MD
1124Changes since Guile 1.4:
1125
1126* Changes to the distribution
1127
32d6f999
TTN
1128** A top-level TODO file is included.
1129
311b6a3c 1130** Guile now uses a versioning scheme similar to that of the Linux kernel.
c81ea65d
RB
1131
1132Guile now always uses three numbers to represent the version,
1133i.e. "1.6.5". The first number, 1, is the major version number, the
1134second number, 6, is the minor version number, and the third number,
11355, is the micro version number. Changes in major version number
1136indicate major changes in Guile.
1137
1138Minor version numbers that are even denote stable releases, and odd
1139minor version numbers denote development versions (which may be
1140unstable). The micro version number indicates a minor sub-revision of
1141a given MAJOR.MINOR release.
1142
1143In keeping with the new scheme, (minor-version) and scm_minor_version
1144no longer return everything but the major version number. They now
1145just return the minor version number. Two new functions
1146(micro-version) and scm_micro_version have been added to report the
1147micro version number.
1148
1149In addition, ./GUILE-VERSION now defines GUILE_MICRO_VERSION.
1150
5c790b44
RB
1151** New preprocessor definitions are available for checking versions.
1152
1153version.h now #defines SCM_MAJOR_VERSION, SCM_MINOR_VERSION, and
1154SCM_MICRO_VERSION to the appropriate integer values.
1155
311b6a3c
MV
1156** Guile now actively warns about deprecated features.
1157
1158The new configure option `--enable-deprecated=LEVEL' and the
1159environment variable GUILE_WARN_DEPRECATED control this mechanism.
1160See INSTALL and README for more information.
1161
0b073f0f
RB
1162** Guile is much more likely to work on 64-bit architectures.
1163
1164Guile now compiles and passes "make check" with only two UNRESOLVED GC
5e137c65
RB
1165cases on Alpha and ia64 based machines now. Thanks to John Goerzen
1166for the use of a test machine, and thanks to Stefan Jahn for ia64
1167patches.
0b073f0f 1168
e658215a
RB
1169** New functions: setitimer and getitimer.
1170
1171These implement a fairly direct interface to the libc functions of the
1172same name.
1173
8630fdfc
RB
1174** The #. reader extension is now disabled by default.
1175
1176For safety reasons, #. evaluation is disabled by default. To
1177re-enable it, set the fluid read-eval? to #t. For example:
1178
67b7dd9e 1179 (fluid-set! read-eval? #t)
8630fdfc
RB
1180
1181but make sure you realize the potential security risks involved. With
1182read-eval? enabled, reading a data file from an untrusted source can
1183be dangerous.
1184
f2a75d81 1185** New SRFI modules have been added:
4df36934 1186
dfdf5826
MG
1187SRFI-0 `cond-expand' is now supported in Guile, without requiring
1188using a module.
1189
e8bb0476
MG
1190(srfi srfi-1) is a library containing many useful pair- and list-processing
1191 procedures.
1192
7adc2c58 1193(srfi srfi-2) exports and-let*.
4df36934 1194
b74a7ec8
MG
1195(srfi srfi-4) implements homogeneous numeric vector datatypes.
1196
7adc2c58
RB
1197(srfi srfi-6) is a dummy module for now, since guile already provides
1198 all of the srfi-6 procedures by default: open-input-string,
1199 open-output-string, get-output-string.
4df36934 1200
7adc2c58 1201(srfi srfi-8) exports receive.
4df36934 1202
7adc2c58 1203(srfi srfi-9) exports define-record-type.
4df36934 1204
dfdf5826
MG
1205(srfi srfi-10) exports define-reader-ctor and implements the reader
1206 extension #,().
1207
7adc2c58 1208(srfi srfi-11) exports let-values and let*-values.
4df36934 1209
7adc2c58 1210(srfi srfi-13) implements the SRFI String Library.
53e29a1e 1211
7adc2c58 1212(srfi srfi-14) implements the SRFI Character-Set Library.
53e29a1e 1213
dfdf5826
MG
1214(srfi srfi-17) implements setter and getter-with-setter and redefines
1215 some accessor procedures as procedures with getters. (such as car,
1216 cdr, vector-ref etc.)
1217
1218(srfi srfi-19) implements the SRFI Time/Date Library.
2b60bc95 1219
466bb4b3
TTN
1220** New scripts / "executable modules"
1221
1222Subdirectory "scripts" contains Scheme modules that are packaged to
1223also be executable as scripts. At this time, these scripts are available:
1224
1225 display-commentary
1226 doc-snarf
1227 generate-autoload
1228 punify
58e5b910 1229 read-scheme-source
466bb4b3
TTN
1230 use2dot
1231
1232See README there for more info.
1233
54c17ccb
TTN
1234These scripts can be invoked from the shell with the new program
1235"guile-tools", which keeps track of installation directory for you.
1236For example:
1237
1238 $ guile-tools display-commentary srfi/*.scm
1239
1240guile-tools is copied to the standard $bindir on "make install".
1241
0109c4bf
MD
1242** New module (ice-9 stack-catch):
1243
1244stack-catch is like catch, but saves the current state of the stack in
3c1d1301
RB
1245the fluid the-last-stack. This fluid can be useful when using the
1246debugger and when re-throwing an error.
0109c4bf 1247
fbf0c8c7
MV
1248** The module (ice-9 and-let*) has been renamed to (ice-9 and-let-star)
1249
1250This has been done to prevent problems on lesser operating systems
1251that can't tolerate `*'s in file names. The exported macro continues
1252to be named `and-let*', of course.
1253
4f60cc33 1254On systems that support it, there is also a compatibility module named
fbf0c8c7 1255(ice-9 and-let*). It will go away in the next release.
6c0201ad 1256
9d774814 1257** New modules (oop goops) etc.:
14f1d9fe
MD
1258
1259 (oop goops)
1260 (oop goops describe)
1261 (oop goops save)
1262 (oop goops active-slot)
1263 (oop goops composite-slot)
1264
9d774814 1265The Guile Object Oriented Programming System (GOOPS) has been
311b6a3c
MV
1266integrated into Guile. For further information, consult the GOOPS
1267manual and tutorial in the `doc' directory.
14f1d9fe 1268
9d774814
GH
1269** New module (ice-9 rdelim).
1270
1271This exports the following procedures which were previously defined
1c8cbd62 1272in the default environment:
9d774814 1273
1c8cbd62
GH
1274read-line read-line! read-delimited read-delimited! %read-delimited!
1275%read-line write-line
9d774814 1276
1c8cbd62
GH
1277For backwards compatibility the definitions are still imported into the
1278default environment in this version of Guile. However you should add:
9d774814
GH
1279
1280(use-modules (ice-9 rdelim))
1281
1c8cbd62
GH
1282to any program which uses the definitions, since this may change in
1283future.
9d774814
GH
1284
1285Alternatively, if guile-scsh is installed, the (scsh rdelim) module
1286can be used for similar functionality.
1287
7e267da1
GH
1288** New module (ice-9 rw)
1289
1290This is a subset of the (scsh rw) module from guile-scsh. Currently
373f4948 1291it defines two procedures:
7e267da1 1292
311b6a3c 1293*** New function: read-string!/partial str [port_or_fdes [start [end]]]
7e267da1 1294
4bcdfe46
GH
1295 Read characters from a port or file descriptor into a string STR.
1296 A port must have an underlying file descriptor -- a so-called
1297 fport. This procedure is scsh-compatible and can efficiently read
311b6a3c 1298 large strings.
7e267da1 1299
4bcdfe46
GH
1300*** New function: write-string/partial str [port_or_fdes [start [end]]]
1301
1302 Write characters from a string STR to a port or file descriptor.
1303 A port must have an underlying file descriptor -- a so-called
1304 fport. This procedure is mostly compatible and can efficiently
1305 write large strings.
1306
e5005373
KN
1307** New module (ice-9 match)
1308
311b6a3c
MV
1309This module includes Andrew K. Wright's pattern matcher. See
1310ice-9/match.scm for brief description or
e5005373 1311
311b6a3c 1312 http://www.star-lab.com/wright/code.html
e5005373 1313
311b6a3c 1314for complete documentation.
e5005373 1315
4f60cc33
NJ
1316** New module (ice-9 buffered-input)
1317
1318This module provides procedures to construct an input port from an
1319underlying source of input that reads and returns its input in chunks.
1320The underlying input source is a Scheme procedure, specified by the
1321caller, which the port invokes whenever it needs more input.
1322
1323This is useful when building an input port whose back end is Readline
1324or a UI element such as the GtkEntry widget.
1325
1326** Documentation
1327
1328The reference and tutorial documentation that was previously
1329distributed separately, as `guile-doc', is now included in the core
1330Guile distribution. The documentation consists of the following
1331manuals.
1332
1333- The Guile Tutorial (guile-tut.texi) contains a tutorial introduction
1334 to using Guile.
1335
1336- The Guile Reference Manual (guile.texi) contains (or is intended to
1337 contain) reference documentation on all aspects of Guile.
1338
1339- The GOOPS Manual (goops.texi) contains both tutorial-style and
1340 reference documentation for using GOOPS, Guile's Object Oriented
1341 Programming System.
1342
c3e62877
NJ
1343- The Revised^5 Report on the Algorithmic Language Scheme
1344 (r5rs.texi).
4f60cc33
NJ
1345
1346See the README file in the `doc' directory for more details.
1347
094a67bb
MV
1348** There are a couple of examples in the examples/ directory now.
1349
9d774814
GH
1350* Changes to the stand-alone interpreter
1351
e7e58018
MG
1352** New command line option `--use-srfi'
1353
1354Using this option, SRFI modules can be loaded on startup and be
1355available right from the beginning. This makes programming portable
1356Scheme programs easier.
1357
1358The option `--use-srfi' expects a comma-separated list of numbers,
1359each representing a SRFI number to be loaded into the interpreter
1360before starting evaluating a script file or the REPL. Additionally,
1361the feature identifier for the loaded SRFIs is recognized by
1362`cond-expand' when using this option.
1363
1364Example:
1365$ guile --use-srfi=8,13
1366guile> (receive (x z) (values 1 2) (+ 1 2))
13673
58e5b910 1368guile> (string-pad "bla" 20)
e7e58018
MG
1369" bla"
1370
094a67bb
MV
1371** Guile now always starts up in the `(guile-user)' module.
1372
6e9382f1 1373Previously, scripts executed via the `-s' option would run in the
094a67bb
MV
1374`(guile)' module and the repl would run in the `(guile-user)' module.
1375Now every user action takes place in the `(guile-user)' module by
1376default.
e7e58018 1377
c299f186
MD
1378* Changes to Scheme functions and syntax
1379
720e1c30
MV
1380** Character classifiers work for non-ASCII characters.
1381
1382The predicates `char-alphabetic?', `char-numeric?',
1383`char-whitespace?', `char-lower?', `char-upper?' and `char-is-both?'
1384no longer check whether their arguments are ASCII characters.
1385Previously, a character would only be considered alphabetic when it
1386was also ASCII, for example.
1387
311b6a3c
MV
1388** Previously deprecated Scheme functions have been removed:
1389
1390 tag - no replacement.
1391 fseek - replaced by seek.
1392 list* - replaced by cons*.
1393
1394** It's now possible to create modules with controlled environments
1395
1396Example:
1397
1398(use-modules (ice-9 safe))
1399(define m (make-safe-module))
1400;;; m will now be a module containing only a safe subset of R5RS
1401(eval '(+ 1 2) m) --> 3
1402(eval 'load m) --> ERROR: Unbound variable: load
1403
1404** Evaluation of "()", the empty list, is now an error.
8c2c9967
MV
1405
1406Previously, the expression "()" evaluated to the empty list. This has
1407been changed to signal a "missing expression" error. The correct way
1408to write the empty list as a literal constant is to use quote: "'()".
1409
311b6a3c
MV
1410** New concept of `Guile Extensions'.
1411
1412A Guile Extension is just a ordinary shared library that can be linked
1413at run-time. We found it advantageous to give this simple concept a
1414dedicated name to distinguish the issues related to shared libraries
1415from the issues related to the module system.
1416
1417*** New function: load-extension
1418
1419Executing (load-extension lib init) is mostly equivalent to
1420
1421 (dynamic-call init (dynamic-link lib))
1422
1423except when scm_register_extension has been called previously.
1424Whenever appropriate, you should use `load-extension' instead of
1425dynamic-link and dynamic-call.
1426
1427*** New C function: scm_c_register_extension
1428
1429This function registers a initialization function for use by
1430`load-extension'. Use it when you don't want specific extensions to
1431be loaded as shared libraries (for example on platforms that don't
1432support dynamic linking).
1433
8c2c9967
MV
1434** Auto-loading of compiled-code modules is deprecated.
1435
1436Guile used to be able to automatically find and link a shared
c10ecc4c 1437library to satisfy requests for a module. For example, the module
8c2c9967
MV
1438`(foo bar)' could be implemented by placing a shared library named
1439"foo/libbar.so" (or with a different extension) in a directory on the
1440load path of Guile.
1441
311b6a3c
MV
1442This has been found to be too tricky, and is no longer supported. The
1443shared libraries are now called "extensions". You should now write a
1444small Scheme file that calls `load-extension' to load the shared
1445library and initialize it explicitely.
8c2c9967
MV
1446
1447The shared libraries themselves should be installed in the usual
1448places for shared libraries, with names like "libguile-foo-bar".
1449
1450For example, place this into a file "foo/bar.scm"
1451
1452 (define-module (foo bar))
1453
311b6a3c
MV
1454 (load-extension "libguile-foo-bar" "foobar_init")
1455
1456** Backward incompatible change: eval EXP ENVIRONMENT-SPECIFIER
1457
1458`eval' is now R5RS, that is it takes two arguments.
1459The second argument is an environment specifier, i.e. either
1460
1461 (scheme-report-environment 5)
1462 (null-environment 5)
1463 (interaction-environment)
1464
1465or
8c2c9967 1466
311b6a3c 1467 any module.
8c2c9967 1468
6f76852b
MV
1469** The module system has been made more disciplined.
1470
311b6a3c
MV
1471The function `eval' will save and restore the current module around
1472the evaluation of the specified expression. While this expression is
1473evaluated, `(current-module)' will now return the right module, which
1474is the module specified as the second argument to `eval'.
6f76852b 1475
311b6a3c 1476A consequence of this change is that `eval' is not particularly
6f76852b
MV
1477useful when you want allow the evaluated code to change what module is
1478designated as the current module and have this change persist from one
1479call to `eval' to the next. The read-eval-print-loop is an example
1480where `eval' is now inadequate. To compensate, there is a new
1481function `primitive-eval' that does not take a module specifier and
1482that does not save/restore the current module. You should use this
1483function together with `set-current-module', `current-module', etc
1484when you want to have more control over the state that is carried from
1485one eval to the next.
1486
1487Additionally, it has been made sure that forms that are evaluated at
1488the top level are always evaluated with respect to the current module.
1489Previously, subforms of top-level forms such as `begin', `case',
1490etc. did not respect changes to the current module although these
1491subforms are at the top-level as well.
1492
311b6a3c 1493To prevent strange behavior, the forms `define-module',
6f76852b
MV
1494`use-modules', `use-syntax', and `export' have been restricted to only
1495work on the top level. The forms `define-public' and
1496`defmacro-public' only export the new binding on the top level. They
1497behave just like `define' and `defmacro', respectively, when they are
1498used in a lexical environment.
1499
0a892a2c
MV
1500Also, `export' will no longer silently re-export bindings imported
1501from a used module. It will emit a `deprecation' warning and will
1502cease to perform any re-export in the next version. If you actually
1503want to re-export bindings, use the new `re-export' in place of
1504`export'. The new `re-export' will not make copies of variables when
1505rexporting them, as `export' did wrongly.
1506
047dc3ae
TTN
1507** Module system now allows selection and renaming of imported bindings
1508
1509Previously, when using `use-modules' or the `#:use-module' clause in
1510the `define-module' form, all the bindings (association of symbols to
1511values) for imported modules were added to the "current module" on an
1512as-is basis. This has been changed to allow finer control through two
1513new facilities: selection and renaming.
1514
1515You can now select which of the imported module's bindings are to be
1516visible in the current module by using the `:select' clause. This
1517clause also can be used to rename individual bindings. For example:
1518
1519 ;; import all bindings no questions asked
1520 (use-modules (ice-9 common-list))
1521
1522 ;; import four bindings, renaming two of them;
1523 ;; the current module sees: every some zonk-y zonk-n
1524 (use-modules ((ice-9 common-list)
1525 :select (every some
1526 (remove-if . zonk-y)
1527 (remove-if-not . zonk-n))))
1528
1529You can also programmatically rename all selected bindings using the
1530`:renamer' clause, which specifies a proc that takes a symbol and
1531returns another symbol. Because it is common practice to use a prefix,
1532we now provide the convenience procedure `symbol-prefix-proc'. For
1533example:
1534
1535 ;; import four bindings, renaming two of them specifically,
1536 ;; and all four w/ prefix "CL:";
1537 ;; the current module sees: CL:every CL:some CL:zonk-y CL:zonk-n
1538 (use-modules ((ice-9 common-list)
1539 :select (every some
1540 (remove-if . zonk-y)
1541 (remove-if-not . zonk-n))
1542 :renamer (symbol-prefix-proc 'CL:)))
1543
1544 ;; import four bindings, renaming two of them specifically,
1545 ;; and all four by upcasing.
1546 ;; the current module sees: EVERY SOME ZONK-Y ZONK-N
1547 (define (upcase-symbol sym)
1548 (string->symbol (string-upcase (symbol->string sym))))
1549
1550 (use-modules ((ice-9 common-list)
1551 :select (every some
1552 (remove-if . zonk-y)
1553 (remove-if-not . zonk-n))
1554 :renamer upcase-symbol))
1555
1556Note that programmatic renaming is done *after* individual renaming.
1557Also, the above examples show `use-modules', but the same facilities are
1558available for the `#:use-module' clause of `define-module'.
1559
1560See manual for more info.
1561
b7d69200 1562** The semantics of guardians have changed.
56495472 1563
b7d69200 1564The changes are for the most part compatible. An important criterion
6c0201ad 1565was to keep the typical usage of guardians as simple as before, but to
c0a5d888 1566make the semantics safer and (as a result) more useful.
56495472 1567
c0a5d888 1568*** All objects returned from guardians are now properly alive.
56495472 1569
c0a5d888
ML
1570It is now guaranteed that any object referenced by an object returned
1571from a guardian is alive. It's now impossible for a guardian to
1572return a "contained" object before its "containing" object.
56495472
ML
1573
1574One incompatible (but probably not very important) change resulting
1575from this is that it is no longer possible to guard objects that
1576indirectly reference themselves (i.e. are parts of cycles). If you do
1577so accidentally, you'll get a warning.
1578
c0a5d888
ML
1579*** There are now two types of guardians: greedy and sharing.
1580
1581If you call (make-guardian #t) or just (make-guardian), you'll get a
1582greedy guardian, and for (make-guardian #f) a sharing guardian.
1583
1584Greedy guardians are the default because they are more "defensive".
1585You can only greedily guard an object once. If you guard an object
1586more than once, once in a greedy guardian and the rest of times in
1587sharing guardians, then it is guaranteed that the object won't be
1588returned from sharing guardians as long as it is greedily guarded
1589and/or alive.
1590
1591Guardians returned by calls to `make-guardian' can now take one more
1592optional parameter, which says whether to throw an error in case an
1593attempt is made to greedily guard an object that is already greedily
1594guarded. The default is true, i.e. throw an error. If the parameter
1595is false, the guardian invocation returns #t if guarding was
1596successful and #f if it wasn't.
1597
1598Also, since greedy guarding is, in effect, a side-effecting operation
1599on objects, a new function is introduced: `destroy-guardian!'.
1600Invoking this function on a guardian renders it unoperative and, if
1601the guardian is greedy, clears the "greedily guarded" property of the
1602objects that were guarded by it, thus undoing the side effect.
1603
1604Note that all this hair is hardly very important, since guardian
1605objects are usually permanent.
1606
311b6a3c
MV
1607** Continuations created by call-with-current-continuation now accept
1608any number of arguments, as required by R5RS.
818febc0 1609
c10ecc4c 1610** New function `issue-deprecation-warning'
56426fdb 1611
311b6a3c 1612This function is used to display the deprecation messages that are
c10ecc4c 1613controlled by GUILE_WARN_DEPRECATION as explained in the README.
56426fdb
KN
1614
1615 (define (id x)
c10ecc4c
MV
1616 (issue-deprecation-warning "`id' is deprecated. Use `identity' instead.")
1617 (identity x))
56426fdb
KN
1618
1619 guile> (id 1)
1620 ;; `id' is deprecated. Use `identity' instead.
1621 1
1622 guile> (id 1)
1623 1
1624
c10ecc4c
MV
1625** New syntax `begin-deprecated'
1626
1627When deprecated features are included (as determined by the configure
1628option --enable-deprecated), `begin-deprecated' is identical to
1629`begin'. When deprecated features are excluded, it always evaluates
1630to `#f', ignoring the body forms.
1631
17f367e0
MV
1632** New function `make-object-property'
1633
1634This function returns a new `procedure with setter' P that can be used
1635to attach a property to objects. When calling P as
1636
1637 (set! (P obj) val)
1638
1639where `obj' is any kind of object, it attaches `val' to `obj' in such
1640a way that it can be retrieved by calling P as
1641
1642 (P obj)
1643
1644This function will replace procedure properties, symbol properties and
1645source properties eventually.
1646
76ef92f3
MV
1647** Module (ice-9 optargs) now uses keywords instead of `#&'.
1648
1649Instead of #&optional, #&key, etc you should now use #:optional,
1650#:key, etc. Since #:optional is a keyword, you can write it as just
1651:optional when (read-set! keywords 'prefix) is active.
1652
1653The old reader syntax `#&' is still supported, but deprecated. It
1654will be removed in the next release.
1655
c0997079
MD
1656** New define-module option: pure
1657
1658Tells the module system not to include any bindings from the root
1659module.
1660
1661Example:
1662
1663(define-module (totally-empty-module)
1664 :pure)
1665
1666** New define-module option: export NAME1 ...
1667
1668Export names NAME1 ...
1669
1670This option is required if you want to be able to export bindings from
1671a module which doesn't import one of `define-public' or `export'.
1672
1673Example:
1674
311b6a3c
MV
1675 (define-module (foo)
1676 :pure
1677 :use-module (ice-9 r5rs)
1678 :export (bar))
69b5f65a 1679
311b6a3c 1680 ;;; Note that we're pure R5RS below this point!
69b5f65a 1681
311b6a3c
MV
1682 (define (bar)
1683 ...)
daa6ba18 1684
1f3908c4
KN
1685** New function: object->string OBJ
1686
1687Return a Scheme string obtained by printing a given object.
1688
eb5c0a2a
GH
1689** New function: port? X
1690
1691Returns a boolean indicating whether X is a port. Equivalent to
1692`(or (input-port? X) (output-port? X))'.
1693
efa40607
DH
1694** New function: file-port?
1695
1696Determines whether a given object is a port that is related to a file.
1697
34b56ec4
GH
1698** New function: port-for-each proc
1699
311b6a3c
MV
1700Apply PROC to each port in the Guile port table in turn. The return
1701value is unspecified. More specifically, PROC is applied exactly once
1702to every port that exists in the system at the time PORT-FOR-EACH is
1703invoked. Changes to the port table while PORT-FOR-EACH is running
1704have no effect as far as PORT-FOR-EACH is concerned.
34b56ec4
GH
1705
1706** New function: dup2 oldfd newfd
1707
1708A simple wrapper for the `dup2' system call. Copies the file
1709descriptor OLDFD to descriptor number NEWFD, replacing the
1710previous meaning of NEWFD. Both OLDFD and NEWFD must be integers.
1711Unlike for dup->fdes or primitive-move->fdes, no attempt is made
264e9cbc 1712to move away ports which are using NEWFD. The return value is
34b56ec4
GH
1713unspecified.
1714
1715** New function: close-fdes fd
1716
1717A simple wrapper for the `close' system call. Close file
1718descriptor FD, which must be an integer. Unlike close (*note
1719close: Ports and File Descriptors.), the file descriptor will be
1720closed even if a port is using it. The return value is
1721unspecified.
1722
94e6d793
MG
1723** New function: crypt password salt
1724
1725Encrypts `password' using the standard unix password encryption
1726algorithm.
1727
1728** New function: chroot path
1729
1730Change the root directory of the running process to `path'.
1731
1732** New functions: getlogin, cuserid
1733
1734Return the login name or the user name of the current effective user
1735id, respectively.
1736
1737** New functions: getpriority which who, setpriority which who prio
1738
1739Get or set the priority of the running process.
1740
1741** New function: getpass prompt
1742
1743Read a password from the terminal, first displaying `prompt' and
1744disabling echoing.
1745
1746** New function: flock file operation
1747
1748Set/remove an advisory shared or exclusive lock on `file'.
1749
1750** New functions: sethostname name, gethostname
1751
1752Set or get the hostname of the machine the current process is running
1753on.
1754
6d163216 1755** New function: mkstemp! tmpl
4f60cc33 1756
6d163216
GH
1757mkstemp creates a new unique file in the file system and returns a
1758new buffered port open for reading and writing to the file. TMPL
1759is a string specifying where the file should be created: it must
1760end with `XXXXXX' and will be changed in place to return the name
1761of the temporary file.
1762
62e63ba9
MG
1763** New function: open-input-string string
1764
1765Return an input string port which delivers the characters from
4f60cc33 1766`string'. This procedure, together with `open-output-string' and
62e63ba9
MG
1767`get-output-string' implements SRFI-6.
1768
1769** New function: open-output-string
1770
1771Return an output string port which collects all data written to it.
1772The data can then be retrieved by `get-output-string'.
1773
1774** New function: get-output-string
1775
1776Return the contents of an output string port.
1777
56426fdb
KN
1778** New function: identity
1779
1780Return the argument.
1781
5bef627d
GH
1782** socket, connect, accept etc., now have support for IPv6. IPv6 addresses
1783 are represented in Scheme as integers with normal host byte ordering.
1784
1785** New function: inet-pton family address
1786
311b6a3c
MV
1787Convert a printable string network address into an integer. Note that
1788unlike the C version of this function, the result is an integer with
1789normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
1790e.g.,
1791
1792 (inet-pton AF_INET "127.0.0.1") => 2130706433
1793 (inet-pton AF_INET6 "::1") => 1
5bef627d
GH
1794
1795** New function: inet-ntop family address
1796
311b6a3c
MV
1797Convert an integer network address into a printable string. Note that
1798unlike the C version of this function, the input is an integer with
1799normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
1800e.g.,
1801
1802 (inet-ntop AF_INET 2130706433) => "127.0.0.1"
1803 (inet-ntop AF_INET6 (- (expt 2 128) 1)) =>
5bef627d
GH
1804 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
1805
56426fdb
KN
1806** Deprecated: id
1807
1808Use `identity' instead.
1809
5cd06d5e
DH
1810** Deprecated: -1+
1811
1812Use `1-' instead.
1813
1814** Deprecated: return-it
1815
311b6a3c 1816Do without it.
5cd06d5e
DH
1817
1818** Deprecated: string-character-length
1819
1820Use `string-length' instead.
1821
1822** Deprecated: flags
1823
1824Use `logior' instead.
1825
4f60cc33
NJ
1826** Deprecated: close-all-ports-except.
1827
1828This was intended for closing ports in a child process after a fork,
1829but it has the undesirable side effect of flushing buffers.
1830port-for-each is more flexible.
34b56ec4
GH
1831
1832** The (ice-9 popen) module now attempts to set up file descriptors in
1833the child process from the current Scheme ports, instead of using the
1834current values of file descriptors 0, 1, and 2 in the parent process.
1835
b52e071b
DH
1836** Removed function: builtin-weak-bindings
1837
1838There is no such concept as a weak binding any more.
1839
9d774814 1840** Removed constants: bignum-radix, scm-line-incrementors
0f979f3f 1841
7d435120
MD
1842** define-method: New syntax mandatory.
1843
1844The new method syntax is now mandatory:
1845
1846(define-method (NAME ARG-SPEC ...) BODY ...)
1847(define-method (NAME ARG-SPEC ... . REST-ARG) BODY ...)
1848
1849 ARG-SPEC ::= ARG-NAME | (ARG-NAME TYPE)
1850 REST-ARG ::= ARG-NAME
1851
1852If you have old code using the old syntax, import
1853(oop goops old-define-method) before (oop goops) as in:
1854
1855 (use-modules (oop goops old-define-method) (oop goops))
1856
f3f9dcbc
MV
1857** Deprecated function: builtin-variable
1858 Removed function: builtin-bindings
1859
1860There is no longer a distinction between builtin or other variables.
1861Use module system operations for all variables.
1862
311b6a3c
MV
1863** Lazy-catch handlers are no longer allowed to return.
1864
1865That is, a call to `throw', `error', etc is now guaranteed to not
1866return.
1867
a583bf1e 1868** Bugfixes for (ice-9 getopt-long)
8c84b81e 1869
a583bf1e
TTN
1870This module is now tested using test-suite/tests/getopt-long.test.
1871The following bugs have been fixed:
1872
1873*** Parsing for options that are specified to have `optional' args now checks
1874if the next element is an option instead of unconditionally taking it as the
8c84b81e
TTN
1875option arg.
1876
a583bf1e
TTN
1877*** An error is now thrown for `--opt=val' when the option description
1878does not specify `(value #t)' or `(value optional)'. This condition used to
1879be accepted w/o error, contrary to the documentation.
1880
1881*** The error message for unrecognized options is now more informative.
1882It used to be "not a record", an artifact of the implementation.
1883
1884*** The error message for `--opt' terminating the arg list (no value), when
1885`(value #t)' is specified, is now more informative. It used to be "not enough
1886args".
1887
1888*** "Clumped" single-char args now preserve trailing string, use it as arg.
1889The expansion used to be like so:
1890
1891 ("-abc5d" "--xyz") => ("-a" "-b" "-c" "--xyz")
1892
1893Note that the "5d" is dropped. Now it is like so:
1894
1895 ("-abc5d" "--xyz") => ("-a" "-b" "-c" "5d" "--xyz")
1896
1897This enables single-char options to have adjoining arguments as long as their
1898constituent characters are not potential single-char options.
8c84b81e 1899
998bfc70
TTN
1900** (ice-9 session) procedure `arity' now works with (ice-9 optargs) `lambda*'
1901
1902The `lambda*' and derivative forms in (ice-9 optargs) now set a procedure
1903property `arglist', which can be retrieved by `arity'. The result is that
1904`arity' can give more detailed information than before:
1905
1906Before:
1907
1908 guile> (use-modules (ice-9 optargs))
1909 guile> (define* (foo #:optional a b c) a)
1910 guile> (arity foo)
1911 0 or more arguments in `lambda*:G0'.
1912
1913After:
1914
1915 guile> (arity foo)
1916 3 optional arguments: `a', `b' and `c'.
1917 guile> (define* (bar a b #:key c d #:allow-other-keys) a)
1918 guile> (arity bar)
1919 2 required arguments: `a' and `b', 2 keyword arguments: `c'
1920 and `d', other keywords allowed.
1921 guile> (define* (baz a b #:optional c #:rest r) a)
1922 guile> (arity baz)
1923 2 required arguments: `a' and `b', 1 optional argument: `c',
1924 the rest in `r'.
1925
311b6a3c
MV
1926* Changes to the C interface
1927
c81c130e
MV
1928** Types have been renamed from scm_*_t to scm_t_*.
1929
1930This has been done for POSIX sake. It reserves identifiers ending
1931with "_t". What a concept.
1932
1933The old names are still available with status `deprecated'.
1934
1935** scm_t_bits (former scm_bits_t) is now a unsigned type.
1936
6e9382f1 1937** Deprecated features have been removed.
e6c9e497
MV
1938
1939*** Macros removed
1940
1941 SCM_INPORTP, SCM_OUTPORTP SCM_ICHRP, SCM_ICHR, SCM_MAKICHR
1942 SCM_SETJMPBUF SCM_NSTRINGP SCM_NRWSTRINGP SCM_NVECTORP SCM_DOUBLE_CELLP
1943
1944*** C Functions removed
1945
1946 scm_sysmissing scm_tag scm_tc16_flo scm_tc_flo
1947 scm_fseek - replaced by scm_seek.
1948 gc-thunk - replaced by after-gc-hook.
1949 gh_int2scmb - replaced by gh_bool2scm.
1950 scm_tc_dblr - replaced by scm_tc16_real.
1951 scm_tc_dblc - replaced by scm_tc16_complex.
1952 scm_list_star - replaced by scm_cons_star.
1953
36284627
DH
1954** Deprecated: scm_makfromstr
1955
1956Use scm_mem2string instead.
1957
311b6a3c
MV
1958** Deprecated: scm_make_shared_substring
1959
1960Explicit shared substrings will disappear from Guile.
1961
1962Instead, "normal" strings will be implemented using sharing
1963internally, combined with a copy-on-write strategy.
1964
1965** Deprecated: scm_read_only_string_p
1966
1967The concept of read-only strings will disappear in next release of
1968Guile.
1969
1970** Deprecated: scm_sloppy_memq, scm_sloppy_memv, scm_sloppy_member
c299f186 1971
311b6a3c 1972Instead, use scm_c_memq or scm_memq, scm_memv, scm_member.
c299f186 1973
dd0e04ed
KN
1974** New functions: scm_call_0, scm_call_1, scm_call_2, scm_call_3
1975
83dbedcc
KR
1976Call a procedure with the indicated number of arguments. See "Fly
1977Evaluation" in the manual.
dd0e04ed
KN
1978
1979** New functions: scm_apply_0, scm_apply_1, scm_apply_2, scm_apply_3
1980
83dbedcc
KR
1981Call a procedure with the indicated number of arguments and a list of
1982further arguments. See "Fly Evaluation" in the manual.
dd0e04ed 1983
e235f2a6
KN
1984** New functions: scm_list_1, scm_list_2, scm_list_3, scm_list_4, scm_list_5
1985
83dbedcc
KR
1986Create a list of the given number of elements. See "List
1987Constructors" in the manual.
e235f2a6
KN
1988
1989** Renamed function: scm_listify has been replaced by scm_list_n.
1990
1991** Deprecated macros: SCM_LIST0, SCM_LIST1, SCM_LIST2, SCM_LIST3, SCM_LIST4,
1992SCM_LIST5, SCM_LIST6, SCM_LIST7, SCM_LIST8, SCM_LIST9.
1993
1994Use functions scm_list_N instead.
1995
6fe692e9
MD
1996** New function: scm_c_read (SCM port, void *buffer, scm_sizet size)
1997
1998Used by an application to read arbitrary number of bytes from a port.
1999Same semantics as libc read, except that scm_c_read only returns less
2000than SIZE bytes if at end-of-file.
2001
2002Warning: Doesn't update port line and column counts!
2003
2004** New function: scm_c_write (SCM port, const void *ptr, scm_sizet size)
2005
2006Used by an application to write arbitrary number of bytes to an SCM
2007port. Similar semantics as libc write. However, unlike libc
2008write, scm_c_write writes the requested number of bytes and has no
2009return value.
2010
2011Warning: Doesn't update port line and column counts!
2012
17f367e0
MV
2013** New function: scm_init_guile ()
2014
2015In contrast to scm_boot_guile, scm_init_guile will return normally
2016after initializing Guile. It is not available on all systems, tho.
2017
23ade5e7
DH
2018** New functions: scm_str2symbol, scm_mem2symbol
2019
2020The function scm_str2symbol takes a const char* pointing to a zero-terminated
2021field of characters and creates a scheme symbol object from that C string.
2022The function scm_mem2symbol takes a const char* and a number of characters and
2023creates a symbol from the characters in that memory area.
2024
17f367e0
MV
2025** New functions: scm_primitive_make_property
2026 scm_primitive_property_ref
2027 scm_primitive_property_set_x
2028 scm_primitive_property_del_x
2029
2030These functions implement a new way to deal with object properties.
2031See libguile/properties.c for their documentation.
2032
9d47a1e6
ML
2033** New function: scm_done_free (long size)
2034
2035This function is the inverse of scm_done_malloc. Use it to report the
2036amount of smob memory you free. The previous method, which involved
2037calling scm_done_malloc with negative argument, was somewhat
2038unintuitive (and is still available, of course).
2039
79a3dafe
DH
2040** New function: scm_c_memq (SCM obj, SCM list)
2041
2042This function provides a fast C level alternative for scm_memq for the case
2043that the list parameter is known to be a proper list. The function is a
2044replacement for scm_sloppy_memq, but is stricter in its requirements on its
2045list input parameter, since for anything else but a proper list the function's
2046behaviour is undefined - it may even crash or loop endlessly. Further, for
2047the case that the object is not found in the list, scm_c_memq returns #f which
2048is similar to scm_memq, but different from scm_sloppy_memq's behaviour.
2049
6c0201ad 2050** New functions: scm_remember_upto_here_1, scm_remember_upto_here_2,
5d2b97cd
DH
2051scm_remember_upto_here
2052
2053These functions replace the function scm_remember.
2054
2055** Deprecated function: scm_remember
2056
2057Use one of the new functions scm_remember_upto_here_1,
2058scm_remember_upto_here_2 or scm_remember_upto_here instead.
2059
be54b15d
DH
2060** New function: scm_allocate_string
2061
2062This function replaces the function scm_makstr.
2063
2064** Deprecated function: scm_makstr
2065
2066Use the new function scm_allocate_string instead.
2067
32d0d4b1
DH
2068** New global variable scm_gc_running_p introduced.
2069
2070Use this variable to find out if garbage collection is being executed. Up to
2071now applications have used scm_gc_heap_lock to test if garbage collection was
2072running, which also works because of the fact that up to know only the garbage
2073collector has set this variable. But, this is an implementation detail that
2074may change. Further, scm_gc_heap_lock is not set throughout gc, thus the use
2075of this variable is (and has been) not fully safe anyway.
2076
5b9eb8ae
DH
2077** New macros: SCM_BITVECTOR_MAX_LENGTH, SCM_UVECTOR_MAX_LENGTH
2078
2079Use these instead of SCM_LENGTH_MAX.
2080
6c0201ad 2081** New macros: SCM_CONTINUATION_LENGTH, SCM_CCLO_LENGTH, SCM_STACK_LENGTH,
a6d9e5ab
DH
2082SCM_STRING_LENGTH, SCM_SYMBOL_LENGTH, SCM_UVECTOR_LENGTH,
2083SCM_BITVECTOR_LENGTH, SCM_VECTOR_LENGTH.
2084
2085Use these instead of SCM_LENGTH.
2086
6c0201ad 2087** New macros: SCM_SET_CONTINUATION_LENGTH, SCM_SET_STRING_LENGTH,
93778877
DH
2088SCM_SET_SYMBOL_LENGTH, SCM_SET_VECTOR_LENGTH, SCM_SET_UVECTOR_LENGTH,
2089SCM_SET_BITVECTOR_LENGTH
bc0eaf7b
DH
2090
2091Use these instead of SCM_SETLENGTH
2092
6c0201ad 2093** New macros: SCM_STRING_CHARS, SCM_SYMBOL_CHARS, SCM_CCLO_BASE,
a6d9e5ab
DH
2094SCM_VECTOR_BASE, SCM_UVECTOR_BASE, SCM_BITVECTOR_BASE, SCM_COMPLEX_MEM,
2095SCM_ARRAY_MEM
2096
e51fe79c
DH
2097Use these instead of SCM_CHARS, SCM_UCHARS, SCM_ROCHARS, SCM_ROUCHARS or
2098SCM_VELTS.
a6d9e5ab 2099
6c0201ad 2100** New macros: SCM_SET_BIGNUM_BASE, SCM_SET_STRING_CHARS,
6a0476fd
DH
2101SCM_SET_SYMBOL_CHARS, SCM_SET_UVECTOR_BASE, SCM_SET_BITVECTOR_BASE,
2102SCM_SET_VECTOR_BASE
2103
2104Use these instead of SCM_SETCHARS.
2105
a6d9e5ab
DH
2106** New macro: SCM_BITVECTOR_P
2107
2108** New macro: SCM_STRING_COERCE_0TERMINATION_X
2109
2110Use instead of SCM_COERCE_SUBSTR.
2111
30ea841d
DH
2112** New macros: SCM_DIR_OPEN_P, SCM_DIR_FLAG_OPEN
2113
2114For directory objects, use these instead of SCM_OPDIRP and SCM_OPN.
2115
6c0201ad
TTN
2116** Deprecated macros: SCM_OUTOFRANGE, SCM_NALLOC, SCM_HUP_SIGNAL,
2117SCM_INT_SIGNAL, SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL,
2118SCM_ALRM_SIGNAL, SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD,
d1ca2c64 2119SCM_ORD_SIG, SCM_NUM_SIGS, SCM_SYMBOL_SLOTS, SCM_SLOTS, SCM_SLOPPY_STRINGP,
a6d9e5ab
DH
2120SCM_VALIDATE_STRINGORSUBSTR, SCM_FREEP, SCM_NFREEP, SCM_CHARS, SCM_UCHARS,
2121SCM_VALIDATE_ROSTRING, SCM_VALIDATE_ROSTRING_COPY,
2122SCM_VALIDATE_NULLORROSTRING_COPY, SCM_ROLENGTH, SCM_LENGTH, SCM_HUGE_LENGTH,
b24b5e13 2123SCM_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET, SCM_COERCE_SUBSTR,
34f0f2b8 2124SCM_ROSTRINGP, SCM_RWSTRINGP, SCM_VALIDATE_RWSTRING, SCM_ROCHARS,
fd336365 2125SCM_ROUCHARS, SCM_SETLENGTH, SCM_SETCHARS, SCM_LENGTH_MAX, SCM_GC8MARKP,
30ea841d 2126SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR, SCM_SUBR_DOC,
b3fcac34
DH
2127SCM_OPDIRP, SCM_VALIDATE_OPDIR, SCM_WTA, RETURN_SCM_WTA, SCM_CONST_LONG,
2128SCM_WNA, SCM_FUNC_NAME, SCM_VALIDATE_NUMBER_COPY,
61045190 2129SCM_VALIDATE_NUMBER_DEF_COPY, SCM_SLOPPY_CONSP, SCM_SLOPPY_NCONSP,
e038c042 2130SCM_SETAND_CDR, SCM_SETOR_CDR, SCM_SETAND_CAR, SCM_SETOR_CAR
b63a956d
DH
2131
2132Use SCM_ASSERT_RANGE or SCM_VALIDATE_XXX_RANGE instead of SCM_OUTOFRANGE.
2133Use scm_memory_error instead of SCM_NALLOC.
c1aef037 2134Use SCM_STRINGP instead of SCM_SLOPPY_STRINGP.
d1ca2c64
DH
2135Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_STRINGORSUBSTR.
2136Use SCM_FREE_CELL_P instead of SCM_FREEP/SCM_NFREEP
a6d9e5ab 2137Use a type specific accessor macro instead of SCM_CHARS/SCM_UCHARS.
6c0201ad 2138Use a type specific accessor instead of SCM(_|_RO|_HUGE_)LENGTH.
a6d9e5ab
DH
2139Use SCM_VALIDATE_(SYMBOL|STRING) instead of SCM_VALIDATE_ROSTRING.
2140Use SCM_STRING_COERCE_0TERMINATION_X instead of SCM_COERCE_SUBSTR.
b24b5e13 2141Use SCM_STRINGP or SCM_SYMBOLP instead of SCM_ROSTRINGP.
f0942910
DH
2142Use SCM_STRINGP instead of SCM_RWSTRINGP.
2143Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_RWSTRING.
34f0f2b8
DH
2144Use SCM_STRING_CHARS instead of SCM_ROCHARS.
2145Use SCM_STRING_UCHARS instead of SCM_ROUCHARS.
93778877 2146Use a type specific setter macro instead of SCM_SETLENGTH.
6a0476fd 2147Use a type specific setter macro instead of SCM_SETCHARS.
5b9eb8ae 2148Use a type specific length macro instead of SCM_LENGTH_MAX.
fd336365
DH
2149Use SCM_GCMARKP instead of SCM_GC8MARKP.
2150Use SCM_SETGCMARK instead of SCM_SETGC8MARK.
2151Use SCM_CLRGCMARK instead of SCM_CLRGC8MARK.
2152Use SCM_TYP16 instead of SCM_GCTYP16.
2153Use SCM_CDR instead of SCM_GCCDR.
30ea841d 2154Use SCM_DIR_OPEN_P instead of SCM_OPDIRP.
276dd677
DH
2155Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of SCM_WTA.
2156Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of RETURN_SCM_WTA.
8dea8611 2157Use SCM_VCELL_INIT instead of SCM_CONST_LONG.
b3fcac34 2158Use SCM_WRONG_NUM_ARGS instead of SCM_WNA.
ced99e92
DH
2159Use SCM_CONSP instead of SCM_SLOPPY_CONSP.
2160Use !SCM_CONSP instead of SCM_SLOPPY_NCONSP.
b63a956d 2161
f7620510
DH
2162** Removed function: scm_struct_init
2163
93d40df2
DH
2164** Removed variable: scm_symhash_dim
2165
818febc0
GH
2166** Renamed function: scm_make_cont has been replaced by
2167scm_make_continuation, which has a different interface.
2168
cc4feeca
DH
2169** Deprecated function: scm_call_catching_errors
2170
2171Use scm_catch or scm_lazy_catch from throw.[ch] instead.
2172
28b06554
DH
2173** Deprecated function: scm_strhash
2174
2175Use scm_string_hash instead.
2176
1b9be268
DH
2177** Deprecated function: scm_vector_set_length_x
2178
2179Instead, create a fresh vector of the desired size and copy the contents.
2180
302f229e
MD
2181** scm_gensym has changed prototype
2182
2183scm_gensym now only takes one argument.
2184
1660782e
DH
2185** Deprecated type tags: scm_tc7_ssymbol, scm_tc7_msymbol, scm_tcs_symbols,
2186scm_tc7_lvector
28b06554
DH
2187
2188There is now only a single symbol type scm_tc7_symbol.
1660782e 2189The tag scm_tc7_lvector was not used anyway.
28b06554 2190
2f6fb7c5
KN
2191** Deprecated function: scm_make_smob_type_mfpe, scm_set_smob_mfpe.
2192
2193Use scm_make_smob_type and scm_set_smob_XXX instead.
2194
2195** New function scm_set_smob_apply.
2196
2197This can be used to set an apply function to a smob type.
2198
1f3908c4
KN
2199** Deprecated function: scm_strprint_obj
2200
2201Use scm_object_to_string instead.
2202
b3fcac34
DH
2203** Deprecated function: scm_wta
2204
2205Use scm_wrong_type_arg, or another appropriate error signalling function
2206instead.
2207
f3f9dcbc
MV
2208** Explicit support for obarrays has been deprecated.
2209
2210Use `scm_str2symbol' and the generic hashtable functions instead.
2211
2212** The concept of `vcells' has been deprecated.
2213
2214The data type `variable' is now used exclusively. `Vcells' have been
2215a low-level concept so you are likely not affected by this change.
2216
2217*** Deprecated functions: scm_sym2vcell, scm_sysintern,
2218 scm_sysintern0, scm_symbol_value0, scm_intern, scm_intern0.
2219
2220Use scm_c_define or scm_c_lookup instead, as appropriate.
2221
2222*** New functions: scm_c_module_lookup, scm_c_lookup,
2223 scm_c_module_define, scm_c_define, scm_module_lookup, scm_lookup,
2224 scm_module_define, scm_define.
2225
2226These functions work with variables instead of with vcells.
2227
311b6a3c
MV
2228** New functions for creating and defining `subr's and `gsubr's.
2229
2230The new functions more clearly distinguish between creating a subr (or
2231gsubr) object and adding it to the current module.
2232
2233These new functions are available: scm_c_make_subr, scm_c_define_subr,
2234scm_c_make_subr_with_generic, scm_c_define_subr_with_generic,
2235scm_c_make_gsubr, scm_c_define_gsubr, scm_c_make_gsubr_with_generic,
2236scm_c_define_gsubr_with_generic.
2237
2238** Deprecated functions: scm_make_subr, scm_make_subr_opt,
2239 scm_make_subr_with_generic, scm_make_gsubr,
2240 scm_make_gsubr_with_generic.
2241
2242Use the new ones from above instead.
2243
2244** C interface to the module system has changed.
2245
2246While we suggest that you avoid as many explicit module system
2247operations from C as possible for the time being, the C interface has
2248been made more similar to the high-level Scheme module system.
2249
2250*** New functions: scm_c_define_module, scm_c_use_module,
2251 scm_c_export, scm_c_resolve_module.
2252
2253They mostly work like their Scheme namesakes. scm_c_define_module
2254takes a function that is called a context where the new module is
2255current.
2256
2257*** Deprecated functions: scm_the_root_module, scm_make_module,
2258 scm_ensure_user_module, scm_load_scheme_module.
2259
2260Use the new functions instead.
2261
2262** Renamed function: scm_internal_with_fluids becomes
2263 scm_c_with_fluids.
2264
2265scm_internal_with_fluids is available as a deprecated function.
2266
2267** New function: scm_c_with_fluid.
2268
2269Just like scm_c_with_fluids, but takes one fluid and one value instead
2270of lists of same.
2271
1be6b49c
ML
2272** Deprecated typedefs: long_long, ulong_long.
2273
2274They are of questionable utility and they pollute the global
2275namespace.
2276
1be6b49c
ML
2277** Deprecated typedef: scm_sizet
2278
2279It is of questionable utility now that Guile requires ANSI C, and is
2280oddly named.
2281
2282** Deprecated typedefs: scm_port_rw_active, scm_port,
2283 scm_ptob_descriptor, scm_debug_info, scm_debug_frame, scm_fport,
2284 scm_option, scm_rstate, scm_rng, scm_array, scm_array_dim.
2285
2286Made more compliant with the naming policy by adding a _t at the end.
2287
2288** Deprecated functions: scm_mkbig, scm_big2num, scm_adjbig,
2289 scm_normbig, scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl
2290
373f4948 2291With the exception of the mysterious scm_2ulong2big, they are still
1be6b49c
ML
2292available under new names (scm_i_mkbig etc). These functions are not
2293intended to be used in user code. You should avoid dealing with
2294bignums directly, and should deal with numbers in general (which can
2295be bignums).
2296
147c18a0
MD
2297** Change in behavior: scm_num2long, scm_num2ulong
2298
2299The scm_num2[u]long functions don't any longer accept an inexact
2300argument. This change in behavior is motivated by concordance with
2301R5RS: It is more common that a primitive doesn't want to accept an
2302inexact for an exact.
2303
1be6b49c 2304** New functions: scm_short2num, scm_ushort2num, scm_int2num,
f3f70257
ML
2305 scm_uint2num, scm_size2num, scm_ptrdiff2num, scm_num2short,
2306 scm_num2ushort, scm_num2int, scm_num2uint, scm_num2ptrdiff,
1be6b49c
ML
2307 scm_num2size.
2308
2309These are conversion functions between the various ANSI C integral
147c18a0
MD
2310types and Scheme numbers. NOTE: The scm_num2xxx functions don't
2311accept an inexact argument.
1be6b49c 2312
5437598b
MD
2313** New functions: scm_float2num, scm_double2num,
2314 scm_num2float, scm_num2double.
2315
2316These are conversion functions between the two ANSI C float types and
2317Scheme numbers.
2318
1be6b49c 2319** New number validation macros:
f3f70257 2320 SCM_NUM2{SIZE,PTRDIFF,SHORT,USHORT,INT,UINT}[_DEF]
1be6b49c
ML
2321
2322See above.
2323
fc62c86a
ML
2324** New functions: scm_gc_protect_object, scm_gc_unprotect_object
2325
2326These are just nicer-named old scm_protect_object and
2327scm_unprotect_object.
2328
2329** Deprecated functions: scm_protect_object, scm_unprotect_object
2330
2331** New functions: scm_gc_[un]register_root, scm_gc_[un]register_roots
2332
2333These functions can be used to register pointers to locations that
2334hold SCM values.
2335
5b2ad23b
ML
2336** Deprecated function: scm_create_hook.
2337
2338Its sins are: misleading name, non-modularity and lack of general
2339usefulness.
2340
c299f186 2341\f
cc36e791
JB
2342Changes since Guile 1.3.4:
2343
80f27102
JB
2344* Changes to the distribution
2345
ce358662
JB
2346** Trees from nightly snapshots and CVS now require you to run autogen.sh.
2347
2348We've changed the way we handle generated files in the Guile source
2349repository. As a result, the procedure for building trees obtained
2350from the nightly FTP snapshots or via CVS has changed:
2351- You must have appropriate versions of autoconf, automake, and
2352 libtool installed on your system. See README for info on how to
2353 obtain these programs.
2354- Before configuring the tree, you must first run the script
2355 `autogen.sh' at the top of the source tree.
2356
2357The Guile repository used to contain not only source files, written by
2358humans, but also some generated files, like configure scripts and
2359Makefile.in files. Even though the contents of these files could be
2360derived mechanically from other files present, we thought it would
2361make the tree easier to build if we checked them into CVS.
2362
2363However, this approach means that minor differences between
2364developer's installed tools and habits affected the whole team.
2365So we have removed the generated files from the repository, and
2366added the autogen.sh script, which will reconstruct them
2367appropriately.
2368
2369
dc914156
GH
2370** configure now has experimental options to remove support for certain
2371features:
52cfc69b 2372
dc914156
GH
2373--disable-arrays omit array and uniform array support
2374--disable-posix omit posix interfaces
2375--disable-networking omit networking interfaces
2376--disable-regex omit regular expression interfaces
52cfc69b
GH
2377
2378These are likely to become separate modules some day.
2379
9764c29b 2380** New configure option --enable-debug-freelist
e1b0d0ac 2381
38a15cfd
GB
2382This enables a debugging version of SCM_NEWCELL(), and also registers
2383an extra primitive, the setter `gc-set-debug-check-freelist!'.
2384
2385Configure with the --enable-debug-freelist option to enable
2386the gc-set-debug-check-freelist! primitive, and then use:
2387
2388(gc-set-debug-check-freelist! #t) # turn on checking of the freelist
2389(gc-set-debug-check-freelist! #f) # turn off checking
2390
2391Checking of the freelist forces a traversal of the freelist and
2392a garbage collection before each allocation of a cell. This can
2393slow down the interpreter dramatically, so the setter should be used to
2394turn on this extra processing only when necessary.
e1b0d0ac 2395
9764c29b
MD
2396** New configure option --enable-debug-malloc
2397
2398Include code for debugging of calls to scm_must_malloc/realloc/free.
2399
2400Checks that
2401
24021. objects freed by scm_must_free has been mallocated by scm_must_malloc
24032. objects reallocated by scm_must_realloc has been allocated by
2404 scm_must_malloc
24053. reallocated objects are reallocated with the same what string
2406
2407But, most importantly, it records the number of allocated objects of
2408each kind. This is useful when searching for memory leaks.
2409
2410A Guile compiled with this option provides the primitive
2411`malloc-stats' which returns an alist with pairs of kind and the
2412number of objects of that kind.
2413
e415cb06
MD
2414** All includes are now referenced relative to the root directory
2415
2416Since some users have had problems with mixups between Guile and
2417system headers, we have decided to always refer to Guile headers via
2418their parent directories. This essentially creates a "private name
2419space" for Guile headers. This means that the compiler only is given
2420-I options for the root build and root source directory.
2421
341f78c9
MD
2422** Header files kw.h and genio.h have been removed.
2423
2424** The module (ice-9 getopt-gnu-style) has been removed.
2425
e8855f8d
MD
2426** New module (ice-9 documentation)
2427
2428Implements the interface to documentation strings associated with
2429objects.
2430
0c0ffe09
KN
2431** New module (ice-9 time)
2432
2433Provides a macro `time', which displays execution time of a given form.
2434
cf7a5ee5
KN
2435** New module (ice-9 history)
2436
2437Loading this module enables value history in the repl.
2438
0af43c4a 2439* Changes to the stand-alone interpreter
bd9e24b3 2440
67ef2dca
MD
2441** New command line option --debug
2442
2443Start Guile with debugging evaluator and backtraces enabled.
2444
2445This is useful when debugging your .guile init file or scripts.
2446
aa4bb95d
MD
2447** New help facility
2448
341f78c9
MD
2449Usage: (help NAME) gives documentation about objects named NAME (a symbol)
2450 (help REGEXP) ditto for objects with names matching REGEXP (a string)
58e5b910 2451 (help 'NAME) gives documentation for NAME, even if it is not an object
341f78c9 2452 (help ,EXPR) gives documentation for object returned by EXPR
6c0201ad 2453 (help (my module)) gives module commentary for `(my module)'
341f78c9
MD
2454 (help) gives this text
2455
2456`help' searches among bindings exported from loaded modules, while
2457`apropos' searches among bindings visible from the "current" module.
2458
2459Examples: (help help)
2460 (help cons)
2461 (help "output-string")
aa4bb95d 2462
e8855f8d
MD
2463** `help' and `apropos' now prints full module names
2464
0af43c4a 2465** Dynamic linking now uses libltdl from the libtool package.
bd9e24b3 2466
0af43c4a
MD
2467The old system dependent code for doing dynamic linking has been
2468replaced with calls to the libltdl functions which do all the hairy
2469details for us.
bd9e24b3 2470
0af43c4a
MD
2471The major improvement is that you can now directly pass libtool
2472library names like "libfoo.la" to `dynamic-link' and `dynamic-link'
2473will be able to do the best shared library job you can get, via
2474libltdl.
bd9e24b3 2475
0af43c4a
MD
2476The way dynamic libraries are found has changed and is not really
2477portable across platforms, probably. It is therefore recommended to
2478use absolute filenames when possible.
2479
2480If you pass a filename without an extension to `dynamic-link', it will
2481try a few appropriate ones. Thus, the most platform ignorant way is
2482to specify a name like "libfoo", without any directories and
2483extensions.
0573ddae 2484
91163914
MD
2485** Guile COOP threads are now compatible with LinuxThreads
2486
2487Previously, COOP threading wasn't possible in applications linked with
2488Linux POSIX threads due to their use of the stack pointer to find the
2489thread context. This has now been fixed with a workaround which uses
2490the pthreads to allocate the stack.
2491
6c0201ad 2492** New primitives: `pkgdata-dir', `site-dir', `library-dir'
62b82274 2493
9770d235
MD
2494** Positions of erring expression in scripts
2495
2496With version 1.3.4, the location of the erring expression in Guile
2497scipts is no longer automatically reported. (This should have been
2498documented before the 1.3.4 release.)
2499
2500You can get this information by enabling recording of positions of
2501source expressions and running the debugging evaluator. Put this at
2502the top of your script (or in your "site" file):
2503
2504 (read-enable 'positions)
2505 (debug-enable 'debug)
2506
0573ddae
MD
2507** Backtraces in scripts
2508
2509It is now possible to get backtraces in scripts.
2510
2511Put
2512
2513 (debug-enable 'debug 'backtrace)
2514
2515at the top of the script.
2516
2517(The first options enables the debugging evaluator.
2518 The second enables backtraces.)
2519
e8855f8d
MD
2520** Part of module system symbol lookup now implemented in C
2521
2522The eval closure of most modules is now implemented in C. Since this
2523was one of the bottlenecks for loading speed, Guile now loads code
2524substantially faster than before.
2525
f25f761d
GH
2526** Attempting to get the value of an unbound variable now produces
2527an exception with a key of 'unbound-variable instead of 'misc-error.
2528
1a35eadc
GH
2529** The initial default output port is now unbuffered if it's using a
2530tty device. Previously in this situation it was line-buffered.
2531
820920e6
MD
2532** New hook: after-gc-hook
2533
2534after-gc-hook takes over the role of gc-thunk. This hook is run at
2535the first SCM_TICK after a GC. (Thus, the code is run at the same
2536point during evaluation as signal handlers.)
2537
2538Note that this hook should be used only for diagnostic and debugging
2539purposes. It is not certain that it will continue to be well-defined
2540when this hook is run in the future.
2541
2542C programmers: Note the new C level hooks scm_before_gc_c_hook,
2543scm_before_sweep_c_hook, scm_after_gc_c_hook.
2544
b5074b23
MD
2545** Improvements to garbage collector
2546
2547Guile 1.4 has a new policy for triggering heap allocation and
2548determining the sizes of heap segments. It fixes a number of problems
2549in the old GC.
2550
25511. The new policy can handle two separate pools of cells
2552 (2-word/4-word) better. (The old policy would run wild, allocating
2553 more and more memory for certain programs.)
2554
25552. The old code would sometimes allocate far too much heap so that the
2556 Guile process became gigantic. The new code avoids this.
2557
25583. The old code would sometimes allocate too little so that few cells
2559 were freed at GC so that, in turn, too much time was spent in GC.
2560
25614. The old code would often trigger heap allocation several times in a
2562 row. (The new scheme predicts how large the segments needs to be
2563 in order not to need further allocation.)
2564
e8855f8d
MD
2565All in all, the new GC policy will make larger applications more
2566efficient.
2567
b5074b23
MD
2568The new GC scheme also is prepared for POSIX threading. Threads can
2569allocate private pools of cells ("clusters") with just a single
2570function call. Allocation of single cells from such a cluster can
2571then proceed without any need of inter-thread synchronization.
2572
2573** New environment variables controlling GC parameters
2574
2575GUILE_MAX_SEGMENT_SIZE Maximal segment size
2576 (default = 2097000)
2577
2578Allocation of 2-word cell heaps:
2579
2580GUILE_INIT_SEGMENT_SIZE_1 Size of initial heap segment in bytes
2581 (default = 360000)
2582
2583GUILE_MIN_YIELD_1 Minimum number of freed cells at each
2584 GC in percent of total heap size
2585 (default = 40)
2586
2587Allocation of 4-word cell heaps
2588(used for real numbers and misc other objects):
2589
2590GUILE_INIT_SEGMENT_SIZE_2, GUILE_MIN_YIELD_2
2591
2592(See entry "Way for application to customize GC parameters" under
2593 section "Changes to the scm_ interface" below.)
2594
67ef2dca
MD
2595** Guile now implements reals using 4-word cells
2596
2597This speeds up computation with reals. (They were earlier allocated
2598with `malloc'.) There is still some room for optimizations, however.
2599
2600** Some further steps toward POSIX thread support have been taken
2601
2602*** Guile's critical sections (SCM_DEFER/ALLOW_INTS)
2603don't have much effect any longer, and many of them will be removed in
2604next release.
2605
2606*** Signals
2607are only handled at the top of the evaluator loop, immediately after
2608I/O, and in scm_equalp.
2609
2610*** The GC can allocate thread private pools of pairs.
2611
0af43c4a
MD
2612* Changes to Scheme functions and syntax
2613
a0128ebe 2614** close-input-port and close-output-port are now R5RS
7c1e0b12 2615
a0128ebe 2616These procedures have been turned into primitives and have R5RS behaviour.
7c1e0b12 2617
0af43c4a
MD
2618** New procedure: simple-format PORT MESSAGE ARG1 ...
2619
2620(ice-9 boot) makes `format' an alias for `simple-format' until possibly
2621extended by the more sophisticated version in (ice-9 format)
2622
2623(simple-format port message . args)
2624Write MESSAGE to DESTINATION, defaulting to `current-output-port'.
2625MESSAGE can contain ~A (was %s) and ~S (was %S) escapes. When printed,
2626the escapes are replaced with corresponding members of ARGS:
2627~A formats using `display' and ~S formats using `write'.
2628If DESTINATION is #t, then use the `current-output-port',
2629if DESTINATION is #f, then return a string containing the formatted text.
2630Does not add a trailing newline."
2631
2632** string-ref: the second argument is no longer optional.
2633
2634** string, list->string: no longer accept strings in their arguments,
2635only characters, for compatibility with R5RS.
2636
2637** New procedure: port-closed? PORT
2638Returns #t if PORT is closed or #f if it is open.
2639
0a9e521f
MD
2640** Deprecated: list*
2641
2642The list* functionality is now provided by cons* (SRFI-1 compliant)
2643
b5074b23
MD
2644** New procedure: cons* ARG1 ARG2 ... ARGn
2645
2646Like `list', but the last arg provides the tail of the constructed list,
2647returning (cons ARG1 (cons ARG2 (cons ... ARGn))).
2648
2649Requires at least one argument. If given one argument, that argument
2650is returned as result.
2651
2652This function is called `list*' in some other Schemes and in Common LISP.
2653
341f78c9
MD
2654** Removed deprecated: serial-map, serial-array-copy!, serial-array-map!
2655
e8855f8d
MD
2656** New procedure: object-documentation OBJECT
2657
2658Returns the documentation string associated with OBJECT. The
2659procedure uses a caching mechanism so that subsequent lookups are
2660faster.
2661
2662Exported by (ice-9 documentation).
2663
2664** module-name now returns full names of modules
2665
2666Previously, only the last part of the name was returned (`session' for
2667`(ice-9 session)'). Ex: `(ice-9 session)'.
2668
894a712b
DH
2669* Changes to the gh_ interface
2670
2671** Deprecated: gh_int2scmb
2672
2673Use gh_bool2scm instead.
2674
a2349a28
GH
2675* Changes to the scm_ interface
2676
810e1aec
MD
2677** Guile primitives now carry docstrings!
2678
2679Thanks to Greg Badros!
2680
0a9e521f 2681** Guile primitives are defined in a new way: SCM_DEFINE/SCM_DEFINE1/SCM_PROC
0af43c4a 2682
0a9e521f
MD
2683Now Guile primitives are defined using the SCM_DEFINE/SCM_DEFINE1/SCM_PROC
2684macros and must contain a docstring that is extracted into foo.doc using a new
0af43c4a
MD
2685guile-doc-snarf script (that uses guile-doc-snarf.awk).
2686
0a9e521f
MD
2687However, a major overhaul of these macros is scheduled for the next release of
2688guile.
2689
0af43c4a
MD
2690** Guile primitives use a new technique for validation of arguments
2691
2692SCM_VALIDATE_* macros are defined to ease the redundancy and improve
2693the readability of argument checking.
2694
2695** All (nearly?) K&R prototypes for functions replaced with ANSI C equivalents.
2696
894a712b 2697** New macros: SCM_PACK, SCM_UNPACK
f8a72ca4
MD
2698
2699Compose/decompose an SCM value.
2700
894a712b
DH
2701The SCM type is now treated as an abstract data type and may be defined as a
2702long, a void* or as a struct, depending on the architecture and compile time
2703options. This makes it easier to find several types of bugs, for example when
2704SCM values are treated as integers without conversion. Values of the SCM type
2705should be treated as "atomic" values. These macros are used when
f8a72ca4
MD
2706composing/decomposing an SCM value, either because you want to access
2707individual bits, or because you want to treat it as an integer value.
2708
2709E.g., in order to set bit 7 in an SCM value x, use the expression
2710
2711 SCM_PACK (SCM_UNPACK (x) | 0x80)
2712
e11f8b42
DH
2713** The name property of hooks is deprecated.
2714Thus, the use of SCM_HOOK_NAME and scm_make_hook_with_name is deprecated.
2715
2716You can emulate this feature by using object properties.
2717
6c0201ad 2718** Deprecated macros: SCM_INPORTP, SCM_OUTPORTP, SCM_CRDY, SCM_ICHRP,
894a712b
DH
2719SCM_ICHR, SCM_MAKICHR, SCM_SETJMPBUF, SCM_NSTRINGP, SCM_NRWSTRINGP,
2720SCM_NVECTORP
f8a72ca4 2721
894a712b 2722These macros will be removed in a future release of Guile.
7c1e0b12 2723
6c0201ad 2724** The following types, functions and macros from numbers.h are deprecated:
0a9e521f
MD
2725scm_dblproc, SCM_UNEGFIXABLE, SCM_FLOBUFLEN, SCM_INEXP, SCM_CPLXP, SCM_REAL,
2726SCM_IMAG, SCM_REALPART, scm_makdbl, SCM_SINGP, SCM_NUM2DBL, SCM_NO_BIGDIG
2727
a2349a28
GH
2728** Port internals: the rw_random variable in the scm_port structure
2729must be set to non-zero in any random access port. In recent Guile
2730releases it was only set for bidirectional random-access ports.
2731
7dcb364d
GH
2732** Port internals: the seek ptob procedure is now responsible for
2733resetting the buffers if required. The change was made so that in the
2734special case of reading the current position (i.e., seek p 0 SEEK_CUR)
2735the fport and strport ptobs can avoid resetting the buffers,
2736in particular to avoid discarding unread chars. An existing port
2737type can be fixed by adding something like the following to the
2738beginning of the ptob seek procedure:
2739
2740 if (pt->rw_active == SCM_PORT_READ)
2741 scm_end_input (object);
2742 else if (pt->rw_active == SCM_PORT_WRITE)
2743 ptob->flush (object);
2744
2745although to actually avoid resetting the buffers and discard unread
2746chars requires further hacking that depends on the characteristics
2747of the ptob.
2748
894a712b
DH
2749** Deprecated functions: scm_fseek, scm_tag
2750
2751These functions are no longer used and will be removed in a future version.
2752
f25f761d
GH
2753** The scm_sysmissing procedure is no longer used in libguile.
2754Unless it turns out to be unexpectedly useful to somebody, it will be
2755removed in a future version.
2756
0af43c4a
MD
2757** The format of error message strings has changed
2758
2759The two C procedures: scm_display_error and scm_error, as well as the
2760primitive `scm-error', now use scm_simple_format to do their work.
2761This means that the message strings of all code must be updated to use
2762~A where %s was used before, and ~S where %S was used before.
2763
2764During the period when there still are a lot of old Guiles out there,
2765you might want to support both old and new versions of Guile.
2766
2767There are basically two methods to achieve this. Both methods use
2768autoconf. Put
2769
2770 AC_CHECK_FUNCS(scm_simple_format)
2771
2772in your configure.in.
2773
2774Method 1: Use the string concatenation features of ANSI C's
2775 preprocessor.
2776
2777In C:
2778
2779#ifdef HAVE_SCM_SIMPLE_FORMAT
2780#define FMT_S "~S"
2781#else
2782#define FMT_S "%S"
2783#endif
2784
2785Then represent each of your error messages using a preprocessor macro:
2786
2787#define E_SPIDER_ERROR "There's a spider in your " ## FMT_S ## "!!!"
2788
2789In Scheme:
2790
2791(define fmt-s (if (defined? 'simple-format) "~S" "%S"))
2792(define make-message string-append)
2793
2794(define e-spider-error (make-message "There's a spider in your " fmt-s "!!!"))
2795
2796Method 2: Use the oldfmt function found in doc/oldfmt.c.
2797
2798In C:
2799
2800scm_misc_error ("picnic", scm_c_oldfmt0 ("There's a spider in your ~S!!!"),
2801 ...);
2802
2803In Scheme:
2804
2805(scm-error 'misc-error "picnic" (oldfmt "There's a spider in your ~S!!!")
2806 ...)
2807
2808
f3b5e185
MD
2809** Deprecated: coop_mutex_init, coop_condition_variable_init
2810
2811Don't use the functions coop_mutex_init and
2812coop_condition_variable_init. They will change.
2813
2814Use scm_mutex_init and scm_cond_init instead.
2815
f3b5e185
MD
2816** New function: int scm_cond_timedwait (scm_cond_t *COND, scm_mutex_t *MUTEX, const struct timespec *ABSTIME)
2817 `scm_cond_timedwait' atomically unlocks MUTEX and waits on
2818 COND, as `scm_cond_wait' does, but it also bounds the duration
2819 of the wait. If COND has not been signaled before time ABSTIME,
2820 the mutex MUTEX is re-acquired and `scm_cond_timedwait'
2821 returns the error code `ETIMEDOUT'.
2822
2823 The ABSTIME parameter specifies an absolute time, with the same
2824 origin as `time' and `gettimeofday': an ABSTIME of 0 corresponds
2825 to 00:00:00 GMT, January 1, 1970.
2826
2827** New function: scm_cond_broadcast (scm_cond_t *COND)
2828 `scm_cond_broadcast' restarts all the threads that are waiting
2829 on the condition variable COND. Nothing happens if no threads are
2830 waiting on COND.
2831
2832** New function: scm_key_create (scm_key_t *KEY, void (*destr_function) (void *))
2833 `scm_key_create' allocates a new TSD key. The key is stored in
2834 the location pointed to by KEY. There is no limit on the number
2835 of keys allocated at a given time. The value initially associated
2836 with the returned key is `NULL' in all currently executing threads.
2837
2838 The DESTR_FUNCTION argument, if not `NULL', specifies a destructor
2839 function associated with the key. When a thread terminates,
2840 DESTR_FUNCTION is called on the value associated with the key in
2841 that thread. The DESTR_FUNCTION is not called if a key is deleted
2842 with `scm_key_delete' or a value is changed with
2843 `scm_setspecific'. The order in which destructor functions are
2844 called at thread termination time is unspecified.
2845
2846 Destructors are not yet implemented.
2847
2848** New function: scm_setspecific (scm_key_t KEY, const void *POINTER)
2849 `scm_setspecific' changes the value associated with KEY in the
2850 calling thread, storing the given POINTER instead.
2851
2852** New function: scm_getspecific (scm_key_t KEY)
2853 `scm_getspecific' returns the value currently associated with
2854 KEY in the calling thread.
2855
2856** New function: scm_key_delete (scm_key_t KEY)
2857 `scm_key_delete' deallocates a TSD key. It does not check
2858 whether non-`NULL' values are associated with that key in the
2859 currently executing threads, nor call the destructor function
2860 associated with the key.
2861
820920e6
MD
2862** New function: scm_c_hook_init (scm_c_hook_t *HOOK, void *HOOK_DATA, scm_c_hook_type_t TYPE)
2863
2864Initialize a C level hook HOOK with associated HOOK_DATA and type
2865TYPE. (See scm_c_hook_run ().)
2866
2867** New function: scm_c_hook_add (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA, int APPENDP)
2868
2869Add hook function FUNC with associated FUNC_DATA to HOOK. If APPENDP
2870is true, add it last, otherwise first. The same FUNC can be added
2871multiple times if FUNC_DATA differ and vice versa.
2872
2873** New function: scm_c_hook_remove (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA)
2874
2875Remove hook function FUNC with associated FUNC_DATA from HOOK. A
2876function is only removed if both FUNC and FUNC_DATA matches.
2877
2878** New function: void *scm_c_hook_run (scm_c_hook_t *HOOK, void *DATA)
2879
2880Run hook HOOK passing DATA to the hook functions.
2881
2882If TYPE is SCM_C_HOOK_NORMAL, all hook functions are run. The value
2883returned is undefined.
2884
2885If TYPE is SCM_C_HOOK_OR, hook functions are run until a function
2886returns a non-NULL value. This value is returned as the result of
2887scm_c_hook_run. If all functions return NULL, NULL is returned.
2888
2889If TYPE is SCM_C_HOOK_AND, hook functions are run until a function
2890returns a NULL value, and NULL is returned. If all functions returns
2891a non-NULL value, the last value is returned.
2892
2893** New C level GC hooks
2894
2895Five new C level hooks has been added to the garbage collector.
2896
2897 scm_before_gc_c_hook
2898 scm_after_gc_c_hook
2899
2900are run before locking and after unlocking the heap. The system is
2901thus in a mode where evaluation can take place. (Except that
2902scm_before_gc_c_hook must not allocate new cells.)
2903
2904 scm_before_mark_c_hook
2905 scm_before_sweep_c_hook
2906 scm_after_sweep_c_hook
2907
2908are run when the heap is locked. These are intended for extension of
2909the GC in a modular fashion. Examples are the weaks and guardians
2910modules.
2911
b5074b23
MD
2912** Way for application to customize GC parameters
2913
2914The application can set up other default values for the GC heap
2915allocation parameters
2916
2917 GUILE_INIT_HEAP_SIZE_1, GUILE_MIN_YIELD_1,
2918 GUILE_INIT_HEAP_SIZE_2, GUILE_MIN_YIELD_2,
2919 GUILE_MAX_SEGMENT_SIZE,
2920
2921by setting
2922
2923 scm_default_init_heap_size_1, scm_default_min_yield_1,
2924 scm_default_init_heap_size_2, scm_default_min_yield_2,
2925 scm_default_max_segment_size
2926
2927respectively before callong scm_boot_guile.
2928
2929(See entry "New environment variables ..." in section
2930"Changes to the stand-alone interpreter" above.)
2931
9704841c
MD
2932** scm_protect_object/scm_unprotect_object now nest
2933
67ef2dca
MD
2934This means that you can call scm_protect_object multiple times on an
2935object and count on the object being protected until
2936scm_unprotect_object has been call the same number of times.
2937
2938The functions also have better time complexity.
2939
2940Still, it is usually possible to structure the application in a way
2941that you don't need to use these functions. For example, if you use a
2942protected standard Guile list to keep track of live objects rather
2943than some custom data type, objects will die a natural death when they
2944are no longer needed.
2945
0a9e521f
MD
2946** Deprecated type tags: scm_tc16_flo, scm_tc_flo, scm_tc_dblr, scm_tc_dblc
2947
2948Guile does not provide the float representation for inexact real numbers any
2949more. Now, only doubles are used to represent inexact real numbers. Further,
2950the tag names scm_tc_dblr and scm_tc_dblc have been changed to scm_tc16_real
2951and scm_tc16_complex, respectively.
2952
341f78c9
MD
2953** Removed deprecated type scm_smobfuns
2954
2955** Removed deprecated function scm_newsmob
2956
b5074b23
MD
2957** Warning: scm_make_smob_type_mfpe might become deprecated in a future release
2958
2959There is an ongoing discussion among the developers whether to
2960deprecate `scm_make_smob_type_mfpe' or not. Please use the current
2961standard interface (scm_make_smob_type, scm_set_smob_XXX) in new code
2962until this issue has been settled.
2963
341f78c9
MD
2964** Removed deprecated type tag scm_tc16_kw
2965
2728d7f4
MD
2966** Added type tag scm_tc16_keyword
2967
2968(This was introduced already in release 1.3.4 but was not documented
2969 until now.)
2970
67ef2dca
MD
2971** gdb_print now prints "*** Guile not initialized ***" until Guile initialized
2972
f25f761d
GH
2973* Changes to system call interfaces:
2974
28d77376
GH
2975** The "select" procedure now tests port buffers for the ability to
2976provide input or accept output. Previously only the underlying file
2977descriptors were checked.
2978
bd9e24b3
GH
2979** New variable PIPE_BUF: the maximum number of bytes that can be
2980atomically written to a pipe.
2981
f25f761d
GH
2982** If a facility is not available on the system when Guile is
2983compiled, the corresponding primitive procedure will not be defined.
2984Previously it would have been defined but would throw a system-error
2985exception if called. Exception handlers which catch this case may
2986need minor modification: an error will be thrown with key
2987'unbound-variable instead of 'system-error. Alternatively it's
2988now possible to use `defined?' to check whether the facility is
2989available.
2990
38c1d3c4 2991** Procedures which depend on the timezone should now give the correct
6c0201ad 2992result on systems which cache the TZ environment variable, even if TZ
38c1d3c4
GH
2993is changed without calling tzset.
2994
5c11cc9d
GH
2995* Changes to the networking interfaces:
2996
2997** New functions: htons, ntohs, htonl, ntohl: for converting short and
2998long integers between network and host format. For now, it's not
2999particularly convenient to do this kind of thing, but consider:
3000
3001(define write-network-long
3002 (lambda (value port)
3003 (let ((v (make-uniform-vector 1 1 0)))
3004 (uniform-vector-set! v 0 (htonl value))
3005 (uniform-vector-write v port))))
3006
3007(define read-network-long
3008 (lambda (port)
3009 (let ((v (make-uniform-vector 1 1 0)))
3010 (uniform-vector-read! v port)
3011 (ntohl (uniform-vector-ref v 0)))))
3012
3013** If inet-aton fails, it now throws an error with key 'misc-error
3014instead of 'system-error, since errno is not relevant.
3015
3016** Certain gethostbyname/gethostbyaddr failures now throw errors with
3017specific keys instead of 'system-error. The latter is inappropriate
3018since errno will not have been set. The keys are:
afe5177e 3019'host-not-found, 'try-again, 'no-recovery and 'no-data.
5c11cc9d
GH
3020
3021** sethostent, setnetent, setprotoent, setservent: now take an
3022optional argument STAYOPEN, which specifies whether the database
3023remains open after a database entry is accessed randomly (e.g., using
3024gethostbyname for the hosts database.) The default is #f. Previously
3025#t was always used.
3026
cc36e791 3027\f
43fa9a05
JB
3028Changes since Guile 1.3.2:
3029
0fdcbcaa
MD
3030* Changes to the stand-alone interpreter
3031
3032** Debugger
3033
3034An initial version of the Guile debugger written by Chris Hanson has
3035been added. The debugger is still under development but is included
3036in the distribution anyway since it is already quite useful.
3037
3038Type
3039
3040 (debug)
3041
3042after an error to enter the debugger. Type `help' inside the debugger
3043for a description of available commands.
3044
3045If you prefer to have stack frames numbered and printed in
3046anti-chronological order and prefer up in the stack to be down on the
3047screen as is the case in gdb, you can put
3048
3049 (debug-enable 'backwards)
3050
3051in your .guile startup file. (However, this means that Guile can't
3052use indentation to indicate stack level.)
3053
3054The debugger is autoloaded into Guile at the first use.
3055
3056** Further enhancements to backtraces
3057
3058There is a new debug option `width' which controls the maximum width
3059on the screen of printed stack frames. Fancy printing parameters
3060("level" and "length" as in Common LISP) are adaptively adjusted for
3061each stack frame to give maximum information while still fitting
3062within the bounds. If the stack frame can't be made to fit by
3063adjusting parameters, it is simply cut off at the end. This is marked
3064with a `$'.
3065
3066** Some modules are now only loaded when the repl is started
3067
3068The modules (ice-9 debug), (ice-9 session), (ice-9 threads) and (ice-9
3069regex) are now loaded into (guile-user) only if the repl has been
3070started. The effect is that the startup time for scripts has been
3071reduced to 30% of what it was previously.
3072
3073Correctly written scripts load the modules they require at the top of
3074the file and should not be affected by this change.
3075
ece41168
MD
3076** Hooks are now represented as smobs
3077
6822fe53
MD
3078* Changes to Scheme functions and syntax
3079
0ce204b0
MV
3080** Readline support has changed again.
3081
3082The old (readline-activator) module is gone. Use (ice-9 readline)
3083instead, which now contains all readline functionality. So the code
3084to activate readline is now
3085
3086 (use-modules (ice-9 readline))
3087 (activate-readline)
3088
3089This should work at any time, including from the guile prompt.
3090
5d195868
JB
3091To avoid confusion about the terms of Guile's license, please only
3092enable readline for your personal use; please don't make it the
3093default for others. Here is why we make this rather odd-sounding
3094request:
3095
3096Guile is normally licensed under a weakened form of the GNU General
3097Public License, which allows you to link code with Guile without
3098placing that code under the GPL. This exception is important to some
3099people.
3100
3101However, since readline is distributed under the GNU General Public
3102License, when you link Guile with readline, either statically or
3103dynamically, you effectively change Guile's license to the strict GPL.
3104Whenever you link any strictly GPL'd code into Guile, uses of Guile
3105which are normally permitted become forbidden. This is a rather
3106non-obvious consequence of the licensing terms.
3107
3108So, to make sure things remain clear, please let people choose for
3109themselves whether to link GPL'd libraries like readline with Guile.
3110
25b0654e
JB
3111** regexp-substitute/global has changed slightly, but incompatibly.
3112
3113If you include a function in the item list, the string of the match
3114object it receives is the same string passed to
3115regexp-substitute/global, not some suffix of that string.
3116Correspondingly, the match's positions are relative to the entire
3117string, not the suffix.
3118
3119If the regexp can match the empty string, the way matches are chosen
3120from the string has changed. regexp-substitute/global recognizes the
3121same set of matches that list-matches does; see below.
3122
3123** New function: list-matches REGEXP STRING [FLAGS]
3124
3125Return a list of match objects, one for every non-overlapping, maximal
3126match of REGEXP in STRING. The matches appear in left-to-right order.
3127list-matches only reports matches of the empty string if there are no
3128other matches which begin on, end at, or include the empty match's
3129position.
3130
3131If present, FLAGS is passed as the FLAGS argument to regexp-exec.
3132
3133** New function: fold-matches REGEXP STRING INIT PROC [FLAGS]
3134
3135For each match of REGEXP in STRING, apply PROC to the match object,
3136and the last value PROC returned, or INIT for the first call. Return
3137the last value returned by PROC. We apply PROC to the matches as they
3138appear from left to right.
3139
3140This function recognizes matches according to the same criteria as
3141list-matches.
3142
3143Thus, you could define list-matches like this:
3144
3145 (define (list-matches regexp string . flags)
3146 (reverse! (apply fold-matches regexp string '() cons flags)))
3147
3148If present, FLAGS is passed as the FLAGS argument to regexp-exec.
3149
bc848f7f
MD
3150** Hooks
3151
3152*** New function: hook? OBJ
3153
3154Return #t if OBJ is a hook, otherwise #f.
3155
ece41168
MD
3156*** New function: make-hook-with-name NAME [ARITY]
3157
3158Return a hook with name NAME and arity ARITY. The default value for
3159ARITY is 0. The only effect of NAME is that it will appear when the
3160hook object is printed to ease debugging.
3161
bc848f7f
MD
3162*** New function: hook-empty? HOOK
3163
3164Return #t if HOOK doesn't contain any procedures, otherwise #f.
3165
3166*** New function: hook->list HOOK
3167
3168Return a list of the procedures that are called when run-hook is
3169applied to HOOK.
3170
b074884f
JB
3171** `map' signals an error if its argument lists are not all the same length.
3172
3173This is the behavior required by R5RS, so this change is really a bug
3174fix. But it seems to affect a lot of people's code, so we're
3175mentioning it here anyway.
3176
6822fe53
MD
3177** Print-state handling has been made more transparent
3178
3179Under certain circumstances, ports are represented as a port with an
3180associated print state. Earlier, this pair was represented as a pair
3181(see "Some magic has been added to the printer" below). It is now
3182indistinguishable (almost; see `get-print-state') from a port on the
3183user level.
3184
3185*** New function: port-with-print-state OUTPUT-PORT PRINT-STATE
3186
3187Return a new port with the associated print state PRINT-STATE.
3188
3189*** New function: get-print-state OUTPUT-PORT
3190
3191Return the print state associated with this port if it exists,
3192otherwise return #f.
3193
340a8770 3194*** New function: directory-stream? OBJECT
77242ff9 3195
340a8770 3196Returns true iff OBJECT is a directory stream --- the sort of object
77242ff9
GH
3197returned by `opendir'.
3198
0fdcbcaa
MD
3199** New function: using-readline?
3200
3201Return #t if readline is in use in the current repl.
3202
26405bc1
MD
3203** structs will be removed in 1.4
3204
3205Structs will be replaced in Guile 1.4. We will merge GOOPS into Guile
3206and use GOOPS objects as the fundamental record type.
3207
49199eaa
MD
3208* Changes to the scm_ interface
3209
26405bc1
MD
3210** structs will be removed in 1.4
3211
3212The entire current struct interface (struct.c, struct.h) will be
3213replaced in Guile 1.4. We will merge GOOPS into libguile and use
3214GOOPS objects as the fundamental record type.
3215
49199eaa
MD
3216** The internal representation of subr's has changed
3217
3218Instead of giving a hint to the subr name, the CAR field of the subr
3219now contains an index to a subr entry in scm_subr_table.
3220
3221*** New variable: scm_subr_table
3222
3223An array of subr entries. A subr entry contains the name, properties
3224and documentation associated with the subr. The properties and
3225documentation slots are not yet used.
3226
3227** A new scheme for "forwarding" calls to a builtin to a generic function
3228
3229It is now possible to extend the functionality of some Guile
3230primitives by letting them defer a call to a GOOPS generic function on
240ed66f 3231argument mismatch. This means that there is no loss of efficiency in
daf516d6 3232normal evaluation.
49199eaa
MD
3233
3234Example:
3235
daf516d6 3236 (use-modules (oop goops)) ; Must be GOOPS version 0.2.
49199eaa
MD
3237 (define-method + ((x <string>) (y <string>))
3238 (string-append x y))
3239
86a4d62e
MD
3240+ will still be as efficient as usual in numerical calculations, but
3241can also be used for concatenating strings.
49199eaa 3242
86a4d62e 3243Who will be the first one to extend Guile's numerical tower to
daf516d6
MD
3244rationals? :) [OK, there a few other things to fix before this can
3245be made in a clean way.]
49199eaa
MD
3246
3247*** New snarf macros for defining primitives: SCM_GPROC, SCM_GPROC1
3248
3249 New macro: SCM_GPROC (CNAME, SNAME, REQ, OPT, VAR, CFUNC, GENERIC)
3250
3251 New macro: SCM_GPROC1 (CNAME, SNAME, TYPE, CFUNC, GENERIC)
3252
d02cafe7 3253These do the same job as SCM_PROC and SCM_PROC1, but they also define
49199eaa
MD
3254a variable GENERIC which can be used by the dispatch macros below.
3255
3256[This is experimental code which may change soon.]
3257
3258*** New macros for forwarding control to a generic on arg type error
3259
3260 New macro: SCM_WTA_DISPATCH_1 (GENERIC, ARG1, POS, SUBR)
3261
3262 New macro: SCM_WTA_DISPATCH_2 (GENERIC, ARG1, ARG2, POS, SUBR)
3263
3264These correspond to the scm_wta function call, and have the same
3265behaviour until the user has called the GOOPS primitive
3266`enable-primitive-generic!'. After that, these macros will apply the
3267generic function GENERIC to the argument(s) instead of calling
3268scm_wta.
3269
3270[This is experimental code which may change soon.]
3271
3272*** New macros for argument testing with generic dispatch
3273
3274 New macro: SCM_GASSERT1 (COND, GENERIC, ARG1, POS, SUBR)
3275
3276 New macro: SCM_GASSERT2 (COND, GENERIC, ARG1, ARG2, POS, SUBR)
3277
3278These correspond to the SCM_ASSERT macro, but will defer control to
3279GENERIC on error after `enable-primitive-generic!' has been called.
3280
3281[This is experimental code which may change soon.]
3282
3283** New function: SCM scm_eval_body (SCM body, SCM env)
3284
3285Evaluates the body of a special form.
3286
3287** The internal representation of struct's has changed
3288
3289Previously, four slots were allocated for the procedure(s) of entities
3290and operators. The motivation for this representation had to do with
3291the structure of the evaluator, the wish to support tail-recursive
3292generic functions, and efficiency. Since the generic function
3293dispatch mechanism has changed, there is no longer a need for such an
3294expensive representation, and the representation has been simplified.
3295
3296This should not make any difference for most users.
3297
3298** GOOPS support has been cleaned up.
3299
3300Some code has been moved from eval.c to objects.c and code in both of
3301these compilation units has been cleaned up and better structured.
3302
3303*** New functions for applying generic functions
3304
3305 New function: SCM scm_apply_generic (GENERIC, ARGS)
3306 New function: SCM scm_call_generic_0 (GENERIC)
3307 New function: SCM scm_call_generic_1 (GENERIC, ARG1)
3308 New function: SCM scm_call_generic_2 (GENERIC, ARG1, ARG2)
3309 New function: SCM scm_call_generic_3 (GENERIC, ARG1, ARG2, ARG3)
3310
ece41168
MD
3311** Deprecated function: scm_make_named_hook
3312
3313It is now replaced by:
3314
3315** New function: SCM scm_create_hook (const char *name, int arity)
3316
3317Creates a hook in the same way as make-hook above but also
3318binds a variable named NAME to it.
3319
3320This is the typical way of creating a hook from C code.
3321
3322Currently, the variable is created in the "current" module.
3323This might change when we get the new module system.
3324
3325[The behaviour is identical to scm_make_named_hook.]
3326
3327
43fa9a05 3328\f
f3227c7a
JB
3329Changes since Guile 1.3:
3330
6ca345f3
JB
3331* Changes to mailing lists
3332
3333** Some of the Guile mailing lists have moved to sourceware.cygnus.com.
3334
3335See the README file to find current addresses for all the Guile
3336mailing lists.
3337
d77fb593
JB
3338* Changes to the distribution
3339
1d335863
JB
3340** Readline support is no longer included with Guile by default.
3341
3342Based on the different license terms of Guile and Readline, we
3343concluded that Guile should not *by default* cause the linking of
3344Readline into an application program. Readline support is now offered
3345as a separate module, which is linked into an application only when
3346you explicitly specify it.
3347
3348Although Guile is GNU software, its distribution terms add a special
3349exception to the usual GNU General Public License (GPL). Guile's
3350license includes a clause that allows you to link Guile with non-free
3351programs. We add this exception so as not to put Guile at a
3352disadvantage vis-a-vis other extensibility packages that support other
3353languages.
3354
3355In contrast, the GNU Readline library is distributed under the GNU
3356General Public License pure and simple. This means that you may not
3357link Readline, even dynamically, into an application unless it is
3358distributed under a free software license that is compatible the GPL.
3359
3360Because of this difference in distribution terms, an application that
3361can use Guile may not be able to use Readline. Now users will be
3362explicitly offered two independent decisions about the use of these
3363two packages.
d77fb593 3364
0e8a8468
MV
3365You can activate the readline support by issuing
3366
3367 (use-modules (readline-activator))
3368 (activate-readline)
3369
3370from your ".guile" file, for example.
3371
e4eae9b1
MD
3372* Changes to the stand-alone interpreter
3373
67ad463a
MD
3374** All builtins now print as primitives.
3375Previously builtin procedures not belonging to the fundamental subr
3376types printed as #<compiled closure #<primitive-procedure gsubr-apply>>.
3377Now, they print as #<primitive-procedure NAME>.
3378
3379** Backtraces slightly more intelligible.
3380gsubr-apply and macro transformer application frames no longer appear
3381in backtraces.
3382
69c6acbb
JB
3383* Changes to Scheme functions and syntax
3384
2a52b429
MD
3385** Guile now correctly handles internal defines by rewriting them into
3386their equivalent letrec. Previously, internal defines would
3387incrementally add to the innermost environment, without checking
3388whether the restrictions specified in RnRS were met. This lead to the
3389correct behaviour when these restriction actually were met, but didn't
3390catch all illegal uses. Such an illegal use could lead to crashes of
3391the Guile interpreter or or other unwanted results. An example of
3392incorrect internal defines that made Guile behave erratically:
3393
3394 (let ()
3395 (define a 1)
3396 (define (b) a)
3397 (define c (1+ (b)))
3398 (define d 3)
3399
3400 (b))
3401
3402 => 2
3403
3404The problem with this example is that the definition of `c' uses the
3405value of `b' directly. This confuses the meoization machine of Guile
3406so that the second call of `b' (this time in a larger environment that
3407also contains bindings for `c' and `d') refers to the binding of `c'
3408instead of `a'. You could also make Guile crash with a variation on
3409this theme:
3410
3411 (define (foo flag)
3412 (define a 1)
3413 (define (b flag) (if flag a 1))
3414 (define c (1+ (b flag)))
3415 (define d 3)
3416
3417 (b #t))
3418
3419 (foo #f)
3420 (foo #t)
3421
3422From now on, Guile will issue an `Unbound variable: b' error message
3423for both examples.
3424
36d3d540
MD
3425** Hooks
3426
3427A hook contains a list of functions which should be called on
3428particular occasions in an existing program. Hooks are used for
3429customization.
3430
3431A window manager might have a hook before-window-map-hook. The window
3432manager uses the function run-hooks to call all functions stored in
3433before-window-map-hook each time a window is mapped. The user can
3434store functions in the hook using add-hook!.
3435
3436In Guile, hooks are first class objects.
3437
3438*** New function: make-hook [N_ARGS]
3439
3440Return a hook for hook functions which can take N_ARGS arguments.
3441The default value for N_ARGS is 0.
3442
ad91d6c3
MD
3443(See also scm_make_named_hook below.)
3444
36d3d540
MD
3445*** New function: add-hook! HOOK PROC [APPEND_P]
3446
3447Put PROC at the beginning of the list of functions stored in HOOK.
3448If APPEND_P is supplied, and non-false, put PROC at the end instead.
3449
3450PROC must be able to take the number of arguments specified when the
3451hook was created.
3452
3453If PROC already exists in HOOK, then remove it first.
3454
3455*** New function: remove-hook! HOOK PROC
3456
3457Remove PROC from the list of functions in HOOK.
3458
3459*** New function: reset-hook! HOOK
3460
3461Clear the list of hook functions stored in HOOK.
3462
3463*** New function: run-hook HOOK ARG1 ...
3464
3465Run all hook functions stored in HOOK with arguments ARG1 ... .
3466The number of arguments supplied must correspond to the number given
3467when the hook was created.
3468
56a19408
MV
3469** The function `dynamic-link' now takes optional keyword arguments.
3470 The only keyword argument that is currently defined is `:global
3471 BOOL'. With it, you can control whether the shared library will be
3472 linked in global mode or not. In global mode, the symbols from the
3473 linked library can be used to resolve references from other
3474 dynamically linked libraries. In non-global mode, the linked
3475 library is essentially invisible and can only be accessed via
3476 `dynamic-func', etc. The default is now to link in global mode.
3477 Previously, the default has been non-global mode.
3478
3479 The `#:global' keyword is only effective on platforms that support
3480 the dlopen family of functions.
3481
ad226f25 3482** New function `provided?'
b7e13f65
JB
3483
3484 - Function: provided? FEATURE
3485 Return true iff FEATURE is supported by this installation of
3486 Guile. FEATURE must be a symbol naming a feature; the global
3487 variable `*features*' is a list of available features.
3488
ad226f25
JB
3489** Changes to the module (ice-9 expect):
3490
3491*** The expect-strings macro now matches `$' in a regular expression
3492 only at a line-break or end-of-file by default. Previously it would
ab711359
JB
3493 match the end of the string accumulated so far. The old behaviour
3494 can be obtained by setting the variable `expect-strings-exec-flags'
3495 to 0.
ad226f25
JB
3496
3497*** The expect-strings macro now uses a variable `expect-strings-exec-flags'
3498 for the regexp-exec flags. If `regexp/noteol' is included, then `$'
3499 in a regular expression will still match before a line-break or
3500 end-of-file. The default is `regexp/noteol'.
3501
6c0201ad 3502*** The expect-strings macro now uses a variable
ad226f25
JB
3503 `expect-strings-compile-flags' for the flags to be supplied to
3504 `make-regexp'. The default is `regexp/newline', which was previously
3505 hard-coded.
3506
3507*** The expect macro now supplies two arguments to a match procedure:
ab711359
JB
3508 the current accumulated string and a flag to indicate whether
3509 end-of-file has been reached. Previously only the string was supplied.
3510 If end-of-file is reached, the match procedure will be called an
3511 additional time with the same accumulated string as the previous call
3512 but with the flag set.
ad226f25 3513
b7e13f65
JB
3514** New module (ice-9 format), implementing the Common Lisp `format' function.
3515
3516This code, and the documentation for it that appears here, was
3517borrowed from SLIB, with minor adaptations for Guile.
3518
3519 - Function: format DESTINATION FORMAT-STRING . ARGUMENTS
3520 An almost complete implementation of Common LISP format description
3521 according to the CL reference book `Common LISP' from Guy L.
3522 Steele, Digital Press. Backward compatible to most of the
3523 available Scheme format implementations.
3524
3525 Returns `#t', `#f' or a string; has side effect of printing
3526 according to FORMAT-STRING. If DESTINATION is `#t', the output is
3527 to the current output port and `#t' is returned. If DESTINATION
3528 is `#f', a formatted string is returned as the result of the call.
3529 NEW: If DESTINATION is a string, DESTINATION is regarded as the
3530 format string; FORMAT-STRING is then the first argument and the
3531 output is returned as a string. If DESTINATION is a number, the
3532 output is to the current error port if available by the
3533 implementation. Otherwise DESTINATION must be an output port and
3534 `#t' is returned.
3535
3536 FORMAT-STRING must be a string. In case of a formatting error
3537 format returns `#f' and prints a message on the current output or
3538 error port. Characters are output as if the string were output by
3539 the `display' function with the exception of those prefixed by a
3540 tilde (~). For a detailed description of the FORMAT-STRING syntax
3541 please consult a Common LISP format reference manual. For a test
3542 suite to verify this format implementation load `formatst.scm'.
3543 Please send bug reports to `lutzeb@cs.tu-berlin.de'.
3544
3545 Note: `format' is not reentrant, i.e. only one `format'-call may
3546 be executed at a time.
3547
3548
3549*** Format Specification (Format version 3.0)
3550
3551 Please consult a Common LISP format reference manual for a detailed
3552description of the format string syntax. For a demonstration of the
3553implemented directives see `formatst.scm'.
3554
3555 This implementation supports directive parameters and modifiers (`:'
3556and `@' characters). Multiple parameters must be separated by a comma
3557(`,'). Parameters can be numerical parameters (positive or negative),
3558character parameters (prefixed by a quote character (`''), variable
3559parameters (`v'), number of rest arguments parameter (`#'), empty and
3560default parameters. Directive characters are case independent. The
3561general form of a directive is:
3562
3563DIRECTIVE ::= ~{DIRECTIVE-PARAMETER,}[:][@]DIRECTIVE-CHARACTER
3564
3565DIRECTIVE-PARAMETER ::= [ [-|+]{0-9}+ | 'CHARACTER | v | # ]
3566
3567*** Implemented CL Format Control Directives
3568
3569 Documentation syntax: Uppercase characters represent the
3570corresponding control directive characters. Lowercase characters
3571represent control directive parameter descriptions.
3572
3573`~A'
3574 Any (print as `display' does).
3575 `~@A'
3576 left pad.
3577
3578 `~MINCOL,COLINC,MINPAD,PADCHARA'
3579 full padding.
3580
3581`~S'
3582 S-expression (print as `write' does).
3583 `~@S'
3584 left pad.
3585
3586 `~MINCOL,COLINC,MINPAD,PADCHARS'
3587 full padding.
3588
3589`~D'
3590 Decimal.
3591 `~@D'
3592 print number sign always.
3593
3594 `~:D'
3595 print comma separated.
3596
3597 `~MINCOL,PADCHAR,COMMACHARD'
3598 padding.
3599
3600`~X'
3601 Hexadecimal.
3602 `~@X'
3603 print number sign always.
3604
3605 `~:X'
3606 print comma separated.
3607
3608 `~MINCOL,PADCHAR,COMMACHARX'
3609 padding.
3610
3611`~O'
3612 Octal.
3613 `~@O'
3614 print number sign always.
3615
3616 `~:O'
3617 print comma separated.
3618
3619 `~MINCOL,PADCHAR,COMMACHARO'
3620 padding.
3621
3622`~B'
3623 Binary.
3624 `~@B'
3625 print number sign always.
3626
3627 `~:B'
3628 print comma separated.
3629
3630 `~MINCOL,PADCHAR,COMMACHARB'
3631 padding.
3632
3633`~NR'
3634 Radix N.
3635 `~N,MINCOL,PADCHAR,COMMACHARR'
3636 padding.
3637
3638`~@R'
3639 print a number as a Roman numeral.
3640
3641`~:@R'
3642 print a number as an "old fashioned" Roman numeral.
3643
3644`~:R'
3645 print a number as an ordinal English number.
3646
3647`~:@R'
3648 print a number as a cardinal English number.
3649
3650`~P'
3651 Plural.
3652 `~@P'
3653 prints `y' and `ies'.
3654
3655 `~:P'
3656 as `~P but jumps 1 argument backward.'
3657
3658 `~:@P'
3659 as `~@P but jumps 1 argument backward.'
3660
3661`~C'
3662 Character.
3663 `~@C'
3664 prints a character as the reader can understand it (i.e. `#\'
3665 prefixing).
3666
3667 `~:C'
3668 prints a character as emacs does (eg. `^C' for ASCII 03).
3669
3670`~F'
3671 Fixed-format floating-point (prints a flonum like MMM.NNN).
3672 `~WIDTH,DIGITS,SCALE,OVERFLOWCHAR,PADCHARF'
3673 `~@F'
3674 If the number is positive a plus sign is printed.
3675
3676`~E'
3677 Exponential floating-point (prints a flonum like MMM.NNN`E'EE).
3678 `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARE'
3679 `~@E'
3680 If the number is positive a plus sign is printed.
3681
3682`~G'
3683 General floating-point (prints a flonum either fixed or
3684 exponential).
3685 `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARG'
3686 `~@G'
3687 If the number is positive a plus sign is printed.
3688
3689`~$'
3690 Dollars floating-point (prints a flonum in fixed with signs
3691 separated).
3692 `~DIGITS,SCALE,WIDTH,PADCHAR$'
3693 `~@$'
3694 If the number is positive a plus sign is printed.
3695
3696 `~:@$'
3697 A sign is always printed and appears before the padding.
3698
3699 `~:$'
3700 The sign appears before the padding.
3701
3702`~%'
3703 Newline.
3704 `~N%'
3705 print N newlines.
3706
3707`~&'
3708 print newline if not at the beginning of the output line.
3709 `~N&'
3710 prints `~&' and then N-1 newlines.
3711
3712`~|'
3713 Page Separator.
3714 `~N|'
3715 print N page separators.
3716
3717`~~'
3718 Tilde.
3719 `~N~'
3720 print N tildes.
3721
3722`~'<newline>
3723 Continuation Line.
3724 `~:'<newline>
3725 newline is ignored, white space left.
3726
3727 `~@'<newline>
3728 newline is left, white space ignored.
3729
3730`~T'
3731 Tabulation.
3732 `~@T'
3733 relative tabulation.
3734
3735 `~COLNUM,COLINCT'
3736 full tabulation.
3737
3738`~?'
3739 Indirection (expects indirect arguments as a list).
3740 `~@?'
3741 extracts indirect arguments from format arguments.
3742
3743`~(STR~)'
3744 Case conversion (converts by `string-downcase').
3745 `~:(STR~)'
3746 converts by `string-capitalize'.
3747
3748 `~@(STR~)'
3749 converts by `string-capitalize-first'.
3750
3751 `~:@(STR~)'
3752 converts by `string-upcase'.
3753
3754`~*'
3755 Argument Jumping (jumps 1 argument forward).
3756 `~N*'
3757 jumps N arguments forward.
3758
3759 `~:*'
3760 jumps 1 argument backward.
3761
3762 `~N:*'
3763 jumps N arguments backward.
3764
3765 `~@*'
3766 jumps to the 0th argument.
3767
3768 `~N@*'
3769 jumps to the Nth argument (beginning from 0)
3770
3771`~[STR0~;STR1~;...~;STRN~]'
3772 Conditional Expression (numerical clause conditional).
3773 `~N['
3774 take argument from N.
3775
3776 `~@['
3777 true test conditional.
3778
3779 `~:['
3780 if-else-then conditional.
3781
3782 `~;'
3783 clause separator.
3784
3785 `~:;'
3786 default clause follows.
3787
3788`~{STR~}'
3789 Iteration (args come from the next argument (a list)).
3790 `~N{'
3791 at most N iterations.
3792
3793 `~:{'
3794 args from next arg (a list of lists).
3795
3796 `~@{'
3797 args from the rest of arguments.
3798
3799 `~:@{'
3800 args from the rest args (lists).
3801
3802`~^'
3803 Up and out.
3804 `~N^'
3805 aborts if N = 0
3806
3807 `~N,M^'
3808 aborts if N = M
3809
3810 `~N,M,K^'
3811 aborts if N <= M <= K
3812
3813*** Not Implemented CL Format Control Directives
3814
3815`~:A'
3816 print `#f' as an empty list (see below).
3817
3818`~:S'
3819 print `#f' as an empty list (see below).
3820
3821`~<~>'
3822 Justification.
3823
3824`~:^'
3825 (sorry I don't understand its semantics completely)
3826
3827*** Extended, Replaced and Additional Control Directives
3828
3829`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHD'
3830`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHX'
3831`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHO'
3832`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHB'
3833`~N,MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHR'
3834 COMMAWIDTH is the number of characters between two comma
3835 characters.
3836
3837`~I'
3838 print a R4RS complex number as `~F~@Fi' with passed parameters for
3839 `~F'.
3840
3841`~Y'
3842 Pretty print formatting of an argument for scheme code lists.
3843
3844`~K'
3845 Same as `~?.'
3846
3847`~!'
3848 Flushes the output if format DESTINATION is a port.
3849
3850`~_'
3851 Print a `#\space' character
3852 `~N_'
3853 print N `#\space' characters.
3854
3855`~/'
3856 Print a `#\tab' character
3857 `~N/'
3858 print N `#\tab' characters.
3859
3860`~NC'
3861 Takes N as an integer representation for a character. No arguments
3862 are consumed. N is converted to a character by `integer->char'. N
3863 must be a positive decimal number.
3864
3865`~:S'
3866 Print out readproof. Prints out internal objects represented as
3867 `#<...>' as strings `"#<...>"' so that the format output can always
3868 be processed by `read'.
3869
3870`~:A'
3871 Print out readproof. Prints out internal objects represented as
3872 `#<...>' as strings `"#<...>"' so that the format output can always
3873 be processed by `read'.
3874
3875`~Q'
3876 Prints information and a copyright notice on the format
3877 implementation.
3878 `~:Q'
3879 prints format version.
3880
3881`~F, ~E, ~G, ~$'
3882 may also print number strings, i.e. passing a number as a string
3883 and format it accordingly.
3884
3885*** Configuration Variables
3886
3887 The format module exports some configuration variables to suit the
3888systems and users needs. There should be no modification necessary for
3889the configuration that comes with Guile. Format detects automatically
3890if the running scheme system implements floating point numbers and
3891complex numbers.
3892
3893format:symbol-case-conv
3894 Symbols are converted by `symbol->string' so the case type of the
3895 printed symbols is implementation dependent.
3896 `format:symbol-case-conv' is a one arg closure which is either
3897 `#f' (no conversion), `string-upcase', `string-downcase' or
3898 `string-capitalize'. (default `#f')
3899
3900format:iobj-case-conv
3901 As FORMAT:SYMBOL-CASE-CONV but applies for the representation of
3902 implementation internal objects. (default `#f')
3903
3904format:expch
3905 The character prefixing the exponent value in `~E' printing.
3906 (default `#\E')
3907
3908*** Compatibility With Other Format Implementations
3909
3910SLIB format 2.x:
3911 See `format.doc'.
3912
3913SLIB format 1.4:
3914 Downward compatible except for padding support and `~A', `~S',
3915 `~P', `~X' uppercase printing. SLIB format 1.4 uses C-style
3916 `printf' padding support which is completely replaced by the CL
3917 `format' padding style.
3918
3919MIT C-Scheme 7.1:
3920 Downward compatible except for `~', which is not documented
3921 (ignores all characters inside the format string up to a newline
3922 character). (7.1 implements `~a', `~s', ~NEWLINE, `~~', `~%',
3923 numerical and variable parameters and `:/@' modifiers in the CL
3924 sense).
3925
3926Elk 1.5/2.0:
3927 Downward compatible except for `~A' and `~S' which print in
3928 uppercase. (Elk implements `~a', `~s', `~~', and `~%' (no
3929 directive parameters or modifiers)).
3930
3931Scheme->C 01nov91:
3932 Downward compatible except for an optional destination parameter:
3933 S2C accepts a format call without a destination which returns a
3934 formatted string. This is equivalent to a #f destination in S2C.
3935 (S2C implements `~a', `~s', `~c', `~%', and `~~' (no directive
3936 parameters or modifiers)).
3937
3938
e7d37b0a 3939** Changes to string-handling functions.
b7e13f65 3940
e7d37b0a 3941These functions were added to support the (ice-9 format) module, above.
b7e13f65 3942
e7d37b0a
JB
3943*** New function: string-upcase STRING
3944*** New function: string-downcase STRING
b7e13f65 3945
e7d37b0a
JB
3946These are non-destructive versions of the existing string-upcase! and
3947string-downcase! functions.
b7e13f65 3948
e7d37b0a
JB
3949*** New function: string-capitalize! STRING
3950*** New function: string-capitalize STRING
3951
3952These functions convert the first letter of each word in the string to
3953upper case. Thus:
3954
3955 (string-capitalize "howdy there")
3956 => "Howdy There"
3957
3958As with the other functions, string-capitalize! modifies the string in
3959place, while string-capitalize returns a modified copy of its argument.
3960
3961*** New function: string-ci->symbol STRING
3962
3963Return a symbol whose name is STRING, but having the same case as if
3964the symbol had be read by `read'.
3965
3966Guile can be configured to be sensitive or insensitive to case
3967differences in Scheme identifiers. If Guile is case-insensitive, all
3968symbols are converted to lower case on input. The `string-ci->symbol'
3969function returns a symbol whose name in STRING, transformed as Guile
3970would if STRING were input.
3971
3972*** New function: substring-move! STRING1 START END STRING2 START
3973
3974Copy the substring of STRING1 from START (inclusive) to END
3975(exclusive) to STRING2 at START. STRING1 and STRING2 may be the same
3976string, and the source and destination areas may overlap; in all
3977cases, the function behaves as if all the characters were copied
3978simultanously.
3979
6c0201ad 3980*** Extended functions: substring-move-left! substring-move-right!
e7d37b0a
JB
3981
3982These functions now correctly copy arbitrarily overlapping substrings;
3983they are both synonyms for substring-move!.
b7e13f65 3984
b7e13f65 3985
deaceb4e
JB
3986** New module (ice-9 getopt-long), with the function `getopt-long'.
3987
3988getopt-long is a function for parsing command-line arguments in a
3989manner consistent with other GNU programs.
3990
3991(getopt-long ARGS GRAMMAR)
3992Parse the arguments ARGS according to the argument list grammar GRAMMAR.
3993
3994ARGS should be a list of strings. Its first element should be the
3995name of the program; subsequent elements should be the arguments
3996that were passed to the program on the command line. The
3997`program-arguments' procedure returns a list of this form.
3998
3999GRAMMAR is a list of the form:
4000((OPTION (PROPERTY VALUE) ...) ...)
4001
4002Each OPTION should be a symbol. `getopt-long' will accept a
4003command-line option named `--OPTION'.
4004Each option can have the following (PROPERTY VALUE) pairs:
4005
4006 (single-char CHAR) --- Accept `-CHAR' as a single-character
4007 equivalent to `--OPTION'. This is how to specify traditional
4008 Unix-style flags.
4009 (required? BOOL) --- If BOOL is true, the option is required.
4010 getopt-long will raise an error if it is not found in ARGS.
4011 (value BOOL) --- If BOOL is #t, the option accepts a value; if
4012 it is #f, it does not; and if it is the symbol
4013 `optional', the option may appear in ARGS with or
6c0201ad 4014 without a value.
deaceb4e
JB
4015 (predicate FUNC) --- If the option accepts a value (i.e. you
4016 specified `(value #t)' for this option), then getopt
4017 will apply FUNC to the value, and throw an exception
4018 if it returns #f. FUNC should be a procedure which
4019 accepts a string and returns a boolean value; you may
4020 need to use quasiquotes to get it into GRAMMAR.
4021
4022The (PROPERTY VALUE) pairs may occur in any order, but each
4023property may occur only once. By default, options do not have
4024single-character equivalents, are not required, and do not take
4025values.
4026
4027In ARGS, single-character options may be combined, in the usual
4028Unix fashion: ("-x" "-y") is equivalent to ("-xy"). If an option
4029accepts values, then it must be the last option in the
4030combination; the value is the next argument. So, for example, using
4031the following grammar:
4032 ((apples (single-char #\a))
4033 (blimps (single-char #\b) (value #t))
4034 (catalexis (single-char #\c) (value #t)))
4035the following argument lists would be acceptable:
4036 ("-a" "-b" "bang" "-c" "couth") ("bang" and "couth" are the values
4037 for "blimps" and "catalexis")
4038 ("-ab" "bang" "-c" "couth") (same)
4039 ("-ac" "couth" "-b" "bang") (same)
4040 ("-abc" "couth" "bang") (an error, since `-b' is not the
4041 last option in its combination)
4042
4043If an option's value is optional, then `getopt-long' decides
4044whether it has a value by looking at what follows it in ARGS. If
4045the next element is a string, and it does not appear to be an
4046option itself, then that string is the option's value.
4047
4048The value of a long option can appear as the next element in ARGS,
4049or it can follow the option name, separated by an `=' character.
4050Thus, using the same grammar as above, the following argument lists
4051are equivalent:
4052 ("--apples" "Braeburn" "--blimps" "Goodyear")
4053 ("--apples=Braeburn" "--blimps" "Goodyear")
4054 ("--blimps" "Goodyear" "--apples=Braeburn")
4055
4056If the option "--" appears in ARGS, argument parsing stops there;
4057subsequent arguments are returned as ordinary arguments, even if
4058they resemble options. So, in the argument list:
4059 ("--apples" "Granny Smith" "--" "--blimp" "Goodyear")
4060`getopt-long' will recognize the `apples' option as having the
4061value "Granny Smith", but it will not recognize the `blimp'
4062option; it will return the strings "--blimp" and "Goodyear" as
4063ordinary argument strings.
4064
4065The `getopt-long' function returns the parsed argument list as an
4066assocation list, mapping option names --- the symbols from GRAMMAR
4067--- onto their values, or #t if the option does not accept a value.
4068Unused options do not appear in the alist.
4069
4070All arguments that are not the value of any option are returned
4071as a list, associated with the empty list.
4072
4073`getopt-long' throws an exception if:
4074- it finds an unrecognized option in ARGS
4075- a required option is omitted
4076- an option that requires an argument doesn't get one
4077- an option that doesn't accept an argument does get one (this can
4078 only happen using the long option `--opt=value' syntax)
4079- an option predicate fails
4080
4081So, for example:
4082
4083(define grammar
4084 `((lockfile-dir (required? #t)
4085 (value #t)
4086 (single-char #\k)
4087 (predicate ,file-is-directory?))
4088 (verbose (required? #f)
4089 (single-char #\v)
4090 (value #f))
4091 (x-includes (single-char #\x))
6c0201ad 4092 (rnet-server (single-char #\y)
deaceb4e
JB
4093 (predicate ,string?))))
4094
6c0201ad 4095(getopt-long '("my-prog" "-vk" "/tmp" "foo1" "--x-includes=/usr/include"
deaceb4e
JB
4096 "--rnet-server=lamprod" "--" "-fred" "foo2" "foo3")
4097 grammar)
4098=> ((() "foo1" "-fred" "foo2" "foo3")
4099 (rnet-server . "lamprod")
4100 (x-includes . "/usr/include")
4101 (lockfile-dir . "/tmp")
4102 (verbose . #t))
4103
4104** The (ice-9 getopt-gnu-style) module is obsolete; use (ice-9 getopt-long).
4105
4106It will be removed in a few releases.
4107
08394899
MS
4108** New syntax: lambda*
4109** New syntax: define*
6c0201ad 4110** New syntax: define*-public
08394899
MS
4111** New syntax: defmacro*
4112** New syntax: defmacro*-public
6c0201ad 4113Guile now supports optional arguments.
08394899
MS
4114
4115`lambda*', `define*', `define*-public', `defmacro*' and
4116`defmacro*-public' are identical to the non-* versions except that
4117they use an extended type of parameter list that has the following BNF
4118syntax (parentheses are literal, square brackets indicate grouping,
4119and `*', `+' and `?' have the usual meaning):
4120
4121 ext-param-list ::= ( [identifier]* [#&optional [ext-var-decl]+]?
6c0201ad 4122 [#&key [ext-var-decl]+ [#&allow-other-keys]?]?
08394899
MS
4123 [[#&rest identifier]|[. identifier]]? ) | [identifier]
4124
6c0201ad 4125 ext-var-decl ::= identifier | ( identifier expression )
08394899
MS
4126
4127The semantics are best illustrated with the following documentation
4128and examples for `lambda*':
4129
4130 lambda* args . body
4131 lambda extended for optional and keyword arguments
6c0201ad 4132
08394899
MS
4133 lambda* creates a procedure that takes optional arguments. These
4134 are specified by putting them inside brackets at the end of the
4135 paramater list, but before any dotted rest argument. For example,
4136 (lambda* (a b #&optional c d . e) '())
4137 creates a procedure with fixed arguments a and b, optional arguments c
4138 and d, and rest argument e. If the optional arguments are omitted
4139 in a call, the variables for them are unbound in the procedure. This
4140 can be checked with the bound? macro.
4141
4142 lambda* can also take keyword arguments. For example, a procedure
4143 defined like this:
4144 (lambda* (#&key xyzzy larch) '())
4145 can be called with any of the argument lists (#:xyzzy 11)
4146 (#:larch 13) (#:larch 42 #:xyzzy 19) (). Whichever arguments
4147 are given as keywords are bound to values.
4148
4149 Optional and keyword arguments can also be given default values
4150 which they take on when they are not present in a call, by giving a
4151 two-item list in place of an optional argument, for example in:
6c0201ad 4152 (lambda* (foo #&optional (bar 42) #&key (baz 73)) (list foo bar baz))
08394899
MS
4153 foo is a fixed argument, bar is an optional argument with default
4154 value 42, and baz is a keyword argument with default value 73.
4155 Default value expressions are not evaluated unless they are needed
6c0201ad 4156 and until the procedure is called.
08394899
MS
4157
4158 lambda* now supports two more special parameter list keywords.
4159
4160 lambda*-defined procedures now throw an error by default if a
4161 keyword other than one of those specified is found in the actual
4162 passed arguments. However, specifying #&allow-other-keys
4163 immediately after the kyword argument declarations restores the
4164 previous behavior of ignoring unknown keywords. lambda* also now
4165 guarantees that if the same keyword is passed more than once, the
4166 last one passed is the one that takes effect. For example,
4167 ((lambda* (#&key (heads 0) (tails 0)) (display (list heads tails)))
4168 #:heads 37 #:tails 42 #:heads 99)
4169 would result in (99 47) being displayed.
4170
4171 #&rest is also now provided as a synonym for the dotted syntax rest
4172 argument. The argument lists (a . b) and (a #&rest b) are equivalent in
4173 all respects to lambda*. This is provided for more similarity to DSSSL,
4174 MIT-Scheme and Kawa among others, as well as for refugees from other
4175 Lisp dialects.
4176
4177Further documentation may be found in the optargs.scm file itself.
4178
4179The optional argument module also exports the macros `let-optional',
4180`let-optional*', `let-keywords', `let-keywords*' and `bound?'. These
4181are not documented here because they may be removed in the future, but
4182full documentation is still available in optargs.scm.
4183
2e132553
JB
4184** New syntax: and-let*
4185Guile now supports the `and-let*' form, described in the draft SRFI-2.
4186
4187Syntax: (land* (<clause> ...) <body> ...)
4188Each <clause> should have one of the following forms:
4189 (<variable> <expression>)
4190 (<expression>)
4191 <bound-variable>
4192Each <variable> or <bound-variable> should be an identifier. Each
4193<expression> should be a valid expression. The <body> should be a
4194possibly empty sequence of expressions, like the <body> of a
4195lambda form.
4196
4197Semantics: A LAND* expression is evaluated by evaluating the
4198<expression> or <bound-variable> of each of the <clause>s from
4199left to right. The value of the first <expression> or
4200<bound-variable> that evaluates to a false value is returned; the
4201remaining <expression>s and <bound-variable>s are not evaluated.
4202The <body> forms are evaluated iff all the <expression>s and
4203<bound-variable>s evaluate to true values.
4204
4205The <expression>s and the <body> are evaluated in an environment
4206binding each <variable> of the preceding (<variable> <expression>)
4207clauses to the value of the <expression>. Later bindings
4208shadow earlier bindings.
4209
4210Guile's and-let* macro was contributed by Michael Livshin.
4211
36d3d540
MD
4212** New sorting functions
4213
4214*** New function: sorted? SEQUENCE LESS?
ed8c8636
MD
4215Returns `#t' when the sequence argument is in non-decreasing order
4216according to LESS? (that is, there is no adjacent pair `... x y
4217...' for which `(less? y x)').
4218
4219Returns `#f' when the sequence contains at least one out-of-order
4220pair. It is an error if the sequence is neither a list nor a
4221vector.
4222
36d3d540 4223*** New function: merge LIST1 LIST2 LESS?
ed8c8636
MD
4224LIST1 and LIST2 are sorted lists.
4225Returns the sorted list of all elements in LIST1 and LIST2.
4226
4227Assume that the elements a and b1 in LIST1 and b2 in LIST2 are "equal"
4228in the sense that (LESS? x y) --> #f for x, y in {a, b1, b2},
4229and that a < b1 in LIST1. Then a < b1 < b2 in the result.
4230(Here "<" should read "comes before".)
4231
36d3d540 4232*** New procedure: merge! LIST1 LIST2 LESS?
ed8c8636
MD
4233Merges two lists, re-using the pairs of LIST1 and LIST2 to build
4234the result. If the code is compiled, and LESS? constructs no new
4235pairs, no pairs at all will be allocated. The first pair of the
4236result will be either the first pair of LIST1 or the first pair of
4237LIST2.
4238
36d3d540 4239*** New function: sort SEQUENCE LESS?
ed8c8636
MD
4240Accepts either a list or a vector, and returns a new sequence
4241which is sorted. The new sequence is the same type as the input.
4242Always `(sorted? (sort sequence less?) less?)'. The original
4243sequence is not altered in any way. The new sequence shares its
4244elements with the old one; no elements are copied.
4245
36d3d540 4246*** New procedure: sort! SEQUENCE LESS
ed8c8636
MD
4247Returns its sorted result in the original boxes. No new storage is
4248allocated at all. Proper usage: (set! slist (sort! slist <))
4249
36d3d540 4250*** New function: stable-sort SEQUENCE LESS?
ed8c8636
MD
4251Similar to `sort' but stable. That is, if "equal" elements are
4252ordered a < b in the original sequence, they will have the same order
4253in the result.
4254
36d3d540 4255*** New function: stable-sort! SEQUENCE LESS?
ed8c8636
MD
4256Similar to `sort!' but stable.
4257Uses temporary storage when sorting vectors.
4258
36d3d540 4259*** New functions: sort-list, sort-list!
ed8c8636
MD
4260Added for compatibility with scsh.
4261
36d3d540
MD
4262** New built-in random number support
4263
4264*** New function: random N [STATE]
3e8370c3
MD
4265Accepts a positive integer or real N and returns a number of the
4266same type between zero (inclusive) and N (exclusive). The values
4267returned have a uniform distribution.
4268
4269The optional argument STATE must be of the type produced by
416075f1
MD
4270`copy-random-state' or `seed->random-state'. It defaults to the value
4271of the variable `*random-state*'. This object is used to maintain the
4272state of the pseudo-random-number generator and is altered as a side
4273effect of the `random' operation.
3e8370c3 4274
36d3d540 4275*** New variable: *random-state*
3e8370c3
MD
4276Holds a data structure that encodes the internal state of the
4277random-number generator that `random' uses by default. The nature
4278of this data structure is implementation-dependent. It may be
4279printed out and successfully read back in, but may or may not
4280function correctly as a random-number state object in another
4281implementation.
4282
36d3d540 4283*** New function: copy-random-state [STATE]
3e8370c3
MD
4284Returns a new object of type suitable for use as the value of the
4285variable `*random-state*' and as a second argument to `random'.
4286If argument STATE is given, a copy of it is returned. Otherwise a
4287copy of `*random-state*' is returned.
416075f1 4288
36d3d540 4289*** New function: seed->random-state SEED
416075f1
MD
4290Returns a new object of type suitable for use as the value of the
4291variable `*random-state*' and as a second argument to `random'.
4292SEED is a string or a number. A new state is generated and
4293initialized using SEED.
3e8370c3 4294
36d3d540 4295*** New function: random:uniform [STATE]
3e8370c3
MD
4296Returns an uniformly distributed inexact real random number in the
4297range between 0 and 1.
4298
36d3d540 4299*** New procedure: random:solid-sphere! VECT [STATE]
3e8370c3
MD
4300Fills VECT with inexact real random numbers the sum of whose
4301squares is less than 1.0. Thinking of VECT as coordinates in
4302space of dimension N = `(vector-length VECT)', the coordinates are
4303uniformly distributed within the unit N-shere. The sum of the
4304squares of the numbers is returned. VECT can be either a vector
4305or a uniform vector of doubles.
4306
36d3d540 4307*** New procedure: random:hollow-sphere! VECT [STATE]
3e8370c3
MD
4308Fills VECT with inexact real random numbers the sum of whose squares
4309is equal to 1.0. Thinking of VECT as coordinates in space of
4310dimension n = `(vector-length VECT)', the coordinates are uniformly
4311distributed over the surface of the unit n-shere. VECT can be either
4312a vector or a uniform vector of doubles.
4313
36d3d540 4314*** New function: random:normal [STATE]
3e8370c3
MD
4315Returns an inexact real in a normal distribution with mean 0 and
4316standard deviation 1. For a normal distribution with mean M and
4317standard deviation D use `(+ M (* D (random:normal)))'.
4318
36d3d540 4319*** New procedure: random:normal-vector! VECT [STATE]
3e8370c3
MD
4320Fills VECT with inexact real random numbers which are independent and
4321standard normally distributed (i.e., with mean 0 and variance 1).
4322VECT can be either a vector or a uniform vector of doubles.
4323
36d3d540 4324*** New function: random:exp STATE
3e8370c3
MD
4325Returns an inexact real in an exponential distribution with mean 1.
4326For an exponential distribution with mean U use (* U (random:exp)).
4327
69c6acbb
JB
4328** The range of logand, logior, logxor, logtest, and logbit? have changed.
4329
4330These functions now operate on numbers in the range of a C unsigned
4331long.
4332
4333These functions used to operate on numbers in the range of a C signed
4334long; however, this seems inappropriate, because Guile integers don't
4335overflow.
4336
ba4ee0d6
MD
4337** New function: make-guardian
4338This is an implementation of guardians as described in
4339R. Kent Dybvig, Carl Bruggeman, and David Eby (1993) "Guardians in a
4340Generation-Based Garbage Collector" ACM SIGPLAN Conference on
4341Programming Language Design and Implementation, June 1993
4342ftp://ftp.cs.indiana.edu/pub/scheme-repository/doc/pubs/guardians.ps.gz
4343
88ceea5c
MD
4344** New functions: delq1!, delv1!, delete1!
4345These procedures behave similar to delq! and friends but delete only
4346one object if at all.
4347
55254a6a
MD
4348** New function: unread-string STRING PORT
4349Unread STRING to PORT, that is, push it back onto the port so that
4350next read operation will work on the pushed back characters.
4351
4352** unread-char can now be called multiple times
4353If unread-char is called multiple times, the unread characters will be
4354read again in last-in first-out order.
4355
9e97c52d
GH
4356** the procedures uniform-array-read! and uniform-array-write! now
4357work on any kind of port, not just ports which are open on a file.
4358
b074884f 4359** Now 'l' in a port mode requests line buffering.
9e97c52d 4360
69bc9ff3
GH
4361** The procedure truncate-file now works on string ports as well
4362as file ports. If the size argument is omitted, the current
1b9c3dae 4363file position is used.
9e97c52d 4364
c94577b4 4365** new procedure: seek PORT/FDES OFFSET WHENCE
9e97c52d
GH
4366The arguments are the same as for the old fseek procedure, but it
4367works on string ports as well as random-access file ports.
4368
4369** the fseek procedure now works on string ports, since it has been
c94577b4 4370redefined using seek.
9e97c52d
GH
4371
4372** the setvbuf procedure now uses a default size if mode is _IOFBF and
4373size is not supplied.
4374
4375** the newline procedure no longer flushes the port if it's not
4376line-buffered: previously it did if it was the current output port.
4377
4378** open-pipe and close-pipe are no longer primitive procedures, but
4379an emulation can be obtained using `(use-modules (ice-9 popen))'.
4380
4381** the freopen procedure has been removed.
4382
4383** new procedure: drain-input PORT
4384Drains PORT's read buffers (including any pushed-back characters)
4385and returns the contents as a single string.
4386
67ad463a 4387** New function: map-in-order PROC LIST1 LIST2 ...
d41b3904
MD
4388Version of `map' which guarantees that the procedure is applied to the
4389lists in serial order.
4390
67ad463a
MD
4391** Renamed `serial-array-copy!' and `serial-array-map!' to
4392`array-copy-in-order!' and `array-map-in-order!'. The old names are
4393now obsolete and will go away in release 1.5.
4394
cf7132b3 4395** New syntax: collect BODY1 ...
d41b3904
MD
4396Version of `begin' which returns a list of the results of the body
4397forms instead of the result of the last body form. In contrast to
cf7132b3 4398`begin', `collect' allows an empty body.
d41b3904 4399
e4eae9b1
MD
4400** New functions: read-history FILENAME, write-history FILENAME
4401Read/write command line history from/to file. Returns #t on success
4402and #f if an error occured.
4403
d21ffe26
JB
4404** `ls' and `lls' in module (ice-9 ls) now handle no arguments.
4405
4406These procedures return a list of definitions available in the specified
4407argument, a relative module reference. In the case of no argument,
4408`(current-module)' is now consulted for definitions to return, instead
4409of simply returning #f, the former behavior.
4410
f8c9d497
JB
4411** The #/ syntax for lists is no longer supported.
4412
4413Earlier versions of Scheme accepted this syntax, but printed a
4414warning.
4415
4416** Guile no longer consults the SCHEME_LOAD_PATH environment variable.
4417
4418Instead, you should set GUILE_LOAD_PATH to tell Guile where to find
4419modules.
4420
3ffc7a36
MD
4421* Changes to the gh_ interface
4422
4423** gh_scm2doubles
4424
4425Now takes a second argument which is the result array. If this
4426pointer is NULL, a new array is malloced (the old behaviour).
4427
4428** gh_chars2byvect, gh_shorts2svect, gh_floats2fvect, gh_scm2chars,
4429 gh_scm2shorts, gh_scm2longs, gh_scm2floats
4430
4431New functions.
4432
3e8370c3
MD
4433* Changes to the scm_ interface
4434
ad91d6c3
MD
4435** Function: scm_make_named_hook (char* name, int n_args)
4436
4437Creates a hook in the same way as make-hook above but also
4438binds a variable named NAME to it.
4439
4440This is the typical way of creating a hook from C code.
4441
ece41168
MD
4442Currently, the variable is created in the "current" module. This
4443might change when we get the new module system.
ad91d6c3 4444
16a5a9a4
MD
4445** The smob interface
4446
4447The interface for creating smobs has changed. For documentation, see
4448data-rep.info (made from guile-core/doc/data-rep.texi).
4449
4450*** Deprecated function: SCM scm_newsmob (scm_smobfuns *)
4451
4452>>> This function will be removed in 1.3.4. <<<
4453
4454It is replaced by:
4455
4456*** Function: SCM scm_make_smob_type (const char *name, scm_sizet size)
4457This function adds a new smob type, named NAME, with instance size
4458SIZE to the system. The return value is a tag that is used in
4459creating instances of the type. If SIZE is 0, then no memory will
4460be allocated when instances of the smob are created, and nothing
4461will be freed by the default free function.
6c0201ad 4462
16a5a9a4
MD
4463*** Function: void scm_set_smob_mark (long tc, SCM (*mark) (SCM))
4464This function sets the smob marking procedure for the smob type
4465specified by the tag TC. TC is the tag returned by
4466`scm_make_smob_type'.
4467
4468*** Function: void scm_set_smob_free (long tc, SCM (*mark) (SCM))
4469This function sets the smob freeing procedure for the smob type
4470specified by the tag TC. TC is the tag returned by
4471`scm_make_smob_type'.
4472
4473*** Function: void scm_set_smob_print (tc, print)
4474
4475 - Function: void scm_set_smob_print (long tc,
4476 scm_sizet (*print) (SCM,
4477 SCM,
4478 scm_print_state *))
4479
4480This function sets the smob printing procedure for the smob type
4481specified by the tag TC. TC is the tag returned by
4482`scm_make_smob_type'.
4483
4484*** Function: void scm_set_smob_equalp (long tc, SCM (*equalp) (SCM, SCM))
4485This function sets the smob equality-testing predicate for the
4486smob type specified by the tag TC. TC is the tag returned by
4487`scm_make_smob_type'.
4488
4489*** Macro: void SCM_NEWSMOB (SCM var, long tc, void *data)
4490Make VALUE contain a smob instance of the type with type code TC and
4491smob data DATA. VALUE must be previously declared as C type `SCM'.
4492
4493*** Macro: fn_returns SCM_RETURN_NEWSMOB (long tc, void *data)
4494This macro expands to a block of code that creates a smob instance
4495of the type with type code TC and smob data DATA, and returns that
4496`SCM' value. It should be the last piece of code in a block.
4497
9e97c52d
GH
4498** The interfaces for using I/O ports and implementing port types
4499(ptobs) have changed significantly. The new interface is based on
4500shared access to buffers and a new set of ptob procedures.
4501
16a5a9a4
MD
4502*** scm_newptob has been removed
4503
4504It is replaced by:
4505
4506*** Function: SCM scm_make_port_type (type_name, fill_buffer, write_flush)
4507
4508- Function: SCM scm_make_port_type (char *type_name,
4509 int (*fill_buffer) (SCM port),
4510 void (*write_flush) (SCM port));
4511
4512Similarly to the new smob interface, there is a set of function
4513setters by which the user can customize the behaviour of his port
544e9093 4514type. See ports.h (scm_set_port_XXX).
16a5a9a4 4515
9e97c52d
GH
4516** scm_strport_to_string: New function: creates a new string from
4517a string port's buffer.
4518
3e8370c3
MD
4519** Plug in interface for random number generators
4520The variable `scm_the_rng' in random.c contains a value and three
4521function pointers which together define the current random number
4522generator being used by the Scheme level interface and the random
4523number library functions.
4524
4525The user is free to replace the default generator with the generator
4526of his own choice.
4527
4528*** Variable: size_t scm_the_rng.rstate_size
4529The size of the random state type used by the current RNG
4530measured in chars.
4531
4532*** Function: unsigned long scm_the_rng.random_bits (scm_rstate *STATE)
4533Given the random STATE, return 32 random bits.
4534
4535*** Function: void scm_the_rng.init_rstate (scm_rstate *STATE, chars *S, int N)
4536Seed random state STATE using string S of length N.
4537
4538*** Function: scm_rstate *scm_the_rng.copy_rstate (scm_rstate *STATE)
4539Given random state STATE, return a malloced copy.
4540
4541** Default RNG
4542The default RNG is the MWC (Multiply With Carry) random number
4543generator described by George Marsaglia at the Department of
4544Statistics and Supercomputer Computations Research Institute, The
4545Florida State University (http://stat.fsu.edu/~geo).
4546
4547It uses 64 bits, has a period of 4578426017172946943 (4.6e18), and
4548passes all tests in the DIEHARD test suite
4549(http://stat.fsu.edu/~geo/diehard.html). The generation of 32 bits
4550costs one multiply and one add on platforms which either supports long
4551longs (gcc does this on most systems) or have 64 bit longs. The cost
4552is four multiply on other systems but this can be optimized by writing
4553scm_i_uniform32 in assembler.
4554
4555These functions are provided through the scm_the_rng interface for use
4556by libguile and the application.
4557
4558*** Function: unsigned long scm_i_uniform32 (scm_i_rstate *STATE)
4559Given the random STATE, return 32 random bits.
4560Don't use this function directly. Instead go through the plugin
4561interface (see "Plug in interface" above).
4562
4563*** Function: void scm_i_init_rstate (scm_i_rstate *STATE, char *SEED, int N)
4564Initialize STATE using SEED of length N.
4565
4566*** Function: scm_i_rstate *scm_i_copy_rstate (scm_i_rstate *STATE)
4567Return a malloc:ed copy of STATE. This function can easily be re-used
4568in the interfaces to other RNGs.
4569
4570** Random number library functions
4571These functions use the current RNG through the scm_the_rng interface.
4572It might be a good idea to use these functions from your C code so
4573that only one random generator is used by all code in your program.
4574
259529f2 4575The default random state is stored in:
3e8370c3
MD
4576
4577*** Variable: SCM scm_var_random_state
4578Contains the vcell of the Scheme variable "*random-state*" which is
4579used as default state by all random number functions in the Scheme
4580level interface.
4581
4582Example:
4583
259529f2 4584 double x = scm_c_uniform01 (SCM_RSTATE (SCM_CDR (scm_var_random_state)));
3e8370c3 4585
259529f2
MD
4586*** Function: scm_rstate *scm_c_default_rstate (void)
4587This is a convenience function which returns the value of
4588scm_var_random_state. An error message is generated if this value
4589isn't a random state.
4590
4591*** Function: scm_rstate *scm_c_make_rstate (char *SEED, int LENGTH)
4592Make a new random state from the string SEED of length LENGTH.
4593
4594It is generally not a good idea to use multiple random states in a
4595program. While subsequent random numbers generated from one random
4596state are guaranteed to be reasonably independent, there is no such
4597guarantee for numbers generated from different random states.
4598
4599*** Macro: unsigned long scm_c_uniform32 (scm_rstate *STATE)
4600Return 32 random bits.
4601
4602*** Function: double scm_c_uniform01 (scm_rstate *STATE)
3e8370c3
MD
4603Return a sample from the uniform(0,1) distribution.
4604
259529f2 4605*** Function: double scm_c_normal01 (scm_rstate *STATE)
3e8370c3
MD
4606Return a sample from the normal(0,1) distribution.
4607
259529f2 4608*** Function: double scm_c_exp1 (scm_rstate *STATE)
3e8370c3
MD
4609Return a sample from the exp(1) distribution.
4610
259529f2
MD
4611*** Function: unsigned long scm_c_random (scm_rstate *STATE, unsigned long M)
4612Return a sample from the discrete uniform(0,M) distribution.
4613
4614*** Function: SCM scm_c_random_bignum (scm_rstate *STATE, SCM M)
3e8370c3 4615Return a sample from the discrete uniform(0,M) distribution.
259529f2 4616M must be a bignum object. The returned value may be an INUM.
3e8370c3 4617
9e97c52d 4618
f3227c7a 4619\f
d23bbf3e 4620Changes in Guile 1.3 (released Monday, October 19, 1998):
c484bf7f
JB
4621
4622* Changes to the distribution
4623
e2d6569c
JB
4624** We renamed the SCHEME_LOAD_PATH environment variable to GUILE_LOAD_PATH.
4625To avoid conflicts, programs should name environment variables after
4626themselves, except when there's a common practice establishing some
4627other convention.
4628
4629For now, Guile supports both GUILE_LOAD_PATH and SCHEME_LOAD_PATH,
4630giving the former precedence, and printing a warning message if the
4631latter is set. Guile 1.4 will not recognize SCHEME_LOAD_PATH at all.
4632
4633** The header files related to multi-byte characters have been removed.
4634They were: libguile/extchrs.h and libguile/mbstrings.h. Any C code
4635which referred to these explicitly will probably need to be rewritten,
4636since the support for the variant string types has been removed; see
4637below.
4638
4639** The header files append.h and sequences.h have been removed. These
4640files implemented non-R4RS operations which would encourage
4641non-portable programming style and less easy-to-read code.
3a97e020 4642
c484bf7f
JB
4643* Changes to the stand-alone interpreter
4644
2e368582 4645** New procedures have been added to implement a "batch mode":
ec4ab4fd 4646
2e368582 4647*** Function: batch-mode?
ec4ab4fd
GH
4648
4649 Returns a boolean indicating whether the interpreter is in batch
4650 mode.
4651
2e368582 4652*** Function: set-batch-mode?! ARG
ec4ab4fd
GH
4653
4654 If ARG is true, switches the interpreter to batch mode. The `#f'
4655 case has not been implemented.
4656
2e368582
JB
4657** Guile now provides full command-line editing, when run interactively.
4658To use this feature, you must have the readline library installed.
4659The Guile build process will notice it, and automatically include
4660support for it.
4661
4662The readline library is available via anonymous FTP from any GNU
4663mirror site; the canonical location is "ftp://prep.ai.mit.edu/pub/gnu".
4664
a5d6d578
MD
4665** the-last-stack is now a fluid.
4666
c484bf7f
JB
4667* Changes to the procedure for linking libguile with your programs
4668
71f20534 4669** You can now use the `guile-config' utility to build programs that use Guile.
2e368582 4670
2adfe1c0 4671Guile now includes a command-line utility called `guile-config', which
71f20534
JB
4672can provide information about how to compile and link programs that
4673use Guile.
4674
4675*** `guile-config compile' prints any C compiler flags needed to use Guile.
4676You should include this command's output on the command line you use
4677to compile C or C++ code that #includes the Guile header files. It's
4678usually just a `-I' flag to help the compiler find the Guile headers.
4679
4680
4681*** `guile-config link' prints any linker flags necessary to link with Guile.
8aa5c148 4682
71f20534 4683This command writes to its standard output a list of flags which you
8aa5c148
JB
4684must pass to the linker to link your code against the Guile library.
4685The flags include '-lguile' itself, any other libraries the Guile
4686library depends upon, and any `-L' flags needed to help the linker
4687find those libraries.
2e368582
JB
4688
4689For example, here is a Makefile rule that builds a program named 'foo'
4690from the object files ${FOO_OBJECTS}, and links them against Guile:
4691
4692 foo: ${FOO_OBJECTS}
2adfe1c0 4693 ${CC} ${CFLAGS} ${FOO_OBJECTS} `guile-config link` -o foo
2e368582 4694
e2d6569c
JB
4695Previous Guile releases recommended that you use autoconf to detect
4696which of a predefined set of libraries were present on your system.
2adfe1c0 4697It is more robust to use `guile-config', since it records exactly which
e2d6569c
JB
4698libraries the installed Guile library requires.
4699
2adfe1c0
JB
4700This was originally called `build-guile', but was renamed to
4701`guile-config' before Guile 1.3 was released, to be consistent with
4702the analogous script for the GTK+ GUI toolkit, which is called
4703`gtk-config'.
4704
2e368582 4705
8aa5c148
JB
4706** Use the GUILE_FLAGS macro in your configure.in file to find Guile.
4707
4708If you are using the GNU autoconf package to configure your program,
4709you can use the GUILE_FLAGS autoconf macro to call `guile-config'
4710(described above) and gather the necessary values for use in your
4711Makefiles.
4712
4713The GUILE_FLAGS macro expands to configure script code which runs the
4714`guile-config' script, to find out where Guile's header files and
4715libraries are installed. It sets two variables, marked for
4716substitution, as by AC_SUBST.
4717
4718 GUILE_CFLAGS --- flags to pass to a C or C++ compiler to build
4719 code that uses Guile header files. This is almost always just a
4720 -I flag.
4721
4722 GUILE_LDFLAGS --- flags to pass to the linker to link a
4723 program against Guile. This includes `-lguile' for the Guile
4724 library itself, any libraries that Guile itself requires (like
4725 -lqthreads), and so on. It may also include a -L flag to tell the
4726 compiler where to find the libraries.
4727
4728GUILE_FLAGS is defined in the file guile.m4, in the top-level
4729directory of the Guile distribution. You can copy it into your
4730package's aclocal.m4 file, and then use it in your configure.in file.
4731
4732If you are using the `aclocal' program, distributed with GNU automake,
4733to maintain your aclocal.m4 file, the Guile installation process
4734installs guile.m4 where aclocal will find it. All you need to do is
4735use GUILE_FLAGS in your configure.in file, and then run `aclocal';
4736this will copy the definition of GUILE_FLAGS into your aclocal.m4
4737file.
4738
4739
c484bf7f 4740* Changes to Scheme functions and syntax
7ad3c1e7 4741
02755d59 4742** Multi-byte strings have been removed, as have multi-byte and wide
e2d6569c
JB
4743ports. We felt that these were the wrong approach to
4744internationalization support.
02755d59 4745
2e368582
JB
4746** New function: readline [PROMPT]
4747Read a line from the terminal, and allow the user to edit it,
4748prompting with PROMPT. READLINE provides a large set of Emacs-like
4749editing commands, lets the user recall previously typed lines, and
4750works on almost every kind of terminal, including dumb terminals.
4751
4752READLINE assumes that the cursor is at the beginning of the line when
4753it is invoked. Thus, you can't print a prompt yourself, and then call
4754READLINE; you need to package up your prompt as a string, pass it to
4755the function, and let READLINE print the prompt itself. This is
4756because READLINE needs to know the prompt's screen width.
4757
8cd57bd0
JB
4758For Guile to provide this function, you must have the readline
4759library, version 2.1 or later, installed on your system. Readline is
4760available via anonymous FTP from prep.ai.mit.edu in pub/gnu, or from
4761any GNU mirror site.
2e368582
JB
4762
4763See also ADD-HISTORY function.
4764
4765** New function: add-history STRING
4766Add STRING as the most recent line in the history used by the READLINE
4767command. READLINE does not add lines to the history itself; you must
4768call ADD-HISTORY to make previous input available to the user.
4769
8cd57bd0
JB
4770** The behavior of the read-line function has changed.
4771
4772This function now uses standard C library functions to read the line,
4773for speed. This means that it doesn not respect the value of
4774scm-line-incrementors; it assumes that lines are delimited with
4775#\newline.
4776
4777(Note that this is read-line, the function that reads a line of text
4778from a port, not readline, the function that reads a line from a
4779terminal, providing full editing capabilities.)
4780
1a0106ef
JB
4781** New module (ice-9 getopt-gnu-style): Parse command-line arguments.
4782
4783This module provides some simple argument parsing. It exports one
4784function:
4785
4786Function: getopt-gnu-style ARG-LS
4787 Parse a list of program arguments into an alist of option
4788 descriptions.
4789
4790 Each item in the list of program arguments is examined to see if
4791 it meets the syntax of a GNU long-named option. An argument like
4792 `--MUMBLE' produces an element of the form (MUMBLE . #t) in the
4793 returned alist, where MUMBLE is a keyword object with the same
4794 name as the argument. An argument like `--MUMBLE=FROB' produces
4795 an element of the form (MUMBLE . FROB), where FROB is a string.
4796
4797 As a special case, the returned alist also contains a pair whose
4798 car is the symbol `rest'. The cdr of this pair is a list
4799 containing all the items in the argument list that are not options
4800 of the form mentioned above.
4801
4802 The argument `--' is treated specially: all items in the argument
4803 list appearing after such an argument are not examined, and are
4804 returned in the special `rest' list.
4805
4806 This function does not parse normal single-character switches.
4807 You will need to parse them out of the `rest' list yourself.
4808
8cd57bd0
JB
4809** The read syntax for byte vectors and short vectors has changed.
4810
4811Instead of #bytes(...), write #y(...).
4812
4813Instead of #short(...), write #h(...).
4814
4815This may seem nutty, but, like the other uniform vectors, byte vectors
4816and short vectors want to have the same print and read syntax (and,
4817more basic, want to have read syntax!). Changing the read syntax to
4818use multiple characters after the hash sign breaks with the
4819conventions used in R5RS and the conventions used for the other
4820uniform vectors. It also introduces complexity in the current reader,
4821both on the C and Scheme levels. (The Right solution is probably to
4822change the syntax and prototypes for uniform vectors entirely.)
4823
4824
4825** The new module (ice-9 session) provides useful interactive functions.
4826
4827*** New procedure: (apropos REGEXP OPTION ...)
4828
4829Display a list of top-level variables whose names match REGEXP, and
4830the modules they are imported from. Each OPTION should be one of the
4831following symbols:
4832
4833 value --- Show the value of each matching variable.
4834 shadow --- Show bindings shadowed by subsequently imported modules.
4835 full --- Same as both `shadow' and `value'.
4836
4837For example:
4838
4839 guile> (apropos "trace" 'full)
4840 debug: trace #<procedure trace args>
4841 debug: untrace #<procedure untrace args>
4842 the-scm-module: display-backtrace #<compiled-closure #<primitive-procedure gsubr-apply>>
4843 the-scm-module: before-backtrace-hook ()
4844 the-scm-module: backtrace #<primitive-procedure backtrace>
4845 the-scm-module: after-backtrace-hook ()
4846 the-scm-module: has-shown-backtrace-hint? #f
6c0201ad 4847 guile>
8cd57bd0
JB
4848
4849** There are new functions and syntax for working with macros.
4850
4851Guile implements macros as a special object type. Any variable whose
4852top-level binding is a macro object acts as a macro. The macro object
4853specifies how the expression should be transformed before evaluation.
4854
4855*** Macro objects now print in a reasonable way, resembling procedures.
4856
4857*** New function: (macro? OBJ)
4858True iff OBJ is a macro object.
4859
4860*** New function: (primitive-macro? OBJ)
4861Like (macro? OBJ), but true only if OBJ is one of the Guile primitive
4862macro transformers, implemented in eval.c rather than Scheme code.
4863
dbdd0c16
JB
4864Why do we have this function?
4865- For symmetry with procedure? and primitive-procedure?,
4866- to allow custom print procedures to tell whether a macro is
4867 primitive, and display it differently, and
4868- to allow compilers and user-written evaluators to distinguish
4869 builtin special forms from user-defined ones, which could be
4870 compiled.
4871
8cd57bd0
JB
4872*** New function: (macro-type OBJ)
4873Return a value indicating what kind of macro OBJ is. Possible return
4874values are:
4875
4876 The symbol `syntax' --- a macro created by procedure->syntax.
4877 The symbol `macro' --- a macro created by procedure->macro.
4878 The symbol `macro!' --- a macro created by procedure->memoizing-macro.
6c0201ad 4879 The boolean #f --- if OBJ is not a macro object.
8cd57bd0
JB
4880
4881*** New function: (macro-name MACRO)
4882Return the name of the macro object MACRO's procedure, as returned by
4883procedure-name.
4884
4885*** New function: (macro-transformer MACRO)
4886Return the transformer procedure for MACRO.
4887
4888*** New syntax: (use-syntax MODULE ... TRANSFORMER)
4889
4890Specify a new macro expander to use in the current module. Each
4891MODULE is a module name, with the same meaning as in the `use-modules'
4892form; each named module's exported bindings are added to the current
4893top-level environment. TRANSFORMER is an expression evaluated in the
4894resulting environment which must yield a procedure to use as the
4895module's eval transformer: every expression evaluated in this module
4896is passed to this function, and the result passed to the Guile
6c0201ad 4897interpreter.
8cd57bd0
JB
4898
4899*** macro-eval! is removed. Use local-eval instead.
29521173 4900
8d9dcb3c
MV
4901** Some magic has been added to the printer to better handle user
4902written printing routines (like record printers, closure printers).
4903
4904The problem is that these user written routines must have access to
7fbd77df 4905the current `print-state' to be able to handle fancy things like
8d9dcb3c
MV
4906detection of circular references. These print-states have to be
4907passed to the builtin printing routines (display, write, etc) to
4908properly continue the print chain.
4909
4910We didn't want to change all existing print code so that it
8cd57bd0 4911explicitly passes thru a print state in addition to a port. Instead,
8d9dcb3c
MV
4912we extented the possible values that the builtin printing routines
4913accept as a `port'. In addition to a normal port, they now also take
4914a pair of a normal port and a print-state. Printing will go to the
4915port and the print-state will be used to control the detection of
4916circular references, etc. If the builtin function does not care for a
4917print-state, it is simply ignored.
4918
4919User written callbacks are now called with such a pair as their
4920`port', but because every function now accepts this pair as a PORT
4921argument, you don't have to worry about that. In fact, it is probably
4922safest to not check for these pairs.
4923
4924However, it is sometimes necessary to continue a print chain on a
4925different port, for example to get a intermediate string
4926representation of the printed value, mangle that string somehow, and
4927then to finally print the mangled string. Use the new function
4928
4929 inherit-print-state OLD-PORT NEW-PORT
4930
4931for this. It constructs a new `port' that prints to NEW-PORT but
4932inherits the print-state of OLD-PORT.
4933
ef1ea498
MD
4934** struct-vtable-offset renamed to vtable-offset-user
4935
4936** New constants: vtable-index-layout, vtable-index-vtable, vtable-index-printer
4937
e478dffa
MD
4938** There is now a third optional argument to make-vtable-vtable
4939 (and fourth to make-struct) when constructing new types (vtables).
4940 This argument initializes field vtable-index-printer of the vtable.
ef1ea498 4941
4851dc57
MV
4942** The detection of circular references has been extended to structs.
4943That is, a structure that -- in the process of being printed -- prints
4944itself does not lead to infinite recursion.
4945
4946** There is now some basic support for fluids. Please read
4947"libguile/fluid.h" to find out more. It is accessible from Scheme with
4948the following functions and macros:
4949
9c3fb66f
MV
4950Function: make-fluid
4951
4952 Create a new fluid object. Fluids are not special variables or
4953 some other extension to the semantics of Scheme, but rather
4954 ordinary Scheme objects. You can store them into variables (that
4955 are still lexically scoped, of course) or into any other place you
4956 like. Every fluid has a initial value of `#f'.
04c76b58 4957
9c3fb66f 4958Function: fluid? OBJ
04c76b58 4959
9c3fb66f 4960 Test whether OBJ is a fluid.
04c76b58 4961
9c3fb66f
MV
4962Function: fluid-ref FLUID
4963Function: fluid-set! FLUID VAL
04c76b58
MV
4964
4965 Access/modify the fluid FLUID. Modifications are only visible
4966 within the current dynamic root (that includes threads).
4967
9c3fb66f
MV
4968Function: with-fluids* FLUIDS VALUES THUNK
4969
4970 FLUIDS is a list of fluids and VALUES a corresponding list of
4971 values for these fluids. Before THUNK gets called the values are
6c0201ad 4972 installed in the fluids and the old values of the fluids are
9c3fb66f
MV
4973 saved in the VALUES list. When the flow of control leaves THUNK
4974 or reenters it, the values get swapped again. You might think of
4975 this as a `safe-fluid-excursion'. Note that the VALUES list is
4976 modified by `with-fluids*'.
4977
4978Macro: with-fluids ((FLUID VALUE) ...) FORM ...
4979
4980 The same as `with-fluids*' but with a different syntax. It looks
4981 just like `let', but both FLUID and VALUE are evaluated. Remember,
4982 fluids are not special variables but ordinary objects. FLUID
4983 should evaluate to a fluid.
04c76b58 4984
e2d6569c 4985** Changes to system call interfaces:
64d01d13 4986
e2d6569c 4987*** close-port, close-input-port and close-output-port now return a
64d01d13
GH
4988boolean instead of an `unspecified' object. #t means that the port
4989was successfully closed, while #f means it was already closed. It is
4990also now possible for these procedures to raise an exception if an
4991error occurs (some errors from write can be delayed until close.)
4992
e2d6569c 4993*** the first argument to chmod, fcntl, ftell and fseek can now be a
6afcd3b2
GH
4994file descriptor.
4995
e2d6569c 4996*** the third argument to fcntl is now optional.
6afcd3b2 4997
e2d6569c 4998*** the first argument to chown can now be a file descriptor or a port.
6afcd3b2 4999
e2d6569c 5000*** the argument to stat can now be a port.
6afcd3b2 5001
e2d6569c 5002*** The following new procedures have been added (most use scsh
64d01d13
GH
5003interfaces):
5004
e2d6569c 5005*** procedure: close PORT/FD
ec4ab4fd
GH
5006 Similar to close-port (*note close-port: Closing Ports.), but also
5007 works on file descriptors. A side effect of closing a file
5008 descriptor is that any ports using that file descriptor are moved
5009 to a different file descriptor and have their revealed counts set
5010 to zero.
5011
e2d6569c 5012*** procedure: port->fdes PORT
ec4ab4fd
GH
5013 Returns the integer file descriptor underlying PORT. As a side
5014 effect the revealed count of PORT is incremented.
5015
e2d6569c 5016*** procedure: fdes->ports FDES
ec4ab4fd
GH
5017 Returns a list of existing ports which have FDES as an underlying
5018 file descriptor, without changing their revealed counts.
5019
e2d6569c 5020*** procedure: fdes->inport FDES
ec4ab4fd
GH
5021 Returns an existing input port which has FDES as its underlying
5022 file descriptor, if one exists, and increments its revealed count.
5023 Otherwise, returns a new input port with a revealed count of 1.
5024
e2d6569c 5025*** procedure: fdes->outport FDES
ec4ab4fd
GH
5026 Returns an existing output port which has FDES as its underlying
5027 file descriptor, if one exists, and increments its revealed count.
5028 Otherwise, returns a new output port with a revealed count of 1.
5029
5030 The next group of procedures perform a `dup2' system call, if NEWFD
5031(an integer) is supplied, otherwise a `dup'. The file descriptor to be
5032duplicated can be supplied as an integer or contained in a port. The
64d01d13
GH
5033type of value returned varies depending on which procedure is used.
5034
ec4ab4fd
GH
5035 All procedures also have the side effect when performing `dup2' that
5036any ports using NEWFD are moved to a different file descriptor and have
64d01d13
GH
5037their revealed counts set to zero.
5038
e2d6569c 5039*** procedure: dup->fdes PORT/FD [NEWFD]
ec4ab4fd 5040 Returns an integer file descriptor.
64d01d13 5041
e2d6569c 5042*** procedure: dup->inport PORT/FD [NEWFD]
ec4ab4fd 5043 Returns a new input port using the new file descriptor.
64d01d13 5044
e2d6569c 5045*** procedure: dup->outport PORT/FD [NEWFD]
ec4ab4fd 5046 Returns a new output port using the new file descriptor.
64d01d13 5047
e2d6569c 5048*** procedure: dup PORT/FD [NEWFD]
ec4ab4fd
GH
5049 Returns a new port if PORT/FD is a port, with the same mode as the
5050 supplied port, otherwise returns an integer file descriptor.
64d01d13 5051
e2d6569c 5052*** procedure: dup->port PORT/FD MODE [NEWFD]
ec4ab4fd
GH
5053 Returns a new port using the new file descriptor. MODE supplies a
5054 mode string for the port (*note open-file: File Ports.).
64d01d13 5055
e2d6569c 5056*** procedure: setenv NAME VALUE
ec4ab4fd
GH
5057 Modifies the environment of the current process, which is also the
5058 default environment inherited by child processes.
64d01d13 5059
ec4ab4fd
GH
5060 If VALUE is `#f', then NAME is removed from the environment.
5061 Otherwise, the string NAME=VALUE is added to the environment,
5062 replacing any existing string with name matching NAME.
64d01d13 5063
ec4ab4fd 5064 The return value is unspecified.
956055a9 5065
e2d6569c 5066*** procedure: truncate-file OBJ SIZE
6afcd3b2
GH
5067 Truncates the file referred to by OBJ to at most SIZE bytes. OBJ
5068 can be a string containing a file name or an integer file
5069 descriptor or port open for output on the file. The underlying
5070 system calls are `truncate' and `ftruncate'.
5071
5072 The return value is unspecified.
5073
e2d6569c 5074*** procedure: setvbuf PORT MODE [SIZE]
7a6f1ffa
GH
5075 Set the buffering mode for PORT. MODE can be:
5076 `_IONBF'
5077 non-buffered
5078
5079 `_IOLBF'
5080 line buffered
5081
5082 `_IOFBF'
5083 block buffered, using a newly allocated buffer of SIZE bytes.
5084 However if SIZE is zero or unspecified, the port will be made
5085 non-buffered.
5086
5087 This procedure should not be used after I/O has been performed with
5088 the port.
5089
5090 Ports are usually block buffered by default, with a default buffer
5091 size. Procedures e.g., *Note open-file: File Ports, which accept a
5092 mode string allow `0' to be added to request an unbuffered port.
5093
e2d6569c 5094*** procedure: fsync PORT/FD
6afcd3b2
GH
5095 Copies any unwritten data for the specified output file descriptor
5096 to disk. If PORT/FD is a port, its buffer is flushed before the
5097 underlying file descriptor is fsync'd. The return value is
5098 unspecified.
5099
e2d6569c 5100*** procedure: open-fdes PATH FLAGS [MODES]
6afcd3b2
GH
5101 Similar to `open' but returns a file descriptor instead of a port.
5102
e2d6569c 5103*** procedure: execle PATH ENV [ARG] ...
6afcd3b2
GH
5104 Similar to `execl', but the environment of the new process is
5105 specified by ENV, which must be a list of strings as returned by
5106 the `environ' procedure.
5107
5108 This procedure is currently implemented using the `execve' system
5109 call, but we call it `execle' because of its Scheme calling
5110 interface.
5111
e2d6569c 5112*** procedure: strerror ERRNO
ec4ab4fd
GH
5113 Returns the Unix error message corresponding to ERRNO, an integer.
5114
e2d6569c 5115*** procedure: primitive-exit [STATUS]
6afcd3b2
GH
5116 Terminate the current process without unwinding the Scheme stack.
5117 This is would typically be useful after a fork. The exit status
5118 is STATUS if supplied, otherwise zero.
5119
e2d6569c 5120*** procedure: times
6afcd3b2
GH
5121 Returns an object with information about real and processor time.
5122 The following procedures accept such an object as an argument and
5123 return a selected component:
5124
5125 `tms:clock'
5126 The current real time, expressed as time units relative to an
5127 arbitrary base.
5128
5129 `tms:utime'
5130 The CPU time units used by the calling process.
5131
5132 `tms:stime'
5133 The CPU time units used by the system on behalf of the
5134 calling process.
5135
5136 `tms:cutime'
5137 The CPU time units used by terminated child processes of the
5138 calling process, whose status has been collected (e.g., using
5139 `waitpid').
5140
5141 `tms:cstime'
5142 Similarly, the CPU times units used by the system on behalf of
5143 terminated child processes.
7ad3c1e7 5144
e2d6569c
JB
5145** Removed: list-length
5146** Removed: list-append, list-append!
5147** Removed: list-reverse, list-reverse!
5148
5149** array-map renamed to array-map!
5150
5151** serial-array-map renamed to serial-array-map!
5152
660f41fa
MD
5153** catch doesn't take #f as first argument any longer
5154
5155Previously, it was possible to pass #f instead of a key to `catch'.
5156That would cause `catch' to pass a jump buffer object to the procedure
5157passed as second argument. The procedure could then use this jump
5158buffer objekt as an argument to throw.
5159
5160This mechanism has been removed since its utility doesn't motivate the
5161extra complexity it introduces.
5162
332d00f6
JB
5163** The `#/' notation for lists now provokes a warning message from Guile.
5164This syntax will be removed from Guile in the near future.
5165
5166To disable the warning message, set the GUILE_HUSH environment
5167variable to any non-empty value.
5168
8cd57bd0
JB
5169** The newline character now prints as `#\newline', following the
5170normal Scheme notation, not `#\nl'.
5171
c484bf7f
JB
5172* Changes to the gh_ interface
5173
8986901b
JB
5174** The gh_enter function now takes care of loading the Guile startup files.
5175gh_enter works by calling scm_boot_guile; see the remarks below.
5176
5424b4f7
MD
5177** Function: void gh_write (SCM x)
5178
5179Write the printed representation of the scheme object x to the current
5180output port. Corresponds to the scheme level `write'.
5181
3a97e020
MD
5182** gh_list_length renamed to gh_length.
5183
8d6787b6
MG
5184** vector handling routines
5185
5186Several major changes. In particular, gh_vector() now resembles
5187(vector ...) (with a caveat -- see manual), and gh_make_vector() now
956328d2
MG
5188exists and behaves like (make-vector ...). gh_vset() and gh_vref()
5189have been renamed gh_vector_set_x() and gh_vector_ref(). Some missing
8d6787b6
MG
5190vector-related gh_ functions have been implemented.
5191
7fee59bd
MG
5192** pair and list routines
5193
5194Implemented several of the R4RS pair and list functions that were
5195missing.
5196
171422a9
MD
5197** gh_scm2doubles, gh_doubles2scm, gh_doubles2dvect
5198
5199New function. Converts double arrays back and forth between Scheme
5200and C.
5201
c484bf7f
JB
5202* Changes to the scm_ interface
5203
8986901b
JB
5204** The function scm_boot_guile now takes care of loading the startup files.
5205
5206Guile's primary initialization function, scm_boot_guile, now takes
5207care of loading `boot-9.scm', in the `ice-9' module, to initialize
5208Guile, define the module system, and put together some standard
5209bindings. It also loads `init.scm', which is intended to hold
5210site-specific initialization code.
5211
5212Since Guile cannot operate properly until boot-9.scm is loaded, there
5213is no reason to separate loading boot-9.scm from Guile's other
5214initialization processes.
5215
5216This job used to be done by scm_compile_shell_switches, which didn't
5217make much sense; in particular, it meant that people using Guile for
5218non-shell-like applications had to jump through hoops to get Guile
5219initialized properly.
5220
5221** The function scm_compile_shell_switches no longer loads the startup files.
5222Now, Guile always loads the startup files, whenever it is initialized;
5223see the notes above for scm_boot_guile and scm_load_startup_files.
5224
5225** Function: scm_load_startup_files
5226This new function takes care of loading Guile's initialization file
5227(`boot-9.scm'), and the site initialization file, `init.scm'. Since
5228this is always called by the Guile initialization process, it's
5229probably not too useful to call this yourself, but it's there anyway.
5230
87148d9e
JB
5231** The semantics of smob marking have changed slightly.
5232
5233The smob marking function (the `mark' member of the scm_smobfuns
5234structure) is no longer responsible for setting the mark bit on the
5235smob. The generic smob handling code in the garbage collector will
5236set this bit. The mark function need only ensure that any other
5237objects the smob refers to get marked.
5238
5239Note that this change means that the smob's GC8MARK bit is typically
5240already set upon entry to the mark function. Thus, marking functions
5241which look like this:
5242
5243 {
5244 if (SCM_GC8MARKP (ptr))
5245 return SCM_BOOL_F;
5246 SCM_SETGC8MARK (ptr);
5247 ... mark objects to which the smob refers ...
5248 }
5249
5250are now incorrect, since they will return early, and fail to mark any
5251other objects the smob refers to. Some code in the Guile library used
5252to work this way.
5253
1cf84ea5
JB
5254** The semantics of the I/O port functions in scm_ptobfuns have changed.
5255
5256If you have implemented your own I/O port type, by writing the
5257functions required by the scm_ptobfuns and then calling scm_newptob,
5258you will need to change your functions slightly.
5259
5260The functions in a scm_ptobfuns structure now expect the port itself
5261as their argument; they used to expect the `stream' member of the
5262port's scm_port_table structure. This allows functions in an
5263scm_ptobfuns structure to easily access the port's cell (and any flags
5264it its CAR), and the port's scm_port_table structure.
5265
5266Guile now passes the I/O port itself as the `port' argument in the
5267following scm_ptobfuns functions:
5268
5269 int (*free) (SCM port);
5270 int (*fputc) (int, SCM port);
5271 int (*fputs) (char *, SCM port);
5272 scm_sizet (*fwrite) SCM_P ((char *ptr,
5273 scm_sizet size,
5274 scm_sizet nitems,
5275 SCM port));
5276 int (*fflush) (SCM port);
5277 int (*fgetc) (SCM port);
5278 int (*fclose) (SCM port);
5279
5280The interfaces to the `mark', `print', `equalp', and `fgets' methods
5281are unchanged.
5282
5283If you have existing code which defines its own port types, it is easy
5284to convert your code to the new interface; simply apply SCM_STREAM to
5285the port argument to yield the value you code used to expect.
5286
5287Note that since both the port and the stream have the same type in the
5288C code --- they are both SCM values --- the C compiler will not remind
5289you if you forget to update your scm_ptobfuns functions.
5290
5291
933a7411
MD
5292** Function: int scm_internal_select (int fds,
5293 SELECT_TYPE *rfds,
5294 SELECT_TYPE *wfds,
5295 SELECT_TYPE *efds,
5296 struct timeval *timeout);
5297
5298This is a replacement for the `select' function provided by the OS.
5299It enables I/O blocking and sleeping to happen for one cooperative
5300thread without blocking other threads. It also avoids busy-loops in
5301these situations. It is intended that all I/O blocking and sleeping
5302will finally go through this function. Currently, this function is
5303only available on systems providing `gettimeofday' and `select'.
5304
5424b4f7
MD
5305** Function: SCM scm_internal_stack_catch (SCM tag,
5306 scm_catch_body_t body,
5307 void *body_data,
5308 scm_catch_handler_t handler,
5309 void *handler_data)
5310
5311A new sibling to the other two C level `catch' functions
5312scm_internal_catch and scm_internal_lazy_catch. Use it if you want
5313the stack to be saved automatically into the variable `the-last-stack'
5314(scm_the_last_stack_var) on error. This is necessary if you want to
5315use advanced error reporting, such as calling scm_display_error and
5316scm_display_backtrace. (They both take a stack object as argument.)
5317
df366c26
MD
5318** Function: SCM scm_spawn_thread (scm_catch_body_t body,
5319 void *body_data,
5320 scm_catch_handler_t handler,
5321 void *handler_data)
5322
5323Spawns a new thread. It does a job similar to
5324scm_call_with_new_thread but takes arguments more suitable when
5325spawning threads from application C code.
5326
88482b31
MD
5327** The hook scm_error_callback has been removed. It was originally
5328intended as a way for the user to install his own error handler. But
5329that method works badly since it intervenes between throw and catch,
5330thereby changing the semantics of expressions like (catch #t ...).
5331The correct way to do it is to use one of the C level catch functions
5332in throw.c: scm_internal_catch/lazy_catch/stack_catch.
5333
3a97e020
MD
5334** Removed functions:
5335
5336scm_obj_length, scm_list_length, scm_list_append, scm_list_append_x,
5337scm_list_reverse, scm_list_reverse_x
5338
5339** New macros: SCM_LISTn where n is one of the integers 0-9.
5340
5341These can be used for pretty list creation from C. The idea is taken
5342from Erick Gallesio's STk.
5343
298aa6e3
MD
5344** scm_array_map renamed to scm_array_map_x
5345
527da704
MD
5346** mbstrings are now removed
5347
5348This means that the type codes scm_tc7_mb_string and
5349scm_tc7_mb_substring has been removed.
5350
8cd57bd0
JB
5351** scm_gen_putc, scm_gen_puts, scm_gen_write, and scm_gen_getc have changed.
5352
5353Since we no longer support multi-byte strings, these I/O functions
5354have been simplified, and renamed. Here are their old names, and
5355their new names and arguments:
5356
5357scm_gen_putc -> void scm_putc (int c, SCM port);
5358scm_gen_puts -> void scm_puts (char *s, SCM port);
5359scm_gen_write -> void scm_lfwrite (char *ptr, scm_sizet size, SCM port);
5360scm_gen_getc -> void scm_getc (SCM port);
5361
5362
527da704
MD
5363** The macros SCM_TYP7D and SCM_TYP7SD has been removed.
5364
5365** The macro SCM_TYP7S has taken the role of the old SCM_TYP7D
5366
5367SCM_TYP7S now masks away the bit which distinguishes substrings from
5368strings.
5369
660f41fa
MD
5370** scm_catch_body_t: Backward incompatible change!
5371
5372Body functions to scm_internal_catch and friends do not any longer
5373take a second argument. This is because it is no longer possible to
5374pass a #f arg to catch.
5375
a8e05009
JB
5376** Calls to scm_protect_object and scm_unprotect now nest properly.
5377
5378The function scm_protect_object protects its argument from being freed
5379by the garbage collector. scm_unprotect_object removes that
5380protection.
5381
5382These functions now nest properly. That is, for every object O, there
5383is a counter which scm_protect_object(O) increments and
5384scm_unprotect_object(O) decrements, if the counter is greater than
5385zero. Every object's counter is zero when it is first created. If an
5386object's counter is greater than zero, the garbage collector will not
5387reclaim its storage.
5388
5389This allows you to use scm_protect_object in your code without
5390worrying that some other function you call will call
5391scm_unprotect_object, and allow it to be freed. Assuming that the
5392functions you call are well-behaved, and unprotect only those objects
5393they protect, you can follow the same rule and have confidence that
5394objects will be freed only at appropriate times.
5395
c484bf7f
JB
5396\f
5397Changes in Guile 1.2 (released Tuesday, June 24 1997):
cf78e9e8 5398
737c9113
JB
5399* Changes to the distribution
5400
832b09ed
JB
5401** Nightly snapshots are now available from ftp.red-bean.com.
5402The old server, ftp.cyclic.com, has been relinquished to its rightful
5403owner.
5404
5405Nightly snapshots of the Guile development sources are now available via
5406anonymous FTP from ftp.red-bean.com, as /pub/guile/guile-snap.tar.gz.
5407
5408Via the web, that's: ftp://ftp.red-bean.com/pub/guile/guile-snap.tar.gz
5409For getit, that's: ftp.red-bean.com:/pub/guile/guile-snap.tar.gz
5410
0fcab5ed
JB
5411** To run Guile without installing it, the procedure has changed a bit.
5412
5413If you used a separate build directory to compile Guile, you'll need
5414to include the build directory in SCHEME_LOAD_PATH, as well as the
5415source directory. See the `INSTALL' file for examples.
5416
737c9113
JB
5417* Changes to the procedure for linking libguile with your programs
5418
94982a4e
JB
5419** The standard Guile load path for Scheme code now includes
5420$(datadir)/guile (usually /usr/local/share/guile). This means that
5421you can install your own Scheme files there, and Guile will find them.
5422(Previous versions of Guile only checked a directory whose name
5423contained the Guile version number, so you had to re-install or move
5424your Scheme sources each time you installed a fresh version of Guile.)
5425
5426The load path also includes $(datadir)/guile/site; we recommend
5427putting individual Scheme files there. If you want to install a
5428package with multiple source files, create a directory for them under
5429$(datadir)/guile.
5430
5431** Guile 1.2 will now use the Rx regular expression library, if it is
5432installed on your system. When you are linking libguile into your own
5433programs, this means you will have to link against -lguile, -lqt (if
5434you configured Guile with thread support), and -lrx.
27590f82
JB
5435
5436If you are using autoconf to generate configuration scripts for your
5437application, the following lines should suffice to add the appropriate
5438libraries to your link command:
5439
5440### Find Rx, quickthreads and libguile.
5441AC_CHECK_LIB(rx, main)
5442AC_CHECK_LIB(qt, main)
5443AC_CHECK_LIB(guile, scm_shell)
5444
94982a4e
JB
5445The Guile 1.2 distribution does not contain sources for the Rx
5446library, as Guile 1.0 did. If you want to use Rx, you'll need to
5447retrieve it from a GNU FTP site and install it separately.
5448
b83b8bee
JB
5449* Changes to Scheme functions and syntax
5450
e035e7e6
MV
5451** The dynamic linking features of Guile are now enabled by default.
5452You can disable them by giving the `--disable-dynamic-linking' option
5453to configure.
5454
e035e7e6
MV
5455 (dynamic-link FILENAME)
5456
5457 Find the object file denoted by FILENAME (a string) and link it
5458 into the running Guile application. When everything works out,
5459 return a Scheme object suitable for representing the linked object
5460 file. Otherwise an error is thrown. How object files are
5461 searched is system dependent.
5462
5463 (dynamic-object? VAL)
5464
5465 Determine whether VAL represents a dynamically linked object file.
5466
5467 (dynamic-unlink DYNOBJ)
5468
5469 Unlink the indicated object file from the application. DYNOBJ
5470 should be one of the values returned by `dynamic-link'.
5471
5472 (dynamic-func FUNCTION DYNOBJ)
5473
5474 Search the C function indicated by FUNCTION (a string or symbol)
5475 in DYNOBJ and return some Scheme object that can later be used
5476 with `dynamic-call' to actually call this function. Right now,
5477 these Scheme objects are formed by casting the address of the
5478 function to `long' and converting this number to its Scheme
5479 representation.
5480
5481 (dynamic-call FUNCTION DYNOBJ)
5482
5483 Call the C function indicated by FUNCTION and DYNOBJ. The
5484 function is passed no arguments and its return value is ignored.
5485 When FUNCTION is something returned by `dynamic-func', call that
5486 function and ignore DYNOBJ. When FUNCTION is a string (or symbol,
5487 etc.), look it up in DYNOBJ; this is equivalent to
5488
5489 (dynamic-call (dynamic-func FUNCTION DYNOBJ) #f)
5490
5491 Interrupts are deferred while the C function is executing (with
5492 SCM_DEFER_INTS/SCM_ALLOW_INTS).
5493
5494 (dynamic-args-call FUNCTION DYNOBJ ARGS)
5495
5496 Call the C function indicated by FUNCTION and DYNOBJ, but pass it
5497 some arguments and return its return value. The C function is
5498 expected to take two arguments and return an `int', just like
5499 `main':
5500
5501 int c_func (int argc, char **argv);
5502
5503 ARGS must be a list of strings and is converted into an array of
5504 `char *'. The array is passed in ARGV and its size in ARGC. The
5505 return value is converted to a Scheme number and returned from the
5506 call to `dynamic-args-call'.
5507
0fcab5ed
JB
5508When dynamic linking is disabled or not supported on your system,
5509the above functions throw errors, but they are still available.
5510
e035e7e6
MV
5511Here is a small example that works on GNU/Linux:
5512
5513 (define libc-obj (dynamic-link "libc.so"))
5514 (dynamic-args-call 'rand libc-obj '())
5515
5516See the file `libguile/DYNAMIC-LINKING' for additional comments.
5517
27590f82 5518** The #/ syntax for module names is depreciated, and will be removed
6c0201ad 5519in a future version of Guile. Instead of
27590f82
JB
5520
5521 #/foo/bar/baz
5522
5523instead write
5524
5525 (foo bar baz)
5526
5527The latter syntax is more consistent with existing Lisp practice.
5528
5dade857
MV
5529** Guile now does fancier printing of structures. Structures are the
5530underlying implementation for records, which in turn are used to
5531implement modules, so all of these object now print differently and in
5532a more informative way.
5533
161029df
JB
5534The Scheme printer will examine the builtin variable *struct-printer*
5535whenever it needs to print a structure object. When this variable is
5536not `#f' it is deemed to be a procedure and will be applied to the
5537structure object and the output port. When *struct-printer* is `#f'
5538or the procedure return `#f' the structure object will be printed in
5539the boring #<struct 80458270> form.
5dade857
MV
5540
5541This hook is used by some routines in ice-9/boot-9.scm to implement
5542type specific printing routines. Please read the comments there about
5543"printing structs".
5544
5545One of the more specific uses of structs are records. The printing
5546procedure that could be passed to MAKE-RECORD-TYPE is now actually
5547called. It should behave like a *struct-printer* procedure (described
5548above).
5549
b83b8bee
JB
5550** Guile now supports a new R4RS-compliant syntax for keywords. A
5551token of the form #:NAME, where NAME has the same syntax as a Scheme
5552symbol, is the external representation of the keyword named NAME.
5553Keyword objects print using this syntax as well, so values containing
1e5afba0
JB
5554keyword objects can be read back into Guile. When used in an
5555expression, keywords are self-quoting objects.
b83b8bee
JB
5556
5557Guile suports this read syntax, and uses this print syntax, regardless
5558of the current setting of the `keyword' read option. The `keyword'
5559read option only controls whether Guile recognizes the `:NAME' syntax,
5560which is incompatible with R4RS. (R4RS says such token represent
5561symbols.)
737c9113
JB
5562
5563** Guile has regular expression support again. Guile 1.0 included
5564functions for matching regular expressions, based on the Rx library.
5565In Guile 1.1, the Guile/Rx interface was removed to simplify the
5566distribution, and thus Guile had no regular expression support. Guile
94982a4e
JB
55671.2 again supports the most commonly used functions, and supports all
5568of SCSH's regular expression functions.
2409cdfa 5569
94982a4e
JB
5570If your system does not include a POSIX regular expression library,
5571and you have not linked Guile with a third-party regexp library such as
5572Rx, these functions will not be available. You can tell whether your
5573Guile installation includes regular expression support by checking
5574whether the `*features*' list includes the `regex' symbol.
737c9113 5575
94982a4e 5576*** regexp functions
161029df 5577
94982a4e
JB
5578By default, Guile supports POSIX extended regular expressions. That
5579means that the characters `(', `)', `+' and `?' are special, and must
5580be escaped if you wish to match the literal characters.
e1a191a8 5581
94982a4e
JB
5582This regular expression interface was modeled after that implemented
5583by SCSH, the Scheme Shell. It is intended to be upwardly compatible
5584with SCSH regular expressions.
5585
5586**** Function: string-match PATTERN STR [START]
5587 Compile the string PATTERN into a regular expression and compare
5588 it with STR. The optional numeric argument START specifies the
5589 position of STR at which to begin matching.
5590
5591 `string-match' returns a "match structure" which describes what,
5592 if anything, was matched by the regular expression. *Note Match
5593 Structures::. If STR does not match PATTERN at all,
5594 `string-match' returns `#f'.
5595
5596 Each time `string-match' is called, it must compile its PATTERN
5597argument into a regular expression structure. This operation is
5598expensive, which makes `string-match' inefficient if the same regular
5599expression is used several times (for example, in a loop). For better
5600performance, you can compile a regular expression in advance and then
5601match strings against the compiled regexp.
5602
5603**** Function: make-regexp STR [FLAGS]
5604 Compile the regular expression described by STR, and return the
5605 compiled regexp structure. If STR does not describe a legal
5606 regular expression, `make-regexp' throws a
5607 `regular-expression-syntax' error.
5608
5609 FLAGS may be the bitwise-or of one or more of the following:
5610
5611**** Constant: regexp/extended
5612 Use POSIX Extended Regular Expression syntax when interpreting
5613 STR. If not set, POSIX Basic Regular Expression syntax is used.
5614 If the FLAGS argument is omitted, we assume regexp/extended.
5615
5616**** Constant: regexp/icase
5617 Do not differentiate case. Subsequent searches using the
5618 returned regular expression will be case insensitive.
5619
5620**** Constant: regexp/newline
5621 Match-any-character operators don't match a newline.
5622
5623 A non-matching list ([^...]) not containing a newline matches a
5624 newline.
5625
5626 Match-beginning-of-line operator (^) matches the empty string
5627 immediately after a newline, regardless of whether the FLAGS
5628 passed to regexp-exec contain regexp/notbol.
5629
5630 Match-end-of-line operator ($) matches the empty string
5631 immediately before a newline, regardless of whether the FLAGS
5632 passed to regexp-exec contain regexp/noteol.
5633
5634**** Function: regexp-exec REGEXP STR [START [FLAGS]]
5635 Match the compiled regular expression REGEXP against `str'. If
5636 the optional integer START argument is provided, begin matching
5637 from that position in the string. Return a match structure
5638 describing the results of the match, or `#f' if no match could be
5639 found.
5640
5641 FLAGS may be the bitwise-or of one or more of the following:
5642
5643**** Constant: regexp/notbol
5644 The match-beginning-of-line operator always fails to match (but
5645 see the compilation flag regexp/newline above) This flag may be
5646 used when different portions of a string are passed to
5647 regexp-exec and the beginning of the string should not be
5648 interpreted as the beginning of the line.
5649
5650**** Constant: regexp/noteol
5651 The match-end-of-line operator always fails to match (but see the
5652 compilation flag regexp/newline above)
5653
5654**** Function: regexp? OBJ
5655 Return `#t' if OBJ is a compiled regular expression, or `#f'
5656 otherwise.
5657
5658 Regular expressions are commonly used to find patterns in one string
5659and replace them with the contents of another string.
5660
5661**** Function: regexp-substitute PORT MATCH [ITEM...]
5662 Write to the output port PORT selected contents of the match
5663 structure MATCH. Each ITEM specifies what should be written, and
5664 may be one of the following arguments:
5665
5666 * A string. String arguments are written out verbatim.
5667
5668 * An integer. The submatch with that number is written.
5669
5670 * The symbol `pre'. The portion of the matched string preceding
5671 the regexp match is written.
5672
5673 * The symbol `post'. The portion of the matched string
5674 following the regexp match is written.
5675
5676 PORT may be `#f', in which case nothing is written; instead,
5677 `regexp-substitute' constructs a string from the specified ITEMs
5678 and returns that.
5679
5680**** Function: regexp-substitute/global PORT REGEXP TARGET [ITEM...]
5681 Similar to `regexp-substitute', but can be used to perform global
5682 substitutions on STR. Instead of taking a match structure as an
5683 argument, `regexp-substitute/global' takes two string arguments: a
5684 REGEXP string describing a regular expression, and a TARGET string
5685 which should be matched against this regular expression.
5686
5687 Each ITEM behaves as in REGEXP-SUBSTITUTE, with the following
5688 exceptions:
5689
5690 * A function may be supplied. When this function is called, it
5691 will be passed one argument: a match structure for a given
5692 regular expression match. It should return a string to be
5693 written out to PORT.
5694
5695 * The `post' symbol causes `regexp-substitute/global' to recurse
5696 on the unmatched portion of STR. This *must* be supplied in
5697 order to perform global search-and-replace on STR; if it is
5698 not present among the ITEMs, then `regexp-substitute/global'
5699 will return after processing a single match.
5700
5701*** Match Structures
5702
5703 A "match structure" is the object returned by `string-match' and
5704`regexp-exec'. It describes which portion of a string, if any, matched
5705the given regular expression. Match structures include: a reference to
5706the string that was checked for matches; the starting and ending
5707positions of the regexp match; and, if the regexp included any
5708parenthesized subexpressions, the starting and ending positions of each
5709submatch.
5710
5711 In each of the regexp match functions described below, the `match'
5712argument must be a match structure returned by a previous call to
5713`string-match' or `regexp-exec'. Most of these functions return some
5714information about the original target string that was matched against a
5715regular expression; we will call that string TARGET for easy reference.
5716
5717**** Function: regexp-match? OBJ
5718 Return `#t' if OBJ is a match structure returned by a previous
5719 call to `regexp-exec', or `#f' otherwise.
5720
5721**** Function: match:substring MATCH [N]
5722 Return the portion of TARGET matched by subexpression number N.
5723 Submatch 0 (the default) represents the entire regexp match. If
5724 the regular expression as a whole matched, but the subexpression
5725 number N did not match, return `#f'.
5726
5727**** Function: match:start MATCH [N]
5728 Return the starting position of submatch number N.
5729
5730**** Function: match:end MATCH [N]
5731 Return the ending position of submatch number N.
5732
5733**** Function: match:prefix MATCH
5734 Return the unmatched portion of TARGET preceding the regexp match.
5735
5736**** Function: match:suffix MATCH
5737 Return the unmatched portion of TARGET following the regexp match.
5738
5739**** Function: match:count MATCH
5740 Return the number of parenthesized subexpressions from MATCH.
5741 Note that the entire regular expression match itself counts as a
5742 subexpression, and failed submatches are included in the count.
5743
5744**** Function: match:string MATCH
5745 Return the original TARGET string.
5746
5747*** Backslash Escapes
5748
5749 Sometimes you will want a regexp to match characters like `*' or `$'
5750exactly. For example, to check whether a particular string represents
5751a menu entry from an Info node, it would be useful to match it against
5752a regexp like `^* [^:]*::'. However, this won't work; because the
5753asterisk is a metacharacter, it won't match the `*' at the beginning of
5754the string. In this case, we want to make the first asterisk un-magic.
5755
5756 You can do this by preceding the metacharacter with a backslash
5757character `\'. (This is also called "quoting" the metacharacter, and
5758is known as a "backslash escape".) When Guile sees a backslash in a
5759regular expression, it considers the following glyph to be an ordinary
5760character, no matter what special meaning it would ordinarily have.
5761Therefore, we can make the above example work by changing the regexp to
5762`^\* [^:]*::'. The `\*' sequence tells the regular expression engine
5763to match only a single asterisk in the target string.
5764
5765 Since the backslash is itself a metacharacter, you may force a
5766regexp to match a backslash in the target string by preceding the
5767backslash with itself. For example, to find variable references in a
5768TeX program, you might want to find occurrences of the string `\let\'
5769followed by any number of alphabetic characters. The regular expression
5770`\\let\\[A-Za-z]*' would do this: the double backslashes in the regexp
5771each match a single backslash in the target string.
5772
5773**** Function: regexp-quote STR
5774 Quote each special character found in STR with a backslash, and
5775 return the resulting string.
5776
5777 *Very important:* Using backslash escapes in Guile source code (as
5778in Emacs Lisp or C) can be tricky, because the backslash character has
5779special meaning for the Guile reader. For example, if Guile encounters
5780the character sequence `\n' in the middle of a string while processing
5781Scheme code, it replaces those characters with a newline character.
5782Similarly, the character sequence `\t' is replaced by a horizontal tab.
5783Several of these "escape sequences" are processed by the Guile reader
5784before your code is executed. Unrecognized escape sequences are
5785ignored: if the characters `\*' appear in a string, they will be
5786translated to the single character `*'.
5787
5788 This translation is obviously undesirable for regular expressions,
5789since we want to be able to include backslashes in a string in order to
5790escape regexp metacharacters. Therefore, to make sure that a backslash
5791is preserved in a string in your Guile program, you must use *two*
5792consecutive backslashes:
5793
5794 (define Info-menu-entry-pattern (make-regexp "^\\* [^:]*"))
5795
5796 The string in this example is preprocessed by the Guile reader before
5797any code is executed. The resulting argument to `make-regexp' is the
5798string `^\* [^:]*', which is what we really want.
5799
5800 This also means that in order to write a regular expression that
5801matches a single backslash character, the regular expression string in
5802the source code must include *four* backslashes. Each consecutive pair
5803of backslashes gets translated by the Guile reader to a single
5804backslash, and the resulting double-backslash is interpreted by the
5805regexp engine as matching a single backslash character. Hence:
5806
5807 (define tex-variable-pattern (make-regexp "\\\\let\\\\=[A-Za-z]*"))
5808
5809 The reason for the unwieldiness of this syntax is historical. Both
5810regular expression pattern matchers and Unix string processing systems
5811have traditionally used backslashes with the special meanings described
5812above. The POSIX regular expression specification and ANSI C standard
5813both require these semantics. Attempting to abandon either convention
5814would cause other kinds of compatibility problems, possibly more severe
5815ones. Therefore, without extending the Scheme reader to support
5816strings with different quoting conventions (an ungainly and confusing
5817extension when implemented in other languages), we must adhere to this
5818cumbersome escape syntax.
5819
7ad3c1e7
GH
5820* Changes to the gh_ interface
5821
5822* Changes to the scm_ interface
5823
5824* Changes to system call interfaces:
94982a4e 5825
7ad3c1e7 5826** The value returned by `raise' is now unspecified. It throws an exception
e1a191a8
GH
5827if an error occurs.
5828
94982a4e 5829*** A new procedure `sigaction' can be used to install signal handlers
115b09a5
GH
5830
5831(sigaction signum [action] [flags])
5832
5833signum is the signal number, which can be specified using the value
5834of SIGINT etc.
5835
5836If action is omitted, sigaction returns a pair: the CAR is the current
5837signal hander, which will be either an integer with the value SIG_DFL
5838(default action) or SIG_IGN (ignore), or the Scheme procedure which
5839handles the signal, or #f if a non-Scheme procedure handles the
5840signal. The CDR contains the current sigaction flags for the handler.
5841
5842If action is provided, it is installed as the new handler for signum.
5843action can be a Scheme procedure taking one argument, or the value of
5844SIG_DFL (default action) or SIG_IGN (ignore), or #f to restore
5845whatever signal handler was installed before sigaction was first used.
5846Flags can optionally be specified for the new handler (SA_RESTART is
5847always used if the system provides it, so need not be specified.) The
5848return value is a pair with information about the old handler as
5849described above.
5850
5851This interface does not provide access to the "signal blocking"
5852facility. Maybe this is not needed, since the thread support may
5853provide solutions to the problem of consistent access to data
5854structures.
e1a191a8 5855
94982a4e 5856*** A new procedure `flush-all-ports' is equivalent to running
89ea5b7c
GH
5857`force-output' on every port open for output.
5858
94982a4e
JB
5859** Guile now provides information on how it was built, via the new
5860global variable, %guile-build-info. This variable records the values
5861of the standard GNU makefile directory variables as an assocation
5862list, mapping variable names (symbols) onto directory paths (strings).
5863For example, to find out where the Guile link libraries were
5864installed, you can say:
5865
5866guile -c "(display (assq-ref %guile-build-info 'libdir)) (newline)"
5867
5868
5869* Changes to the scm_ interface
5870
5871** The new function scm_handle_by_message_noexit is just like the
5872existing scm_handle_by_message function, except that it doesn't call
5873exit to terminate the process. Instead, it prints a message and just
5874returns #f. This might be a more appropriate catch-all handler for
5875new dynamic roots and threads.
5876
cf78e9e8 5877\f
c484bf7f 5878Changes in Guile 1.1 (released Friday, May 16 1997):
f3b1485f
JB
5879
5880* Changes to the distribution.
5881
5882The Guile 1.0 distribution has been split up into several smaller
5883pieces:
5884guile-core --- the Guile interpreter itself.
5885guile-tcltk --- the interface between the Guile interpreter and
5886 Tcl/Tk; Tcl is an interpreter for a stringy language, and Tk
5887 is a toolkit for building graphical user interfaces.
5888guile-rgx-ctax --- the interface between Guile and the Rx regular
5889 expression matcher, and the translator for the Ctax
5890 programming language. These are packaged together because the
5891 Ctax translator uses Rx to parse Ctax source code.
5892
095936d2
JB
5893This NEWS file describes the changes made to guile-core since the 1.0
5894release.
5895
48d224d7
JB
5896We no longer distribute the documentation, since it was either out of
5897date, or incomplete. As soon as we have current documentation, we
5898will distribute it.
5899
0fcab5ed
JB
5900
5901
f3b1485f
JB
5902* Changes to the stand-alone interpreter
5903
48d224d7
JB
5904** guile now accepts command-line arguments compatible with SCSH, Olin
5905Shivers' Scheme Shell.
5906
5907In general, arguments are evaluated from left to right, but there are
5908exceptions. The following switches stop argument processing, and
5909stash all remaining command-line arguments as the value returned by
5910the (command-line) function.
5911 -s SCRIPT load Scheme source code from FILE, and exit
5912 -c EXPR evalute Scheme expression EXPR, and exit
5913 -- stop scanning arguments; run interactively
5914
5915The switches below are processed as they are encountered.
5916 -l FILE load Scheme source code from FILE
5917 -e FUNCTION after reading script, apply FUNCTION to
5918 command line arguments
5919 -ds do -s script at this point
5920 --emacs enable Emacs protocol (experimental)
5921 -h, --help display this help and exit
5922 -v, --version display version information and exit
5923 \ read arguments from following script lines
5924
5925So, for example, here is a Guile script named `ekko' (thanks, Olin)
5926which re-implements the traditional "echo" command:
5927
5928#!/usr/local/bin/guile -s
5929!#
5930(define (main args)
5931 (map (lambda (arg) (display arg) (display " "))
5932 (cdr args))
5933 (newline))
5934
5935(main (command-line))
5936
5937Suppose we invoke this script as follows:
5938
5939 ekko a speckled gecko
5940
5941Through the magic of Unix script processing (triggered by the `#!'
5942token at the top of the file), /usr/local/bin/guile receives the
5943following list of command-line arguments:
5944
5945 ("-s" "./ekko" "a" "speckled" "gecko")
5946
5947Unix inserts the name of the script after the argument specified on
5948the first line of the file (in this case, "-s"), and then follows that
5949with the arguments given to the script. Guile loads the script, which
5950defines the `main' function, and then applies it to the list of
5951remaining command-line arguments, ("a" "speckled" "gecko").
5952
095936d2
JB
5953In Unix, the first line of a script file must take the following form:
5954
5955#!INTERPRETER ARGUMENT
5956
5957where INTERPRETER is the absolute filename of the interpreter
5958executable, and ARGUMENT is a single command-line argument to pass to
5959the interpreter.
5960
5961You may only pass one argument to the interpreter, and its length is
5962limited. These restrictions can be annoying to work around, so Guile
5963provides a general mechanism (borrowed from, and compatible with,
5964SCSH) for circumventing them.
5965
5966If the ARGUMENT in a Guile script is a single backslash character,
5967`\', Guile will open the script file, parse arguments from its second
5968and subsequent lines, and replace the `\' with them. So, for example,
5969here is another implementation of the `ekko' script:
5970
5971#!/usr/local/bin/guile \
5972-e main -s
5973!#
5974(define (main args)
5975 (for-each (lambda (arg) (display arg) (display " "))
5976 (cdr args))
5977 (newline))
5978
5979If the user invokes this script as follows:
5980
5981 ekko a speckled gecko
5982
5983Unix expands this into
5984
5985 /usr/local/bin/guile \ ekko a speckled gecko
5986
5987When Guile sees the `\' argument, it replaces it with the arguments
5988read from the second line of the script, producing:
5989
5990 /usr/local/bin/guile -e main -s ekko a speckled gecko
5991
5992This tells Guile to load the `ekko' script, and apply the function
5993`main' to the argument list ("a" "speckled" "gecko").
5994
5995Here is how Guile parses the command-line arguments:
5996- Each space character terminates an argument. This means that two
5997 spaces in a row introduce an empty-string argument.
5998- The tab character is not permitted (unless you quote it with the
5999 backslash character, as described below), to avoid confusion.
6000- The newline character terminates the sequence of arguments, and will
6001 also terminate a final non-empty argument. (However, a newline
6002 following a space will not introduce a final empty-string argument;
6003 it only terminates the argument list.)
6004- The backslash character is the escape character. It escapes
6005 backslash, space, tab, and newline. The ANSI C escape sequences
6006 like \n and \t are also supported. These produce argument
6007 constituents; the two-character combination \n doesn't act like a
6008 terminating newline. The escape sequence \NNN for exactly three
6009 octal digits reads as the character whose ASCII code is NNN. As
6010 above, characters produced this way are argument constituents.
6011 Backslash followed by other characters is not allowed.
6012
48d224d7
JB
6013* Changes to the procedure for linking libguile with your programs
6014
6015** Guile now builds and installs a shared guile library, if your
6016system support shared libraries. (It still builds a static library on
6017all systems.) Guile automatically detects whether your system
6018supports shared libraries. To prevent Guile from buildisg shared
6019libraries, pass the `--disable-shared' flag to the configure script.
6020
6021Guile takes longer to compile when it builds shared libraries, because
6022it must compile every file twice --- once to produce position-
6023independent object code, and once to produce normal object code.
6024
6025** The libthreads library has been merged into libguile.
6026
6027To link a program against Guile, you now need only link against
6028-lguile and -lqt; -lthreads is no longer needed. If you are using
6029autoconf to generate configuration scripts for your application, the
6030following lines should suffice to add the appropriate libraries to
6031your link command:
6032
6033### Find quickthreads and libguile.
6034AC_CHECK_LIB(qt, main)
6035AC_CHECK_LIB(guile, scm_shell)
f3b1485f
JB
6036
6037* Changes to Scheme functions
6038
095936d2
JB
6039** Guile Scheme's special syntax for keyword objects is now optional,
6040and disabled by default.
6041
6042The syntax variation from R4RS made it difficult to port some
6043interesting packages to Guile. The routines which accepted keyword
6044arguments (mostly in the module system) have been modified to also
6045accept symbols whose names begin with `:'.
6046
6047To change the keyword syntax, you must first import the (ice-9 debug)
6048module:
6049 (use-modules (ice-9 debug))
6050
6051Then you can enable the keyword syntax as follows:
6052 (read-set! keywords 'prefix)
6053
6054To disable keyword syntax, do this:
6055 (read-set! keywords #f)
6056
6057** Many more primitive functions accept shared substrings as
6058arguments. In the past, these functions required normal, mutable
6059strings as arguments, although they never made use of this
6060restriction.
6061
6062** The uniform array functions now operate on byte vectors. These
6063functions are `array-fill!', `serial-array-copy!', `array-copy!',
6064`serial-array-map', `array-map', `array-for-each', and
6065`array-index-map!'.
6066
6067** The new functions `trace' and `untrace' implement simple debugging
6068support for Scheme functions.
6069
6070The `trace' function accepts any number of procedures as arguments,
6071and tells the Guile interpreter to display each procedure's name and
6072arguments each time the procedure is invoked. When invoked with no
6073arguments, `trace' returns the list of procedures currently being
6074traced.
6075
6076The `untrace' function accepts any number of procedures as arguments,
6077and tells the Guile interpreter not to trace them any more. When
6078invoked with no arguments, `untrace' untraces all curretly traced
6079procedures.
6080
6081The tracing in Guile has an advantage over most other systems: we
6082don't create new procedure objects, but mark the procedure objects
6083themselves. This means that anonymous and internal procedures can be
6084traced.
6085
6086** The function `assert-repl-prompt' has been renamed to
6087`set-repl-prompt!'. It takes one argument, PROMPT.
6088- If PROMPT is #f, the Guile read-eval-print loop will not prompt.
6089- If PROMPT is a string, we use it as a prompt.
6090- If PROMPT is a procedure accepting no arguments, we call it, and
6091 display the result as a prompt.
6092- Otherwise, we display "> ".
6093
6094** The new function `eval-string' reads Scheme expressions from a
6095string and evaluates them, returning the value of the last expression
6096in the string. If the string contains no expressions, it returns an
6097unspecified value.
6098
6099** The new function `thunk?' returns true iff its argument is a
6100procedure of zero arguments.
6101
6102** `defined?' is now a builtin function, instead of syntax. This
6103means that its argument should be quoted. It returns #t iff its
6104argument is bound in the current module.
6105
6106** The new syntax `use-modules' allows you to add new modules to your
6107environment without re-typing a complete `define-module' form. It
6108accepts any number of module names as arguments, and imports their
6109public bindings into the current module.
6110
6111** The new function (module-defined? NAME MODULE) returns true iff
6112NAME, a symbol, is defined in MODULE, a module object.
6113
6114** The new function `builtin-bindings' creates and returns a hash
6115table containing copies of all the root module's bindings.
6116
6117** The new function `builtin-weak-bindings' does the same as
6118`builtin-bindings', but creates a doubly-weak hash table.
6119
6120** The `equal?' function now considers variable objects to be
6121equivalent if they have the same name and the same value.
6122
6123** The new function `command-line' returns the command-line arguments
6124given to Guile, as a list of strings.
6125
6126When using guile as a script interpreter, `command-line' returns the
6127script's arguments; those processed by the interpreter (like `-s' or
6128`-c') are omitted. (In other words, you get the normal, expected
6129behavior.) Any application that uses scm_shell to process its
6130command-line arguments gets this behavior as well.
6131
6132** The new function `load-user-init' looks for a file called `.guile'
6133in the user's home directory, and loads it if it exists. This is
6134mostly for use by the code generated by scm_compile_shell_switches,
6135but we thought it might also be useful in other circumstances.
6136
6137** The new function `log10' returns the base-10 logarithm of its
6138argument.
6139
6140** Changes to I/O functions
6141
6c0201ad 6142*** The functions `read', `primitive-load', `read-and-eval!', and
095936d2
JB
6143`primitive-load-path' no longer take optional arguments controlling
6144case insensitivity and a `#' parser.
6145
6146Case sensitivity is now controlled by a read option called
6147`case-insensitive'. The user can add new `#' syntaxes with the
6148`read-hash-extend' function (see below).
6149
6150*** The new function `read-hash-extend' allows the user to change the
6151syntax of Guile Scheme in a somewhat controlled way.
6152
6153(read-hash-extend CHAR PROC)
6154 When parsing S-expressions, if we read a `#' character followed by
6155 the character CHAR, use PROC to parse an object from the stream.
6156 If PROC is #f, remove any parsing procedure registered for CHAR.
6157
6158 The reader applies PROC to two arguments: CHAR and an input port.
6159
6c0201ad 6160*** The new functions read-delimited and read-delimited! provide a
095936d2
JB
6161general mechanism for doing delimited input on streams.
6162
6163(read-delimited DELIMS [PORT HANDLE-DELIM])
6164 Read until we encounter one of the characters in DELIMS (a string),
6165 or end-of-file. PORT is the input port to read from; it defaults to
6166 the current input port. The HANDLE-DELIM parameter determines how
6167 the terminating character is handled; it should be one of the
6168 following symbols:
6169
6170 'trim omit delimiter from result
6171 'peek leave delimiter character in input stream
6172 'concat append delimiter character to returned value
6173 'split return a pair: (RESULT . TERMINATOR)
6174
6175 HANDLE-DELIM defaults to 'peek.
6176
6177(read-delimited! DELIMS BUF [PORT HANDLE-DELIM START END])
6178 A side-effecting variant of `read-delimited'.
6179
6180 The data is written into the string BUF at the indices in the
6181 half-open interval [START, END); the default interval is the whole
6182 string: START = 0 and END = (string-length BUF). The values of
6183 START and END must specify a well-defined interval in BUF, i.e.
6184 0 <= START <= END <= (string-length BUF).
6185
6186 It returns NBYTES, the number of bytes read. If the buffer filled
6187 up without a delimiter character being found, it returns #f. If the
6188 port is at EOF when the read starts, it returns the EOF object.
6189
6190 If an integer is returned (i.e., the read is successfully terminated
6191 by reading a delimiter character), then the HANDLE-DELIM parameter
6192 determines how to handle the terminating character. It is described
6193 above, and defaults to 'peek.
6194
6195(The descriptions of these functions were borrowed from the SCSH
6196manual, by Olin Shivers and Brian Carlstrom.)
6197
6198*** The `%read-delimited!' function is the primitive used to implement
6199`read-delimited' and `read-delimited!'.
6200
6201(%read-delimited! DELIMS BUF GOBBLE? [PORT START END])
6202
6203This returns a pair of values: (TERMINATOR . NUM-READ).
6204- TERMINATOR describes why the read was terminated. If it is a
6205 character or the eof object, then that is the value that terminated
6206 the read. If it is #f, the function filled the buffer without finding
6207 a delimiting character.
6208- NUM-READ is the number of characters read into BUF.
6209
6210If the read is successfully terminated by reading a delimiter
6211character, then the gobble? parameter determines what to do with the
6212terminating character. If true, the character is removed from the
6213input stream; if false, the character is left in the input stream
6214where a subsequent read operation will retrieve it. In either case,
6215the character is also the first value returned by the procedure call.
6216
6217(The descriptions of this function was borrowed from the SCSH manual,
6218by Olin Shivers and Brian Carlstrom.)
6219
6220*** The `read-line' and `read-line!' functions have changed; they now
6221trim the terminator by default; previously they appended it to the
6222returned string. For the old behavior, use (read-line PORT 'concat).
6223
6224*** The functions `uniform-array-read!' and `uniform-array-write!' now
6225take new optional START and END arguments, specifying the region of
6226the array to read and write.
6227
f348c807
JB
6228*** The `ungetc-char-ready?' function has been removed. We feel it's
6229inappropriate for an interface to expose implementation details this
6230way.
095936d2
JB
6231
6232** Changes to the Unix library and system call interface
6233
6234*** The new fcntl function provides access to the Unix `fcntl' system
6235call.
6236
6237(fcntl PORT COMMAND VALUE)
6238 Apply COMMAND to PORT's file descriptor, with VALUE as an argument.
6239 Values for COMMAND are:
6240
6241 F_DUPFD duplicate a file descriptor
6242 F_GETFD read the descriptor's close-on-exec flag
6243 F_SETFD set the descriptor's close-on-exec flag to VALUE
6244 F_GETFL read the descriptor's flags, as set on open
6245 F_SETFL set the descriptor's flags, as set on open to VALUE
6246 F_GETOWN return the process ID of a socket's owner, for SIGIO
6247 F_SETOWN set the process that owns a socket to VALUE, for SIGIO
6248 FD_CLOEXEC not sure what this is
6249
6250For details, see the documentation for the fcntl system call.
6251
6252*** The arguments to `select' have changed, for compatibility with
6253SCSH. The TIMEOUT parameter may now be non-integral, yielding the
6254expected behavior. The MILLISECONDS parameter has been changed to
6255MICROSECONDS, to more closely resemble the underlying system call.
6256The RVEC, WVEC, and EVEC arguments can now be vectors; the type of the
6257corresponding return set will be the same.
6258
6259*** The arguments to the `mknod' system call have changed. They are
6260now:
6261
6262(mknod PATH TYPE PERMS DEV)
6263 Create a new file (`node') in the file system. PATH is the name of
6264 the file to create. TYPE is the kind of file to create; it should
6265 be 'fifo, 'block-special, or 'char-special. PERMS specifies the
6266 permission bits to give the newly created file. If TYPE is
6267 'block-special or 'char-special, DEV specifies which device the
6268 special file refers to; its interpretation depends on the kind of
6269 special file being created.
6270
6271*** The `fork' function has been renamed to `primitive-fork', to avoid
6272clashing with various SCSH forks.
6273
6274*** The `recv' and `recvfrom' functions have been renamed to `recv!'
6275and `recvfrom!'. They no longer accept a size for a second argument;
6276you must pass a string to hold the received value. They no longer
6277return the buffer. Instead, `recv' returns the length of the message
6278received, and `recvfrom' returns a pair containing the packet's length
6c0201ad 6279and originating address.
095936d2
JB
6280
6281*** The file descriptor datatype has been removed, as have the
6282`read-fd', `write-fd', `close', `lseek', and `dup' functions.
6283We plan to replace these functions with a SCSH-compatible interface.
6284
6285*** The `create' function has been removed; it's just a special case
6286of `open'.
6287
6288*** There are new functions to break down process termination status
6289values. In the descriptions below, STATUS is a value returned by
6290`waitpid'.
6291
6292(status:exit-val STATUS)
6293 If the child process exited normally, this function returns the exit
6294 code for the child process (i.e., the value passed to exit, or
6295 returned from main). If the child process did not exit normally,
6296 this function returns #f.
6297
6298(status:stop-sig STATUS)
6299 If the child process was suspended by a signal, this function
6300 returns the signal that suspended the child. Otherwise, it returns
6301 #f.
6302
6303(status:term-sig STATUS)
6304 If the child process terminated abnormally, this function returns
6305 the signal that terminated the child. Otherwise, this function
6306 returns false.
6307
6308POSIX promises that exactly one of these functions will return true on
6309a valid STATUS value.
6310
6311These functions are compatible with SCSH.
6312
6313*** There are new accessors and setters for the broken-out time vectors
48d224d7
JB
6314returned by `localtime', `gmtime', and that ilk. They are:
6315
6316 Component Accessor Setter
6317 ========================= ============ ============
6318 seconds tm:sec set-tm:sec
6319 minutes tm:min set-tm:min
6320 hours tm:hour set-tm:hour
6321 day of the month tm:mday set-tm:mday
6322 month tm:mon set-tm:mon
6323 year tm:year set-tm:year
6324 day of the week tm:wday set-tm:wday
6325 day in the year tm:yday set-tm:yday
6326 daylight saving time tm:isdst set-tm:isdst
6327 GMT offset, seconds tm:gmtoff set-tm:gmtoff
6328 name of time zone tm:zone set-tm:zone
6329
095936d2
JB
6330*** There are new accessors for the vectors returned by `uname',
6331describing the host system:
48d224d7
JB
6332
6333 Component Accessor
6334 ============================================== ================
6335 name of the operating system implementation utsname:sysname
6336 network name of this machine utsname:nodename
6337 release level of the operating system utsname:release
6338 version level of the operating system utsname:version
6339 machine hardware platform utsname:machine
6340
095936d2
JB
6341*** There are new accessors for the vectors returned by `getpw',
6342`getpwnam', `getpwuid', and `getpwent', describing entries from the
6343system's user database:
6344
6345 Component Accessor
6346 ====================== =================
6347 user name passwd:name
6348 user password passwd:passwd
6349 user id passwd:uid
6350 group id passwd:gid
6351 real name passwd:gecos
6352 home directory passwd:dir
6353 shell program passwd:shell
6354
6355*** There are new accessors for the vectors returned by `getgr',
6356`getgrnam', `getgrgid', and `getgrent', describing entries from the
6357system's group database:
6358
6359 Component Accessor
6360 ======================= ============
6361 group name group:name
6362 group password group:passwd
6363 group id group:gid
6364 group members group:mem
6365
6366*** There are new accessors for the vectors returned by `gethost',
6367`gethostbyaddr', `gethostbyname', and `gethostent', describing
6368internet hosts:
6369
6370 Component Accessor
6371 ========================= ===============
6372 official name of host hostent:name
6373 alias list hostent:aliases
6374 host address type hostent:addrtype
6375 length of address hostent:length
6376 list of addresses hostent:addr-list
6377
6378*** There are new accessors for the vectors returned by `getnet',
6379`getnetbyaddr', `getnetbyname', and `getnetent', describing internet
6380networks:
6381
6382 Component Accessor
6383 ========================= ===============
6384 official name of net netent:name
6385 alias list netent:aliases
6386 net number type netent:addrtype
6387 net number netent:net
6388
6389*** There are new accessors for the vectors returned by `getproto',
6390`getprotobyname', `getprotobynumber', and `getprotoent', describing
6391internet protocols:
6392
6393 Component Accessor
6394 ========================= ===============
6395 official protocol name protoent:name
6396 alias list protoent:aliases
6397 protocol number protoent:proto
6398
6399*** There are new accessors for the vectors returned by `getserv',
6400`getservbyname', `getservbyport', and `getservent', describing
6401internet protocols:
6402
6403 Component Accessor
6404 ========================= ===============
6c0201ad 6405 official service name servent:name
095936d2 6406 alias list servent:aliases
6c0201ad
TTN
6407 port number servent:port
6408 protocol to use servent:proto
095936d2
JB
6409
6410*** There are new accessors for the sockaddr structures returned by
6411`accept', `getsockname', `getpeername', `recvfrom!':
6412
6413 Component Accessor
6414 ======================================== ===============
6c0201ad 6415 address format (`family') sockaddr:fam
095936d2
JB
6416 path, for file domain addresses sockaddr:path
6417 address, for internet domain addresses sockaddr:addr
6418 TCP or UDP port, for internet sockaddr:port
6419
6420*** The `getpwent', `getgrent', `gethostent', `getnetent',
6421`getprotoent', and `getservent' functions now return #f at the end of
6422the user database. (They used to throw an exception.)
6423
6424Note that calling MUMBLEent function is equivalent to calling the
6425corresponding MUMBLE function with no arguments.
6426
6427*** The `setpwent', `setgrent', `sethostent', `setnetent',
6428`setprotoent', and `setservent' routines now take no arguments.
6429
6430*** The `gethost', `getproto', `getnet', and `getserv' functions now
6431provide more useful information when they throw an exception.
6432
6433*** The `lnaof' function has been renamed to `inet-lnaof'.
6434
6435*** Guile now claims to have the `current-time' feature.
6436
6437*** The `mktime' function now takes an optional second argument ZONE,
6438giving the time zone to use for the conversion. ZONE should be a
6439string, in the same format as expected for the "TZ" environment variable.
6440
6441*** The `strptime' function now returns a pair (TIME . COUNT), where
6442TIME is the parsed time as a vector, and COUNT is the number of
6443characters from the string left unparsed. This function used to
6444return the remaining characters as a string.
6445
6446*** The `gettimeofday' function has replaced the old `time+ticks' function.
6447The return value is now (SECONDS . MICROSECONDS); the fractional
6448component is no longer expressed in "ticks".
6449
6450*** The `ticks/sec' constant has been removed, in light of the above change.
6685dc83 6451
ea00ecba
MG
6452* Changes to the gh_ interface
6453
6454** gh_eval_str() now returns an SCM object which is the result of the
6455evaluation
6456
aaef0d2a
MG
6457** gh_scm2str() now copies the Scheme data to a caller-provided C
6458array
6459
6460** gh_scm2newstr() now makes a C array, copies the Scheme data to it,
6461and returns the array
6462
6463** gh_scm2str0() is gone: there is no need to distinguish
6464null-terminated from non-null-terminated, since gh_scm2newstr() allows
6465the user to interpret the data both ways.
6466
f3b1485f
JB
6467* Changes to the scm_ interface
6468
095936d2
JB
6469** The new function scm_symbol_value0 provides an easy way to get a
6470symbol's value from C code:
6471
6472SCM scm_symbol_value0 (char *NAME)
6473 Return the value of the symbol named by the null-terminated string
6474 NAME in the current module. If the symbol named NAME is unbound in
6475 the current module, return SCM_UNDEFINED.
6476
6477** The new function scm_sysintern0 creates new top-level variables,
6478without assigning them a value.
6479
6480SCM scm_sysintern0 (char *NAME)
6481 Create a new Scheme top-level variable named NAME. NAME is a
6482 null-terminated string. Return the variable's value cell.
6483
6484** The function scm_internal_catch is the guts of catch. It handles
6485all the mechanics of setting up a catch target, invoking the catch
6486body, and perhaps invoking the handler if the body does a throw.
6487
6488The function is designed to be usable from C code, but is general
6489enough to implement all the semantics Guile Scheme expects from throw.
6490
6491TAG is the catch tag. Typically, this is a symbol, but this function
6492doesn't actually care about that.
6493
6494BODY is a pointer to a C function which runs the body of the catch;
6495this is the code you can throw from. We call it like this:
6496 BODY (BODY_DATA, JMPBUF)
6497where:
6498 BODY_DATA is just the BODY_DATA argument we received; we pass it
6499 through to BODY as its first argument. The caller can make
6500 BODY_DATA point to anything useful that BODY might need.
6501 JMPBUF is the Scheme jmpbuf object corresponding to this catch,
6502 which we have just created and initialized.
6503
6504HANDLER is a pointer to a C function to deal with a throw to TAG,
6505should one occur. We call it like this:
6506 HANDLER (HANDLER_DATA, THROWN_TAG, THROW_ARGS)
6507where
6508 HANDLER_DATA is the HANDLER_DATA argument we recevied; it's the
6509 same idea as BODY_DATA above.
6510 THROWN_TAG is the tag that the user threw to; usually this is
6511 TAG, but it could be something else if TAG was #t (i.e., a
6512 catch-all), or the user threw to a jmpbuf.
6513 THROW_ARGS is the list of arguments the user passed to the THROW
6514 function.
6515
6516BODY_DATA is just a pointer we pass through to BODY. HANDLER_DATA
6517is just a pointer we pass through to HANDLER. We don't actually
6518use either of those pointers otherwise ourselves. The idea is
6519that, if our caller wants to communicate something to BODY or
6520HANDLER, it can pass a pointer to it as MUMBLE_DATA, which BODY and
6521HANDLER can then use. Think of it as a way to make BODY and
6522HANDLER closures, not just functions; MUMBLE_DATA points to the
6523enclosed variables.
6524
6525Of course, it's up to the caller to make sure that any data a
6526MUMBLE_DATA needs is protected from GC. A common way to do this is
6527to make MUMBLE_DATA a pointer to data stored in an automatic
6528structure variable; since the collector must scan the stack for
6529references anyway, this assures that any references in MUMBLE_DATA
6530will be found.
6531
6532** The new function scm_internal_lazy_catch is exactly like
6533scm_internal_catch, except:
6534
6535- It does not unwind the stack (this is the major difference).
6536- If handler returns, its value is returned from the throw.
6537- BODY always receives #f as its JMPBUF argument (since there's no
6538 jmpbuf associated with a lazy catch, because we don't unwind the
6539 stack.)
6540
6541** scm_body_thunk is a new body function you can pass to
6542scm_internal_catch if you want the body to be like Scheme's `catch'
6543--- a thunk, or a function of one argument if the tag is #f.
6544
6545BODY_DATA is a pointer to a scm_body_thunk_data structure, which
6546contains the Scheme procedure to invoke as the body, and the tag
6547we're catching. If the tag is #f, then we pass JMPBUF (created by
6548scm_internal_catch) to the body procedure; otherwise, the body gets
6549no arguments.
6550
6551** scm_handle_by_proc is a new handler function you can pass to
6552scm_internal_catch if you want the handler to act like Scheme's catch
6553--- call a procedure with the tag and the throw arguments.
6554
6555If the user does a throw to this catch, this function runs a handler
6556procedure written in Scheme. HANDLER_DATA is a pointer to an SCM
6557variable holding the Scheme procedure object to invoke. It ought to
6558be a pointer to an automatic variable (i.e., one living on the stack),
6559or the procedure object should be otherwise protected from GC.
6560
6561** scm_handle_by_message is a new handler function to use with
6562`scm_internal_catch' if you want Guile to print a message and die.
6563It's useful for dealing with throws to uncaught keys at the top level.
6564
6565HANDLER_DATA, if non-zero, is assumed to be a char * pointing to a
6566message header to print; if zero, we use "guile" instead. That
6567text is followed by a colon, then the message described by ARGS.
6568
6569** The return type of scm_boot_guile is now void; the function does
6570not return a value, and indeed, never returns at all.
6571
f3b1485f
JB
6572** The new function scm_shell makes it easy for user applications to
6573process command-line arguments in a way that is compatible with the
6574stand-alone guile interpreter (which is in turn compatible with SCSH,
6575the Scheme shell).
6576
6577To use the scm_shell function, first initialize any guile modules
6578linked into your application, and then call scm_shell with the values
7ed46dc8 6579of ARGC and ARGV your `main' function received. scm_shell will add
f3b1485f
JB
6580any SCSH-style meta-arguments from the top of the script file to the
6581argument vector, and then process the command-line arguments. This
6582generally means loading a script file or starting up an interactive
6583command interpreter. For details, see "Changes to the stand-alone
6584interpreter" above.
6585
095936d2 6586** The new functions scm_get_meta_args and scm_count_argv help you
6c0201ad 6587implement the SCSH-style meta-argument, `\'.
095936d2
JB
6588
6589char **scm_get_meta_args (int ARGC, char **ARGV)
6590 If the second element of ARGV is a string consisting of a single
6591 backslash character (i.e. "\\" in Scheme notation), open the file
6592 named by the following argument, parse arguments from it, and return
6593 the spliced command line. The returned array is terminated by a
6594 null pointer.
6c0201ad 6595
095936d2
JB
6596 For details of argument parsing, see above, under "guile now accepts
6597 command-line arguments compatible with SCSH..."
6598
6599int scm_count_argv (char **ARGV)
6600 Count the arguments in ARGV, assuming it is terminated by a null
6601 pointer.
6602
6603For an example of how these functions might be used, see the source
6604code for the function scm_shell in libguile/script.c.
6605
6606You will usually want to use scm_shell instead of calling this
6607function yourself.
6608
6609** The new function scm_compile_shell_switches turns an array of
6610command-line arguments into Scheme code to carry out the actions they
6611describe. Given ARGC and ARGV, it returns a Scheme expression to
6612evaluate, and calls scm_set_program_arguments to make any remaining
6613command-line arguments available to the Scheme code. For example,
6614given the following arguments:
6615
6616 -e main -s ekko a speckled gecko
6617
6618scm_set_program_arguments will return the following expression:
6619
6620 (begin (load "ekko") (main (command-line)) (quit))
6621
6622You will usually want to use scm_shell instead of calling this
6623function yourself.
6624
6625** The function scm_shell_usage prints a usage message appropriate for
6626an interpreter that uses scm_compile_shell_switches to handle its
6627command-line arguments.
6628
6629void scm_shell_usage (int FATAL, char *MESSAGE)
6630 Print a usage message to the standard error output. If MESSAGE is
6631 non-zero, write it before the usage message, followed by a newline.
6632 If FATAL is non-zero, exit the process, using FATAL as the
6633 termination status. (If you want to be compatible with Guile,
6634 always use 1 as the exit status when terminating due to command-line
6635 usage problems.)
6636
6637You will usually want to use scm_shell instead of calling this
6638function yourself.
48d224d7
JB
6639
6640** scm_eval_0str now returns SCM_UNSPECIFIED if the string contains no
095936d2
JB
6641expressions. It used to return SCM_EOL. Earth-shattering.
6642
6643** The macros for declaring scheme objects in C code have been
6644rearranged slightly. They are now:
6645
6646SCM_SYMBOL (C_NAME, SCHEME_NAME)
6647 Declare a static SCM variable named C_NAME, and initialize it to
6648 point to the Scheme symbol whose name is SCHEME_NAME. C_NAME should
6649 be a C identifier, and SCHEME_NAME should be a C string.
6650
6651SCM_GLOBAL_SYMBOL (C_NAME, SCHEME_NAME)
6652 Just like SCM_SYMBOL, but make C_NAME globally visible.
6653
6654SCM_VCELL (C_NAME, SCHEME_NAME)
6655 Create a global variable at the Scheme level named SCHEME_NAME.
6656 Declare a static SCM variable named C_NAME, and initialize it to
6657 point to the Scheme variable's value cell.
6658
6659SCM_GLOBAL_VCELL (C_NAME, SCHEME_NAME)
6660 Just like SCM_VCELL, but make C_NAME globally visible.
6661
6662The `guile-snarf' script writes initialization code for these macros
6663to its standard output, given C source code as input.
6664
6665The SCM_GLOBAL macro is gone.
6666
6667** The scm_read_line and scm_read_line_x functions have been replaced
6668by Scheme code based on the %read-delimited! procedure (known to C
6669code as scm_read_delimited_x). See its description above for more
6670information.
48d224d7 6671
095936d2
JB
6672** The function scm_sys_open has been renamed to scm_open. It now
6673returns a port instead of an FD object.
ea00ecba 6674
095936d2
JB
6675* The dynamic linking support has changed. For more information, see
6676libguile/DYNAMIC-LINKING.
ea00ecba 6677
f7b47737
JB
6678\f
6679Guile 1.0b3
3065a62a 6680
f3b1485f
JB
6681User-visible changes from Thursday, September 5, 1996 until Guile 1.0
6682(Sun 5 Jan 1997):
3065a62a 6683
4b521edb 6684* Changes to the 'guile' program:
3065a62a 6685
4b521edb
JB
6686** Guile now loads some new files when it starts up. Guile first
6687searches the load path for init.scm, and loads it if found. Then, if
6688Guile is not being used to execute a script, and the user's home
6689directory contains a file named `.guile', Guile loads that.
c6486f8a 6690
4b521edb 6691** You can now use Guile as a shell script interpreter.
3065a62a
JB
6692
6693To paraphrase the SCSH manual:
6694
6695 When Unix tries to execute an executable file whose first two
6696 characters are the `#!', it treats the file not as machine code to
6697 be directly executed by the native processor, but as source code
6698 to be executed by some interpreter. The interpreter to use is
6699 specified immediately after the #! sequence on the first line of
6700 the source file. The kernel reads in the name of the interpreter,
6701 and executes that instead. It passes the interpreter the source
6702 filename as its first argument, with the original arguments
6703 following. Consult the Unix man page for the `exec' system call
6704 for more information.
6705
1a1945be
JB
6706Now you can use Guile as an interpreter, using a mechanism which is a
6707compatible subset of that provided by SCSH.
6708
3065a62a
JB
6709Guile now recognizes a '-s' command line switch, whose argument is the
6710name of a file of Scheme code to load. It also treats the two
6711characters `#!' as the start of a comment, terminated by `!#'. Thus,
6712to make a file of Scheme code directly executable by Unix, insert the
6713following two lines at the top of the file:
6714
6715#!/usr/local/bin/guile -s
6716!#
6717
6718Guile treats the argument of the `-s' command-line switch as the name
6719of a file of Scheme code to load, and treats the sequence `#!' as the
6720start of a block comment, terminated by `!#'.
6721
6722For example, here's a version of 'echo' written in Scheme:
6723
6724#!/usr/local/bin/guile -s
6725!#
6726(let loop ((args (cdr (program-arguments))))
6727 (if (pair? args)
6728 (begin
6729 (display (car args))
6730 (if (pair? (cdr args))
6731 (display " "))
6732 (loop (cdr args)))))
6733(newline)
6734
6735Why does `#!' start a block comment terminated by `!#', instead of the
6736end of the line? That is the notation SCSH uses, and although we
6737don't yet support the other SCSH features that motivate that choice,
6738we would like to be backward-compatible with any existing Guile
3763761c
JB
6739scripts once we do. Furthermore, if the path to Guile on your system
6740is too long for your kernel, you can start the script with this
6741horrible hack:
6742
6743#!/bin/sh
6744exec /really/long/path/to/guile -s "$0" ${1+"$@"}
6745!#
3065a62a
JB
6746
6747Note that some very old Unix systems don't support the `#!' syntax.
6748
c6486f8a 6749
4b521edb 6750** You can now run Guile without installing it.
6685dc83
JB
6751
6752Previous versions of the interactive Guile interpreter (`guile')
6753couldn't start up unless Guile's Scheme library had been installed;
6754they used the value of the environment variable `SCHEME_LOAD_PATH'
6755later on in the startup process, but not to find the startup code
6756itself. Now Guile uses `SCHEME_LOAD_PATH' in all searches for Scheme
6757code.
6758
6759To run Guile without installing it, build it in the normal way, and
6760then set the environment variable `SCHEME_LOAD_PATH' to a
6761colon-separated list of directories, including the top-level directory
6762of the Guile sources. For example, if you unpacked Guile so that the
6763full filename of this NEWS file is /home/jimb/guile-1.0b3/NEWS, then
6764you might say
6765
6766 export SCHEME_LOAD_PATH=/home/jimb/my-scheme:/home/jimb/guile-1.0b3
6767
c6486f8a 6768
4b521edb
JB
6769** Guile's read-eval-print loop no longer prints #<unspecified>
6770results. If the user wants to see this, she can evaluate the
6771expression (assert-repl-print-unspecified #t), perhaps in her startup
48d224d7 6772file.
6685dc83 6773
4b521edb
JB
6774** Guile no longer shows backtraces by default when an error occurs;
6775however, it does display a message saying how to get one, and how to
6776request that they be displayed by default. After an error, evaluate
6777 (backtrace)
6778to see a backtrace, and
6779 (debug-enable 'backtrace)
6780to see them by default.
6685dc83 6781
6685dc83 6782
d9fb83d9 6783
4b521edb
JB
6784* Changes to Guile Scheme:
6785
6786** Guile now distinguishes between #f and the empty list.
6787
6788This is for compatibility with the IEEE standard, the (possibly)
6789upcoming Revised^5 Report on Scheme, and many extant Scheme
6790implementations.
6791
6792Guile used to have #f and '() denote the same object, to make Scheme's
6793type system more compatible with Emacs Lisp's. However, the change
6794caused too much trouble for Scheme programmers, and we found another
6795way to reconcile Emacs Lisp with Scheme that didn't require this.
6796
6797
6798** Guile's delq, delv, delete functions, and their destructive
c6486f8a
JB
6799counterparts, delq!, delv!, and delete!, now remove all matching
6800elements from the list, not just the first. This matches the behavior
6801of the corresponding Emacs Lisp functions, and (I believe) the Maclisp
6802functions which inspired them.
6803
6804I recognize that this change may break code in subtle ways, but it
6805seems best to make the change before the FSF's first Guile release,
6806rather than after.
6807
6808
4b521edb 6809** The compiled-library-path function has been deleted from libguile.
6685dc83 6810
4b521edb 6811** The facilities for loading Scheme source files have changed.
c6486f8a 6812
4b521edb 6813*** The variable %load-path now tells Guile which directories to search
6685dc83
JB
6814for Scheme code. Its value is a list of strings, each of which names
6815a directory.
6816
4b521edb
JB
6817*** The variable %load-extensions now tells Guile which extensions to
6818try appending to a filename when searching the load path. Its value
6819is a list of strings. Its default value is ("" ".scm").
6820
6821*** (%search-load-path FILENAME) searches the directories listed in the
6822value of the %load-path variable for a Scheme file named FILENAME,
6823with all the extensions listed in %load-extensions. If it finds a
6824match, then it returns its full filename. If FILENAME is absolute, it
6825returns it unchanged. Otherwise, it returns #f.
6685dc83 6826
4b521edb
JB
6827%search-load-path will not return matches that refer to directories.
6828
6829*** (primitive-load FILENAME :optional CASE-INSENSITIVE-P SHARP)
6830uses %seach-load-path to find a file named FILENAME, and loads it if
6831it finds it. If it can't read FILENAME for any reason, it throws an
6832error.
6685dc83
JB
6833
6834The arguments CASE-INSENSITIVE-P and SHARP are interpreted as by the
4b521edb
JB
6835`read' function.
6836
6837*** load uses the same searching semantics as primitive-load.
6838
6839*** The functions %try-load, try-load-with-path, %load, load-with-path,
6840basic-try-load-with-path, basic-load-with-path, try-load-module-with-
6841path, and load-module-with-path have been deleted. The functions
6842above should serve their purposes.
6843
6844*** If the value of the variable %load-hook is a procedure,
6845`primitive-load' applies its value to the name of the file being
6846loaded (without the load path directory name prepended). If its value
6847is #f, it is ignored. Otherwise, an error occurs.
6848
6849This is mostly useful for printing load notification messages.
6850
6851
6852** The function `eval!' is no longer accessible from the scheme level.
6853We can't allow operations which introduce glocs into the scheme level,
6854because Guile's type system can't handle these as data. Use `eval' or
6855`read-and-eval!' (see below) as replacement.
6856
6857** The new function read-and-eval! reads an expression from PORT,
6858evaluates it, and returns the result. This is more efficient than
6859simply calling `read' and `eval', since it is not necessary to make a
6860copy of the expression for the evaluator to munge.
6861
6862Its optional arguments CASE_INSENSITIVE_P and SHARP are interpreted as
6863for the `read' function.
6864
6865
6866** The function `int?' has been removed; its definition was identical
6867to that of `integer?'.
6868
6869** The functions `<?', `<?', `<=?', `=?', `>?', and `>=?'. Code should
6870use the R4RS names for these functions.
6871
6872** The function object-properties no longer returns the hash handle;
6873it simply returns the object's property list.
6874
6875** Many functions have been changed to throw errors, instead of
6876returning #f on failure. The point of providing exception handling in
6877the language is to simplify the logic of user code, but this is less
6878useful if Guile's primitives don't throw exceptions.
6879
6880** The function `fileno' has been renamed from `%fileno'.
6881
6882** The function primitive-mode->fdes returns #t or #f now, not 1 or 0.
6883
6884
6885* Changes to Guile's C interface:
6886
6887** The library's initialization procedure has been simplified.
6888scm_boot_guile now has the prototype:
6889
6890void scm_boot_guile (int ARGC,
6891 char **ARGV,
6892 void (*main_func) (),
6893 void *closure);
6894
6895scm_boot_guile calls MAIN_FUNC, passing it CLOSURE, ARGC, and ARGV.
6896MAIN_FUNC should do all the work of the program (initializing other
6897packages, reading user input, etc.) before returning. When MAIN_FUNC
6898returns, call exit (0); this function never returns. If you want some
6899other exit value, MAIN_FUNC may call exit itself.
6900
6901scm_boot_guile arranges for program-arguments to return the strings
6902given by ARGC and ARGV. If MAIN_FUNC modifies ARGC/ARGV, should call
6903scm_set_program_arguments with the final list, so Scheme code will
6904know which arguments have been processed.
6905
6906scm_boot_guile establishes a catch-all catch handler which prints an
6907error message and exits the process. This means that Guile exits in a
6908coherent way when system errors occur and the user isn't prepared to
6909handle it. If the user doesn't like this behavior, they can establish
6910their own universal catcher in MAIN_FUNC to shadow this one.
6911
6912Why must the caller do all the real work from MAIN_FUNC? The garbage
6913collector assumes that all local variables of type SCM will be above
6914scm_boot_guile's stack frame on the stack. If you try to manipulate
6915SCM values after this function returns, it's the luck of the draw
6916whether the GC will be able to find the objects you allocate. So,
6917scm_boot_guile function exits, rather than returning, to discourage
6918people from making that mistake.
6919
6920The IN, OUT, and ERR arguments were removed; there are other
6921convenient ways to override these when desired.
6922
6923The RESULT argument was deleted; this function should never return.
6924
6925The BOOT_CMD argument was deleted; the MAIN_FUNC argument is more
6926general.
6927
6928
6929** Guile's header files should no longer conflict with your system's
6930header files.
6931
6932In order to compile code which #included <libguile.h>, previous
6933versions of Guile required you to add a directory containing all the
6934Guile header files to your #include path. This was a problem, since
6935Guile's header files have names which conflict with many systems'
6936header files.
6937
6938Now only <libguile.h> need appear in your #include path; you must
6939refer to all Guile's other header files as <libguile/mumble.h>.
6940Guile's installation procedure puts libguile.h in $(includedir), and
6941the rest in $(includedir)/libguile.
6942
6943
6944** Two new C functions, scm_protect_object and scm_unprotect_object,
6945have been added to the Guile library.
6946
6947scm_protect_object (OBJ) protects OBJ from the garbage collector.
6948OBJ will not be freed, even if all other references are dropped,
6949until someone does scm_unprotect_object (OBJ). Both functions
6950return OBJ.
6951
6952Note that calls to scm_protect_object do not nest. You can call
6953scm_protect_object any number of times on a given object, and the
6954next call to scm_unprotect_object will unprotect it completely.
6955
6956Basically, scm_protect_object and scm_unprotect_object just
6957maintain a list of references to things. Since the GC knows about
6958this list, all objects it mentions stay alive. scm_protect_object
6959adds its argument to the list; scm_unprotect_object remove its
6960argument from the list.
6961
6962
6963** scm_eval_0str now returns the value of the last expression
6964evaluated.
6965
6966** The new function scm_read_0str reads an s-expression from a
6967null-terminated string, and returns it.
6968
6969** The new function `scm_stdio_to_port' converts a STDIO file pointer
6970to a Scheme port object.
6971
6972** The new function `scm_set_program_arguments' allows C code to set
e80c8fea 6973the value returned by the Scheme `program-arguments' function.
6685dc83 6974
6685dc83 6975\f
1a1945be
JB
6976Older changes:
6977
6978* Guile no longer includes sophisticated Tcl/Tk support.
6979
6980The old Tcl/Tk support was unsatisfying to us, because it required the
6981user to link against the Tcl library, as well as Tk and Guile. The
6982interface was also un-lispy, in that it preserved Tcl/Tk's practice of
6983referring to widgets by names, rather than exporting widgets to Scheme
6984code as a special datatype.
6985
6986In the Usenix Tk Developer's Workshop held in July 1996, the Tcl/Tk
6987maintainers described some very interesting changes in progress to the
6988Tcl/Tk internals, which would facilitate clean interfaces between lone
6989Tk and other interpreters --- even for garbage-collected languages
6990like Scheme. They expected the new Tk to be publicly available in the
6991fall of 1996.
6992
6993Since it seems that Guile might soon have a new, cleaner interface to
6994lone Tk, and that the old Guile/Tk glue code would probably need to be
6995completely rewritten, we (Jim Blandy and Richard Stallman) have
6996decided not to support the old code. We'll spend the time instead on
6997a good interface to the newer Tk, as soon as it is available.
5c54da76 6998
8512dea6 6999Until then, gtcltk-lib provides trivial, low-maintenance functionality.
deb95d71 7000
5c54da76
JB
7001\f
7002Copyright information:
7003
7e267da1 7004Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
5c54da76
JB
7005
7006 Permission is granted to anyone to make or distribute verbatim copies
7007 of this document as received, in any medium, provided that the
7008 copyright notice and this permission notice are preserved,
7009 thus giving the recipient permission to redistribute in turn.
7010
7011 Permission is granted to distribute modified versions
7012 of this document, or of portions of it,
7013 under the above conditions, provided also that they
7014 carry prominent notices stating who last changed them.
7015
48d224d7
JB
7016\f
7017Local variables:
7018mode: outline
7019paragraph-separate: "[ \f]*$"
7020end: