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