* acinclude.m4 (GUILE_NAMED_CHECK_FUNC): New macro: Tagged test,
[bpt/guile.git] / NEWS
CommitLineData
f7b47737
JB
1Guile NEWS --- history of user-visible changes. -*- text -*-
2Copyright (C) 1996, 1997 Free Software Foundation, Inc.
5c54da76
JB
3See the end for copying conditions.
4
16f2ebea 5Please send Guile bug reports to bug-guile@prep.ai.mit.edu.
5c54da76 6\f
c484bf7f
JB
7Changes since Guile 1.2:
8
9* Changes to the distribution
10
11* Changes to the stand-alone interpreter
12
13* Changes to the procedure for linking libguile with your programs
14
15* Changes to Scheme functions and syntax
7ad3c1e7 16
9c3fb66f
MV
17** The detection of circular references has been extended to structs.
18That is, a structure that -- in the process of being printed -- prints
19itself does not lead to infinite recursion.
20
04c76b58
MV
21** There is now some basic support for fluids. Please read
22"libguile/fluid.h" to find out more. It is accessible from Scheme with
9c3fb66f
MV
23the following functions and macros:
24
25Function: make-fluid
26
27 Create a new fluid object. Fluids are not special variables or
28 some other extension to the semantics of Scheme, but rather
29 ordinary Scheme objects. You can store them into variables (that
30 are still lexically scoped, of course) or into any other place you
31 like. Every fluid has a initial value of `#f'.
04c76b58 32
9c3fb66f 33Function: fluid? OBJ
04c76b58 34
9c3fb66f 35 Test whether OBJ is a fluid.
04c76b58 36
9c3fb66f
MV
37Function: fluid-ref FLUID
38Function: fluid-set! FLUID VAL
04c76b58
MV
39
40 Access/modify the fluid FLUID. Modifications are only visible
41 within the current dynamic root (that includes threads).
42
9c3fb66f
MV
43Function: with-fluids* FLUIDS VALUES THUNK
44
45 FLUIDS is a list of fluids and VALUES a corresponding list of
46 values for these fluids. Before THUNK gets called the values are
47 installed in the fluids and the old values of the fluids are
48 saved in the VALUES list. When the flow of control leaves THUNK
49 or reenters it, the values get swapped again. You might think of
50 this as a `safe-fluid-excursion'. Note that the VALUES list is
51 modified by `with-fluids*'.
52
53Macro: with-fluids ((FLUID VALUE) ...) FORM ...
54
55 The same as `with-fluids*' but with a different syntax. It looks
56 just like `let', but both FLUID and VALUE are evaluated. Remember,
57 fluids are not special variables but ordinary objects. FLUID
58 should evaluate to a fluid.
04c76b58 59
64d01d13
GH
60* Changes to system call interfaces:
61
62** close-port, close-input-port and close-output-port now return a
63boolean instead of an `unspecified' object. #t means that the port
64was successfully closed, while #f means it was already closed. It is
65also now possible for these procedures to raise an exception if an
66error occurs (some errors from write can be delayed until close.)
67
6afcd3b2
GH
68** the first argument to chmod, fcntl, ftell and fseek can now be a
69file descriptor.
70
71** the third argument to fcntl is now optional.
72
73** the first argument to chown can now be a file descriptor or a port.
74
75** the argument to stat can now be a port.
76
64d01d13
GH
77** The following new procedures have been added (most use scsh
78interfaces):
79
80** close PORT/FD
81Similar to close-port, but also works on file descriptors. A side
82effect of closing a file descriptor is that any ports using that file
83descriptor are moved to a different file descriptor and have
84their revealed counts set to zero.
85
86The next five procedures perform a dup2 system call, if NEWFD (an
87integer) is supplied, otherwise a dup. The file descriptor to be
88duplicated can be supplied as an integer or wrapped in a port. The
89type of value returned varies depending on which procedure is used.
90
91All procedures also have the side effect when performing dup2 that any
92ports using NEWFD are moved to a different file descriptor and have
93their revealed counts set to zero.
94
95** dup->fdes PORT/FD [NEWFD]
96Returns an integer file descriptor.
97
98** dup->inport PORT/FD [NEWFD]
99Returns a new input port using the new file descriptor.
100
101** dup->outport PORT/FD [NEWFD]
102Returns a new output port using the new file descriptor.
103
104** dup PORT/FD [NEWFD]
105Returns a new port if PORT/FD is a port, with the same mode as the
106supplied port, otherwise returns an integer file descriptor.
107
108** dup->port PORT/FD MODE [NEWFD]
109Returns a new port using the new file descriptor. MODE supplies a
110mode string for the port (as for `open-file').
111
64d01d13
GH
112** port->fdes PORT
113Returns the integer file descriptor underlying PORT. As a
114side effect the revealed count of PORT is incremented.
115
116** fdes->inport FDES
117Returns an existing input port which has FDES as its underlying file
118descriptor, if one exists, and increments its revealed count.
119Otherwise, returns a new input port with a revealed count of 1.
120
121** fdes->outport FDES
122Returns an existing output port which has FDES as its underlying file
123descriptor, if one exists, and increments its revealed count.
124Otherwise, returns a new output port with a revealed count of 1.
125
7a6f1ffa 126** setenv NAME VALUE
956055a9
GH
127If VALUE is `#f', removes NAME from the environment. Otherwise
128adds the string NAME=VALUE to the environment, replacing any previous
129value for NAME.
130
6afcd3b2
GH
131** truncate-file OBJ SIZE
132 Truncates the file referred to by OBJ to at most SIZE bytes. OBJ
133 can be a string containing a file name or an integer file
134 descriptor or port open for output on the file. The underlying
135 system calls are `truncate' and `ftruncate'.
136
137 The return value is unspecified.
138
7a6f1ffa
GH
139** setvbuf PORT MODE [SIZE]
140 Set the buffering mode for PORT. MODE can be:
141 `_IONBF'
142 non-buffered
143
144 `_IOLBF'
145 line buffered
146
147 `_IOFBF'
148 block buffered, using a newly allocated buffer of SIZE bytes.
149 However if SIZE is zero or unspecified, the port will be made
150 non-buffered.
151
152 This procedure should not be used after I/O has been performed with
153 the port.
154
155 Ports are usually block buffered by default, with a default buffer
156 size. Procedures e.g., *Note open-file: File Ports, which accept a
157 mode string allow `0' to be added to request an unbuffered port.
158
6afcd3b2
GH
159** fsync PORT/FD
160 Copies any unwritten data for the specified output file descriptor
161 to disk. If PORT/FD is a port, its buffer is flushed before the
162 underlying file descriptor is fsync'd. The return value is
163 unspecified.
164
165** open-fdes PATH FLAGS [MODES]
166 Similar to `open' but returns a file descriptor instead of a port.
167
168** procedure: execle PATH ENV [ARG] ...
169 Similar to `execl', but the environment of the new process is
170 specified by ENV, which must be a list of strings as returned by
171 the `environ' procedure.
172
173 This procedure is currently implemented using the `execve' system
174 call, but we call it `execle' because of its Scheme calling
175 interface.
176
177** procedure: primitive-exit [STATUS]
178 Terminate the current process without unwinding the Scheme stack.
179 This is would typically be useful after a fork. The exit status
180 is STATUS if supplied, otherwise zero.
181
182** procedure: times
183 Returns an object with information about real and processor time.
184 The following procedures accept such an object as an argument and
185 return a selected component:
186
187 `tms:clock'
188 The current real time, expressed as time units relative to an
189 arbitrary base.
190
191 `tms:utime'
192 The CPU time units used by the calling process.
193
194 `tms:stime'
195 The CPU time units used by the system on behalf of the
196 calling process.
197
198 `tms:cutime'
199 The CPU time units used by terminated child processes of the
200 calling process, whose status has been collected (e.g., using
201 `waitpid').
202
203 `tms:cstime'
204 Similarly, the CPU times units used by the system on behalf of
205 terminated child processes.
7ad3c1e7 206
c484bf7f
JB
207* Changes to the gh_ interface
208
209* Changes to the scm_ interface
210
211\f
212Changes in Guile 1.2 (released Tuesday, June 24 1997):
cf78e9e8 213
737c9113
JB
214* Changes to the distribution
215
832b09ed
JB
216** Nightly snapshots are now available from ftp.red-bean.com.
217The old server, ftp.cyclic.com, has been relinquished to its rightful
218owner.
219
220Nightly snapshots of the Guile development sources are now available via
221anonymous FTP from ftp.red-bean.com, as /pub/guile/guile-snap.tar.gz.
222
223Via the web, that's: ftp://ftp.red-bean.com/pub/guile/guile-snap.tar.gz
224For getit, that's: ftp.red-bean.com:/pub/guile/guile-snap.tar.gz
225
0fcab5ed
JB
226** To run Guile without installing it, the procedure has changed a bit.
227
228If you used a separate build directory to compile Guile, you'll need
229to include the build directory in SCHEME_LOAD_PATH, as well as the
230source directory. See the `INSTALL' file for examples.
231
737c9113
JB
232* Changes to the procedure for linking libguile with your programs
233
94982a4e
JB
234** The standard Guile load path for Scheme code now includes
235$(datadir)/guile (usually /usr/local/share/guile). This means that
236you can install your own Scheme files there, and Guile will find them.
237(Previous versions of Guile only checked a directory whose name
238contained the Guile version number, so you had to re-install or move
239your Scheme sources each time you installed a fresh version of Guile.)
240
241The load path also includes $(datadir)/guile/site; we recommend
242putting individual Scheme files there. If you want to install a
243package with multiple source files, create a directory for them under
244$(datadir)/guile.
245
246** Guile 1.2 will now use the Rx regular expression library, if it is
247installed on your system. When you are linking libguile into your own
248programs, this means you will have to link against -lguile, -lqt (if
249you configured Guile with thread support), and -lrx.
27590f82
JB
250
251If you are using autoconf to generate configuration scripts for your
252application, the following lines should suffice to add the appropriate
253libraries to your link command:
254
255### Find Rx, quickthreads and libguile.
256AC_CHECK_LIB(rx, main)
257AC_CHECK_LIB(qt, main)
258AC_CHECK_LIB(guile, scm_shell)
259
94982a4e
JB
260The Guile 1.2 distribution does not contain sources for the Rx
261library, as Guile 1.0 did. If you want to use Rx, you'll need to
262retrieve it from a GNU FTP site and install it separately.
263
b83b8bee
JB
264* Changes to Scheme functions and syntax
265
e035e7e6
MV
266** The dynamic linking features of Guile are now enabled by default.
267You can disable them by giving the `--disable-dynamic-linking' option
268to configure.
269
e035e7e6
MV
270 (dynamic-link FILENAME)
271
272 Find the object file denoted by FILENAME (a string) and link it
273 into the running Guile application. When everything works out,
274 return a Scheme object suitable for representing the linked object
275 file. Otherwise an error is thrown. How object files are
276 searched is system dependent.
277
278 (dynamic-object? VAL)
279
280 Determine whether VAL represents a dynamically linked object file.
281
282 (dynamic-unlink DYNOBJ)
283
284 Unlink the indicated object file from the application. DYNOBJ
285 should be one of the values returned by `dynamic-link'.
286
287 (dynamic-func FUNCTION DYNOBJ)
288
289 Search the C function indicated by FUNCTION (a string or symbol)
290 in DYNOBJ and return some Scheme object that can later be used
291 with `dynamic-call' to actually call this function. Right now,
292 these Scheme objects are formed by casting the address of the
293 function to `long' and converting this number to its Scheme
294 representation.
295
296 (dynamic-call FUNCTION DYNOBJ)
297
298 Call the C function indicated by FUNCTION and DYNOBJ. The
299 function is passed no arguments and its return value is ignored.
300 When FUNCTION is something returned by `dynamic-func', call that
301 function and ignore DYNOBJ. When FUNCTION is a string (or symbol,
302 etc.), look it up in DYNOBJ; this is equivalent to
303
304 (dynamic-call (dynamic-func FUNCTION DYNOBJ) #f)
305
306 Interrupts are deferred while the C function is executing (with
307 SCM_DEFER_INTS/SCM_ALLOW_INTS).
308
309 (dynamic-args-call FUNCTION DYNOBJ ARGS)
310
311 Call the C function indicated by FUNCTION and DYNOBJ, but pass it
312 some arguments and return its return value. The C function is
313 expected to take two arguments and return an `int', just like
314 `main':
315
316 int c_func (int argc, char **argv);
317
318 ARGS must be a list of strings and is converted into an array of
319 `char *'. The array is passed in ARGV and its size in ARGC. The
320 return value is converted to a Scheme number and returned from the
321 call to `dynamic-args-call'.
322
0fcab5ed
JB
323When dynamic linking is disabled or not supported on your system,
324the above functions throw errors, but they are still available.
325
e035e7e6
MV
326Here is a small example that works on GNU/Linux:
327
328 (define libc-obj (dynamic-link "libc.so"))
329 (dynamic-args-call 'rand libc-obj '())
330
331See the file `libguile/DYNAMIC-LINKING' for additional comments.
332
27590f82
JB
333** The #/ syntax for module names is depreciated, and will be removed
334in a future version of Guile. Instead of
335
336 #/foo/bar/baz
337
338instead write
339
340 (foo bar baz)
341
342The latter syntax is more consistent with existing Lisp practice.
343
5dade857
MV
344** Guile now does fancier printing of structures. Structures are the
345underlying implementation for records, which in turn are used to
346implement modules, so all of these object now print differently and in
347a more informative way.
348
161029df
JB
349The Scheme printer will examine the builtin variable *struct-printer*
350whenever it needs to print a structure object. When this variable is
351not `#f' it is deemed to be a procedure and will be applied to the
352structure object and the output port. When *struct-printer* is `#f'
353or the procedure return `#f' the structure object will be printed in
354the boring #<struct 80458270> form.
5dade857
MV
355
356This hook is used by some routines in ice-9/boot-9.scm to implement
357type specific printing routines. Please read the comments there about
358"printing structs".
359
360One of the more specific uses of structs are records. The printing
361procedure that could be passed to MAKE-RECORD-TYPE is now actually
362called. It should behave like a *struct-printer* procedure (described
363above).
364
b83b8bee
JB
365** Guile now supports a new R4RS-compliant syntax for keywords. A
366token of the form #:NAME, where NAME has the same syntax as a Scheme
367symbol, is the external representation of the keyword named NAME.
368Keyword objects print using this syntax as well, so values containing
1e5afba0
JB
369keyword objects can be read back into Guile. When used in an
370expression, keywords are self-quoting objects.
b83b8bee
JB
371
372Guile suports this read syntax, and uses this print syntax, regardless
373of the current setting of the `keyword' read option. The `keyword'
374read option only controls whether Guile recognizes the `:NAME' syntax,
375which is incompatible with R4RS. (R4RS says such token represent
376symbols.)
737c9113
JB
377
378** Guile has regular expression support again. Guile 1.0 included
379functions for matching regular expressions, based on the Rx library.
380In Guile 1.1, the Guile/Rx interface was removed to simplify the
381distribution, and thus Guile had no regular expression support. Guile
94982a4e
JB
3821.2 again supports the most commonly used functions, and supports all
383of SCSH's regular expression functions.
2409cdfa 384
94982a4e
JB
385If your system does not include a POSIX regular expression library,
386and you have not linked Guile with a third-party regexp library such as
387Rx, these functions will not be available. You can tell whether your
388Guile installation includes regular expression support by checking
389whether the `*features*' list includes the `regex' symbol.
737c9113 390
94982a4e 391*** regexp functions
161029df 392
94982a4e
JB
393By default, Guile supports POSIX extended regular expressions. That
394means that the characters `(', `)', `+' and `?' are special, and must
395be escaped if you wish to match the literal characters.
e1a191a8 396
94982a4e
JB
397This regular expression interface was modeled after that implemented
398by SCSH, the Scheme Shell. It is intended to be upwardly compatible
399with SCSH regular expressions.
400
401**** Function: string-match PATTERN STR [START]
402 Compile the string PATTERN into a regular expression and compare
403 it with STR. The optional numeric argument START specifies the
404 position of STR at which to begin matching.
405
406 `string-match' returns a "match structure" which describes what,
407 if anything, was matched by the regular expression. *Note Match
408 Structures::. If STR does not match PATTERN at all,
409 `string-match' returns `#f'.
410
411 Each time `string-match' is called, it must compile its PATTERN
412argument into a regular expression structure. This operation is
413expensive, which makes `string-match' inefficient if the same regular
414expression is used several times (for example, in a loop). For better
415performance, you can compile a regular expression in advance and then
416match strings against the compiled regexp.
417
418**** Function: make-regexp STR [FLAGS]
419 Compile the regular expression described by STR, and return the
420 compiled regexp structure. If STR does not describe a legal
421 regular expression, `make-regexp' throws a
422 `regular-expression-syntax' error.
423
424 FLAGS may be the bitwise-or of one or more of the following:
425
426**** Constant: regexp/extended
427 Use POSIX Extended Regular Expression syntax when interpreting
428 STR. If not set, POSIX Basic Regular Expression syntax is used.
429 If the FLAGS argument is omitted, we assume regexp/extended.
430
431**** Constant: regexp/icase
432 Do not differentiate case. Subsequent searches using the
433 returned regular expression will be case insensitive.
434
435**** Constant: regexp/newline
436 Match-any-character operators don't match a newline.
437
438 A non-matching list ([^...]) not containing a newline matches a
439 newline.
440
441 Match-beginning-of-line operator (^) matches the empty string
442 immediately after a newline, regardless of whether the FLAGS
443 passed to regexp-exec contain regexp/notbol.
444
445 Match-end-of-line operator ($) matches the empty string
446 immediately before a newline, regardless of whether the FLAGS
447 passed to regexp-exec contain regexp/noteol.
448
449**** Function: regexp-exec REGEXP STR [START [FLAGS]]
450 Match the compiled regular expression REGEXP against `str'. If
451 the optional integer START argument is provided, begin matching
452 from that position in the string. Return a match structure
453 describing the results of the match, or `#f' if no match could be
454 found.
455
456 FLAGS may be the bitwise-or of one or more of the following:
457
458**** Constant: regexp/notbol
459 The match-beginning-of-line operator always fails to match (but
460 see the compilation flag regexp/newline above) This flag may be
461 used when different portions of a string are passed to
462 regexp-exec and the beginning of the string should not be
463 interpreted as the beginning of the line.
464
465**** Constant: regexp/noteol
466 The match-end-of-line operator always fails to match (but see the
467 compilation flag regexp/newline above)
468
469**** Function: regexp? OBJ
470 Return `#t' if OBJ is a compiled regular expression, or `#f'
471 otherwise.
472
473 Regular expressions are commonly used to find patterns in one string
474and replace them with the contents of another string.
475
476**** Function: regexp-substitute PORT MATCH [ITEM...]
477 Write to the output port PORT selected contents of the match
478 structure MATCH. Each ITEM specifies what should be written, and
479 may be one of the following arguments:
480
481 * A string. String arguments are written out verbatim.
482
483 * An integer. The submatch with that number is written.
484
485 * The symbol `pre'. The portion of the matched string preceding
486 the regexp match is written.
487
488 * The symbol `post'. The portion of the matched string
489 following the regexp match is written.
490
491 PORT may be `#f', in which case nothing is written; instead,
492 `regexp-substitute' constructs a string from the specified ITEMs
493 and returns that.
494
495**** Function: regexp-substitute/global PORT REGEXP TARGET [ITEM...]
496 Similar to `regexp-substitute', but can be used to perform global
497 substitutions on STR. Instead of taking a match structure as an
498 argument, `regexp-substitute/global' takes two string arguments: a
499 REGEXP string describing a regular expression, and a TARGET string
500 which should be matched against this regular expression.
501
502 Each ITEM behaves as in REGEXP-SUBSTITUTE, with the following
503 exceptions:
504
505 * A function may be supplied. When this function is called, it
506 will be passed one argument: a match structure for a given
507 regular expression match. It should return a string to be
508 written out to PORT.
509
510 * The `post' symbol causes `regexp-substitute/global' to recurse
511 on the unmatched portion of STR. This *must* be supplied in
512 order to perform global search-and-replace on STR; if it is
513 not present among the ITEMs, then `regexp-substitute/global'
514 will return after processing a single match.
515
516*** Match Structures
517
518 A "match structure" is the object returned by `string-match' and
519`regexp-exec'. It describes which portion of a string, if any, matched
520the given regular expression. Match structures include: a reference to
521the string that was checked for matches; the starting and ending
522positions of the regexp match; and, if the regexp included any
523parenthesized subexpressions, the starting and ending positions of each
524submatch.
525
526 In each of the regexp match functions described below, the `match'
527argument must be a match structure returned by a previous call to
528`string-match' or `regexp-exec'. Most of these functions return some
529information about the original target string that was matched against a
530regular expression; we will call that string TARGET for easy reference.
531
532**** Function: regexp-match? OBJ
533 Return `#t' if OBJ is a match structure returned by a previous
534 call to `regexp-exec', or `#f' otherwise.
535
536**** Function: match:substring MATCH [N]
537 Return the portion of TARGET matched by subexpression number N.
538 Submatch 0 (the default) represents the entire regexp match. If
539 the regular expression as a whole matched, but the subexpression
540 number N did not match, return `#f'.
541
542**** Function: match:start MATCH [N]
543 Return the starting position of submatch number N.
544
545**** Function: match:end MATCH [N]
546 Return the ending position of submatch number N.
547
548**** Function: match:prefix MATCH
549 Return the unmatched portion of TARGET preceding the regexp match.
550
551**** Function: match:suffix MATCH
552 Return the unmatched portion of TARGET following the regexp match.
553
554**** Function: match:count MATCH
555 Return the number of parenthesized subexpressions from MATCH.
556 Note that the entire regular expression match itself counts as a
557 subexpression, and failed submatches are included in the count.
558
559**** Function: match:string MATCH
560 Return the original TARGET string.
561
562*** Backslash Escapes
563
564 Sometimes you will want a regexp to match characters like `*' or `$'
565exactly. For example, to check whether a particular string represents
566a menu entry from an Info node, it would be useful to match it against
567a regexp like `^* [^:]*::'. However, this won't work; because the
568asterisk is a metacharacter, it won't match the `*' at the beginning of
569the string. In this case, we want to make the first asterisk un-magic.
570
571 You can do this by preceding the metacharacter with a backslash
572character `\'. (This is also called "quoting" the metacharacter, and
573is known as a "backslash escape".) When Guile sees a backslash in a
574regular expression, it considers the following glyph to be an ordinary
575character, no matter what special meaning it would ordinarily have.
576Therefore, we can make the above example work by changing the regexp to
577`^\* [^:]*::'. The `\*' sequence tells the regular expression engine
578to match only a single asterisk in the target string.
579
580 Since the backslash is itself a metacharacter, you may force a
581regexp to match a backslash in the target string by preceding the
582backslash with itself. For example, to find variable references in a
583TeX program, you might want to find occurrences of the string `\let\'
584followed by any number of alphabetic characters. The regular expression
585`\\let\\[A-Za-z]*' would do this: the double backslashes in the regexp
586each match a single backslash in the target string.
587
588**** Function: regexp-quote STR
589 Quote each special character found in STR with a backslash, and
590 return the resulting string.
591
592 *Very important:* Using backslash escapes in Guile source code (as
593in Emacs Lisp or C) can be tricky, because the backslash character has
594special meaning for the Guile reader. For example, if Guile encounters
595the character sequence `\n' in the middle of a string while processing
596Scheme code, it replaces those characters with a newline character.
597Similarly, the character sequence `\t' is replaced by a horizontal tab.
598Several of these "escape sequences" are processed by the Guile reader
599before your code is executed. Unrecognized escape sequences are
600ignored: if the characters `\*' appear in a string, they will be
601translated to the single character `*'.
602
603 This translation is obviously undesirable for regular expressions,
604since we want to be able to include backslashes in a string in order to
605escape regexp metacharacters. Therefore, to make sure that a backslash
606is preserved in a string in your Guile program, you must use *two*
607consecutive backslashes:
608
609 (define Info-menu-entry-pattern (make-regexp "^\\* [^:]*"))
610
611 The string in this example is preprocessed by the Guile reader before
612any code is executed. The resulting argument to `make-regexp' is the
613string `^\* [^:]*', which is what we really want.
614
615 This also means that in order to write a regular expression that
616matches a single backslash character, the regular expression string in
617the source code must include *four* backslashes. Each consecutive pair
618of backslashes gets translated by the Guile reader to a single
619backslash, and the resulting double-backslash is interpreted by the
620regexp engine as matching a single backslash character. Hence:
621
622 (define tex-variable-pattern (make-regexp "\\\\let\\\\=[A-Za-z]*"))
623
624 The reason for the unwieldiness of this syntax is historical. Both
625regular expression pattern matchers and Unix string processing systems
626have traditionally used backslashes with the special meanings described
627above. The POSIX regular expression specification and ANSI C standard
628both require these semantics. Attempting to abandon either convention
629would cause other kinds of compatibility problems, possibly more severe
630ones. Therefore, without extending the Scheme reader to support
631strings with different quoting conventions (an ungainly and confusing
632extension when implemented in other languages), we must adhere to this
633cumbersome escape syntax.
634
7ad3c1e7
GH
635* Changes to the gh_ interface
636
637* Changes to the scm_ interface
638
639* Changes to system call interfaces:
94982a4e 640
7ad3c1e7 641** The value returned by `raise' is now unspecified. It throws an exception
e1a191a8
GH
642if an error occurs.
643
94982a4e 644*** A new procedure `sigaction' can be used to install signal handlers
115b09a5
GH
645
646(sigaction signum [action] [flags])
647
648signum is the signal number, which can be specified using the value
649of SIGINT etc.
650
651If action is omitted, sigaction returns a pair: the CAR is the current
652signal hander, which will be either an integer with the value SIG_DFL
653(default action) or SIG_IGN (ignore), or the Scheme procedure which
654handles the signal, or #f if a non-Scheme procedure handles the
655signal. The CDR contains the current sigaction flags for the handler.
656
657If action is provided, it is installed as the new handler for signum.
658action can be a Scheme procedure taking one argument, or the value of
659SIG_DFL (default action) or SIG_IGN (ignore), or #f to restore
660whatever signal handler was installed before sigaction was first used.
661Flags can optionally be specified for the new handler (SA_RESTART is
662always used if the system provides it, so need not be specified.) The
663return value is a pair with information about the old handler as
664described above.
665
666This interface does not provide access to the "signal blocking"
667facility. Maybe this is not needed, since the thread support may
668provide solutions to the problem of consistent access to data
669structures.
e1a191a8 670
94982a4e 671*** A new procedure `flush-all-ports' is equivalent to running
89ea5b7c
GH
672`force-output' on every port open for output.
673
94982a4e
JB
674** Guile now provides information on how it was built, via the new
675global variable, %guile-build-info. This variable records the values
676of the standard GNU makefile directory variables as an assocation
677list, mapping variable names (symbols) onto directory paths (strings).
678For example, to find out where the Guile link libraries were
679installed, you can say:
680
681guile -c "(display (assq-ref %guile-build-info 'libdir)) (newline)"
682
683
684* Changes to the scm_ interface
685
686** The new function scm_handle_by_message_noexit is just like the
687existing scm_handle_by_message function, except that it doesn't call
688exit to terminate the process. Instead, it prints a message and just
689returns #f. This might be a more appropriate catch-all handler for
690new dynamic roots and threads.
691
cf78e9e8 692\f
c484bf7f 693Changes in Guile 1.1 (released Friday, May 16 1997):
f3b1485f
JB
694
695* Changes to the distribution.
696
697The Guile 1.0 distribution has been split up into several smaller
698pieces:
699guile-core --- the Guile interpreter itself.
700guile-tcltk --- the interface between the Guile interpreter and
701 Tcl/Tk; Tcl is an interpreter for a stringy language, and Tk
702 is a toolkit for building graphical user interfaces.
703guile-rgx-ctax --- the interface between Guile and the Rx regular
704 expression matcher, and the translator for the Ctax
705 programming language. These are packaged together because the
706 Ctax translator uses Rx to parse Ctax source code.
707
095936d2
JB
708This NEWS file describes the changes made to guile-core since the 1.0
709release.
710
48d224d7
JB
711We no longer distribute the documentation, since it was either out of
712date, or incomplete. As soon as we have current documentation, we
713will distribute it.
714
0fcab5ed
JB
715
716
f3b1485f
JB
717* Changes to the stand-alone interpreter
718
48d224d7
JB
719** guile now accepts command-line arguments compatible with SCSH, Olin
720Shivers' Scheme Shell.
721
722In general, arguments are evaluated from left to right, but there are
723exceptions. The following switches stop argument processing, and
724stash all remaining command-line arguments as the value returned by
725the (command-line) function.
726 -s SCRIPT load Scheme source code from FILE, and exit
727 -c EXPR evalute Scheme expression EXPR, and exit
728 -- stop scanning arguments; run interactively
729
730The switches below are processed as they are encountered.
731 -l FILE load Scheme source code from FILE
732 -e FUNCTION after reading script, apply FUNCTION to
733 command line arguments
734 -ds do -s script at this point
735 --emacs enable Emacs protocol (experimental)
736 -h, --help display this help and exit
737 -v, --version display version information and exit
738 \ read arguments from following script lines
739
740So, for example, here is a Guile script named `ekko' (thanks, Olin)
741which re-implements the traditional "echo" command:
742
743#!/usr/local/bin/guile -s
744!#
745(define (main args)
746 (map (lambda (arg) (display arg) (display " "))
747 (cdr args))
748 (newline))
749
750(main (command-line))
751
752Suppose we invoke this script as follows:
753
754 ekko a speckled gecko
755
756Through the magic of Unix script processing (triggered by the `#!'
757token at the top of the file), /usr/local/bin/guile receives the
758following list of command-line arguments:
759
760 ("-s" "./ekko" "a" "speckled" "gecko")
761
762Unix inserts the name of the script after the argument specified on
763the first line of the file (in this case, "-s"), and then follows that
764with the arguments given to the script. Guile loads the script, which
765defines the `main' function, and then applies it to the list of
766remaining command-line arguments, ("a" "speckled" "gecko").
767
095936d2
JB
768In Unix, the first line of a script file must take the following form:
769
770#!INTERPRETER ARGUMENT
771
772where INTERPRETER is the absolute filename of the interpreter
773executable, and ARGUMENT is a single command-line argument to pass to
774the interpreter.
775
776You may only pass one argument to the interpreter, and its length is
777limited. These restrictions can be annoying to work around, so Guile
778provides a general mechanism (borrowed from, and compatible with,
779SCSH) for circumventing them.
780
781If the ARGUMENT in a Guile script is a single backslash character,
782`\', Guile will open the script file, parse arguments from its second
783and subsequent lines, and replace the `\' with them. So, for example,
784here is another implementation of the `ekko' script:
785
786#!/usr/local/bin/guile \
787-e main -s
788!#
789(define (main args)
790 (for-each (lambda (arg) (display arg) (display " "))
791 (cdr args))
792 (newline))
793
794If the user invokes this script as follows:
795
796 ekko a speckled gecko
797
798Unix expands this into
799
800 /usr/local/bin/guile \ ekko a speckled gecko
801
802When Guile sees the `\' argument, it replaces it with the arguments
803read from the second line of the script, producing:
804
805 /usr/local/bin/guile -e main -s ekko a speckled gecko
806
807This tells Guile to load the `ekko' script, and apply the function
808`main' to the argument list ("a" "speckled" "gecko").
809
810Here is how Guile parses the command-line arguments:
811- Each space character terminates an argument. This means that two
812 spaces in a row introduce an empty-string argument.
813- The tab character is not permitted (unless you quote it with the
814 backslash character, as described below), to avoid confusion.
815- The newline character terminates the sequence of arguments, and will
816 also terminate a final non-empty argument. (However, a newline
817 following a space will not introduce a final empty-string argument;
818 it only terminates the argument list.)
819- The backslash character is the escape character. It escapes
820 backslash, space, tab, and newline. The ANSI C escape sequences
821 like \n and \t are also supported. These produce argument
822 constituents; the two-character combination \n doesn't act like a
823 terminating newline. The escape sequence \NNN for exactly three
824 octal digits reads as the character whose ASCII code is NNN. As
825 above, characters produced this way are argument constituents.
826 Backslash followed by other characters is not allowed.
827
48d224d7
JB
828* Changes to the procedure for linking libguile with your programs
829
830** Guile now builds and installs a shared guile library, if your
831system support shared libraries. (It still builds a static library on
832all systems.) Guile automatically detects whether your system
833supports shared libraries. To prevent Guile from buildisg shared
834libraries, pass the `--disable-shared' flag to the configure script.
835
836Guile takes longer to compile when it builds shared libraries, because
837it must compile every file twice --- once to produce position-
838independent object code, and once to produce normal object code.
839
840** The libthreads library has been merged into libguile.
841
842To link a program against Guile, you now need only link against
843-lguile and -lqt; -lthreads is no longer needed. If you are using
844autoconf to generate configuration scripts for your application, the
845following lines should suffice to add the appropriate libraries to
846your link command:
847
848### Find quickthreads and libguile.
849AC_CHECK_LIB(qt, main)
850AC_CHECK_LIB(guile, scm_shell)
f3b1485f
JB
851
852* Changes to Scheme functions
853
095936d2
JB
854** Guile Scheme's special syntax for keyword objects is now optional,
855and disabled by default.
856
857The syntax variation from R4RS made it difficult to port some
858interesting packages to Guile. The routines which accepted keyword
859arguments (mostly in the module system) have been modified to also
860accept symbols whose names begin with `:'.
861
862To change the keyword syntax, you must first import the (ice-9 debug)
863module:
864 (use-modules (ice-9 debug))
865
866Then you can enable the keyword syntax as follows:
867 (read-set! keywords 'prefix)
868
869To disable keyword syntax, do this:
870 (read-set! keywords #f)
871
872** Many more primitive functions accept shared substrings as
873arguments. In the past, these functions required normal, mutable
874strings as arguments, although they never made use of this
875restriction.
876
877** The uniform array functions now operate on byte vectors. These
878functions are `array-fill!', `serial-array-copy!', `array-copy!',
879`serial-array-map', `array-map', `array-for-each', and
880`array-index-map!'.
881
882** The new functions `trace' and `untrace' implement simple debugging
883support for Scheme functions.
884
885The `trace' function accepts any number of procedures as arguments,
886and tells the Guile interpreter to display each procedure's name and
887arguments each time the procedure is invoked. When invoked with no
888arguments, `trace' returns the list of procedures currently being
889traced.
890
891The `untrace' function accepts any number of procedures as arguments,
892and tells the Guile interpreter not to trace them any more. When
893invoked with no arguments, `untrace' untraces all curretly traced
894procedures.
895
896The tracing in Guile has an advantage over most other systems: we
897don't create new procedure objects, but mark the procedure objects
898themselves. This means that anonymous and internal procedures can be
899traced.
900
901** The function `assert-repl-prompt' has been renamed to
902`set-repl-prompt!'. It takes one argument, PROMPT.
903- If PROMPT is #f, the Guile read-eval-print loop will not prompt.
904- If PROMPT is a string, we use it as a prompt.
905- If PROMPT is a procedure accepting no arguments, we call it, and
906 display the result as a prompt.
907- Otherwise, we display "> ".
908
909** The new function `eval-string' reads Scheme expressions from a
910string and evaluates them, returning the value of the last expression
911in the string. If the string contains no expressions, it returns an
912unspecified value.
913
914** The new function `thunk?' returns true iff its argument is a
915procedure of zero arguments.
916
917** `defined?' is now a builtin function, instead of syntax. This
918means that its argument should be quoted. It returns #t iff its
919argument is bound in the current module.
920
921** The new syntax `use-modules' allows you to add new modules to your
922environment without re-typing a complete `define-module' form. It
923accepts any number of module names as arguments, and imports their
924public bindings into the current module.
925
926** The new function (module-defined? NAME MODULE) returns true iff
927NAME, a symbol, is defined in MODULE, a module object.
928
929** The new function `builtin-bindings' creates and returns a hash
930table containing copies of all the root module's bindings.
931
932** The new function `builtin-weak-bindings' does the same as
933`builtin-bindings', but creates a doubly-weak hash table.
934
935** The `equal?' function now considers variable objects to be
936equivalent if they have the same name and the same value.
937
938** The new function `command-line' returns the command-line arguments
939given to Guile, as a list of strings.
940
941When using guile as a script interpreter, `command-line' returns the
942script's arguments; those processed by the interpreter (like `-s' or
943`-c') are omitted. (In other words, you get the normal, expected
944behavior.) Any application that uses scm_shell to process its
945command-line arguments gets this behavior as well.
946
947** The new function `load-user-init' looks for a file called `.guile'
948in the user's home directory, and loads it if it exists. This is
949mostly for use by the code generated by scm_compile_shell_switches,
950but we thought it might also be useful in other circumstances.
951
952** The new function `log10' returns the base-10 logarithm of its
953argument.
954
955** Changes to I/O functions
956
957*** The functions `read', `primitive-load', `read-and-eval!', and
958`primitive-load-path' no longer take optional arguments controlling
959case insensitivity and a `#' parser.
960
961Case sensitivity is now controlled by a read option called
962`case-insensitive'. The user can add new `#' syntaxes with the
963`read-hash-extend' function (see below).
964
965*** The new function `read-hash-extend' allows the user to change the
966syntax of Guile Scheme in a somewhat controlled way.
967
968(read-hash-extend CHAR PROC)
969 When parsing S-expressions, if we read a `#' character followed by
970 the character CHAR, use PROC to parse an object from the stream.
971 If PROC is #f, remove any parsing procedure registered for CHAR.
972
973 The reader applies PROC to two arguments: CHAR and an input port.
974
975*** The new functions read-delimited and read-delimited! provide a
976general mechanism for doing delimited input on streams.
977
978(read-delimited DELIMS [PORT HANDLE-DELIM])
979 Read until we encounter one of the characters in DELIMS (a string),
980 or end-of-file. PORT is the input port to read from; it defaults to
981 the current input port. The HANDLE-DELIM parameter determines how
982 the terminating character is handled; it should be one of the
983 following symbols:
984
985 'trim omit delimiter from result
986 'peek leave delimiter character in input stream
987 'concat append delimiter character to returned value
988 'split return a pair: (RESULT . TERMINATOR)
989
990 HANDLE-DELIM defaults to 'peek.
991
992(read-delimited! DELIMS BUF [PORT HANDLE-DELIM START END])
993 A side-effecting variant of `read-delimited'.
994
995 The data is written into the string BUF at the indices in the
996 half-open interval [START, END); the default interval is the whole
997 string: START = 0 and END = (string-length BUF). The values of
998 START and END must specify a well-defined interval in BUF, i.e.
999 0 <= START <= END <= (string-length BUF).
1000
1001 It returns NBYTES, the number of bytes read. If the buffer filled
1002 up without a delimiter character being found, it returns #f. If the
1003 port is at EOF when the read starts, it returns the EOF object.
1004
1005 If an integer is returned (i.e., the read is successfully terminated
1006 by reading a delimiter character), then the HANDLE-DELIM parameter
1007 determines how to handle the terminating character. It is described
1008 above, and defaults to 'peek.
1009
1010(The descriptions of these functions were borrowed from the SCSH
1011manual, by Olin Shivers and Brian Carlstrom.)
1012
1013*** The `%read-delimited!' function is the primitive used to implement
1014`read-delimited' and `read-delimited!'.
1015
1016(%read-delimited! DELIMS BUF GOBBLE? [PORT START END])
1017
1018This returns a pair of values: (TERMINATOR . NUM-READ).
1019- TERMINATOR describes why the read was terminated. If it is a
1020 character or the eof object, then that is the value that terminated
1021 the read. If it is #f, the function filled the buffer without finding
1022 a delimiting character.
1023- NUM-READ is the number of characters read into BUF.
1024
1025If the read is successfully terminated by reading a delimiter
1026character, then the gobble? parameter determines what to do with the
1027terminating character. If true, the character is removed from the
1028input stream; if false, the character is left in the input stream
1029where a subsequent read operation will retrieve it. In either case,
1030the character is also the first value returned by the procedure call.
1031
1032(The descriptions of this function was borrowed from the SCSH manual,
1033by Olin Shivers and Brian Carlstrom.)
1034
1035*** The `read-line' and `read-line!' functions have changed; they now
1036trim the terminator by default; previously they appended it to the
1037returned string. For the old behavior, use (read-line PORT 'concat).
1038
1039*** The functions `uniform-array-read!' and `uniform-array-write!' now
1040take new optional START and END arguments, specifying the region of
1041the array to read and write.
1042
f348c807
JB
1043*** The `ungetc-char-ready?' function has been removed. We feel it's
1044inappropriate for an interface to expose implementation details this
1045way.
095936d2
JB
1046
1047** Changes to the Unix library and system call interface
1048
1049*** The new fcntl function provides access to the Unix `fcntl' system
1050call.
1051
1052(fcntl PORT COMMAND VALUE)
1053 Apply COMMAND to PORT's file descriptor, with VALUE as an argument.
1054 Values for COMMAND are:
1055
1056 F_DUPFD duplicate a file descriptor
1057 F_GETFD read the descriptor's close-on-exec flag
1058 F_SETFD set the descriptor's close-on-exec flag to VALUE
1059 F_GETFL read the descriptor's flags, as set on open
1060 F_SETFL set the descriptor's flags, as set on open to VALUE
1061 F_GETOWN return the process ID of a socket's owner, for SIGIO
1062 F_SETOWN set the process that owns a socket to VALUE, for SIGIO
1063 FD_CLOEXEC not sure what this is
1064
1065For details, see the documentation for the fcntl system call.
1066
1067*** The arguments to `select' have changed, for compatibility with
1068SCSH. The TIMEOUT parameter may now be non-integral, yielding the
1069expected behavior. The MILLISECONDS parameter has been changed to
1070MICROSECONDS, to more closely resemble the underlying system call.
1071The RVEC, WVEC, and EVEC arguments can now be vectors; the type of the
1072corresponding return set will be the same.
1073
1074*** The arguments to the `mknod' system call have changed. They are
1075now:
1076
1077(mknod PATH TYPE PERMS DEV)
1078 Create a new file (`node') in the file system. PATH is the name of
1079 the file to create. TYPE is the kind of file to create; it should
1080 be 'fifo, 'block-special, or 'char-special. PERMS specifies the
1081 permission bits to give the newly created file. If TYPE is
1082 'block-special or 'char-special, DEV specifies which device the
1083 special file refers to; its interpretation depends on the kind of
1084 special file being created.
1085
1086*** The `fork' function has been renamed to `primitive-fork', to avoid
1087clashing with various SCSH forks.
1088
1089*** The `recv' and `recvfrom' functions have been renamed to `recv!'
1090and `recvfrom!'. They no longer accept a size for a second argument;
1091you must pass a string to hold the received value. They no longer
1092return the buffer. Instead, `recv' returns the length of the message
1093received, and `recvfrom' returns a pair containing the packet's length
1094and originating address.
1095
1096*** The file descriptor datatype has been removed, as have the
1097`read-fd', `write-fd', `close', `lseek', and `dup' functions.
1098We plan to replace these functions with a SCSH-compatible interface.
1099
1100*** The `create' function has been removed; it's just a special case
1101of `open'.
1102
1103*** There are new functions to break down process termination status
1104values. In the descriptions below, STATUS is a value returned by
1105`waitpid'.
1106
1107(status:exit-val STATUS)
1108 If the child process exited normally, this function returns the exit
1109 code for the child process (i.e., the value passed to exit, or
1110 returned from main). If the child process did not exit normally,
1111 this function returns #f.
1112
1113(status:stop-sig STATUS)
1114 If the child process was suspended by a signal, this function
1115 returns the signal that suspended the child. Otherwise, it returns
1116 #f.
1117
1118(status:term-sig STATUS)
1119 If the child process terminated abnormally, this function returns
1120 the signal that terminated the child. Otherwise, this function
1121 returns false.
1122
1123POSIX promises that exactly one of these functions will return true on
1124a valid STATUS value.
1125
1126These functions are compatible with SCSH.
1127
1128*** There are new accessors and setters for the broken-out time vectors
48d224d7
JB
1129returned by `localtime', `gmtime', and that ilk. They are:
1130
1131 Component Accessor Setter
1132 ========================= ============ ============
1133 seconds tm:sec set-tm:sec
1134 minutes tm:min set-tm:min
1135 hours tm:hour set-tm:hour
1136 day of the month tm:mday set-tm:mday
1137 month tm:mon set-tm:mon
1138 year tm:year set-tm:year
1139 day of the week tm:wday set-tm:wday
1140 day in the year tm:yday set-tm:yday
1141 daylight saving time tm:isdst set-tm:isdst
1142 GMT offset, seconds tm:gmtoff set-tm:gmtoff
1143 name of time zone tm:zone set-tm:zone
1144
095936d2
JB
1145*** There are new accessors for the vectors returned by `uname',
1146describing the host system:
48d224d7
JB
1147
1148 Component Accessor
1149 ============================================== ================
1150 name of the operating system implementation utsname:sysname
1151 network name of this machine utsname:nodename
1152 release level of the operating system utsname:release
1153 version level of the operating system utsname:version
1154 machine hardware platform utsname:machine
1155
095936d2
JB
1156*** There are new accessors for the vectors returned by `getpw',
1157`getpwnam', `getpwuid', and `getpwent', describing entries from the
1158system's user database:
1159
1160 Component Accessor
1161 ====================== =================
1162 user name passwd:name
1163 user password passwd:passwd
1164 user id passwd:uid
1165 group id passwd:gid
1166 real name passwd:gecos
1167 home directory passwd:dir
1168 shell program passwd:shell
1169
1170*** There are new accessors for the vectors returned by `getgr',
1171`getgrnam', `getgrgid', and `getgrent', describing entries from the
1172system's group database:
1173
1174 Component Accessor
1175 ======================= ============
1176 group name group:name
1177 group password group:passwd
1178 group id group:gid
1179 group members group:mem
1180
1181*** There are new accessors for the vectors returned by `gethost',
1182`gethostbyaddr', `gethostbyname', and `gethostent', describing
1183internet hosts:
1184
1185 Component Accessor
1186 ========================= ===============
1187 official name of host hostent:name
1188 alias list hostent:aliases
1189 host address type hostent:addrtype
1190 length of address hostent:length
1191 list of addresses hostent:addr-list
1192
1193*** There are new accessors for the vectors returned by `getnet',
1194`getnetbyaddr', `getnetbyname', and `getnetent', describing internet
1195networks:
1196
1197 Component Accessor
1198 ========================= ===============
1199 official name of net netent:name
1200 alias list netent:aliases
1201 net number type netent:addrtype
1202 net number netent:net
1203
1204*** There are new accessors for the vectors returned by `getproto',
1205`getprotobyname', `getprotobynumber', and `getprotoent', describing
1206internet protocols:
1207
1208 Component Accessor
1209 ========================= ===============
1210 official protocol name protoent:name
1211 alias list protoent:aliases
1212 protocol number protoent:proto
1213
1214*** There are new accessors for the vectors returned by `getserv',
1215`getservbyname', `getservbyport', and `getservent', describing
1216internet protocols:
1217
1218 Component Accessor
1219 ========================= ===============
1220 official service name servent:name
1221 alias list servent:aliases
1222 port number servent:port
1223 protocol to use servent:proto
1224
1225*** There are new accessors for the sockaddr structures returned by
1226`accept', `getsockname', `getpeername', `recvfrom!':
1227
1228 Component Accessor
1229 ======================================== ===============
1230 address format (`family') sockaddr:fam
1231 path, for file domain addresses sockaddr:path
1232 address, for internet domain addresses sockaddr:addr
1233 TCP or UDP port, for internet sockaddr:port
1234
1235*** The `getpwent', `getgrent', `gethostent', `getnetent',
1236`getprotoent', and `getservent' functions now return #f at the end of
1237the user database. (They used to throw an exception.)
1238
1239Note that calling MUMBLEent function is equivalent to calling the
1240corresponding MUMBLE function with no arguments.
1241
1242*** The `setpwent', `setgrent', `sethostent', `setnetent',
1243`setprotoent', and `setservent' routines now take no arguments.
1244
1245*** The `gethost', `getproto', `getnet', and `getserv' functions now
1246provide more useful information when they throw an exception.
1247
1248*** The `lnaof' function has been renamed to `inet-lnaof'.
1249
1250*** Guile now claims to have the `current-time' feature.
1251
1252*** The `mktime' function now takes an optional second argument ZONE,
1253giving the time zone to use for the conversion. ZONE should be a
1254string, in the same format as expected for the "TZ" environment variable.
1255
1256*** The `strptime' function now returns a pair (TIME . COUNT), where
1257TIME is the parsed time as a vector, and COUNT is the number of
1258characters from the string left unparsed. This function used to
1259return the remaining characters as a string.
1260
1261*** The `gettimeofday' function has replaced the old `time+ticks' function.
1262The return value is now (SECONDS . MICROSECONDS); the fractional
1263component is no longer expressed in "ticks".
1264
1265*** The `ticks/sec' constant has been removed, in light of the above change.
6685dc83 1266
ea00ecba
MG
1267* Changes to the gh_ interface
1268
1269** gh_eval_str() now returns an SCM object which is the result of the
1270evaluation
1271
aaef0d2a
MG
1272** gh_scm2str() now copies the Scheme data to a caller-provided C
1273array
1274
1275** gh_scm2newstr() now makes a C array, copies the Scheme data to it,
1276and returns the array
1277
1278** gh_scm2str0() is gone: there is no need to distinguish
1279null-terminated from non-null-terminated, since gh_scm2newstr() allows
1280the user to interpret the data both ways.
1281
f3b1485f
JB
1282* Changes to the scm_ interface
1283
095936d2
JB
1284** The new function scm_symbol_value0 provides an easy way to get a
1285symbol's value from C code:
1286
1287SCM scm_symbol_value0 (char *NAME)
1288 Return the value of the symbol named by the null-terminated string
1289 NAME in the current module. If the symbol named NAME is unbound in
1290 the current module, return SCM_UNDEFINED.
1291
1292** The new function scm_sysintern0 creates new top-level variables,
1293without assigning them a value.
1294
1295SCM scm_sysintern0 (char *NAME)
1296 Create a new Scheme top-level variable named NAME. NAME is a
1297 null-terminated string. Return the variable's value cell.
1298
1299** The function scm_internal_catch is the guts of catch. It handles
1300all the mechanics of setting up a catch target, invoking the catch
1301body, and perhaps invoking the handler if the body does a throw.
1302
1303The function is designed to be usable from C code, but is general
1304enough to implement all the semantics Guile Scheme expects from throw.
1305
1306TAG is the catch tag. Typically, this is a symbol, but this function
1307doesn't actually care about that.
1308
1309BODY is a pointer to a C function which runs the body of the catch;
1310this is the code you can throw from. We call it like this:
1311 BODY (BODY_DATA, JMPBUF)
1312where:
1313 BODY_DATA is just the BODY_DATA argument we received; we pass it
1314 through to BODY as its first argument. The caller can make
1315 BODY_DATA point to anything useful that BODY might need.
1316 JMPBUF is the Scheme jmpbuf object corresponding to this catch,
1317 which we have just created and initialized.
1318
1319HANDLER is a pointer to a C function to deal with a throw to TAG,
1320should one occur. We call it like this:
1321 HANDLER (HANDLER_DATA, THROWN_TAG, THROW_ARGS)
1322where
1323 HANDLER_DATA is the HANDLER_DATA argument we recevied; it's the
1324 same idea as BODY_DATA above.
1325 THROWN_TAG is the tag that the user threw to; usually this is
1326 TAG, but it could be something else if TAG was #t (i.e., a
1327 catch-all), or the user threw to a jmpbuf.
1328 THROW_ARGS is the list of arguments the user passed to the THROW
1329 function.
1330
1331BODY_DATA is just a pointer we pass through to BODY. HANDLER_DATA
1332is just a pointer we pass through to HANDLER. We don't actually
1333use either of those pointers otherwise ourselves. The idea is
1334that, if our caller wants to communicate something to BODY or
1335HANDLER, it can pass a pointer to it as MUMBLE_DATA, which BODY and
1336HANDLER can then use. Think of it as a way to make BODY and
1337HANDLER closures, not just functions; MUMBLE_DATA points to the
1338enclosed variables.
1339
1340Of course, it's up to the caller to make sure that any data a
1341MUMBLE_DATA needs is protected from GC. A common way to do this is
1342to make MUMBLE_DATA a pointer to data stored in an automatic
1343structure variable; since the collector must scan the stack for
1344references anyway, this assures that any references in MUMBLE_DATA
1345will be found.
1346
1347** The new function scm_internal_lazy_catch is exactly like
1348scm_internal_catch, except:
1349
1350- It does not unwind the stack (this is the major difference).
1351- If handler returns, its value is returned from the throw.
1352- BODY always receives #f as its JMPBUF argument (since there's no
1353 jmpbuf associated with a lazy catch, because we don't unwind the
1354 stack.)
1355
1356** scm_body_thunk is a new body function you can pass to
1357scm_internal_catch if you want the body to be like Scheme's `catch'
1358--- a thunk, or a function of one argument if the tag is #f.
1359
1360BODY_DATA is a pointer to a scm_body_thunk_data structure, which
1361contains the Scheme procedure to invoke as the body, and the tag
1362we're catching. If the tag is #f, then we pass JMPBUF (created by
1363scm_internal_catch) to the body procedure; otherwise, the body gets
1364no arguments.
1365
1366** scm_handle_by_proc is a new handler function you can pass to
1367scm_internal_catch if you want the handler to act like Scheme's catch
1368--- call a procedure with the tag and the throw arguments.
1369
1370If the user does a throw to this catch, this function runs a handler
1371procedure written in Scheme. HANDLER_DATA is a pointer to an SCM
1372variable holding the Scheme procedure object to invoke. It ought to
1373be a pointer to an automatic variable (i.e., one living on the stack),
1374or the procedure object should be otherwise protected from GC.
1375
1376** scm_handle_by_message is a new handler function to use with
1377`scm_internal_catch' if you want Guile to print a message and die.
1378It's useful for dealing with throws to uncaught keys at the top level.
1379
1380HANDLER_DATA, if non-zero, is assumed to be a char * pointing to a
1381message header to print; if zero, we use "guile" instead. That
1382text is followed by a colon, then the message described by ARGS.
1383
1384** The return type of scm_boot_guile is now void; the function does
1385not return a value, and indeed, never returns at all.
1386
f3b1485f
JB
1387** The new function scm_shell makes it easy for user applications to
1388process command-line arguments in a way that is compatible with the
1389stand-alone guile interpreter (which is in turn compatible with SCSH,
1390the Scheme shell).
1391
1392To use the scm_shell function, first initialize any guile modules
1393linked into your application, and then call scm_shell with the values
1394of ARGC and ARGV your `main' function received. scm_shell will adding
1395any SCSH-style meta-arguments from the top of the script file to the
1396argument vector, and then process the command-line arguments. This
1397generally means loading a script file or starting up an interactive
1398command interpreter. For details, see "Changes to the stand-alone
1399interpreter" above.
1400
095936d2
JB
1401** The new functions scm_get_meta_args and scm_count_argv help you
1402implement the SCSH-style meta-argument, `\'.
1403
1404char **scm_get_meta_args (int ARGC, char **ARGV)
1405 If the second element of ARGV is a string consisting of a single
1406 backslash character (i.e. "\\" in Scheme notation), open the file
1407 named by the following argument, parse arguments from it, and return
1408 the spliced command line. The returned array is terminated by a
1409 null pointer.
1410
1411 For details of argument parsing, see above, under "guile now accepts
1412 command-line arguments compatible with SCSH..."
1413
1414int scm_count_argv (char **ARGV)
1415 Count the arguments in ARGV, assuming it is terminated by a null
1416 pointer.
1417
1418For an example of how these functions might be used, see the source
1419code for the function scm_shell in libguile/script.c.
1420
1421You will usually want to use scm_shell instead of calling this
1422function yourself.
1423
1424** The new function scm_compile_shell_switches turns an array of
1425command-line arguments into Scheme code to carry out the actions they
1426describe. Given ARGC and ARGV, it returns a Scheme expression to
1427evaluate, and calls scm_set_program_arguments to make any remaining
1428command-line arguments available to the Scheme code. For example,
1429given the following arguments:
1430
1431 -e main -s ekko a speckled gecko
1432
1433scm_set_program_arguments will return the following expression:
1434
1435 (begin (load "ekko") (main (command-line)) (quit))
1436
1437You will usually want to use scm_shell instead of calling this
1438function yourself.
1439
1440** The function scm_shell_usage prints a usage message appropriate for
1441an interpreter that uses scm_compile_shell_switches to handle its
1442command-line arguments.
1443
1444void scm_shell_usage (int FATAL, char *MESSAGE)
1445 Print a usage message to the standard error output. If MESSAGE is
1446 non-zero, write it before the usage message, followed by a newline.
1447 If FATAL is non-zero, exit the process, using FATAL as the
1448 termination status. (If you want to be compatible with Guile,
1449 always use 1 as the exit status when terminating due to command-line
1450 usage problems.)
1451
1452You will usually want to use scm_shell instead of calling this
1453function yourself.
48d224d7
JB
1454
1455** scm_eval_0str now returns SCM_UNSPECIFIED if the string contains no
095936d2
JB
1456expressions. It used to return SCM_EOL. Earth-shattering.
1457
1458** The macros for declaring scheme objects in C code have been
1459rearranged slightly. They are now:
1460
1461SCM_SYMBOL (C_NAME, SCHEME_NAME)
1462 Declare a static SCM variable named C_NAME, and initialize it to
1463 point to the Scheme symbol whose name is SCHEME_NAME. C_NAME should
1464 be a C identifier, and SCHEME_NAME should be a C string.
1465
1466SCM_GLOBAL_SYMBOL (C_NAME, SCHEME_NAME)
1467 Just like SCM_SYMBOL, but make C_NAME globally visible.
1468
1469SCM_VCELL (C_NAME, SCHEME_NAME)
1470 Create a global variable at the Scheme level named SCHEME_NAME.
1471 Declare a static SCM variable named C_NAME, and initialize it to
1472 point to the Scheme variable's value cell.
1473
1474SCM_GLOBAL_VCELL (C_NAME, SCHEME_NAME)
1475 Just like SCM_VCELL, but make C_NAME globally visible.
1476
1477The `guile-snarf' script writes initialization code for these macros
1478to its standard output, given C source code as input.
1479
1480The SCM_GLOBAL macro is gone.
1481
1482** The scm_read_line and scm_read_line_x functions have been replaced
1483by Scheme code based on the %read-delimited! procedure (known to C
1484code as scm_read_delimited_x). See its description above for more
1485information.
48d224d7 1486
095936d2
JB
1487** The function scm_sys_open has been renamed to scm_open. It now
1488returns a port instead of an FD object.
ea00ecba 1489
095936d2
JB
1490* The dynamic linking support has changed. For more information, see
1491libguile/DYNAMIC-LINKING.
ea00ecba 1492
f7b47737
JB
1493\f
1494Guile 1.0b3
3065a62a 1495
f3b1485f
JB
1496User-visible changes from Thursday, September 5, 1996 until Guile 1.0
1497(Sun 5 Jan 1997):
3065a62a 1498
4b521edb 1499* Changes to the 'guile' program:
3065a62a 1500
4b521edb
JB
1501** Guile now loads some new files when it starts up. Guile first
1502searches the load path for init.scm, and loads it if found. Then, if
1503Guile is not being used to execute a script, and the user's home
1504directory contains a file named `.guile', Guile loads that.
c6486f8a 1505
4b521edb 1506** You can now use Guile as a shell script interpreter.
3065a62a
JB
1507
1508To paraphrase the SCSH manual:
1509
1510 When Unix tries to execute an executable file whose first two
1511 characters are the `#!', it treats the file not as machine code to
1512 be directly executed by the native processor, but as source code
1513 to be executed by some interpreter. The interpreter to use is
1514 specified immediately after the #! sequence on the first line of
1515 the source file. The kernel reads in the name of the interpreter,
1516 and executes that instead. It passes the interpreter the source
1517 filename as its first argument, with the original arguments
1518 following. Consult the Unix man page for the `exec' system call
1519 for more information.
1520
1a1945be
JB
1521Now you can use Guile as an interpreter, using a mechanism which is a
1522compatible subset of that provided by SCSH.
1523
3065a62a
JB
1524Guile now recognizes a '-s' command line switch, whose argument is the
1525name of a file of Scheme code to load. It also treats the two
1526characters `#!' as the start of a comment, terminated by `!#'. Thus,
1527to make a file of Scheme code directly executable by Unix, insert the
1528following two lines at the top of the file:
1529
1530#!/usr/local/bin/guile -s
1531!#
1532
1533Guile treats the argument of the `-s' command-line switch as the name
1534of a file of Scheme code to load, and treats the sequence `#!' as the
1535start of a block comment, terminated by `!#'.
1536
1537For example, here's a version of 'echo' written in Scheme:
1538
1539#!/usr/local/bin/guile -s
1540!#
1541(let loop ((args (cdr (program-arguments))))
1542 (if (pair? args)
1543 (begin
1544 (display (car args))
1545 (if (pair? (cdr args))
1546 (display " "))
1547 (loop (cdr args)))))
1548(newline)
1549
1550Why does `#!' start a block comment terminated by `!#', instead of the
1551end of the line? That is the notation SCSH uses, and although we
1552don't yet support the other SCSH features that motivate that choice,
1553we would like to be backward-compatible with any existing Guile
3763761c
JB
1554scripts once we do. Furthermore, if the path to Guile on your system
1555is too long for your kernel, you can start the script with this
1556horrible hack:
1557
1558#!/bin/sh
1559exec /really/long/path/to/guile -s "$0" ${1+"$@"}
1560!#
3065a62a
JB
1561
1562Note that some very old Unix systems don't support the `#!' syntax.
1563
c6486f8a 1564
4b521edb 1565** You can now run Guile without installing it.
6685dc83
JB
1566
1567Previous versions of the interactive Guile interpreter (`guile')
1568couldn't start up unless Guile's Scheme library had been installed;
1569they used the value of the environment variable `SCHEME_LOAD_PATH'
1570later on in the startup process, but not to find the startup code
1571itself. Now Guile uses `SCHEME_LOAD_PATH' in all searches for Scheme
1572code.
1573
1574To run Guile without installing it, build it in the normal way, and
1575then set the environment variable `SCHEME_LOAD_PATH' to a
1576colon-separated list of directories, including the top-level directory
1577of the Guile sources. For example, if you unpacked Guile so that the
1578full filename of this NEWS file is /home/jimb/guile-1.0b3/NEWS, then
1579you might say
1580
1581 export SCHEME_LOAD_PATH=/home/jimb/my-scheme:/home/jimb/guile-1.0b3
1582
c6486f8a 1583
4b521edb
JB
1584** Guile's read-eval-print loop no longer prints #<unspecified>
1585results. If the user wants to see this, she can evaluate the
1586expression (assert-repl-print-unspecified #t), perhaps in her startup
48d224d7 1587file.
6685dc83 1588
4b521edb
JB
1589** Guile no longer shows backtraces by default when an error occurs;
1590however, it does display a message saying how to get one, and how to
1591request that they be displayed by default. After an error, evaluate
1592 (backtrace)
1593to see a backtrace, and
1594 (debug-enable 'backtrace)
1595to see them by default.
6685dc83 1596
6685dc83 1597
d9fb83d9 1598
4b521edb
JB
1599* Changes to Guile Scheme:
1600
1601** Guile now distinguishes between #f and the empty list.
1602
1603This is for compatibility with the IEEE standard, the (possibly)
1604upcoming Revised^5 Report on Scheme, and many extant Scheme
1605implementations.
1606
1607Guile used to have #f and '() denote the same object, to make Scheme's
1608type system more compatible with Emacs Lisp's. However, the change
1609caused too much trouble for Scheme programmers, and we found another
1610way to reconcile Emacs Lisp with Scheme that didn't require this.
1611
1612
1613** Guile's delq, delv, delete functions, and their destructive
c6486f8a
JB
1614counterparts, delq!, delv!, and delete!, now remove all matching
1615elements from the list, not just the first. This matches the behavior
1616of the corresponding Emacs Lisp functions, and (I believe) the Maclisp
1617functions which inspired them.
1618
1619I recognize that this change may break code in subtle ways, but it
1620seems best to make the change before the FSF's first Guile release,
1621rather than after.
1622
1623
4b521edb 1624** The compiled-library-path function has been deleted from libguile.
6685dc83 1625
4b521edb 1626** The facilities for loading Scheme source files have changed.
c6486f8a 1627
4b521edb 1628*** The variable %load-path now tells Guile which directories to search
6685dc83
JB
1629for Scheme code. Its value is a list of strings, each of which names
1630a directory.
1631
4b521edb
JB
1632*** The variable %load-extensions now tells Guile which extensions to
1633try appending to a filename when searching the load path. Its value
1634is a list of strings. Its default value is ("" ".scm").
1635
1636*** (%search-load-path FILENAME) searches the directories listed in the
1637value of the %load-path variable for a Scheme file named FILENAME,
1638with all the extensions listed in %load-extensions. If it finds a
1639match, then it returns its full filename. If FILENAME is absolute, it
1640returns it unchanged. Otherwise, it returns #f.
6685dc83 1641
4b521edb
JB
1642%search-load-path will not return matches that refer to directories.
1643
1644*** (primitive-load FILENAME :optional CASE-INSENSITIVE-P SHARP)
1645uses %seach-load-path to find a file named FILENAME, and loads it if
1646it finds it. If it can't read FILENAME for any reason, it throws an
1647error.
6685dc83
JB
1648
1649The arguments CASE-INSENSITIVE-P and SHARP are interpreted as by the
4b521edb
JB
1650`read' function.
1651
1652*** load uses the same searching semantics as primitive-load.
1653
1654*** The functions %try-load, try-load-with-path, %load, load-with-path,
1655basic-try-load-with-path, basic-load-with-path, try-load-module-with-
1656path, and load-module-with-path have been deleted. The functions
1657above should serve their purposes.
1658
1659*** If the value of the variable %load-hook is a procedure,
1660`primitive-load' applies its value to the name of the file being
1661loaded (without the load path directory name prepended). If its value
1662is #f, it is ignored. Otherwise, an error occurs.
1663
1664This is mostly useful for printing load notification messages.
1665
1666
1667** The function `eval!' is no longer accessible from the scheme level.
1668We can't allow operations which introduce glocs into the scheme level,
1669because Guile's type system can't handle these as data. Use `eval' or
1670`read-and-eval!' (see below) as replacement.
1671
1672** The new function read-and-eval! reads an expression from PORT,
1673evaluates it, and returns the result. This is more efficient than
1674simply calling `read' and `eval', since it is not necessary to make a
1675copy of the expression for the evaluator to munge.
1676
1677Its optional arguments CASE_INSENSITIVE_P and SHARP are interpreted as
1678for the `read' function.
1679
1680
1681** The function `int?' has been removed; its definition was identical
1682to that of `integer?'.
1683
1684** The functions `<?', `<?', `<=?', `=?', `>?', and `>=?'. Code should
1685use the R4RS names for these functions.
1686
1687** The function object-properties no longer returns the hash handle;
1688it simply returns the object's property list.
1689
1690** Many functions have been changed to throw errors, instead of
1691returning #f on failure. The point of providing exception handling in
1692the language is to simplify the logic of user code, but this is less
1693useful if Guile's primitives don't throw exceptions.
1694
1695** The function `fileno' has been renamed from `%fileno'.
1696
1697** The function primitive-mode->fdes returns #t or #f now, not 1 or 0.
1698
1699
1700* Changes to Guile's C interface:
1701
1702** The library's initialization procedure has been simplified.
1703scm_boot_guile now has the prototype:
1704
1705void scm_boot_guile (int ARGC,
1706 char **ARGV,
1707 void (*main_func) (),
1708 void *closure);
1709
1710scm_boot_guile calls MAIN_FUNC, passing it CLOSURE, ARGC, and ARGV.
1711MAIN_FUNC should do all the work of the program (initializing other
1712packages, reading user input, etc.) before returning. When MAIN_FUNC
1713returns, call exit (0); this function never returns. If you want some
1714other exit value, MAIN_FUNC may call exit itself.
1715
1716scm_boot_guile arranges for program-arguments to return the strings
1717given by ARGC and ARGV. If MAIN_FUNC modifies ARGC/ARGV, should call
1718scm_set_program_arguments with the final list, so Scheme code will
1719know which arguments have been processed.
1720
1721scm_boot_guile establishes a catch-all catch handler which prints an
1722error message and exits the process. This means that Guile exits in a
1723coherent way when system errors occur and the user isn't prepared to
1724handle it. If the user doesn't like this behavior, they can establish
1725their own universal catcher in MAIN_FUNC to shadow this one.
1726
1727Why must the caller do all the real work from MAIN_FUNC? The garbage
1728collector assumes that all local variables of type SCM will be above
1729scm_boot_guile's stack frame on the stack. If you try to manipulate
1730SCM values after this function returns, it's the luck of the draw
1731whether the GC will be able to find the objects you allocate. So,
1732scm_boot_guile function exits, rather than returning, to discourage
1733people from making that mistake.
1734
1735The IN, OUT, and ERR arguments were removed; there are other
1736convenient ways to override these when desired.
1737
1738The RESULT argument was deleted; this function should never return.
1739
1740The BOOT_CMD argument was deleted; the MAIN_FUNC argument is more
1741general.
1742
1743
1744** Guile's header files should no longer conflict with your system's
1745header files.
1746
1747In order to compile code which #included <libguile.h>, previous
1748versions of Guile required you to add a directory containing all the
1749Guile header files to your #include path. This was a problem, since
1750Guile's header files have names which conflict with many systems'
1751header files.
1752
1753Now only <libguile.h> need appear in your #include path; you must
1754refer to all Guile's other header files as <libguile/mumble.h>.
1755Guile's installation procedure puts libguile.h in $(includedir), and
1756the rest in $(includedir)/libguile.
1757
1758
1759** Two new C functions, scm_protect_object and scm_unprotect_object,
1760have been added to the Guile library.
1761
1762scm_protect_object (OBJ) protects OBJ from the garbage collector.
1763OBJ will not be freed, even if all other references are dropped,
1764until someone does scm_unprotect_object (OBJ). Both functions
1765return OBJ.
1766
1767Note that calls to scm_protect_object do not nest. You can call
1768scm_protect_object any number of times on a given object, and the
1769next call to scm_unprotect_object will unprotect it completely.
1770
1771Basically, scm_protect_object and scm_unprotect_object just
1772maintain a list of references to things. Since the GC knows about
1773this list, all objects it mentions stay alive. scm_protect_object
1774adds its argument to the list; scm_unprotect_object remove its
1775argument from the list.
1776
1777
1778** scm_eval_0str now returns the value of the last expression
1779evaluated.
1780
1781** The new function scm_read_0str reads an s-expression from a
1782null-terminated string, and returns it.
1783
1784** The new function `scm_stdio_to_port' converts a STDIO file pointer
1785to a Scheme port object.
1786
1787** The new function `scm_set_program_arguments' allows C code to set
1788the value teruturned by the Scheme `program-arguments' function.
6685dc83 1789
6685dc83 1790\f
1a1945be
JB
1791Older changes:
1792
1793* Guile no longer includes sophisticated Tcl/Tk support.
1794
1795The old Tcl/Tk support was unsatisfying to us, because it required the
1796user to link against the Tcl library, as well as Tk and Guile. The
1797interface was also un-lispy, in that it preserved Tcl/Tk's practice of
1798referring to widgets by names, rather than exporting widgets to Scheme
1799code as a special datatype.
1800
1801In the Usenix Tk Developer's Workshop held in July 1996, the Tcl/Tk
1802maintainers described some very interesting changes in progress to the
1803Tcl/Tk internals, which would facilitate clean interfaces between lone
1804Tk and other interpreters --- even for garbage-collected languages
1805like Scheme. They expected the new Tk to be publicly available in the
1806fall of 1996.
1807
1808Since it seems that Guile might soon have a new, cleaner interface to
1809lone Tk, and that the old Guile/Tk glue code would probably need to be
1810completely rewritten, we (Jim Blandy and Richard Stallman) have
1811decided not to support the old code. We'll spend the time instead on
1812a good interface to the newer Tk, as soon as it is available.
5c54da76 1813
8512dea6 1814Until then, gtcltk-lib provides trivial, low-maintenance functionality.
deb95d71 1815
5c54da76
JB
1816\f
1817Copyright information:
1818
ea00ecba 1819Copyright (C) 1996,1997 Free Software Foundation, Inc.
5c54da76
JB
1820
1821 Permission is granted to anyone to make or distribute verbatim copies
1822 of this document as received, in any medium, provided that the
1823 copyright notice and this permission notice are preserved,
1824 thus giving the recipient permission to redistribute in turn.
1825
1826 Permission is granted to distribute modified versions
1827 of this document, or of portions of it,
1828 under the above conditions, provided also that they
1829 carry prominent notices stating who last changed them.
1830
48d224d7
JB
1831\f
1832Local variables:
1833mode: outline
1834paragraph-separate: "[ \f]*$"
1835end:
1836