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