* Applied Martin Grabmueller's fix of case's handling of 'else.
[bpt/guile.git] / NEWS
CommitLineData
f7b47737 1Guile NEWS --- history of user-visible changes. -*- text -*-
0af43c4a 2Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
5c54da76
JB
3See the end for copying conditions.
4
e1b6c710 5Please send Guile bug reports to bug-guile@gnu.org.
5c54da76 6\f
c299f186
MD
7Changes since Guile 1.4:
8
9* Changes to the distribution
10
14f1d9fe
MD
11** New modules (oop goops) etc
12
13The new modules
14
15 (oop goops)
16 (oop goops describe)
17 (oop goops save)
18 (oop goops active-slot)
19 (oop goops composite-slot)
20
21plus some GOOPS utility modules have been added.
22
c299f186
MD
23* Changes to the stand-alone interpreter
24
14f1d9fe
MD
25** GOOPS has been merged into Guile
26
27The Guile Object Oriented Programming System has been integrated into
28Guile.
29
30Type
31
32 (use-modules (oop goops))
33
34access GOOPS bindings.
35
36We're now ready to try some basic GOOPS functionality.
37
38Generic functions
39
40 (define-method (+ (x <string>) (y <string>))
41 (string-append x y))
42
43 (+ 1 2) --> 3
44 (+ "abc" "de") --> "abcde"
45
46User-defined types
47
48 (define-class <2D-vector> ()
49 (x #:init-value 0 #:accessor x-component #:init-keyword #:x)
50 (y #:init-value 0 #:accessor y-component #:init-keyword #:y))
51
52 (define-method write ((obj <2D-vector>) port)
53 (display (format #f "<~S, ~S>" (x-component obj) (y-component obj))
54 port))
55
56 (define v (make <2D-vector> #:x 3 #:y 4))
57 v --> <3, 4>
58
59 (define-method + ((x <2D-vector>) (y <2D-vector>))
60 (make <2D-vector>
61 #:x (+ (x-component x) (x-component y))
62 #:y (+ (y-component x) (y-component y))))
63
64 (+ v v) --> <6, 8>
65
66Asking for the type of an object
67
68 (class-of v) --> #<<class> <2D-vector> 40241ac0>
69 <2D-vector> --> #<<class> <2D-vector> 40241ac0>
70 (class-of 1) --> #<<class> <integer> 401b2a98>
71 <integer> --> #<<class> <integer> 401b2a98>
72
73 (is-a? v <2D-vector>) --> #t
74
75See further in the GOOPS tutorial available in the guile-doc
76distribution in info (goops.info) and texinfo formats.
77
c0997079
MD
78** It's now possible to create modules with controlled environments
79
80Example:
81
03cd374d
MD
82(use-modules (ice-9 safe))
83(define m (make-safe-module))
c0997079 84;;; m will now be a module containing only a safe subset of R5RS
9e07b666
DH
85(eval '(+ 1 2) m) --> 3
86(eval 'load m) --> ERROR: Unbound variable: load
c0997079 87
c299f186
MD
88* Changes to Scheme functions and syntax
89
b7d69200 90** The semantics of guardians have changed.
56495472 91
b7d69200 92The changes are for the most part compatible. An important criterion
c0a5d888
ML
93was to keep the typical usage of guardians as simple as before, but to
94make the semantics safer and (as a result) more useful.
56495472 95
c0a5d888 96*** All objects returned from guardians are now properly alive.
56495472 97
c0a5d888
ML
98It is now guaranteed that any object referenced by an object returned
99from a guardian is alive. It's now impossible for a guardian to
100return a "contained" object before its "containing" object.
56495472
ML
101
102One incompatible (but probably not very important) change resulting
103from this is that it is no longer possible to guard objects that
104indirectly reference themselves (i.e. are parts of cycles). If you do
105so accidentally, you'll get a warning.
106
c0a5d888
ML
107*** There are now two types of guardians: greedy and sharing.
108
109If you call (make-guardian #t) or just (make-guardian), you'll get a
110greedy guardian, and for (make-guardian #f) a sharing guardian.
111
112Greedy guardians are the default because they are more "defensive".
113You can only greedily guard an object once. If you guard an object
114more than once, once in a greedy guardian and the rest of times in
115sharing guardians, then it is guaranteed that the object won't be
116returned from sharing guardians as long as it is greedily guarded
117and/or alive.
118
119Guardians returned by calls to `make-guardian' can now take one more
120optional parameter, which says whether to throw an error in case an
121attempt is made to greedily guard an object that is already greedily
122guarded. The default is true, i.e. throw an error. If the parameter
123is false, the guardian invocation returns #t if guarding was
124successful and #f if it wasn't.
125
126Also, since greedy guarding is, in effect, a side-effecting operation
127on objects, a new function is introduced: `destroy-guardian!'.
128Invoking this function on a guardian renders it unoperative and, if
129the guardian is greedy, clears the "greedily guarded" property of the
130objects that were guarded by it, thus undoing the side effect.
131
132Note that all this hair is hardly very important, since guardian
133objects are usually permanent.
134
818febc0
GH
135** Escape procedures created by call-with-current-continuation now
136accept any number of arguments, as required by R5RS.
137
17f367e0
MV
138** New function `make-object-property'
139
140This function returns a new `procedure with setter' P that can be used
141to attach a property to objects. When calling P as
142
143 (set! (P obj) val)
144
145where `obj' is any kind of object, it attaches `val' to `obj' in such
146a way that it can be retrieved by calling P as
147
148 (P obj)
149
150This function will replace procedure properties, symbol properties and
151source properties eventually.
152
76ef92f3
MV
153** Module (ice-9 optargs) now uses keywords instead of `#&'.
154
155Instead of #&optional, #&key, etc you should now use #:optional,
156#:key, etc. Since #:optional is a keyword, you can write it as just
157:optional when (read-set! keywords 'prefix) is active.
158
159The old reader syntax `#&' is still supported, but deprecated. It
160will be removed in the next release.
161
41d7d2af
MD
162** Backward incompatible change: eval EXP ENVIRONMENT-SPECIFIER
163
164`eval' is now R5RS, that is it takes two arguments.
165The second argument is an environment specifier, i.e. either
166
167 (scheme-report-environment 5)
168 (null-environment 5)
169 (interaction-environment)
170
171or
172
173 any module.
174
c0997079
MD
175** New define-module option: pure
176
177Tells the module system not to include any bindings from the root
178module.
179
180Example:
181
182(define-module (totally-empty-module)
183 :pure)
184
185** New define-module option: export NAME1 ...
186
187Export names NAME1 ...
188
189This option is required if you want to be able to export bindings from
190a module which doesn't import one of `define-public' or `export'.
191
192Example:
193
194(define-module (foo)
195 :pure
196 :use-module (ice-9 r5rs)
197 :export (bar))
198
199;;; Note that we're pure R5RS below this point!
200
201(define (bar)
202 ...)
203
69b5f65a
MD
204** Deprecated: scm_make_shared_substring
205
206Explicit shared substrings will disappear from Guile.
207
208Instead, "normal" strings will be implemented using sharing
209internally, combined with a copy-on-write strategy.
210
211** Deprecated: scm_read_only_string_p
212
213The concept of read-only strings will disappear in next release of
214Guile.
215
daa6ba18
DH
216** Deprecated: scm_sloppy_memq, scm_sloppy_memv, scm_sloppy_member
217
79a3dafe 218Instead, use scm_c_memq or scm_memq, scm_memv, scm_member.
daa6ba18 219
264e9cbc
GH
220** New function: read-string!/partial str [port_or_fdes [start [end]]]
221
222 Read characters from an fport or file descriptor into a string
223 STR. This procedure is scsh-compatible and can efficiently read
224 large strings. It will:
225
226 * attempt to fill the entire string, unless the START and/or
227 END arguments are supplied. i.e., START defaults to 0 and
228 END defaults to `(string-length str)'
229
230 * use the current input port if PORT_OR_FDES is not supplied.
231
232 * read any characters that are currently available, without
233 waiting for the rest (short reads are possible).
234
235 * wait for as long as it needs to for the first character to
236 become available, unless the port is in non-blocking mode
237
238 * return `#f' if end-of-file is encountered before reading any
239 characters, otherwise return the number of characters read.
240
241 * return 0 if the port is in non-blocking mode and no characters
242 are immediately available.
243
244 * return 0 if the request is for 0 bytes, with no end-of-file
245 check
246
eb5c0a2a
GH
247** New function: port? X
248
249Returns a boolean indicating whether X is a port. Equivalent to
250`(or (input-port? X) (output-port? X))'.
251
34b56ec4
GH
252** New function: port-for-each proc
253
254Apply PROC to each port in the Guile port table in turn. The
255return value is unspecified.
256
257** New function: dup2 oldfd newfd
258
259A simple wrapper for the `dup2' system call. Copies the file
260descriptor OLDFD to descriptor number NEWFD, replacing the
261previous meaning of NEWFD. Both OLDFD and NEWFD must be integers.
262Unlike for dup->fdes or primitive-move->fdes, no attempt is made
264e9cbc 263to move away ports which are using NEWFD. The return value is
34b56ec4
GH
264unspecified.
265
266** New function: close-fdes fd
267
268A simple wrapper for the `close' system call. Close file
269descriptor FD, which must be an integer. Unlike close (*note
270close: Ports and File Descriptors.), the file descriptor will be
271closed even if a port is using it. The return value is
272unspecified.
273
274** Deprecated: close-all-ports-except. This was intended for closing
275ports in a child process after a fork, but it has the undesirable side
276effect of flushing buffers. port-for-each is more flexible.
277
278** The (ice-9 popen) module now attempts to set up file descriptors in
279the child process from the current Scheme ports, instead of using the
280current values of file descriptors 0, 1, and 2 in the parent process.
281
b52e071b
DH
282** Removed function: builtin-weak-bindings
283
284There is no such concept as a weak binding any more.
285
a261c0e9 286** Removed constants: bignum-radix
0f979f3f 287
c299f186
MD
288* Changes to the gh_ interface
289
290* Changes to the scm_ interface
291
17f367e0
MV
292** New function: scm_init_guile ()
293
294In contrast to scm_boot_guile, scm_init_guile will return normally
295after initializing Guile. It is not available on all systems, tho.
296
23ade5e7
DH
297** New functions: scm_str2symbol, scm_mem2symbol
298
299The function scm_str2symbol takes a const char* pointing to a zero-terminated
300field of characters and creates a scheme symbol object from that C string.
301The function scm_mem2symbol takes a const char* and a number of characters and
302creates a symbol from the characters in that memory area.
303
17f367e0
MV
304** New functions: scm_primitive_make_property
305 scm_primitive_property_ref
306 scm_primitive_property_set_x
307 scm_primitive_property_del_x
308
309These functions implement a new way to deal with object properties.
310See libguile/properties.c for their documentation.
311
9d47a1e6
ML
312** New function: scm_done_free (long size)
313
314This function is the inverse of scm_done_malloc. Use it to report the
315amount of smob memory you free. The previous method, which involved
316calling scm_done_malloc with negative argument, was somewhat
317unintuitive (and is still available, of course).
318
79a3dafe
DH
319** New function: scm_c_memq (SCM obj, SCM list)
320
321This function provides a fast C level alternative for scm_memq for the case
322that the list parameter is known to be a proper list. The function is a
323replacement for scm_sloppy_memq, but is stricter in its requirements on its
324list input parameter, since for anything else but a proper list the function's
325behaviour is undefined - it may even crash or loop endlessly. Further, for
326the case that the object is not found in the list, scm_c_memq returns #f which
327is similar to scm_memq, but different from scm_sloppy_memq's behaviour.
328
5d2b97cd
DH
329** New functions: scm_remember_upto_here_1, scm_remember_upto_here_2,
330scm_remember_upto_here
331
332These functions replace the function scm_remember.
333
334** Deprecated function: scm_remember
335
336Use one of the new functions scm_remember_upto_here_1,
337scm_remember_upto_here_2 or scm_remember_upto_here instead.
338
32d0d4b1
DH
339** New global variable scm_gc_running_p introduced.
340
341Use this variable to find out if garbage collection is being executed. Up to
342now applications have used scm_gc_heap_lock to test if garbage collection was
343running, which also works because of the fact that up to know only the garbage
344collector has set this variable. But, this is an implementation detail that
345may change. Further, scm_gc_heap_lock is not set throughout gc, thus the use
346of this variable is (and has been) not fully safe anyway.
347
5b9eb8ae
DH
348** New macros: SCM_BITVECTOR_MAX_LENGTH, SCM_UVECTOR_MAX_LENGTH
349
350Use these instead of SCM_LENGTH_MAX.
351
a6d9e5ab
DH
352** New macros: SCM_CONTINUATION_LENGTH, SCM_CCLO_LENGTH, SCM_STACK_LENGTH,
353SCM_STRING_LENGTH, SCM_SYMBOL_LENGTH, SCM_UVECTOR_LENGTH,
354SCM_BITVECTOR_LENGTH, SCM_VECTOR_LENGTH.
355
356Use these instead of SCM_LENGTH.
357
93778877
DH
358** New macros: SCM_SET_CONTINUATION_LENGTH, SCM_SET_STRING_LENGTH,
359SCM_SET_SYMBOL_LENGTH, SCM_SET_VECTOR_LENGTH, SCM_SET_UVECTOR_LENGTH,
360SCM_SET_BITVECTOR_LENGTH
bc0eaf7b
DH
361
362Use these instead of SCM_SETLENGTH
363
a6d9e5ab
DH
364** New macros: SCM_STRING_CHARS, SCM_SYMBOL_CHARS, SCM_CCLO_BASE,
365SCM_VECTOR_BASE, SCM_UVECTOR_BASE, SCM_BITVECTOR_BASE, SCM_COMPLEX_MEM,
366SCM_ARRAY_MEM
367
e51fe79c
DH
368Use these instead of SCM_CHARS, SCM_UCHARS, SCM_ROCHARS, SCM_ROUCHARS or
369SCM_VELTS.
a6d9e5ab 370
6a0476fd
DH
371** New macros: SCM_SET_BIGNUM_BASE, SCM_SET_STRING_CHARS,
372SCM_SET_SYMBOL_CHARS, SCM_SET_UVECTOR_BASE, SCM_SET_BITVECTOR_BASE,
373SCM_SET_VECTOR_BASE
374
375Use these instead of SCM_SETCHARS.
376
a6d9e5ab
DH
377** New macro: SCM_BITVECTOR_P
378
379** New macro: SCM_STRING_COERCE_0TERMINATION_X
380
381Use instead of SCM_COERCE_SUBSTR.
382
b63a956d
DH
383** Deprecated macros: SCM_OUTOFRANGE, SCM_NALLOC, SCM_HUP_SIGNAL,
384SCM_INT_SIGNAL, SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL,
385SCM_ALRM_SIGNAL, SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD,
d1ca2c64 386SCM_ORD_SIG, SCM_NUM_SIGS, SCM_SYMBOL_SLOTS, SCM_SLOTS, SCM_SLOPPY_STRINGP,
a6d9e5ab
DH
387SCM_VALIDATE_STRINGORSUBSTR, SCM_FREEP, SCM_NFREEP, SCM_CHARS, SCM_UCHARS,
388SCM_VALIDATE_ROSTRING, SCM_VALIDATE_ROSTRING_COPY,
389SCM_VALIDATE_NULLORROSTRING_COPY, SCM_ROLENGTH, SCM_LENGTH, SCM_HUGE_LENGTH,
b24b5e13 390SCM_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET, SCM_COERCE_SUBSTR,
34f0f2b8 391SCM_ROSTRINGP, SCM_RWSTRINGP, SCM_VALIDATE_RWSTRING, SCM_ROCHARS,
fd336365 392SCM_ROUCHARS, SCM_SETLENGTH, SCM_SETCHARS, SCM_LENGTH_MAX, SCM_GC8MARKP,
23a62df4 393SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR, SCM_SUBR_DOC
b63a956d
DH
394
395Use SCM_ASSERT_RANGE or SCM_VALIDATE_XXX_RANGE instead of SCM_OUTOFRANGE.
396Use scm_memory_error instead of SCM_NALLOC.
c1aef037 397Use SCM_STRINGP instead of SCM_SLOPPY_STRINGP.
d1ca2c64
DH
398Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_STRINGORSUBSTR.
399Use SCM_FREE_CELL_P instead of SCM_FREEP/SCM_NFREEP
a6d9e5ab
DH
400Use a type specific accessor macro instead of SCM_CHARS/SCM_UCHARS.
401Use a type specific accessor instead of SCM(_|_RO|_HUGE_)LENGTH.
402Use SCM_VALIDATE_(SYMBOL|STRING) instead of SCM_VALIDATE_ROSTRING.
403Use SCM_STRING_COERCE_0TERMINATION_X instead of SCM_COERCE_SUBSTR.
b24b5e13 404Use SCM_STRINGP or SCM_SYMBOLP instead of SCM_ROSTRINGP.
f0942910
DH
405Use SCM_STRINGP instead of SCM_RWSTRINGP.
406Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_RWSTRING.
34f0f2b8
DH
407Use SCM_STRING_CHARS instead of SCM_ROCHARS.
408Use SCM_STRING_UCHARS instead of SCM_ROUCHARS.
93778877 409Use a type specific setter macro instead of SCM_SETLENGTH.
6a0476fd 410Use a type specific setter macro instead of SCM_SETCHARS.
5b9eb8ae 411Use a type specific length macro instead of SCM_LENGTH_MAX.
fd336365
DH
412Use SCM_GCMARKP instead of SCM_GC8MARKP.
413Use SCM_SETGCMARK instead of SCM_SETGC8MARK.
414Use SCM_CLRGCMARK instead of SCM_CLRGC8MARK.
415Use SCM_TYP16 instead of SCM_GCTYP16.
416Use SCM_CDR instead of SCM_GCCDR.
b63a956d 417
f7620510
DH
418** Removed function: scm_struct_init
419
93d40df2
DH
420** Removed variable: scm_symhash_dim
421
818febc0
GH
422** Renamed function: scm_make_cont has been replaced by
423scm_make_continuation, which has a different interface.
424
cc4feeca
DH
425** Deprecated function: scm_call_catching_errors
426
427Use scm_catch or scm_lazy_catch from throw.[ch] instead.
428
28b06554
DH
429** Deprecated function: scm_strhash
430
431Use scm_string_hash instead.
432
1b9be268
DH
433** Deprecated function: scm_vector_set_length_x
434
435Instead, create a fresh vector of the desired size and copy the contents.
436
302f229e
MD
437** scm_gensym has changed prototype
438
439scm_gensym now only takes one argument.
440
441** New function: scm_gentemp (SCM prefix, SCM obarray)
442
443The builtin `gentemp' has now become a primitive.
444
1660782e
DH
445** Deprecated type tags: scm_tc7_ssymbol, scm_tc7_msymbol, scm_tcs_symbols,
446scm_tc7_lvector
28b06554
DH
447
448There is now only a single symbol type scm_tc7_symbol.
1660782e 449The tag scm_tc7_lvector was not used anyway.
28b06554 450
2f6fb7c5
KN
451** Deprecated function: scm_make_smob_type_mfpe, scm_set_smob_mfpe.
452
453Use scm_make_smob_type and scm_set_smob_XXX instead.
454
455** New function scm_set_smob_apply.
456
457This can be used to set an apply function to a smob type.
458
c299f186 459\f
cc36e791
JB
460Changes since Guile 1.3.4:
461
80f27102
JB
462* Changes to the distribution
463
ce358662
JB
464** Trees from nightly snapshots and CVS now require you to run autogen.sh.
465
466We've changed the way we handle generated files in the Guile source
467repository. As a result, the procedure for building trees obtained
468from the nightly FTP snapshots or via CVS has changed:
469- You must have appropriate versions of autoconf, automake, and
470 libtool installed on your system. See README for info on how to
471 obtain these programs.
472- Before configuring the tree, you must first run the script
473 `autogen.sh' at the top of the source tree.
474
475The Guile repository used to contain not only source files, written by
476humans, but also some generated files, like configure scripts and
477Makefile.in files. Even though the contents of these files could be
478derived mechanically from other files present, we thought it would
479make the tree easier to build if we checked them into CVS.
480
481However, this approach means that minor differences between
482developer's installed tools and habits affected the whole team.
483So we have removed the generated files from the repository, and
484added the autogen.sh script, which will reconstruct them
485appropriately.
486
487
dc914156
GH
488** configure now has experimental options to remove support for certain
489features:
52cfc69b 490
dc914156
GH
491--disable-arrays omit array and uniform array support
492--disable-posix omit posix interfaces
493--disable-networking omit networking interfaces
494--disable-regex omit regular expression interfaces
52cfc69b
GH
495
496These are likely to become separate modules some day.
497
9764c29b 498** New configure option --enable-debug-freelist
e1b0d0ac 499
38a15cfd
GB
500This enables a debugging version of SCM_NEWCELL(), and also registers
501an extra primitive, the setter `gc-set-debug-check-freelist!'.
502
503Configure with the --enable-debug-freelist option to enable
504the gc-set-debug-check-freelist! primitive, and then use:
505
506(gc-set-debug-check-freelist! #t) # turn on checking of the freelist
507(gc-set-debug-check-freelist! #f) # turn off checking
508
509Checking of the freelist forces a traversal of the freelist and
510a garbage collection before each allocation of a cell. This can
511slow down the interpreter dramatically, so the setter should be used to
512turn on this extra processing only when necessary.
e1b0d0ac 513
9764c29b
MD
514** New configure option --enable-debug-malloc
515
516Include code for debugging of calls to scm_must_malloc/realloc/free.
517
518Checks that
519
5201. objects freed by scm_must_free has been mallocated by scm_must_malloc
5212. objects reallocated by scm_must_realloc has been allocated by
522 scm_must_malloc
5233. reallocated objects are reallocated with the same what string
524
525But, most importantly, it records the number of allocated objects of
526each kind. This is useful when searching for memory leaks.
527
528A Guile compiled with this option provides the primitive
529`malloc-stats' which returns an alist with pairs of kind and the
530number of objects of that kind.
531
e415cb06
MD
532** All includes are now referenced relative to the root directory
533
534Since some users have had problems with mixups between Guile and
535system headers, we have decided to always refer to Guile headers via
536their parent directories. This essentially creates a "private name
537space" for Guile headers. This means that the compiler only is given
538-I options for the root build and root source directory.
539
341f78c9
MD
540** Header files kw.h and genio.h have been removed.
541
542** The module (ice-9 getopt-gnu-style) has been removed.
543
e8855f8d
MD
544** New module (ice-9 documentation)
545
546Implements the interface to documentation strings associated with
547objects.
548
0af43c4a 549* Changes to the stand-alone interpreter
bd9e24b3 550
67ef2dca
MD
551** New command line option --debug
552
553Start Guile with debugging evaluator and backtraces enabled.
554
555This is useful when debugging your .guile init file or scripts.
556
aa4bb95d
MD
557** New help facility
558
341f78c9
MD
559Usage: (help NAME) gives documentation about objects named NAME (a symbol)
560 (help REGEXP) ditto for objects with names matching REGEXP (a string)
561 (help ,EXPR) gives documentation for object returned by EXPR
562 (help) gives this text
563
564`help' searches among bindings exported from loaded modules, while
565`apropos' searches among bindings visible from the "current" module.
566
567Examples: (help help)
568 (help cons)
569 (help "output-string")
aa4bb95d 570
e8855f8d
MD
571** `help' and `apropos' now prints full module names
572
0af43c4a 573** Dynamic linking now uses libltdl from the libtool package.
bd9e24b3 574
0af43c4a
MD
575The old system dependent code for doing dynamic linking has been
576replaced with calls to the libltdl functions which do all the hairy
577details for us.
bd9e24b3 578
0af43c4a
MD
579The major improvement is that you can now directly pass libtool
580library names like "libfoo.la" to `dynamic-link' and `dynamic-link'
581will be able to do the best shared library job you can get, via
582libltdl.
bd9e24b3 583
0af43c4a
MD
584The way dynamic libraries are found has changed and is not really
585portable across platforms, probably. It is therefore recommended to
586use absolute filenames when possible.
587
588If you pass a filename without an extension to `dynamic-link', it will
589try a few appropriate ones. Thus, the most platform ignorant way is
590to specify a name like "libfoo", without any directories and
591extensions.
0573ddae 592
91163914
MD
593** Guile COOP threads are now compatible with LinuxThreads
594
595Previously, COOP threading wasn't possible in applications linked with
596Linux POSIX threads due to their use of the stack pointer to find the
597thread context. This has now been fixed with a workaround which uses
598the pthreads to allocate the stack.
599
62b82274
GB
600** New primitives: `pkgdata-dir', `site-dir', `library-dir'
601
9770d235
MD
602** Positions of erring expression in scripts
603
604With version 1.3.4, the location of the erring expression in Guile
605scipts is no longer automatically reported. (This should have been
606documented before the 1.3.4 release.)
607
608You can get this information by enabling recording of positions of
609source expressions and running the debugging evaluator. Put this at
610the top of your script (or in your "site" file):
611
612 (read-enable 'positions)
613 (debug-enable 'debug)
614
0573ddae
MD
615** Backtraces in scripts
616
617It is now possible to get backtraces in scripts.
618
619Put
620
621 (debug-enable 'debug 'backtrace)
622
623at the top of the script.
624
625(The first options enables the debugging evaluator.
626 The second enables backtraces.)
627
e8855f8d
MD
628** Part of module system symbol lookup now implemented in C
629
630The eval closure of most modules is now implemented in C. Since this
631was one of the bottlenecks for loading speed, Guile now loads code
632substantially faster than before.
633
f25f761d
GH
634** Attempting to get the value of an unbound variable now produces
635an exception with a key of 'unbound-variable instead of 'misc-error.
636
1a35eadc
GH
637** The initial default output port is now unbuffered if it's using a
638tty device. Previously in this situation it was line-buffered.
639
820920e6
MD
640** gc-thunk is deprecated
641
642gc-thunk will be removed in next release of Guile. It has been
643replaced by after-gc-hook.
644
645** New hook: after-gc-hook
646
647after-gc-hook takes over the role of gc-thunk. This hook is run at
648the first SCM_TICK after a GC. (Thus, the code is run at the same
649point during evaluation as signal handlers.)
650
651Note that this hook should be used only for diagnostic and debugging
652purposes. It is not certain that it will continue to be well-defined
653when this hook is run in the future.
654
655C programmers: Note the new C level hooks scm_before_gc_c_hook,
656scm_before_sweep_c_hook, scm_after_gc_c_hook.
657
b5074b23
MD
658** Improvements to garbage collector
659
660Guile 1.4 has a new policy for triggering heap allocation and
661determining the sizes of heap segments. It fixes a number of problems
662in the old GC.
663
6641. The new policy can handle two separate pools of cells
665 (2-word/4-word) better. (The old policy would run wild, allocating
666 more and more memory for certain programs.)
667
6682. The old code would sometimes allocate far too much heap so that the
669 Guile process became gigantic. The new code avoids this.
670
6713. The old code would sometimes allocate too little so that few cells
672 were freed at GC so that, in turn, too much time was spent in GC.
673
6744. The old code would often trigger heap allocation several times in a
675 row. (The new scheme predicts how large the segments needs to be
676 in order not to need further allocation.)
677
e8855f8d
MD
678All in all, the new GC policy will make larger applications more
679efficient.
680
b5074b23
MD
681The new GC scheme also is prepared for POSIX threading. Threads can
682allocate private pools of cells ("clusters") with just a single
683function call. Allocation of single cells from such a cluster can
684then proceed without any need of inter-thread synchronization.
685
686** New environment variables controlling GC parameters
687
688GUILE_MAX_SEGMENT_SIZE Maximal segment size
689 (default = 2097000)
690
691Allocation of 2-word cell heaps:
692
693GUILE_INIT_SEGMENT_SIZE_1 Size of initial heap segment in bytes
694 (default = 360000)
695
696GUILE_MIN_YIELD_1 Minimum number of freed cells at each
697 GC in percent of total heap size
698 (default = 40)
699
700Allocation of 4-word cell heaps
701(used for real numbers and misc other objects):
702
703GUILE_INIT_SEGMENT_SIZE_2, GUILE_MIN_YIELD_2
704
705(See entry "Way for application to customize GC parameters" under
706 section "Changes to the scm_ interface" below.)
707
67ef2dca
MD
708** Guile now implements reals using 4-word cells
709
710This speeds up computation with reals. (They were earlier allocated
711with `malloc'.) There is still some room for optimizations, however.
712
713** Some further steps toward POSIX thread support have been taken
714
715*** Guile's critical sections (SCM_DEFER/ALLOW_INTS)
716don't have much effect any longer, and many of them will be removed in
717next release.
718
719*** Signals
720are only handled at the top of the evaluator loop, immediately after
721I/O, and in scm_equalp.
722
723*** The GC can allocate thread private pools of pairs.
724
0af43c4a
MD
725* Changes to Scheme functions and syntax
726
a0128ebe 727** close-input-port and close-output-port are now R5RS
7c1e0b12 728
a0128ebe 729These procedures have been turned into primitives and have R5RS behaviour.
7c1e0b12 730
0af43c4a
MD
731** New procedure: simple-format PORT MESSAGE ARG1 ...
732
733(ice-9 boot) makes `format' an alias for `simple-format' until possibly
734extended by the more sophisticated version in (ice-9 format)
735
736(simple-format port message . args)
737Write MESSAGE to DESTINATION, defaulting to `current-output-port'.
738MESSAGE can contain ~A (was %s) and ~S (was %S) escapes. When printed,
739the escapes are replaced with corresponding members of ARGS:
740~A formats using `display' and ~S formats using `write'.
741If DESTINATION is #t, then use the `current-output-port',
742if DESTINATION is #f, then return a string containing the formatted text.
743Does not add a trailing newline."
744
745** string-ref: the second argument is no longer optional.
746
747** string, list->string: no longer accept strings in their arguments,
748only characters, for compatibility with R5RS.
749
750** New procedure: port-closed? PORT
751Returns #t if PORT is closed or #f if it is open.
752
0a9e521f
MD
753** Deprecated: list*
754
755The list* functionality is now provided by cons* (SRFI-1 compliant)
756
b5074b23
MD
757** New procedure: cons* ARG1 ARG2 ... ARGn
758
759Like `list', but the last arg provides the tail of the constructed list,
760returning (cons ARG1 (cons ARG2 (cons ... ARGn))).
761
762Requires at least one argument. If given one argument, that argument
763is returned as result.
764
765This function is called `list*' in some other Schemes and in Common LISP.
766
341f78c9
MD
767** Removed deprecated: serial-map, serial-array-copy!, serial-array-map!
768
e8855f8d
MD
769** New procedure: object-documentation OBJECT
770
771Returns the documentation string associated with OBJECT. The
772procedure uses a caching mechanism so that subsequent lookups are
773faster.
774
775Exported by (ice-9 documentation).
776
777** module-name now returns full names of modules
778
779Previously, only the last part of the name was returned (`session' for
780`(ice-9 session)'). Ex: `(ice-9 session)'.
781
894a712b
DH
782* Changes to the gh_ interface
783
784** Deprecated: gh_int2scmb
785
786Use gh_bool2scm instead.
787
a2349a28
GH
788* Changes to the scm_ interface
789
810e1aec
MD
790** Guile primitives now carry docstrings!
791
792Thanks to Greg Badros!
793
0a9e521f 794** Guile primitives are defined in a new way: SCM_DEFINE/SCM_DEFINE1/SCM_PROC
0af43c4a 795
0a9e521f
MD
796Now Guile primitives are defined using the SCM_DEFINE/SCM_DEFINE1/SCM_PROC
797macros and must contain a docstring that is extracted into foo.doc using a new
0af43c4a
MD
798guile-doc-snarf script (that uses guile-doc-snarf.awk).
799
0a9e521f
MD
800However, a major overhaul of these macros is scheduled for the next release of
801guile.
802
0af43c4a
MD
803** Guile primitives use a new technique for validation of arguments
804
805SCM_VALIDATE_* macros are defined to ease the redundancy and improve
806the readability of argument checking.
807
808** All (nearly?) K&R prototypes for functions replaced with ANSI C equivalents.
809
894a712b 810** New macros: SCM_PACK, SCM_UNPACK
f8a72ca4
MD
811
812Compose/decompose an SCM value.
813
894a712b
DH
814The SCM type is now treated as an abstract data type and may be defined as a
815long, a void* or as a struct, depending on the architecture and compile time
816options. This makes it easier to find several types of bugs, for example when
817SCM values are treated as integers without conversion. Values of the SCM type
818should be treated as "atomic" values. These macros are used when
f8a72ca4
MD
819composing/decomposing an SCM value, either because you want to access
820individual bits, or because you want to treat it as an integer value.
821
822E.g., in order to set bit 7 in an SCM value x, use the expression
823
824 SCM_PACK (SCM_UNPACK (x) | 0x80)
825
e11f8b42
DH
826** The name property of hooks is deprecated.
827Thus, the use of SCM_HOOK_NAME and scm_make_hook_with_name is deprecated.
828
829You can emulate this feature by using object properties.
830
894a712b
DH
831** Deprecated macros: SCM_INPORTP, SCM_OUTPORTP, SCM_CRDY, SCM_ICHRP,
832SCM_ICHR, SCM_MAKICHR, SCM_SETJMPBUF, SCM_NSTRINGP, SCM_NRWSTRINGP,
833SCM_NVECTORP
f8a72ca4 834
894a712b 835These macros will be removed in a future release of Guile.
7c1e0b12 836
0a9e521f
MD
837** The following types, functions and macros from numbers.h are deprecated:
838scm_dblproc, SCM_UNEGFIXABLE, SCM_FLOBUFLEN, SCM_INEXP, SCM_CPLXP, SCM_REAL,
839SCM_IMAG, SCM_REALPART, scm_makdbl, SCM_SINGP, SCM_NUM2DBL, SCM_NO_BIGDIG
840
841Further, it is recommended not to rely on implementation details for guile's
842current implementation of bignums. It is planned to replace this
843implementation with gmp in the future.
844
a2349a28
GH
845** Port internals: the rw_random variable in the scm_port structure
846must be set to non-zero in any random access port. In recent Guile
847releases it was only set for bidirectional random-access ports.
848
7dcb364d
GH
849** Port internals: the seek ptob procedure is now responsible for
850resetting the buffers if required. The change was made so that in the
851special case of reading the current position (i.e., seek p 0 SEEK_CUR)
852the fport and strport ptobs can avoid resetting the buffers,
853in particular to avoid discarding unread chars. An existing port
854type can be fixed by adding something like the following to the
855beginning of the ptob seek procedure:
856
857 if (pt->rw_active == SCM_PORT_READ)
858 scm_end_input (object);
859 else if (pt->rw_active == SCM_PORT_WRITE)
860 ptob->flush (object);
861
862although to actually avoid resetting the buffers and discard unread
863chars requires further hacking that depends on the characteristics
864of the ptob.
865
894a712b
DH
866** Deprecated functions: scm_fseek, scm_tag
867
868These functions are no longer used and will be removed in a future version.
869
f25f761d
GH
870** The scm_sysmissing procedure is no longer used in libguile.
871Unless it turns out to be unexpectedly useful to somebody, it will be
872removed in a future version.
873
0af43c4a
MD
874** The format of error message strings has changed
875
876The two C procedures: scm_display_error and scm_error, as well as the
877primitive `scm-error', now use scm_simple_format to do their work.
878This means that the message strings of all code must be updated to use
879~A where %s was used before, and ~S where %S was used before.
880
881During the period when there still are a lot of old Guiles out there,
882you might want to support both old and new versions of Guile.
883
884There are basically two methods to achieve this. Both methods use
885autoconf. Put
886
887 AC_CHECK_FUNCS(scm_simple_format)
888
889in your configure.in.
890
891Method 1: Use the string concatenation features of ANSI C's
892 preprocessor.
893
894In C:
895
896#ifdef HAVE_SCM_SIMPLE_FORMAT
897#define FMT_S "~S"
898#else
899#define FMT_S "%S"
900#endif
901
902Then represent each of your error messages using a preprocessor macro:
903
904#define E_SPIDER_ERROR "There's a spider in your " ## FMT_S ## "!!!"
905
906In Scheme:
907
908(define fmt-s (if (defined? 'simple-format) "~S" "%S"))
909(define make-message string-append)
910
911(define e-spider-error (make-message "There's a spider in your " fmt-s "!!!"))
912
913Method 2: Use the oldfmt function found in doc/oldfmt.c.
914
915In C:
916
917scm_misc_error ("picnic", scm_c_oldfmt0 ("There's a spider in your ~S!!!"),
918 ...);
919
920In Scheme:
921
922(scm-error 'misc-error "picnic" (oldfmt "There's a spider in your ~S!!!")
923 ...)
924
925
f3b5e185
MD
926** Deprecated: coop_mutex_init, coop_condition_variable_init
927
928Don't use the functions coop_mutex_init and
929coop_condition_variable_init. They will change.
930
931Use scm_mutex_init and scm_cond_init instead.
932
f3b5e185
MD
933** New function: int scm_cond_timedwait (scm_cond_t *COND, scm_mutex_t *MUTEX, const struct timespec *ABSTIME)
934 `scm_cond_timedwait' atomically unlocks MUTEX and waits on
935 COND, as `scm_cond_wait' does, but it also bounds the duration
936 of the wait. If COND has not been signaled before time ABSTIME,
937 the mutex MUTEX is re-acquired and `scm_cond_timedwait'
938 returns the error code `ETIMEDOUT'.
939
940 The ABSTIME parameter specifies an absolute time, with the same
941 origin as `time' and `gettimeofday': an ABSTIME of 0 corresponds
942 to 00:00:00 GMT, January 1, 1970.
943
944** New function: scm_cond_broadcast (scm_cond_t *COND)
945 `scm_cond_broadcast' restarts all the threads that are waiting
946 on the condition variable COND. Nothing happens if no threads are
947 waiting on COND.
948
949** New function: scm_key_create (scm_key_t *KEY, void (*destr_function) (void *))
950 `scm_key_create' allocates a new TSD key. The key is stored in
951 the location pointed to by KEY. There is no limit on the number
952 of keys allocated at a given time. The value initially associated
953 with the returned key is `NULL' in all currently executing threads.
954
955 The DESTR_FUNCTION argument, if not `NULL', specifies a destructor
956 function associated with the key. When a thread terminates,
957 DESTR_FUNCTION is called on the value associated with the key in
958 that thread. The DESTR_FUNCTION is not called if a key is deleted
959 with `scm_key_delete' or a value is changed with
960 `scm_setspecific'. The order in which destructor functions are
961 called at thread termination time is unspecified.
962
963 Destructors are not yet implemented.
964
965** New function: scm_setspecific (scm_key_t KEY, const void *POINTER)
966 `scm_setspecific' changes the value associated with KEY in the
967 calling thread, storing the given POINTER instead.
968
969** New function: scm_getspecific (scm_key_t KEY)
970 `scm_getspecific' returns the value currently associated with
971 KEY in the calling thread.
972
973** New function: scm_key_delete (scm_key_t KEY)
974 `scm_key_delete' deallocates a TSD key. It does not check
975 whether non-`NULL' values are associated with that key in the
976 currently executing threads, nor call the destructor function
977 associated with the key.
978
820920e6
MD
979** New function: scm_c_hook_init (scm_c_hook_t *HOOK, void *HOOK_DATA, scm_c_hook_type_t TYPE)
980
981Initialize a C level hook HOOK with associated HOOK_DATA and type
982TYPE. (See scm_c_hook_run ().)
983
984** New function: scm_c_hook_add (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA, int APPENDP)
985
986Add hook function FUNC with associated FUNC_DATA to HOOK. If APPENDP
987is true, add it last, otherwise first. The same FUNC can be added
988multiple times if FUNC_DATA differ and vice versa.
989
990** New function: scm_c_hook_remove (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA)
991
992Remove hook function FUNC with associated FUNC_DATA from HOOK. A
993function is only removed if both FUNC and FUNC_DATA matches.
994
995** New function: void *scm_c_hook_run (scm_c_hook_t *HOOK, void *DATA)
996
997Run hook HOOK passing DATA to the hook functions.
998
999If TYPE is SCM_C_HOOK_NORMAL, all hook functions are run. The value
1000returned is undefined.
1001
1002If TYPE is SCM_C_HOOK_OR, hook functions are run until a function
1003returns a non-NULL value. This value is returned as the result of
1004scm_c_hook_run. If all functions return NULL, NULL is returned.
1005
1006If TYPE is SCM_C_HOOK_AND, hook functions are run until a function
1007returns a NULL value, and NULL is returned. If all functions returns
1008a non-NULL value, the last value is returned.
1009
1010** New C level GC hooks
1011
1012Five new C level hooks has been added to the garbage collector.
1013
1014 scm_before_gc_c_hook
1015 scm_after_gc_c_hook
1016
1017are run before locking and after unlocking the heap. The system is
1018thus in a mode where evaluation can take place. (Except that
1019scm_before_gc_c_hook must not allocate new cells.)
1020
1021 scm_before_mark_c_hook
1022 scm_before_sweep_c_hook
1023 scm_after_sweep_c_hook
1024
1025are run when the heap is locked. These are intended for extension of
1026the GC in a modular fashion. Examples are the weaks and guardians
1027modules.
1028
b5074b23
MD
1029** Way for application to customize GC parameters
1030
1031The application can set up other default values for the GC heap
1032allocation parameters
1033
1034 GUILE_INIT_HEAP_SIZE_1, GUILE_MIN_YIELD_1,
1035 GUILE_INIT_HEAP_SIZE_2, GUILE_MIN_YIELD_2,
1036 GUILE_MAX_SEGMENT_SIZE,
1037
1038by setting
1039
1040 scm_default_init_heap_size_1, scm_default_min_yield_1,
1041 scm_default_init_heap_size_2, scm_default_min_yield_2,
1042 scm_default_max_segment_size
1043
1044respectively before callong scm_boot_guile.
1045
1046(See entry "New environment variables ..." in section
1047"Changes to the stand-alone interpreter" above.)
1048
9704841c
MD
1049** scm_protect_object/scm_unprotect_object now nest
1050
67ef2dca
MD
1051This means that you can call scm_protect_object multiple times on an
1052object and count on the object being protected until
1053scm_unprotect_object has been call the same number of times.
1054
1055The functions also have better time complexity.
1056
1057Still, it is usually possible to structure the application in a way
1058that you don't need to use these functions. For example, if you use a
1059protected standard Guile list to keep track of live objects rather
1060than some custom data type, objects will die a natural death when they
1061are no longer needed.
1062
0a9e521f
MD
1063** Deprecated type tags: scm_tc16_flo, scm_tc_flo, scm_tc_dblr, scm_tc_dblc
1064
1065Guile does not provide the float representation for inexact real numbers any
1066more. Now, only doubles are used to represent inexact real numbers. Further,
1067the tag names scm_tc_dblr and scm_tc_dblc have been changed to scm_tc16_real
1068and scm_tc16_complex, respectively.
1069
341f78c9
MD
1070** Removed deprecated type scm_smobfuns
1071
1072** Removed deprecated function scm_newsmob
1073
b5074b23
MD
1074** Warning: scm_make_smob_type_mfpe might become deprecated in a future release
1075
1076There is an ongoing discussion among the developers whether to
1077deprecate `scm_make_smob_type_mfpe' or not. Please use the current
1078standard interface (scm_make_smob_type, scm_set_smob_XXX) in new code
1079until this issue has been settled.
1080
341f78c9
MD
1081** Removed deprecated type tag scm_tc16_kw
1082
2728d7f4
MD
1083** Added type tag scm_tc16_keyword
1084
1085(This was introduced already in release 1.3.4 but was not documented
1086 until now.)
1087
67ef2dca
MD
1088** gdb_print now prints "*** Guile not initialized ***" until Guile initialized
1089
f25f761d
GH
1090* Changes to system call interfaces:
1091
28d77376
GH
1092** The "select" procedure now tests port buffers for the ability to
1093provide input or accept output. Previously only the underlying file
1094descriptors were checked.
1095
bd9e24b3
GH
1096** New variable PIPE_BUF: the maximum number of bytes that can be
1097atomically written to a pipe.
1098
f25f761d
GH
1099** If a facility is not available on the system when Guile is
1100compiled, the corresponding primitive procedure will not be defined.
1101Previously it would have been defined but would throw a system-error
1102exception if called. Exception handlers which catch this case may
1103need minor modification: an error will be thrown with key
1104'unbound-variable instead of 'system-error. Alternatively it's
1105now possible to use `defined?' to check whether the facility is
1106available.
1107
38c1d3c4
GH
1108** Procedures which depend on the timezone should now give the correct
1109result on systems which cache the TZ environment variable, even if TZ
1110is changed without calling tzset.
1111
5c11cc9d
GH
1112* Changes to the networking interfaces:
1113
1114** New functions: htons, ntohs, htonl, ntohl: for converting short and
1115long integers between network and host format. For now, it's not
1116particularly convenient to do this kind of thing, but consider:
1117
1118(define write-network-long
1119 (lambda (value port)
1120 (let ((v (make-uniform-vector 1 1 0)))
1121 (uniform-vector-set! v 0 (htonl value))
1122 (uniform-vector-write v port))))
1123
1124(define read-network-long
1125 (lambda (port)
1126 (let ((v (make-uniform-vector 1 1 0)))
1127 (uniform-vector-read! v port)
1128 (ntohl (uniform-vector-ref v 0)))))
1129
1130** If inet-aton fails, it now throws an error with key 'misc-error
1131instead of 'system-error, since errno is not relevant.
1132
1133** Certain gethostbyname/gethostbyaddr failures now throw errors with
1134specific keys instead of 'system-error. The latter is inappropriate
1135since errno will not have been set. The keys are:
afe5177e 1136'host-not-found, 'try-again, 'no-recovery and 'no-data.
5c11cc9d
GH
1137
1138** sethostent, setnetent, setprotoent, setservent: now take an
1139optional argument STAYOPEN, which specifies whether the database
1140remains open after a database entry is accessed randomly (e.g., using
1141gethostbyname for the hosts database.) The default is #f. Previously
1142#t was always used.
1143
cc36e791 1144\f
43fa9a05
JB
1145Changes since Guile 1.3.2:
1146
0fdcbcaa
MD
1147* Changes to the stand-alone interpreter
1148
1149** Debugger
1150
1151An initial version of the Guile debugger written by Chris Hanson has
1152been added. The debugger is still under development but is included
1153in the distribution anyway since it is already quite useful.
1154
1155Type
1156
1157 (debug)
1158
1159after an error to enter the debugger. Type `help' inside the debugger
1160for a description of available commands.
1161
1162If you prefer to have stack frames numbered and printed in
1163anti-chronological order and prefer up in the stack to be down on the
1164screen as is the case in gdb, you can put
1165
1166 (debug-enable 'backwards)
1167
1168in your .guile startup file. (However, this means that Guile can't
1169use indentation to indicate stack level.)
1170
1171The debugger is autoloaded into Guile at the first use.
1172
1173** Further enhancements to backtraces
1174
1175There is a new debug option `width' which controls the maximum width
1176on the screen of printed stack frames. Fancy printing parameters
1177("level" and "length" as in Common LISP) are adaptively adjusted for
1178each stack frame to give maximum information while still fitting
1179within the bounds. If the stack frame can't be made to fit by
1180adjusting parameters, it is simply cut off at the end. This is marked
1181with a `$'.
1182
1183** Some modules are now only loaded when the repl is started
1184
1185The modules (ice-9 debug), (ice-9 session), (ice-9 threads) and (ice-9
1186regex) are now loaded into (guile-user) only if the repl has been
1187started. The effect is that the startup time for scripts has been
1188reduced to 30% of what it was previously.
1189
1190Correctly written scripts load the modules they require at the top of
1191the file and should not be affected by this change.
1192
ece41168
MD
1193** Hooks are now represented as smobs
1194
6822fe53
MD
1195* Changes to Scheme functions and syntax
1196
0ce204b0
MV
1197** Readline support has changed again.
1198
1199The old (readline-activator) module is gone. Use (ice-9 readline)
1200instead, which now contains all readline functionality. So the code
1201to activate readline is now
1202
1203 (use-modules (ice-9 readline))
1204 (activate-readline)
1205
1206This should work at any time, including from the guile prompt.
1207
5d195868
JB
1208To avoid confusion about the terms of Guile's license, please only
1209enable readline for your personal use; please don't make it the
1210default for others. Here is why we make this rather odd-sounding
1211request:
1212
1213Guile is normally licensed under a weakened form of the GNU General
1214Public License, which allows you to link code with Guile without
1215placing that code under the GPL. This exception is important to some
1216people.
1217
1218However, since readline is distributed under the GNU General Public
1219License, when you link Guile with readline, either statically or
1220dynamically, you effectively change Guile's license to the strict GPL.
1221Whenever you link any strictly GPL'd code into Guile, uses of Guile
1222which are normally permitted become forbidden. This is a rather
1223non-obvious consequence of the licensing terms.
1224
1225So, to make sure things remain clear, please let people choose for
1226themselves whether to link GPL'd libraries like readline with Guile.
1227
25b0654e
JB
1228** regexp-substitute/global has changed slightly, but incompatibly.
1229
1230If you include a function in the item list, the string of the match
1231object it receives is the same string passed to
1232regexp-substitute/global, not some suffix of that string.
1233Correspondingly, the match's positions are relative to the entire
1234string, not the suffix.
1235
1236If the regexp can match the empty string, the way matches are chosen
1237from the string has changed. regexp-substitute/global recognizes the
1238same set of matches that list-matches does; see below.
1239
1240** New function: list-matches REGEXP STRING [FLAGS]
1241
1242Return a list of match objects, one for every non-overlapping, maximal
1243match of REGEXP in STRING. The matches appear in left-to-right order.
1244list-matches only reports matches of the empty string if there are no
1245other matches which begin on, end at, or include the empty match's
1246position.
1247
1248If present, FLAGS is passed as the FLAGS argument to regexp-exec.
1249
1250** New function: fold-matches REGEXP STRING INIT PROC [FLAGS]
1251
1252For each match of REGEXP in STRING, apply PROC to the match object,
1253and the last value PROC returned, or INIT for the first call. Return
1254the last value returned by PROC. We apply PROC to the matches as they
1255appear from left to right.
1256
1257This function recognizes matches according to the same criteria as
1258list-matches.
1259
1260Thus, you could define list-matches like this:
1261
1262 (define (list-matches regexp string . flags)
1263 (reverse! (apply fold-matches regexp string '() cons flags)))
1264
1265If present, FLAGS is passed as the FLAGS argument to regexp-exec.
1266
bc848f7f
MD
1267** Hooks
1268
1269*** New function: hook? OBJ
1270
1271Return #t if OBJ is a hook, otherwise #f.
1272
ece41168
MD
1273*** New function: make-hook-with-name NAME [ARITY]
1274
1275Return a hook with name NAME and arity ARITY. The default value for
1276ARITY is 0. The only effect of NAME is that it will appear when the
1277hook object is printed to ease debugging.
1278
bc848f7f
MD
1279*** New function: hook-empty? HOOK
1280
1281Return #t if HOOK doesn't contain any procedures, otherwise #f.
1282
1283*** New function: hook->list HOOK
1284
1285Return a list of the procedures that are called when run-hook is
1286applied to HOOK.
1287
b074884f
JB
1288** `map' signals an error if its argument lists are not all the same length.
1289
1290This is the behavior required by R5RS, so this change is really a bug
1291fix. But it seems to affect a lot of people's code, so we're
1292mentioning it here anyway.
1293
6822fe53
MD
1294** Print-state handling has been made more transparent
1295
1296Under certain circumstances, ports are represented as a port with an
1297associated print state. Earlier, this pair was represented as a pair
1298(see "Some magic has been added to the printer" below). It is now
1299indistinguishable (almost; see `get-print-state') from a port on the
1300user level.
1301
1302*** New function: port-with-print-state OUTPUT-PORT PRINT-STATE
1303
1304Return a new port with the associated print state PRINT-STATE.
1305
1306*** New function: get-print-state OUTPUT-PORT
1307
1308Return the print state associated with this port if it exists,
1309otherwise return #f.
1310
340a8770 1311*** New function: directory-stream? OBJECT
77242ff9 1312
340a8770 1313Returns true iff OBJECT is a directory stream --- the sort of object
77242ff9
GH
1314returned by `opendir'.
1315
0fdcbcaa
MD
1316** New function: using-readline?
1317
1318Return #t if readline is in use in the current repl.
1319
26405bc1
MD
1320** structs will be removed in 1.4
1321
1322Structs will be replaced in Guile 1.4. We will merge GOOPS into Guile
1323and use GOOPS objects as the fundamental record type.
1324
49199eaa
MD
1325* Changes to the scm_ interface
1326
26405bc1
MD
1327** structs will be removed in 1.4
1328
1329The entire current struct interface (struct.c, struct.h) will be
1330replaced in Guile 1.4. We will merge GOOPS into libguile and use
1331GOOPS objects as the fundamental record type.
1332
49199eaa
MD
1333** The internal representation of subr's has changed
1334
1335Instead of giving a hint to the subr name, the CAR field of the subr
1336now contains an index to a subr entry in scm_subr_table.
1337
1338*** New variable: scm_subr_table
1339
1340An array of subr entries. A subr entry contains the name, properties
1341and documentation associated with the subr. The properties and
1342documentation slots are not yet used.
1343
1344** A new scheme for "forwarding" calls to a builtin to a generic function
1345
1346It is now possible to extend the functionality of some Guile
1347primitives by letting them defer a call to a GOOPS generic function on
240ed66f 1348argument mismatch. This means that there is no loss of efficiency in
daf516d6 1349normal evaluation.
49199eaa
MD
1350
1351Example:
1352
daf516d6 1353 (use-modules (oop goops)) ; Must be GOOPS version 0.2.
49199eaa
MD
1354 (define-method + ((x <string>) (y <string>))
1355 (string-append x y))
1356
86a4d62e
MD
1357+ will still be as efficient as usual in numerical calculations, but
1358can also be used for concatenating strings.
49199eaa 1359
86a4d62e 1360Who will be the first one to extend Guile's numerical tower to
daf516d6
MD
1361rationals? :) [OK, there a few other things to fix before this can
1362be made in a clean way.]
49199eaa
MD
1363
1364*** New snarf macros for defining primitives: SCM_GPROC, SCM_GPROC1
1365
1366 New macro: SCM_GPROC (CNAME, SNAME, REQ, OPT, VAR, CFUNC, GENERIC)
1367
1368 New macro: SCM_GPROC1 (CNAME, SNAME, TYPE, CFUNC, GENERIC)
1369
d02cafe7 1370These do the same job as SCM_PROC and SCM_PROC1, but they also define
49199eaa
MD
1371a variable GENERIC which can be used by the dispatch macros below.
1372
1373[This is experimental code which may change soon.]
1374
1375*** New macros for forwarding control to a generic on arg type error
1376
1377 New macro: SCM_WTA_DISPATCH_1 (GENERIC, ARG1, POS, SUBR)
1378
1379 New macro: SCM_WTA_DISPATCH_2 (GENERIC, ARG1, ARG2, POS, SUBR)
1380
1381These correspond to the scm_wta function call, and have the same
1382behaviour until the user has called the GOOPS primitive
1383`enable-primitive-generic!'. After that, these macros will apply the
1384generic function GENERIC to the argument(s) instead of calling
1385scm_wta.
1386
1387[This is experimental code which may change soon.]
1388
1389*** New macros for argument testing with generic dispatch
1390
1391 New macro: SCM_GASSERT1 (COND, GENERIC, ARG1, POS, SUBR)
1392
1393 New macro: SCM_GASSERT2 (COND, GENERIC, ARG1, ARG2, POS, SUBR)
1394
1395These correspond to the SCM_ASSERT macro, but will defer control to
1396GENERIC on error after `enable-primitive-generic!' has been called.
1397
1398[This is experimental code which may change soon.]
1399
1400** New function: SCM scm_eval_body (SCM body, SCM env)
1401
1402Evaluates the body of a special form.
1403
1404** The internal representation of struct's has changed
1405
1406Previously, four slots were allocated for the procedure(s) of entities
1407and operators. The motivation for this representation had to do with
1408the structure of the evaluator, the wish to support tail-recursive
1409generic functions, and efficiency. Since the generic function
1410dispatch mechanism has changed, there is no longer a need for such an
1411expensive representation, and the representation has been simplified.
1412
1413This should not make any difference for most users.
1414
1415** GOOPS support has been cleaned up.
1416
1417Some code has been moved from eval.c to objects.c and code in both of
1418these compilation units has been cleaned up and better structured.
1419
1420*** New functions for applying generic functions
1421
1422 New function: SCM scm_apply_generic (GENERIC, ARGS)
1423 New function: SCM scm_call_generic_0 (GENERIC)
1424 New function: SCM scm_call_generic_1 (GENERIC, ARG1)
1425 New function: SCM scm_call_generic_2 (GENERIC, ARG1, ARG2)
1426 New function: SCM scm_call_generic_3 (GENERIC, ARG1, ARG2, ARG3)
1427
ece41168
MD
1428** Deprecated function: scm_make_named_hook
1429
1430It is now replaced by:
1431
1432** New function: SCM scm_create_hook (const char *name, int arity)
1433
1434Creates a hook in the same way as make-hook above but also
1435binds a variable named NAME to it.
1436
1437This is the typical way of creating a hook from C code.
1438
1439Currently, the variable is created in the "current" module.
1440This might change when we get the new module system.
1441
1442[The behaviour is identical to scm_make_named_hook.]
1443
1444
43fa9a05 1445\f
f3227c7a
JB
1446Changes since Guile 1.3:
1447
6ca345f3
JB
1448* Changes to mailing lists
1449
1450** Some of the Guile mailing lists have moved to sourceware.cygnus.com.
1451
1452See the README file to find current addresses for all the Guile
1453mailing lists.
1454
d77fb593
JB
1455* Changes to the distribution
1456
1d335863
JB
1457** Readline support is no longer included with Guile by default.
1458
1459Based on the different license terms of Guile and Readline, we
1460concluded that Guile should not *by default* cause the linking of
1461Readline into an application program. Readline support is now offered
1462as a separate module, which is linked into an application only when
1463you explicitly specify it.
1464
1465Although Guile is GNU software, its distribution terms add a special
1466exception to the usual GNU General Public License (GPL). Guile's
1467license includes a clause that allows you to link Guile with non-free
1468programs. We add this exception so as not to put Guile at a
1469disadvantage vis-a-vis other extensibility packages that support other
1470languages.
1471
1472In contrast, the GNU Readline library is distributed under the GNU
1473General Public License pure and simple. This means that you may not
1474link Readline, even dynamically, into an application unless it is
1475distributed under a free software license that is compatible the GPL.
1476
1477Because of this difference in distribution terms, an application that
1478can use Guile may not be able to use Readline. Now users will be
1479explicitly offered two independent decisions about the use of these
1480two packages.
d77fb593 1481
0e8a8468
MV
1482You can activate the readline support by issuing
1483
1484 (use-modules (readline-activator))
1485 (activate-readline)
1486
1487from your ".guile" file, for example.
1488
e4eae9b1
MD
1489* Changes to the stand-alone interpreter
1490
67ad463a
MD
1491** All builtins now print as primitives.
1492Previously builtin procedures not belonging to the fundamental subr
1493types printed as #<compiled closure #<primitive-procedure gsubr-apply>>.
1494Now, they print as #<primitive-procedure NAME>.
1495
1496** Backtraces slightly more intelligible.
1497gsubr-apply and macro transformer application frames no longer appear
1498in backtraces.
1499
69c6acbb
JB
1500* Changes to Scheme functions and syntax
1501
2a52b429
MD
1502** Guile now correctly handles internal defines by rewriting them into
1503their equivalent letrec. Previously, internal defines would
1504incrementally add to the innermost environment, without checking
1505whether the restrictions specified in RnRS were met. This lead to the
1506correct behaviour when these restriction actually were met, but didn't
1507catch all illegal uses. Such an illegal use could lead to crashes of
1508the Guile interpreter or or other unwanted results. An example of
1509incorrect internal defines that made Guile behave erratically:
1510
1511 (let ()
1512 (define a 1)
1513 (define (b) a)
1514 (define c (1+ (b)))
1515 (define d 3)
1516
1517 (b))
1518
1519 => 2
1520
1521The problem with this example is that the definition of `c' uses the
1522value of `b' directly. This confuses the meoization machine of Guile
1523so that the second call of `b' (this time in a larger environment that
1524also contains bindings for `c' and `d') refers to the binding of `c'
1525instead of `a'. You could also make Guile crash with a variation on
1526this theme:
1527
1528 (define (foo flag)
1529 (define a 1)
1530 (define (b flag) (if flag a 1))
1531 (define c (1+ (b flag)))
1532 (define d 3)
1533
1534 (b #t))
1535
1536 (foo #f)
1537 (foo #t)
1538
1539From now on, Guile will issue an `Unbound variable: b' error message
1540for both examples.
1541
36d3d540
MD
1542** Hooks
1543
1544A hook contains a list of functions which should be called on
1545particular occasions in an existing program. Hooks are used for
1546customization.
1547
1548A window manager might have a hook before-window-map-hook. The window
1549manager uses the function run-hooks to call all functions stored in
1550before-window-map-hook each time a window is mapped. The user can
1551store functions in the hook using add-hook!.
1552
1553In Guile, hooks are first class objects.
1554
1555*** New function: make-hook [N_ARGS]
1556
1557Return a hook for hook functions which can take N_ARGS arguments.
1558The default value for N_ARGS is 0.
1559
ad91d6c3
MD
1560(See also scm_make_named_hook below.)
1561
36d3d540
MD
1562*** New function: add-hook! HOOK PROC [APPEND_P]
1563
1564Put PROC at the beginning of the list of functions stored in HOOK.
1565If APPEND_P is supplied, and non-false, put PROC at the end instead.
1566
1567PROC must be able to take the number of arguments specified when the
1568hook was created.
1569
1570If PROC already exists in HOOK, then remove it first.
1571
1572*** New function: remove-hook! HOOK PROC
1573
1574Remove PROC from the list of functions in HOOK.
1575
1576*** New function: reset-hook! HOOK
1577
1578Clear the list of hook functions stored in HOOK.
1579
1580*** New function: run-hook HOOK ARG1 ...
1581
1582Run all hook functions stored in HOOK with arguments ARG1 ... .
1583The number of arguments supplied must correspond to the number given
1584when the hook was created.
1585
56a19408
MV
1586** The function `dynamic-link' now takes optional keyword arguments.
1587 The only keyword argument that is currently defined is `:global
1588 BOOL'. With it, you can control whether the shared library will be
1589 linked in global mode or not. In global mode, the symbols from the
1590 linked library can be used to resolve references from other
1591 dynamically linked libraries. In non-global mode, the linked
1592 library is essentially invisible and can only be accessed via
1593 `dynamic-func', etc. The default is now to link in global mode.
1594 Previously, the default has been non-global mode.
1595
1596 The `#:global' keyword is only effective on platforms that support
1597 the dlopen family of functions.
1598
ad226f25 1599** New function `provided?'
b7e13f65
JB
1600
1601 - Function: provided? FEATURE
1602 Return true iff FEATURE is supported by this installation of
1603 Guile. FEATURE must be a symbol naming a feature; the global
1604 variable `*features*' is a list of available features.
1605
ad226f25
JB
1606** Changes to the module (ice-9 expect):
1607
1608*** The expect-strings macro now matches `$' in a regular expression
1609 only at a line-break or end-of-file by default. Previously it would
ab711359
JB
1610 match the end of the string accumulated so far. The old behaviour
1611 can be obtained by setting the variable `expect-strings-exec-flags'
1612 to 0.
ad226f25
JB
1613
1614*** The expect-strings macro now uses a variable `expect-strings-exec-flags'
1615 for the regexp-exec flags. If `regexp/noteol' is included, then `$'
1616 in a regular expression will still match before a line-break or
1617 end-of-file. The default is `regexp/noteol'.
1618
1619*** The expect-strings macro now uses a variable
1620 `expect-strings-compile-flags' for the flags to be supplied to
1621 `make-regexp'. The default is `regexp/newline', which was previously
1622 hard-coded.
1623
1624*** The expect macro now supplies two arguments to a match procedure:
ab711359
JB
1625 the current accumulated string and a flag to indicate whether
1626 end-of-file has been reached. Previously only the string was supplied.
1627 If end-of-file is reached, the match procedure will be called an
1628 additional time with the same accumulated string as the previous call
1629 but with the flag set.
ad226f25 1630
b7e13f65
JB
1631** New module (ice-9 format), implementing the Common Lisp `format' function.
1632
1633This code, and the documentation for it that appears here, was
1634borrowed from SLIB, with minor adaptations for Guile.
1635
1636 - Function: format DESTINATION FORMAT-STRING . ARGUMENTS
1637 An almost complete implementation of Common LISP format description
1638 according to the CL reference book `Common LISP' from Guy L.
1639 Steele, Digital Press. Backward compatible to most of the
1640 available Scheme format implementations.
1641
1642 Returns `#t', `#f' or a string; has side effect of printing
1643 according to FORMAT-STRING. If DESTINATION is `#t', the output is
1644 to the current output port and `#t' is returned. If DESTINATION
1645 is `#f', a formatted string is returned as the result of the call.
1646 NEW: If DESTINATION is a string, DESTINATION is regarded as the
1647 format string; FORMAT-STRING is then the first argument and the
1648 output is returned as a string. If DESTINATION is a number, the
1649 output is to the current error port if available by the
1650 implementation. Otherwise DESTINATION must be an output port and
1651 `#t' is returned.
1652
1653 FORMAT-STRING must be a string. In case of a formatting error
1654 format returns `#f' and prints a message on the current output or
1655 error port. Characters are output as if the string were output by
1656 the `display' function with the exception of those prefixed by a
1657 tilde (~). For a detailed description of the FORMAT-STRING syntax
1658 please consult a Common LISP format reference manual. For a test
1659 suite to verify this format implementation load `formatst.scm'.
1660 Please send bug reports to `lutzeb@cs.tu-berlin.de'.
1661
1662 Note: `format' is not reentrant, i.e. only one `format'-call may
1663 be executed at a time.
1664
1665
1666*** Format Specification (Format version 3.0)
1667
1668 Please consult a Common LISP format reference manual for a detailed
1669description of the format string syntax. For a demonstration of the
1670implemented directives see `formatst.scm'.
1671
1672 This implementation supports directive parameters and modifiers (`:'
1673and `@' characters). Multiple parameters must be separated by a comma
1674(`,'). Parameters can be numerical parameters (positive or negative),
1675character parameters (prefixed by a quote character (`''), variable
1676parameters (`v'), number of rest arguments parameter (`#'), empty and
1677default parameters. Directive characters are case independent. The
1678general form of a directive is:
1679
1680DIRECTIVE ::= ~{DIRECTIVE-PARAMETER,}[:][@]DIRECTIVE-CHARACTER
1681
1682DIRECTIVE-PARAMETER ::= [ [-|+]{0-9}+ | 'CHARACTER | v | # ]
1683
1684*** Implemented CL Format Control Directives
1685
1686 Documentation syntax: Uppercase characters represent the
1687corresponding control directive characters. Lowercase characters
1688represent control directive parameter descriptions.
1689
1690`~A'
1691 Any (print as `display' does).
1692 `~@A'
1693 left pad.
1694
1695 `~MINCOL,COLINC,MINPAD,PADCHARA'
1696 full padding.
1697
1698`~S'
1699 S-expression (print as `write' does).
1700 `~@S'
1701 left pad.
1702
1703 `~MINCOL,COLINC,MINPAD,PADCHARS'
1704 full padding.
1705
1706`~D'
1707 Decimal.
1708 `~@D'
1709 print number sign always.
1710
1711 `~:D'
1712 print comma separated.
1713
1714 `~MINCOL,PADCHAR,COMMACHARD'
1715 padding.
1716
1717`~X'
1718 Hexadecimal.
1719 `~@X'
1720 print number sign always.
1721
1722 `~:X'
1723 print comma separated.
1724
1725 `~MINCOL,PADCHAR,COMMACHARX'
1726 padding.
1727
1728`~O'
1729 Octal.
1730 `~@O'
1731 print number sign always.
1732
1733 `~:O'
1734 print comma separated.
1735
1736 `~MINCOL,PADCHAR,COMMACHARO'
1737 padding.
1738
1739`~B'
1740 Binary.
1741 `~@B'
1742 print number sign always.
1743
1744 `~:B'
1745 print comma separated.
1746
1747 `~MINCOL,PADCHAR,COMMACHARB'
1748 padding.
1749
1750`~NR'
1751 Radix N.
1752 `~N,MINCOL,PADCHAR,COMMACHARR'
1753 padding.
1754
1755`~@R'
1756 print a number as a Roman numeral.
1757
1758`~:@R'
1759 print a number as an "old fashioned" Roman numeral.
1760
1761`~:R'
1762 print a number as an ordinal English number.
1763
1764`~:@R'
1765 print a number as a cardinal English number.
1766
1767`~P'
1768 Plural.
1769 `~@P'
1770 prints `y' and `ies'.
1771
1772 `~:P'
1773 as `~P but jumps 1 argument backward.'
1774
1775 `~:@P'
1776 as `~@P but jumps 1 argument backward.'
1777
1778`~C'
1779 Character.
1780 `~@C'
1781 prints a character as the reader can understand it (i.e. `#\'
1782 prefixing).
1783
1784 `~:C'
1785 prints a character as emacs does (eg. `^C' for ASCII 03).
1786
1787`~F'
1788 Fixed-format floating-point (prints a flonum like MMM.NNN).
1789 `~WIDTH,DIGITS,SCALE,OVERFLOWCHAR,PADCHARF'
1790 `~@F'
1791 If the number is positive a plus sign is printed.
1792
1793`~E'
1794 Exponential floating-point (prints a flonum like MMM.NNN`E'EE).
1795 `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARE'
1796 `~@E'
1797 If the number is positive a plus sign is printed.
1798
1799`~G'
1800 General floating-point (prints a flonum either fixed or
1801 exponential).
1802 `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARG'
1803 `~@G'
1804 If the number is positive a plus sign is printed.
1805
1806`~$'
1807 Dollars floating-point (prints a flonum in fixed with signs
1808 separated).
1809 `~DIGITS,SCALE,WIDTH,PADCHAR$'
1810 `~@$'
1811 If the number is positive a plus sign is printed.
1812
1813 `~:@$'
1814 A sign is always printed and appears before the padding.
1815
1816 `~:$'
1817 The sign appears before the padding.
1818
1819`~%'
1820 Newline.
1821 `~N%'
1822 print N newlines.
1823
1824`~&'
1825 print newline if not at the beginning of the output line.
1826 `~N&'
1827 prints `~&' and then N-1 newlines.
1828
1829`~|'
1830 Page Separator.
1831 `~N|'
1832 print N page separators.
1833
1834`~~'
1835 Tilde.
1836 `~N~'
1837 print N tildes.
1838
1839`~'<newline>
1840 Continuation Line.
1841 `~:'<newline>
1842 newline is ignored, white space left.
1843
1844 `~@'<newline>
1845 newline is left, white space ignored.
1846
1847`~T'
1848 Tabulation.
1849 `~@T'
1850 relative tabulation.
1851
1852 `~COLNUM,COLINCT'
1853 full tabulation.
1854
1855`~?'
1856 Indirection (expects indirect arguments as a list).
1857 `~@?'
1858 extracts indirect arguments from format arguments.
1859
1860`~(STR~)'
1861 Case conversion (converts by `string-downcase').
1862 `~:(STR~)'
1863 converts by `string-capitalize'.
1864
1865 `~@(STR~)'
1866 converts by `string-capitalize-first'.
1867
1868 `~:@(STR~)'
1869 converts by `string-upcase'.
1870
1871`~*'
1872 Argument Jumping (jumps 1 argument forward).
1873 `~N*'
1874 jumps N arguments forward.
1875
1876 `~:*'
1877 jumps 1 argument backward.
1878
1879 `~N:*'
1880 jumps N arguments backward.
1881
1882 `~@*'
1883 jumps to the 0th argument.
1884
1885 `~N@*'
1886 jumps to the Nth argument (beginning from 0)
1887
1888`~[STR0~;STR1~;...~;STRN~]'
1889 Conditional Expression (numerical clause conditional).
1890 `~N['
1891 take argument from N.
1892
1893 `~@['
1894 true test conditional.
1895
1896 `~:['
1897 if-else-then conditional.
1898
1899 `~;'
1900 clause separator.
1901
1902 `~:;'
1903 default clause follows.
1904
1905`~{STR~}'
1906 Iteration (args come from the next argument (a list)).
1907 `~N{'
1908 at most N iterations.
1909
1910 `~:{'
1911 args from next arg (a list of lists).
1912
1913 `~@{'
1914 args from the rest of arguments.
1915
1916 `~:@{'
1917 args from the rest args (lists).
1918
1919`~^'
1920 Up and out.
1921 `~N^'
1922 aborts if N = 0
1923
1924 `~N,M^'
1925 aborts if N = M
1926
1927 `~N,M,K^'
1928 aborts if N <= M <= K
1929
1930*** Not Implemented CL Format Control Directives
1931
1932`~:A'
1933 print `#f' as an empty list (see below).
1934
1935`~:S'
1936 print `#f' as an empty list (see below).
1937
1938`~<~>'
1939 Justification.
1940
1941`~:^'
1942 (sorry I don't understand its semantics completely)
1943
1944*** Extended, Replaced and Additional Control Directives
1945
1946`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHD'
1947`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHX'
1948`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHO'
1949`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHB'
1950`~N,MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHR'
1951 COMMAWIDTH is the number of characters between two comma
1952 characters.
1953
1954`~I'
1955 print a R4RS complex number as `~F~@Fi' with passed parameters for
1956 `~F'.
1957
1958`~Y'
1959 Pretty print formatting of an argument for scheme code lists.
1960
1961`~K'
1962 Same as `~?.'
1963
1964`~!'
1965 Flushes the output if format DESTINATION is a port.
1966
1967`~_'
1968 Print a `#\space' character
1969 `~N_'
1970 print N `#\space' characters.
1971
1972`~/'
1973 Print a `#\tab' character
1974 `~N/'
1975 print N `#\tab' characters.
1976
1977`~NC'
1978 Takes N as an integer representation for a character. No arguments
1979 are consumed. N is converted to a character by `integer->char'. N
1980 must be a positive decimal number.
1981
1982`~:S'
1983 Print out readproof. Prints out internal objects represented as
1984 `#<...>' as strings `"#<...>"' so that the format output can always
1985 be processed by `read'.
1986
1987`~:A'
1988 Print out readproof. Prints out internal objects represented as
1989 `#<...>' as strings `"#<...>"' so that the format output can always
1990 be processed by `read'.
1991
1992`~Q'
1993 Prints information and a copyright notice on the format
1994 implementation.
1995 `~:Q'
1996 prints format version.
1997
1998`~F, ~E, ~G, ~$'
1999 may also print number strings, i.e. passing a number as a string
2000 and format it accordingly.
2001
2002*** Configuration Variables
2003
2004 The format module exports some configuration variables to suit the
2005systems and users needs. There should be no modification necessary for
2006the configuration that comes with Guile. Format detects automatically
2007if the running scheme system implements floating point numbers and
2008complex numbers.
2009
2010format:symbol-case-conv
2011 Symbols are converted by `symbol->string' so the case type of the
2012 printed symbols is implementation dependent.
2013 `format:symbol-case-conv' is a one arg closure which is either
2014 `#f' (no conversion), `string-upcase', `string-downcase' or
2015 `string-capitalize'. (default `#f')
2016
2017format:iobj-case-conv
2018 As FORMAT:SYMBOL-CASE-CONV but applies for the representation of
2019 implementation internal objects. (default `#f')
2020
2021format:expch
2022 The character prefixing the exponent value in `~E' printing.
2023 (default `#\E')
2024
2025*** Compatibility With Other Format Implementations
2026
2027SLIB format 2.x:
2028 See `format.doc'.
2029
2030SLIB format 1.4:
2031 Downward compatible except for padding support and `~A', `~S',
2032 `~P', `~X' uppercase printing. SLIB format 1.4 uses C-style
2033 `printf' padding support which is completely replaced by the CL
2034 `format' padding style.
2035
2036MIT C-Scheme 7.1:
2037 Downward compatible except for `~', which is not documented
2038 (ignores all characters inside the format string up to a newline
2039 character). (7.1 implements `~a', `~s', ~NEWLINE, `~~', `~%',
2040 numerical and variable parameters and `:/@' modifiers in the CL
2041 sense).
2042
2043Elk 1.5/2.0:
2044 Downward compatible except for `~A' and `~S' which print in
2045 uppercase. (Elk implements `~a', `~s', `~~', and `~%' (no
2046 directive parameters or modifiers)).
2047
2048Scheme->C 01nov91:
2049 Downward compatible except for an optional destination parameter:
2050 S2C accepts a format call without a destination which returns a
2051 formatted string. This is equivalent to a #f destination in S2C.
2052 (S2C implements `~a', `~s', `~c', `~%', and `~~' (no directive
2053 parameters or modifiers)).
2054
2055
e7d37b0a 2056** Changes to string-handling functions.
b7e13f65 2057
e7d37b0a 2058These functions were added to support the (ice-9 format) module, above.
b7e13f65 2059
e7d37b0a
JB
2060*** New function: string-upcase STRING
2061*** New function: string-downcase STRING
b7e13f65 2062
e7d37b0a
JB
2063These are non-destructive versions of the existing string-upcase! and
2064string-downcase! functions.
b7e13f65 2065
e7d37b0a
JB
2066*** New function: string-capitalize! STRING
2067*** New function: string-capitalize STRING
2068
2069These functions convert the first letter of each word in the string to
2070upper case. Thus:
2071
2072 (string-capitalize "howdy there")
2073 => "Howdy There"
2074
2075As with the other functions, string-capitalize! modifies the string in
2076place, while string-capitalize returns a modified copy of its argument.
2077
2078*** New function: string-ci->symbol STRING
2079
2080Return a symbol whose name is STRING, but having the same case as if
2081the symbol had be read by `read'.
2082
2083Guile can be configured to be sensitive or insensitive to case
2084differences in Scheme identifiers. If Guile is case-insensitive, all
2085symbols are converted to lower case on input. The `string-ci->symbol'
2086function returns a symbol whose name in STRING, transformed as Guile
2087would if STRING were input.
2088
2089*** New function: substring-move! STRING1 START END STRING2 START
2090
2091Copy the substring of STRING1 from START (inclusive) to END
2092(exclusive) to STRING2 at START. STRING1 and STRING2 may be the same
2093string, and the source and destination areas may overlap; in all
2094cases, the function behaves as if all the characters were copied
2095simultanously.
2096
2097*** Extended functions: substring-move-left! substring-move-right!
2098
2099These functions now correctly copy arbitrarily overlapping substrings;
2100they are both synonyms for substring-move!.
b7e13f65 2101
b7e13f65 2102
deaceb4e
JB
2103** New module (ice-9 getopt-long), with the function `getopt-long'.
2104
2105getopt-long is a function for parsing command-line arguments in a
2106manner consistent with other GNU programs.
2107
2108(getopt-long ARGS GRAMMAR)
2109Parse the arguments ARGS according to the argument list grammar GRAMMAR.
2110
2111ARGS should be a list of strings. Its first element should be the
2112name of the program; subsequent elements should be the arguments
2113that were passed to the program on the command line. The
2114`program-arguments' procedure returns a list of this form.
2115
2116GRAMMAR is a list of the form:
2117((OPTION (PROPERTY VALUE) ...) ...)
2118
2119Each OPTION should be a symbol. `getopt-long' will accept a
2120command-line option named `--OPTION'.
2121Each option can have the following (PROPERTY VALUE) pairs:
2122
2123 (single-char CHAR) --- Accept `-CHAR' as a single-character
2124 equivalent to `--OPTION'. This is how to specify traditional
2125 Unix-style flags.
2126 (required? BOOL) --- If BOOL is true, the option is required.
2127 getopt-long will raise an error if it is not found in ARGS.
2128 (value BOOL) --- If BOOL is #t, the option accepts a value; if
2129 it is #f, it does not; and if it is the symbol
2130 `optional', the option may appear in ARGS with or
2131 without a value.
2132 (predicate FUNC) --- If the option accepts a value (i.e. you
2133 specified `(value #t)' for this option), then getopt
2134 will apply FUNC to the value, and throw an exception
2135 if it returns #f. FUNC should be a procedure which
2136 accepts a string and returns a boolean value; you may
2137 need to use quasiquotes to get it into GRAMMAR.
2138
2139The (PROPERTY VALUE) pairs may occur in any order, but each
2140property may occur only once. By default, options do not have
2141single-character equivalents, are not required, and do not take
2142values.
2143
2144In ARGS, single-character options may be combined, in the usual
2145Unix fashion: ("-x" "-y") is equivalent to ("-xy"). If an option
2146accepts values, then it must be the last option in the
2147combination; the value is the next argument. So, for example, using
2148the following grammar:
2149 ((apples (single-char #\a))
2150 (blimps (single-char #\b) (value #t))
2151 (catalexis (single-char #\c) (value #t)))
2152the following argument lists would be acceptable:
2153 ("-a" "-b" "bang" "-c" "couth") ("bang" and "couth" are the values
2154 for "blimps" and "catalexis")
2155 ("-ab" "bang" "-c" "couth") (same)
2156 ("-ac" "couth" "-b" "bang") (same)
2157 ("-abc" "couth" "bang") (an error, since `-b' is not the
2158 last option in its combination)
2159
2160If an option's value is optional, then `getopt-long' decides
2161whether it has a value by looking at what follows it in ARGS. If
2162the next element is a string, and it does not appear to be an
2163option itself, then that string is the option's value.
2164
2165The value of a long option can appear as the next element in ARGS,
2166or it can follow the option name, separated by an `=' character.
2167Thus, using the same grammar as above, the following argument lists
2168are equivalent:
2169 ("--apples" "Braeburn" "--blimps" "Goodyear")
2170 ("--apples=Braeburn" "--blimps" "Goodyear")
2171 ("--blimps" "Goodyear" "--apples=Braeburn")
2172
2173If the option "--" appears in ARGS, argument parsing stops there;
2174subsequent arguments are returned as ordinary arguments, even if
2175they resemble options. So, in the argument list:
2176 ("--apples" "Granny Smith" "--" "--blimp" "Goodyear")
2177`getopt-long' will recognize the `apples' option as having the
2178value "Granny Smith", but it will not recognize the `blimp'
2179option; it will return the strings "--blimp" and "Goodyear" as
2180ordinary argument strings.
2181
2182The `getopt-long' function returns the parsed argument list as an
2183assocation list, mapping option names --- the symbols from GRAMMAR
2184--- onto their values, or #t if the option does not accept a value.
2185Unused options do not appear in the alist.
2186
2187All arguments that are not the value of any option are returned
2188as a list, associated with the empty list.
2189
2190`getopt-long' throws an exception if:
2191- it finds an unrecognized option in ARGS
2192- a required option is omitted
2193- an option that requires an argument doesn't get one
2194- an option that doesn't accept an argument does get one (this can
2195 only happen using the long option `--opt=value' syntax)
2196- an option predicate fails
2197
2198So, for example:
2199
2200(define grammar
2201 `((lockfile-dir (required? #t)
2202 (value #t)
2203 (single-char #\k)
2204 (predicate ,file-is-directory?))
2205 (verbose (required? #f)
2206 (single-char #\v)
2207 (value #f))
2208 (x-includes (single-char #\x))
2209 (rnet-server (single-char #\y)
2210 (predicate ,string?))))
2211
2212(getopt-long '("my-prog" "-vk" "/tmp" "foo1" "--x-includes=/usr/include"
2213 "--rnet-server=lamprod" "--" "-fred" "foo2" "foo3")
2214 grammar)
2215=> ((() "foo1" "-fred" "foo2" "foo3")
2216 (rnet-server . "lamprod")
2217 (x-includes . "/usr/include")
2218 (lockfile-dir . "/tmp")
2219 (verbose . #t))
2220
2221** The (ice-9 getopt-gnu-style) module is obsolete; use (ice-9 getopt-long).
2222
2223It will be removed in a few releases.
2224
08394899
MS
2225** New syntax: lambda*
2226** New syntax: define*
2227** New syntax: define*-public
2228** New syntax: defmacro*
2229** New syntax: defmacro*-public
2230Guile now supports optional arguments.
2231
2232`lambda*', `define*', `define*-public', `defmacro*' and
2233`defmacro*-public' are identical to the non-* versions except that
2234they use an extended type of parameter list that has the following BNF
2235syntax (parentheses are literal, square brackets indicate grouping,
2236and `*', `+' and `?' have the usual meaning):
2237
2238 ext-param-list ::= ( [identifier]* [#&optional [ext-var-decl]+]?
2239 [#&key [ext-var-decl]+ [#&allow-other-keys]?]?
2240 [[#&rest identifier]|[. identifier]]? ) | [identifier]
2241
2242 ext-var-decl ::= identifier | ( identifier expression )
2243
2244The semantics are best illustrated with the following documentation
2245and examples for `lambda*':
2246
2247 lambda* args . body
2248 lambda extended for optional and keyword arguments
2249
2250 lambda* creates a procedure that takes optional arguments. These
2251 are specified by putting them inside brackets at the end of the
2252 paramater list, but before any dotted rest argument. For example,
2253 (lambda* (a b #&optional c d . e) '())
2254 creates a procedure with fixed arguments a and b, optional arguments c
2255 and d, and rest argument e. If the optional arguments are omitted
2256 in a call, the variables for them are unbound in the procedure. This
2257 can be checked with the bound? macro.
2258
2259 lambda* can also take keyword arguments. For example, a procedure
2260 defined like this:
2261 (lambda* (#&key xyzzy larch) '())
2262 can be called with any of the argument lists (#:xyzzy 11)
2263 (#:larch 13) (#:larch 42 #:xyzzy 19) (). Whichever arguments
2264 are given as keywords are bound to values.
2265
2266 Optional and keyword arguments can also be given default values
2267 which they take on when they are not present in a call, by giving a
2268 two-item list in place of an optional argument, for example in:
2269 (lambda* (foo #&optional (bar 42) #&key (baz 73)) (list foo bar baz))
2270 foo is a fixed argument, bar is an optional argument with default
2271 value 42, and baz is a keyword argument with default value 73.
2272 Default value expressions are not evaluated unless they are needed
2273 and until the procedure is called.
2274
2275 lambda* now supports two more special parameter list keywords.
2276
2277 lambda*-defined procedures now throw an error by default if a
2278 keyword other than one of those specified is found in the actual
2279 passed arguments. However, specifying #&allow-other-keys
2280 immediately after the kyword argument declarations restores the
2281 previous behavior of ignoring unknown keywords. lambda* also now
2282 guarantees that if the same keyword is passed more than once, the
2283 last one passed is the one that takes effect. For example,
2284 ((lambda* (#&key (heads 0) (tails 0)) (display (list heads tails)))
2285 #:heads 37 #:tails 42 #:heads 99)
2286 would result in (99 47) being displayed.
2287
2288 #&rest is also now provided as a synonym for the dotted syntax rest
2289 argument. The argument lists (a . b) and (a #&rest b) are equivalent in
2290 all respects to lambda*. This is provided for more similarity to DSSSL,
2291 MIT-Scheme and Kawa among others, as well as for refugees from other
2292 Lisp dialects.
2293
2294Further documentation may be found in the optargs.scm file itself.
2295
2296The optional argument module also exports the macros `let-optional',
2297`let-optional*', `let-keywords', `let-keywords*' and `bound?'. These
2298are not documented here because they may be removed in the future, but
2299full documentation is still available in optargs.scm.
2300
2e132553
JB
2301** New syntax: and-let*
2302Guile now supports the `and-let*' form, described in the draft SRFI-2.
2303
2304Syntax: (land* (<clause> ...) <body> ...)
2305Each <clause> should have one of the following forms:
2306 (<variable> <expression>)
2307 (<expression>)
2308 <bound-variable>
2309Each <variable> or <bound-variable> should be an identifier. Each
2310<expression> should be a valid expression. The <body> should be a
2311possibly empty sequence of expressions, like the <body> of a
2312lambda form.
2313
2314Semantics: A LAND* expression is evaluated by evaluating the
2315<expression> or <bound-variable> of each of the <clause>s from
2316left to right. The value of the first <expression> or
2317<bound-variable> that evaluates to a false value is returned; the
2318remaining <expression>s and <bound-variable>s are not evaluated.
2319The <body> forms are evaluated iff all the <expression>s and
2320<bound-variable>s evaluate to true values.
2321
2322The <expression>s and the <body> are evaluated in an environment
2323binding each <variable> of the preceding (<variable> <expression>)
2324clauses to the value of the <expression>. Later bindings
2325shadow earlier bindings.
2326
2327Guile's and-let* macro was contributed by Michael Livshin.
2328
36d3d540
MD
2329** New sorting functions
2330
2331*** New function: sorted? SEQUENCE LESS?
ed8c8636
MD
2332Returns `#t' when the sequence argument is in non-decreasing order
2333according to LESS? (that is, there is no adjacent pair `... x y
2334...' for which `(less? y x)').
2335
2336Returns `#f' when the sequence contains at least one out-of-order
2337pair. It is an error if the sequence is neither a list nor a
2338vector.
2339
36d3d540 2340*** New function: merge LIST1 LIST2 LESS?
ed8c8636
MD
2341LIST1 and LIST2 are sorted lists.
2342Returns the sorted list of all elements in LIST1 and LIST2.
2343
2344Assume that the elements a and b1 in LIST1 and b2 in LIST2 are "equal"
2345in the sense that (LESS? x y) --> #f for x, y in {a, b1, b2},
2346and that a < b1 in LIST1. Then a < b1 < b2 in the result.
2347(Here "<" should read "comes before".)
2348
36d3d540 2349*** New procedure: merge! LIST1 LIST2 LESS?
ed8c8636
MD
2350Merges two lists, re-using the pairs of LIST1 and LIST2 to build
2351the result. If the code is compiled, and LESS? constructs no new
2352pairs, no pairs at all will be allocated. The first pair of the
2353result will be either the first pair of LIST1 or the first pair of
2354LIST2.
2355
36d3d540 2356*** New function: sort SEQUENCE LESS?
ed8c8636
MD
2357Accepts either a list or a vector, and returns a new sequence
2358which is sorted. The new sequence is the same type as the input.
2359Always `(sorted? (sort sequence less?) less?)'. The original
2360sequence is not altered in any way. The new sequence shares its
2361elements with the old one; no elements are copied.
2362
36d3d540 2363*** New procedure: sort! SEQUENCE LESS
ed8c8636
MD
2364Returns its sorted result in the original boxes. No new storage is
2365allocated at all. Proper usage: (set! slist (sort! slist <))
2366
36d3d540 2367*** New function: stable-sort SEQUENCE LESS?
ed8c8636
MD
2368Similar to `sort' but stable. That is, if "equal" elements are
2369ordered a < b in the original sequence, they will have the same order
2370in the result.
2371
36d3d540 2372*** New function: stable-sort! SEQUENCE LESS?
ed8c8636
MD
2373Similar to `sort!' but stable.
2374Uses temporary storage when sorting vectors.
2375
36d3d540 2376*** New functions: sort-list, sort-list!
ed8c8636
MD
2377Added for compatibility with scsh.
2378
36d3d540
MD
2379** New built-in random number support
2380
2381*** New function: random N [STATE]
3e8370c3
MD
2382Accepts a positive integer or real N and returns a number of the
2383same type between zero (inclusive) and N (exclusive). The values
2384returned have a uniform distribution.
2385
2386The optional argument STATE must be of the type produced by
416075f1
MD
2387`copy-random-state' or `seed->random-state'. It defaults to the value
2388of the variable `*random-state*'. This object is used to maintain the
2389state of the pseudo-random-number generator and is altered as a side
2390effect of the `random' operation.
3e8370c3 2391
36d3d540 2392*** New variable: *random-state*
3e8370c3
MD
2393Holds a data structure that encodes the internal state of the
2394random-number generator that `random' uses by default. The nature
2395of this data structure is implementation-dependent. It may be
2396printed out and successfully read back in, but may or may not
2397function correctly as a random-number state object in another
2398implementation.
2399
36d3d540 2400*** New function: copy-random-state [STATE]
3e8370c3
MD
2401Returns a new object of type suitable for use as the value of the
2402variable `*random-state*' and as a second argument to `random'.
2403If argument STATE is given, a copy of it is returned. Otherwise a
2404copy of `*random-state*' is returned.
416075f1 2405
36d3d540 2406*** New function: seed->random-state SEED
416075f1
MD
2407Returns a new object of type suitable for use as the value of the
2408variable `*random-state*' and as a second argument to `random'.
2409SEED is a string or a number. A new state is generated and
2410initialized using SEED.
3e8370c3 2411
36d3d540 2412*** New function: random:uniform [STATE]
3e8370c3
MD
2413Returns an uniformly distributed inexact real random number in the
2414range between 0 and 1.
2415
36d3d540 2416*** New procedure: random:solid-sphere! VECT [STATE]
3e8370c3
MD
2417Fills VECT with inexact real random numbers the sum of whose
2418squares is less than 1.0. Thinking of VECT as coordinates in
2419space of dimension N = `(vector-length VECT)', the coordinates are
2420uniformly distributed within the unit N-shere. The sum of the
2421squares of the numbers is returned. VECT can be either a vector
2422or a uniform vector of doubles.
2423
36d3d540 2424*** New procedure: random:hollow-sphere! VECT [STATE]
3e8370c3
MD
2425Fills VECT with inexact real random numbers the sum of whose squares
2426is equal to 1.0. Thinking of VECT as coordinates in space of
2427dimension n = `(vector-length VECT)', the coordinates are uniformly
2428distributed over the surface of the unit n-shere. VECT can be either
2429a vector or a uniform vector of doubles.
2430
36d3d540 2431*** New function: random:normal [STATE]
3e8370c3
MD
2432Returns an inexact real in a normal distribution with mean 0 and
2433standard deviation 1. For a normal distribution with mean M and
2434standard deviation D use `(+ M (* D (random:normal)))'.
2435
36d3d540 2436*** New procedure: random:normal-vector! VECT [STATE]
3e8370c3
MD
2437Fills VECT with inexact real random numbers which are independent and
2438standard normally distributed (i.e., with mean 0 and variance 1).
2439VECT can be either a vector or a uniform vector of doubles.
2440
36d3d540 2441*** New function: random:exp STATE
3e8370c3
MD
2442Returns an inexact real in an exponential distribution with mean 1.
2443For an exponential distribution with mean U use (* U (random:exp)).
2444
69c6acbb
JB
2445** The range of logand, logior, logxor, logtest, and logbit? have changed.
2446
2447These functions now operate on numbers in the range of a C unsigned
2448long.
2449
2450These functions used to operate on numbers in the range of a C signed
2451long; however, this seems inappropriate, because Guile integers don't
2452overflow.
2453
ba4ee0d6
MD
2454** New function: make-guardian
2455This is an implementation of guardians as described in
2456R. Kent Dybvig, Carl Bruggeman, and David Eby (1993) "Guardians in a
2457Generation-Based Garbage Collector" ACM SIGPLAN Conference on
2458Programming Language Design and Implementation, June 1993
2459ftp://ftp.cs.indiana.edu/pub/scheme-repository/doc/pubs/guardians.ps.gz
2460
88ceea5c
MD
2461** New functions: delq1!, delv1!, delete1!
2462These procedures behave similar to delq! and friends but delete only
2463one object if at all.
2464
55254a6a
MD
2465** New function: unread-string STRING PORT
2466Unread STRING to PORT, that is, push it back onto the port so that
2467next read operation will work on the pushed back characters.
2468
2469** unread-char can now be called multiple times
2470If unread-char is called multiple times, the unread characters will be
2471read again in last-in first-out order.
2472
9e97c52d
GH
2473** the procedures uniform-array-read! and uniform-array-write! now
2474work on any kind of port, not just ports which are open on a file.
2475
b074884f 2476** Now 'l' in a port mode requests line buffering.
9e97c52d 2477
69bc9ff3
GH
2478** The procedure truncate-file now works on string ports as well
2479as file ports. If the size argument is omitted, the current
1b9c3dae 2480file position is used.
9e97c52d 2481
c94577b4 2482** new procedure: seek PORT/FDES OFFSET WHENCE
9e97c52d
GH
2483The arguments are the same as for the old fseek procedure, but it
2484works on string ports as well as random-access file ports.
2485
2486** the fseek procedure now works on string ports, since it has been
c94577b4 2487redefined using seek.
9e97c52d
GH
2488
2489** the setvbuf procedure now uses a default size if mode is _IOFBF and
2490size is not supplied.
2491
2492** the newline procedure no longer flushes the port if it's not
2493line-buffered: previously it did if it was the current output port.
2494
2495** open-pipe and close-pipe are no longer primitive procedures, but
2496an emulation can be obtained using `(use-modules (ice-9 popen))'.
2497
2498** the freopen procedure has been removed.
2499
2500** new procedure: drain-input PORT
2501Drains PORT's read buffers (including any pushed-back characters)
2502and returns the contents as a single string.
2503
67ad463a 2504** New function: map-in-order PROC LIST1 LIST2 ...
d41b3904
MD
2505Version of `map' which guarantees that the procedure is applied to the
2506lists in serial order.
2507
67ad463a
MD
2508** Renamed `serial-array-copy!' and `serial-array-map!' to
2509`array-copy-in-order!' and `array-map-in-order!'. The old names are
2510now obsolete and will go away in release 1.5.
2511
cf7132b3 2512** New syntax: collect BODY1 ...
d41b3904
MD
2513Version of `begin' which returns a list of the results of the body
2514forms instead of the result of the last body form. In contrast to
cf7132b3 2515`begin', `collect' allows an empty body.
d41b3904 2516
e4eae9b1
MD
2517** New functions: read-history FILENAME, write-history FILENAME
2518Read/write command line history from/to file. Returns #t on success
2519and #f if an error occured.
2520
d21ffe26
JB
2521** `ls' and `lls' in module (ice-9 ls) now handle no arguments.
2522
2523These procedures return a list of definitions available in the specified
2524argument, a relative module reference. In the case of no argument,
2525`(current-module)' is now consulted for definitions to return, instead
2526of simply returning #f, the former behavior.
2527
f8c9d497
JB
2528** The #/ syntax for lists is no longer supported.
2529
2530Earlier versions of Scheme accepted this syntax, but printed a
2531warning.
2532
2533** Guile no longer consults the SCHEME_LOAD_PATH environment variable.
2534
2535Instead, you should set GUILE_LOAD_PATH to tell Guile where to find
2536modules.
2537
3ffc7a36
MD
2538* Changes to the gh_ interface
2539
2540** gh_scm2doubles
2541
2542Now takes a second argument which is the result array. If this
2543pointer is NULL, a new array is malloced (the old behaviour).
2544
2545** gh_chars2byvect, gh_shorts2svect, gh_floats2fvect, gh_scm2chars,
2546 gh_scm2shorts, gh_scm2longs, gh_scm2floats
2547
2548New functions.
2549
3e8370c3
MD
2550* Changes to the scm_ interface
2551
ad91d6c3
MD
2552** Function: scm_make_named_hook (char* name, int n_args)
2553
2554Creates a hook in the same way as make-hook above but also
2555binds a variable named NAME to it.
2556
2557This is the typical way of creating a hook from C code.
2558
ece41168
MD
2559Currently, the variable is created in the "current" module. This
2560might change when we get the new module system.
ad91d6c3 2561
16a5a9a4
MD
2562** The smob interface
2563
2564The interface for creating smobs has changed. For documentation, see
2565data-rep.info (made from guile-core/doc/data-rep.texi).
2566
2567*** Deprecated function: SCM scm_newsmob (scm_smobfuns *)
2568
2569>>> This function will be removed in 1.3.4. <<<
2570
2571It is replaced by:
2572
2573*** Function: SCM scm_make_smob_type (const char *name, scm_sizet size)
2574This function adds a new smob type, named NAME, with instance size
2575SIZE to the system. The return value is a tag that is used in
2576creating instances of the type. If SIZE is 0, then no memory will
2577be allocated when instances of the smob are created, and nothing
2578will be freed by the default free function.
2579
2580*** Function: void scm_set_smob_mark (long tc, SCM (*mark) (SCM))
2581This function sets the smob marking procedure for the smob type
2582specified by the tag TC. TC is the tag returned by
2583`scm_make_smob_type'.
2584
2585*** Function: void scm_set_smob_free (long tc, SCM (*mark) (SCM))
2586This function sets the smob freeing procedure for the smob type
2587specified by the tag TC. TC is the tag returned by
2588`scm_make_smob_type'.
2589
2590*** Function: void scm_set_smob_print (tc, print)
2591
2592 - Function: void scm_set_smob_print (long tc,
2593 scm_sizet (*print) (SCM,
2594 SCM,
2595 scm_print_state *))
2596
2597This function sets the smob printing procedure for the smob type
2598specified by the tag TC. TC is the tag returned by
2599`scm_make_smob_type'.
2600
2601*** Function: void scm_set_smob_equalp (long tc, SCM (*equalp) (SCM, SCM))
2602This function sets the smob equality-testing predicate for the
2603smob type specified by the tag TC. TC is the tag returned by
2604`scm_make_smob_type'.
2605
2606*** Macro: void SCM_NEWSMOB (SCM var, long tc, void *data)
2607Make VALUE contain a smob instance of the type with type code TC and
2608smob data DATA. VALUE must be previously declared as C type `SCM'.
2609
2610*** Macro: fn_returns SCM_RETURN_NEWSMOB (long tc, void *data)
2611This macro expands to a block of code that creates a smob instance
2612of the type with type code TC and smob data DATA, and returns that
2613`SCM' value. It should be the last piece of code in a block.
2614
9e97c52d
GH
2615** The interfaces for using I/O ports and implementing port types
2616(ptobs) have changed significantly. The new interface is based on
2617shared access to buffers and a new set of ptob procedures.
2618
16a5a9a4
MD
2619*** scm_newptob has been removed
2620
2621It is replaced by:
2622
2623*** Function: SCM scm_make_port_type (type_name, fill_buffer, write_flush)
2624
2625- Function: SCM scm_make_port_type (char *type_name,
2626 int (*fill_buffer) (SCM port),
2627 void (*write_flush) (SCM port));
2628
2629Similarly to the new smob interface, there is a set of function
2630setters by which the user can customize the behaviour of his port
544e9093 2631type. See ports.h (scm_set_port_XXX).
16a5a9a4 2632
9e97c52d
GH
2633** scm_strport_to_string: New function: creates a new string from
2634a string port's buffer.
2635
3e8370c3
MD
2636** Plug in interface for random number generators
2637The variable `scm_the_rng' in random.c contains a value and three
2638function pointers which together define the current random number
2639generator being used by the Scheme level interface and the random
2640number library functions.
2641
2642The user is free to replace the default generator with the generator
2643of his own choice.
2644
2645*** Variable: size_t scm_the_rng.rstate_size
2646The size of the random state type used by the current RNG
2647measured in chars.
2648
2649*** Function: unsigned long scm_the_rng.random_bits (scm_rstate *STATE)
2650Given the random STATE, return 32 random bits.
2651
2652*** Function: void scm_the_rng.init_rstate (scm_rstate *STATE, chars *S, int N)
2653Seed random state STATE using string S of length N.
2654
2655*** Function: scm_rstate *scm_the_rng.copy_rstate (scm_rstate *STATE)
2656Given random state STATE, return a malloced copy.
2657
2658** Default RNG
2659The default RNG is the MWC (Multiply With Carry) random number
2660generator described by George Marsaglia at the Department of
2661Statistics and Supercomputer Computations Research Institute, The
2662Florida State University (http://stat.fsu.edu/~geo).
2663
2664It uses 64 bits, has a period of 4578426017172946943 (4.6e18), and
2665passes all tests in the DIEHARD test suite
2666(http://stat.fsu.edu/~geo/diehard.html). The generation of 32 bits
2667costs one multiply and one add on platforms which either supports long
2668longs (gcc does this on most systems) or have 64 bit longs. The cost
2669is four multiply on other systems but this can be optimized by writing
2670scm_i_uniform32 in assembler.
2671
2672These functions are provided through the scm_the_rng interface for use
2673by libguile and the application.
2674
2675*** Function: unsigned long scm_i_uniform32 (scm_i_rstate *STATE)
2676Given the random STATE, return 32 random bits.
2677Don't use this function directly. Instead go through the plugin
2678interface (see "Plug in interface" above).
2679
2680*** Function: void scm_i_init_rstate (scm_i_rstate *STATE, char *SEED, int N)
2681Initialize STATE using SEED of length N.
2682
2683*** Function: scm_i_rstate *scm_i_copy_rstate (scm_i_rstate *STATE)
2684Return a malloc:ed copy of STATE. This function can easily be re-used
2685in the interfaces to other RNGs.
2686
2687** Random number library functions
2688These functions use the current RNG through the scm_the_rng interface.
2689It might be a good idea to use these functions from your C code so
2690that only one random generator is used by all code in your program.
2691
259529f2 2692The default random state is stored in:
3e8370c3
MD
2693
2694*** Variable: SCM scm_var_random_state
2695Contains the vcell of the Scheme variable "*random-state*" which is
2696used as default state by all random number functions in the Scheme
2697level interface.
2698
2699Example:
2700
259529f2 2701 double x = scm_c_uniform01 (SCM_RSTATE (SCM_CDR (scm_var_random_state)));
3e8370c3 2702
259529f2
MD
2703*** Function: scm_rstate *scm_c_default_rstate (void)
2704This is a convenience function which returns the value of
2705scm_var_random_state. An error message is generated if this value
2706isn't a random state.
2707
2708*** Function: scm_rstate *scm_c_make_rstate (char *SEED, int LENGTH)
2709Make a new random state from the string SEED of length LENGTH.
2710
2711It is generally not a good idea to use multiple random states in a
2712program. While subsequent random numbers generated from one random
2713state are guaranteed to be reasonably independent, there is no such
2714guarantee for numbers generated from different random states.
2715
2716*** Macro: unsigned long scm_c_uniform32 (scm_rstate *STATE)
2717Return 32 random bits.
2718
2719*** Function: double scm_c_uniform01 (scm_rstate *STATE)
3e8370c3
MD
2720Return a sample from the uniform(0,1) distribution.
2721
259529f2 2722*** Function: double scm_c_normal01 (scm_rstate *STATE)
3e8370c3
MD
2723Return a sample from the normal(0,1) distribution.
2724
259529f2 2725*** Function: double scm_c_exp1 (scm_rstate *STATE)
3e8370c3
MD
2726Return a sample from the exp(1) distribution.
2727
259529f2
MD
2728*** Function: unsigned long scm_c_random (scm_rstate *STATE, unsigned long M)
2729Return a sample from the discrete uniform(0,M) distribution.
2730
2731*** Function: SCM scm_c_random_bignum (scm_rstate *STATE, SCM M)
3e8370c3 2732Return a sample from the discrete uniform(0,M) distribution.
259529f2 2733M must be a bignum object. The returned value may be an INUM.
3e8370c3 2734
9e97c52d 2735
f3227c7a 2736\f
d23bbf3e 2737Changes in Guile 1.3 (released Monday, October 19, 1998):
c484bf7f
JB
2738
2739* Changes to the distribution
2740
e2d6569c
JB
2741** We renamed the SCHEME_LOAD_PATH environment variable to GUILE_LOAD_PATH.
2742To avoid conflicts, programs should name environment variables after
2743themselves, except when there's a common practice establishing some
2744other convention.
2745
2746For now, Guile supports both GUILE_LOAD_PATH and SCHEME_LOAD_PATH,
2747giving the former precedence, and printing a warning message if the
2748latter is set. Guile 1.4 will not recognize SCHEME_LOAD_PATH at all.
2749
2750** The header files related to multi-byte characters have been removed.
2751They were: libguile/extchrs.h and libguile/mbstrings.h. Any C code
2752which referred to these explicitly will probably need to be rewritten,
2753since the support for the variant string types has been removed; see
2754below.
2755
2756** The header files append.h and sequences.h have been removed. These
2757files implemented non-R4RS operations which would encourage
2758non-portable programming style and less easy-to-read code.
3a97e020 2759
c484bf7f
JB
2760* Changes to the stand-alone interpreter
2761
2e368582 2762** New procedures have been added to implement a "batch mode":
ec4ab4fd 2763
2e368582 2764*** Function: batch-mode?
ec4ab4fd
GH
2765
2766 Returns a boolean indicating whether the interpreter is in batch
2767 mode.
2768
2e368582 2769*** Function: set-batch-mode?! ARG
ec4ab4fd
GH
2770
2771 If ARG is true, switches the interpreter to batch mode. The `#f'
2772 case has not been implemented.
2773
2e368582
JB
2774** Guile now provides full command-line editing, when run interactively.
2775To use this feature, you must have the readline library installed.
2776The Guile build process will notice it, and automatically include
2777support for it.
2778
2779The readline library is available via anonymous FTP from any GNU
2780mirror site; the canonical location is "ftp://prep.ai.mit.edu/pub/gnu".
2781
a5d6d578
MD
2782** the-last-stack is now a fluid.
2783
c484bf7f
JB
2784* Changes to the procedure for linking libguile with your programs
2785
71f20534 2786** You can now use the `guile-config' utility to build programs that use Guile.
2e368582 2787
2adfe1c0 2788Guile now includes a command-line utility called `guile-config', which
71f20534
JB
2789can provide information about how to compile and link programs that
2790use Guile.
2791
2792*** `guile-config compile' prints any C compiler flags needed to use Guile.
2793You should include this command's output on the command line you use
2794to compile C or C++ code that #includes the Guile header files. It's
2795usually just a `-I' flag to help the compiler find the Guile headers.
2796
2797
2798*** `guile-config link' prints any linker flags necessary to link with Guile.
8aa5c148 2799
71f20534 2800This command writes to its standard output a list of flags which you
8aa5c148
JB
2801must pass to the linker to link your code against the Guile library.
2802The flags include '-lguile' itself, any other libraries the Guile
2803library depends upon, and any `-L' flags needed to help the linker
2804find those libraries.
2e368582
JB
2805
2806For example, here is a Makefile rule that builds a program named 'foo'
2807from the object files ${FOO_OBJECTS}, and links them against Guile:
2808
2809 foo: ${FOO_OBJECTS}
2adfe1c0 2810 ${CC} ${CFLAGS} ${FOO_OBJECTS} `guile-config link` -o foo
2e368582 2811
e2d6569c
JB
2812Previous Guile releases recommended that you use autoconf to detect
2813which of a predefined set of libraries were present on your system.
2adfe1c0 2814It is more robust to use `guile-config', since it records exactly which
e2d6569c
JB
2815libraries the installed Guile library requires.
2816
2adfe1c0
JB
2817This was originally called `build-guile', but was renamed to
2818`guile-config' before Guile 1.3 was released, to be consistent with
2819the analogous script for the GTK+ GUI toolkit, which is called
2820`gtk-config'.
2821
2e368582 2822
8aa5c148
JB
2823** Use the GUILE_FLAGS macro in your configure.in file to find Guile.
2824
2825If you are using the GNU autoconf package to configure your program,
2826you can use the GUILE_FLAGS autoconf macro to call `guile-config'
2827(described above) and gather the necessary values for use in your
2828Makefiles.
2829
2830The GUILE_FLAGS macro expands to configure script code which runs the
2831`guile-config' script, to find out where Guile's header files and
2832libraries are installed. It sets two variables, marked for
2833substitution, as by AC_SUBST.
2834
2835 GUILE_CFLAGS --- flags to pass to a C or C++ compiler to build
2836 code that uses Guile header files. This is almost always just a
2837 -I flag.
2838
2839 GUILE_LDFLAGS --- flags to pass to the linker to link a
2840 program against Guile. This includes `-lguile' for the Guile
2841 library itself, any libraries that Guile itself requires (like
2842 -lqthreads), and so on. It may also include a -L flag to tell the
2843 compiler where to find the libraries.
2844
2845GUILE_FLAGS is defined in the file guile.m4, in the top-level
2846directory of the Guile distribution. You can copy it into your
2847package's aclocal.m4 file, and then use it in your configure.in file.
2848
2849If you are using the `aclocal' program, distributed with GNU automake,
2850to maintain your aclocal.m4 file, the Guile installation process
2851installs guile.m4 where aclocal will find it. All you need to do is
2852use GUILE_FLAGS in your configure.in file, and then run `aclocal';
2853this will copy the definition of GUILE_FLAGS into your aclocal.m4
2854file.
2855
2856
c484bf7f 2857* Changes to Scheme functions and syntax
7ad3c1e7 2858
02755d59 2859** Multi-byte strings have been removed, as have multi-byte and wide
e2d6569c
JB
2860ports. We felt that these were the wrong approach to
2861internationalization support.
02755d59 2862
2e368582
JB
2863** New function: readline [PROMPT]
2864Read a line from the terminal, and allow the user to edit it,
2865prompting with PROMPT. READLINE provides a large set of Emacs-like
2866editing commands, lets the user recall previously typed lines, and
2867works on almost every kind of terminal, including dumb terminals.
2868
2869READLINE assumes that the cursor is at the beginning of the line when
2870it is invoked. Thus, you can't print a prompt yourself, and then call
2871READLINE; you need to package up your prompt as a string, pass it to
2872the function, and let READLINE print the prompt itself. This is
2873because READLINE needs to know the prompt's screen width.
2874
8cd57bd0
JB
2875For Guile to provide this function, you must have the readline
2876library, version 2.1 or later, installed on your system. Readline is
2877available via anonymous FTP from prep.ai.mit.edu in pub/gnu, or from
2878any GNU mirror site.
2e368582
JB
2879
2880See also ADD-HISTORY function.
2881
2882** New function: add-history STRING
2883Add STRING as the most recent line in the history used by the READLINE
2884command. READLINE does not add lines to the history itself; you must
2885call ADD-HISTORY to make previous input available to the user.
2886
8cd57bd0
JB
2887** The behavior of the read-line function has changed.
2888
2889This function now uses standard C library functions to read the line,
2890for speed. This means that it doesn not respect the value of
2891scm-line-incrementors; it assumes that lines are delimited with
2892#\newline.
2893
2894(Note that this is read-line, the function that reads a line of text
2895from a port, not readline, the function that reads a line from a
2896terminal, providing full editing capabilities.)
2897
1a0106ef
JB
2898** New module (ice-9 getopt-gnu-style): Parse command-line arguments.
2899
2900This module provides some simple argument parsing. It exports one
2901function:
2902
2903Function: getopt-gnu-style ARG-LS
2904 Parse a list of program arguments into an alist of option
2905 descriptions.
2906
2907 Each item in the list of program arguments is examined to see if
2908 it meets the syntax of a GNU long-named option. An argument like
2909 `--MUMBLE' produces an element of the form (MUMBLE . #t) in the
2910 returned alist, where MUMBLE is a keyword object with the same
2911 name as the argument. An argument like `--MUMBLE=FROB' produces
2912 an element of the form (MUMBLE . FROB), where FROB is a string.
2913
2914 As a special case, the returned alist also contains a pair whose
2915 car is the symbol `rest'. The cdr of this pair is a list
2916 containing all the items in the argument list that are not options
2917 of the form mentioned above.
2918
2919 The argument `--' is treated specially: all items in the argument
2920 list appearing after such an argument are not examined, and are
2921 returned in the special `rest' list.
2922
2923 This function does not parse normal single-character switches.
2924 You will need to parse them out of the `rest' list yourself.
2925
8cd57bd0
JB
2926** The read syntax for byte vectors and short vectors has changed.
2927
2928Instead of #bytes(...), write #y(...).
2929
2930Instead of #short(...), write #h(...).
2931
2932This may seem nutty, but, like the other uniform vectors, byte vectors
2933and short vectors want to have the same print and read syntax (and,
2934more basic, want to have read syntax!). Changing the read syntax to
2935use multiple characters after the hash sign breaks with the
2936conventions used in R5RS and the conventions used for the other
2937uniform vectors. It also introduces complexity in the current reader,
2938both on the C and Scheme levels. (The Right solution is probably to
2939change the syntax and prototypes for uniform vectors entirely.)
2940
2941
2942** The new module (ice-9 session) provides useful interactive functions.
2943
2944*** New procedure: (apropos REGEXP OPTION ...)
2945
2946Display a list of top-level variables whose names match REGEXP, and
2947the modules they are imported from. Each OPTION should be one of the
2948following symbols:
2949
2950 value --- Show the value of each matching variable.
2951 shadow --- Show bindings shadowed by subsequently imported modules.
2952 full --- Same as both `shadow' and `value'.
2953
2954For example:
2955
2956 guile> (apropos "trace" 'full)
2957 debug: trace #<procedure trace args>
2958 debug: untrace #<procedure untrace args>
2959 the-scm-module: display-backtrace #<compiled-closure #<primitive-procedure gsubr-apply>>
2960 the-scm-module: before-backtrace-hook ()
2961 the-scm-module: backtrace #<primitive-procedure backtrace>
2962 the-scm-module: after-backtrace-hook ()
2963 the-scm-module: has-shown-backtrace-hint? #f
2964 guile>
2965
2966** There are new functions and syntax for working with macros.
2967
2968Guile implements macros as a special object type. Any variable whose
2969top-level binding is a macro object acts as a macro. The macro object
2970specifies how the expression should be transformed before evaluation.
2971
2972*** Macro objects now print in a reasonable way, resembling procedures.
2973
2974*** New function: (macro? OBJ)
2975True iff OBJ is a macro object.
2976
2977*** New function: (primitive-macro? OBJ)
2978Like (macro? OBJ), but true only if OBJ is one of the Guile primitive
2979macro transformers, implemented in eval.c rather than Scheme code.
2980
dbdd0c16
JB
2981Why do we have this function?
2982- For symmetry with procedure? and primitive-procedure?,
2983- to allow custom print procedures to tell whether a macro is
2984 primitive, and display it differently, and
2985- to allow compilers and user-written evaluators to distinguish
2986 builtin special forms from user-defined ones, which could be
2987 compiled.
2988
8cd57bd0
JB
2989*** New function: (macro-type OBJ)
2990Return a value indicating what kind of macro OBJ is. Possible return
2991values are:
2992
2993 The symbol `syntax' --- a macro created by procedure->syntax.
2994 The symbol `macro' --- a macro created by procedure->macro.
2995 The symbol `macro!' --- a macro created by procedure->memoizing-macro.
2996 The boolean #f --- if OBJ is not a macro object.
2997
2998*** New function: (macro-name MACRO)
2999Return the name of the macro object MACRO's procedure, as returned by
3000procedure-name.
3001
3002*** New function: (macro-transformer MACRO)
3003Return the transformer procedure for MACRO.
3004
3005*** New syntax: (use-syntax MODULE ... TRANSFORMER)
3006
3007Specify a new macro expander to use in the current module. Each
3008MODULE is a module name, with the same meaning as in the `use-modules'
3009form; each named module's exported bindings are added to the current
3010top-level environment. TRANSFORMER is an expression evaluated in the
3011resulting environment which must yield a procedure to use as the
3012module's eval transformer: every expression evaluated in this module
3013is passed to this function, and the result passed to the Guile
3014interpreter.
3015
3016*** macro-eval! is removed. Use local-eval instead.
29521173 3017
8d9dcb3c
MV
3018** Some magic has been added to the printer to better handle user
3019written printing routines (like record printers, closure printers).
3020
3021The problem is that these user written routines must have access to
7fbd77df 3022the current `print-state' to be able to handle fancy things like
8d9dcb3c
MV
3023detection of circular references. These print-states have to be
3024passed to the builtin printing routines (display, write, etc) to
3025properly continue the print chain.
3026
3027We didn't want to change all existing print code so that it
8cd57bd0 3028explicitly passes thru a print state in addition to a port. Instead,
8d9dcb3c
MV
3029we extented the possible values that the builtin printing routines
3030accept as a `port'. In addition to a normal port, they now also take
3031a pair of a normal port and a print-state. Printing will go to the
3032port and the print-state will be used to control the detection of
3033circular references, etc. If the builtin function does not care for a
3034print-state, it is simply ignored.
3035
3036User written callbacks are now called with such a pair as their
3037`port', but because every function now accepts this pair as a PORT
3038argument, you don't have to worry about that. In fact, it is probably
3039safest to not check for these pairs.
3040
3041However, it is sometimes necessary to continue a print chain on a
3042different port, for example to get a intermediate string
3043representation of the printed value, mangle that string somehow, and
3044then to finally print the mangled string. Use the new function
3045
3046 inherit-print-state OLD-PORT NEW-PORT
3047
3048for this. It constructs a new `port' that prints to NEW-PORT but
3049inherits the print-state of OLD-PORT.
3050
ef1ea498
MD
3051** struct-vtable-offset renamed to vtable-offset-user
3052
3053** New constants: vtable-index-layout, vtable-index-vtable, vtable-index-printer
3054
e478dffa
MD
3055** There is now a third optional argument to make-vtable-vtable
3056 (and fourth to make-struct) when constructing new types (vtables).
3057 This argument initializes field vtable-index-printer of the vtable.
ef1ea498 3058
4851dc57
MV
3059** The detection of circular references has been extended to structs.
3060That is, a structure that -- in the process of being printed -- prints
3061itself does not lead to infinite recursion.
3062
3063** There is now some basic support for fluids. Please read
3064"libguile/fluid.h" to find out more. It is accessible from Scheme with
3065the following functions and macros:
3066
9c3fb66f
MV
3067Function: make-fluid
3068
3069 Create a new fluid object. Fluids are not special variables or
3070 some other extension to the semantics of Scheme, but rather
3071 ordinary Scheme objects. You can store them into variables (that
3072 are still lexically scoped, of course) or into any other place you
3073 like. Every fluid has a initial value of `#f'.
04c76b58 3074
9c3fb66f 3075Function: fluid? OBJ
04c76b58 3076
9c3fb66f 3077 Test whether OBJ is a fluid.
04c76b58 3078
9c3fb66f
MV
3079Function: fluid-ref FLUID
3080Function: fluid-set! FLUID VAL
04c76b58
MV
3081
3082 Access/modify the fluid FLUID. Modifications are only visible
3083 within the current dynamic root (that includes threads).
3084
9c3fb66f
MV
3085Function: with-fluids* FLUIDS VALUES THUNK
3086
3087 FLUIDS is a list of fluids and VALUES a corresponding list of
3088 values for these fluids. Before THUNK gets called the values are
3089 installed in the fluids and the old values of the fluids are
3090 saved in the VALUES list. When the flow of control leaves THUNK
3091 or reenters it, the values get swapped again. You might think of
3092 this as a `safe-fluid-excursion'. Note that the VALUES list is
3093 modified by `with-fluids*'.
3094
3095Macro: with-fluids ((FLUID VALUE) ...) FORM ...
3096
3097 The same as `with-fluids*' but with a different syntax. It looks
3098 just like `let', but both FLUID and VALUE are evaluated. Remember,
3099 fluids are not special variables but ordinary objects. FLUID
3100 should evaluate to a fluid.
04c76b58 3101
e2d6569c 3102** Changes to system call interfaces:
64d01d13 3103
e2d6569c 3104*** close-port, close-input-port and close-output-port now return a
64d01d13
GH
3105boolean instead of an `unspecified' object. #t means that the port
3106was successfully closed, while #f means it was already closed. It is
3107also now possible for these procedures to raise an exception if an
3108error occurs (some errors from write can be delayed until close.)
3109
e2d6569c 3110*** the first argument to chmod, fcntl, ftell and fseek can now be a
6afcd3b2
GH
3111file descriptor.
3112
e2d6569c 3113*** the third argument to fcntl is now optional.
6afcd3b2 3114
e2d6569c 3115*** the first argument to chown can now be a file descriptor or a port.
6afcd3b2 3116
e2d6569c 3117*** the argument to stat can now be a port.
6afcd3b2 3118
e2d6569c 3119*** The following new procedures have been added (most use scsh
64d01d13
GH
3120interfaces):
3121
e2d6569c 3122*** procedure: close PORT/FD
ec4ab4fd
GH
3123 Similar to close-port (*note close-port: Closing Ports.), but also
3124 works on file descriptors. A side effect of closing a file
3125 descriptor is that any ports using that file descriptor are moved
3126 to a different file descriptor and have their revealed counts set
3127 to zero.
3128
e2d6569c 3129*** procedure: port->fdes PORT
ec4ab4fd
GH
3130 Returns the integer file descriptor underlying PORT. As a side
3131 effect the revealed count of PORT is incremented.
3132
e2d6569c 3133*** procedure: fdes->ports FDES
ec4ab4fd
GH
3134 Returns a list of existing ports which have FDES as an underlying
3135 file descriptor, without changing their revealed counts.
3136
e2d6569c 3137*** procedure: fdes->inport FDES
ec4ab4fd
GH
3138 Returns an existing input port which has FDES as its underlying
3139 file descriptor, if one exists, and increments its revealed count.
3140 Otherwise, returns a new input port with a revealed count of 1.
3141
e2d6569c 3142*** procedure: fdes->outport FDES
ec4ab4fd
GH
3143 Returns an existing output port which has FDES as its underlying
3144 file descriptor, if one exists, and increments its revealed count.
3145 Otherwise, returns a new output port with a revealed count of 1.
3146
3147 The next group of procedures perform a `dup2' system call, if NEWFD
3148(an integer) is supplied, otherwise a `dup'. The file descriptor to be
3149duplicated can be supplied as an integer or contained in a port. The
64d01d13
GH
3150type of value returned varies depending on which procedure is used.
3151
ec4ab4fd
GH
3152 All procedures also have the side effect when performing `dup2' that
3153any ports using NEWFD are moved to a different file descriptor and have
64d01d13
GH
3154their revealed counts set to zero.
3155
e2d6569c 3156*** procedure: dup->fdes PORT/FD [NEWFD]
ec4ab4fd 3157 Returns an integer file descriptor.
64d01d13 3158
e2d6569c 3159*** procedure: dup->inport PORT/FD [NEWFD]
ec4ab4fd 3160 Returns a new input port using the new file descriptor.
64d01d13 3161
e2d6569c 3162*** procedure: dup->outport PORT/FD [NEWFD]
ec4ab4fd 3163 Returns a new output port using the new file descriptor.
64d01d13 3164
e2d6569c 3165*** procedure: dup PORT/FD [NEWFD]
ec4ab4fd
GH
3166 Returns a new port if PORT/FD is a port, with the same mode as the
3167 supplied port, otherwise returns an integer file descriptor.
64d01d13 3168
e2d6569c 3169*** procedure: dup->port PORT/FD MODE [NEWFD]
ec4ab4fd
GH
3170 Returns a new port using the new file descriptor. MODE supplies a
3171 mode string for the port (*note open-file: File Ports.).
64d01d13 3172
e2d6569c 3173*** procedure: setenv NAME VALUE
ec4ab4fd
GH
3174 Modifies the environment of the current process, which is also the
3175 default environment inherited by child processes.
64d01d13 3176
ec4ab4fd
GH
3177 If VALUE is `#f', then NAME is removed from the environment.
3178 Otherwise, the string NAME=VALUE is added to the environment,
3179 replacing any existing string with name matching NAME.
64d01d13 3180
ec4ab4fd 3181 The return value is unspecified.
956055a9 3182
e2d6569c 3183*** procedure: truncate-file OBJ SIZE
6afcd3b2
GH
3184 Truncates the file referred to by OBJ to at most SIZE bytes. OBJ
3185 can be a string containing a file name or an integer file
3186 descriptor or port open for output on the file. The underlying
3187 system calls are `truncate' and `ftruncate'.
3188
3189 The return value is unspecified.
3190
e2d6569c 3191*** procedure: setvbuf PORT MODE [SIZE]
7a6f1ffa
GH
3192 Set the buffering mode for PORT. MODE can be:
3193 `_IONBF'
3194 non-buffered
3195
3196 `_IOLBF'
3197 line buffered
3198
3199 `_IOFBF'
3200 block buffered, using a newly allocated buffer of SIZE bytes.
3201 However if SIZE is zero or unspecified, the port will be made
3202 non-buffered.
3203
3204 This procedure should not be used after I/O has been performed with
3205 the port.
3206
3207 Ports are usually block buffered by default, with a default buffer
3208 size. Procedures e.g., *Note open-file: File Ports, which accept a
3209 mode string allow `0' to be added to request an unbuffered port.
3210
e2d6569c 3211*** procedure: fsync PORT/FD
6afcd3b2
GH
3212 Copies any unwritten data for the specified output file descriptor
3213 to disk. If PORT/FD is a port, its buffer is flushed before the
3214 underlying file descriptor is fsync'd. The return value is
3215 unspecified.
3216
e2d6569c 3217*** procedure: open-fdes PATH FLAGS [MODES]
6afcd3b2
GH
3218 Similar to `open' but returns a file descriptor instead of a port.
3219
e2d6569c 3220*** procedure: execle PATH ENV [ARG] ...
6afcd3b2
GH
3221 Similar to `execl', but the environment of the new process is
3222 specified by ENV, which must be a list of strings as returned by
3223 the `environ' procedure.
3224
3225 This procedure is currently implemented using the `execve' system
3226 call, but we call it `execle' because of its Scheme calling
3227 interface.
3228
e2d6569c 3229*** procedure: strerror ERRNO
ec4ab4fd
GH
3230 Returns the Unix error message corresponding to ERRNO, an integer.
3231
e2d6569c 3232*** procedure: primitive-exit [STATUS]
6afcd3b2
GH
3233 Terminate the current process without unwinding the Scheme stack.
3234 This is would typically be useful after a fork. The exit status
3235 is STATUS if supplied, otherwise zero.
3236
e2d6569c 3237*** procedure: times
6afcd3b2
GH
3238 Returns an object with information about real and processor time.
3239 The following procedures accept such an object as an argument and
3240 return a selected component:
3241
3242 `tms:clock'
3243 The current real time, expressed as time units relative to an
3244 arbitrary base.
3245
3246 `tms:utime'
3247 The CPU time units used by the calling process.
3248
3249 `tms:stime'
3250 The CPU time units used by the system on behalf of the
3251 calling process.
3252
3253 `tms:cutime'
3254 The CPU time units used by terminated child processes of the
3255 calling process, whose status has been collected (e.g., using
3256 `waitpid').
3257
3258 `tms:cstime'
3259 Similarly, the CPU times units used by the system on behalf of
3260 terminated child processes.
7ad3c1e7 3261
e2d6569c
JB
3262** Removed: list-length
3263** Removed: list-append, list-append!
3264** Removed: list-reverse, list-reverse!
3265
3266** array-map renamed to array-map!
3267
3268** serial-array-map renamed to serial-array-map!
3269
660f41fa
MD
3270** catch doesn't take #f as first argument any longer
3271
3272Previously, it was possible to pass #f instead of a key to `catch'.
3273That would cause `catch' to pass a jump buffer object to the procedure
3274passed as second argument. The procedure could then use this jump
3275buffer objekt as an argument to throw.
3276
3277This mechanism has been removed since its utility doesn't motivate the
3278extra complexity it introduces.
3279
332d00f6
JB
3280** The `#/' notation for lists now provokes a warning message from Guile.
3281This syntax will be removed from Guile in the near future.
3282
3283To disable the warning message, set the GUILE_HUSH environment
3284variable to any non-empty value.
3285
8cd57bd0
JB
3286** The newline character now prints as `#\newline', following the
3287normal Scheme notation, not `#\nl'.
3288
c484bf7f
JB
3289* Changes to the gh_ interface
3290
8986901b
JB
3291** The gh_enter function now takes care of loading the Guile startup files.
3292gh_enter works by calling scm_boot_guile; see the remarks below.
3293
5424b4f7
MD
3294** Function: void gh_write (SCM x)
3295
3296Write the printed representation of the scheme object x to the current
3297output port. Corresponds to the scheme level `write'.
3298
3a97e020
MD
3299** gh_list_length renamed to gh_length.
3300
8d6787b6
MG
3301** vector handling routines
3302
3303Several major changes. In particular, gh_vector() now resembles
3304(vector ...) (with a caveat -- see manual), and gh_make_vector() now
956328d2
MG
3305exists and behaves like (make-vector ...). gh_vset() and gh_vref()
3306have been renamed gh_vector_set_x() and gh_vector_ref(). Some missing
8d6787b6
MG
3307vector-related gh_ functions have been implemented.
3308
7fee59bd
MG
3309** pair and list routines
3310
3311Implemented several of the R4RS pair and list functions that were
3312missing.
3313
171422a9
MD
3314** gh_scm2doubles, gh_doubles2scm, gh_doubles2dvect
3315
3316New function. Converts double arrays back and forth between Scheme
3317and C.
3318
c484bf7f
JB
3319* Changes to the scm_ interface
3320
8986901b
JB
3321** The function scm_boot_guile now takes care of loading the startup files.
3322
3323Guile's primary initialization function, scm_boot_guile, now takes
3324care of loading `boot-9.scm', in the `ice-9' module, to initialize
3325Guile, define the module system, and put together some standard
3326bindings. It also loads `init.scm', which is intended to hold
3327site-specific initialization code.
3328
3329Since Guile cannot operate properly until boot-9.scm is loaded, there
3330is no reason to separate loading boot-9.scm from Guile's other
3331initialization processes.
3332
3333This job used to be done by scm_compile_shell_switches, which didn't
3334make much sense; in particular, it meant that people using Guile for
3335non-shell-like applications had to jump through hoops to get Guile
3336initialized properly.
3337
3338** The function scm_compile_shell_switches no longer loads the startup files.
3339Now, Guile always loads the startup files, whenever it is initialized;
3340see the notes above for scm_boot_guile and scm_load_startup_files.
3341
3342** Function: scm_load_startup_files
3343This new function takes care of loading Guile's initialization file
3344(`boot-9.scm'), and the site initialization file, `init.scm'. Since
3345this is always called by the Guile initialization process, it's
3346probably not too useful to call this yourself, but it's there anyway.
3347
87148d9e
JB
3348** The semantics of smob marking have changed slightly.
3349
3350The smob marking function (the `mark' member of the scm_smobfuns
3351structure) is no longer responsible for setting the mark bit on the
3352smob. The generic smob handling code in the garbage collector will
3353set this bit. The mark function need only ensure that any other
3354objects the smob refers to get marked.
3355
3356Note that this change means that the smob's GC8MARK bit is typically
3357already set upon entry to the mark function. Thus, marking functions
3358which look like this:
3359
3360 {
3361 if (SCM_GC8MARKP (ptr))
3362 return SCM_BOOL_F;
3363 SCM_SETGC8MARK (ptr);
3364 ... mark objects to which the smob refers ...
3365 }
3366
3367are now incorrect, since they will return early, and fail to mark any
3368other objects the smob refers to. Some code in the Guile library used
3369to work this way.
3370
1cf84ea5
JB
3371** The semantics of the I/O port functions in scm_ptobfuns have changed.
3372
3373If you have implemented your own I/O port type, by writing the
3374functions required by the scm_ptobfuns and then calling scm_newptob,
3375you will need to change your functions slightly.
3376
3377The functions in a scm_ptobfuns structure now expect the port itself
3378as their argument; they used to expect the `stream' member of the
3379port's scm_port_table structure. This allows functions in an
3380scm_ptobfuns structure to easily access the port's cell (and any flags
3381it its CAR), and the port's scm_port_table structure.
3382
3383Guile now passes the I/O port itself as the `port' argument in the
3384following scm_ptobfuns functions:
3385
3386 int (*free) (SCM port);
3387 int (*fputc) (int, SCM port);
3388 int (*fputs) (char *, SCM port);
3389 scm_sizet (*fwrite) SCM_P ((char *ptr,
3390 scm_sizet size,
3391 scm_sizet nitems,
3392 SCM port));
3393 int (*fflush) (SCM port);
3394 int (*fgetc) (SCM port);
3395 int (*fclose) (SCM port);
3396
3397The interfaces to the `mark', `print', `equalp', and `fgets' methods
3398are unchanged.
3399
3400If you have existing code which defines its own port types, it is easy
3401to convert your code to the new interface; simply apply SCM_STREAM to
3402the port argument to yield the value you code used to expect.
3403
3404Note that since both the port and the stream have the same type in the
3405C code --- they are both SCM values --- the C compiler will not remind
3406you if you forget to update your scm_ptobfuns functions.
3407
3408
933a7411
MD
3409** Function: int scm_internal_select (int fds,
3410 SELECT_TYPE *rfds,
3411 SELECT_TYPE *wfds,
3412 SELECT_TYPE *efds,
3413 struct timeval *timeout);
3414
3415This is a replacement for the `select' function provided by the OS.
3416It enables I/O blocking and sleeping to happen for one cooperative
3417thread without blocking other threads. It also avoids busy-loops in
3418these situations. It is intended that all I/O blocking and sleeping
3419will finally go through this function. Currently, this function is
3420only available on systems providing `gettimeofday' and `select'.
3421
5424b4f7
MD
3422** Function: SCM scm_internal_stack_catch (SCM tag,
3423 scm_catch_body_t body,
3424 void *body_data,
3425 scm_catch_handler_t handler,
3426 void *handler_data)
3427
3428A new sibling to the other two C level `catch' functions
3429scm_internal_catch and scm_internal_lazy_catch. Use it if you want
3430the stack to be saved automatically into the variable `the-last-stack'
3431(scm_the_last_stack_var) on error. This is necessary if you want to
3432use advanced error reporting, such as calling scm_display_error and
3433scm_display_backtrace. (They both take a stack object as argument.)
3434
df366c26
MD
3435** Function: SCM scm_spawn_thread (scm_catch_body_t body,
3436 void *body_data,
3437 scm_catch_handler_t handler,
3438 void *handler_data)
3439
3440Spawns a new thread. It does a job similar to
3441scm_call_with_new_thread but takes arguments more suitable when
3442spawning threads from application C code.
3443
88482b31
MD
3444** The hook scm_error_callback has been removed. It was originally
3445intended as a way for the user to install his own error handler. But
3446that method works badly since it intervenes between throw and catch,
3447thereby changing the semantics of expressions like (catch #t ...).
3448The correct way to do it is to use one of the C level catch functions
3449in throw.c: scm_internal_catch/lazy_catch/stack_catch.
3450
3a97e020
MD
3451** Removed functions:
3452
3453scm_obj_length, scm_list_length, scm_list_append, scm_list_append_x,
3454scm_list_reverse, scm_list_reverse_x
3455
3456** New macros: SCM_LISTn where n is one of the integers 0-9.
3457
3458These can be used for pretty list creation from C. The idea is taken
3459from Erick Gallesio's STk.
3460
298aa6e3
MD
3461** scm_array_map renamed to scm_array_map_x
3462
527da704
MD
3463** mbstrings are now removed
3464
3465This means that the type codes scm_tc7_mb_string and
3466scm_tc7_mb_substring has been removed.
3467
8cd57bd0
JB
3468** scm_gen_putc, scm_gen_puts, scm_gen_write, and scm_gen_getc have changed.
3469
3470Since we no longer support multi-byte strings, these I/O functions
3471have been simplified, and renamed. Here are their old names, and
3472their new names and arguments:
3473
3474scm_gen_putc -> void scm_putc (int c, SCM port);
3475scm_gen_puts -> void scm_puts (char *s, SCM port);
3476scm_gen_write -> void scm_lfwrite (char *ptr, scm_sizet size, SCM port);
3477scm_gen_getc -> void scm_getc (SCM port);
3478
3479
527da704
MD
3480** The macros SCM_TYP7D and SCM_TYP7SD has been removed.
3481
3482** The macro SCM_TYP7S has taken the role of the old SCM_TYP7D
3483
3484SCM_TYP7S now masks away the bit which distinguishes substrings from
3485strings.
3486
660f41fa
MD
3487** scm_catch_body_t: Backward incompatible change!
3488
3489Body functions to scm_internal_catch and friends do not any longer
3490take a second argument. This is because it is no longer possible to
3491pass a #f arg to catch.
3492
a8e05009
JB
3493** Calls to scm_protect_object and scm_unprotect now nest properly.
3494
3495The function scm_protect_object protects its argument from being freed
3496by the garbage collector. scm_unprotect_object removes that
3497protection.
3498
3499These functions now nest properly. That is, for every object O, there
3500is a counter which scm_protect_object(O) increments and
3501scm_unprotect_object(O) decrements, if the counter is greater than
3502zero. Every object's counter is zero when it is first created. If an
3503object's counter is greater than zero, the garbage collector will not
3504reclaim its storage.
3505
3506This allows you to use scm_protect_object in your code without
3507worrying that some other function you call will call
3508scm_unprotect_object, and allow it to be freed. Assuming that the
3509functions you call are well-behaved, and unprotect only those objects
3510they protect, you can follow the same rule and have confidence that
3511objects will be freed only at appropriate times.
3512
c484bf7f
JB
3513\f
3514Changes in Guile 1.2 (released Tuesday, June 24 1997):
cf78e9e8 3515
737c9113
JB
3516* Changes to the distribution
3517
832b09ed
JB
3518** Nightly snapshots are now available from ftp.red-bean.com.
3519The old server, ftp.cyclic.com, has been relinquished to its rightful
3520owner.
3521
3522Nightly snapshots of the Guile development sources are now available via
3523anonymous FTP from ftp.red-bean.com, as /pub/guile/guile-snap.tar.gz.
3524
3525Via the web, that's: ftp://ftp.red-bean.com/pub/guile/guile-snap.tar.gz
3526For getit, that's: ftp.red-bean.com:/pub/guile/guile-snap.tar.gz
3527
0fcab5ed
JB
3528** To run Guile without installing it, the procedure has changed a bit.
3529
3530If you used a separate build directory to compile Guile, you'll need
3531to include the build directory in SCHEME_LOAD_PATH, as well as the
3532source directory. See the `INSTALL' file for examples.
3533
737c9113
JB
3534* Changes to the procedure for linking libguile with your programs
3535
94982a4e
JB
3536** The standard Guile load path for Scheme code now includes
3537$(datadir)/guile (usually /usr/local/share/guile). This means that
3538you can install your own Scheme files there, and Guile will find them.
3539(Previous versions of Guile only checked a directory whose name
3540contained the Guile version number, so you had to re-install or move
3541your Scheme sources each time you installed a fresh version of Guile.)
3542
3543The load path also includes $(datadir)/guile/site; we recommend
3544putting individual Scheme files there. If you want to install a
3545package with multiple source files, create a directory for them under
3546$(datadir)/guile.
3547
3548** Guile 1.2 will now use the Rx regular expression library, if it is
3549installed on your system. When you are linking libguile into your own
3550programs, this means you will have to link against -lguile, -lqt (if
3551you configured Guile with thread support), and -lrx.
27590f82
JB
3552
3553If you are using autoconf to generate configuration scripts for your
3554application, the following lines should suffice to add the appropriate
3555libraries to your link command:
3556
3557### Find Rx, quickthreads and libguile.
3558AC_CHECK_LIB(rx, main)
3559AC_CHECK_LIB(qt, main)
3560AC_CHECK_LIB(guile, scm_shell)
3561
94982a4e
JB
3562The Guile 1.2 distribution does not contain sources for the Rx
3563library, as Guile 1.0 did. If you want to use Rx, you'll need to
3564retrieve it from a GNU FTP site and install it separately.
3565
b83b8bee
JB
3566* Changes to Scheme functions and syntax
3567
e035e7e6
MV
3568** The dynamic linking features of Guile are now enabled by default.
3569You can disable them by giving the `--disable-dynamic-linking' option
3570to configure.
3571
e035e7e6
MV
3572 (dynamic-link FILENAME)
3573
3574 Find the object file denoted by FILENAME (a string) and link it
3575 into the running Guile application. When everything works out,
3576 return a Scheme object suitable for representing the linked object
3577 file. Otherwise an error is thrown. How object files are
3578 searched is system dependent.
3579
3580 (dynamic-object? VAL)
3581
3582 Determine whether VAL represents a dynamically linked object file.
3583
3584 (dynamic-unlink DYNOBJ)
3585
3586 Unlink the indicated object file from the application. DYNOBJ
3587 should be one of the values returned by `dynamic-link'.
3588
3589 (dynamic-func FUNCTION DYNOBJ)
3590
3591 Search the C function indicated by FUNCTION (a string or symbol)
3592 in DYNOBJ and return some Scheme object that can later be used
3593 with `dynamic-call' to actually call this function. Right now,
3594 these Scheme objects are formed by casting the address of the
3595 function to `long' and converting this number to its Scheme
3596 representation.
3597
3598 (dynamic-call FUNCTION DYNOBJ)
3599
3600 Call the C function indicated by FUNCTION and DYNOBJ. The
3601 function is passed no arguments and its return value is ignored.
3602 When FUNCTION is something returned by `dynamic-func', call that
3603 function and ignore DYNOBJ. When FUNCTION is a string (or symbol,
3604 etc.), look it up in DYNOBJ; this is equivalent to
3605
3606 (dynamic-call (dynamic-func FUNCTION DYNOBJ) #f)
3607
3608 Interrupts are deferred while the C function is executing (with
3609 SCM_DEFER_INTS/SCM_ALLOW_INTS).
3610
3611 (dynamic-args-call FUNCTION DYNOBJ ARGS)
3612
3613 Call the C function indicated by FUNCTION and DYNOBJ, but pass it
3614 some arguments and return its return value. The C function is
3615 expected to take two arguments and return an `int', just like
3616 `main':
3617
3618 int c_func (int argc, char **argv);
3619
3620 ARGS must be a list of strings and is converted into an array of
3621 `char *'. The array is passed in ARGV and its size in ARGC. The
3622 return value is converted to a Scheme number and returned from the
3623 call to `dynamic-args-call'.
3624
0fcab5ed
JB
3625When dynamic linking is disabled or not supported on your system,
3626the above functions throw errors, but they are still available.
3627
e035e7e6
MV
3628Here is a small example that works on GNU/Linux:
3629
3630 (define libc-obj (dynamic-link "libc.so"))
3631 (dynamic-args-call 'rand libc-obj '())
3632
3633See the file `libguile/DYNAMIC-LINKING' for additional comments.
3634
27590f82
JB
3635** The #/ syntax for module names is depreciated, and will be removed
3636in a future version of Guile. Instead of
3637
3638 #/foo/bar/baz
3639
3640instead write
3641
3642 (foo bar baz)
3643
3644The latter syntax is more consistent with existing Lisp practice.
3645
5dade857
MV
3646** Guile now does fancier printing of structures. Structures are the
3647underlying implementation for records, which in turn are used to
3648implement modules, so all of these object now print differently and in
3649a more informative way.
3650
161029df
JB
3651The Scheme printer will examine the builtin variable *struct-printer*
3652whenever it needs to print a structure object. When this variable is
3653not `#f' it is deemed to be a procedure and will be applied to the
3654structure object and the output port. When *struct-printer* is `#f'
3655or the procedure return `#f' the structure object will be printed in
3656the boring #<struct 80458270> form.
5dade857
MV
3657
3658This hook is used by some routines in ice-9/boot-9.scm to implement
3659type specific printing routines. Please read the comments there about
3660"printing structs".
3661
3662One of the more specific uses of structs are records. The printing
3663procedure that could be passed to MAKE-RECORD-TYPE is now actually
3664called. It should behave like a *struct-printer* procedure (described
3665above).
3666
b83b8bee
JB
3667** Guile now supports a new R4RS-compliant syntax for keywords. A
3668token of the form #:NAME, where NAME has the same syntax as a Scheme
3669symbol, is the external representation of the keyword named NAME.
3670Keyword objects print using this syntax as well, so values containing
1e5afba0
JB
3671keyword objects can be read back into Guile. When used in an
3672expression, keywords are self-quoting objects.
b83b8bee
JB
3673
3674Guile suports this read syntax, and uses this print syntax, regardless
3675of the current setting of the `keyword' read option. The `keyword'
3676read option only controls whether Guile recognizes the `:NAME' syntax,
3677which is incompatible with R4RS. (R4RS says such token represent
3678symbols.)
737c9113
JB
3679
3680** Guile has regular expression support again. Guile 1.0 included
3681functions for matching regular expressions, based on the Rx library.
3682In Guile 1.1, the Guile/Rx interface was removed to simplify the
3683distribution, and thus Guile had no regular expression support. Guile
94982a4e
JB
36841.2 again supports the most commonly used functions, and supports all
3685of SCSH's regular expression functions.
2409cdfa 3686
94982a4e
JB
3687If your system does not include a POSIX regular expression library,
3688and you have not linked Guile with a third-party regexp library such as
3689Rx, these functions will not be available. You can tell whether your
3690Guile installation includes regular expression support by checking
3691whether the `*features*' list includes the `regex' symbol.
737c9113 3692
94982a4e 3693*** regexp functions
161029df 3694
94982a4e
JB
3695By default, Guile supports POSIX extended regular expressions. That
3696means that the characters `(', `)', `+' and `?' are special, and must
3697be escaped if you wish to match the literal characters.
e1a191a8 3698
94982a4e
JB
3699This regular expression interface was modeled after that implemented
3700by SCSH, the Scheme Shell. It is intended to be upwardly compatible
3701with SCSH regular expressions.
3702
3703**** Function: string-match PATTERN STR [START]
3704 Compile the string PATTERN into a regular expression and compare
3705 it with STR. The optional numeric argument START specifies the
3706 position of STR at which to begin matching.
3707
3708 `string-match' returns a "match structure" which describes what,
3709 if anything, was matched by the regular expression. *Note Match
3710 Structures::. If STR does not match PATTERN at all,
3711 `string-match' returns `#f'.
3712
3713 Each time `string-match' is called, it must compile its PATTERN
3714argument into a regular expression structure. This operation is
3715expensive, which makes `string-match' inefficient if the same regular
3716expression is used several times (for example, in a loop). For better
3717performance, you can compile a regular expression in advance and then
3718match strings against the compiled regexp.
3719
3720**** Function: make-regexp STR [FLAGS]
3721 Compile the regular expression described by STR, and return the
3722 compiled regexp structure. If STR does not describe a legal
3723 regular expression, `make-regexp' throws a
3724 `regular-expression-syntax' error.
3725
3726 FLAGS may be the bitwise-or of one or more of the following:
3727
3728**** Constant: regexp/extended
3729 Use POSIX Extended Regular Expression syntax when interpreting
3730 STR. If not set, POSIX Basic Regular Expression syntax is used.
3731 If the FLAGS argument is omitted, we assume regexp/extended.
3732
3733**** Constant: regexp/icase
3734 Do not differentiate case. Subsequent searches using the
3735 returned regular expression will be case insensitive.
3736
3737**** Constant: regexp/newline
3738 Match-any-character operators don't match a newline.
3739
3740 A non-matching list ([^...]) not containing a newline matches a
3741 newline.
3742
3743 Match-beginning-of-line operator (^) matches the empty string
3744 immediately after a newline, regardless of whether the FLAGS
3745 passed to regexp-exec contain regexp/notbol.
3746
3747 Match-end-of-line operator ($) matches the empty string
3748 immediately before a newline, regardless of whether the FLAGS
3749 passed to regexp-exec contain regexp/noteol.
3750
3751**** Function: regexp-exec REGEXP STR [START [FLAGS]]
3752 Match the compiled regular expression REGEXP against `str'. If
3753 the optional integer START argument is provided, begin matching
3754 from that position in the string. Return a match structure
3755 describing the results of the match, or `#f' if no match could be
3756 found.
3757
3758 FLAGS may be the bitwise-or of one or more of the following:
3759
3760**** Constant: regexp/notbol
3761 The match-beginning-of-line operator always fails to match (but
3762 see the compilation flag regexp/newline above) This flag may be
3763 used when different portions of a string are passed to
3764 regexp-exec and the beginning of the string should not be
3765 interpreted as the beginning of the line.
3766
3767**** Constant: regexp/noteol
3768 The match-end-of-line operator always fails to match (but see the
3769 compilation flag regexp/newline above)
3770
3771**** Function: regexp? OBJ
3772 Return `#t' if OBJ is a compiled regular expression, or `#f'
3773 otherwise.
3774
3775 Regular expressions are commonly used to find patterns in one string
3776and replace them with the contents of another string.
3777
3778**** Function: regexp-substitute PORT MATCH [ITEM...]
3779 Write to the output port PORT selected contents of the match
3780 structure MATCH. Each ITEM specifies what should be written, and
3781 may be one of the following arguments:
3782
3783 * A string. String arguments are written out verbatim.
3784
3785 * An integer. The submatch with that number is written.
3786
3787 * The symbol `pre'. The portion of the matched string preceding
3788 the regexp match is written.
3789
3790 * The symbol `post'. The portion of the matched string
3791 following the regexp match is written.
3792
3793 PORT may be `#f', in which case nothing is written; instead,
3794 `regexp-substitute' constructs a string from the specified ITEMs
3795 and returns that.
3796
3797**** Function: regexp-substitute/global PORT REGEXP TARGET [ITEM...]
3798 Similar to `regexp-substitute', but can be used to perform global
3799 substitutions on STR. Instead of taking a match structure as an
3800 argument, `regexp-substitute/global' takes two string arguments: a
3801 REGEXP string describing a regular expression, and a TARGET string
3802 which should be matched against this regular expression.
3803
3804 Each ITEM behaves as in REGEXP-SUBSTITUTE, with the following
3805 exceptions:
3806
3807 * A function may be supplied. When this function is called, it
3808 will be passed one argument: a match structure for a given
3809 regular expression match. It should return a string to be
3810 written out to PORT.
3811
3812 * The `post' symbol causes `regexp-substitute/global' to recurse
3813 on the unmatched portion of STR. This *must* be supplied in
3814 order to perform global search-and-replace on STR; if it is
3815 not present among the ITEMs, then `regexp-substitute/global'
3816 will return after processing a single match.
3817
3818*** Match Structures
3819
3820 A "match structure" is the object returned by `string-match' and
3821`regexp-exec'. It describes which portion of a string, if any, matched
3822the given regular expression. Match structures include: a reference to
3823the string that was checked for matches; the starting and ending
3824positions of the regexp match; and, if the regexp included any
3825parenthesized subexpressions, the starting and ending positions of each
3826submatch.
3827
3828 In each of the regexp match functions described below, the `match'
3829argument must be a match structure returned by a previous call to
3830`string-match' or `regexp-exec'. Most of these functions return some
3831information about the original target string that was matched against a
3832regular expression; we will call that string TARGET for easy reference.
3833
3834**** Function: regexp-match? OBJ
3835 Return `#t' if OBJ is a match structure returned by a previous
3836 call to `regexp-exec', or `#f' otherwise.
3837
3838**** Function: match:substring MATCH [N]
3839 Return the portion of TARGET matched by subexpression number N.
3840 Submatch 0 (the default) represents the entire regexp match. If
3841 the regular expression as a whole matched, but the subexpression
3842 number N did not match, return `#f'.
3843
3844**** Function: match:start MATCH [N]
3845 Return the starting position of submatch number N.
3846
3847**** Function: match:end MATCH [N]
3848 Return the ending position of submatch number N.
3849
3850**** Function: match:prefix MATCH
3851 Return the unmatched portion of TARGET preceding the regexp match.
3852
3853**** Function: match:suffix MATCH
3854 Return the unmatched portion of TARGET following the regexp match.
3855
3856**** Function: match:count MATCH
3857 Return the number of parenthesized subexpressions from MATCH.
3858 Note that the entire regular expression match itself counts as a
3859 subexpression, and failed submatches are included in the count.
3860
3861**** Function: match:string MATCH
3862 Return the original TARGET string.
3863
3864*** Backslash Escapes
3865
3866 Sometimes you will want a regexp to match characters like `*' or `$'
3867exactly. For example, to check whether a particular string represents
3868a menu entry from an Info node, it would be useful to match it against
3869a regexp like `^* [^:]*::'. However, this won't work; because the
3870asterisk is a metacharacter, it won't match the `*' at the beginning of
3871the string. In this case, we want to make the first asterisk un-magic.
3872
3873 You can do this by preceding the metacharacter with a backslash
3874character `\'. (This is also called "quoting" the metacharacter, and
3875is known as a "backslash escape".) When Guile sees a backslash in a
3876regular expression, it considers the following glyph to be an ordinary
3877character, no matter what special meaning it would ordinarily have.
3878Therefore, we can make the above example work by changing the regexp to
3879`^\* [^:]*::'. The `\*' sequence tells the regular expression engine
3880to match only a single asterisk in the target string.
3881
3882 Since the backslash is itself a metacharacter, you may force a
3883regexp to match a backslash in the target string by preceding the
3884backslash with itself. For example, to find variable references in a
3885TeX program, you might want to find occurrences of the string `\let\'
3886followed by any number of alphabetic characters. The regular expression
3887`\\let\\[A-Za-z]*' would do this: the double backslashes in the regexp
3888each match a single backslash in the target string.
3889
3890**** Function: regexp-quote STR
3891 Quote each special character found in STR with a backslash, and
3892 return the resulting string.
3893
3894 *Very important:* Using backslash escapes in Guile source code (as
3895in Emacs Lisp or C) can be tricky, because the backslash character has
3896special meaning for the Guile reader. For example, if Guile encounters
3897the character sequence `\n' in the middle of a string while processing
3898Scheme code, it replaces those characters with a newline character.
3899Similarly, the character sequence `\t' is replaced by a horizontal tab.
3900Several of these "escape sequences" are processed by the Guile reader
3901before your code is executed. Unrecognized escape sequences are
3902ignored: if the characters `\*' appear in a string, they will be
3903translated to the single character `*'.
3904
3905 This translation is obviously undesirable for regular expressions,
3906since we want to be able to include backslashes in a string in order to
3907escape regexp metacharacters. Therefore, to make sure that a backslash
3908is preserved in a string in your Guile program, you must use *two*
3909consecutive backslashes:
3910
3911 (define Info-menu-entry-pattern (make-regexp "^\\* [^:]*"))
3912
3913 The string in this example is preprocessed by the Guile reader before
3914any code is executed. The resulting argument to `make-regexp' is the
3915string `^\* [^:]*', which is what we really want.
3916
3917 This also means that in order to write a regular expression that
3918matches a single backslash character, the regular expression string in
3919the source code must include *four* backslashes. Each consecutive pair
3920of backslashes gets translated by the Guile reader to a single
3921backslash, and the resulting double-backslash is interpreted by the
3922regexp engine as matching a single backslash character. Hence:
3923
3924 (define tex-variable-pattern (make-regexp "\\\\let\\\\=[A-Za-z]*"))
3925
3926 The reason for the unwieldiness of this syntax is historical. Both
3927regular expression pattern matchers and Unix string processing systems
3928have traditionally used backslashes with the special meanings described
3929above. The POSIX regular expression specification and ANSI C standard
3930both require these semantics. Attempting to abandon either convention
3931would cause other kinds of compatibility problems, possibly more severe
3932ones. Therefore, without extending the Scheme reader to support
3933strings with different quoting conventions (an ungainly and confusing
3934extension when implemented in other languages), we must adhere to this
3935cumbersome escape syntax.
3936
7ad3c1e7
GH
3937* Changes to the gh_ interface
3938
3939* Changes to the scm_ interface
3940
3941* Changes to system call interfaces:
94982a4e 3942
7ad3c1e7 3943** The value returned by `raise' is now unspecified. It throws an exception
e1a191a8
GH
3944if an error occurs.
3945
94982a4e 3946*** A new procedure `sigaction' can be used to install signal handlers
115b09a5
GH
3947
3948(sigaction signum [action] [flags])
3949
3950signum is the signal number, which can be specified using the value
3951of SIGINT etc.
3952
3953If action is omitted, sigaction returns a pair: the CAR is the current
3954signal hander, which will be either an integer with the value SIG_DFL
3955(default action) or SIG_IGN (ignore), or the Scheme procedure which
3956handles the signal, or #f if a non-Scheme procedure handles the
3957signal. The CDR contains the current sigaction flags for the handler.
3958
3959If action is provided, it is installed as the new handler for signum.
3960action can be a Scheme procedure taking one argument, or the value of
3961SIG_DFL (default action) or SIG_IGN (ignore), or #f to restore
3962whatever signal handler was installed before sigaction was first used.
3963Flags can optionally be specified for the new handler (SA_RESTART is
3964always used if the system provides it, so need not be specified.) The
3965return value is a pair with information about the old handler as
3966described above.
3967
3968This interface does not provide access to the "signal blocking"
3969facility. Maybe this is not needed, since the thread support may
3970provide solutions to the problem of consistent access to data
3971structures.
e1a191a8 3972
94982a4e 3973*** A new procedure `flush-all-ports' is equivalent to running
89ea5b7c
GH
3974`force-output' on every port open for output.
3975
94982a4e
JB
3976** Guile now provides information on how it was built, via the new
3977global variable, %guile-build-info. This variable records the values
3978of the standard GNU makefile directory variables as an assocation
3979list, mapping variable names (symbols) onto directory paths (strings).
3980For example, to find out where the Guile link libraries were
3981installed, you can say:
3982
3983guile -c "(display (assq-ref %guile-build-info 'libdir)) (newline)"
3984
3985
3986* Changes to the scm_ interface
3987
3988** The new function scm_handle_by_message_noexit is just like the
3989existing scm_handle_by_message function, except that it doesn't call
3990exit to terminate the process. Instead, it prints a message and just
3991returns #f. This might be a more appropriate catch-all handler for
3992new dynamic roots and threads.
3993
cf78e9e8 3994\f
c484bf7f 3995Changes in Guile 1.1 (released Friday, May 16 1997):
f3b1485f
JB
3996
3997* Changes to the distribution.
3998
3999The Guile 1.0 distribution has been split up into several smaller
4000pieces:
4001guile-core --- the Guile interpreter itself.
4002guile-tcltk --- the interface between the Guile interpreter and
4003 Tcl/Tk; Tcl is an interpreter for a stringy language, and Tk
4004 is a toolkit for building graphical user interfaces.
4005guile-rgx-ctax --- the interface between Guile and the Rx regular
4006 expression matcher, and the translator for the Ctax
4007 programming language. These are packaged together because the
4008 Ctax translator uses Rx to parse Ctax source code.
4009
095936d2
JB
4010This NEWS file describes the changes made to guile-core since the 1.0
4011release.
4012
48d224d7
JB
4013We no longer distribute the documentation, since it was either out of
4014date, or incomplete. As soon as we have current documentation, we
4015will distribute it.
4016
0fcab5ed
JB
4017
4018
f3b1485f
JB
4019* Changes to the stand-alone interpreter
4020
48d224d7
JB
4021** guile now accepts command-line arguments compatible with SCSH, Olin
4022Shivers' Scheme Shell.
4023
4024In general, arguments are evaluated from left to right, but there are
4025exceptions. The following switches stop argument processing, and
4026stash all remaining command-line arguments as the value returned by
4027the (command-line) function.
4028 -s SCRIPT load Scheme source code from FILE, and exit
4029 -c EXPR evalute Scheme expression EXPR, and exit
4030 -- stop scanning arguments; run interactively
4031
4032The switches below are processed as they are encountered.
4033 -l FILE load Scheme source code from FILE
4034 -e FUNCTION after reading script, apply FUNCTION to
4035 command line arguments
4036 -ds do -s script at this point
4037 --emacs enable Emacs protocol (experimental)
4038 -h, --help display this help and exit
4039 -v, --version display version information and exit
4040 \ read arguments from following script lines
4041
4042So, for example, here is a Guile script named `ekko' (thanks, Olin)
4043which re-implements the traditional "echo" command:
4044
4045#!/usr/local/bin/guile -s
4046!#
4047(define (main args)
4048 (map (lambda (arg) (display arg) (display " "))
4049 (cdr args))
4050 (newline))
4051
4052(main (command-line))
4053
4054Suppose we invoke this script as follows:
4055
4056 ekko a speckled gecko
4057
4058Through the magic of Unix script processing (triggered by the `#!'
4059token at the top of the file), /usr/local/bin/guile receives the
4060following list of command-line arguments:
4061
4062 ("-s" "./ekko" "a" "speckled" "gecko")
4063
4064Unix inserts the name of the script after the argument specified on
4065the first line of the file (in this case, "-s"), and then follows that
4066with the arguments given to the script. Guile loads the script, which
4067defines the `main' function, and then applies it to the list of
4068remaining command-line arguments, ("a" "speckled" "gecko").
4069
095936d2
JB
4070In Unix, the first line of a script file must take the following form:
4071
4072#!INTERPRETER ARGUMENT
4073
4074where INTERPRETER is the absolute filename of the interpreter
4075executable, and ARGUMENT is a single command-line argument to pass to
4076the interpreter.
4077
4078You may only pass one argument to the interpreter, and its length is
4079limited. These restrictions can be annoying to work around, so Guile
4080provides a general mechanism (borrowed from, and compatible with,
4081SCSH) for circumventing them.
4082
4083If the ARGUMENT in a Guile script is a single backslash character,
4084`\', Guile will open the script file, parse arguments from its second
4085and subsequent lines, and replace the `\' with them. So, for example,
4086here is another implementation of the `ekko' script:
4087
4088#!/usr/local/bin/guile \
4089-e main -s
4090!#
4091(define (main args)
4092 (for-each (lambda (arg) (display arg) (display " "))
4093 (cdr args))
4094 (newline))
4095
4096If the user invokes this script as follows:
4097
4098 ekko a speckled gecko
4099
4100Unix expands this into
4101
4102 /usr/local/bin/guile \ ekko a speckled gecko
4103
4104When Guile sees the `\' argument, it replaces it with the arguments
4105read from the second line of the script, producing:
4106
4107 /usr/local/bin/guile -e main -s ekko a speckled gecko
4108
4109This tells Guile to load the `ekko' script, and apply the function
4110`main' to the argument list ("a" "speckled" "gecko").
4111
4112Here is how Guile parses the command-line arguments:
4113- Each space character terminates an argument. This means that two
4114 spaces in a row introduce an empty-string argument.
4115- The tab character is not permitted (unless you quote it with the
4116 backslash character, as described below), to avoid confusion.
4117- The newline character terminates the sequence of arguments, and will
4118 also terminate a final non-empty argument. (However, a newline
4119 following a space will not introduce a final empty-string argument;
4120 it only terminates the argument list.)
4121- The backslash character is the escape character. It escapes
4122 backslash, space, tab, and newline. The ANSI C escape sequences
4123 like \n and \t are also supported. These produce argument
4124 constituents; the two-character combination \n doesn't act like a
4125 terminating newline. The escape sequence \NNN for exactly three
4126 octal digits reads as the character whose ASCII code is NNN. As
4127 above, characters produced this way are argument constituents.
4128 Backslash followed by other characters is not allowed.
4129
48d224d7
JB
4130* Changes to the procedure for linking libguile with your programs
4131
4132** Guile now builds and installs a shared guile library, if your
4133system support shared libraries. (It still builds a static library on
4134all systems.) Guile automatically detects whether your system
4135supports shared libraries. To prevent Guile from buildisg shared
4136libraries, pass the `--disable-shared' flag to the configure script.
4137
4138Guile takes longer to compile when it builds shared libraries, because
4139it must compile every file twice --- once to produce position-
4140independent object code, and once to produce normal object code.
4141
4142** The libthreads library has been merged into libguile.
4143
4144To link a program against Guile, you now need only link against
4145-lguile and -lqt; -lthreads is no longer needed. If you are using
4146autoconf to generate configuration scripts for your application, the
4147following lines should suffice to add the appropriate libraries to
4148your link command:
4149
4150### Find quickthreads and libguile.
4151AC_CHECK_LIB(qt, main)
4152AC_CHECK_LIB(guile, scm_shell)
f3b1485f
JB
4153
4154* Changes to Scheme functions
4155
095936d2
JB
4156** Guile Scheme's special syntax for keyword objects is now optional,
4157and disabled by default.
4158
4159The syntax variation from R4RS made it difficult to port some
4160interesting packages to Guile. The routines which accepted keyword
4161arguments (mostly in the module system) have been modified to also
4162accept symbols whose names begin with `:'.
4163
4164To change the keyword syntax, you must first import the (ice-9 debug)
4165module:
4166 (use-modules (ice-9 debug))
4167
4168Then you can enable the keyword syntax as follows:
4169 (read-set! keywords 'prefix)
4170
4171To disable keyword syntax, do this:
4172 (read-set! keywords #f)
4173
4174** Many more primitive functions accept shared substrings as
4175arguments. In the past, these functions required normal, mutable
4176strings as arguments, although they never made use of this
4177restriction.
4178
4179** The uniform array functions now operate on byte vectors. These
4180functions are `array-fill!', `serial-array-copy!', `array-copy!',
4181`serial-array-map', `array-map', `array-for-each', and
4182`array-index-map!'.
4183
4184** The new functions `trace' and `untrace' implement simple debugging
4185support for Scheme functions.
4186
4187The `trace' function accepts any number of procedures as arguments,
4188and tells the Guile interpreter to display each procedure's name and
4189arguments each time the procedure is invoked. When invoked with no
4190arguments, `trace' returns the list of procedures currently being
4191traced.
4192
4193The `untrace' function accepts any number of procedures as arguments,
4194and tells the Guile interpreter not to trace them any more. When
4195invoked with no arguments, `untrace' untraces all curretly traced
4196procedures.
4197
4198The tracing in Guile has an advantage over most other systems: we
4199don't create new procedure objects, but mark the procedure objects
4200themselves. This means that anonymous and internal procedures can be
4201traced.
4202
4203** The function `assert-repl-prompt' has been renamed to
4204`set-repl-prompt!'. It takes one argument, PROMPT.
4205- If PROMPT is #f, the Guile read-eval-print loop will not prompt.
4206- If PROMPT is a string, we use it as a prompt.
4207- If PROMPT is a procedure accepting no arguments, we call it, and
4208 display the result as a prompt.
4209- Otherwise, we display "> ".
4210
4211** The new function `eval-string' reads Scheme expressions from a
4212string and evaluates them, returning the value of the last expression
4213in the string. If the string contains no expressions, it returns an
4214unspecified value.
4215
4216** The new function `thunk?' returns true iff its argument is a
4217procedure of zero arguments.
4218
4219** `defined?' is now a builtin function, instead of syntax. This
4220means that its argument should be quoted. It returns #t iff its
4221argument is bound in the current module.
4222
4223** The new syntax `use-modules' allows you to add new modules to your
4224environment without re-typing a complete `define-module' form. It
4225accepts any number of module names as arguments, and imports their
4226public bindings into the current module.
4227
4228** The new function (module-defined? NAME MODULE) returns true iff
4229NAME, a symbol, is defined in MODULE, a module object.
4230
4231** The new function `builtin-bindings' creates and returns a hash
4232table containing copies of all the root module's bindings.
4233
4234** The new function `builtin-weak-bindings' does the same as
4235`builtin-bindings', but creates a doubly-weak hash table.
4236
4237** The `equal?' function now considers variable objects to be
4238equivalent if they have the same name and the same value.
4239
4240** The new function `command-line' returns the command-line arguments
4241given to Guile, as a list of strings.
4242
4243When using guile as a script interpreter, `command-line' returns the
4244script's arguments; those processed by the interpreter (like `-s' or
4245`-c') are omitted. (In other words, you get the normal, expected
4246behavior.) Any application that uses scm_shell to process its
4247command-line arguments gets this behavior as well.
4248
4249** The new function `load-user-init' looks for a file called `.guile'
4250in the user's home directory, and loads it if it exists. This is
4251mostly for use by the code generated by scm_compile_shell_switches,
4252but we thought it might also be useful in other circumstances.
4253
4254** The new function `log10' returns the base-10 logarithm of its
4255argument.
4256
4257** Changes to I/O functions
4258
4259*** The functions `read', `primitive-load', `read-and-eval!', and
4260`primitive-load-path' no longer take optional arguments controlling
4261case insensitivity and a `#' parser.
4262
4263Case sensitivity is now controlled by a read option called
4264`case-insensitive'. The user can add new `#' syntaxes with the
4265`read-hash-extend' function (see below).
4266
4267*** The new function `read-hash-extend' allows the user to change the
4268syntax of Guile Scheme in a somewhat controlled way.
4269
4270(read-hash-extend CHAR PROC)
4271 When parsing S-expressions, if we read a `#' character followed by
4272 the character CHAR, use PROC to parse an object from the stream.
4273 If PROC is #f, remove any parsing procedure registered for CHAR.
4274
4275 The reader applies PROC to two arguments: CHAR and an input port.
4276
4277*** The new functions read-delimited and read-delimited! provide a
4278general mechanism for doing delimited input on streams.
4279
4280(read-delimited DELIMS [PORT HANDLE-DELIM])
4281 Read until we encounter one of the characters in DELIMS (a string),
4282 or end-of-file. PORT is the input port to read from; it defaults to
4283 the current input port. The HANDLE-DELIM parameter determines how
4284 the terminating character is handled; it should be one of the
4285 following symbols:
4286
4287 'trim omit delimiter from result
4288 'peek leave delimiter character in input stream
4289 'concat append delimiter character to returned value
4290 'split return a pair: (RESULT . TERMINATOR)
4291
4292 HANDLE-DELIM defaults to 'peek.
4293
4294(read-delimited! DELIMS BUF [PORT HANDLE-DELIM START END])
4295 A side-effecting variant of `read-delimited'.
4296
4297 The data is written into the string BUF at the indices in the
4298 half-open interval [START, END); the default interval is the whole
4299 string: START = 0 and END = (string-length BUF). The values of
4300 START and END must specify a well-defined interval in BUF, i.e.
4301 0 <= START <= END <= (string-length BUF).
4302
4303 It returns NBYTES, the number of bytes read. If the buffer filled
4304 up without a delimiter character being found, it returns #f. If the
4305 port is at EOF when the read starts, it returns the EOF object.
4306
4307 If an integer is returned (i.e., the read is successfully terminated
4308 by reading a delimiter character), then the HANDLE-DELIM parameter
4309 determines how to handle the terminating character. It is described
4310 above, and defaults to 'peek.
4311
4312(The descriptions of these functions were borrowed from the SCSH
4313manual, by Olin Shivers and Brian Carlstrom.)
4314
4315*** The `%read-delimited!' function is the primitive used to implement
4316`read-delimited' and `read-delimited!'.
4317
4318(%read-delimited! DELIMS BUF GOBBLE? [PORT START END])
4319
4320This returns a pair of values: (TERMINATOR . NUM-READ).
4321- TERMINATOR describes why the read was terminated. If it is a
4322 character or the eof object, then that is the value that terminated
4323 the read. If it is #f, the function filled the buffer without finding
4324 a delimiting character.
4325- NUM-READ is the number of characters read into BUF.
4326
4327If the read is successfully terminated by reading a delimiter
4328character, then the gobble? parameter determines what to do with the
4329terminating character. If true, the character is removed from the
4330input stream; if false, the character is left in the input stream
4331where a subsequent read operation will retrieve it. In either case,
4332the character is also the first value returned by the procedure call.
4333
4334(The descriptions of this function was borrowed from the SCSH manual,
4335by Olin Shivers and Brian Carlstrom.)
4336
4337*** The `read-line' and `read-line!' functions have changed; they now
4338trim the terminator by default; previously they appended it to the
4339returned string. For the old behavior, use (read-line PORT 'concat).
4340
4341*** The functions `uniform-array-read!' and `uniform-array-write!' now
4342take new optional START and END arguments, specifying the region of
4343the array to read and write.
4344
f348c807
JB
4345*** The `ungetc-char-ready?' function has been removed. We feel it's
4346inappropriate for an interface to expose implementation details this
4347way.
095936d2
JB
4348
4349** Changes to the Unix library and system call interface
4350
4351*** The new fcntl function provides access to the Unix `fcntl' system
4352call.
4353
4354(fcntl PORT COMMAND VALUE)
4355 Apply COMMAND to PORT's file descriptor, with VALUE as an argument.
4356 Values for COMMAND are:
4357
4358 F_DUPFD duplicate a file descriptor
4359 F_GETFD read the descriptor's close-on-exec flag
4360 F_SETFD set the descriptor's close-on-exec flag to VALUE
4361 F_GETFL read the descriptor's flags, as set on open
4362 F_SETFL set the descriptor's flags, as set on open to VALUE
4363 F_GETOWN return the process ID of a socket's owner, for SIGIO
4364 F_SETOWN set the process that owns a socket to VALUE, for SIGIO
4365 FD_CLOEXEC not sure what this is
4366
4367For details, see the documentation for the fcntl system call.
4368
4369*** The arguments to `select' have changed, for compatibility with
4370SCSH. The TIMEOUT parameter may now be non-integral, yielding the
4371expected behavior. The MILLISECONDS parameter has been changed to
4372MICROSECONDS, to more closely resemble the underlying system call.
4373The RVEC, WVEC, and EVEC arguments can now be vectors; the type of the
4374corresponding return set will be the same.
4375
4376*** The arguments to the `mknod' system call have changed. They are
4377now:
4378
4379(mknod PATH TYPE PERMS DEV)
4380 Create a new file (`node') in the file system. PATH is the name of
4381 the file to create. TYPE is the kind of file to create; it should
4382 be 'fifo, 'block-special, or 'char-special. PERMS specifies the
4383 permission bits to give the newly created file. If TYPE is
4384 'block-special or 'char-special, DEV specifies which device the
4385 special file refers to; its interpretation depends on the kind of
4386 special file being created.
4387
4388*** The `fork' function has been renamed to `primitive-fork', to avoid
4389clashing with various SCSH forks.
4390
4391*** The `recv' and `recvfrom' functions have been renamed to `recv!'
4392and `recvfrom!'. They no longer accept a size for a second argument;
4393you must pass a string to hold the received value. They no longer
4394return the buffer. Instead, `recv' returns the length of the message
4395received, and `recvfrom' returns a pair containing the packet's length
4396and originating address.
4397
4398*** The file descriptor datatype has been removed, as have the
4399`read-fd', `write-fd', `close', `lseek', and `dup' functions.
4400We plan to replace these functions with a SCSH-compatible interface.
4401
4402*** The `create' function has been removed; it's just a special case
4403of `open'.
4404
4405*** There are new functions to break down process termination status
4406values. In the descriptions below, STATUS is a value returned by
4407`waitpid'.
4408
4409(status:exit-val STATUS)
4410 If the child process exited normally, this function returns the exit
4411 code for the child process (i.e., the value passed to exit, or
4412 returned from main). If the child process did not exit normally,
4413 this function returns #f.
4414
4415(status:stop-sig STATUS)
4416 If the child process was suspended by a signal, this function
4417 returns the signal that suspended the child. Otherwise, it returns
4418 #f.
4419
4420(status:term-sig STATUS)
4421 If the child process terminated abnormally, this function returns
4422 the signal that terminated the child. Otherwise, this function
4423 returns false.
4424
4425POSIX promises that exactly one of these functions will return true on
4426a valid STATUS value.
4427
4428These functions are compatible with SCSH.
4429
4430*** There are new accessors and setters for the broken-out time vectors
48d224d7
JB
4431returned by `localtime', `gmtime', and that ilk. They are:
4432
4433 Component Accessor Setter
4434 ========================= ============ ============
4435 seconds tm:sec set-tm:sec
4436 minutes tm:min set-tm:min
4437 hours tm:hour set-tm:hour
4438 day of the month tm:mday set-tm:mday
4439 month tm:mon set-tm:mon
4440 year tm:year set-tm:year
4441 day of the week tm:wday set-tm:wday
4442 day in the year tm:yday set-tm:yday
4443 daylight saving time tm:isdst set-tm:isdst
4444 GMT offset, seconds tm:gmtoff set-tm:gmtoff
4445 name of time zone tm:zone set-tm:zone
4446
095936d2
JB
4447*** There are new accessors for the vectors returned by `uname',
4448describing the host system:
48d224d7
JB
4449
4450 Component Accessor
4451 ============================================== ================
4452 name of the operating system implementation utsname:sysname
4453 network name of this machine utsname:nodename
4454 release level of the operating system utsname:release
4455 version level of the operating system utsname:version
4456 machine hardware platform utsname:machine
4457
095936d2
JB
4458*** There are new accessors for the vectors returned by `getpw',
4459`getpwnam', `getpwuid', and `getpwent', describing entries from the
4460system's user database:
4461
4462 Component Accessor
4463 ====================== =================
4464 user name passwd:name
4465 user password passwd:passwd
4466 user id passwd:uid
4467 group id passwd:gid
4468 real name passwd:gecos
4469 home directory passwd:dir
4470 shell program passwd:shell
4471
4472*** There are new accessors for the vectors returned by `getgr',
4473`getgrnam', `getgrgid', and `getgrent', describing entries from the
4474system's group database:
4475
4476 Component Accessor
4477 ======================= ============
4478 group name group:name
4479 group password group:passwd
4480 group id group:gid
4481 group members group:mem
4482
4483*** There are new accessors for the vectors returned by `gethost',
4484`gethostbyaddr', `gethostbyname', and `gethostent', describing
4485internet hosts:
4486
4487 Component Accessor
4488 ========================= ===============
4489 official name of host hostent:name
4490 alias list hostent:aliases
4491 host address type hostent:addrtype
4492 length of address hostent:length
4493 list of addresses hostent:addr-list
4494
4495*** There are new accessors for the vectors returned by `getnet',
4496`getnetbyaddr', `getnetbyname', and `getnetent', describing internet
4497networks:
4498
4499 Component Accessor
4500 ========================= ===============
4501 official name of net netent:name
4502 alias list netent:aliases
4503 net number type netent:addrtype
4504 net number netent:net
4505
4506*** There are new accessors for the vectors returned by `getproto',
4507`getprotobyname', `getprotobynumber', and `getprotoent', describing
4508internet protocols:
4509
4510 Component Accessor
4511 ========================= ===============
4512 official protocol name protoent:name
4513 alias list protoent:aliases
4514 protocol number protoent:proto
4515
4516*** There are new accessors for the vectors returned by `getserv',
4517`getservbyname', `getservbyport', and `getservent', describing
4518internet protocols:
4519
4520 Component Accessor
4521 ========================= ===============
4522 official service name servent:name
4523 alias list servent:aliases
4524 port number servent:port
4525 protocol to use servent:proto
4526
4527*** There are new accessors for the sockaddr structures returned by
4528`accept', `getsockname', `getpeername', `recvfrom!':
4529
4530 Component Accessor
4531 ======================================== ===============
4532 address format (`family') sockaddr:fam
4533 path, for file domain addresses sockaddr:path
4534 address, for internet domain addresses sockaddr:addr
4535 TCP or UDP port, for internet sockaddr:port
4536
4537*** The `getpwent', `getgrent', `gethostent', `getnetent',
4538`getprotoent', and `getservent' functions now return #f at the end of
4539the user database. (They used to throw an exception.)
4540
4541Note that calling MUMBLEent function is equivalent to calling the
4542corresponding MUMBLE function with no arguments.
4543
4544*** The `setpwent', `setgrent', `sethostent', `setnetent',
4545`setprotoent', and `setservent' routines now take no arguments.
4546
4547*** The `gethost', `getproto', `getnet', and `getserv' functions now
4548provide more useful information when they throw an exception.
4549
4550*** The `lnaof' function has been renamed to `inet-lnaof'.
4551
4552*** Guile now claims to have the `current-time' feature.
4553
4554*** The `mktime' function now takes an optional second argument ZONE,
4555giving the time zone to use for the conversion. ZONE should be a
4556string, in the same format as expected for the "TZ" environment variable.
4557
4558*** The `strptime' function now returns a pair (TIME . COUNT), where
4559TIME is the parsed time as a vector, and COUNT is the number of
4560characters from the string left unparsed. This function used to
4561return the remaining characters as a string.
4562
4563*** The `gettimeofday' function has replaced the old `time+ticks' function.
4564The return value is now (SECONDS . MICROSECONDS); the fractional
4565component is no longer expressed in "ticks".
4566
4567*** The `ticks/sec' constant has been removed, in light of the above change.
6685dc83 4568
ea00ecba
MG
4569* Changes to the gh_ interface
4570
4571** gh_eval_str() now returns an SCM object which is the result of the
4572evaluation
4573
aaef0d2a
MG
4574** gh_scm2str() now copies the Scheme data to a caller-provided C
4575array
4576
4577** gh_scm2newstr() now makes a C array, copies the Scheme data to it,
4578and returns the array
4579
4580** gh_scm2str0() is gone: there is no need to distinguish
4581null-terminated from non-null-terminated, since gh_scm2newstr() allows
4582the user to interpret the data both ways.
4583
f3b1485f
JB
4584* Changes to the scm_ interface
4585
095936d2
JB
4586** The new function scm_symbol_value0 provides an easy way to get a
4587symbol's value from C code:
4588
4589SCM scm_symbol_value0 (char *NAME)
4590 Return the value of the symbol named by the null-terminated string
4591 NAME in the current module. If the symbol named NAME is unbound in
4592 the current module, return SCM_UNDEFINED.
4593
4594** The new function scm_sysintern0 creates new top-level variables,
4595without assigning them a value.
4596
4597SCM scm_sysintern0 (char *NAME)
4598 Create a new Scheme top-level variable named NAME. NAME is a
4599 null-terminated string. Return the variable's value cell.
4600
4601** The function scm_internal_catch is the guts of catch. It handles
4602all the mechanics of setting up a catch target, invoking the catch
4603body, and perhaps invoking the handler if the body does a throw.
4604
4605The function is designed to be usable from C code, but is general
4606enough to implement all the semantics Guile Scheme expects from throw.
4607
4608TAG is the catch tag. Typically, this is a symbol, but this function
4609doesn't actually care about that.
4610
4611BODY is a pointer to a C function which runs the body of the catch;
4612this is the code you can throw from. We call it like this:
4613 BODY (BODY_DATA, JMPBUF)
4614where:
4615 BODY_DATA is just the BODY_DATA argument we received; we pass it
4616 through to BODY as its first argument. The caller can make
4617 BODY_DATA point to anything useful that BODY might need.
4618 JMPBUF is the Scheme jmpbuf object corresponding to this catch,
4619 which we have just created and initialized.
4620
4621HANDLER is a pointer to a C function to deal with a throw to TAG,
4622should one occur. We call it like this:
4623 HANDLER (HANDLER_DATA, THROWN_TAG, THROW_ARGS)
4624where
4625 HANDLER_DATA is the HANDLER_DATA argument we recevied; it's the
4626 same idea as BODY_DATA above.
4627 THROWN_TAG is the tag that the user threw to; usually this is
4628 TAG, but it could be something else if TAG was #t (i.e., a
4629 catch-all), or the user threw to a jmpbuf.
4630 THROW_ARGS is the list of arguments the user passed to the THROW
4631 function.
4632
4633BODY_DATA is just a pointer we pass through to BODY. HANDLER_DATA
4634is just a pointer we pass through to HANDLER. We don't actually
4635use either of those pointers otherwise ourselves. The idea is
4636that, if our caller wants to communicate something to BODY or
4637HANDLER, it can pass a pointer to it as MUMBLE_DATA, which BODY and
4638HANDLER can then use. Think of it as a way to make BODY and
4639HANDLER closures, not just functions; MUMBLE_DATA points to the
4640enclosed variables.
4641
4642Of course, it's up to the caller to make sure that any data a
4643MUMBLE_DATA needs is protected from GC. A common way to do this is
4644to make MUMBLE_DATA a pointer to data stored in an automatic
4645structure variable; since the collector must scan the stack for
4646references anyway, this assures that any references in MUMBLE_DATA
4647will be found.
4648
4649** The new function scm_internal_lazy_catch is exactly like
4650scm_internal_catch, except:
4651
4652- It does not unwind the stack (this is the major difference).
4653- If handler returns, its value is returned from the throw.
4654- BODY always receives #f as its JMPBUF argument (since there's no
4655 jmpbuf associated with a lazy catch, because we don't unwind the
4656 stack.)
4657
4658** scm_body_thunk is a new body function you can pass to
4659scm_internal_catch if you want the body to be like Scheme's `catch'
4660--- a thunk, or a function of one argument if the tag is #f.
4661
4662BODY_DATA is a pointer to a scm_body_thunk_data structure, which
4663contains the Scheme procedure to invoke as the body, and the tag
4664we're catching. If the tag is #f, then we pass JMPBUF (created by
4665scm_internal_catch) to the body procedure; otherwise, the body gets
4666no arguments.
4667
4668** scm_handle_by_proc is a new handler function you can pass to
4669scm_internal_catch if you want the handler to act like Scheme's catch
4670--- call a procedure with the tag and the throw arguments.
4671
4672If the user does a throw to this catch, this function runs a handler
4673procedure written in Scheme. HANDLER_DATA is a pointer to an SCM
4674variable holding the Scheme procedure object to invoke. It ought to
4675be a pointer to an automatic variable (i.e., one living on the stack),
4676or the procedure object should be otherwise protected from GC.
4677
4678** scm_handle_by_message is a new handler function to use with
4679`scm_internal_catch' if you want Guile to print a message and die.
4680It's useful for dealing with throws to uncaught keys at the top level.
4681
4682HANDLER_DATA, if non-zero, is assumed to be a char * pointing to a
4683message header to print; if zero, we use "guile" instead. That
4684text is followed by a colon, then the message described by ARGS.
4685
4686** The return type of scm_boot_guile is now void; the function does
4687not return a value, and indeed, never returns at all.
4688
f3b1485f
JB
4689** The new function scm_shell makes it easy for user applications to
4690process command-line arguments in a way that is compatible with the
4691stand-alone guile interpreter (which is in turn compatible with SCSH,
4692the Scheme shell).
4693
4694To use the scm_shell function, first initialize any guile modules
4695linked into your application, and then call scm_shell with the values
7ed46dc8 4696of ARGC and ARGV your `main' function received. scm_shell will add
f3b1485f
JB
4697any SCSH-style meta-arguments from the top of the script file to the
4698argument vector, and then process the command-line arguments. This
4699generally means loading a script file or starting up an interactive
4700command interpreter. For details, see "Changes to the stand-alone
4701interpreter" above.
4702
095936d2
JB
4703** The new functions scm_get_meta_args and scm_count_argv help you
4704implement the SCSH-style meta-argument, `\'.
4705
4706char **scm_get_meta_args (int ARGC, char **ARGV)
4707 If the second element of ARGV is a string consisting of a single
4708 backslash character (i.e. "\\" in Scheme notation), open the file
4709 named by the following argument, parse arguments from it, and return
4710 the spliced command line. The returned array is terminated by a
4711 null pointer.
4712
4713 For details of argument parsing, see above, under "guile now accepts
4714 command-line arguments compatible with SCSH..."
4715
4716int scm_count_argv (char **ARGV)
4717 Count the arguments in ARGV, assuming it is terminated by a null
4718 pointer.
4719
4720For an example of how these functions might be used, see the source
4721code for the function scm_shell in libguile/script.c.
4722
4723You will usually want to use scm_shell instead of calling this
4724function yourself.
4725
4726** The new function scm_compile_shell_switches turns an array of
4727command-line arguments into Scheme code to carry out the actions they
4728describe. Given ARGC and ARGV, it returns a Scheme expression to
4729evaluate, and calls scm_set_program_arguments to make any remaining
4730command-line arguments available to the Scheme code. For example,
4731given the following arguments:
4732
4733 -e main -s ekko a speckled gecko
4734
4735scm_set_program_arguments will return the following expression:
4736
4737 (begin (load "ekko") (main (command-line)) (quit))
4738
4739You will usually want to use scm_shell instead of calling this
4740function yourself.
4741
4742** The function scm_shell_usage prints a usage message appropriate for
4743an interpreter that uses scm_compile_shell_switches to handle its
4744command-line arguments.
4745
4746void scm_shell_usage (int FATAL, char *MESSAGE)
4747 Print a usage message to the standard error output. If MESSAGE is
4748 non-zero, write it before the usage message, followed by a newline.
4749 If FATAL is non-zero, exit the process, using FATAL as the
4750 termination status. (If you want to be compatible with Guile,
4751 always use 1 as the exit status when terminating due to command-line
4752 usage problems.)
4753
4754You will usually want to use scm_shell instead of calling this
4755function yourself.
48d224d7
JB
4756
4757** scm_eval_0str now returns SCM_UNSPECIFIED if the string contains no
095936d2
JB
4758expressions. It used to return SCM_EOL. Earth-shattering.
4759
4760** The macros for declaring scheme objects in C code have been
4761rearranged slightly. They are now:
4762
4763SCM_SYMBOL (C_NAME, SCHEME_NAME)
4764 Declare a static SCM variable named C_NAME, and initialize it to
4765 point to the Scheme symbol whose name is SCHEME_NAME. C_NAME should
4766 be a C identifier, and SCHEME_NAME should be a C string.
4767
4768SCM_GLOBAL_SYMBOL (C_NAME, SCHEME_NAME)
4769 Just like SCM_SYMBOL, but make C_NAME globally visible.
4770
4771SCM_VCELL (C_NAME, SCHEME_NAME)
4772 Create a global variable at the Scheme level named SCHEME_NAME.
4773 Declare a static SCM variable named C_NAME, and initialize it to
4774 point to the Scheme variable's value cell.
4775
4776SCM_GLOBAL_VCELL (C_NAME, SCHEME_NAME)
4777 Just like SCM_VCELL, but make C_NAME globally visible.
4778
4779The `guile-snarf' script writes initialization code for these macros
4780to its standard output, given C source code as input.
4781
4782The SCM_GLOBAL macro is gone.
4783
4784** The scm_read_line and scm_read_line_x functions have been replaced
4785by Scheme code based on the %read-delimited! procedure (known to C
4786code as scm_read_delimited_x). See its description above for more
4787information.
48d224d7 4788
095936d2
JB
4789** The function scm_sys_open has been renamed to scm_open. It now
4790returns a port instead of an FD object.
ea00ecba 4791
095936d2
JB
4792* The dynamic linking support has changed. For more information, see
4793libguile/DYNAMIC-LINKING.
ea00ecba 4794
f7b47737
JB
4795\f
4796Guile 1.0b3
3065a62a 4797
f3b1485f
JB
4798User-visible changes from Thursday, September 5, 1996 until Guile 1.0
4799(Sun 5 Jan 1997):
3065a62a 4800
4b521edb 4801* Changes to the 'guile' program:
3065a62a 4802
4b521edb
JB
4803** Guile now loads some new files when it starts up. Guile first
4804searches the load path for init.scm, and loads it if found. Then, if
4805Guile is not being used to execute a script, and the user's home
4806directory contains a file named `.guile', Guile loads that.
c6486f8a 4807
4b521edb 4808** You can now use Guile as a shell script interpreter.
3065a62a
JB
4809
4810To paraphrase the SCSH manual:
4811
4812 When Unix tries to execute an executable file whose first two
4813 characters are the `#!', it treats the file not as machine code to
4814 be directly executed by the native processor, but as source code
4815 to be executed by some interpreter. The interpreter to use is
4816 specified immediately after the #! sequence on the first line of
4817 the source file. The kernel reads in the name of the interpreter,
4818 and executes that instead. It passes the interpreter the source
4819 filename as its first argument, with the original arguments
4820 following. Consult the Unix man page for the `exec' system call
4821 for more information.
4822
1a1945be
JB
4823Now you can use Guile as an interpreter, using a mechanism which is a
4824compatible subset of that provided by SCSH.
4825
3065a62a
JB
4826Guile now recognizes a '-s' command line switch, whose argument is the
4827name of a file of Scheme code to load. It also treats the two
4828characters `#!' as the start of a comment, terminated by `!#'. Thus,
4829to make a file of Scheme code directly executable by Unix, insert the
4830following two lines at the top of the file:
4831
4832#!/usr/local/bin/guile -s
4833!#
4834
4835Guile treats the argument of the `-s' command-line switch as the name
4836of a file of Scheme code to load, and treats the sequence `#!' as the
4837start of a block comment, terminated by `!#'.
4838
4839For example, here's a version of 'echo' written in Scheme:
4840
4841#!/usr/local/bin/guile -s
4842!#
4843(let loop ((args (cdr (program-arguments))))
4844 (if (pair? args)
4845 (begin
4846 (display (car args))
4847 (if (pair? (cdr args))
4848 (display " "))
4849 (loop (cdr args)))))
4850(newline)
4851
4852Why does `#!' start a block comment terminated by `!#', instead of the
4853end of the line? That is the notation SCSH uses, and although we
4854don't yet support the other SCSH features that motivate that choice,
4855we would like to be backward-compatible with any existing Guile
3763761c
JB
4856scripts once we do. Furthermore, if the path to Guile on your system
4857is too long for your kernel, you can start the script with this
4858horrible hack:
4859
4860#!/bin/sh
4861exec /really/long/path/to/guile -s "$0" ${1+"$@"}
4862!#
3065a62a
JB
4863
4864Note that some very old Unix systems don't support the `#!' syntax.
4865
c6486f8a 4866
4b521edb 4867** You can now run Guile without installing it.
6685dc83
JB
4868
4869Previous versions of the interactive Guile interpreter (`guile')
4870couldn't start up unless Guile's Scheme library had been installed;
4871they used the value of the environment variable `SCHEME_LOAD_PATH'
4872later on in the startup process, but not to find the startup code
4873itself. Now Guile uses `SCHEME_LOAD_PATH' in all searches for Scheme
4874code.
4875
4876To run Guile without installing it, build it in the normal way, and
4877then set the environment variable `SCHEME_LOAD_PATH' to a
4878colon-separated list of directories, including the top-level directory
4879of the Guile sources. For example, if you unpacked Guile so that the
4880full filename of this NEWS file is /home/jimb/guile-1.0b3/NEWS, then
4881you might say
4882
4883 export SCHEME_LOAD_PATH=/home/jimb/my-scheme:/home/jimb/guile-1.0b3
4884
c6486f8a 4885
4b521edb
JB
4886** Guile's read-eval-print loop no longer prints #<unspecified>
4887results. If the user wants to see this, she can evaluate the
4888expression (assert-repl-print-unspecified #t), perhaps in her startup
48d224d7 4889file.
6685dc83 4890
4b521edb
JB
4891** Guile no longer shows backtraces by default when an error occurs;
4892however, it does display a message saying how to get one, and how to
4893request that they be displayed by default. After an error, evaluate
4894 (backtrace)
4895to see a backtrace, and
4896 (debug-enable 'backtrace)
4897to see them by default.
6685dc83 4898
6685dc83 4899
d9fb83d9 4900
4b521edb
JB
4901* Changes to Guile Scheme:
4902
4903** Guile now distinguishes between #f and the empty list.
4904
4905This is for compatibility with the IEEE standard, the (possibly)
4906upcoming Revised^5 Report on Scheme, and many extant Scheme
4907implementations.
4908
4909Guile used to have #f and '() denote the same object, to make Scheme's
4910type system more compatible with Emacs Lisp's. However, the change
4911caused too much trouble for Scheme programmers, and we found another
4912way to reconcile Emacs Lisp with Scheme that didn't require this.
4913
4914
4915** Guile's delq, delv, delete functions, and their destructive
c6486f8a
JB
4916counterparts, delq!, delv!, and delete!, now remove all matching
4917elements from the list, not just the first. This matches the behavior
4918of the corresponding Emacs Lisp functions, and (I believe) the Maclisp
4919functions which inspired them.
4920
4921I recognize that this change may break code in subtle ways, but it
4922seems best to make the change before the FSF's first Guile release,
4923rather than after.
4924
4925
4b521edb 4926** The compiled-library-path function has been deleted from libguile.
6685dc83 4927
4b521edb 4928** The facilities for loading Scheme source files have changed.
c6486f8a 4929
4b521edb 4930*** The variable %load-path now tells Guile which directories to search
6685dc83
JB
4931for Scheme code. Its value is a list of strings, each of which names
4932a directory.
4933
4b521edb
JB
4934*** The variable %load-extensions now tells Guile which extensions to
4935try appending to a filename when searching the load path. Its value
4936is a list of strings. Its default value is ("" ".scm").
4937
4938*** (%search-load-path FILENAME) searches the directories listed in the
4939value of the %load-path variable for a Scheme file named FILENAME,
4940with all the extensions listed in %load-extensions. If it finds a
4941match, then it returns its full filename. If FILENAME is absolute, it
4942returns it unchanged. Otherwise, it returns #f.
6685dc83 4943
4b521edb
JB
4944%search-load-path will not return matches that refer to directories.
4945
4946*** (primitive-load FILENAME :optional CASE-INSENSITIVE-P SHARP)
4947uses %seach-load-path to find a file named FILENAME, and loads it if
4948it finds it. If it can't read FILENAME for any reason, it throws an
4949error.
6685dc83
JB
4950
4951The arguments CASE-INSENSITIVE-P and SHARP are interpreted as by the
4b521edb
JB
4952`read' function.
4953
4954*** load uses the same searching semantics as primitive-load.
4955
4956*** The functions %try-load, try-load-with-path, %load, load-with-path,
4957basic-try-load-with-path, basic-load-with-path, try-load-module-with-
4958path, and load-module-with-path have been deleted. The functions
4959above should serve their purposes.
4960
4961*** If the value of the variable %load-hook is a procedure,
4962`primitive-load' applies its value to the name of the file being
4963loaded (without the load path directory name prepended). If its value
4964is #f, it is ignored. Otherwise, an error occurs.
4965
4966This is mostly useful for printing load notification messages.
4967
4968
4969** The function `eval!' is no longer accessible from the scheme level.
4970We can't allow operations which introduce glocs into the scheme level,
4971because Guile's type system can't handle these as data. Use `eval' or
4972`read-and-eval!' (see below) as replacement.
4973
4974** The new function read-and-eval! reads an expression from PORT,
4975evaluates it, and returns the result. This is more efficient than
4976simply calling `read' and `eval', since it is not necessary to make a
4977copy of the expression for the evaluator to munge.
4978
4979Its optional arguments CASE_INSENSITIVE_P and SHARP are interpreted as
4980for the `read' function.
4981
4982
4983** The function `int?' has been removed; its definition was identical
4984to that of `integer?'.
4985
4986** The functions `<?', `<?', `<=?', `=?', `>?', and `>=?'. Code should
4987use the R4RS names for these functions.
4988
4989** The function object-properties no longer returns the hash handle;
4990it simply returns the object's property list.
4991
4992** Many functions have been changed to throw errors, instead of
4993returning #f on failure. The point of providing exception handling in
4994the language is to simplify the logic of user code, but this is less
4995useful if Guile's primitives don't throw exceptions.
4996
4997** The function `fileno' has been renamed from `%fileno'.
4998
4999** The function primitive-mode->fdes returns #t or #f now, not 1 or 0.
5000
5001
5002* Changes to Guile's C interface:
5003
5004** The library's initialization procedure has been simplified.
5005scm_boot_guile now has the prototype:
5006
5007void scm_boot_guile (int ARGC,
5008 char **ARGV,
5009 void (*main_func) (),
5010 void *closure);
5011
5012scm_boot_guile calls MAIN_FUNC, passing it CLOSURE, ARGC, and ARGV.
5013MAIN_FUNC should do all the work of the program (initializing other
5014packages, reading user input, etc.) before returning. When MAIN_FUNC
5015returns, call exit (0); this function never returns. If you want some
5016other exit value, MAIN_FUNC may call exit itself.
5017
5018scm_boot_guile arranges for program-arguments to return the strings
5019given by ARGC and ARGV. If MAIN_FUNC modifies ARGC/ARGV, should call
5020scm_set_program_arguments with the final list, so Scheme code will
5021know which arguments have been processed.
5022
5023scm_boot_guile establishes a catch-all catch handler which prints an
5024error message and exits the process. This means that Guile exits in a
5025coherent way when system errors occur and the user isn't prepared to
5026handle it. If the user doesn't like this behavior, they can establish
5027their own universal catcher in MAIN_FUNC to shadow this one.
5028
5029Why must the caller do all the real work from MAIN_FUNC? The garbage
5030collector assumes that all local variables of type SCM will be above
5031scm_boot_guile's stack frame on the stack. If you try to manipulate
5032SCM values after this function returns, it's the luck of the draw
5033whether the GC will be able to find the objects you allocate. So,
5034scm_boot_guile function exits, rather than returning, to discourage
5035people from making that mistake.
5036
5037The IN, OUT, and ERR arguments were removed; there are other
5038convenient ways to override these when desired.
5039
5040The RESULT argument was deleted; this function should never return.
5041
5042The BOOT_CMD argument was deleted; the MAIN_FUNC argument is more
5043general.
5044
5045
5046** Guile's header files should no longer conflict with your system's
5047header files.
5048
5049In order to compile code which #included <libguile.h>, previous
5050versions of Guile required you to add a directory containing all the
5051Guile header files to your #include path. This was a problem, since
5052Guile's header files have names which conflict with many systems'
5053header files.
5054
5055Now only <libguile.h> need appear in your #include path; you must
5056refer to all Guile's other header files as <libguile/mumble.h>.
5057Guile's installation procedure puts libguile.h in $(includedir), and
5058the rest in $(includedir)/libguile.
5059
5060
5061** Two new C functions, scm_protect_object and scm_unprotect_object,
5062have been added to the Guile library.
5063
5064scm_protect_object (OBJ) protects OBJ from the garbage collector.
5065OBJ will not be freed, even if all other references are dropped,
5066until someone does scm_unprotect_object (OBJ). Both functions
5067return OBJ.
5068
5069Note that calls to scm_protect_object do not nest. You can call
5070scm_protect_object any number of times on a given object, and the
5071next call to scm_unprotect_object will unprotect it completely.
5072
5073Basically, scm_protect_object and scm_unprotect_object just
5074maintain a list of references to things. Since the GC knows about
5075this list, all objects it mentions stay alive. scm_protect_object
5076adds its argument to the list; scm_unprotect_object remove its
5077argument from the list.
5078
5079
5080** scm_eval_0str now returns the value of the last expression
5081evaluated.
5082
5083** The new function scm_read_0str reads an s-expression from a
5084null-terminated string, and returns it.
5085
5086** The new function `scm_stdio_to_port' converts a STDIO file pointer
5087to a Scheme port object.
5088
5089** The new function `scm_set_program_arguments' allows C code to set
e80c8fea 5090the value returned by the Scheme `program-arguments' function.
6685dc83 5091
6685dc83 5092\f
1a1945be
JB
5093Older changes:
5094
5095* Guile no longer includes sophisticated Tcl/Tk support.
5096
5097The old Tcl/Tk support was unsatisfying to us, because it required the
5098user to link against the Tcl library, as well as Tk and Guile. The
5099interface was also un-lispy, in that it preserved Tcl/Tk's practice of
5100referring to widgets by names, rather than exporting widgets to Scheme
5101code as a special datatype.
5102
5103In the Usenix Tk Developer's Workshop held in July 1996, the Tcl/Tk
5104maintainers described some very interesting changes in progress to the
5105Tcl/Tk internals, which would facilitate clean interfaces between lone
5106Tk and other interpreters --- even for garbage-collected languages
5107like Scheme. They expected the new Tk to be publicly available in the
5108fall of 1996.
5109
5110Since it seems that Guile might soon have a new, cleaner interface to
5111lone Tk, and that the old Guile/Tk glue code would probably need to be
5112completely rewritten, we (Jim Blandy and Richard Stallman) have
5113decided not to support the old code. We'll spend the time instead on
5114a good interface to the newer Tk, as soon as it is available.
5c54da76 5115
8512dea6 5116Until then, gtcltk-lib provides trivial, low-maintenance functionality.
deb95d71 5117
5c54da76
JB
5118\f
5119Copyright information:
5120
ea00ecba 5121Copyright (C) 1996,1997 Free Software Foundation, Inc.
5c54da76
JB
5122
5123 Permission is granted to anyone to make or distribute verbatim copies
5124 of this document as received, in any medium, provided that the
5125 copyright notice and this permission notice are preserved,
5126 thus giving the recipient permission to redistribute in turn.
5127
5128 Permission is granted to distribute modified versions
5129 of this document, or of portions of it,
5130 under the above conditions, provided also that they
5131 carry prominent notices stating who last changed them.
5132
48d224d7
JB
5133\f
5134Local variables:
5135mode: outline
5136paragraph-separate: "[ \f]*$"
5137end:
5138