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