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