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