*** empty log message ***
[bpt/guile.git] / NEWS
CommitLineData
b2cbe8d8 1Guile NEWS --- history of user-visible changes.
e94d0be2 2Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
5c54da76
JB
3See the end for copying conditions.
4
e1b6c710 5Please send Guile bug reports to bug-guile@gnu.org.
5ebbe4ef
RB
6
7Each release reports the NEWS in the following sections:
8
9* Changes to the distribution
10* Changes to the stand-alone interpreter
11* Changes to Scheme functions and syntax
12* Changes to the C interface
13
5c54da76 14\f
b0d10ba6 15Changes since the 1.6.x series:
ee0c7345 16
4e250ded
MV
17* Changes to the distribution
18
eff2965e
MV
19** Guile is now licensed with the GNU Lesser General Public License.
20
77e51fd6
MV
21** The manual is now licensed with the GNU Free Documentation License.
22
e2d0a649
RB
23** Guile now requires GNU MP (http://swox.com/gmp).
24
25Guile now uses the GNU MP library for arbitrary precision arithmetic.
e2d0a649 26
5ebbe4ef
RB
27** Guile now has separate private and public configuration headers.
28
b0d10ba6
MV
29That is, things like HAVE_STRING_H no longer leak from Guile's
30headers.
5ebbe4ef
RB
31
32** Guile now provides and uses an "effective" version number.
b2cbe8d8
RB
33
34Guile now provides scm_effective_version and effective-version
35functions which return the "effective" version number. This is just
36the normal full version string without the final micro-version number,
b0d10ba6 37so the current effective-version is "1.7". The effective version
b2cbe8d8
RB
38should remain unchanged during a stable series, and should be used for
39items like the versioned share directory name
b0d10ba6 40i.e. /usr/share/guile/1.7.
b2cbe8d8
RB
41
42Providing an unchanging version number during a stable release for
43things like the versioned share directory can be particularly
44important for Guile "add-on" packages, since it provides a directory
45that they can install to that won't be changed out from under them
46with each micro release during a stable series.
47
8d54e73a 48** Thread implementation has changed.
f0b4d944
MV
49
50When you configure "--with-threads=null", you will get the usual
51threading API (call-with-new-thread, make-mutex, etc), but you can't
429d88d4
MV
52actually create new threads. Also, "--with-threads=no" is now
53equivalent to "--with-threads=null". This means that the thread API
54is always present, although you might not be able to create new
55threads.
f0b4d944 56
8d54e73a
MV
57When you configure "--with-threads=pthreads" or "--with-threads=yes",
58you will get threads that are implemented with the portable POSIX
59threads. These threads can run concurrently (unlike the previous
60"coop" thread implementation), but need to cooperate for things like
a558cc63 61the GC.
f0b4d944 62
8d54e73a
MV
63The default is "pthreads", unless your platform doesn't have pthreads,
64in which case "null" threads are used.
2902a459 65
a6d75e53
MV
66See the manual for details, nodes "Initialization", "Multi-Threading",
67"Blocking", and others.
a558cc63 68
f74bdbd3
MV
69** There is the new notion of 'discouraged' features.
70
71This is a milder form of deprecation.
72
73Things that are discouraged should not be used in new code, but it is
74OK to leave them in old code for now. When a discouraged feature is
75used, no warning message is printed like there is for 'deprecated'
76features. Also, things that are merely discouraged are nevertheless
77implemented efficiently, while deprecated features can be very slow.
78
79You can omit discouraged features from libguile by configuring it with
80the '--disable-discouraged' option.
81
82** Deprecation warnings can be controlled at run-time.
83
84(debug-enable 'warn-deprecated) switches them on and (debug-disable
85'warn-deprecated) switches them off.
86
56b97da9
MD
87** New module (ice-9 serialize):
88
89(serialize FORM1 ...) and (parallelize FORM1 ...) are useful when
90you don't trust the thread safety of most of your program, but
91where you have some section(s) of code which you consider can run
92in parallel to other sections.
93
b0d10ba6
MV
94### move rest to manual
95
56b97da9
MD
96They "flag" (with dynamic extent) sections of code to be of
97"serial" or "parallel" nature and have the single effect of
98preventing a serial section from being run in parallel with any
99serial section (including itself).
100
101Both serialize and parallelize can be nested. If so, the
102inner-most construct is in effect.
103
104NOTE 1: A serial section can run in parallel with a parallel
105section.
106
107NOTE 2: If a serial section S is "interrupted" by a parallel
108section P in the following manner: S = S1 P S2, S2 is not
109guaranteed to be resumed by the same thread that previously
110executed S1.
111
112WARNING: Spawning new threads within a serial section have
113undefined effects. It is OK, though, to spawn threads in unflagged
114sections of code where neither serialize or parallelize is in
115effect.
116
117A typical usage is when Guile is used as scripting language in some
118application doing heavy computations. If each thread is
119encapsulated with a serialize form, you can then put a parallelize
120form around the code performing the heavy computations (typically a
121C code primitive), enabling the computations to run in parallel
122while the scripting code runs single-threadedly.
123
f7fb2f39 124** Support for require-extension, SRFI-55, has been added.
9a5fc8c2 125
f7fb2f39
RB
126The SRFI-55 special form `require-extension' has been added. It is
127available at startup, and provides a portable way to load Scheme
128extensions. SRFI-55 only requires support for one type of extension,
129"srfi"; so a set of SRFIs may be loaded via (require-extension (srfi 1
13013 14)).
131
132** New module (srfi srfi-26) provides support for `cut' and `cute'.
133
134The (srfi srfi-26) module is an implementation of SRFI-26 which
135provides the `cut' and `cute' syntax. These may be used to specialize
136parameters without currying.
9a5fc8c2 137
f5d54eb7
RB
138** New module (srfi srfi-31)
139
140This is an implementation of SRFI-31 which provides a special form
141`rec' for recursive evaluation.
142
7b1574ed
MV
143** The modules (srfi srfi-13), (srfi srfi-14) and (srfi srfi-4) have
144 been merged with the core, making their functionality always
145 available.
c5080b51 146
ce7c0293
MV
147The modules are still available, tho, and you could use them together
148with a renaming import, for example.
c5080b51 149
6191ccec 150** Guile no longer includes its own version of libltdl.
4e250ded 151
6191ccec 152The official version is good enough now.
4e250ded 153
ae7ded56
MV
154** The --enable-htmldoc option has been removed from 'configure'.
155
156Support for translating the documentation into HTML is now always
157provided. Use 'make html'.
158
c34e5780
MV
159** The configure option '--disable-arrays' has been removed.
160
161Support for arrays and uniform numeric arrays is now always included
162in Guile.
163
328dc9a3 164* Changes to the stand-alone interpreter
f12ef3fd 165
3ece39d6
MV
166** New command line option `-L'.
167
168This option adds a directory to the front of the load path.
169
f12ef3fd
MV
170** New command line option `--no-debug'.
171
172Specifying `--no-debug' on the command line will keep the debugging
173evaluator turned off, even for interactive sessions.
174
175** User-init file ~/.guile is now loaded with the debugging evaluator.
176
177Previously, the normal evaluator would have been used. Using the
178debugging evaluator gives better error messages.
179
aff7e166
MV
180** The '-e' option now 'read's its argument.
181
182This is to allow the new '(@ MODULE-NAME VARIABLE-NAME)' construct to
183be used with '-e'. For example, you can now write a script like
184
185 #! /bin/sh
186 exec guile -e '(@ (demo) main)' -s "$0" "$@"
187 !#
188
189 (define-module (demo)
190 :export (main))
191
192 (define (main args)
193 (format #t "Demo: ~a~%" args))
194
195
f12ef3fd
MV
196* Changes to Scheme functions and syntax
197
930888e8
MV
198** Guardians have changed back to their original semantics
199
200Guardians now behave like described in the paper by Dybvig et al. In
201particular, they no longer make guarantees about the order in which
202they return objects, and they can no longer be greedy.
203
204They no longer drop cyclic data structures.
205
206The C function scm_make_guardian has been changed incompatibly and no
207longer takes the 'greedy_p' argument.
208
87bdbdbc
MV
209** New function hashx-remove!
210
211This function completes the set of 'hashx' functions.
212
a558cc63
MV
213** The concept of dynamic roots has been factored into continuation
214 barriers and dynamic states.
215
216Each thread has a current dynamic state that carries the values of the
217fluids. You can create and copy dynamic states and use them as the
218second argument for 'eval'. See "Fluids and Dynamic States" in the
219manual.
220
221To restrict the influence that captured continuations can have on the
222control flow, you can errect continuation barriers. See "Continuation
223Barriers" in the manual.
224
225The function call-with-dynamic-root now essentially temporarily
226installs a new dynamic state and errects a continuation barrier.
227
a2b6a0e7
MV
228** The default load path no longer includes "." at the end.
229
230Automatically loading modules from the current directory should not
231happen by default. If you want to allow it in a more controlled
232manner, set the environment variable GUILE_LOAD_PATH or the Scheme
233variable %load-path.
234
7b1574ed
MV
235** The uniform vector and array support has been overhauled.
236
237It now complies with SRFI-4 and the weird prototype based uniform
238array creation has been deprecated. See the manual for more details.
239
d233b123
MV
240Some non-compatible changes have been made:
241 - characters can no longer be stored into byte arrays.
242 - strings and bit vectors are no longer considered to be uniform vectors.
3167d5e4
MV
243 - array-rank throws an error for non-arrays instead of returning zero.
244 - array-ref does no longer accept non-arrays when no indices are given.
d233b123
MV
245
246There is the new notion of 'generalized vectors' and corresponding
247procedures like 'generalized-vector-ref'. Generalized vectors include
c34e5780 248strings, bitvectors, ordinary vectors, and uniform numeric vectors.
d233b123 249
a558cc63
MV
250Arrays use generalized vectors as their storage, so that you still
251have arrays of characters, bits, etc. However, uniform-array-read!
252and uniform-array-write can no longer read/write strings and
253bitvectors.
bb9f50ae 254
ce7c0293
MV
255** There is now support for copy-on-write substrings, mutation-sharing
256 substrings and read-only strings.
3ff9283d 257
ce7c0293
MV
258Three new procedures are related to this: substring/shared,
259substring/copy, and substring/read-only. See the manual for more
260information.
261
6a1d27ea
MV
262** Backtraces will now highlight the value that caused the error.
263
264By default, these values are enclosed in "{...}", such as in this
265example:
266
267 guile> (car 'a)
268
269 Backtrace:
270 In current input:
271 1: 0* [car {a}]
272
273 <unnamed port>:1:1: In procedure car in expression (car (quote a)):
274 <unnamed port>:1:1: Wrong type (expecting pair): a
275 ABORT: (wrong-type-arg)
276
277The prefix and suffix used for highlighting can be set via the two new
278printer options 'highlight-prefix' and 'highlight-suffix'. For
279example, putting this into ~/.guile will output the bad value in bold
280on an ANSI terminal:
281
282 (print-set! highlight-prefix "\x1b[1m")
283 (print-set! highlight-suffix "\x1b[22m")
284
285
8dbafacd
MV
286** 'gettext' support for internationalization has been added.
287
288See the manual for details.
289
aff7e166
MV
290** New syntax '@' and '@@':
291
292You can now directly refer to variables exported from a module by
293writing
294
295 (@ MODULE-NAME VARIABLE-NAME)
296
297For example (@ (ice-9 pretty-print) pretty-print) will directly access
298the pretty-print variable exported from the (ice-9 pretty-print)
299module. You don't need to 'use' that module first. You can also use
b0d10ba6 300'@' as a target of 'set!', as in (set! (@ mod var) val).
aff7e166
MV
301
302The related syntax (@@ MODULE-NAME VARIABLE-NAME) works just like '@',
303but it can also access variables that have not been exported. It is
304intended only for kluges and temporary fixes and for debugging, not
305for ordinary code.
306
aef0bdb4
MV
307** Keyword syntax has been made more disciplined.
308
309Previously, the name of a keyword was read as a 'token' but printed as
310a symbol. Now, it is read as a general Scheme datum which must be a
311symbol.
312
313Previously:
314
315 guile> #:12
316 #:#{12}#
317 guile> #:#{12}#
318 #:#{\#{12}\#}#
319 guile> #:(a b c)
320 #:#{}#
321 ERROR: In expression (a b c):
322 Unbound variable: a
323 guile> #: foo
324 #:#{}#
325 ERROR: Unbound variable: foo
326
327Now:
328
329 guile> #:12
330 ERROR: Wrong type (expecting symbol): 12
331 guile> #:#{12}#
332 #:#{12}#
333 guile> #:(a b c)
334 ERROR: Wrong type (expecting symbol): (a b c)
335 guile> #: foo
336 #:foo
337
1363e3e7
KR
338** 'while' now provides 'break' and 'continue'
339
340break and continue were previously bound in a while loop, but not
341documented, and continue didn't quite work properly. The undocumented
342parameter to break which gave a return value for the while has been
343dropped.
344
570b5b14
MV
345** 'call-with-current-continuation' is now also available under the name
346 'call/cc'.
347
b0d10ba6 348** The module system now checks for duplicate bindings.
7b07e5ef 349
fe6ee052
MD
350The module system now can check for name conflicts among imported
351bindings.
f595ccfe 352
b0d10ba6 353The behavior can be controlled by specifying one or more 'duplicates'
fe6ee052
MD
354handlers. For example, to make Guile return an error for every name
355collision, write:
7b07e5ef
MD
356
357(define-module (foo)
358 :use-module (bar)
359 :use-module (baz)
fe6ee052 360 :duplicates check)
f595ccfe 361
fe6ee052
MD
362The new default behavior of the module system when a name collision
363has been detected is to
364
365 1. Give priority to bindings marked as a replacement.
6496a663 366 2. Issue a warning (different warning if overriding core binding).
fe6ee052
MD
367 3. Give priority to the last encountered binding (this corresponds to
368 the old behavior).
369
370If you want the old behavior back without replacements or warnings you
371can add the line:
f595ccfe 372
70a9dc9c 373 (default-duplicate-binding-handler 'last)
7b07e5ef 374
fe6ee052 375to your .guile init file.
7b07e5ef 376
b0d10ba6
MV
377### move rest to manual
378
7b07e5ef
MD
379The syntax for the :duplicates option is:
380
381 :duplicates HANDLER-NAME | (HANDLER1-NAME HANDLER2-NAME ...)
382
383Specifying multiple handlers is useful since some handlers (such as
f595ccfe
MD
384replace) can defer conflict resolution to others. Each handler is
385tried until a binding is selected.
7b07e5ef
MD
386
387Currently available duplicates handlers are:
388
f595ccfe
MD
389 check report an error for bindings with a common name
390 warn issue a warning for bindings with a common name
391 replace replace bindings which have an imported replacement
392 warn-override-core issue a warning for imports which override core bindings
fe6ee052 393 and accept the override
f595ccfe
MD
394 first select the first encountered binding (override)
395 last select the last encountered binding (override)
70a9dc9c
MD
396
397These two are provided by the (oop goops) module:
398
f595ccfe
MD
399 merge-generics merge generic functions with a common name
400 into an <extended-generic>
f8af5c6d 401 merge-accessors merge accessors with a common name
f595ccfe
MD
402
403The default duplicates handler is:
404
6496a663 405 (replace warn-override-core warn last)
fe6ee052
MD
406
407A recommended handler (which is likely to correspond to future Guile
408behavior) can be installed with:
409
410 (default-duplicate-binding-handler '(replace warn-override-core check))
f595ccfe
MD
411
412** New define-module option: :replace
413
414:replace works as :export, but, in addition, marks the binding as a
415replacement.
416
417A typical example is `format' in (ice-9 format) which is a replacement
418for the core binding `format'.
7b07e5ef 419
70da0033
MD
420** Adding prefixes to imported bindings in the module system
421
422There is now a new :use-module option :prefix. It can be used to add
423a prefix to all imported bindings.
424
425 (define-module (foo)
426 :use-module ((bar) :prefix bar:))
427
428will import all bindings exported from bar, but rename them by adding
429the prefix `bar:'.
430
b0d10ba6
MV
431** Conflicting generic functions can be automatically merged.
432
433When two imported bindings conflict and they are both generic
434functions, the two functions can now be merged automatically. This is
435activated with the 'duplicates' handler 'merge-generics'.
436
437### move the rest to the manual
7b07e5ef
MD
438
439It is sometimes tempting to use GOOPS accessors with short names.
440For example, it is tempting to use the name `x' for the x-coordinate
441in vector packages.
442
443Assume that we work with a graphical package which needs to use two
444independent vector packages for 2D and 3D vectors respectively. If
445both packages export `x' we will encounter a name collision.
446
f595ccfe
MD
447This can now be resolved automagically with the duplicates handler
448`merge-generics' which gives the module system license to merge all
449generic functions sharing a common name:
7b07e5ef
MD
450
451(define-module (math 2D-vectors)
452 :use-module (oop goops)
453 :export (x y ...))
454
455(define-module (math 3D-vectors)
456 :use-module (oop goops)
457 :export (x y z ...))
458
459(define-module (my-module)
460 :use-module (math 2D-vectors)
461 :use-module (math 3D-vectors)
462 :duplicates merge-generics)
463
464x in (my-module) will now share methods with x in both imported
465modules.
466
f595ccfe
MD
467There will, in fact, now be three distinct generic functions named
468`x': x in (2D-vectors), x in (3D-vectors), and x in (my-module). The
469last function will be an <extended-generic>, extending the previous
470two functions.
471
472Let's call the imported generic functions the "ancestor functions". x
473in (my-module) is, in turn, a "descendant function" of the imported
474functions, extending its ancestors.
475
476For any generic function G, the applicable methods are selected from
477the union of the methods of the descendant functions, the methods of G
478itself and the methods of the ancestor functions.
7b07e5ef 479
f595ccfe
MD
480This, ancestor functions share methods with their descendants and vice
481versa. This implies that x in (math 2D-vectors) can will share the
482methods of x in (my-module) and vice versa, while x in (math 2D-vectors)
483doesn't share the methods of x in (math 3D-vectors), thus preserving
484modularity.
7b07e5ef 485
f595ccfe
MD
486Sharing is dynamic, so that adding new methods to a descendant implies
487adding it to the ancestor.
7b07e5ef
MD
488
489If duplicates checking is desired in the above example, the following
490form of the :duplicates option can be used instead:
491
492 :duplicates (merge-generics check)
493
b2cbe8d8
RB
494** New function: effective-version
495
496Returns the "effective" version number. This is just the normal full
497version string without the final micro-version number. See "Changes
498to the distribution" above.
499
b0d10ba6 500** New feature, 'futures': future, make-future, future-ref
e2d820a1 501
b0d10ba6
MV
502Futures are like promises, but begin execution immediately in a new
503thread. See the "Futures" section in the reference manual.
dbe30084 504
382053e9 505** New threading functions: parallel, letpar, par-map, and friends
dbe30084 506
382053e9
KR
507These are convenient ways to run calculations in parallel in new
508threads. See "Parallel forms" in the manual for details.
359aab24 509
e2d820a1
MV
510** New function 'try-mutex'.
511
512This function will attempt to lock a mutex but will return immediately
1e5f92ce 513instead if blocking and indicate failure.
e2d820a1
MV
514
515** Waiting on a condition variable can have a timeout.
516
517The funtion 'wait-condition-variable' now takes a third, optional
518argument that specifies the point in time where the waiting should be
519aborted.
520
521** New function 'broadcast-condition-variable'.
522
5e405a60
MV
523** New functions 'all-threads' and 'current-thread'.
524
525** Signals and system asyncs work better with threads.
526
527The function 'sigaction' now takes a fourth, optional, argument that
528specifies the thread that the handler should run in. When the
529argument is omitted, the handler will run in the thread that called
530'sigaction'.
531
532Likewise, 'system-async-mark' takes a second, optional, argument that
533specifies the thread that the async should run in. When it is
534omitted, the async will run in the thread that called
535'system-async-mark'.
536
537C code can use the new functions scm_sigaction_for_thread and
538scm_system_async_mark_for_thread to pass the new thread argument.
539
a558cc63
MV
540When a thread blocks on a mutex, a condition variable or is waiting
541for IO to be possible, it will still execute system asyncs. This can
542be used to interrupt such a thread by making it execute a 'throw', for
543example.
544
5e405a60
MV
545** The function 'system-async' is deprecated.
546
547You can now pass any zero-argument procedure to 'system-async-mark'.
548The function 'system-async' will just return its argument unchanged
549now.
550
acfa1f52
MV
551** New functions 'call-with-blocked-asyncs' and
552 'call-with-unblocked-asyncs'
553
554The expression (call-with-blocked-asyncs PROC) will call PROC and will
555block execution of system asyncs for the current thread by one level
556while PROC runs. Likewise, call-with-unblocked-asyncs will call a
557procedure and will unblock the execution of system asyncs by one
558level for the current thread.
559
560Only system asyncs are affected by these functions.
561
562** The functions 'mask-signals' and 'unmask-signals' are deprecated.
563
564Use 'call-with-blocked-asyncs' or 'call-with-unblocked-asyncs'
565instead. Those functions are easier to use correctly and can be
566nested.
567
7b232758
MV
568** New function 'unsetenv'.
569
f30482f3
MV
570** New macro 'define-syntax-public'.
571
572It works like 'define-syntax' and also exports the defined macro (but
573only on top-level).
574
1ee34062
MV
575** There is support for Infinity and NaNs.
576
577Following PLT Scheme, Guile can now work with infinite numbers, and
578'not-a-numbers'.
579
580There is new syntax for numbers: "+inf.0" (infinity), "-inf.0"
581(negative infinity), "+nan.0" (not-a-number), and "-nan.0" (same as
582"+nan.0"). These numbers are inexact and have no exact counterpart.
583
584Dividing by an inexact zero returns +inf.0 or -inf.0, depending on the
585sign of the dividend. The infinities are integers, and they answer #t
586for both 'even?' and 'odd?'. The +nan.0 value is not an integer and is
587not '=' to itself, but '+nan.0' is 'eqv?' to itself.
588
589For example
590
591 (/ 1 0.0)
592 => +inf.0
593
594 (/ 0 0.0)
595 => +nan.0
596
597 (/ 0)
598 ERROR: Numerical overflow
599
7b232758
MV
600Two new predicates 'inf?' and 'nan?' can be used to test for the
601special values.
602
ba1b077b
MV
603** Inexact zero can have a sign.
604
605Guile can now distinguish between plus and minus inexact zero, if your
606platform supports this, too. The two zeros are equal according to
607'=', but not according to 'eqv?'. For example
608
609 (- 0.0)
610 => -0.0
611
612 (= 0.0 (- 0.0))
613 => #t
614
615 (eqv? 0.0 (- 0.0))
616 => #f
617
bdf26b60
MV
618** Guile now has exact rationals.
619
620Guile can now represent fractions such as 1/3 exactly. Computing with
621them is also done exactly, of course:
622
623 (* 1/3 3/2)
624 => 1/2
625
626** 'floor', 'ceiling', 'round' and 'truncate' now return exact numbers
627 for exact arguments.
628
629For example: (floor 2) now returns an exact 2 where in the past it
630returned an inexact 2.0. Likewise, (floor 5/4) returns an exact 1.
631
632** inexact->exact no longer returns only integers.
633
634Without exact rationals, the closest exact number was always an
635integer, but now inexact->exact returns the fraction that is exactly
636equal to a floating point number. For example:
637
638 (inexact->exact 1.234)
639 => 694680242521899/562949953421312
640
641When you want the old behavior, use 'round' explicitely:
642
643 (inexact->exact (round 1.234))
644 => 1
645
646** New function 'rationalize'.
647
648This function finds a simple fraction that is close to a given real
649number. For example (and compare with inexact->exact above):
650
fb16d26e 651 (rationalize (inexact->exact 1.234) 1/2000)
bdf26b60
MV
652 => 58/47
653
fb16d26e
MV
654Note that, as required by R5RS, rationalize returns only then an exact
655result when both its arguments are exact.
656
bdf26b60
MV
657** 'odd?' and 'even?' work also for inexact integers.
658
659Previously, (odd? 1.0) would signal an error since only exact integers
660were recognized as integers. Now (odd? 1.0) returns #t, (odd? 2.0)
661returns #f and (odd? 1.5) signals an error.
662
b0d10ba6 663** Guile now has uninterned symbols.
610922b2 664
b0d10ba6 665The new function 'make-symbol' will return an uninterned symbol. This
610922b2
MV
666is a symbol that is unique and is guaranteed to remain unique.
667However, uninterned symbols can not yet be read back in.
668
669Use the new function 'symbol-interned?' to check whether a symbol is
670interned or not.
671
0e6f7775
MV
672** pretty-print has more options.
673
674The function pretty-print from the (ice-9 pretty-print) module can now
675also be invoked with keyword arguments that control things like
71f271b2 676maximum output width. See the manual for details.
0e6f7775 677
8c84b81e 678** Variables have no longer a special behavior for `equal?'.
ee0c7345
MV
679
680Previously, comparing two variables with `equal?' would recursivly
681compare their values. This is no longer done. Variables are now only
682`equal?' if they are `eq?'.
683
4e21fa60
MV
684** `(begin)' is now valid.
685
686You can now use an empty `begin' form. It will yield #<unspecified>
687when evaluated and simply be ignored in a definition context.
688
3063e30a
DH
689** Deprecated: procedure->macro
690
b0d10ba6
MV
691Change your code to use 'define-macro' or r5rs macros. Also, be aware
692that macro expansion will not be done during evaluation, but prior to
693evaluation.
3063e30a 694
0a50eeaa
NJ
695** Soft ports now allow a `char-ready?' procedure
696
697The vector argument to `make-soft-port' can now have a length of
698either 5 or 6. (Previously the length had to be 5.) The optional 6th
699element is interpreted as an `input-waiting' thunk -- i.e. a thunk
700that returns the number of characters that can be read immediately
701without the soft port blocking.
702
9a69a50e
NJ
703** New debugging feature: breakpoints.
704
7195a60f
NJ
705Guile now has breakpoints. For details see the `Debugging Features'
706chapter in the reference manual.
707
63dd3413
DH
708** Deprecated: undefine
709
710There is no replacement for undefine.
711
aef0bdb4
MV
712* The functions make-keyword-from-dash-symbol and keyword-dash-symbol
713 have been discouraged.
714
715They are relics from a time where a keyword like #:foo was used
716directly as a Tcl option "-foo" and thus keywords were internally
717stored as a symbol with a starting dash. We now store a symbol
718without the dash.
719
720Use symbol->keyword and keyword->symbol instead.
721
36a9b236 722
b00418df
DH
723* Changes to the C interface
724
87bdbdbc
MV
725** The functions scm_hash_fn_remove_x and scm_hashx_remove_x no longer
726 take a 'delete' function argument.
727
728This argument makes no sense since the delete function is used to
729remove a pair from an alist, and this must not be configurable.
730
731This is an incompatible change.
732
1cf1bb95
MV
733** The GH interface is now subject to the deprecation mechanism
734
735The GH interface has been deprecated for quite some time but now it is
736actually removed from Guile when it is configured with
737--disable-deprecated.
738
739See the manual "Transitioning away from GH" for more information.
740
f7f3964e
MV
741** A new family of functions for converting between C values and
742 Scheme values has been added.
743
744These functions follow a common naming scheme and are designed to be
745easier to use, thread-safe and more future-proof than the older
746alternatives.
747
748 - int scm_is_* (...)
749
750 These are predicates that return a C boolean: 1 or 0. Instead of
751 SCM_NFALSEP, you can now use scm_is_true, for example.
752
753 - <type> scm_to_<type> (SCM val, ...)
754
755 These are functions that convert a Scheme value into an appropriate
756 C value. For example, you can use scm_to_int to safely convert from
757 a SCM to an int.
758
a2b6a0e7 759 - SCM scm_from_<type> (<type> val, ...)
f7f3964e
MV
760
761 These functions convert from a C type to a SCM value; for example,
762 scm_from_int for ints.
763
764There is a huge number of these functions, for numbers, strings,
765symbols, vectors, etc. They are documented in the reference manual in
766the API section together with the types that they apply to.
767
96d8c217
MV
768** New functions for dealing with complex numbers in C have been added.
769
770The new functions are scm_c_make_rectangular, scm_c_make_polar,
771scm_c_real_part, scm_c_imag_part, scm_c_magnitude and scm_c_angle.
772They work like scm_make_rectangular etc but take or return doubles
773directly.
774
775** The function scm_make_complex has been discouraged.
776
777Use scm_c_make_rectangular instead.
778
f7f3964e
MV
779** The INUM macros have been deprecated.
780
781A lot of code uses these macros to do general integer conversions,
b0d10ba6
MV
782although the macros only work correctly with fixnums. Use the
783following alternatives.
f7f3964e
MV
784
785 SCM_INUMP -> scm_is_integer or similar
786 SCM_NINUMP -> !scm_is_integer or similar
787 SCM_MAKINUM -> scm_from_int or similar
788 SCM_INUM -> scm_to_int or similar
789
b0d10ba6 790 SCM_VALIDATE_INUM_* -> Do not use these; scm_to_int, etc. will
f7f3964e
MV
791 do the validating for you.
792
f9656a9f
MV
793** The scm_num2<type> and scm_<type>2num functions and scm_make_real
794 have been discouraged.
f7f3964e
MV
795
796Use the newer scm_to_<type> and scm_from_<type> functions instead for
797new code. The functions have been discouraged since they don't fit
798the naming scheme.
799
800** The 'boolean' macros SCM_FALSEP etc have been discouraged.
801
802They have strange names, especially SCM_NFALSEP, and SCM_BOOLP
803evaluates its argument twice. Use scm_is_true, etc. instead for new
804code.
805
806** The macro SCM_EQ_P has been discouraged.
807
808Use scm_is_eq for new code, which fits better into the naming
809conventions.
d5b203a6 810
d5ac9b2a
MV
811** The macros SCM_CONSP, SCM_NCONSP, SCM_NULLP, and SCM_NNULLP have
812 been discouraged.
813
814Use the function scm_is_pair or scm_is_null instead.
815
409eb4e5
MV
816** The functions scm_round and scm_truncate have been deprecated and
817 are now available as scm_c_round and scm_c_truncate, respectively.
818
819These functions occupy the names that scm_round_number and
820scm_truncate_number should have.
821
3ff9283d
MV
822** The functions scm_c_string2str, scm_c_substring2str, and
823 scm_c_symbol2str have been deprecated.
c41acab3
MV
824
825Use scm_to_locale_stringbuf or similar instead, maybe together with
826scm_substring.
827
3ff9283d
MV
828** New functions scm_c_make_string, scm_c_string_length,
829 scm_c_string_ref, scm_c_string_set_x, scm_c_substring,
830 scm_c_substring_shared, scm_c_substring_copy.
831
832These are like scm_make_string, scm_length, etc. but are slightly
833easier to use from C.
834
835** The macros SCM_STRINGP, SCM_STRING_CHARS, SCM_STRING_LENGTH,
836 SCM_SYMBOL_CHARS, and SCM_SYMBOL_LENGTH have been deprecated.
837
838They export too many assumptions about the implementation of strings
839and symbols that are no longer true in the presence of
b0d10ba6
MV
840mutation-sharing substrings and when Guile switches to some form of
841Unicode.
3ff9283d
MV
842
843When working with strings, it is often best to use the normal string
844functions provided by Guile, such as scm_c_string_ref,
b0d10ba6
MV
845scm_c_string_set_x, scm_string_append, etc. Be sure to look in the
846manual since many more such functions are now provided than
847previously.
3ff9283d
MV
848
849When you want to convert a SCM string to a C string, use the
850scm_to_locale_string function or similar instead. For symbols, use
851scm_symbol_to_string and then work with that string. Because of the
852new string representation, scm_symbol_to_string does not need to copy
853and is thus quite efficient.
854
aef0bdb4 855** Some string, symbol and keyword functions have been discouraged.
3ff9283d 856
b0d10ba6 857They don't fit into the uniform naming scheme and are not explicit
3ff9283d
MV
858about the character encoding.
859
860Replace according to the following table:
861
862 scm_allocate_string -> scm_c_make_string
863 scm_take_str -> scm_take_locale_stringn
864 scm_take0str -> scm_take_locale_string
865 scm_mem2string -> scm_from_locale_stringn
866 scm_str2string -> scm_from_locale_string
867 scm_makfrom0str -> scm_from_locale_string
868 scm_mem2symbol -> scm_from_locale_symboln
b0d10ba6 869 scm_mem2uninterned_symbol -> scm_from_locale_stringn + scm_make_symbol
3ff9283d
MV
870 scm_str2symbol -> scm_from_locale_symbol
871
872 SCM_SYMBOL_HASH -> scm_hashq
873 SCM_SYMBOL_INTERNED_P -> scm_symbol_interned_p
874
aef0bdb4
MV
875 scm_c_make_keyword -> scm_from_locale_keyword
876
877** The functions scm_keyword_to_symbol and sym_symbol_to_keyword are
878 now also available to C code.
879
880** SCM_KEYWORDP and SCM_KEYWORDSYM have been deprecated.
881
882Use scm_is_keyword and scm_keyword_to_symbol instead, but note that
883the latter returns the true name of the keyword, not the 'dash name',
884as SCM_KEYWORDSYM used to do.
885
dc91d8de
MV
886** A new way to access arrays in a thread-safe and efficient way has
887 been added.
888
889See the manual, node "Accessing Arrays From C".
890
3167d5e4
MV
891** The old uniform vector and bitvector implementations have been
892 unceremoniously removed.
d4ea47c8 893
a558cc63 894This implementation exposed the details of the tagging system of
d4ea47c8 895Guile. Use the new C API explained in the manual in node "Uniform
c34e5780 896Numeric Vectors" and "Bit Vectors", respectively.
d4ea47c8
MV
897
898The following macros are gone: SCM_UVECTOR_BASE, SCM_SET_UVECTOR_BASE,
899SCM_UVECTOR_MAXLENGTH, SCM_UVECTOR_LENGTH, SCM_MAKE_UVECTOR_TAG,
3167d5e4
MV
900SCM_SET_UVECTOR_LENGTH, SCM_BITVECTOR_P, SCM_BITVECTOR_BASE,
901SCM_SET_BITVECTOR_BASE, SCM_BITVECTOR_MAX_LENGTH,
902SCM_BITVECTOR_LENGTH, SCM_MAKE_BITVECTOR_TAG,
0b63c1ee
MV
903SCM_SET_BITVECTOR_LENGTH, SCM_BITVEC_REF, SCM_BITVEC_SET,
904SCM_BITVEC_CLR.
d4ea47c8 905
c34e5780
MV
906** The macros dealing with vectors have been deprecated.
907
908Use the new functions scm_is_vector, scm_vector_elements,
0b63c1ee
MV
909scm_vector_writable_elements, etc, or scm_is_simple_vector,
910SCM_SIMPLE_VECTOR_REF, SCM_SIMPLE_VECTOR_SET, etc instead. See the
911manual for more details.
c34e5780
MV
912
913Deprecated are SCM_VECTORP, SCM_VELTS, SCM_VECTOR_MAX_LENGTH,
914SCM_VECTOR_LENGTH, SCM_VECTOR_REF, SCM_VECTOR_SET, SCM_WRITABLE_VELTS.
915
916The following macros have been removed: SCM_VECTOR_BASE,
917SCM_SET_VECTOR_BASE, SCM_MAKE_VECTOR_TAG, SCM_SET_VECTOR_LENGTH,
918SCM_VELTS_AS_STACKITEMS, SCM_SETVELTS, SCM_GC_WRITABLE_VELTS.
919
0c7a5cab 920** Some C functions and macros related to arrays have been deprecated.
dc91d8de
MV
921
922Migrate according to the following table:
923
e94d0be2 924 scm_make_uve -> scm_make_typed_array, scm_make_u8vector etc.
dc91d8de
MV
925 scm_make_ra -> scm_make_array
926 scm_shap2ra -> scm_make_array
927 scm_cvref -> scm_c_generalized_vector_ref
928 scm_ra_set_contp -> do not use
929 scm_aind -> scm_array_handle_pos
930 scm_raprin1 -> scm_display or scm_write
931
0c7a5cab
MV
932 SCM_ARRAYP -> scm_is_array
933 SCM_ARRAY_NDIM -> scm_c_array_rank
934 SCM_ARRAY_DIMS -> scm_array_handle_dims
935 SCM_ARRAY_CONTP -> do not use
936 SCM_ARRAY_MEM -> do not use
937 SCM_ARRAY_V -> scm_array_handle_elements or similar
938 SCM_ARRAY_BASE -> do not use
939
c1e7caf7
MV
940** SCM_CELL_WORD_LOC has been deprecated.
941
b0d10ba6 942Use the new macro SCM_CELL_OBJECT_LOC instead, which returns a pointer
c1e7caf7
MV
943to a SCM, as opposed to a pointer to a scm_t_bits.
944
945This was done to allow the correct use of pointers into the Scheme
946heap. Previously, the heap words were of type scm_t_bits and local
947variables and function arguments were of type SCM, making it
948non-standards-conformant to have a pointer that can point to both.
949
3ff9283d 950** New macros SCM_SMOB_DATA_2, SCM_SMOB_DATA_3, etc.
27968825
MV
951
952These macros should be used instead of SCM_CELL_WORD_2/3 to access the
953second and third words of double smobs. Likewise for
954SCM_SET_SMOB_DATA_2 and SCM_SET_SMOB_DATA_3.
955
956Also, there is SCM_SMOB_FLAGS and SCM_SET_SMOB_FLAGS that should be
957used to get and set the 16 exra bits in the zeroth word of a smob.
958
959And finally, there is SCM_SMOB_OBJECT and SCM_SMOB_SET_OBJECT for
960accesing the first immediate word of a smob as a SCM value, and there
961is SCM_SMOB_OBJECT_LOC for getting a pointer to the first immediate
b0d10ba6 962smob word. Like wise for SCM_SMOB_OBJECT_2, etc.
27968825 963
b0d10ba6 964** New way to deal with non-local exits and re-entries.
9879d390
MV
965
966There is a new set of functions that essentially do what
fc6bb283
MV
967scm_internal_dynamic_wind does, but in a way that is more convenient
968for C code in some situations. Here is a quick example of how to
969prevent a potential memory leak:
9879d390
MV
970
971 void
972 foo ()
973 {
974 char *mem;
975
fc6bb283 976 scm_frame_begin (0);
9879d390
MV
977
978 mem = scm_malloc (100);
f1da8e4e
MV
979 scm_frame_unwind_handler (free, mem, SCM_F_WIND_EXPLICITELY);
980
981 /* MEM would leak if BAR throws an error.
c41acab3
MV
982 SCM_FRAME_UNWIND_HANDLER frees it nevertheless.
983 */
9879d390 984
9879d390
MV
985 bar ();
986
fc6bb283 987 scm_frame_end ();
9879d390
MV
988
989 /* Because of SCM_F_WIND_EXPLICITELY, MEM will be freed by
fc6bb283 990 SCM_FRAME_END as well.
9879d390
MV
991 */
992 }
993
994For full documentation, see the node "Frames" in the manual.
995
c41acab3
MV
996** New function scm_frame_free
997
998This function calls 'free' on a given pointer when a frame is left.
999Thus the call to scm_frame_unwind_handler above could be replaced with
1000simply scm_frame_free (mem).
1001
a6d75e53
MV
1002** New functions scm_c_call_with_blocked_asyncs and
1003 scm_c_call_with_unblocked_asyncs
1004
1005Like scm_call_with_blocked_asyncs etc. but for C functions.
1006
1007** New functions scm_frame_block_asyncs and scm_frame_unblock_asyncs
49c00ecc
MV
1008
1009In addition to scm_c_call_with_blocked_asyncs you can now also use
fc6bb283
MV
1010scm_frame_block_asyncs in a 'frame' (see above). Likewise for
1011scm_c_call_with_unblocked_asyncs and scm_frame_unblock_asyncs.
49c00ecc 1012
a558cc63
MV
1013** The macros SCM_DEFER_INTS, SCM_ALLOW_INTS, SCM_REDEFER_INTS,
1014 SCM_REALLOW_INTS have been deprecated.
1015
1016They do no longer fulfill their original role of blocking signal
1017delivery. Depending on what you want to achieve, replace a pair of
1018SCM_DEFER_INTS and SCM_ALLOW_INTS with a frame that locks a mutex,
a6d75e53
MV
1019blocks asyncs, or both. See node "Critical Sections" in the manual.
1020
1021** The value 'scm_mask_ints' is no longer writable.
1022
1023Previously, you could set scm_mask_ints directly. This is no longer
1024possible. Use scm_c_call_with_blocked_asyncs and
1025scm_c_call_with_unblocked_asyncs instead.
a558cc63 1026
49c00ecc
MV
1027** New way to temporarily set the current input, output or error ports
1028
fc6bb283 1029C code can now use scm_frame_current_<foo>_port in a 'frame' (see
49c00ecc
MV
1030above). <foo> is one of "input", "output" or "error".
1031
fc6bb283
MV
1032** New way to temporarily set fluids
1033
1034C code can now use scm_frame_fluid in a 'frame' (see
1035above) to temporarily set the value of a fluid.
1036
89fcf1b4
MV
1037** New types scm_t_intmax and scm_t_uintmax.
1038
1039On platforms that have them, these types are identical to intmax_t and
1040uintmax_t, respectively. On other platforms, they are identical to
1041the largest integer types that Guile knows about.
1042
b0d10ba6 1043** The functions scm_unmemocopy and scm_unmemoize have been removed.
9fcf3cbb 1044
b0d10ba6 1045You should not have used them.
9fcf3cbb 1046
5ebbe4ef
RB
1047** Many public #defines with generic names have been made private.
1048
1049#defines with generic names like HAVE_FOO or SIZEOF_FOO have been made
b0d10ba6 1050private or renamed with a more suitable public name.
f03314f9
DH
1051
1052** The macro SCM_TYP16S has been deprecated.
1053
b0d10ba6 1054This macro is not intended for public use.
f03314f9 1055
0d5e3480
DH
1056** The macro SCM_SLOPPY_INEXACTP has been deprecated.
1057
b0d10ba6 1058Use scm_is_true (scm_inexact_p (...)) instead.
0d5e3480
DH
1059
1060** The macro SCM_SLOPPY_REALP has been deprecated.
1061
b0d10ba6 1062Use scm_is_real instead.
0d5e3480
DH
1063
1064** The macro SCM_SLOPPY_COMPLEXP has been deprecated.
1065
b0d10ba6 1066Use scm_is_complex instead.
5ebbe4ef 1067
b0d10ba6 1068** Some preprocessor defines have been deprecated.
5ebbe4ef 1069
b0d10ba6
MV
1070These defines indicated whether a certain feature was present in Guile
1071or not. Going forward, assume that the features are always present.
5ebbe4ef 1072
b0d10ba6
MV
1073The macros are: USE_THREADS, GUILE_ISELECT, READER_EXTENSIONS,
1074DEBUG_EXTENSIONS, DYNAMIC_LINKING.
5ebbe4ef 1075
b0d10ba6
MV
1076The following macros have been removed completely: MEMOIZE_LOCALS,
1077SCM_RECKLESS, SCM_CAUTIOUS.
5ebbe4ef
RB
1078
1079** The preprocessor define STACK_DIRECTION has been deprecated.
1080
1081There should be no need to know about the stack direction for ordinary
b0d10ba6 1082programs.
5ebbe4ef 1083
b2cbe8d8
RB
1084** New function: scm_effective_version
1085
1086Returns the "effective" version number. This is just the normal full
1087version string without the final micro-version number. See "Changes
1088to the distribution" above.
1089
2902a459
MV
1090** The function scm_call_with_new_thread has a new prototype.
1091
1092Instead of taking a list with the thunk and handler, these two
1093arguments are now passed directly:
1094
1095 SCM scm_call_with_new_thread (SCM thunk, SCM handler);
1096
1097This is an incompatible change.
1098
ffd0ef3b
MV
1099** New snarfer macro SCM_DEFINE_PUBLIC.
1100
1101This is like SCM_DEFINE, but also calls scm_c_export for the defined
1102function in the init section.
1103
8734ce02
MV
1104** The snarfer macro SCM_SNARF_INIT is now officially supported.
1105
39e8f371
HWN
1106** Garbage collector rewrite.
1107
1108The garbage collector is cleaned up a lot, and now uses lazy
1109sweeping. This is reflected in the output of (gc-stats); since cells
1110are being freed when they are allocated, the cells-allocated field
1111stays roughly constant.
1112
1113For malloc related triggers, the behavior is changed. It uses the same
1114heuristic as the cell-triggered collections. It may be tuned with the
1115environment variables GUILE_MIN_YIELD_MALLOC. This is the percentage
1116for minimum yield of malloc related triggers. The default is 40.
1117GUILE_INIT_MALLOC_LIMIT sets the initial trigger for doing a GC. The
1118default is 200 kb.
1119
1120Debugging operations for the freelist have been deprecated, along with
1121the C variables that control garbage collection. The environment
1122variables GUILE_MAX_SEGMENT_SIZE, GUILE_INIT_SEGMENT_SIZE_2,
1123GUILE_INIT_SEGMENT_SIZE_1, and GUILE_MIN_YIELD_2 should be used.
1124
1367aa5e
HWN
1125For understanding the memory usage of a GUILE program, the routine
1126gc-live-object-stats returns an alist containing the number of live
1127objects for every type.
1128
1129
5ec1d2c8
DH
1130** The function scm_definedp has been renamed to scm_defined_p
1131
1132The name scm_definedp is deprecated.
1133
b0d10ba6 1134** The struct scm_cell type has been renamed to scm_t_cell
228a24ef
DH
1135
1136This is in accordance to Guile's naming scheme for types. Note that
1137the name scm_cell is now used for a function that allocates and
1138initializes a new cell (see below).
1139
0906625f
MV
1140** New functions for memory management
1141
1142A new set of functions for memory management has been added since the
1143old way (scm_must_malloc, scm_must_free, etc) was error prone and
1144indeed, Guile itself contained some long standing bugs that could
1145cause aborts in long running programs.
1146
1147The new functions are more symmetrical and do not need cooperation
1148from smob free routines, among other improvements.
1149
eab1b259
HWN
1150The new functions are scm_malloc, scm_realloc, scm_calloc, scm_strdup,
1151scm_strndup, scm_gc_malloc, scm_gc_calloc, scm_gc_realloc,
1152scm_gc_free, scm_gc_register_collectable_memory, and
0906625f
MV
1153scm_gc_unregister_collectable_memory. Refer to the manual for more
1154details and for upgrading instructions.
1155
1156The old functions for memory management have been deprecated. They
1157are: scm_must_malloc, scm_must_realloc, scm_must_free,
1158scm_must_strdup, scm_must_strndup, scm_done_malloc, scm_done_free.
1159
4aa104a4
MV
1160** Declarations of exported features are marked with SCM_API.
1161
1162Every declaration of a feature that belongs to the exported Guile API
1163has been marked by adding the macro "SCM_API" to the start of the
1164declaration. This macro can expand into different things, the most
1165common of which is just "extern" for Unix platforms. On Win32, it can
1166be used to control which symbols are exported from a DLL.
1167
8f99e3f3 1168If you `#define SCM_IMPORT' before including <libguile.h>, SCM_API
4aa104a4
MV
1169will expand into "__declspec (dllimport) extern", which is needed for
1170linking to the Guile DLL in Windows.
1171
b0d10ba6 1172There are also SCM_RL_IMPORT, SCM_SRFI1314_IMPORT, and
8f99e3f3 1173SCM_SRFI4_IMPORT, for the corresponding libraries.
4aa104a4 1174
a9930d22
MV
1175** SCM_NEWCELL and SCM_NEWCELL2 have been deprecated.
1176
b0d10ba6
MV
1177Use the new functions scm_cell and scm_double_cell instead. The old
1178macros had problems because with them allocation and initialization
1179was separated and the GC could sometimes observe half initialized
1180cells. Only careful coding by the user of SCM_NEWCELL and
1181SCM_NEWCELL2 could make this safe and efficient.
a9930d22 1182
5132eef0
DH
1183** CHECK_ENTRY, CHECK_APPLY and CHECK_EXIT have been deprecated.
1184
1185Use the variables scm_check_entry_p, scm_check_apply_p and scm_check_exit_p
1186instead.
1187
bc76d628
DH
1188** SRCBRKP has been deprecated.
1189
1190Use scm_c_source_property_breakpoint_p instead.
1191
3063e30a
DH
1192** Deprecated: scm_makmacro
1193
b0d10ba6
MV
1194Change your code to use either scm_makmmacro or to define macros in
1195Scheme, using 'define-macro'.
1e5f92ce 1196
1a61d41b
MV
1197** New function scm_c_port_for_each.
1198
1199This function is like scm_port_for_each but takes a pointer to a C
1200function as the callback instead of a SCM value.
1201
1f834c95
MV
1202** The names scm_internal_select, scm_thread_sleep, and
1203 scm_thread_usleep have been discouraged.
1204
1205Use scm_std_select, scm_std_sleep, scm_std_usleep instead.
1206
aa9200e5
MV
1207** The GC can no longer be blocked.
1208
1209The global flags scm_gc_heap_lock and scm_block_gc have been removed.
1210The GC can now run (partially) concurrently with other code and thus
1211blocking it is not well defined.
1212
b0d10ba6
MV
1213** Many definitions have been removed that were previously deprecated.
1214
1215scm_lisp_nil, scm_lisp_t, s_nil_ify, scm_m_nil_ify, s_t_ify,
1216scm_m_t_ify, s_0_cond, scm_m_0_cond, s_0_ify, scm_m_0_ify, s_1_ify,
1217scm_m_1_ify, scm_debug_newcell, scm_debug_newcell2,
1218scm_tc16_allocated, SCM_SET_SYMBOL_HASH, SCM_IM_NIL_IFY, SCM_IM_T_IFY,
1219SCM_IM_0_COND, SCM_IM_0_IFY, SCM_IM_1_IFY, SCM_GC_SET_ALLOCATED,
1220scm_debug_newcell, scm_debug_newcell2, SCM_HUP_SIGNAL, SCM_INT_SIGNAL,
1221SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL, SCM_ALRM_SIGNAL,
1222SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD, SCM_ORD_SIG,
1223SCM_NUM_SIGS, scm_top_level_lookup_closure_var,
1224*top-level-lookup-closure*, scm_system_transformer, scm_eval_3,
1225scm_eval2, root_module_lookup_closure, SCM_SLOPPY_STRINGP,
1226SCM_RWSTRINGP, scm_read_only_string_p, scm_make_shared_substring,
1227scm_tc7_substring, sym_huh, SCM_VARVCELL, SCM_UDVARIABLEP,
1228SCM_DEFVARIABLEP, scm_mkbig, scm_big2inum, scm_adjbig, scm_normbig,
1229scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl, SCM_FIXNUM_BIT,
1230SCM_SETCHARS, SCM_SLOPPY_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET,
1231SCM_LENGTH_MAX, SCM_SETLENGTH, SCM_ROSTRINGP, SCM_ROLENGTH,
1232SCM_ROCHARS, SCM_ROUCHARS, SCM_SUBSTRP, SCM_COERCE_SUBSTR,
1233scm_sym2vcell, scm_intern, scm_intern0, scm_sysintern, scm_sysintern0,
66c8ded2 1234scm_sysintern0_no_module_lookup, scm_init_symbols_deprecated,
2109da78 1235scm_vector_set_length_x, scm_contregs, scm_debug_info,
983e697d
MV
1236scm_debug_frame, SCM_DSIDEVAL, SCM_CONST_LONG, SCM_VCELL,
1237SCM_GLOBAL_VCELL, SCM_VCELL_INIT, SCM_GLOBAL_VCELL_INIT,
1238SCM_HUGE_LENGTH, SCM_VALIDATE_STRINGORSUBSTR, SCM_VALIDATE_ROSTRING,
1239SCM_VALIDATE_ROSTRING_COPY, SCM_VALIDATE_NULLORROSTRING_COPY,
1240SCM_VALIDATE_RWSTRING, DIGITS, scm_small_istr2int, scm_istr2int,
2109da78
MV
1241scm_istr2flo, scm_istring2number, scm_istr2int, scm_istr2flo,
1242scm_istring2number, scm_vtable_index_vcell, scm_si_vcell, SCM_ECONSP,
1243SCM_NECONSP, SCM_GLOC_VAR, SCM_GLOC_VAL, SCM_GLOC_SET_VAL,
c41acab3
MV
1244SCM_GLOC_VAL_LOC, scm_make_gloc, scm_gloc_p, scm_tc16_variable,
1245SCM_CHARS, SCM_LENGTH, SCM_SET_STRING_CHARS, SCM_SET_STRING_LENGTH.
b51bad08 1246
328dc9a3 1247\f
c299f186
MD
1248Changes since Guile 1.4:
1249
1250* Changes to the distribution
1251
32d6f999
TTN
1252** A top-level TODO file is included.
1253
311b6a3c 1254** Guile now uses a versioning scheme similar to that of the Linux kernel.
c81ea65d
RB
1255
1256Guile now always uses three numbers to represent the version,
1257i.e. "1.6.5". The first number, 1, is the major version number, the
1258second number, 6, is the minor version number, and the third number,
12595, is the micro version number. Changes in major version number
1260indicate major changes in Guile.
1261
1262Minor version numbers that are even denote stable releases, and odd
1263minor version numbers denote development versions (which may be
1264unstable). The micro version number indicates a minor sub-revision of
1265a given MAJOR.MINOR release.
1266
1267In keeping with the new scheme, (minor-version) and scm_minor_version
1268no longer return everything but the major version number. They now
1269just return the minor version number. Two new functions
1270(micro-version) and scm_micro_version have been added to report the
1271micro version number.
1272
1273In addition, ./GUILE-VERSION now defines GUILE_MICRO_VERSION.
1274
5c790b44
RB
1275** New preprocessor definitions are available for checking versions.
1276
1277version.h now #defines SCM_MAJOR_VERSION, SCM_MINOR_VERSION, and
1278SCM_MICRO_VERSION to the appropriate integer values.
1279
311b6a3c
MV
1280** Guile now actively warns about deprecated features.
1281
1282The new configure option `--enable-deprecated=LEVEL' and the
1283environment variable GUILE_WARN_DEPRECATED control this mechanism.
1284See INSTALL and README for more information.
1285
0b073f0f
RB
1286** Guile is much more likely to work on 64-bit architectures.
1287
1288Guile now compiles and passes "make check" with only two UNRESOLVED GC
5e137c65
RB
1289cases on Alpha and ia64 based machines now. Thanks to John Goerzen
1290for the use of a test machine, and thanks to Stefan Jahn for ia64
1291patches.
0b073f0f 1292
e658215a
RB
1293** New functions: setitimer and getitimer.
1294
1295These implement a fairly direct interface to the libc functions of the
1296same name.
1297
8630fdfc
RB
1298** The #. reader extension is now disabled by default.
1299
1300For safety reasons, #. evaluation is disabled by default. To
1301re-enable it, set the fluid read-eval? to #t. For example:
1302
67b7dd9e 1303 (fluid-set! read-eval? #t)
8630fdfc
RB
1304
1305but make sure you realize the potential security risks involved. With
1306read-eval? enabled, reading a data file from an untrusted source can
1307be dangerous.
1308
f2a75d81 1309** New SRFI modules have been added:
4df36934 1310
dfdf5826
MG
1311SRFI-0 `cond-expand' is now supported in Guile, without requiring
1312using a module.
1313
e8bb0476
MG
1314(srfi srfi-1) is a library containing many useful pair- and list-processing
1315 procedures.
1316
7adc2c58 1317(srfi srfi-2) exports and-let*.
4df36934 1318
b74a7ec8
MG
1319(srfi srfi-4) implements homogeneous numeric vector datatypes.
1320
7adc2c58
RB
1321(srfi srfi-6) is a dummy module for now, since guile already provides
1322 all of the srfi-6 procedures by default: open-input-string,
1323 open-output-string, get-output-string.
4df36934 1324
7adc2c58 1325(srfi srfi-8) exports receive.
4df36934 1326
7adc2c58 1327(srfi srfi-9) exports define-record-type.
4df36934 1328
dfdf5826
MG
1329(srfi srfi-10) exports define-reader-ctor and implements the reader
1330 extension #,().
1331
7adc2c58 1332(srfi srfi-11) exports let-values and let*-values.
4df36934 1333
7adc2c58 1334(srfi srfi-13) implements the SRFI String Library.
53e29a1e 1335
7adc2c58 1336(srfi srfi-14) implements the SRFI Character-Set Library.
53e29a1e 1337
dfdf5826
MG
1338(srfi srfi-17) implements setter and getter-with-setter and redefines
1339 some accessor procedures as procedures with getters. (such as car,
1340 cdr, vector-ref etc.)
1341
1342(srfi srfi-19) implements the SRFI Time/Date Library.
2b60bc95 1343
466bb4b3
TTN
1344** New scripts / "executable modules"
1345
1346Subdirectory "scripts" contains Scheme modules that are packaged to
1347also be executable as scripts. At this time, these scripts are available:
1348
1349 display-commentary
1350 doc-snarf
1351 generate-autoload
1352 punify
58e5b910 1353 read-scheme-source
466bb4b3
TTN
1354 use2dot
1355
1356See README there for more info.
1357
54c17ccb
TTN
1358These scripts can be invoked from the shell with the new program
1359"guile-tools", which keeps track of installation directory for you.
1360For example:
1361
1362 $ guile-tools display-commentary srfi/*.scm
1363
1364guile-tools is copied to the standard $bindir on "make install".
1365
0109c4bf
MD
1366** New module (ice-9 stack-catch):
1367
1368stack-catch is like catch, but saves the current state of the stack in
3c1d1301
RB
1369the fluid the-last-stack. This fluid can be useful when using the
1370debugger and when re-throwing an error.
0109c4bf 1371
fbf0c8c7
MV
1372** The module (ice-9 and-let*) has been renamed to (ice-9 and-let-star)
1373
1374This has been done to prevent problems on lesser operating systems
1375that can't tolerate `*'s in file names. The exported macro continues
1376to be named `and-let*', of course.
1377
4f60cc33 1378On systems that support it, there is also a compatibility module named
fbf0c8c7 1379(ice-9 and-let*). It will go away in the next release.
6c0201ad 1380
9d774814 1381** New modules (oop goops) etc.:
14f1d9fe
MD
1382
1383 (oop goops)
1384 (oop goops describe)
1385 (oop goops save)
1386 (oop goops active-slot)
1387 (oop goops composite-slot)
1388
9d774814 1389The Guile Object Oriented Programming System (GOOPS) has been
311b6a3c
MV
1390integrated into Guile. For further information, consult the GOOPS
1391manual and tutorial in the `doc' directory.
14f1d9fe 1392
9d774814
GH
1393** New module (ice-9 rdelim).
1394
1395This exports the following procedures which were previously defined
1c8cbd62 1396in the default environment:
9d774814 1397
1c8cbd62
GH
1398read-line read-line! read-delimited read-delimited! %read-delimited!
1399%read-line write-line
9d774814 1400
1c8cbd62
GH
1401For backwards compatibility the definitions are still imported into the
1402default environment in this version of Guile. However you should add:
9d774814
GH
1403
1404(use-modules (ice-9 rdelim))
1405
1c8cbd62
GH
1406to any program which uses the definitions, since this may change in
1407future.
9d774814
GH
1408
1409Alternatively, if guile-scsh is installed, the (scsh rdelim) module
1410can be used for similar functionality.
1411
7e267da1
GH
1412** New module (ice-9 rw)
1413
1414This is a subset of the (scsh rw) module from guile-scsh. Currently
373f4948 1415it defines two procedures:
7e267da1 1416
311b6a3c 1417*** New function: read-string!/partial str [port_or_fdes [start [end]]]
7e267da1 1418
4bcdfe46
GH
1419 Read characters from a port or file descriptor into a string STR.
1420 A port must have an underlying file descriptor -- a so-called
1421 fport. This procedure is scsh-compatible and can efficiently read
311b6a3c 1422 large strings.
7e267da1 1423
4bcdfe46
GH
1424*** New function: write-string/partial str [port_or_fdes [start [end]]]
1425
1426 Write characters from a string STR to a port or file descriptor.
1427 A port must have an underlying file descriptor -- a so-called
1428 fport. This procedure is mostly compatible and can efficiently
1429 write large strings.
1430
e5005373
KN
1431** New module (ice-9 match)
1432
311b6a3c
MV
1433This module includes Andrew K. Wright's pattern matcher. See
1434ice-9/match.scm for brief description or
e5005373 1435
311b6a3c 1436 http://www.star-lab.com/wright/code.html
e5005373 1437
311b6a3c 1438for complete documentation.
e5005373 1439
4f60cc33
NJ
1440** New module (ice-9 buffered-input)
1441
1442This module provides procedures to construct an input port from an
1443underlying source of input that reads and returns its input in chunks.
1444The underlying input source is a Scheme procedure, specified by the
1445caller, which the port invokes whenever it needs more input.
1446
1447This is useful when building an input port whose back end is Readline
1448or a UI element such as the GtkEntry widget.
1449
1450** Documentation
1451
1452The reference and tutorial documentation that was previously
1453distributed separately, as `guile-doc', is now included in the core
1454Guile distribution. The documentation consists of the following
1455manuals.
1456
1457- The Guile Tutorial (guile-tut.texi) contains a tutorial introduction
1458 to using Guile.
1459
1460- The Guile Reference Manual (guile.texi) contains (or is intended to
1461 contain) reference documentation on all aspects of Guile.
1462
1463- The GOOPS Manual (goops.texi) contains both tutorial-style and
1464 reference documentation for using GOOPS, Guile's Object Oriented
1465 Programming System.
1466
c3e62877
NJ
1467- The Revised^5 Report on the Algorithmic Language Scheme
1468 (r5rs.texi).
4f60cc33
NJ
1469
1470See the README file in the `doc' directory for more details.
1471
094a67bb
MV
1472** There are a couple of examples in the examples/ directory now.
1473
9d774814
GH
1474* Changes to the stand-alone interpreter
1475
e7e58018
MG
1476** New command line option `--use-srfi'
1477
1478Using this option, SRFI modules can be loaded on startup and be
1479available right from the beginning. This makes programming portable
1480Scheme programs easier.
1481
1482The option `--use-srfi' expects a comma-separated list of numbers,
1483each representing a SRFI number to be loaded into the interpreter
1484before starting evaluating a script file or the REPL. Additionally,
1485the feature identifier for the loaded SRFIs is recognized by
1486`cond-expand' when using this option.
1487
1488Example:
1489$ guile --use-srfi=8,13
1490guile> (receive (x z) (values 1 2) (+ 1 2))
14913
58e5b910 1492guile> (string-pad "bla" 20)
e7e58018
MG
1493" bla"
1494
094a67bb
MV
1495** Guile now always starts up in the `(guile-user)' module.
1496
6e9382f1 1497Previously, scripts executed via the `-s' option would run in the
094a67bb
MV
1498`(guile)' module and the repl would run in the `(guile-user)' module.
1499Now every user action takes place in the `(guile-user)' module by
1500default.
e7e58018 1501
c299f186
MD
1502* Changes to Scheme functions and syntax
1503
720e1c30
MV
1504** Character classifiers work for non-ASCII characters.
1505
1506The predicates `char-alphabetic?', `char-numeric?',
1507`char-whitespace?', `char-lower?', `char-upper?' and `char-is-both?'
1508no longer check whether their arguments are ASCII characters.
1509Previously, a character would only be considered alphabetic when it
1510was also ASCII, for example.
1511
311b6a3c
MV
1512** Previously deprecated Scheme functions have been removed:
1513
1514 tag - no replacement.
1515 fseek - replaced by seek.
1516 list* - replaced by cons*.
1517
1518** It's now possible to create modules with controlled environments
1519
1520Example:
1521
1522(use-modules (ice-9 safe))
1523(define m (make-safe-module))
1524;;; m will now be a module containing only a safe subset of R5RS
1525(eval '(+ 1 2) m) --> 3
1526(eval 'load m) --> ERROR: Unbound variable: load
1527
1528** Evaluation of "()", the empty list, is now an error.
8c2c9967
MV
1529
1530Previously, the expression "()" evaluated to the empty list. This has
1531been changed to signal a "missing expression" error. The correct way
1532to write the empty list as a literal constant is to use quote: "'()".
1533
311b6a3c
MV
1534** New concept of `Guile Extensions'.
1535
1536A Guile Extension is just a ordinary shared library that can be linked
1537at run-time. We found it advantageous to give this simple concept a
1538dedicated name to distinguish the issues related to shared libraries
1539from the issues related to the module system.
1540
1541*** New function: load-extension
1542
1543Executing (load-extension lib init) is mostly equivalent to
1544
1545 (dynamic-call init (dynamic-link lib))
1546
1547except when scm_register_extension has been called previously.
1548Whenever appropriate, you should use `load-extension' instead of
1549dynamic-link and dynamic-call.
1550
1551*** New C function: scm_c_register_extension
1552
1553This function registers a initialization function for use by
1554`load-extension'. Use it when you don't want specific extensions to
1555be loaded as shared libraries (for example on platforms that don't
1556support dynamic linking).
1557
8c2c9967
MV
1558** Auto-loading of compiled-code modules is deprecated.
1559
1560Guile used to be able to automatically find and link a shared
c10ecc4c 1561library to satisfy requests for a module. For example, the module
8c2c9967
MV
1562`(foo bar)' could be implemented by placing a shared library named
1563"foo/libbar.so" (or with a different extension) in a directory on the
1564load path of Guile.
1565
311b6a3c
MV
1566This has been found to be too tricky, and is no longer supported. The
1567shared libraries are now called "extensions". You should now write a
1568small Scheme file that calls `load-extension' to load the shared
1569library and initialize it explicitely.
8c2c9967
MV
1570
1571The shared libraries themselves should be installed in the usual
1572places for shared libraries, with names like "libguile-foo-bar".
1573
1574For example, place this into a file "foo/bar.scm"
1575
1576 (define-module (foo bar))
1577
311b6a3c
MV
1578 (load-extension "libguile-foo-bar" "foobar_init")
1579
1580** Backward incompatible change: eval EXP ENVIRONMENT-SPECIFIER
1581
1582`eval' is now R5RS, that is it takes two arguments.
1583The second argument is an environment specifier, i.e. either
1584
1585 (scheme-report-environment 5)
1586 (null-environment 5)
1587 (interaction-environment)
1588
1589or
8c2c9967 1590
311b6a3c 1591 any module.
8c2c9967 1592
6f76852b
MV
1593** The module system has been made more disciplined.
1594
311b6a3c
MV
1595The function `eval' will save and restore the current module around
1596the evaluation of the specified expression. While this expression is
1597evaluated, `(current-module)' will now return the right module, which
1598is the module specified as the second argument to `eval'.
6f76852b 1599
311b6a3c 1600A consequence of this change is that `eval' is not particularly
6f76852b
MV
1601useful when you want allow the evaluated code to change what module is
1602designated as the current module and have this change persist from one
1603call to `eval' to the next. The read-eval-print-loop is an example
1604where `eval' is now inadequate. To compensate, there is a new
1605function `primitive-eval' that does not take a module specifier and
1606that does not save/restore the current module. You should use this
1607function together with `set-current-module', `current-module', etc
1608when you want to have more control over the state that is carried from
1609one eval to the next.
1610
1611Additionally, it has been made sure that forms that are evaluated at
1612the top level are always evaluated with respect to the current module.
1613Previously, subforms of top-level forms such as `begin', `case',
1614etc. did not respect changes to the current module although these
1615subforms are at the top-level as well.
1616
311b6a3c 1617To prevent strange behavior, the forms `define-module',
6f76852b
MV
1618`use-modules', `use-syntax', and `export' have been restricted to only
1619work on the top level. The forms `define-public' and
1620`defmacro-public' only export the new binding on the top level. They
1621behave just like `define' and `defmacro', respectively, when they are
1622used in a lexical environment.
1623
0a892a2c
MV
1624Also, `export' will no longer silently re-export bindings imported
1625from a used module. It will emit a `deprecation' warning and will
1626cease to perform any re-export in the next version. If you actually
1627want to re-export bindings, use the new `re-export' in place of
1628`export'. The new `re-export' will not make copies of variables when
1629rexporting them, as `export' did wrongly.
1630
047dc3ae
TTN
1631** Module system now allows selection and renaming of imported bindings
1632
1633Previously, when using `use-modules' or the `#:use-module' clause in
1634the `define-module' form, all the bindings (association of symbols to
1635values) for imported modules were added to the "current module" on an
1636as-is basis. This has been changed to allow finer control through two
1637new facilities: selection and renaming.
1638
1639You can now select which of the imported module's bindings are to be
1640visible in the current module by using the `:select' clause. This
1641clause also can be used to rename individual bindings. For example:
1642
1643 ;; import all bindings no questions asked
1644 (use-modules (ice-9 common-list))
1645
1646 ;; import four bindings, renaming two of them;
1647 ;; the current module sees: every some zonk-y zonk-n
1648 (use-modules ((ice-9 common-list)
1649 :select (every some
1650 (remove-if . zonk-y)
1651 (remove-if-not . zonk-n))))
1652
1653You can also programmatically rename all selected bindings using the
1654`:renamer' clause, which specifies a proc that takes a symbol and
1655returns another symbol. Because it is common practice to use a prefix,
1656we now provide the convenience procedure `symbol-prefix-proc'. For
1657example:
1658
1659 ;; import four bindings, renaming two of them specifically,
1660 ;; and all four w/ prefix "CL:";
1661 ;; the current module sees: CL:every CL:some CL:zonk-y CL:zonk-n
1662 (use-modules ((ice-9 common-list)
1663 :select (every some
1664 (remove-if . zonk-y)
1665 (remove-if-not . zonk-n))
1666 :renamer (symbol-prefix-proc 'CL:)))
1667
1668 ;; import four bindings, renaming two of them specifically,
1669 ;; and all four by upcasing.
1670 ;; the current module sees: EVERY SOME ZONK-Y ZONK-N
1671 (define (upcase-symbol sym)
1672 (string->symbol (string-upcase (symbol->string sym))))
1673
1674 (use-modules ((ice-9 common-list)
1675 :select (every some
1676 (remove-if . zonk-y)
1677 (remove-if-not . zonk-n))
1678 :renamer upcase-symbol))
1679
1680Note that programmatic renaming is done *after* individual renaming.
1681Also, the above examples show `use-modules', but the same facilities are
1682available for the `#:use-module' clause of `define-module'.
1683
1684See manual for more info.
1685
b7d69200 1686** The semantics of guardians have changed.
56495472 1687
b7d69200 1688The changes are for the most part compatible. An important criterion
6c0201ad 1689was to keep the typical usage of guardians as simple as before, but to
c0a5d888 1690make the semantics safer and (as a result) more useful.
56495472 1691
c0a5d888 1692*** All objects returned from guardians are now properly alive.
56495472 1693
c0a5d888
ML
1694It is now guaranteed that any object referenced by an object returned
1695from a guardian is alive. It's now impossible for a guardian to
1696return a "contained" object before its "containing" object.
56495472
ML
1697
1698One incompatible (but probably not very important) change resulting
1699from this is that it is no longer possible to guard objects that
1700indirectly reference themselves (i.e. are parts of cycles). If you do
1701so accidentally, you'll get a warning.
1702
c0a5d888
ML
1703*** There are now two types of guardians: greedy and sharing.
1704
1705If you call (make-guardian #t) or just (make-guardian), you'll get a
1706greedy guardian, and for (make-guardian #f) a sharing guardian.
1707
1708Greedy guardians are the default because they are more "defensive".
1709You can only greedily guard an object once. If you guard an object
1710more than once, once in a greedy guardian and the rest of times in
1711sharing guardians, then it is guaranteed that the object won't be
1712returned from sharing guardians as long as it is greedily guarded
1713and/or alive.
1714
1715Guardians returned by calls to `make-guardian' can now take one more
1716optional parameter, which says whether to throw an error in case an
1717attempt is made to greedily guard an object that is already greedily
1718guarded. The default is true, i.e. throw an error. If the parameter
1719is false, the guardian invocation returns #t if guarding was
1720successful and #f if it wasn't.
1721
1722Also, since greedy guarding is, in effect, a side-effecting operation
1723on objects, a new function is introduced: `destroy-guardian!'.
1724Invoking this function on a guardian renders it unoperative and, if
1725the guardian is greedy, clears the "greedily guarded" property of the
1726objects that were guarded by it, thus undoing the side effect.
1727
1728Note that all this hair is hardly very important, since guardian
1729objects are usually permanent.
1730
311b6a3c
MV
1731** Continuations created by call-with-current-continuation now accept
1732any number of arguments, as required by R5RS.
818febc0 1733
c10ecc4c 1734** New function `issue-deprecation-warning'
56426fdb 1735
311b6a3c 1736This function is used to display the deprecation messages that are
c10ecc4c 1737controlled by GUILE_WARN_DEPRECATION as explained in the README.
56426fdb
KN
1738
1739 (define (id x)
c10ecc4c
MV
1740 (issue-deprecation-warning "`id' is deprecated. Use `identity' instead.")
1741 (identity x))
56426fdb
KN
1742
1743 guile> (id 1)
1744 ;; `id' is deprecated. Use `identity' instead.
1745 1
1746 guile> (id 1)
1747 1
1748
c10ecc4c
MV
1749** New syntax `begin-deprecated'
1750
1751When deprecated features are included (as determined by the configure
1752option --enable-deprecated), `begin-deprecated' is identical to
1753`begin'. When deprecated features are excluded, it always evaluates
1754to `#f', ignoring the body forms.
1755
17f367e0
MV
1756** New function `make-object-property'
1757
1758This function returns a new `procedure with setter' P that can be used
1759to attach a property to objects. When calling P as
1760
1761 (set! (P obj) val)
1762
1763where `obj' is any kind of object, it attaches `val' to `obj' in such
1764a way that it can be retrieved by calling P as
1765
1766 (P obj)
1767
1768This function will replace procedure properties, symbol properties and
1769source properties eventually.
1770
76ef92f3
MV
1771** Module (ice-9 optargs) now uses keywords instead of `#&'.
1772
1773Instead of #&optional, #&key, etc you should now use #:optional,
1774#:key, etc. Since #:optional is a keyword, you can write it as just
1775:optional when (read-set! keywords 'prefix) is active.
1776
1777The old reader syntax `#&' is still supported, but deprecated. It
1778will be removed in the next release.
1779
c0997079
MD
1780** New define-module option: pure
1781
1782Tells the module system not to include any bindings from the root
1783module.
1784
1785Example:
1786
1787(define-module (totally-empty-module)
1788 :pure)
1789
1790** New define-module option: export NAME1 ...
1791
1792Export names NAME1 ...
1793
1794This option is required if you want to be able to export bindings from
1795a module which doesn't import one of `define-public' or `export'.
1796
1797Example:
1798
311b6a3c
MV
1799 (define-module (foo)
1800 :pure
1801 :use-module (ice-9 r5rs)
1802 :export (bar))
69b5f65a 1803
311b6a3c 1804 ;;; Note that we're pure R5RS below this point!
69b5f65a 1805
311b6a3c
MV
1806 (define (bar)
1807 ...)
daa6ba18 1808
1f3908c4
KN
1809** New function: object->string OBJ
1810
1811Return a Scheme string obtained by printing a given object.
1812
eb5c0a2a
GH
1813** New function: port? X
1814
1815Returns a boolean indicating whether X is a port. Equivalent to
1816`(or (input-port? X) (output-port? X))'.
1817
efa40607
DH
1818** New function: file-port?
1819
1820Determines whether a given object is a port that is related to a file.
1821
34b56ec4
GH
1822** New function: port-for-each proc
1823
311b6a3c
MV
1824Apply PROC to each port in the Guile port table in turn. The return
1825value is unspecified. More specifically, PROC is applied exactly once
1826to every port that exists in the system at the time PORT-FOR-EACH is
1827invoked. Changes to the port table while PORT-FOR-EACH is running
1828have no effect as far as PORT-FOR-EACH is concerned.
34b56ec4
GH
1829
1830** New function: dup2 oldfd newfd
1831
1832A simple wrapper for the `dup2' system call. Copies the file
1833descriptor OLDFD to descriptor number NEWFD, replacing the
1834previous meaning of NEWFD. Both OLDFD and NEWFD must be integers.
1835Unlike for dup->fdes or primitive-move->fdes, no attempt is made
264e9cbc 1836to move away ports which are using NEWFD. The return value is
34b56ec4
GH
1837unspecified.
1838
1839** New function: close-fdes fd
1840
1841A simple wrapper for the `close' system call. Close file
1842descriptor FD, which must be an integer. Unlike close (*note
1843close: Ports and File Descriptors.), the file descriptor will be
1844closed even if a port is using it. The return value is
1845unspecified.
1846
94e6d793
MG
1847** New function: crypt password salt
1848
1849Encrypts `password' using the standard unix password encryption
1850algorithm.
1851
1852** New function: chroot path
1853
1854Change the root directory of the running process to `path'.
1855
1856** New functions: getlogin, cuserid
1857
1858Return the login name or the user name of the current effective user
1859id, respectively.
1860
1861** New functions: getpriority which who, setpriority which who prio
1862
1863Get or set the priority of the running process.
1864
1865** New function: getpass prompt
1866
1867Read a password from the terminal, first displaying `prompt' and
1868disabling echoing.
1869
1870** New function: flock file operation
1871
1872Set/remove an advisory shared or exclusive lock on `file'.
1873
1874** New functions: sethostname name, gethostname
1875
1876Set or get the hostname of the machine the current process is running
1877on.
1878
6d163216 1879** New function: mkstemp! tmpl
4f60cc33 1880
6d163216
GH
1881mkstemp creates a new unique file in the file system and returns a
1882new buffered port open for reading and writing to the file. TMPL
1883is a string specifying where the file should be created: it must
1884end with `XXXXXX' and will be changed in place to return the name
1885of the temporary file.
1886
62e63ba9
MG
1887** New function: open-input-string string
1888
1889Return an input string port which delivers the characters from
4f60cc33 1890`string'. This procedure, together with `open-output-string' and
62e63ba9
MG
1891`get-output-string' implements SRFI-6.
1892
1893** New function: open-output-string
1894
1895Return an output string port which collects all data written to it.
1896The data can then be retrieved by `get-output-string'.
1897
1898** New function: get-output-string
1899
1900Return the contents of an output string port.
1901
56426fdb
KN
1902** New function: identity
1903
1904Return the argument.
1905
5bef627d
GH
1906** socket, connect, accept etc., now have support for IPv6. IPv6 addresses
1907 are represented in Scheme as integers with normal host byte ordering.
1908
1909** New function: inet-pton family address
1910
311b6a3c
MV
1911Convert a printable string network address into an integer. Note that
1912unlike the C version of this function, the result is an integer with
1913normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
1914e.g.,
1915
1916 (inet-pton AF_INET "127.0.0.1") => 2130706433
1917 (inet-pton AF_INET6 "::1") => 1
5bef627d
GH
1918
1919** New function: inet-ntop family address
1920
311b6a3c
MV
1921Convert an integer network address into a printable string. Note that
1922unlike the C version of this function, the input is an integer with
1923normal host byte ordering. FAMILY can be `AF_INET' or `AF_INET6'.
1924e.g.,
1925
1926 (inet-ntop AF_INET 2130706433) => "127.0.0.1"
1927 (inet-ntop AF_INET6 (- (expt 2 128) 1)) =>
5bef627d
GH
1928 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
1929
56426fdb
KN
1930** Deprecated: id
1931
1932Use `identity' instead.
1933
5cd06d5e
DH
1934** Deprecated: -1+
1935
1936Use `1-' instead.
1937
1938** Deprecated: return-it
1939
311b6a3c 1940Do without it.
5cd06d5e
DH
1941
1942** Deprecated: string-character-length
1943
1944Use `string-length' instead.
1945
1946** Deprecated: flags
1947
1948Use `logior' instead.
1949
4f60cc33
NJ
1950** Deprecated: close-all-ports-except.
1951
1952This was intended for closing ports in a child process after a fork,
1953but it has the undesirable side effect of flushing buffers.
1954port-for-each is more flexible.
34b56ec4
GH
1955
1956** The (ice-9 popen) module now attempts to set up file descriptors in
1957the child process from the current Scheme ports, instead of using the
1958current values of file descriptors 0, 1, and 2 in the parent process.
1959
b52e071b
DH
1960** Removed function: builtin-weak-bindings
1961
1962There is no such concept as a weak binding any more.
1963
9d774814 1964** Removed constants: bignum-radix, scm-line-incrementors
0f979f3f 1965
7d435120
MD
1966** define-method: New syntax mandatory.
1967
1968The new method syntax is now mandatory:
1969
1970(define-method (NAME ARG-SPEC ...) BODY ...)
1971(define-method (NAME ARG-SPEC ... . REST-ARG) BODY ...)
1972
1973 ARG-SPEC ::= ARG-NAME | (ARG-NAME TYPE)
1974 REST-ARG ::= ARG-NAME
1975
1976If you have old code using the old syntax, import
1977(oop goops old-define-method) before (oop goops) as in:
1978
1979 (use-modules (oop goops old-define-method) (oop goops))
1980
f3f9dcbc
MV
1981** Deprecated function: builtin-variable
1982 Removed function: builtin-bindings
1983
1984There is no longer a distinction between builtin or other variables.
1985Use module system operations for all variables.
1986
311b6a3c
MV
1987** Lazy-catch handlers are no longer allowed to return.
1988
1989That is, a call to `throw', `error', etc is now guaranteed to not
1990return.
1991
a583bf1e 1992** Bugfixes for (ice-9 getopt-long)
8c84b81e 1993
a583bf1e
TTN
1994This module is now tested using test-suite/tests/getopt-long.test.
1995The following bugs have been fixed:
1996
1997*** Parsing for options that are specified to have `optional' args now checks
1998if the next element is an option instead of unconditionally taking it as the
8c84b81e
TTN
1999option arg.
2000
a583bf1e
TTN
2001*** An error is now thrown for `--opt=val' when the option description
2002does not specify `(value #t)' or `(value optional)'. This condition used to
2003be accepted w/o error, contrary to the documentation.
2004
2005*** The error message for unrecognized options is now more informative.
2006It used to be "not a record", an artifact of the implementation.
2007
2008*** The error message for `--opt' terminating the arg list (no value), when
2009`(value #t)' is specified, is now more informative. It used to be "not enough
2010args".
2011
2012*** "Clumped" single-char args now preserve trailing string, use it as arg.
2013The expansion used to be like so:
2014
2015 ("-abc5d" "--xyz") => ("-a" "-b" "-c" "--xyz")
2016
2017Note that the "5d" is dropped. Now it is like so:
2018
2019 ("-abc5d" "--xyz") => ("-a" "-b" "-c" "5d" "--xyz")
2020
2021This enables single-char options to have adjoining arguments as long as their
2022constituent characters are not potential single-char options.
8c84b81e 2023
998bfc70
TTN
2024** (ice-9 session) procedure `arity' now works with (ice-9 optargs) `lambda*'
2025
2026The `lambda*' and derivative forms in (ice-9 optargs) now set a procedure
2027property `arglist', which can be retrieved by `arity'. The result is that
2028`arity' can give more detailed information than before:
2029
2030Before:
2031
2032 guile> (use-modules (ice-9 optargs))
2033 guile> (define* (foo #:optional a b c) a)
2034 guile> (arity foo)
2035 0 or more arguments in `lambda*:G0'.
2036
2037After:
2038
2039 guile> (arity foo)
2040 3 optional arguments: `a', `b' and `c'.
2041 guile> (define* (bar a b #:key c d #:allow-other-keys) a)
2042 guile> (arity bar)
2043 2 required arguments: `a' and `b', 2 keyword arguments: `c'
2044 and `d', other keywords allowed.
2045 guile> (define* (baz a b #:optional c #:rest r) a)
2046 guile> (arity baz)
2047 2 required arguments: `a' and `b', 1 optional argument: `c',
2048 the rest in `r'.
2049
311b6a3c
MV
2050* Changes to the C interface
2051
c81c130e
MV
2052** Types have been renamed from scm_*_t to scm_t_*.
2053
2054This has been done for POSIX sake. It reserves identifiers ending
2055with "_t". What a concept.
2056
2057The old names are still available with status `deprecated'.
2058
2059** scm_t_bits (former scm_bits_t) is now a unsigned type.
2060
6e9382f1 2061** Deprecated features have been removed.
e6c9e497
MV
2062
2063*** Macros removed
2064
2065 SCM_INPORTP, SCM_OUTPORTP SCM_ICHRP, SCM_ICHR, SCM_MAKICHR
2066 SCM_SETJMPBUF SCM_NSTRINGP SCM_NRWSTRINGP SCM_NVECTORP SCM_DOUBLE_CELLP
2067
2068*** C Functions removed
2069
2070 scm_sysmissing scm_tag scm_tc16_flo scm_tc_flo
2071 scm_fseek - replaced by scm_seek.
2072 gc-thunk - replaced by after-gc-hook.
2073 gh_int2scmb - replaced by gh_bool2scm.
2074 scm_tc_dblr - replaced by scm_tc16_real.
2075 scm_tc_dblc - replaced by scm_tc16_complex.
2076 scm_list_star - replaced by scm_cons_star.
2077
36284627
DH
2078** Deprecated: scm_makfromstr
2079
2080Use scm_mem2string instead.
2081
311b6a3c
MV
2082** Deprecated: scm_make_shared_substring
2083
2084Explicit shared substrings will disappear from Guile.
2085
2086Instead, "normal" strings will be implemented using sharing
2087internally, combined with a copy-on-write strategy.
2088
2089** Deprecated: scm_read_only_string_p
2090
2091The concept of read-only strings will disappear in next release of
2092Guile.
2093
2094** Deprecated: scm_sloppy_memq, scm_sloppy_memv, scm_sloppy_member
c299f186 2095
311b6a3c 2096Instead, use scm_c_memq or scm_memq, scm_memv, scm_member.
c299f186 2097
dd0e04ed
KN
2098** New functions: scm_call_0, scm_call_1, scm_call_2, scm_call_3
2099
83dbedcc
KR
2100Call a procedure with the indicated number of arguments. See "Fly
2101Evaluation" in the manual.
dd0e04ed
KN
2102
2103** New functions: scm_apply_0, scm_apply_1, scm_apply_2, scm_apply_3
2104
83dbedcc
KR
2105Call a procedure with the indicated number of arguments and a list of
2106further arguments. See "Fly Evaluation" in the manual.
dd0e04ed 2107
e235f2a6
KN
2108** New functions: scm_list_1, scm_list_2, scm_list_3, scm_list_4, scm_list_5
2109
83dbedcc
KR
2110Create a list of the given number of elements. See "List
2111Constructors" in the manual.
e235f2a6
KN
2112
2113** Renamed function: scm_listify has been replaced by scm_list_n.
2114
2115** Deprecated macros: SCM_LIST0, SCM_LIST1, SCM_LIST2, SCM_LIST3, SCM_LIST4,
2116SCM_LIST5, SCM_LIST6, SCM_LIST7, SCM_LIST8, SCM_LIST9.
2117
2118Use functions scm_list_N instead.
2119
6fe692e9
MD
2120** New function: scm_c_read (SCM port, void *buffer, scm_sizet size)
2121
2122Used by an application to read arbitrary number of bytes from a port.
2123Same semantics as libc read, except that scm_c_read only returns less
2124than SIZE bytes if at end-of-file.
2125
2126Warning: Doesn't update port line and column counts!
2127
2128** New function: scm_c_write (SCM port, const void *ptr, scm_sizet size)
2129
2130Used by an application to write arbitrary number of bytes to an SCM
2131port. Similar semantics as libc write. However, unlike libc
2132write, scm_c_write writes the requested number of bytes and has no
2133return value.
2134
2135Warning: Doesn't update port line and column counts!
2136
17f367e0
MV
2137** New function: scm_init_guile ()
2138
2139In contrast to scm_boot_guile, scm_init_guile will return normally
2140after initializing Guile. It is not available on all systems, tho.
2141
23ade5e7
DH
2142** New functions: scm_str2symbol, scm_mem2symbol
2143
2144The function scm_str2symbol takes a const char* pointing to a zero-terminated
2145field of characters and creates a scheme symbol object from that C string.
2146The function scm_mem2symbol takes a const char* and a number of characters and
2147creates a symbol from the characters in that memory area.
2148
17f367e0
MV
2149** New functions: scm_primitive_make_property
2150 scm_primitive_property_ref
2151 scm_primitive_property_set_x
2152 scm_primitive_property_del_x
2153
2154These functions implement a new way to deal with object properties.
2155See libguile/properties.c for their documentation.
2156
9d47a1e6
ML
2157** New function: scm_done_free (long size)
2158
2159This function is the inverse of scm_done_malloc. Use it to report the
2160amount of smob memory you free. The previous method, which involved
2161calling scm_done_malloc with negative argument, was somewhat
2162unintuitive (and is still available, of course).
2163
79a3dafe
DH
2164** New function: scm_c_memq (SCM obj, SCM list)
2165
2166This function provides a fast C level alternative for scm_memq for the case
2167that the list parameter is known to be a proper list. The function is a
2168replacement for scm_sloppy_memq, but is stricter in its requirements on its
2169list input parameter, since for anything else but a proper list the function's
2170behaviour is undefined - it may even crash or loop endlessly. Further, for
2171the case that the object is not found in the list, scm_c_memq returns #f which
2172is similar to scm_memq, but different from scm_sloppy_memq's behaviour.
2173
6c0201ad 2174** New functions: scm_remember_upto_here_1, scm_remember_upto_here_2,
5d2b97cd
DH
2175scm_remember_upto_here
2176
2177These functions replace the function scm_remember.
2178
2179** Deprecated function: scm_remember
2180
2181Use one of the new functions scm_remember_upto_here_1,
2182scm_remember_upto_here_2 or scm_remember_upto_here instead.
2183
be54b15d
DH
2184** New function: scm_allocate_string
2185
2186This function replaces the function scm_makstr.
2187
2188** Deprecated function: scm_makstr
2189
2190Use the new function scm_allocate_string instead.
2191
32d0d4b1
DH
2192** New global variable scm_gc_running_p introduced.
2193
2194Use this variable to find out if garbage collection is being executed. Up to
2195now applications have used scm_gc_heap_lock to test if garbage collection was
2196running, which also works because of the fact that up to know only the garbage
2197collector has set this variable. But, this is an implementation detail that
2198may change. Further, scm_gc_heap_lock is not set throughout gc, thus the use
2199of this variable is (and has been) not fully safe anyway.
2200
5b9eb8ae
DH
2201** New macros: SCM_BITVECTOR_MAX_LENGTH, SCM_UVECTOR_MAX_LENGTH
2202
2203Use these instead of SCM_LENGTH_MAX.
2204
6c0201ad 2205** New macros: SCM_CONTINUATION_LENGTH, SCM_CCLO_LENGTH, SCM_STACK_LENGTH,
a6d9e5ab
DH
2206SCM_STRING_LENGTH, SCM_SYMBOL_LENGTH, SCM_UVECTOR_LENGTH,
2207SCM_BITVECTOR_LENGTH, SCM_VECTOR_LENGTH.
2208
2209Use these instead of SCM_LENGTH.
2210
6c0201ad 2211** New macros: SCM_SET_CONTINUATION_LENGTH, SCM_SET_STRING_LENGTH,
93778877
DH
2212SCM_SET_SYMBOL_LENGTH, SCM_SET_VECTOR_LENGTH, SCM_SET_UVECTOR_LENGTH,
2213SCM_SET_BITVECTOR_LENGTH
bc0eaf7b
DH
2214
2215Use these instead of SCM_SETLENGTH
2216
6c0201ad 2217** New macros: SCM_STRING_CHARS, SCM_SYMBOL_CHARS, SCM_CCLO_BASE,
a6d9e5ab
DH
2218SCM_VECTOR_BASE, SCM_UVECTOR_BASE, SCM_BITVECTOR_BASE, SCM_COMPLEX_MEM,
2219SCM_ARRAY_MEM
2220
e51fe79c
DH
2221Use these instead of SCM_CHARS, SCM_UCHARS, SCM_ROCHARS, SCM_ROUCHARS or
2222SCM_VELTS.
a6d9e5ab 2223
6c0201ad 2224** New macros: SCM_SET_BIGNUM_BASE, SCM_SET_STRING_CHARS,
6a0476fd
DH
2225SCM_SET_SYMBOL_CHARS, SCM_SET_UVECTOR_BASE, SCM_SET_BITVECTOR_BASE,
2226SCM_SET_VECTOR_BASE
2227
2228Use these instead of SCM_SETCHARS.
2229
a6d9e5ab
DH
2230** New macro: SCM_BITVECTOR_P
2231
2232** New macro: SCM_STRING_COERCE_0TERMINATION_X
2233
2234Use instead of SCM_COERCE_SUBSTR.
2235
30ea841d
DH
2236** New macros: SCM_DIR_OPEN_P, SCM_DIR_FLAG_OPEN
2237
2238For directory objects, use these instead of SCM_OPDIRP and SCM_OPN.
2239
6c0201ad
TTN
2240** Deprecated macros: SCM_OUTOFRANGE, SCM_NALLOC, SCM_HUP_SIGNAL,
2241SCM_INT_SIGNAL, SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL,
2242SCM_ALRM_SIGNAL, SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD,
d1ca2c64 2243SCM_ORD_SIG, SCM_NUM_SIGS, SCM_SYMBOL_SLOTS, SCM_SLOTS, SCM_SLOPPY_STRINGP,
a6d9e5ab
DH
2244SCM_VALIDATE_STRINGORSUBSTR, SCM_FREEP, SCM_NFREEP, SCM_CHARS, SCM_UCHARS,
2245SCM_VALIDATE_ROSTRING, SCM_VALIDATE_ROSTRING_COPY,
2246SCM_VALIDATE_NULLORROSTRING_COPY, SCM_ROLENGTH, SCM_LENGTH, SCM_HUGE_LENGTH,
b24b5e13 2247SCM_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET, SCM_COERCE_SUBSTR,
34f0f2b8 2248SCM_ROSTRINGP, SCM_RWSTRINGP, SCM_VALIDATE_RWSTRING, SCM_ROCHARS,
fd336365 2249SCM_ROUCHARS, SCM_SETLENGTH, SCM_SETCHARS, SCM_LENGTH_MAX, SCM_GC8MARKP,
30ea841d 2250SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR, SCM_SUBR_DOC,
b3fcac34
DH
2251SCM_OPDIRP, SCM_VALIDATE_OPDIR, SCM_WTA, RETURN_SCM_WTA, SCM_CONST_LONG,
2252SCM_WNA, SCM_FUNC_NAME, SCM_VALIDATE_NUMBER_COPY,
61045190 2253SCM_VALIDATE_NUMBER_DEF_COPY, SCM_SLOPPY_CONSP, SCM_SLOPPY_NCONSP,
e038c042 2254SCM_SETAND_CDR, SCM_SETOR_CDR, SCM_SETAND_CAR, SCM_SETOR_CAR
b63a956d
DH
2255
2256Use SCM_ASSERT_RANGE or SCM_VALIDATE_XXX_RANGE instead of SCM_OUTOFRANGE.
2257Use scm_memory_error instead of SCM_NALLOC.
c1aef037 2258Use SCM_STRINGP instead of SCM_SLOPPY_STRINGP.
d1ca2c64
DH
2259Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_STRINGORSUBSTR.
2260Use SCM_FREE_CELL_P instead of SCM_FREEP/SCM_NFREEP
a6d9e5ab 2261Use a type specific accessor macro instead of SCM_CHARS/SCM_UCHARS.
6c0201ad 2262Use a type specific accessor instead of SCM(_|_RO|_HUGE_)LENGTH.
a6d9e5ab
DH
2263Use SCM_VALIDATE_(SYMBOL|STRING) instead of SCM_VALIDATE_ROSTRING.
2264Use SCM_STRING_COERCE_0TERMINATION_X instead of SCM_COERCE_SUBSTR.
b24b5e13 2265Use SCM_STRINGP or SCM_SYMBOLP instead of SCM_ROSTRINGP.
f0942910
DH
2266Use SCM_STRINGP instead of SCM_RWSTRINGP.
2267Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_RWSTRING.
34f0f2b8
DH
2268Use SCM_STRING_CHARS instead of SCM_ROCHARS.
2269Use SCM_STRING_UCHARS instead of SCM_ROUCHARS.
93778877 2270Use a type specific setter macro instead of SCM_SETLENGTH.
6a0476fd 2271Use a type specific setter macro instead of SCM_SETCHARS.
5b9eb8ae 2272Use a type specific length macro instead of SCM_LENGTH_MAX.
fd336365
DH
2273Use SCM_GCMARKP instead of SCM_GC8MARKP.
2274Use SCM_SETGCMARK instead of SCM_SETGC8MARK.
2275Use SCM_CLRGCMARK instead of SCM_CLRGC8MARK.
2276Use SCM_TYP16 instead of SCM_GCTYP16.
2277Use SCM_CDR instead of SCM_GCCDR.
30ea841d 2278Use SCM_DIR_OPEN_P instead of SCM_OPDIRP.
276dd677
DH
2279Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of SCM_WTA.
2280Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of RETURN_SCM_WTA.
8dea8611 2281Use SCM_VCELL_INIT instead of SCM_CONST_LONG.
b3fcac34 2282Use SCM_WRONG_NUM_ARGS instead of SCM_WNA.
ced99e92
DH
2283Use SCM_CONSP instead of SCM_SLOPPY_CONSP.
2284Use !SCM_CONSP instead of SCM_SLOPPY_NCONSP.
b63a956d 2285
f7620510
DH
2286** Removed function: scm_struct_init
2287
93d40df2
DH
2288** Removed variable: scm_symhash_dim
2289
818febc0
GH
2290** Renamed function: scm_make_cont has been replaced by
2291scm_make_continuation, which has a different interface.
2292
cc4feeca
DH
2293** Deprecated function: scm_call_catching_errors
2294
2295Use scm_catch or scm_lazy_catch from throw.[ch] instead.
2296
28b06554
DH
2297** Deprecated function: scm_strhash
2298
2299Use scm_string_hash instead.
2300
1b9be268
DH
2301** Deprecated function: scm_vector_set_length_x
2302
2303Instead, create a fresh vector of the desired size and copy the contents.
2304
302f229e
MD
2305** scm_gensym has changed prototype
2306
2307scm_gensym now only takes one argument.
2308
1660782e
DH
2309** Deprecated type tags: scm_tc7_ssymbol, scm_tc7_msymbol, scm_tcs_symbols,
2310scm_tc7_lvector
28b06554
DH
2311
2312There is now only a single symbol type scm_tc7_symbol.
1660782e 2313The tag scm_tc7_lvector was not used anyway.
28b06554 2314
2f6fb7c5
KN
2315** Deprecated function: scm_make_smob_type_mfpe, scm_set_smob_mfpe.
2316
2317Use scm_make_smob_type and scm_set_smob_XXX instead.
2318
2319** New function scm_set_smob_apply.
2320
2321This can be used to set an apply function to a smob type.
2322
1f3908c4
KN
2323** Deprecated function: scm_strprint_obj
2324
2325Use scm_object_to_string instead.
2326
b3fcac34
DH
2327** Deprecated function: scm_wta
2328
2329Use scm_wrong_type_arg, or another appropriate error signalling function
2330instead.
2331
f3f9dcbc
MV
2332** Explicit support for obarrays has been deprecated.
2333
2334Use `scm_str2symbol' and the generic hashtable functions instead.
2335
2336** The concept of `vcells' has been deprecated.
2337
2338The data type `variable' is now used exclusively. `Vcells' have been
2339a low-level concept so you are likely not affected by this change.
2340
2341*** Deprecated functions: scm_sym2vcell, scm_sysintern,
2342 scm_sysintern0, scm_symbol_value0, scm_intern, scm_intern0.
2343
2344Use scm_c_define or scm_c_lookup instead, as appropriate.
2345
2346*** New functions: scm_c_module_lookup, scm_c_lookup,
2347 scm_c_module_define, scm_c_define, scm_module_lookup, scm_lookup,
2348 scm_module_define, scm_define.
2349
2350These functions work with variables instead of with vcells.
2351
311b6a3c
MV
2352** New functions for creating and defining `subr's and `gsubr's.
2353
2354The new functions more clearly distinguish between creating a subr (or
2355gsubr) object and adding it to the current module.
2356
2357These new functions are available: scm_c_make_subr, scm_c_define_subr,
2358scm_c_make_subr_with_generic, scm_c_define_subr_with_generic,
2359scm_c_make_gsubr, scm_c_define_gsubr, scm_c_make_gsubr_with_generic,
2360scm_c_define_gsubr_with_generic.
2361
2362** Deprecated functions: scm_make_subr, scm_make_subr_opt,
2363 scm_make_subr_with_generic, scm_make_gsubr,
2364 scm_make_gsubr_with_generic.
2365
2366Use the new ones from above instead.
2367
2368** C interface to the module system has changed.
2369
2370While we suggest that you avoid as many explicit module system
2371operations from C as possible for the time being, the C interface has
2372been made more similar to the high-level Scheme module system.
2373
2374*** New functions: scm_c_define_module, scm_c_use_module,
2375 scm_c_export, scm_c_resolve_module.
2376
2377They mostly work like their Scheme namesakes. scm_c_define_module
2378takes a function that is called a context where the new module is
2379current.
2380
2381*** Deprecated functions: scm_the_root_module, scm_make_module,
2382 scm_ensure_user_module, scm_load_scheme_module.
2383
2384Use the new functions instead.
2385
2386** Renamed function: scm_internal_with_fluids becomes
2387 scm_c_with_fluids.
2388
2389scm_internal_with_fluids is available as a deprecated function.
2390
2391** New function: scm_c_with_fluid.
2392
2393Just like scm_c_with_fluids, but takes one fluid and one value instead
2394of lists of same.
2395
1be6b49c
ML
2396** Deprecated typedefs: long_long, ulong_long.
2397
2398They are of questionable utility and they pollute the global
2399namespace.
2400
1be6b49c
ML
2401** Deprecated typedef: scm_sizet
2402
2403It is of questionable utility now that Guile requires ANSI C, and is
2404oddly named.
2405
2406** Deprecated typedefs: scm_port_rw_active, scm_port,
2407 scm_ptob_descriptor, scm_debug_info, scm_debug_frame, scm_fport,
2408 scm_option, scm_rstate, scm_rng, scm_array, scm_array_dim.
2409
2410Made more compliant with the naming policy by adding a _t at the end.
2411
2412** Deprecated functions: scm_mkbig, scm_big2num, scm_adjbig,
2413 scm_normbig, scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl
2414
373f4948 2415With the exception of the mysterious scm_2ulong2big, they are still
1be6b49c
ML
2416available under new names (scm_i_mkbig etc). These functions are not
2417intended to be used in user code. You should avoid dealing with
2418bignums directly, and should deal with numbers in general (which can
2419be bignums).
2420
147c18a0
MD
2421** Change in behavior: scm_num2long, scm_num2ulong
2422
2423The scm_num2[u]long functions don't any longer accept an inexact
2424argument. This change in behavior is motivated by concordance with
2425R5RS: It is more common that a primitive doesn't want to accept an
2426inexact for an exact.
2427
1be6b49c 2428** New functions: scm_short2num, scm_ushort2num, scm_int2num,
f3f70257
ML
2429 scm_uint2num, scm_size2num, scm_ptrdiff2num, scm_num2short,
2430 scm_num2ushort, scm_num2int, scm_num2uint, scm_num2ptrdiff,
1be6b49c
ML
2431 scm_num2size.
2432
2433These are conversion functions between the various ANSI C integral
147c18a0
MD
2434types and Scheme numbers. NOTE: The scm_num2xxx functions don't
2435accept an inexact argument.
1be6b49c 2436
5437598b
MD
2437** New functions: scm_float2num, scm_double2num,
2438 scm_num2float, scm_num2double.
2439
2440These are conversion functions between the two ANSI C float types and
2441Scheme numbers.
2442
1be6b49c 2443** New number validation macros:
f3f70257 2444 SCM_NUM2{SIZE,PTRDIFF,SHORT,USHORT,INT,UINT}[_DEF]
1be6b49c
ML
2445
2446See above.
2447
fc62c86a
ML
2448** New functions: scm_gc_protect_object, scm_gc_unprotect_object
2449
2450These are just nicer-named old scm_protect_object and
2451scm_unprotect_object.
2452
2453** Deprecated functions: scm_protect_object, scm_unprotect_object
2454
2455** New functions: scm_gc_[un]register_root, scm_gc_[un]register_roots
2456
2457These functions can be used to register pointers to locations that
2458hold SCM values.
2459
5b2ad23b
ML
2460** Deprecated function: scm_create_hook.
2461
2462Its sins are: misleading name, non-modularity and lack of general
2463usefulness.
2464
c299f186 2465\f
cc36e791
JB
2466Changes since Guile 1.3.4:
2467
80f27102
JB
2468* Changes to the distribution
2469
ce358662
JB
2470** Trees from nightly snapshots and CVS now require you to run autogen.sh.
2471
2472We've changed the way we handle generated files in the Guile source
2473repository. As a result, the procedure for building trees obtained
2474from the nightly FTP snapshots or via CVS has changed:
2475- You must have appropriate versions of autoconf, automake, and
2476 libtool installed on your system. See README for info on how to
2477 obtain these programs.
2478- Before configuring the tree, you must first run the script
2479 `autogen.sh' at the top of the source tree.
2480
2481The Guile repository used to contain not only source files, written by
2482humans, but also some generated files, like configure scripts and
2483Makefile.in files. Even though the contents of these files could be
2484derived mechanically from other files present, we thought it would
2485make the tree easier to build if we checked them into CVS.
2486
2487However, this approach means that minor differences between
2488developer's installed tools and habits affected the whole team.
2489So we have removed the generated files from the repository, and
2490added the autogen.sh script, which will reconstruct them
2491appropriately.
2492
2493
dc914156
GH
2494** configure now has experimental options to remove support for certain
2495features:
52cfc69b 2496
dc914156
GH
2497--disable-arrays omit array and uniform array support
2498--disable-posix omit posix interfaces
2499--disable-networking omit networking interfaces
2500--disable-regex omit regular expression interfaces
52cfc69b
GH
2501
2502These are likely to become separate modules some day.
2503
9764c29b 2504** New configure option --enable-debug-freelist
e1b0d0ac 2505
38a15cfd
GB
2506This enables a debugging version of SCM_NEWCELL(), and also registers
2507an extra primitive, the setter `gc-set-debug-check-freelist!'.
2508
2509Configure with the --enable-debug-freelist option to enable
2510the gc-set-debug-check-freelist! primitive, and then use:
2511
2512(gc-set-debug-check-freelist! #t) # turn on checking of the freelist
2513(gc-set-debug-check-freelist! #f) # turn off checking
2514
2515Checking of the freelist forces a traversal of the freelist and
2516a garbage collection before each allocation of a cell. This can
2517slow down the interpreter dramatically, so the setter should be used to
2518turn on this extra processing only when necessary.
e1b0d0ac 2519
9764c29b
MD
2520** New configure option --enable-debug-malloc
2521
2522Include code for debugging of calls to scm_must_malloc/realloc/free.
2523
2524Checks that
2525
25261. objects freed by scm_must_free has been mallocated by scm_must_malloc
25272. objects reallocated by scm_must_realloc has been allocated by
2528 scm_must_malloc
25293. reallocated objects are reallocated with the same what string
2530
2531But, most importantly, it records the number of allocated objects of
2532each kind. This is useful when searching for memory leaks.
2533
2534A Guile compiled with this option provides the primitive
2535`malloc-stats' which returns an alist with pairs of kind and the
2536number of objects of that kind.
2537
e415cb06
MD
2538** All includes are now referenced relative to the root directory
2539
2540Since some users have had problems with mixups between Guile and
2541system headers, we have decided to always refer to Guile headers via
2542their parent directories. This essentially creates a "private name
2543space" for Guile headers. This means that the compiler only is given
2544-I options for the root build and root source directory.
2545
341f78c9
MD
2546** Header files kw.h and genio.h have been removed.
2547
2548** The module (ice-9 getopt-gnu-style) has been removed.
2549
e8855f8d
MD
2550** New module (ice-9 documentation)
2551
2552Implements the interface to documentation strings associated with
2553objects.
2554
0c0ffe09
KN
2555** New module (ice-9 time)
2556
2557Provides a macro `time', which displays execution time of a given form.
2558
cf7a5ee5
KN
2559** New module (ice-9 history)
2560
2561Loading this module enables value history in the repl.
2562
0af43c4a 2563* Changes to the stand-alone interpreter
bd9e24b3 2564
67ef2dca
MD
2565** New command line option --debug
2566
2567Start Guile with debugging evaluator and backtraces enabled.
2568
2569This is useful when debugging your .guile init file or scripts.
2570
aa4bb95d
MD
2571** New help facility
2572
341f78c9
MD
2573Usage: (help NAME) gives documentation about objects named NAME (a symbol)
2574 (help REGEXP) ditto for objects with names matching REGEXP (a string)
58e5b910 2575 (help 'NAME) gives documentation for NAME, even if it is not an object
341f78c9 2576 (help ,EXPR) gives documentation for object returned by EXPR
6c0201ad 2577 (help (my module)) gives module commentary for `(my module)'
341f78c9
MD
2578 (help) gives this text
2579
2580`help' searches among bindings exported from loaded modules, while
2581`apropos' searches among bindings visible from the "current" module.
2582
2583Examples: (help help)
2584 (help cons)
2585 (help "output-string")
aa4bb95d 2586
e8855f8d
MD
2587** `help' and `apropos' now prints full module names
2588
0af43c4a 2589** Dynamic linking now uses libltdl from the libtool package.
bd9e24b3 2590
0af43c4a
MD
2591The old system dependent code for doing dynamic linking has been
2592replaced with calls to the libltdl functions which do all the hairy
2593details for us.
bd9e24b3 2594
0af43c4a
MD
2595The major improvement is that you can now directly pass libtool
2596library names like "libfoo.la" to `dynamic-link' and `dynamic-link'
2597will be able to do the best shared library job you can get, via
2598libltdl.
bd9e24b3 2599
0af43c4a
MD
2600The way dynamic libraries are found has changed and is not really
2601portable across platforms, probably. It is therefore recommended to
2602use absolute filenames when possible.
2603
2604If you pass a filename without an extension to `dynamic-link', it will
2605try a few appropriate ones. Thus, the most platform ignorant way is
2606to specify a name like "libfoo", without any directories and
2607extensions.
0573ddae 2608
91163914
MD
2609** Guile COOP threads are now compatible with LinuxThreads
2610
2611Previously, COOP threading wasn't possible in applications linked with
2612Linux POSIX threads due to their use of the stack pointer to find the
2613thread context. This has now been fixed with a workaround which uses
2614the pthreads to allocate the stack.
2615
6c0201ad 2616** New primitives: `pkgdata-dir', `site-dir', `library-dir'
62b82274 2617
9770d235
MD
2618** Positions of erring expression in scripts
2619
2620With version 1.3.4, the location of the erring expression in Guile
2621scipts is no longer automatically reported. (This should have been
2622documented before the 1.3.4 release.)
2623
2624You can get this information by enabling recording of positions of
2625source expressions and running the debugging evaluator. Put this at
2626the top of your script (or in your "site" file):
2627
2628 (read-enable 'positions)
2629 (debug-enable 'debug)
2630
0573ddae
MD
2631** Backtraces in scripts
2632
2633It is now possible to get backtraces in scripts.
2634
2635Put
2636
2637 (debug-enable 'debug 'backtrace)
2638
2639at the top of the script.
2640
2641(The first options enables the debugging evaluator.
2642 The second enables backtraces.)
2643
e8855f8d
MD
2644** Part of module system symbol lookup now implemented in C
2645
2646The eval closure of most modules is now implemented in C. Since this
2647was one of the bottlenecks for loading speed, Guile now loads code
2648substantially faster than before.
2649
f25f761d
GH
2650** Attempting to get the value of an unbound variable now produces
2651an exception with a key of 'unbound-variable instead of 'misc-error.
2652
1a35eadc
GH
2653** The initial default output port is now unbuffered if it's using a
2654tty device. Previously in this situation it was line-buffered.
2655
820920e6
MD
2656** New hook: after-gc-hook
2657
2658after-gc-hook takes over the role of gc-thunk. This hook is run at
2659the first SCM_TICK after a GC. (Thus, the code is run at the same
2660point during evaluation as signal handlers.)
2661
2662Note that this hook should be used only for diagnostic and debugging
2663purposes. It is not certain that it will continue to be well-defined
2664when this hook is run in the future.
2665
2666C programmers: Note the new C level hooks scm_before_gc_c_hook,
2667scm_before_sweep_c_hook, scm_after_gc_c_hook.
2668
b5074b23
MD
2669** Improvements to garbage collector
2670
2671Guile 1.4 has a new policy for triggering heap allocation and
2672determining the sizes of heap segments. It fixes a number of problems
2673in the old GC.
2674
26751. The new policy can handle two separate pools of cells
2676 (2-word/4-word) better. (The old policy would run wild, allocating
2677 more and more memory for certain programs.)
2678
26792. The old code would sometimes allocate far too much heap so that the
2680 Guile process became gigantic. The new code avoids this.
2681
26823. The old code would sometimes allocate too little so that few cells
2683 were freed at GC so that, in turn, too much time was spent in GC.
2684
26854. The old code would often trigger heap allocation several times in a
2686 row. (The new scheme predicts how large the segments needs to be
2687 in order not to need further allocation.)
2688
e8855f8d
MD
2689All in all, the new GC policy will make larger applications more
2690efficient.
2691
b5074b23
MD
2692The new GC scheme also is prepared for POSIX threading. Threads can
2693allocate private pools of cells ("clusters") with just a single
2694function call. Allocation of single cells from such a cluster can
2695then proceed without any need of inter-thread synchronization.
2696
2697** New environment variables controlling GC parameters
2698
2699GUILE_MAX_SEGMENT_SIZE Maximal segment size
2700 (default = 2097000)
2701
2702Allocation of 2-word cell heaps:
2703
2704GUILE_INIT_SEGMENT_SIZE_1 Size of initial heap segment in bytes
2705 (default = 360000)
2706
2707GUILE_MIN_YIELD_1 Minimum number of freed cells at each
2708 GC in percent of total heap size
2709 (default = 40)
2710
2711Allocation of 4-word cell heaps
2712(used for real numbers and misc other objects):
2713
2714GUILE_INIT_SEGMENT_SIZE_2, GUILE_MIN_YIELD_2
2715
2716(See entry "Way for application to customize GC parameters" under
2717 section "Changes to the scm_ interface" below.)
2718
67ef2dca
MD
2719** Guile now implements reals using 4-word cells
2720
2721This speeds up computation with reals. (They were earlier allocated
2722with `malloc'.) There is still some room for optimizations, however.
2723
2724** Some further steps toward POSIX thread support have been taken
2725
2726*** Guile's critical sections (SCM_DEFER/ALLOW_INTS)
2727don't have much effect any longer, and many of them will be removed in
2728next release.
2729
2730*** Signals
2731are only handled at the top of the evaluator loop, immediately after
2732I/O, and in scm_equalp.
2733
2734*** The GC can allocate thread private pools of pairs.
2735
0af43c4a
MD
2736* Changes to Scheme functions and syntax
2737
a0128ebe 2738** close-input-port and close-output-port are now R5RS
7c1e0b12 2739
a0128ebe 2740These procedures have been turned into primitives and have R5RS behaviour.
7c1e0b12 2741
0af43c4a
MD
2742** New procedure: simple-format PORT MESSAGE ARG1 ...
2743
2744(ice-9 boot) makes `format' an alias for `simple-format' until possibly
2745extended by the more sophisticated version in (ice-9 format)
2746
2747(simple-format port message . args)
2748Write MESSAGE to DESTINATION, defaulting to `current-output-port'.
2749MESSAGE can contain ~A (was %s) and ~S (was %S) escapes. When printed,
2750the escapes are replaced with corresponding members of ARGS:
2751~A formats using `display' and ~S formats using `write'.
2752If DESTINATION is #t, then use the `current-output-port',
2753if DESTINATION is #f, then return a string containing the formatted text.
2754Does not add a trailing newline."
2755
2756** string-ref: the second argument is no longer optional.
2757
2758** string, list->string: no longer accept strings in their arguments,
2759only characters, for compatibility with R5RS.
2760
2761** New procedure: port-closed? PORT
2762Returns #t if PORT is closed or #f if it is open.
2763
0a9e521f
MD
2764** Deprecated: list*
2765
2766The list* functionality is now provided by cons* (SRFI-1 compliant)
2767
b5074b23
MD
2768** New procedure: cons* ARG1 ARG2 ... ARGn
2769
2770Like `list', but the last arg provides the tail of the constructed list,
2771returning (cons ARG1 (cons ARG2 (cons ... ARGn))).
2772
2773Requires at least one argument. If given one argument, that argument
2774is returned as result.
2775
2776This function is called `list*' in some other Schemes and in Common LISP.
2777
341f78c9
MD
2778** Removed deprecated: serial-map, serial-array-copy!, serial-array-map!
2779
e8855f8d
MD
2780** New procedure: object-documentation OBJECT
2781
2782Returns the documentation string associated with OBJECT. The
2783procedure uses a caching mechanism so that subsequent lookups are
2784faster.
2785
2786Exported by (ice-9 documentation).
2787
2788** module-name now returns full names of modules
2789
2790Previously, only the last part of the name was returned (`session' for
2791`(ice-9 session)'). Ex: `(ice-9 session)'.
2792
894a712b
DH
2793* Changes to the gh_ interface
2794
2795** Deprecated: gh_int2scmb
2796
2797Use gh_bool2scm instead.
2798
a2349a28
GH
2799* Changes to the scm_ interface
2800
810e1aec
MD
2801** Guile primitives now carry docstrings!
2802
2803Thanks to Greg Badros!
2804
0a9e521f 2805** Guile primitives are defined in a new way: SCM_DEFINE/SCM_DEFINE1/SCM_PROC
0af43c4a 2806
0a9e521f
MD
2807Now Guile primitives are defined using the SCM_DEFINE/SCM_DEFINE1/SCM_PROC
2808macros and must contain a docstring that is extracted into foo.doc using a new
0af43c4a
MD
2809guile-doc-snarf script (that uses guile-doc-snarf.awk).
2810
0a9e521f
MD
2811However, a major overhaul of these macros is scheduled for the next release of
2812guile.
2813
0af43c4a
MD
2814** Guile primitives use a new technique for validation of arguments
2815
2816SCM_VALIDATE_* macros are defined to ease the redundancy and improve
2817the readability of argument checking.
2818
2819** All (nearly?) K&R prototypes for functions replaced with ANSI C equivalents.
2820
894a712b 2821** New macros: SCM_PACK, SCM_UNPACK
f8a72ca4
MD
2822
2823Compose/decompose an SCM value.
2824
894a712b
DH
2825The SCM type is now treated as an abstract data type and may be defined as a
2826long, a void* or as a struct, depending on the architecture and compile time
2827options. This makes it easier to find several types of bugs, for example when
2828SCM values are treated as integers without conversion. Values of the SCM type
2829should be treated as "atomic" values. These macros are used when
f8a72ca4
MD
2830composing/decomposing an SCM value, either because you want to access
2831individual bits, or because you want to treat it as an integer value.
2832
2833E.g., in order to set bit 7 in an SCM value x, use the expression
2834
2835 SCM_PACK (SCM_UNPACK (x) | 0x80)
2836
e11f8b42
DH
2837** The name property of hooks is deprecated.
2838Thus, the use of SCM_HOOK_NAME and scm_make_hook_with_name is deprecated.
2839
2840You can emulate this feature by using object properties.
2841
6c0201ad 2842** Deprecated macros: SCM_INPORTP, SCM_OUTPORTP, SCM_CRDY, SCM_ICHRP,
894a712b
DH
2843SCM_ICHR, SCM_MAKICHR, SCM_SETJMPBUF, SCM_NSTRINGP, SCM_NRWSTRINGP,
2844SCM_NVECTORP
f8a72ca4 2845
894a712b 2846These macros will be removed in a future release of Guile.
7c1e0b12 2847
6c0201ad 2848** The following types, functions and macros from numbers.h are deprecated:
0a9e521f
MD
2849scm_dblproc, SCM_UNEGFIXABLE, SCM_FLOBUFLEN, SCM_INEXP, SCM_CPLXP, SCM_REAL,
2850SCM_IMAG, SCM_REALPART, scm_makdbl, SCM_SINGP, SCM_NUM2DBL, SCM_NO_BIGDIG
2851
a2349a28
GH
2852** Port internals: the rw_random variable in the scm_port structure
2853must be set to non-zero in any random access port. In recent Guile
2854releases it was only set for bidirectional random-access ports.
2855
7dcb364d
GH
2856** Port internals: the seek ptob procedure is now responsible for
2857resetting the buffers if required. The change was made so that in the
2858special case of reading the current position (i.e., seek p 0 SEEK_CUR)
2859the fport and strport ptobs can avoid resetting the buffers,
2860in particular to avoid discarding unread chars. An existing port
2861type can be fixed by adding something like the following to the
2862beginning of the ptob seek procedure:
2863
2864 if (pt->rw_active == SCM_PORT_READ)
2865 scm_end_input (object);
2866 else if (pt->rw_active == SCM_PORT_WRITE)
2867 ptob->flush (object);
2868
2869although to actually avoid resetting the buffers and discard unread
2870chars requires further hacking that depends on the characteristics
2871of the ptob.
2872
894a712b
DH
2873** Deprecated functions: scm_fseek, scm_tag
2874
2875These functions are no longer used and will be removed in a future version.
2876
f25f761d
GH
2877** The scm_sysmissing procedure is no longer used in libguile.
2878Unless it turns out to be unexpectedly useful to somebody, it will be
2879removed in a future version.
2880
0af43c4a
MD
2881** The format of error message strings has changed
2882
2883The two C procedures: scm_display_error and scm_error, as well as the
2884primitive `scm-error', now use scm_simple_format to do their work.
2885This means that the message strings of all code must be updated to use
2886~A where %s was used before, and ~S where %S was used before.
2887
2888During the period when there still are a lot of old Guiles out there,
2889you might want to support both old and new versions of Guile.
2890
2891There are basically two methods to achieve this. Both methods use
2892autoconf. Put
2893
2894 AC_CHECK_FUNCS(scm_simple_format)
2895
2896in your configure.in.
2897
2898Method 1: Use the string concatenation features of ANSI C's
2899 preprocessor.
2900
2901In C:
2902
2903#ifdef HAVE_SCM_SIMPLE_FORMAT
2904#define FMT_S "~S"
2905#else
2906#define FMT_S "%S"
2907#endif
2908
2909Then represent each of your error messages using a preprocessor macro:
2910
2911#define E_SPIDER_ERROR "There's a spider in your " ## FMT_S ## "!!!"
2912
2913In Scheme:
2914
2915(define fmt-s (if (defined? 'simple-format) "~S" "%S"))
2916(define make-message string-append)
2917
2918(define e-spider-error (make-message "There's a spider in your " fmt-s "!!!"))
2919
2920Method 2: Use the oldfmt function found in doc/oldfmt.c.
2921
2922In C:
2923
2924scm_misc_error ("picnic", scm_c_oldfmt0 ("There's a spider in your ~S!!!"),
2925 ...);
2926
2927In Scheme:
2928
2929(scm-error 'misc-error "picnic" (oldfmt "There's a spider in your ~S!!!")
2930 ...)
2931
2932
f3b5e185
MD
2933** Deprecated: coop_mutex_init, coop_condition_variable_init
2934
2935Don't use the functions coop_mutex_init and
2936coop_condition_variable_init. They will change.
2937
2938Use scm_mutex_init and scm_cond_init instead.
2939
f3b5e185
MD
2940** New function: int scm_cond_timedwait (scm_cond_t *COND, scm_mutex_t *MUTEX, const struct timespec *ABSTIME)
2941 `scm_cond_timedwait' atomically unlocks MUTEX and waits on
2942 COND, as `scm_cond_wait' does, but it also bounds the duration
2943 of the wait. If COND has not been signaled before time ABSTIME,
2944 the mutex MUTEX is re-acquired and `scm_cond_timedwait'
2945 returns the error code `ETIMEDOUT'.
2946
2947 The ABSTIME parameter specifies an absolute time, with the same
2948 origin as `time' and `gettimeofday': an ABSTIME of 0 corresponds
2949 to 00:00:00 GMT, January 1, 1970.
2950
2951** New function: scm_cond_broadcast (scm_cond_t *COND)
2952 `scm_cond_broadcast' restarts all the threads that are waiting
2953 on the condition variable COND. Nothing happens if no threads are
2954 waiting on COND.
2955
2956** New function: scm_key_create (scm_key_t *KEY, void (*destr_function) (void *))
2957 `scm_key_create' allocates a new TSD key. The key is stored in
2958 the location pointed to by KEY. There is no limit on the number
2959 of keys allocated at a given time. The value initially associated
2960 with the returned key is `NULL' in all currently executing threads.
2961
2962 The DESTR_FUNCTION argument, if not `NULL', specifies a destructor
2963 function associated with the key. When a thread terminates,
2964 DESTR_FUNCTION is called on the value associated with the key in
2965 that thread. The DESTR_FUNCTION is not called if a key is deleted
2966 with `scm_key_delete' or a value is changed with
2967 `scm_setspecific'. The order in which destructor functions are
2968 called at thread termination time is unspecified.
2969
2970 Destructors are not yet implemented.
2971
2972** New function: scm_setspecific (scm_key_t KEY, const void *POINTER)
2973 `scm_setspecific' changes the value associated with KEY in the
2974 calling thread, storing the given POINTER instead.
2975
2976** New function: scm_getspecific (scm_key_t KEY)
2977 `scm_getspecific' returns the value currently associated with
2978 KEY in the calling thread.
2979
2980** New function: scm_key_delete (scm_key_t KEY)
2981 `scm_key_delete' deallocates a TSD key. It does not check
2982 whether non-`NULL' values are associated with that key in the
2983 currently executing threads, nor call the destructor function
2984 associated with the key.
2985
820920e6
MD
2986** New function: scm_c_hook_init (scm_c_hook_t *HOOK, void *HOOK_DATA, scm_c_hook_type_t TYPE)
2987
2988Initialize a C level hook HOOK with associated HOOK_DATA and type
2989TYPE. (See scm_c_hook_run ().)
2990
2991** New function: scm_c_hook_add (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA, int APPENDP)
2992
2993Add hook function FUNC with associated FUNC_DATA to HOOK. If APPENDP
2994is true, add it last, otherwise first. The same FUNC can be added
2995multiple times if FUNC_DATA differ and vice versa.
2996
2997** New function: scm_c_hook_remove (scm_c_hook_t *HOOK, scm_c_hook_function_t FUNC, void *FUNC_DATA)
2998
2999Remove hook function FUNC with associated FUNC_DATA from HOOK. A
3000function is only removed if both FUNC and FUNC_DATA matches.
3001
3002** New function: void *scm_c_hook_run (scm_c_hook_t *HOOK, void *DATA)
3003
3004Run hook HOOK passing DATA to the hook functions.
3005
3006If TYPE is SCM_C_HOOK_NORMAL, all hook functions are run. The value
3007returned is undefined.
3008
3009If TYPE is SCM_C_HOOK_OR, hook functions are run until a function
3010returns a non-NULL value. This value is returned as the result of
3011scm_c_hook_run. If all functions return NULL, NULL is returned.
3012
3013If TYPE is SCM_C_HOOK_AND, hook functions are run until a function
3014returns a NULL value, and NULL is returned. If all functions returns
3015a non-NULL value, the last value is returned.
3016
3017** New C level GC hooks
3018
3019Five new C level hooks has been added to the garbage collector.
3020
3021 scm_before_gc_c_hook
3022 scm_after_gc_c_hook
3023
3024are run before locking and after unlocking the heap. The system is
3025thus in a mode where evaluation can take place. (Except that
3026scm_before_gc_c_hook must not allocate new cells.)
3027
3028 scm_before_mark_c_hook
3029 scm_before_sweep_c_hook
3030 scm_after_sweep_c_hook
3031
3032are run when the heap is locked. These are intended for extension of
3033the GC in a modular fashion. Examples are the weaks and guardians
3034modules.
3035
b5074b23
MD
3036** Way for application to customize GC parameters
3037
3038The application can set up other default values for the GC heap
3039allocation parameters
3040
3041 GUILE_INIT_HEAP_SIZE_1, GUILE_MIN_YIELD_1,
3042 GUILE_INIT_HEAP_SIZE_2, GUILE_MIN_YIELD_2,
3043 GUILE_MAX_SEGMENT_SIZE,
3044
3045by setting
3046
3047 scm_default_init_heap_size_1, scm_default_min_yield_1,
3048 scm_default_init_heap_size_2, scm_default_min_yield_2,
3049 scm_default_max_segment_size
3050
3051respectively before callong scm_boot_guile.
3052
3053(See entry "New environment variables ..." in section
3054"Changes to the stand-alone interpreter" above.)
3055
9704841c
MD
3056** scm_protect_object/scm_unprotect_object now nest
3057
67ef2dca
MD
3058This means that you can call scm_protect_object multiple times on an
3059object and count on the object being protected until
3060scm_unprotect_object has been call the same number of times.
3061
3062The functions also have better time complexity.
3063
3064Still, it is usually possible to structure the application in a way
3065that you don't need to use these functions. For example, if you use a
3066protected standard Guile list to keep track of live objects rather
3067than some custom data type, objects will die a natural death when they
3068are no longer needed.
3069
0a9e521f
MD
3070** Deprecated type tags: scm_tc16_flo, scm_tc_flo, scm_tc_dblr, scm_tc_dblc
3071
3072Guile does not provide the float representation for inexact real numbers any
3073more. Now, only doubles are used to represent inexact real numbers. Further,
3074the tag names scm_tc_dblr and scm_tc_dblc have been changed to scm_tc16_real
3075and scm_tc16_complex, respectively.
3076
341f78c9
MD
3077** Removed deprecated type scm_smobfuns
3078
3079** Removed deprecated function scm_newsmob
3080
b5074b23
MD
3081** Warning: scm_make_smob_type_mfpe might become deprecated in a future release
3082
3083There is an ongoing discussion among the developers whether to
3084deprecate `scm_make_smob_type_mfpe' or not. Please use the current
3085standard interface (scm_make_smob_type, scm_set_smob_XXX) in new code
3086until this issue has been settled.
3087
341f78c9
MD
3088** Removed deprecated type tag scm_tc16_kw
3089
2728d7f4
MD
3090** Added type tag scm_tc16_keyword
3091
3092(This was introduced already in release 1.3.4 but was not documented
3093 until now.)
3094
67ef2dca
MD
3095** gdb_print now prints "*** Guile not initialized ***" until Guile initialized
3096
f25f761d
GH
3097* Changes to system call interfaces:
3098
28d77376
GH
3099** The "select" procedure now tests port buffers for the ability to
3100provide input or accept output. Previously only the underlying file
3101descriptors were checked.
3102
bd9e24b3
GH
3103** New variable PIPE_BUF: the maximum number of bytes that can be
3104atomically written to a pipe.
3105
f25f761d
GH
3106** If a facility is not available on the system when Guile is
3107compiled, the corresponding primitive procedure will not be defined.
3108Previously it would have been defined but would throw a system-error
3109exception if called. Exception handlers which catch this case may
3110need minor modification: an error will be thrown with key
3111'unbound-variable instead of 'system-error. Alternatively it's
3112now possible to use `defined?' to check whether the facility is
3113available.
3114
38c1d3c4 3115** Procedures which depend on the timezone should now give the correct
6c0201ad 3116result on systems which cache the TZ environment variable, even if TZ
38c1d3c4
GH
3117is changed without calling tzset.
3118
5c11cc9d
GH
3119* Changes to the networking interfaces:
3120
3121** New functions: htons, ntohs, htonl, ntohl: for converting short and
3122long integers between network and host format. For now, it's not
3123particularly convenient to do this kind of thing, but consider:
3124
3125(define write-network-long
3126 (lambda (value port)
3127 (let ((v (make-uniform-vector 1 1 0)))
3128 (uniform-vector-set! v 0 (htonl value))
3129 (uniform-vector-write v port))))
3130
3131(define read-network-long
3132 (lambda (port)
3133 (let ((v (make-uniform-vector 1 1 0)))
3134 (uniform-vector-read! v port)
3135 (ntohl (uniform-vector-ref v 0)))))
3136
3137** If inet-aton fails, it now throws an error with key 'misc-error
3138instead of 'system-error, since errno is not relevant.
3139
3140** Certain gethostbyname/gethostbyaddr failures now throw errors with
3141specific keys instead of 'system-error. The latter is inappropriate
3142since errno will not have been set. The keys are:
afe5177e 3143'host-not-found, 'try-again, 'no-recovery and 'no-data.
5c11cc9d
GH
3144
3145** sethostent, setnetent, setprotoent, setservent: now take an
3146optional argument STAYOPEN, which specifies whether the database
3147remains open after a database entry is accessed randomly (e.g., using
3148gethostbyname for the hosts database.) The default is #f. Previously
3149#t was always used.
3150
cc36e791 3151\f
43fa9a05
JB
3152Changes since Guile 1.3.2:
3153
0fdcbcaa
MD
3154* Changes to the stand-alone interpreter
3155
3156** Debugger
3157
3158An initial version of the Guile debugger written by Chris Hanson has
3159been added. The debugger is still under development but is included
3160in the distribution anyway since it is already quite useful.
3161
3162Type
3163
3164 (debug)
3165
3166after an error to enter the debugger. Type `help' inside the debugger
3167for a description of available commands.
3168
3169If you prefer to have stack frames numbered and printed in
3170anti-chronological order and prefer up in the stack to be down on the
3171screen as is the case in gdb, you can put
3172
3173 (debug-enable 'backwards)
3174
3175in your .guile startup file. (However, this means that Guile can't
3176use indentation to indicate stack level.)
3177
3178The debugger is autoloaded into Guile at the first use.
3179
3180** Further enhancements to backtraces
3181
3182There is a new debug option `width' which controls the maximum width
3183on the screen of printed stack frames. Fancy printing parameters
3184("level" and "length" as in Common LISP) are adaptively adjusted for
3185each stack frame to give maximum information while still fitting
3186within the bounds. If the stack frame can't be made to fit by
3187adjusting parameters, it is simply cut off at the end. This is marked
3188with a `$'.
3189
3190** Some modules are now only loaded when the repl is started
3191
3192The modules (ice-9 debug), (ice-9 session), (ice-9 threads) and (ice-9
3193regex) are now loaded into (guile-user) only if the repl has been
3194started. The effect is that the startup time for scripts has been
3195reduced to 30% of what it was previously.
3196
3197Correctly written scripts load the modules they require at the top of
3198the file and should not be affected by this change.
3199
ece41168
MD
3200** Hooks are now represented as smobs
3201
6822fe53
MD
3202* Changes to Scheme functions and syntax
3203
0ce204b0
MV
3204** Readline support has changed again.
3205
3206The old (readline-activator) module is gone. Use (ice-9 readline)
3207instead, which now contains all readline functionality. So the code
3208to activate readline is now
3209
3210 (use-modules (ice-9 readline))
3211 (activate-readline)
3212
3213This should work at any time, including from the guile prompt.
3214
5d195868
JB
3215To avoid confusion about the terms of Guile's license, please only
3216enable readline for your personal use; please don't make it the
3217default for others. Here is why we make this rather odd-sounding
3218request:
3219
3220Guile is normally licensed under a weakened form of the GNU General
3221Public License, which allows you to link code with Guile without
3222placing that code under the GPL. This exception is important to some
3223people.
3224
3225However, since readline is distributed under the GNU General Public
3226License, when you link Guile with readline, either statically or
3227dynamically, you effectively change Guile's license to the strict GPL.
3228Whenever you link any strictly GPL'd code into Guile, uses of Guile
3229which are normally permitted become forbidden. This is a rather
3230non-obvious consequence of the licensing terms.
3231
3232So, to make sure things remain clear, please let people choose for
3233themselves whether to link GPL'd libraries like readline with Guile.
3234
25b0654e
JB
3235** regexp-substitute/global has changed slightly, but incompatibly.
3236
3237If you include a function in the item list, the string of the match
3238object it receives is the same string passed to
3239regexp-substitute/global, not some suffix of that string.
3240Correspondingly, the match's positions are relative to the entire
3241string, not the suffix.
3242
3243If the regexp can match the empty string, the way matches are chosen
3244from the string has changed. regexp-substitute/global recognizes the
3245same set of matches that list-matches does; see below.
3246
3247** New function: list-matches REGEXP STRING [FLAGS]
3248
3249Return a list of match objects, one for every non-overlapping, maximal
3250match of REGEXP in STRING. The matches appear in left-to-right order.
3251list-matches only reports matches of the empty string if there are no
3252other matches which begin on, end at, or include the empty match's
3253position.
3254
3255If present, FLAGS is passed as the FLAGS argument to regexp-exec.
3256
3257** New function: fold-matches REGEXP STRING INIT PROC [FLAGS]
3258
3259For each match of REGEXP in STRING, apply PROC to the match object,
3260and the last value PROC returned, or INIT for the first call. Return
3261the last value returned by PROC. We apply PROC to the matches as they
3262appear from left to right.
3263
3264This function recognizes matches according to the same criteria as
3265list-matches.
3266
3267Thus, you could define list-matches like this:
3268
3269 (define (list-matches regexp string . flags)
3270 (reverse! (apply fold-matches regexp string '() cons flags)))
3271
3272If present, FLAGS is passed as the FLAGS argument to regexp-exec.
3273
bc848f7f
MD
3274** Hooks
3275
3276*** New function: hook? OBJ
3277
3278Return #t if OBJ is a hook, otherwise #f.
3279
ece41168
MD
3280*** New function: make-hook-with-name NAME [ARITY]
3281
3282Return a hook with name NAME and arity ARITY. The default value for
3283ARITY is 0. The only effect of NAME is that it will appear when the
3284hook object is printed to ease debugging.
3285
bc848f7f
MD
3286*** New function: hook-empty? HOOK
3287
3288Return #t if HOOK doesn't contain any procedures, otherwise #f.
3289
3290*** New function: hook->list HOOK
3291
3292Return a list of the procedures that are called when run-hook is
3293applied to HOOK.
3294
b074884f
JB
3295** `map' signals an error if its argument lists are not all the same length.
3296
3297This is the behavior required by R5RS, so this change is really a bug
3298fix. But it seems to affect a lot of people's code, so we're
3299mentioning it here anyway.
3300
6822fe53
MD
3301** Print-state handling has been made more transparent
3302
3303Under certain circumstances, ports are represented as a port with an
3304associated print state. Earlier, this pair was represented as a pair
3305(see "Some magic has been added to the printer" below). It is now
3306indistinguishable (almost; see `get-print-state') from a port on the
3307user level.
3308
3309*** New function: port-with-print-state OUTPUT-PORT PRINT-STATE
3310
3311Return a new port with the associated print state PRINT-STATE.
3312
3313*** New function: get-print-state OUTPUT-PORT
3314
3315Return the print state associated with this port if it exists,
3316otherwise return #f.
3317
340a8770 3318*** New function: directory-stream? OBJECT
77242ff9 3319
340a8770 3320Returns true iff OBJECT is a directory stream --- the sort of object
77242ff9
GH
3321returned by `opendir'.
3322
0fdcbcaa
MD
3323** New function: using-readline?
3324
3325Return #t if readline is in use in the current repl.
3326
26405bc1
MD
3327** structs will be removed in 1.4
3328
3329Structs will be replaced in Guile 1.4. We will merge GOOPS into Guile
3330and use GOOPS objects as the fundamental record type.
3331
49199eaa
MD
3332* Changes to the scm_ interface
3333
26405bc1
MD
3334** structs will be removed in 1.4
3335
3336The entire current struct interface (struct.c, struct.h) will be
3337replaced in Guile 1.4. We will merge GOOPS into libguile and use
3338GOOPS objects as the fundamental record type.
3339
49199eaa
MD
3340** The internal representation of subr's has changed
3341
3342Instead of giving a hint to the subr name, the CAR field of the subr
3343now contains an index to a subr entry in scm_subr_table.
3344
3345*** New variable: scm_subr_table
3346
3347An array of subr entries. A subr entry contains the name, properties
3348and documentation associated with the subr. The properties and
3349documentation slots are not yet used.
3350
3351** A new scheme for "forwarding" calls to a builtin to a generic function
3352
3353It is now possible to extend the functionality of some Guile
3354primitives by letting them defer a call to a GOOPS generic function on
240ed66f 3355argument mismatch. This means that there is no loss of efficiency in
daf516d6 3356normal evaluation.
49199eaa
MD
3357
3358Example:
3359
daf516d6 3360 (use-modules (oop goops)) ; Must be GOOPS version 0.2.
49199eaa
MD
3361 (define-method + ((x <string>) (y <string>))
3362 (string-append x y))
3363
86a4d62e
MD
3364+ will still be as efficient as usual in numerical calculations, but
3365can also be used for concatenating strings.
49199eaa 3366
86a4d62e 3367Who will be the first one to extend Guile's numerical tower to
daf516d6
MD
3368rationals? :) [OK, there a few other things to fix before this can
3369be made in a clean way.]
49199eaa
MD
3370
3371*** New snarf macros for defining primitives: SCM_GPROC, SCM_GPROC1
3372
3373 New macro: SCM_GPROC (CNAME, SNAME, REQ, OPT, VAR, CFUNC, GENERIC)
3374
3375 New macro: SCM_GPROC1 (CNAME, SNAME, TYPE, CFUNC, GENERIC)
3376
d02cafe7 3377These do the same job as SCM_PROC and SCM_PROC1, but they also define
49199eaa
MD
3378a variable GENERIC which can be used by the dispatch macros below.
3379
3380[This is experimental code which may change soon.]
3381
3382*** New macros for forwarding control to a generic on arg type error
3383
3384 New macro: SCM_WTA_DISPATCH_1 (GENERIC, ARG1, POS, SUBR)
3385
3386 New macro: SCM_WTA_DISPATCH_2 (GENERIC, ARG1, ARG2, POS, SUBR)
3387
3388These correspond to the scm_wta function call, and have the same
3389behaviour until the user has called the GOOPS primitive
3390`enable-primitive-generic!'. After that, these macros will apply the
3391generic function GENERIC to the argument(s) instead of calling
3392scm_wta.
3393
3394[This is experimental code which may change soon.]
3395
3396*** New macros for argument testing with generic dispatch
3397
3398 New macro: SCM_GASSERT1 (COND, GENERIC, ARG1, POS, SUBR)
3399
3400 New macro: SCM_GASSERT2 (COND, GENERIC, ARG1, ARG2, POS, SUBR)
3401
3402These correspond to the SCM_ASSERT macro, but will defer control to
3403GENERIC on error after `enable-primitive-generic!' has been called.
3404
3405[This is experimental code which may change soon.]
3406
3407** New function: SCM scm_eval_body (SCM body, SCM env)
3408
3409Evaluates the body of a special form.
3410
3411** The internal representation of struct's has changed
3412
3413Previously, four slots were allocated for the procedure(s) of entities
3414and operators. The motivation for this representation had to do with
3415the structure of the evaluator, the wish to support tail-recursive
3416generic functions, and efficiency. Since the generic function
3417dispatch mechanism has changed, there is no longer a need for such an
3418expensive representation, and the representation has been simplified.
3419
3420This should not make any difference for most users.
3421
3422** GOOPS support has been cleaned up.
3423
3424Some code has been moved from eval.c to objects.c and code in both of
3425these compilation units has been cleaned up and better structured.
3426
3427*** New functions for applying generic functions
3428
3429 New function: SCM scm_apply_generic (GENERIC, ARGS)
3430 New function: SCM scm_call_generic_0 (GENERIC)
3431 New function: SCM scm_call_generic_1 (GENERIC, ARG1)
3432 New function: SCM scm_call_generic_2 (GENERIC, ARG1, ARG2)
3433 New function: SCM scm_call_generic_3 (GENERIC, ARG1, ARG2, ARG3)
3434
ece41168
MD
3435** Deprecated function: scm_make_named_hook
3436
3437It is now replaced by:
3438
3439** New function: SCM scm_create_hook (const char *name, int arity)
3440
3441Creates a hook in the same way as make-hook above but also
3442binds a variable named NAME to it.
3443
3444This is the typical way of creating a hook from C code.
3445
3446Currently, the variable is created in the "current" module.
3447This might change when we get the new module system.
3448
3449[The behaviour is identical to scm_make_named_hook.]
3450
3451
43fa9a05 3452\f
f3227c7a
JB
3453Changes since Guile 1.3:
3454
6ca345f3
JB
3455* Changes to mailing lists
3456
3457** Some of the Guile mailing lists have moved to sourceware.cygnus.com.
3458
3459See the README file to find current addresses for all the Guile
3460mailing lists.
3461
d77fb593
JB
3462* Changes to the distribution
3463
1d335863
JB
3464** Readline support is no longer included with Guile by default.
3465
3466Based on the different license terms of Guile and Readline, we
3467concluded that Guile should not *by default* cause the linking of
3468Readline into an application program. Readline support is now offered
3469as a separate module, which is linked into an application only when
3470you explicitly specify it.
3471
3472Although Guile is GNU software, its distribution terms add a special
3473exception to the usual GNU General Public License (GPL). Guile's
3474license includes a clause that allows you to link Guile with non-free
3475programs. We add this exception so as not to put Guile at a
3476disadvantage vis-a-vis other extensibility packages that support other
3477languages.
3478
3479In contrast, the GNU Readline library is distributed under the GNU
3480General Public License pure and simple. This means that you may not
3481link Readline, even dynamically, into an application unless it is
3482distributed under a free software license that is compatible the GPL.
3483
3484Because of this difference in distribution terms, an application that
3485can use Guile may not be able to use Readline. Now users will be
3486explicitly offered two independent decisions about the use of these
3487two packages.
d77fb593 3488
0e8a8468
MV
3489You can activate the readline support by issuing
3490
3491 (use-modules (readline-activator))
3492 (activate-readline)
3493
3494from your ".guile" file, for example.
3495
e4eae9b1
MD
3496* Changes to the stand-alone interpreter
3497
67ad463a
MD
3498** All builtins now print as primitives.
3499Previously builtin procedures not belonging to the fundamental subr
3500types printed as #<compiled closure #<primitive-procedure gsubr-apply>>.
3501Now, they print as #<primitive-procedure NAME>.
3502
3503** Backtraces slightly more intelligible.
3504gsubr-apply and macro transformer application frames no longer appear
3505in backtraces.
3506
69c6acbb
JB
3507* Changes to Scheme functions and syntax
3508
2a52b429
MD
3509** Guile now correctly handles internal defines by rewriting them into
3510their equivalent letrec. Previously, internal defines would
3511incrementally add to the innermost environment, without checking
3512whether the restrictions specified in RnRS were met. This lead to the
3513correct behaviour when these restriction actually were met, but didn't
3514catch all illegal uses. Such an illegal use could lead to crashes of
3515the Guile interpreter or or other unwanted results. An example of
3516incorrect internal defines that made Guile behave erratically:
3517
3518 (let ()
3519 (define a 1)
3520 (define (b) a)
3521 (define c (1+ (b)))
3522 (define d 3)
3523
3524 (b))
3525
3526 => 2
3527
3528The problem with this example is that the definition of `c' uses the
3529value of `b' directly. This confuses the meoization machine of Guile
3530so that the second call of `b' (this time in a larger environment that
3531also contains bindings for `c' and `d') refers to the binding of `c'
3532instead of `a'. You could also make Guile crash with a variation on
3533this theme:
3534
3535 (define (foo flag)
3536 (define a 1)
3537 (define (b flag) (if flag a 1))
3538 (define c (1+ (b flag)))
3539 (define d 3)
3540
3541 (b #t))
3542
3543 (foo #f)
3544 (foo #t)
3545
3546From now on, Guile will issue an `Unbound variable: b' error message
3547for both examples.
3548
36d3d540
MD
3549** Hooks
3550
3551A hook contains a list of functions which should be called on
3552particular occasions in an existing program. Hooks are used for
3553customization.
3554
3555A window manager might have a hook before-window-map-hook. The window
3556manager uses the function run-hooks to call all functions stored in
3557before-window-map-hook each time a window is mapped. The user can
3558store functions in the hook using add-hook!.
3559
3560In Guile, hooks are first class objects.
3561
3562*** New function: make-hook [N_ARGS]
3563
3564Return a hook for hook functions which can take N_ARGS arguments.
3565The default value for N_ARGS is 0.
3566
ad91d6c3
MD
3567(See also scm_make_named_hook below.)
3568
36d3d540
MD
3569*** New function: add-hook! HOOK PROC [APPEND_P]
3570
3571Put PROC at the beginning of the list of functions stored in HOOK.
3572If APPEND_P is supplied, and non-false, put PROC at the end instead.
3573
3574PROC must be able to take the number of arguments specified when the
3575hook was created.
3576
3577If PROC already exists in HOOK, then remove it first.
3578
3579*** New function: remove-hook! HOOK PROC
3580
3581Remove PROC from the list of functions in HOOK.
3582
3583*** New function: reset-hook! HOOK
3584
3585Clear the list of hook functions stored in HOOK.
3586
3587*** New function: run-hook HOOK ARG1 ...
3588
3589Run all hook functions stored in HOOK with arguments ARG1 ... .
3590The number of arguments supplied must correspond to the number given
3591when the hook was created.
3592
56a19408
MV
3593** The function `dynamic-link' now takes optional keyword arguments.
3594 The only keyword argument that is currently defined is `:global
3595 BOOL'. With it, you can control whether the shared library will be
3596 linked in global mode or not. In global mode, the symbols from the
3597 linked library can be used to resolve references from other
3598 dynamically linked libraries. In non-global mode, the linked
3599 library is essentially invisible and can only be accessed via
3600 `dynamic-func', etc. The default is now to link in global mode.
3601 Previously, the default has been non-global mode.
3602
3603 The `#:global' keyword is only effective on platforms that support
3604 the dlopen family of functions.
3605
ad226f25 3606** New function `provided?'
b7e13f65
JB
3607
3608 - Function: provided? FEATURE
3609 Return true iff FEATURE is supported by this installation of
3610 Guile. FEATURE must be a symbol naming a feature; the global
3611 variable `*features*' is a list of available features.
3612
ad226f25
JB
3613** Changes to the module (ice-9 expect):
3614
3615*** The expect-strings macro now matches `$' in a regular expression
3616 only at a line-break or end-of-file by default. Previously it would
ab711359
JB
3617 match the end of the string accumulated so far. The old behaviour
3618 can be obtained by setting the variable `expect-strings-exec-flags'
3619 to 0.
ad226f25
JB
3620
3621*** The expect-strings macro now uses a variable `expect-strings-exec-flags'
3622 for the regexp-exec flags. If `regexp/noteol' is included, then `$'
3623 in a regular expression will still match before a line-break or
3624 end-of-file. The default is `regexp/noteol'.
3625
6c0201ad 3626*** The expect-strings macro now uses a variable
ad226f25
JB
3627 `expect-strings-compile-flags' for the flags to be supplied to
3628 `make-regexp'. The default is `regexp/newline', which was previously
3629 hard-coded.
3630
3631*** The expect macro now supplies two arguments to a match procedure:
ab711359
JB
3632 the current accumulated string and a flag to indicate whether
3633 end-of-file has been reached. Previously only the string was supplied.
3634 If end-of-file is reached, the match procedure will be called an
3635 additional time with the same accumulated string as the previous call
3636 but with the flag set.
ad226f25 3637
b7e13f65
JB
3638** New module (ice-9 format), implementing the Common Lisp `format' function.
3639
3640This code, and the documentation for it that appears here, was
3641borrowed from SLIB, with minor adaptations for Guile.
3642
3643 - Function: format DESTINATION FORMAT-STRING . ARGUMENTS
3644 An almost complete implementation of Common LISP format description
3645 according to the CL reference book `Common LISP' from Guy L.
3646 Steele, Digital Press. Backward compatible to most of the
3647 available Scheme format implementations.
3648
3649 Returns `#t', `#f' or a string; has side effect of printing
3650 according to FORMAT-STRING. If DESTINATION is `#t', the output is
3651 to the current output port and `#t' is returned. If DESTINATION
3652 is `#f', a formatted string is returned as the result of the call.
3653 NEW: If DESTINATION is a string, DESTINATION is regarded as the
3654 format string; FORMAT-STRING is then the first argument and the
3655 output is returned as a string. If DESTINATION is a number, the
3656 output is to the current error port if available by the
3657 implementation. Otherwise DESTINATION must be an output port and
3658 `#t' is returned.
3659
3660 FORMAT-STRING must be a string. In case of a formatting error
3661 format returns `#f' and prints a message on the current output or
3662 error port. Characters are output as if the string were output by
3663 the `display' function with the exception of those prefixed by a
3664 tilde (~). For a detailed description of the FORMAT-STRING syntax
3665 please consult a Common LISP format reference manual. For a test
3666 suite to verify this format implementation load `formatst.scm'.
3667 Please send bug reports to `lutzeb@cs.tu-berlin.de'.
3668
3669 Note: `format' is not reentrant, i.e. only one `format'-call may
3670 be executed at a time.
3671
3672
3673*** Format Specification (Format version 3.0)
3674
3675 Please consult a Common LISP format reference manual for a detailed
3676description of the format string syntax. For a demonstration of the
3677implemented directives see `formatst.scm'.
3678
3679 This implementation supports directive parameters and modifiers (`:'
3680and `@' characters). Multiple parameters must be separated by a comma
3681(`,'). Parameters can be numerical parameters (positive or negative),
3682character parameters (prefixed by a quote character (`''), variable
3683parameters (`v'), number of rest arguments parameter (`#'), empty and
3684default parameters. Directive characters are case independent. The
3685general form of a directive is:
3686
3687DIRECTIVE ::= ~{DIRECTIVE-PARAMETER,}[:][@]DIRECTIVE-CHARACTER
3688
3689DIRECTIVE-PARAMETER ::= [ [-|+]{0-9}+ | 'CHARACTER | v | # ]
3690
3691*** Implemented CL Format Control Directives
3692
3693 Documentation syntax: Uppercase characters represent the
3694corresponding control directive characters. Lowercase characters
3695represent control directive parameter descriptions.
3696
3697`~A'
3698 Any (print as `display' does).
3699 `~@A'
3700 left pad.
3701
3702 `~MINCOL,COLINC,MINPAD,PADCHARA'
3703 full padding.
3704
3705`~S'
3706 S-expression (print as `write' does).
3707 `~@S'
3708 left pad.
3709
3710 `~MINCOL,COLINC,MINPAD,PADCHARS'
3711 full padding.
3712
3713`~D'
3714 Decimal.
3715 `~@D'
3716 print number sign always.
3717
3718 `~:D'
3719 print comma separated.
3720
3721 `~MINCOL,PADCHAR,COMMACHARD'
3722 padding.
3723
3724`~X'
3725 Hexadecimal.
3726 `~@X'
3727 print number sign always.
3728
3729 `~:X'
3730 print comma separated.
3731
3732 `~MINCOL,PADCHAR,COMMACHARX'
3733 padding.
3734
3735`~O'
3736 Octal.
3737 `~@O'
3738 print number sign always.
3739
3740 `~:O'
3741 print comma separated.
3742
3743 `~MINCOL,PADCHAR,COMMACHARO'
3744 padding.
3745
3746`~B'
3747 Binary.
3748 `~@B'
3749 print number sign always.
3750
3751 `~:B'
3752 print comma separated.
3753
3754 `~MINCOL,PADCHAR,COMMACHARB'
3755 padding.
3756
3757`~NR'
3758 Radix N.
3759 `~N,MINCOL,PADCHAR,COMMACHARR'
3760 padding.
3761
3762`~@R'
3763 print a number as a Roman numeral.
3764
3765`~:@R'
3766 print a number as an "old fashioned" Roman numeral.
3767
3768`~:R'
3769 print a number as an ordinal English number.
3770
3771`~:@R'
3772 print a number as a cardinal English number.
3773
3774`~P'
3775 Plural.
3776 `~@P'
3777 prints `y' and `ies'.
3778
3779 `~:P'
3780 as `~P but jumps 1 argument backward.'
3781
3782 `~:@P'
3783 as `~@P but jumps 1 argument backward.'
3784
3785`~C'
3786 Character.
3787 `~@C'
3788 prints a character as the reader can understand it (i.e. `#\'
3789 prefixing).
3790
3791 `~:C'
3792 prints a character as emacs does (eg. `^C' for ASCII 03).
3793
3794`~F'
3795 Fixed-format floating-point (prints a flonum like MMM.NNN).
3796 `~WIDTH,DIGITS,SCALE,OVERFLOWCHAR,PADCHARF'
3797 `~@F'
3798 If the number is positive a plus sign is printed.
3799
3800`~E'
3801 Exponential floating-point (prints a flonum like MMM.NNN`E'EE).
3802 `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARE'
3803 `~@E'
3804 If the number is positive a plus sign is printed.
3805
3806`~G'
3807 General floating-point (prints a flonum either fixed or
3808 exponential).
3809 `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARG'
3810 `~@G'
3811 If the number is positive a plus sign is printed.
3812
3813`~$'
3814 Dollars floating-point (prints a flonum in fixed with signs
3815 separated).
3816 `~DIGITS,SCALE,WIDTH,PADCHAR$'
3817 `~@$'
3818 If the number is positive a plus sign is printed.
3819
3820 `~:@$'
3821 A sign is always printed and appears before the padding.
3822
3823 `~:$'
3824 The sign appears before the padding.
3825
3826`~%'
3827 Newline.
3828 `~N%'
3829 print N newlines.
3830
3831`~&'
3832 print newline if not at the beginning of the output line.
3833 `~N&'
3834 prints `~&' and then N-1 newlines.
3835
3836`~|'
3837 Page Separator.
3838 `~N|'
3839 print N page separators.
3840
3841`~~'
3842 Tilde.
3843 `~N~'
3844 print N tildes.
3845
3846`~'<newline>
3847 Continuation Line.
3848 `~:'<newline>
3849 newline is ignored, white space left.
3850
3851 `~@'<newline>
3852 newline is left, white space ignored.
3853
3854`~T'
3855 Tabulation.
3856 `~@T'
3857 relative tabulation.
3858
3859 `~COLNUM,COLINCT'
3860 full tabulation.
3861
3862`~?'
3863 Indirection (expects indirect arguments as a list).
3864 `~@?'
3865 extracts indirect arguments from format arguments.
3866
3867`~(STR~)'
3868 Case conversion (converts by `string-downcase').
3869 `~:(STR~)'
3870 converts by `string-capitalize'.
3871
3872 `~@(STR~)'
3873 converts by `string-capitalize-first'.
3874
3875 `~:@(STR~)'
3876 converts by `string-upcase'.
3877
3878`~*'
3879 Argument Jumping (jumps 1 argument forward).
3880 `~N*'
3881 jumps N arguments forward.
3882
3883 `~:*'
3884 jumps 1 argument backward.
3885
3886 `~N:*'
3887 jumps N arguments backward.
3888
3889 `~@*'
3890 jumps to the 0th argument.
3891
3892 `~N@*'
3893 jumps to the Nth argument (beginning from 0)
3894
3895`~[STR0~;STR1~;...~;STRN~]'
3896 Conditional Expression (numerical clause conditional).
3897 `~N['
3898 take argument from N.
3899
3900 `~@['
3901 true test conditional.
3902
3903 `~:['
3904 if-else-then conditional.
3905
3906 `~;'
3907 clause separator.
3908
3909 `~:;'
3910 default clause follows.
3911
3912`~{STR~}'
3913 Iteration (args come from the next argument (a list)).
3914 `~N{'
3915 at most N iterations.
3916
3917 `~:{'
3918 args from next arg (a list of lists).
3919
3920 `~@{'
3921 args from the rest of arguments.
3922
3923 `~:@{'
3924 args from the rest args (lists).
3925
3926`~^'
3927 Up and out.
3928 `~N^'
3929 aborts if N = 0
3930
3931 `~N,M^'
3932 aborts if N = M
3933
3934 `~N,M,K^'
3935 aborts if N <= M <= K
3936
3937*** Not Implemented CL Format Control Directives
3938
3939`~:A'
3940 print `#f' as an empty list (see below).
3941
3942`~:S'
3943 print `#f' as an empty list (see below).
3944
3945`~<~>'
3946 Justification.
3947
3948`~:^'
3949 (sorry I don't understand its semantics completely)
3950
3951*** Extended, Replaced and Additional Control Directives
3952
3953`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHD'
3954`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHX'
3955`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHO'
3956`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHB'
3957`~N,MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHR'
3958 COMMAWIDTH is the number of characters between two comma
3959 characters.
3960
3961`~I'
3962 print a R4RS complex number as `~F~@Fi' with passed parameters for
3963 `~F'.
3964
3965`~Y'
3966 Pretty print formatting of an argument for scheme code lists.
3967
3968`~K'
3969 Same as `~?.'
3970
3971`~!'
3972 Flushes the output if format DESTINATION is a port.
3973
3974`~_'
3975 Print a `#\space' character
3976 `~N_'
3977 print N `#\space' characters.
3978
3979`~/'
3980 Print a `#\tab' character
3981 `~N/'
3982 print N `#\tab' characters.
3983
3984`~NC'
3985 Takes N as an integer representation for a character. No arguments
3986 are consumed. N is converted to a character by `integer->char'. N
3987 must be a positive decimal number.
3988
3989`~:S'
3990 Print out readproof. Prints out internal objects represented as
3991 `#<...>' as strings `"#<...>"' so that the format output can always
3992 be processed by `read'.
3993
3994`~:A'
3995 Print out readproof. Prints out internal objects represented as
3996 `#<...>' as strings `"#<...>"' so that the format output can always
3997 be processed by `read'.
3998
3999`~Q'
4000 Prints information and a copyright notice on the format
4001 implementation.
4002 `~:Q'
4003 prints format version.
4004
4005`~F, ~E, ~G, ~$'
4006 may also print number strings, i.e. passing a number as a string
4007 and format it accordingly.
4008
4009*** Configuration Variables
4010
4011 The format module exports some configuration variables to suit the
4012systems and users needs. There should be no modification necessary for
4013the configuration that comes with Guile. Format detects automatically
4014if the running scheme system implements floating point numbers and
4015complex numbers.
4016
4017format:symbol-case-conv
4018 Symbols are converted by `symbol->string' so the case type of the
4019 printed symbols is implementation dependent.
4020 `format:symbol-case-conv' is a one arg closure which is either
4021 `#f' (no conversion), `string-upcase', `string-downcase' or
4022 `string-capitalize'. (default `#f')
4023
4024format:iobj-case-conv
4025 As FORMAT:SYMBOL-CASE-CONV but applies for the representation of
4026 implementation internal objects. (default `#f')
4027
4028format:expch
4029 The character prefixing the exponent value in `~E' printing.
4030 (default `#\E')
4031
4032*** Compatibility With Other Format Implementations
4033
4034SLIB format 2.x:
4035 See `format.doc'.
4036
4037SLIB format 1.4:
4038 Downward compatible except for padding support and `~A', `~S',
4039 `~P', `~X' uppercase printing. SLIB format 1.4 uses C-style
4040 `printf' padding support which is completely replaced by the CL
4041 `format' padding style.
4042
4043MIT C-Scheme 7.1:
4044 Downward compatible except for `~', which is not documented
4045 (ignores all characters inside the format string up to a newline
4046 character). (7.1 implements `~a', `~s', ~NEWLINE, `~~', `~%',
4047 numerical and variable parameters and `:/@' modifiers in the CL
4048 sense).
4049
4050Elk 1.5/2.0:
4051 Downward compatible except for `~A' and `~S' which print in
4052 uppercase. (Elk implements `~a', `~s', `~~', and `~%' (no
4053 directive parameters or modifiers)).
4054
4055Scheme->C 01nov91:
4056 Downward compatible except for an optional destination parameter:
4057 S2C accepts a format call without a destination which returns a
4058 formatted string. This is equivalent to a #f destination in S2C.
4059 (S2C implements `~a', `~s', `~c', `~%', and `~~' (no directive
4060 parameters or modifiers)).
4061
4062
e7d37b0a 4063** Changes to string-handling functions.
b7e13f65 4064
e7d37b0a 4065These functions were added to support the (ice-9 format) module, above.
b7e13f65 4066
e7d37b0a
JB
4067*** New function: string-upcase STRING
4068*** New function: string-downcase STRING
b7e13f65 4069
e7d37b0a
JB
4070These are non-destructive versions of the existing string-upcase! and
4071string-downcase! functions.
b7e13f65 4072
e7d37b0a
JB
4073*** New function: string-capitalize! STRING
4074*** New function: string-capitalize STRING
4075
4076These functions convert the first letter of each word in the string to
4077upper case. Thus:
4078
4079 (string-capitalize "howdy there")
4080 => "Howdy There"
4081
4082As with the other functions, string-capitalize! modifies the string in
4083place, while string-capitalize returns a modified copy of its argument.
4084
4085*** New function: string-ci->symbol STRING
4086
4087Return a symbol whose name is STRING, but having the same case as if
4088the symbol had be read by `read'.
4089
4090Guile can be configured to be sensitive or insensitive to case
4091differences in Scheme identifiers. If Guile is case-insensitive, all
4092symbols are converted to lower case on input. The `string-ci->symbol'
4093function returns a symbol whose name in STRING, transformed as Guile
4094would if STRING were input.
4095
4096*** New function: substring-move! STRING1 START END STRING2 START
4097
4098Copy the substring of STRING1 from START (inclusive) to END
4099(exclusive) to STRING2 at START. STRING1 and STRING2 may be the same
4100string, and the source and destination areas may overlap; in all
4101cases, the function behaves as if all the characters were copied
4102simultanously.
4103
6c0201ad 4104*** Extended functions: substring-move-left! substring-move-right!
e7d37b0a
JB
4105
4106These functions now correctly copy arbitrarily overlapping substrings;
4107they are both synonyms for substring-move!.
b7e13f65 4108
b7e13f65 4109
deaceb4e
JB
4110** New module (ice-9 getopt-long), with the function `getopt-long'.
4111
4112getopt-long is a function for parsing command-line arguments in a
4113manner consistent with other GNU programs.
4114
4115(getopt-long ARGS GRAMMAR)
4116Parse the arguments ARGS according to the argument list grammar GRAMMAR.
4117
4118ARGS should be a list of strings. Its first element should be the
4119name of the program; subsequent elements should be the arguments
4120that were passed to the program on the command line. The
4121`program-arguments' procedure returns a list of this form.
4122
4123GRAMMAR is a list of the form:
4124((OPTION (PROPERTY VALUE) ...) ...)
4125
4126Each OPTION should be a symbol. `getopt-long' will accept a
4127command-line option named `--OPTION'.
4128Each option can have the following (PROPERTY VALUE) pairs:
4129
4130 (single-char CHAR) --- Accept `-CHAR' as a single-character
4131 equivalent to `--OPTION'. This is how to specify traditional
4132 Unix-style flags.
4133 (required? BOOL) --- If BOOL is true, the option is required.
4134 getopt-long will raise an error if it is not found in ARGS.
4135 (value BOOL) --- If BOOL is #t, the option accepts a value; if
4136 it is #f, it does not; and if it is the symbol
4137 `optional', the option may appear in ARGS with or
6c0201ad 4138 without a value.
deaceb4e
JB
4139 (predicate FUNC) --- If the option accepts a value (i.e. you
4140 specified `(value #t)' for this option), then getopt
4141 will apply FUNC to the value, and throw an exception
4142 if it returns #f. FUNC should be a procedure which
4143 accepts a string and returns a boolean value; you may
4144 need to use quasiquotes to get it into GRAMMAR.
4145
4146The (PROPERTY VALUE) pairs may occur in any order, but each
4147property may occur only once. By default, options do not have
4148single-character equivalents, are not required, and do not take
4149values.
4150
4151In ARGS, single-character options may be combined, in the usual
4152Unix fashion: ("-x" "-y") is equivalent to ("-xy"). If an option
4153accepts values, then it must be the last option in the
4154combination; the value is the next argument. So, for example, using
4155the following grammar:
4156 ((apples (single-char #\a))
4157 (blimps (single-char #\b) (value #t))
4158 (catalexis (single-char #\c) (value #t)))
4159the following argument lists would be acceptable:
4160 ("-a" "-b" "bang" "-c" "couth") ("bang" and "couth" are the values
4161 for "blimps" and "catalexis")
4162 ("-ab" "bang" "-c" "couth") (same)
4163 ("-ac" "couth" "-b" "bang") (same)
4164 ("-abc" "couth" "bang") (an error, since `-b' is not the
4165 last option in its combination)
4166
4167If an option's value is optional, then `getopt-long' decides
4168whether it has a value by looking at what follows it in ARGS. If
4169the next element is a string, and it does not appear to be an
4170option itself, then that string is the option's value.
4171
4172The value of a long option can appear as the next element in ARGS,
4173or it can follow the option name, separated by an `=' character.
4174Thus, using the same grammar as above, the following argument lists
4175are equivalent:
4176 ("--apples" "Braeburn" "--blimps" "Goodyear")
4177 ("--apples=Braeburn" "--blimps" "Goodyear")
4178 ("--blimps" "Goodyear" "--apples=Braeburn")
4179
4180If the option "--" appears in ARGS, argument parsing stops there;
4181subsequent arguments are returned as ordinary arguments, even if
4182they resemble options. So, in the argument list:
4183 ("--apples" "Granny Smith" "--" "--blimp" "Goodyear")
4184`getopt-long' will recognize the `apples' option as having the
4185value "Granny Smith", but it will not recognize the `blimp'
4186option; it will return the strings "--blimp" and "Goodyear" as
4187ordinary argument strings.
4188
4189The `getopt-long' function returns the parsed argument list as an
4190assocation list, mapping option names --- the symbols from GRAMMAR
4191--- onto their values, or #t if the option does not accept a value.
4192Unused options do not appear in the alist.
4193
4194All arguments that are not the value of any option are returned
4195as a list, associated with the empty list.
4196
4197`getopt-long' throws an exception if:
4198- it finds an unrecognized option in ARGS
4199- a required option is omitted
4200- an option that requires an argument doesn't get one
4201- an option that doesn't accept an argument does get one (this can
4202 only happen using the long option `--opt=value' syntax)
4203- an option predicate fails
4204
4205So, for example:
4206
4207(define grammar
4208 `((lockfile-dir (required? #t)
4209 (value #t)
4210 (single-char #\k)
4211 (predicate ,file-is-directory?))
4212 (verbose (required? #f)
4213 (single-char #\v)
4214 (value #f))
4215 (x-includes (single-char #\x))
6c0201ad 4216 (rnet-server (single-char #\y)
deaceb4e
JB
4217 (predicate ,string?))))
4218
6c0201ad 4219(getopt-long '("my-prog" "-vk" "/tmp" "foo1" "--x-includes=/usr/include"
deaceb4e
JB
4220 "--rnet-server=lamprod" "--" "-fred" "foo2" "foo3")
4221 grammar)
4222=> ((() "foo1" "-fred" "foo2" "foo3")
4223 (rnet-server . "lamprod")
4224 (x-includes . "/usr/include")
4225 (lockfile-dir . "/tmp")
4226 (verbose . #t))
4227
4228** The (ice-9 getopt-gnu-style) module is obsolete; use (ice-9 getopt-long).
4229
4230It will be removed in a few releases.
4231
08394899
MS
4232** New syntax: lambda*
4233** New syntax: define*
6c0201ad 4234** New syntax: define*-public
08394899
MS
4235** New syntax: defmacro*
4236** New syntax: defmacro*-public
6c0201ad 4237Guile now supports optional arguments.
08394899
MS
4238
4239`lambda*', `define*', `define*-public', `defmacro*' and
4240`defmacro*-public' are identical to the non-* versions except that
4241they use an extended type of parameter list that has the following BNF
4242syntax (parentheses are literal, square brackets indicate grouping,
4243and `*', `+' and `?' have the usual meaning):
4244
4245 ext-param-list ::= ( [identifier]* [#&optional [ext-var-decl]+]?
6c0201ad 4246 [#&key [ext-var-decl]+ [#&allow-other-keys]?]?
08394899
MS
4247 [[#&rest identifier]|[. identifier]]? ) | [identifier]
4248
6c0201ad 4249 ext-var-decl ::= identifier | ( identifier expression )
08394899
MS
4250
4251The semantics are best illustrated with the following documentation
4252and examples for `lambda*':
4253
4254 lambda* args . body
4255 lambda extended for optional and keyword arguments
6c0201ad 4256
08394899
MS
4257 lambda* creates a procedure that takes optional arguments. These
4258 are specified by putting them inside brackets at the end of the
4259 paramater list, but before any dotted rest argument. For example,
4260 (lambda* (a b #&optional c d . e) '())
4261 creates a procedure with fixed arguments a and b, optional arguments c
4262 and d, and rest argument e. If the optional arguments are omitted
4263 in a call, the variables for them are unbound in the procedure. This
4264 can be checked with the bound? macro.
4265
4266 lambda* can also take keyword arguments. For example, a procedure
4267 defined like this:
4268 (lambda* (#&key xyzzy larch) '())
4269 can be called with any of the argument lists (#:xyzzy 11)
4270 (#:larch 13) (#:larch 42 #:xyzzy 19) (). Whichever arguments
4271 are given as keywords are bound to values.
4272
4273 Optional and keyword arguments can also be given default values
4274 which they take on when they are not present in a call, by giving a
4275 two-item list in place of an optional argument, for example in:
6c0201ad 4276 (lambda* (foo #&optional (bar 42) #&key (baz 73)) (list foo bar baz))
08394899
MS
4277 foo is a fixed argument, bar is an optional argument with default
4278 value 42, and baz is a keyword argument with default value 73.
4279 Default value expressions are not evaluated unless they are needed
6c0201ad 4280 and until the procedure is called.
08394899
MS
4281
4282 lambda* now supports two more special parameter list keywords.
4283
4284 lambda*-defined procedures now throw an error by default if a
4285 keyword other than one of those specified is found in the actual
4286 passed arguments. However, specifying #&allow-other-keys
4287 immediately after the kyword argument declarations restores the
4288 previous behavior of ignoring unknown keywords. lambda* also now
4289 guarantees that if the same keyword is passed more than once, the
4290 last one passed is the one that takes effect. For example,
4291 ((lambda* (#&key (heads 0) (tails 0)) (display (list heads tails)))
4292 #:heads 37 #:tails 42 #:heads 99)
4293 would result in (99 47) being displayed.
4294
4295 #&rest is also now provided as a synonym for the dotted syntax rest
4296 argument. The argument lists (a . b) and (a #&rest b) are equivalent in
4297 all respects to lambda*. This is provided for more similarity to DSSSL,
4298 MIT-Scheme and Kawa among others, as well as for refugees from other
4299 Lisp dialects.
4300
4301Further documentation may be found in the optargs.scm file itself.
4302
4303The optional argument module also exports the macros `let-optional',
4304`let-optional*', `let-keywords', `let-keywords*' and `bound?'. These
4305are not documented here because they may be removed in the future, but
4306full documentation is still available in optargs.scm.
4307
2e132553
JB
4308** New syntax: and-let*
4309Guile now supports the `and-let*' form, described in the draft SRFI-2.
4310
4311Syntax: (land* (<clause> ...) <body> ...)
4312Each <clause> should have one of the following forms:
4313 (<variable> <expression>)
4314 (<expression>)
4315 <bound-variable>
4316Each <variable> or <bound-variable> should be an identifier. Each
4317<expression> should be a valid expression. The <body> should be a
4318possibly empty sequence of expressions, like the <body> of a
4319lambda form.
4320
4321Semantics: A LAND* expression is evaluated by evaluating the
4322<expression> or <bound-variable> of each of the <clause>s from
4323left to right. The value of the first <expression> or
4324<bound-variable> that evaluates to a false value is returned; the
4325remaining <expression>s and <bound-variable>s are not evaluated.
4326The <body> forms are evaluated iff all the <expression>s and
4327<bound-variable>s evaluate to true values.
4328
4329The <expression>s and the <body> are evaluated in an environment
4330binding each <variable> of the preceding (<variable> <expression>)
4331clauses to the value of the <expression>. Later bindings
4332shadow earlier bindings.
4333
4334Guile's and-let* macro was contributed by Michael Livshin.
4335
36d3d540
MD
4336** New sorting functions
4337
4338*** New function: sorted? SEQUENCE LESS?
ed8c8636
MD
4339Returns `#t' when the sequence argument is in non-decreasing order
4340according to LESS? (that is, there is no adjacent pair `... x y
4341...' for which `(less? y x)').
4342
4343Returns `#f' when the sequence contains at least one out-of-order
4344pair. It is an error if the sequence is neither a list nor a
4345vector.
4346
36d3d540 4347*** New function: merge LIST1 LIST2 LESS?
ed8c8636
MD
4348LIST1 and LIST2 are sorted lists.
4349Returns the sorted list of all elements in LIST1 and LIST2.
4350
4351Assume that the elements a and b1 in LIST1 and b2 in LIST2 are "equal"
4352in the sense that (LESS? x y) --> #f for x, y in {a, b1, b2},
4353and that a < b1 in LIST1. Then a < b1 < b2 in the result.
4354(Here "<" should read "comes before".)
4355
36d3d540 4356*** New procedure: merge! LIST1 LIST2 LESS?
ed8c8636
MD
4357Merges two lists, re-using the pairs of LIST1 and LIST2 to build
4358the result. If the code is compiled, and LESS? constructs no new
4359pairs, no pairs at all will be allocated. The first pair of the
4360result will be either the first pair of LIST1 or the first pair of
4361LIST2.
4362
36d3d540 4363*** New function: sort SEQUENCE LESS?
ed8c8636
MD
4364Accepts either a list or a vector, and returns a new sequence
4365which is sorted. The new sequence is the same type as the input.
4366Always `(sorted? (sort sequence less?) less?)'. The original
4367sequence is not altered in any way. The new sequence shares its
4368elements with the old one; no elements are copied.
4369
36d3d540 4370*** New procedure: sort! SEQUENCE LESS
ed8c8636
MD
4371Returns its sorted result in the original boxes. No new storage is
4372allocated at all. Proper usage: (set! slist (sort! slist <))
4373
36d3d540 4374*** New function: stable-sort SEQUENCE LESS?
ed8c8636
MD
4375Similar to `sort' but stable. That is, if "equal" elements are
4376ordered a < b in the original sequence, they will have the same order
4377in the result.
4378
36d3d540 4379*** New function: stable-sort! SEQUENCE LESS?
ed8c8636
MD
4380Similar to `sort!' but stable.
4381Uses temporary storage when sorting vectors.
4382
36d3d540 4383*** New functions: sort-list, sort-list!
ed8c8636
MD
4384Added for compatibility with scsh.
4385
36d3d540
MD
4386** New built-in random number support
4387
4388*** New function: random N [STATE]
3e8370c3
MD
4389Accepts a positive integer or real N and returns a number of the
4390same type between zero (inclusive) and N (exclusive). The values
4391returned have a uniform distribution.
4392
4393The optional argument STATE must be of the type produced by
416075f1
MD
4394`copy-random-state' or `seed->random-state'. It defaults to the value
4395of the variable `*random-state*'. This object is used to maintain the
4396state of the pseudo-random-number generator and is altered as a side
4397effect of the `random' operation.
3e8370c3 4398
36d3d540 4399*** New variable: *random-state*
3e8370c3
MD
4400Holds a data structure that encodes the internal state of the
4401random-number generator that `random' uses by default. The nature
4402of this data structure is implementation-dependent. It may be
4403printed out and successfully read back in, but may or may not
4404function correctly as a random-number state object in another
4405implementation.
4406
36d3d540 4407*** New function: copy-random-state [STATE]
3e8370c3
MD
4408Returns a new object of type suitable for use as the value of the
4409variable `*random-state*' and as a second argument to `random'.
4410If argument STATE is given, a copy of it is returned. Otherwise a
4411copy of `*random-state*' is returned.
416075f1 4412
36d3d540 4413*** New function: seed->random-state SEED
416075f1
MD
4414Returns a new object of type suitable for use as the value of the
4415variable `*random-state*' and as a second argument to `random'.
4416SEED is a string or a number. A new state is generated and
4417initialized using SEED.
3e8370c3 4418
36d3d540 4419*** New function: random:uniform [STATE]
3e8370c3
MD
4420Returns an uniformly distributed inexact real random number in the
4421range between 0 and 1.
4422
36d3d540 4423*** New procedure: random:solid-sphere! VECT [STATE]
3e8370c3
MD
4424Fills VECT with inexact real random numbers the sum of whose
4425squares is less than 1.0. Thinking of VECT as coordinates in
4426space of dimension N = `(vector-length VECT)', the coordinates are
4427uniformly distributed within the unit N-shere. The sum of the
4428squares of the numbers is returned. VECT can be either a vector
4429or a uniform vector of doubles.
4430
36d3d540 4431*** New procedure: random:hollow-sphere! VECT [STATE]
3e8370c3
MD
4432Fills VECT with inexact real random numbers the sum of whose squares
4433is equal to 1.0. Thinking of VECT as coordinates in space of
4434dimension n = `(vector-length VECT)', the coordinates are uniformly
4435distributed over the surface of the unit n-shere. VECT can be either
4436a vector or a uniform vector of doubles.
4437
36d3d540 4438*** New function: random:normal [STATE]
3e8370c3
MD
4439Returns an inexact real in a normal distribution with mean 0 and
4440standard deviation 1. For a normal distribution with mean M and
4441standard deviation D use `(+ M (* D (random:normal)))'.
4442
36d3d540 4443*** New procedure: random:normal-vector! VECT [STATE]
3e8370c3
MD
4444Fills VECT with inexact real random numbers which are independent and
4445standard normally distributed (i.e., with mean 0 and variance 1).
4446VECT can be either a vector or a uniform vector of doubles.
4447
36d3d540 4448*** New function: random:exp STATE
3e8370c3
MD
4449Returns an inexact real in an exponential distribution with mean 1.
4450For an exponential distribution with mean U use (* U (random:exp)).
4451
69c6acbb
JB
4452** The range of logand, logior, logxor, logtest, and logbit? have changed.
4453
4454These functions now operate on numbers in the range of a C unsigned
4455long.
4456
4457These functions used to operate on numbers in the range of a C signed
4458long; however, this seems inappropriate, because Guile integers don't
4459overflow.
4460
ba4ee0d6
MD
4461** New function: make-guardian
4462This is an implementation of guardians as described in
4463R. Kent Dybvig, Carl Bruggeman, and David Eby (1993) "Guardians in a
4464Generation-Based Garbage Collector" ACM SIGPLAN Conference on
4465Programming Language Design and Implementation, June 1993
4466ftp://ftp.cs.indiana.edu/pub/scheme-repository/doc/pubs/guardians.ps.gz
4467
88ceea5c
MD
4468** New functions: delq1!, delv1!, delete1!
4469These procedures behave similar to delq! and friends but delete only
4470one object if at all.
4471
55254a6a
MD
4472** New function: unread-string STRING PORT
4473Unread STRING to PORT, that is, push it back onto the port so that
4474next read operation will work on the pushed back characters.
4475
4476** unread-char can now be called multiple times
4477If unread-char is called multiple times, the unread characters will be
4478read again in last-in first-out order.
4479
9e97c52d
GH
4480** the procedures uniform-array-read! and uniform-array-write! now
4481work on any kind of port, not just ports which are open on a file.
4482
b074884f 4483** Now 'l' in a port mode requests line buffering.
9e97c52d 4484
69bc9ff3
GH
4485** The procedure truncate-file now works on string ports as well
4486as file ports. If the size argument is omitted, the current
1b9c3dae 4487file position is used.
9e97c52d 4488
c94577b4 4489** new procedure: seek PORT/FDES OFFSET WHENCE
9e97c52d
GH
4490The arguments are the same as for the old fseek procedure, but it
4491works on string ports as well as random-access file ports.
4492
4493** the fseek procedure now works on string ports, since it has been
c94577b4 4494redefined using seek.
9e97c52d
GH
4495
4496** the setvbuf procedure now uses a default size if mode is _IOFBF and
4497size is not supplied.
4498
4499** the newline procedure no longer flushes the port if it's not
4500line-buffered: previously it did if it was the current output port.
4501
4502** open-pipe and close-pipe are no longer primitive procedures, but
4503an emulation can be obtained using `(use-modules (ice-9 popen))'.
4504
4505** the freopen procedure has been removed.
4506
4507** new procedure: drain-input PORT
4508Drains PORT's read buffers (including any pushed-back characters)
4509and returns the contents as a single string.
4510
67ad463a 4511** New function: map-in-order PROC LIST1 LIST2 ...
d41b3904
MD
4512Version of `map' which guarantees that the procedure is applied to the
4513lists in serial order.
4514
67ad463a
MD
4515** Renamed `serial-array-copy!' and `serial-array-map!' to
4516`array-copy-in-order!' and `array-map-in-order!'. The old names are
4517now obsolete and will go away in release 1.5.
4518
cf7132b3 4519** New syntax: collect BODY1 ...
d41b3904
MD
4520Version of `begin' which returns a list of the results of the body
4521forms instead of the result of the last body form. In contrast to
cf7132b3 4522`begin', `collect' allows an empty body.
d41b3904 4523
e4eae9b1
MD
4524** New functions: read-history FILENAME, write-history FILENAME
4525Read/write command line history from/to file. Returns #t on success
4526and #f if an error occured.
4527
d21ffe26
JB
4528** `ls' and `lls' in module (ice-9 ls) now handle no arguments.
4529
4530These procedures return a list of definitions available in the specified
4531argument, a relative module reference. In the case of no argument,
4532`(current-module)' is now consulted for definitions to return, instead
4533of simply returning #f, the former behavior.
4534
f8c9d497
JB
4535** The #/ syntax for lists is no longer supported.
4536
4537Earlier versions of Scheme accepted this syntax, but printed a
4538warning.
4539
4540** Guile no longer consults the SCHEME_LOAD_PATH environment variable.
4541
4542Instead, you should set GUILE_LOAD_PATH to tell Guile where to find
4543modules.
4544
3ffc7a36
MD
4545* Changes to the gh_ interface
4546
4547** gh_scm2doubles
4548
4549Now takes a second argument which is the result array. If this
4550pointer is NULL, a new array is malloced (the old behaviour).
4551
4552** gh_chars2byvect, gh_shorts2svect, gh_floats2fvect, gh_scm2chars,
4553 gh_scm2shorts, gh_scm2longs, gh_scm2floats
4554
4555New functions.
4556
3e8370c3
MD
4557* Changes to the scm_ interface
4558
ad91d6c3
MD
4559** Function: scm_make_named_hook (char* name, int n_args)
4560
4561Creates a hook in the same way as make-hook above but also
4562binds a variable named NAME to it.
4563
4564This is the typical way of creating a hook from C code.
4565
ece41168
MD
4566Currently, the variable is created in the "current" module. This
4567might change when we get the new module system.
ad91d6c3 4568
16a5a9a4
MD
4569** The smob interface
4570
4571The interface for creating smobs has changed. For documentation, see
4572data-rep.info (made from guile-core/doc/data-rep.texi).
4573
4574*** Deprecated function: SCM scm_newsmob (scm_smobfuns *)
4575
4576>>> This function will be removed in 1.3.4. <<<
4577
4578It is replaced by:
4579
4580*** Function: SCM scm_make_smob_type (const char *name, scm_sizet size)
4581This function adds a new smob type, named NAME, with instance size
4582SIZE to the system. The return value is a tag that is used in
4583creating instances of the type. If SIZE is 0, then no memory will
4584be allocated when instances of the smob are created, and nothing
4585will be freed by the default free function.
6c0201ad 4586
16a5a9a4
MD
4587*** Function: void scm_set_smob_mark (long tc, SCM (*mark) (SCM))
4588This function sets the smob marking procedure for the smob type
4589specified by the tag TC. TC is the tag returned by
4590`scm_make_smob_type'.
4591
4592*** Function: void scm_set_smob_free (long tc, SCM (*mark) (SCM))
4593This function sets the smob freeing procedure for the smob type
4594specified by the tag TC. TC is the tag returned by
4595`scm_make_smob_type'.
4596
4597*** Function: void scm_set_smob_print (tc, print)
4598
4599 - Function: void scm_set_smob_print (long tc,
4600 scm_sizet (*print) (SCM,
4601 SCM,
4602 scm_print_state *))
4603
4604This function sets the smob printing procedure for the smob type
4605specified by the tag TC. TC is the tag returned by
4606`scm_make_smob_type'.
4607
4608*** Function: void scm_set_smob_equalp (long tc, SCM (*equalp) (SCM, SCM))
4609This function sets the smob equality-testing predicate for the
4610smob type specified by the tag TC. TC is the tag returned by
4611`scm_make_smob_type'.
4612
4613*** Macro: void SCM_NEWSMOB (SCM var, long tc, void *data)
4614Make VALUE contain a smob instance of the type with type code TC and
4615smob data DATA. VALUE must be previously declared as C type `SCM'.
4616
4617*** Macro: fn_returns SCM_RETURN_NEWSMOB (long tc, void *data)
4618This macro expands to a block of code that creates a smob instance
4619of the type with type code TC and smob data DATA, and returns that
4620`SCM' value. It should be the last piece of code in a block.
4621
9e97c52d
GH
4622** The interfaces for using I/O ports and implementing port types
4623(ptobs) have changed significantly. The new interface is based on
4624shared access to buffers and a new set of ptob procedures.
4625
16a5a9a4
MD
4626*** scm_newptob has been removed
4627
4628It is replaced by:
4629
4630*** Function: SCM scm_make_port_type (type_name, fill_buffer, write_flush)
4631
4632- Function: SCM scm_make_port_type (char *type_name,
4633 int (*fill_buffer) (SCM port),
4634 void (*write_flush) (SCM port));
4635
4636Similarly to the new smob interface, there is a set of function
4637setters by which the user can customize the behaviour of his port
544e9093 4638type. See ports.h (scm_set_port_XXX).
16a5a9a4 4639
9e97c52d
GH
4640** scm_strport_to_string: New function: creates a new string from
4641a string port's buffer.
4642
3e8370c3
MD
4643** Plug in interface for random number generators
4644The variable `scm_the_rng' in random.c contains a value and three
4645function pointers which together define the current random number
4646generator being used by the Scheme level interface and the random
4647number library functions.
4648
4649The user is free to replace the default generator with the generator
4650of his own choice.
4651
4652*** Variable: size_t scm_the_rng.rstate_size
4653The size of the random state type used by the current RNG
4654measured in chars.
4655
4656*** Function: unsigned long scm_the_rng.random_bits (scm_rstate *STATE)
4657Given the random STATE, return 32 random bits.
4658
4659*** Function: void scm_the_rng.init_rstate (scm_rstate *STATE, chars *S, int N)
4660Seed random state STATE using string S of length N.
4661
4662*** Function: scm_rstate *scm_the_rng.copy_rstate (scm_rstate *STATE)
4663Given random state STATE, return a malloced copy.
4664
4665** Default RNG
4666The default RNG is the MWC (Multiply With Carry) random number
4667generator described by George Marsaglia at the Department of
4668Statistics and Supercomputer Computations Research Institute, The
4669Florida State University (http://stat.fsu.edu/~geo).
4670
4671It uses 64 bits, has a period of 4578426017172946943 (4.6e18), and
4672passes all tests in the DIEHARD test suite
4673(http://stat.fsu.edu/~geo/diehard.html). The generation of 32 bits
4674costs one multiply and one add on platforms which either supports long
4675longs (gcc does this on most systems) or have 64 bit longs. The cost
4676is four multiply on other systems but this can be optimized by writing
4677scm_i_uniform32 in assembler.
4678
4679These functions are provided through the scm_the_rng interface for use
4680by libguile and the application.
4681
4682*** Function: unsigned long scm_i_uniform32 (scm_i_rstate *STATE)
4683Given the random STATE, return 32 random bits.
4684Don't use this function directly. Instead go through the plugin
4685interface (see "Plug in interface" above).
4686
4687*** Function: void scm_i_init_rstate (scm_i_rstate *STATE, char *SEED, int N)
4688Initialize STATE using SEED of length N.
4689
4690*** Function: scm_i_rstate *scm_i_copy_rstate (scm_i_rstate *STATE)
4691Return a malloc:ed copy of STATE. This function can easily be re-used
4692in the interfaces to other RNGs.
4693
4694** Random number library functions
4695These functions use the current RNG through the scm_the_rng interface.
4696It might be a good idea to use these functions from your C code so
4697that only one random generator is used by all code in your program.
4698
259529f2 4699The default random state is stored in:
3e8370c3
MD
4700
4701*** Variable: SCM scm_var_random_state
4702Contains the vcell of the Scheme variable "*random-state*" which is
4703used as default state by all random number functions in the Scheme
4704level interface.
4705
4706Example:
4707
259529f2 4708 double x = scm_c_uniform01 (SCM_RSTATE (SCM_CDR (scm_var_random_state)));
3e8370c3 4709
259529f2
MD
4710*** Function: scm_rstate *scm_c_default_rstate (void)
4711This is a convenience function which returns the value of
4712scm_var_random_state. An error message is generated if this value
4713isn't a random state.
4714
4715*** Function: scm_rstate *scm_c_make_rstate (char *SEED, int LENGTH)
4716Make a new random state from the string SEED of length LENGTH.
4717
4718It is generally not a good idea to use multiple random states in a
4719program. While subsequent random numbers generated from one random
4720state are guaranteed to be reasonably independent, there is no such
4721guarantee for numbers generated from different random states.
4722
4723*** Macro: unsigned long scm_c_uniform32 (scm_rstate *STATE)
4724Return 32 random bits.
4725
4726*** Function: double scm_c_uniform01 (scm_rstate *STATE)
3e8370c3
MD
4727Return a sample from the uniform(0,1) distribution.
4728
259529f2 4729*** Function: double scm_c_normal01 (scm_rstate *STATE)
3e8370c3
MD
4730Return a sample from the normal(0,1) distribution.
4731
259529f2 4732*** Function: double scm_c_exp1 (scm_rstate *STATE)
3e8370c3
MD
4733Return a sample from the exp(1) distribution.
4734
259529f2
MD
4735*** Function: unsigned long scm_c_random (scm_rstate *STATE, unsigned long M)
4736Return a sample from the discrete uniform(0,M) distribution.
4737
4738*** Function: SCM scm_c_random_bignum (scm_rstate *STATE, SCM M)
3e8370c3 4739Return a sample from the discrete uniform(0,M) distribution.
259529f2 4740M must be a bignum object. The returned value may be an INUM.
3e8370c3 4741
9e97c52d 4742
f3227c7a 4743\f
d23bbf3e 4744Changes in Guile 1.3 (released Monday, October 19, 1998):
c484bf7f
JB
4745
4746* Changes to the distribution
4747
e2d6569c
JB
4748** We renamed the SCHEME_LOAD_PATH environment variable to GUILE_LOAD_PATH.
4749To avoid conflicts, programs should name environment variables after
4750themselves, except when there's a common practice establishing some
4751other convention.
4752
4753For now, Guile supports both GUILE_LOAD_PATH and SCHEME_LOAD_PATH,
4754giving the former precedence, and printing a warning message if the
4755latter is set. Guile 1.4 will not recognize SCHEME_LOAD_PATH at all.
4756
4757** The header files related to multi-byte characters have been removed.
4758They were: libguile/extchrs.h and libguile/mbstrings.h. Any C code
4759which referred to these explicitly will probably need to be rewritten,
4760since the support for the variant string types has been removed; see
4761below.
4762
4763** The header files append.h and sequences.h have been removed. These
4764files implemented non-R4RS operations which would encourage
4765non-portable programming style and less easy-to-read code.
3a97e020 4766
c484bf7f
JB
4767* Changes to the stand-alone interpreter
4768
2e368582 4769** New procedures have been added to implement a "batch mode":
ec4ab4fd 4770
2e368582 4771*** Function: batch-mode?
ec4ab4fd
GH
4772
4773 Returns a boolean indicating whether the interpreter is in batch
4774 mode.
4775
2e368582 4776*** Function: set-batch-mode?! ARG
ec4ab4fd
GH
4777
4778 If ARG is true, switches the interpreter to batch mode. The `#f'
4779 case has not been implemented.
4780
2e368582
JB
4781** Guile now provides full command-line editing, when run interactively.
4782To use this feature, you must have the readline library installed.
4783The Guile build process will notice it, and automatically include
4784support for it.
4785
4786The readline library is available via anonymous FTP from any GNU
4787mirror site; the canonical location is "ftp://prep.ai.mit.edu/pub/gnu".
4788
a5d6d578
MD
4789** the-last-stack is now a fluid.
4790
c484bf7f
JB
4791* Changes to the procedure for linking libguile with your programs
4792
71f20534 4793** You can now use the `guile-config' utility to build programs that use Guile.
2e368582 4794
2adfe1c0 4795Guile now includes a command-line utility called `guile-config', which
71f20534
JB
4796can provide information about how to compile and link programs that
4797use Guile.
4798
4799*** `guile-config compile' prints any C compiler flags needed to use Guile.
4800You should include this command's output on the command line you use
4801to compile C or C++ code that #includes the Guile header files. It's
4802usually just a `-I' flag to help the compiler find the Guile headers.
4803
4804
4805*** `guile-config link' prints any linker flags necessary to link with Guile.
8aa5c148 4806
71f20534 4807This command writes to its standard output a list of flags which you
8aa5c148
JB
4808must pass to the linker to link your code against the Guile library.
4809The flags include '-lguile' itself, any other libraries the Guile
4810library depends upon, and any `-L' flags needed to help the linker
4811find those libraries.
2e368582
JB
4812
4813For example, here is a Makefile rule that builds a program named 'foo'
4814from the object files ${FOO_OBJECTS}, and links them against Guile:
4815
4816 foo: ${FOO_OBJECTS}
2adfe1c0 4817 ${CC} ${CFLAGS} ${FOO_OBJECTS} `guile-config link` -o foo
2e368582 4818
e2d6569c
JB
4819Previous Guile releases recommended that you use autoconf to detect
4820which of a predefined set of libraries were present on your system.
2adfe1c0 4821It is more robust to use `guile-config', since it records exactly which
e2d6569c
JB
4822libraries the installed Guile library requires.
4823
2adfe1c0
JB
4824This was originally called `build-guile', but was renamed to
4825`guile-config' before Guile 1.3 was released, to be consistent with
4826the analogous script for the GTK+ GUI toolkit, which is called
4827`gtk-config'.
4828
2e368582 4829
8aa5c148
JB
4830** Use the GUILE_FLAGS macro in your configure.in file to find Guile.
4831
4832If you are using the GNU autoconf package to configure your program,
4833you can use the GUILE_FLAGS autoconf macro to call `guile-config'
4834(described above) and gather the necessary values for use in your
4835Makefiles.
4836
4837The GUILE_FLAGS macro expands to configure script code which runs the
4838`guile-config' script, to find out where Guile's header files and
4839libraries are installed. It sets two variables, marked for
4840substitution, as by AC_SUBST.
4841
4842 GUILE_CFLAGS --- flags to pass to a C or C++ compiler to build
4843 code that uses Guile header files. This is almost always just a
4844 -I flag.
4845
4846 GUILE_LDFLAGS --- flags to pass to the linker to link a
4847 program against Guile. This includes `-lguile' for the Guile
4848 library itself, any libraries that Guile itself requires (like
4849 -lqthreads), and so on. It may also include a -L flag to tell the
4850 compiler where to find the libraries.
4851
4852GUILE_FLAGS is defined in the file guile.m4, in the top-level
4853directory of the Guile distribution. You can copy it into your
4854package's aclocal.m4 file, and then use it in your configure.in file.
4855
4856If you are using the `aclocal' program, distributed with GNU automake,
4857to maintain your aclocal.m4 file, the Guile installation process
4858installs guile.m4 where aclocal will find it. All you need to do is
4859use GUILE_FLAGS in your configure.in file, and then run `aclocal';
4860this will copy the definition of GUILE_FLAGS into your aclocal.m4
4861file.
4862
4863
c484bf7f 4864* Changes to Scheme functions and syntax
7ad3c1e7 4865
02755d59 4866** Multi-byte strings have been removed, as have multi-byte and wide
e2d6569c
JB
4867ports. We felt that these were the wrong approach to
4868internationalization support.
02755d59 4869
2e368582
JB
4870** New function: readline [PROMPT]
4871Read a line from the terminal, and allow the user to edit it,
4872prompting with PROMPT. READLINE provides a large set of Emacs-like
4873editing commands, lets the user recall previously typed lines, and
4874works on almost every kind of terminal, including dumb terminals.
4875
4876READLINE assumes that the cursor is at the beginning of the line when
4877it is invoked. Thus, you can't print a prompt yourself, and then call
4878READLINE; you need to package up your prompt as a string, pass it to
4879the function, and let READLINE print the prompt itself. This is
4880because READLINE needs to know the prompt's screen width.
4881
8cd57bd0
JB
4882For Guile to provide this function, you must have the readline
4883library, version 2.1 or later, installed on your system. Readline is
4884available via anonymous FTP from prep.ai.mit.edu in pub/gnu, or from
4885any GNU mirror site.
2e368582
JB
4886
4887See also ADD-HISTORY function.
4888
4889** New function: add-history STRING
4890Add STRING as the most recent line in the history used by the READLINE
4891command. READLINE does not add lines to the history itself; you must
4892call ADD-HISTORY to make previous input available to the user.
4893
8cd57bd0
JB
4894** The behavior of the read-line function has changed.
4895
4896This function now uses standard C library functions to read the line,
4897for speed. This means that it doesn not respect the value of
4898scm-line-incrementors; it assumes that lines are delimited with
4899#\newline.
4900
4901(Note that this is read-line, the function that reads a line of text
4902from a port, not readline, the function that reads a line from a
4903terminal, providing full editing capabilities.)
4904
1a0106ef
JB
4905** New module (ice-9 getopt-gnu-style): Parse command-line arguments.
4906
4907This module provides some simple argument parsing. It exports one
4908function:
4909
4910Function: getopt-gnu-style ARG-LS
4911 Parse a list of program arguments into an alist of option
4912 descriptions.
4913
4914 Each item in the list of program arguments is examined to see if
4915 it meets the syntax of a GNU long-named option. An argument like
4916 `--MUMBLE' produces an element of the form (MUMBLE . #t) in the
4917 returned alist, where MUMBLE is a keyword object with the same
4918 name as the argument. An argument like `--MUMBLE=FROB' produces
4919 an element of the form (MUMBLE . FROB), where FROB is a string.
4920
4921 As a special case, the returned alist also contains a pair whose
4922 car is the symbol `rest'. The cdr of this pair is a list
4923 containing all the items in the argument list that are not options
4924 of the form mentioned above.
4925
4926 The argument `--' is treated specially: all items in the argument
4927 list appearing after such an argument are not examined, and are
4928 returned in the special `rest' list.
4929
4930 This function does not parse normal single-character switches.
4931 You will need to parse them out of the `rest' list yourself.
4932
8cd57bd0
JB
4933** The read syntax for byte vectors and short vectors has changed.
4934
4935Instead of #bytes(...), write #y(...).
4936
4937Instead of #short(...), write #h(...).
4938
4939This may seem nutty, but, like the other uniform vectors, byte vectors
4940and short vectors want to have the same print and read syntax (and,
4941more basic, want to have read syntax!). Changing the read syntax to
4942use multiple characters after the hash sign breaks with the
4943conventions used in R5RS and the conventions used for the other
4944uniform vectors. It also introduces complexity in the current reader,
4945both on the C and Scheme levels. (The Right solution is probably to
4946change the syntax and prototypes for uniform vectors entirely.)
4947
4948
4949** The new module (ice-9 session) provides useful interactive functions.
4950
4951*** New procedure: (apropos REGEXP OPTION ...)
4952
4953Display a list of top-level variables whose names match REGEXP, and
4954the modules they are imported from. Each OPTION should be one of the
4955following symbols:
4956
4957 value --- Show the value of each matching variable.
4958 shadow --- Show bindings shadowed by subsequently imported modules.
4959 full --- Same as both `shadow' and `value'.
4960
4961For example:
4962
4963 guile> (apropos "trace" 'full)
4964 debug: trace #<procedure trace args>
4965 debug: untrace #<procedure untrace args>
4966 the-scm-module: display-backtrace #<compiled-closure #<primitive-procedure gsubr-apply>>
4967 the-scm-module: before-backtrace-hook ()
4968 the-scm-module: backtrace #<primitive-procedure backtrace>
4969 the-scm-module: after-backtrace-hook ()
4970 the-scm-module: has-shown-backtrace-hint? #f
6c0201ad 4971 guile>
8cd57bd0
JB
4972
4973** There are new functions and syntax for working with macros.
4974
4975Guile implements macros as a special object type. Any variable whose
4976top-level binding is a macro object acts as a macro. The macro object
4977specifies how the expression should be transformed before evaluation.
4978
4979*** Macro objects now print in a reasonable way, resembling procedures.
4980
4981*** New function: (macro? OBJ)
4982True iff OBJ is a macro object.
4983
4984*** New function: (primitive-macro? OBJ)
4985Like (macro? OBJ), but true only if OBJ is one of the Guile primitive
4986macro transformers, implemented in eval.c rather than Scheme code.
4987
dbdd0c16
JB
4988Why do we have this function?
4989- For symmetry with procedure? and primitive-procedure?,
4990- to allow custom print procedures to tell whether a macro is
4991 primitive, and display it differently, and
4992- to allow compilers and user-written evaluators to distinguish
4993 builtin special forms from user-defined ones, which could be
4994 compiled.
4995
8cd57bd0
JB
4996*** New function: (macro-type OBJ)
4997Return a value indicating what kind of macro OBJ is. Possible return
4998values are:
4999
5000 The symbol `syntax' --- a macro created by procedure->syntax.
5001 The symbol `macro' --- a macro created by procedure->macro.
5002 The symbol `macro!' --- a macro created by procedure->memoizing-macro.
6c0201ad 5003 The boolean #f --- if OBJ is not a macro object.
8cd57bd0
JB
5004
5005*** New function: (macro-name MACRO)
5006Return the name of the macro object MACRO's procedure, as returned by
5007procedure-name.
5008
5009*** New function: (macro-transformer MACRO)
5010Return the transformer procedure for MACRO.
5011
5012*** New syntax: (use-syntax MODULE ... TRANSFORMER)
5013
5014Specify a new macro expander to use in the current module. Each
5015MODULE is a module name, with the same meaning as in the `use-modules'
5016form; each named module's exported bindings are added to the current
5017top-level environment. TRANSFORMER is an expression evaluated in the
5018resulting environment which must yield a procedure to use as the
5019module's eval transformer: every expression evaluated in this module
5020is passed to this function, and the result passed to the Guile
6c0201ad 5021interpreter.
8cd57bd0
JB
5022
5023*** macro-eval! is removed. Use local-eval instead.
29521173 5024
8d9dcb3c
MV
5025** Some magic has been added to the printer to better handle user
5026written printing routines (like record printers, closure printers).
5027
5028The problem is that these user written routines must have access to
7fbd77df 5029the current `print-state' to be able to handle fancy things like
8d9dcb3c
MV
5030detection of circular references. These print-states have to be
5031passed to the builtin printing routines (display, write, etc) to
5032properly continue the print chain.
5033
5034We didn't want to change all existing print code so that it
8cd57bd0 5035explicitly passes thru a print state in addition to a port. Instead,
8d9dcb3c
MV
5036we extented the possible values that the builtin printing routines
5037accept as a `port'. In addition to a normal port, they now also take
5038a pair of a normal port and a print-state. Printing will go to the
5039port and the print-state will be used to control the detection of
5040circular references, etc. If the builtin function does not care for a
5041print-state, it is simply ignored.
5042
5043User written callbacks are now called with such a pair as their
5044`port', but because every function now accepts this pair as a PORT
5045argument, you don't have to worry about that. In fact, it is probably
5046safest to not check for these pairs.
5047
5048However, it is sometimes necessary to continue a print chain on a
5049different port, for example to get a intermediate string
5050representation of the printed value, mangle that string somehow, and
5051then to finally print the mangled string. Use the new function
5052
5053 inherit-print-state OLD-PORT NEW-PORT
5054
5055for this. It constructs a new `port' that prints to NEW-PORT but
5056inherits the print-state of OLD-PORT.
5057
ef1ea498
MD
5058** struct-vtable-offset renamed to vtable-offset-user
5059
5060** New constants: vtable-index-layout, vtable-index-vtable, vtable-index-printer
5061
e478dffa
MD
5062** There is now a third optional argument to make-vtable-vtable
5063 (and fourth to make-struct) when constructing new types (vtables).
5064 This argument initializes field vtable-index-printer of the vtable.
ef1ea498 5065
4851dc57
MV
5066** The detection of circular references has been extended to structs.
5067That is, a structure that -- in the process of being printed -- prints
5068itself does not lead to infinite recursion.
5069
5070** There is now some basic support for fluids. Please read
5071"libguile/fluid.h" to find out more. It is accessible from Scheme with
5072the following functions and macros:
5073
9c3fb66f
MV
5074Function: make-fluid
5075
5076 Create a new fluid object. Fluids are not special variables or
5077 some other extension to the semantics of Scheme, but rather
5078 ordinary Scheme objects. You can store them into variables (that
5079 are still lexically scoped, of course) or into any other place you
5080 like. Every fluid has a initial value of `#f'.
04c76b58 5081
9c3fb66f 5082Function: fluid? OBJ
04c76b58 5083
9c3fb66f 5084 Test whether OBJ is a fluid.
04c76b58 5085
9c3fb66f
MV
5086Function: fluid-ref FLUID
5087Function: fluid-set! FLUID VAL
04c76b58
MV
5088
5089 Access/modify the fluid FLUID. Modifications are only visible
5090 within the current dynamic root (that includes threads).
5091
9c3fb66f
MV
5092Function: with-fluids* FLUIDS VALUES THUNK
5093
5094 FLUIDS is a list of fluids and VALUES a corresponding list of
5095 values for these fluids. Before THUNK gets called the values are
6c0201ad 5096 installed in the fluids and the old values of the fluids are
9c3fb66f
MV
5097 saved in the VALUES list. When the flow of control leaves THUNK
5098 or reenters it, the values get swapped again. You might think of
5099 this as a `safe-fluid-excursion'. Note that the VALUES list is
5100 modified by `with-fluids*'.
5101
5102Macro: with-fluids ((FLUID VALUE) ...) FORM ...
5103
5104 The same as `with-fluids*' but with a different syntax. It looks
5105 just like `let', but both FLUID and VALUE are evaluated. Remember,
5106 fluids are not special variables but ordinary objects. FLUID
5107 should evaluate to a fluid.
04c76b58 5108
e2d6569c 5109** Changes to system call interfaces:
64d01d13 5110
e2d6569c 5111*** close-port, close-input-port and close-output-port now return a
64d01d13
GH
5112boolean instead of an `unspecified' object. #t means that the port
5113was successfully closed, while #f means it was already closed. It is
5114also now possible for these procedures to raise an exception if an
5115error occurs (some errors from write can be delayed until close.)
5116
e2d6569c 5117*** the first argument to chmod, fcntl, ftell and fseek can now be a
6afcd3b2
GH
5118file descriptor.
5119
e2d6569c 5120*** the third argument to fcntl is now optional.
6afcd3b2 5121
e2d6569c 5122*** the first argument to chown can now be a file descriptor or a port.
6afcd3b2 5123
e2d6569c 5124*** the argument to stat can now be a port.
6afcd3b2 5125
e2d6569c 5126*** The following new procedures have been added (most use scsh
64d01d13
GH
5127interfaces):
5128
e2d6569c 5129*** procedure: close PORT/FD
ec4ab4fd
GH
5130 Similar to close-port (*note close-port: Closing Ports.), but also
5131 works on file descriptors. A side effect of closing a file
5132 descriptor is that any ports using that file descriptor are moved
5133 to a different file descriptor and have their revealed counts set
5134 to zero.
5135
e2d6569c 5136*** procedure: port->fdes PORT
ec4ab4fd
GH
5137 Returns the integer file descriptor underlying PORT. As a side
5138 effect the revealed count of PORT is incremented.
5139
e2d6569c 5140*** procedure: fdes->ports FDES
ec4ab4fd
GH
5141 Returns a list of existing ports which have FDES as an underlying
5142 file descriptor, without changing their revealed counts.
5143
e2d6569c 5144*** procedure: fdes->inport FDES
ec4ab4fd
GH
5145 Returns an existing input port which has FDES as its underlying
5146 file descriptor, if one exists, and increments its revealed count.
5147 Otherwise, returns a new input port with a revealed count of 1.
5148
e2d6569c 5149*** procedure: fdes->outport FDES
ec4ab4fd
GH
5150 Returns an existing output port which has FDES as its underlying
5151 file descriptor, if one exists, and increments its revealed count.
5152 Otherwise, returns a new output port with a revealed count of 1.
5153
5154 The next group of procedures perform a `dup2' system call, if NEWFD
5155(an integer) is supplied, otherwise a `dup'. The file descriptor to be
5156duplicated can be supplied as an integer or contained in a port. The
64d01d13
GH
5157type of value returned varies depending on which procedure is used.
5158
ec4ab4fd
GH
5159 All procedures also have the side effect when performing `dup2' that
5160any ports using NEWFD are moved to a different file descriptor and have
64d01d13
GH
5161their revealed counts set to zero.
5162
e2d6569c 5163*** procedure: dup->fdes PORT/FD [NEWFD]
ec4ab4fd 5164 Returns an integer file descriptor.
64d01d13 5165
e2d6569c 5166*** procedure: dup->inport PORT/FD [NEWFD]
ec4ab4fd 5167 Returns a new input port using the new file descriptor.
64d01d13 5168
e2d6569c 5169*** procedure: dup->outport PORT/FD [NEWFD]
ec4ab4fd 5170 Returns a new output port using the new file descriptor.
64d01d13 5171
e2d6569c 5172*** procedure: dup PORT/FD [NEWFD]
ec4ab4fd
GH
5173 Returns a new port if PORT/FD is a port, with the same mode as the
5174 supplied port, otherwise returns an integer file descriptor.
64d01d13 5175
e2d6569c 5176*** procedure: dup->port PORT/FD MODE [NEWFD]
ec4ab4fd
GH
5177 Returns a new port using the new file descriptor. MODE supplies a
5178 mode string for the port (*note open-file: File Ports.).
64d01d13 5179
e2d6569c 5180*** procedure: setenv NAME VALUE
ec4ab4fd
GH
5181 Modifies the environment of the current process, which is also the
5182 default environment inherited by child processes.
64d01d13 5183
ec4ab4fd
GH
5184 If VALUE is `#f', then NAME is removed from the environment.
5185 Otherwise, the string NAME=VALUE is added to the environment,
5186 replacing any existing string with name matching NAME.
64d01d13 5187
ec4ab4fd 5188 The return value is unspecified.
956055a9 5189
e2d6569c 5190*** procedure: truncate-file OBJ SIZE
6afcd3b2
GH
5191 Truncates the file referred to by OBJ to at most SIZE bytes. OBJ
5192 can be a string containing a file name or an integer file
5193 descriptor or port open for output on the file. The underlying
5194 system calls are `truncate' and `ftruncate'.
5195
5196 The return value is unspecified.
5197
e2d6569c 5198*** procedure: setvbuf PORT MODE [SIZE]
7a6f1ffa
GH
5199 Set the buffering mode for PORT. MODE can be:
5200 `_IONBF'
5201 non-buffered
5202
5203 `_IOLBF'
5204 line buffered
5205
5206 `_IOFBF'
5207 block buffered, using a newly allocated buffer of SIZE bytes.
5208 However if SIZE is zero or unspecified, the port will be made
5209 non-buffered.
5210
5211 This procedure should not be used after I/O has been performed with
5212 the port.
5213
5214 Ports are usually block buffered by default, with a default buffer
5215 size. Procedures e.g., *Note open-file: File Ports, which accept a
5216 mode string allow `0' to be added to request an unbuffered port.
5217
e2d6569c 5218*** procedure: fsync PORT/FD
6afcd3b2
GH
5219 Copies any unwritten data for the specified output file descriptor
5220 to disk. If PORT/FD is a port, its buffer is flushed before the
5221 underlying file descriptor is fsync'd. The return value is
5222 unspecified.
5223
e2d6569c 5224*** procedure: open-fdes PATH FLAGS [MODES]
6afcd3b2
GH
5225 Similar to `open' but returns a file descriptor instead of a port.
5226
e2d6569c 5227*** procedure: execle PATH ENV [ARG] ...
6afcd3b2
GH
5228 Similar to `execl', but the environment of the new process is
5229 specified by ENV, which must be a list of strings as returned by
5230 the `environ' procedure.
5231
5232 This procedure is currently implemented using the `execve' system
5233 call, but we call it `execle' because of its Scheme calling
5234 interface.
5235
e2d6569c 5236*** procedure: strerror ERRNO
ec4ab4fd
GH
5237 Returns the Unix error message corresponding to ERRNO, an integer.
5238
e2d6569c 5239*** procedure: primitive-exit [STATUS]
6afcd3b2
GH
5240 Terminate the current process without unwinding the Scheme stack.
5241 This is would typically be useful after a fork. The exit status
5242 is STATUS if supplied, otherwise zero.
5243
e2d6569c 5244*** procedure: times
6afcd3b2
GH
5245 Returns an object with information about real and processor time.
5246 The following procedures accept such an object as an argument and
5247 return a selected component:
5248
5249 `tms:clock'
5250 The current real time, expressed as time units relative to an
5251 arbitrary base.
5252
5253 `tms:utime'
5254 The CPU time units used by the calling process.
5255
5256 `tms:stime'
5257 The CPU time units used by the system on behalf of the
5258 calling process.
5259
5260 `tms:cutime'
5261 The CPU time units used by terminated child processes of the
5262 calling process, whose status has been collected (e.g., using
5263 `waitpid').
5264
5265 `tms:cstime'
5266 Similarly, the CPU times units used by the system on behalf of
5267 terminated child processes.
7ad3c1e7 5268
e2d6569c
JB
5269** Removed: list-length
5270** Removed: list-append, list-append!
5271** Removed: list-reverse, list-reverse!
5272
5273** array-map renamed to array-map!
5274
5275** serial-array-map renamed to serial-array-map!
5276
660f41fa
MD
5277** catch doesn't take #f as first argument any longer
5278
5279Previously, it was possible to pass #f instead of a key to `catch'.
5280That would cause `catch' to pass a jump buffer object to the procedure
5281passed as second argument. The procedure could then use this jump
5282buffer objekt as an argument to throw.
5283
5284This mechanism has been removed since its utility doesn't motivate the
5285extra complexity it introduces.
5286
332d00f6
JB
5287** The `#/' notation for lists now provokes a warning message from Guile.
5288This syntax will be removed from Guile in the near future.
5289
5290To disable the warning message, set the GUILE_HUSH environment
5291variable to any non-empty value.
5292
8cd57bd0
JB
5293** The newline character now prints as `#\newline', following the
5294normal Scheme notation, not `#\nl'.
5295
c484bf7f
JB
5296* Changes to the gh_ interface
5297
8986901b
JB
5298** The gh_enter function now takes care of loading the Guile startup files.
5299gh_enter works by calling scm_boot_guile; see the remarks below.
5300
5424b4f7
MD
5301** Function: void gh_write (SCM x)
5302
5303Write the printed representation of the scheme object x to the current
5304output port. Corresponds to the scheme level `write'.
5305
3a97e020
MD
5306** gh_list_length renamed to gh_length.
5307
8d6787b6
MG
5308** vector handling routines
5309
5310Several major changes. In particular, gh_vector() now resembles
5311(vector ...) (with a caveat -- see manual), and gh_make_vector() now
956328d2
MG
5312exists and behaves like (make-vector ...). gh_vset() and gh_vref()
5313have been renamed gh_vector_set_x() and gh_vector_ref(). Some missing
8d6787b6
MG
5314vector-related gh_ functions have been implemented.
5315
7fee59bd
MG
5316** pair and list routines
5317
5318Implemented several of the R4RS pair and list functions that were
5319missing.
5320
171422a9
MD
5321** gh_scm2doubles, gh_doubles2scm, gh_doubles2dvect
5322
5323New function. Converts double arrays back and forth between Scheme
5324and C.
5325
c484bf7f
JB
5326* Changes to the scm_ interface
5327
8986901b
JB
5328** The function scm_boot_guile now takes care of loading the startup files.
5329
5330Guile's primary initialization function, scm_boot_guile, now takes
5331care of loading `boot-9.scm', in the `ice-9' module, to initialize
5332Guile, define the module system, and put together some standard
5333bindings. It also loads `init.scm', which is intended to hold
5334site-specific initialization code.
5335
5336Since Guile cannot operate properly until boot-9.scm is loaded, there
5337is no reason to separate loading boot-9.scm from Guile's other
5338initialization processes.
5339
5340This job used to be done by scm_compile_shell_switches, which didn't
5341make much sense; in particular, it meant that people using Guile for
5342non-shell-like applications had to jump through hoops to get Guile
5343initialized properly.
5344
5345** The function scm_compile_shell_switches no longer loads the startup files.
5346Now, Guile always loads the startup files, whenever it is initialized;
5347see the notes above for scm_boot_guile and scm_load_startup_files.
5348
5349** Function: scm_load_startup_files
5350This new function takes care of loading Guile's initialization file
5351(`boot-9.scm'), and the site initialization file, `init.scm'. Since
5352this is always called by the Guile initialization process, it's
5353probably not too useful to call this yourself, but it's there anyway.
5354
87148d9e
JB
5355** The semantics of smob marking have changed slightly.
5356
5357The smob marking function (the `mark' member of the scm_smobfuns
5358structure) is no longer responsible for setting the mark bit on the
5359smob. The generic smob handling code in the garbage collector will
5360set this bit. The mark function need only ensure that any other
5361objects the smob refers to get marked.
5362
5363Note that this change means that the smob's GC8MARK bit is typically
5364already set upon entry to the mark function. Thus, marking functions
5365which look like this:
5366
5367 {
5368 if (SCM_GC8MARKP (ptr))
5369 return SCM_BOOL_F;
5370 SCM_SETGC8MARK (ptr);
5371 ... mark objects to which the smob refers ...
5372 }
5373
5374are now incorrect, since they will return early, and fail to mark any
5375other objects the smob refers to. Some code in the Guile library used
5376to work this way.
5377
1cf84ea5
JB
5378** The semantics of the I/O port functions in scm_ptobfuns have changed.
5379
5380If you have implemented your own I/O port type, by writing the
5381functions required by the scm_ptobfuns and then calling scm_newptob,
5382you will need to change your functions slightly.
5383
5384The functions in a scm_ptobfuns structure now expect the port itself
5385as their argument; they used to expect the `stream' member of the
5386port's scm_port_table structure. This allows functions in an
5387scm_ptobfuns structure to easily access the port's cell (and any flags
5388it its CAR), and the port's scm_port_table structure.
5389
5390Guile now passes the I/O port itself as the `port' argument in the
5391following scm_ptobfuns functions:
5392
5393 int (*free) (SCM port);
5394 int (*fputc) (int, SCM port);
5395 int (*fputs) (char *, SCM port);
5396 scm_sizet (*fwrite) SCM_P ((char *ptr,
5397 scm_sizet size,
5398 scm_sizet nitems,
5399 SCM port));
5400 int (*fflush) (SCM port);
5401 int (*fgetc) (SCM port);
5402 int (*fclose) (SCM port);
5403
5404The interfaces to the `mark', `print', `equalp', and `fgets' methods
5405are unchanged.
5406
5407If you have existing code which defines its own port types, it is easy
5408to convert your code to the new interface; simply apply SCM_STREAM to
5409the port argument to yield the value you code used to expect.
5410
5411Note that since both the port and the stream have the same type in the
5412C code --- they are both SCM values --- the C compiler will not remind
5413you if you forget to update your scm_ptobfuns functions.
5414
5415
933a7411
MD
5416** Function: int scm_internal_select (int fds,
5417 SELECT_TYPE *rfds,
5418 SELECT_TYPE *wfds,
5419 SELECT_TYPE *efds,
5420 struct timeval *timeout);
5421
5422This is a replacement for the `select' function provided by the OS.
5423It enables I/O blocking and sleeping to happen for one cooperative
5424thread without blocking other threads. It also avoids busy-loops in
5425these situations. It is intended that all I/O blocking and sleeping
5426will finally go through this function. Currently, this function is
5427only available on systems providing `gettimeofday' and `select'.
5428
5424b4f7
MD
5429** Function: SCM scm_internal_stack_catch (SCM tag,
5430 scm_catch_body_t body,
5431 void *body_data,
5432 scm_catch_handler_t handler,
5433 void *handler_data)
5434
5435A new sibling to the other two C level `catch' functions
5436scm_internal_catch and scm_internal_lazy_catch. Use it if you want
5437the stack to be saved automatically into the variable `the-last-stack'
5438(scm_the_last_stack_var) on error. This is necessary if you want to
5439use advanced error reporting, such as calling scm_display_error and
5440scm_display_backtrace. (They both take a stack object as argument.)
5441
df366c26
MD
5442** Function: SCM scm_spawn_thread (scm_catch_body_t body,
5443 void *body_data,
5444 scm_catch_handler_t handler,
5445 void *handler_data)
5446
5447Spawns a new thread. It does a job similar to
5448scm_call_with_new_thread but takes arguments more suitable when
5449spawning threads from application C code.
5450
88482b31
MD
5451** The hook scm_error_callback has been removed. It was originally
5452intended as a way for the user to install his own error handler. But
5453that method works badly since it intervenes between throw and catch,
5454thereby changing the semantics of expressions like (catch #t ...).
5455The correct way to do it is to use one of the C level catch functions
5456in throw.c: scm_internal_catch/lazy_catch/stack_catch.
5457
3a97e020
MD
5458** Removed functions:
5459
5460scm_obj_length, scm_list_length, scm_list_append, scm_list_append_x,
5461scm_list_reverse, scm_list_reverse_x
5462
5463** New macros: SCM_LISTn where n is one of the integers 0-9.
5464
5465These can be used for pretty list creation from C. The idea is taken
5466from Erick Gallesio's STk.
5467
298aa6e3
MD
5468** scm_array_map renamed to scm_array_map_x
5469
527da704
MD
5470** mbstrings are now removed
5471
5472This means that the type codes scm_tc7_mb_string and
5473scm_tc7_mb_substring has been removed.
5474
8cd57bd0
JB
5475** scm_gen_putc, scm_gen_puts, scm_gen_write, and scm_gen_getc have changed.
5476
5477Since we no longer support multi-byte strings, these I/O functions
5478have been simplified, and renamed. Here are their old names, and
5479their new names and arguments:
5480
5481scm_gen_putc -> void scm_putc (int c, SCM port);
5482scm_gen_puts -> void scm_puts (char *s, SCM port);
5483scm_gen_write -> void scm_lfwrite (char *ptr, scm_sizet size, SCM port);
5484scm_gen_getc -> void scm_getc (SCM port);
5485
5486
527da704
MD
5487** The macros SCM_TYP7D and SCM_TYP7SD has been removed.
5488
5489** The macro SCM_TYP7S has taken the role of the old SCM_TYP7D
5490
5491SCM_TYP7S now masks away the bit which distinguishes substrings from
5492strings.
5493
660f41fa
MD
5494** scm_catch_body_t: Backward incompatible change!
5495
5496Body functions to scm_internal_catch and friends do not any longer
5497take a second argument. This is because it is no longer possible to
5498pass a #f arg to catch.
5499
a8e05009
JB
5500** Calls to scm_protect_object and scm_unprotect now nest properly.
5501
5502The function scm_protect_object protects its argument from being freed
5503by the garbage collector. scm_unprotect_object removes that
5504protection.
5505
5506These functions now nest properly. That is, for every object O, there
5507is a counter which scm_protect_object(O) increments and
5508scm_unprotect_object(O) decrements, if the counter is greater than
5509zero. Every object's counter is zero when it is first created. If an
5510object's counter is greater than zero, the garbage collector will not
5511reclaim its storage.
5512
5513This allows you to use scm_protect_object in your code without
5514worrying that some other function you call will call
5515scm_unprotect_object, and allow it to be freed. Assuming that the
5516functions you call are well-behaved, and unprotect only those objects
5517they protect, you can follow the same rule and have confidence that
5518objects will be freed only at appropriate times.
5519
c484bf7f
JB
5520\f
5521Changes in Guile 1.2 (released Tuesday, June 24 1997):
cf78e9e8 5522
737c9113
JB
5523* Changes to the distribution
5524
832b09ed
JB
5525** Nightly snapshots are now available from ftp.red-bean.com.
5526The old server, ftp.cyclic.com, has been relinquished to its rightful
5527owner.
5528
5529Nightly snapshots of the Guile development sources are now available via
5530anonymous FTP from ftp.red-bean.com, as /pub/guile/guile-snap.tar.gz.
5531
5532Via the web, that's: ftp://ftp.red-bean.com/pub/guile/guile-snap.tar.gz
5533For getit, that's: ftp.red-bean.com:/pub/guile/guile-snap.tar.gz
5534
0fcab5ed
JB
5535** To run Guile without installing it, the procedure has changed a bit.
5536
5537If you used a separate build directory to compile Guile, you'll need
5538to include the build directory in SCHEME_LOAD_PATH, as well as the
5539source directory. See the `INSTALL' file for examples.
5540
737c9113
JB
5541* Changes to the procedure for linking libguile with your programs
5542
94982a4e
JB
5543** The standard Guile load path for Scheme code now includes
5544$(datadir)/guile (usually /usr/local/share/guile). This means that
5545you can install your own Scheme files there, and Guile will find them.
5546(Previous versions of Guile only checked a directory whose name
5547contained the Guile version number, so you had to re-install or move
5548your Scheme sources each time you installed a fresh version of Guile.)
5549
5550The load path also includes $(datadir)/guile/site; we recommend
5551putting individual Scheme files there. If you want to install a
5552package with multiple source files, create a directory for them under
5553$(datadir)/guile.
5554
5555** Guile 1.2 will now use the Rx regular expression library, if it is
5556installed on your system. When you are linking libguile into your own
5557programs, this means you will have to link against -lguile, -lqt (if
5558you configured Guile with thread support), and -lrx.
27590f82
JB
5559
5560If you are using autoconf to generate configuration scripts for your
5561application, the following lines should suffice to add the appropriate
5562libraries to your link command:
5563
5564### Find Rx, quickthreads and libguile.
5565AC_CHECK_LIB(rx, main)
5566AC_CHECK_LIB(qt, main)
5567AC_CHECK_LIB(guile, scm_shell)
5568
94982a4e
JB
5569The Guile 1.2 distribution does not contain sources for the Rx
5570library, as Guile 1.0 did. If you want to use Rx, you'll need to
5571retrieve it from a GNU FTP site and install it separately.
5572
b83b8bee
JB
5573* Changes to Scheme functions and syntax
5574
e035e7e6
MV
5575** The dynamic linking features of Guile are now enabled by default.
5576You can disable them by giving the `--disable-dynamic-linking' option
5577to configure.
5578
e035e7e6
MV
5579 (dynamic-link FILENAME)
5580
5581 Find the object file denoted by FILENAME (a string) and link it
5582 into the running Guile application. When everything works out,
5583 return a Scheme object suitable for representing the linked object
5584 file. Otherwise an error is thrown. How object files are
5585 searched is system dependent.
5586
5587 (dynamic-object? VAL)
5588
5589 Determine whether VAL represents a dynamically linked object file.
5590
5591 (dynamic-unlink DYNOBJ)
5592
5593 Unlink the indicated object file from the application. DYNOBJ
5594 should be one of the values returned by `dynamic-link'.
5595
5596 (dynamic-func FUNCTION DYNOBJ)
5597
5598 Search the C function indicated by FUNCTION (a string or symbol)
5599 in DYNOBJ and return some Scheme object that can later be used
5600 with `dynamic-call' to actually call this function. Right now,
5601 these Scheme objects are formed by casting the address of the
5602 function to `long' and converting this number to its Scheme
5603 representation.
5604
5605 (dynamic-call FUNCTION DYNOBJ)
5606
5607 Call the C function indicated by FUNCTION and DYNOBJ. The
5608 function is passed no arguments and its return value is ignored.
5609 When FUNCTION is something returned by `dynamic-func', call that
5610 function and ignore DYNOBJ. When FUNCTION is a string (or symbol,
5611 etc.), look it up in DYNOBJ; this is equivalent to
5612
5613 (dynamic-call (dynamic-func FUNCTION DYNOBJ) #f)
5614
5615 Interrupts are deferred while the C function is executing (with
5616 SCM_DEFER_INTS/SCM_ALLOW_INTS).
5617
5618 (dynamic-args-call FUNCTION DYNOBJ ARGS)
5619
5620 Call the C function indicated by FUNCTION and DYNOBJ, but pass it
5621 some arguments and return its return value. The C function is
5622 expected to take two arguments and return an `int', just like
5623 `main':
5624
5625 int c_func (int argc, char **argv);
5626
5627 ARGS must be a list of strings and is converted into an array of
5628 `char *'. The array is passed in ARGV and its size in ARGC. The
5629 return value is converted to a Scheme number and returned from the
5630 call to `dynamic-args-call'.
5631
0fcab5ed
JB
5632When dynamic linking is disabled or not supported on your system,
5633the above functions throw errors, but they are still available.
5634
e035e7e6
MV
5635Here is a small example that works on GNU/Linux:
5636
5637 (define libc-obj (dynamic-link "libc.so"))
5638 (dynamic-args-call 'rand libc-obj '())
5639
5640See the file `libguile/DYNAMIC-LINKING' for additional comments.
5641
27590f82 5642** The #/ syntax for module names is depreciated, and will be removed
6c0201ad 5643in a future version of Guile. Instead of
27590f82
JB
5644
5645 #/foo/bar/baz
5646
5647instead write
5648
5649 (foo bar baz)
5650
5651The latter syntax is more consistent with existing Lisp practice.
5652
5dade857
MV
5653** Guile now does fancier printing of structures. Structures are the
5654underlying implementation for records, which in turn are used to
5655implement modules, so all of these object now print differently and in
5656a more informative way.
5657
161029df
JB
5658The Scheme printer will examine the builtin variable *struct-printer*
5659whenever it needs to print a structure object. When this variable is
5660not `#f' it is deemed to be a procedure and will be applied to the
5661structure object and the output port. When *struct-printer* is `#f'
5662or the procedure return `#f' the structure object will be printed in
5663the boring #<struct 80458270> form.
5dade857
MV
5664
5665This hook is used by some routines in ice-9/boot-9.scm to implement
5666type specific printing routines. Please read the comments there about
5667"printing structs".
5668
5669One of the more specific uses of structs are records. The printing
5670procedure that could be passed to MAKE-RECORD-TYPE is now actually
5671called. It should behave like a *struct-printer* procedure (described
5672above).
5673
b83b8bee
JB
5674** Guile now supports a new R4RS-compliant syntax for keywords. A
5675token of the form #:NAME, where NAME has the same syntax as a Scheme
5676symbol, is the external representation of the keyword named NAME.
5677Keyword objects print using this syntax as well, so values containing
1e5afba0
JB
5678keyword objects can be read back into Guile. When used in an
5679expression, keywords are self-quoting objects.
b83b8bee
JB
5680
5681Guile suports this read syntax, and uses this print syntax, regardless
5682of the current setting of the `keyword' read option. The `keyword'
5683read option only controls whether Guile recognizes the `:NAME' syntax,
5684which is incompatible with R4RS. (R4RS says such token represent
5685symbols.)
737c9113
JB
5686
5687** Guile has regular expression support again. Guile 1.0 included
5688functions for matching regular expressions, based on the Rx library.
5689In Guile 1.1, the Guile/Rx interface was removed to simplify the
5690distribution, and thus Guile had no regular expression support. Guile
94982a4e
JB
56911.2 again supports the most commonly used functions, and supports all
5692of SCSH's regular expression functions.
2409cdfa 5693
94982a4e
JB
5694If your system does not include a POSIX regular expression library,
5695and you have not linked Guile with a third-party regexp library such as
5696Rx, these functions will not be available. You can tell whether your
5697Guile installation includes regular expression support by checking
5698whether the `*features*' list includes the `regex' symbol.
737c9113 5699
94982a4e 5700*** regexp functions
161029df 5701
94982a4e
JB
5702By default, Guile supports POSIX extended regular expressions. That
5703means that the characters `(', `)', `+' and `?' are special, and must
5704be escaped if you wish to match the literal characters.
e1a191a8 5705
94982a4e
JB
5706This regular expression interface was modeled after that implemented
5707by SCSH, the Scheme Shell. It is intended to be upwardly compatible
5708with SCSH regular expressions.
5709
5710**** Function: string-match PATTERN STR [START]
5711 Compile the string PATTERN into a regular expression and compare
5712 it with STR. The optional numeric argument START specifies the
5713 position of STR at which to begin matching.
5714
5715 `string-match' returns a "match structure" which describes what,
5716 if anything, was matched by the regular expression. *Note Match
5717 Structures::. If STR does not match PATTERN at all,
5718 `string-match' returns `#f'.
5719
5720 Each time `string-match' is called, it must compile its PATTERN
5721argument into a regular expression structure. This operation is
5722expensive, which makes `string-match' inefficient if the same regular
5723expression is used several times (for example, in a loop). For better
5724performance, you can compile a regular expression in advance and then
5725match strings against the compiled regexp.
5726
5727**** Function: make-regexp STR [FLAGS]
5728 Compile the regular expression described by STR, and return the
5729 compiled regexp structure. If STR does not describe a legal
5730 regular expression, `make-regexp' throws a
5731 `regular-expression-syntax' error.
5732
5733 FLAGS may be the bitwise-or of one or more of the following:
5734
5735**** Constant: regexp/extended
5736 Use POSIX Extended Regular Expression syntax when interpreting
5737 STR. If not set, POSIX Basic Regular Expression syntax is used.
5738 If the FLAGS argument is omitted, we assume regexp/extended.
5739
5740**** Constant: regexp/icase
5741 Do not differentiate case. Subsequent searches using the
5742 returned regular expression will be case insensitive.
5743
5744**** Constant: regexp/newline
5745 Match-any-character operators don't match a newline.
5746
5747 A non-matching list ([^...]) not containing a newline matches a
5748 newline.
5749
5750 Match-beginning-of-line operator (^) matches the empty string
5751 immediately after a newline, regardless of whether the FLAGS
5752 passed to regexp-exec contain regexp/notbol.
5753
5754 Match-end-of-line operator ($) matches the empty string
5755 immediately before a newline, regardless of whether the FLAGS
5756 passed to regexp-exec contain regexp/noteol.
5757
5758**** Function: regexp-exec REGEXP STR [START [FLAGS]]
5759 Match the compiled regular expression REGEXP against `str'. If
5760 the optional integer START argument is provided, begin matching
5761 from that position in the string. Return a match structure
5762 describing the results of the match, or `#f' if no match could be
5763 found.
5764
5765 FLAGS may be the bitwise-or of one or more of the following:
5766
5767**** Constant: regexp/notbol
5768 The match-beginning-of-line operator always fails to match (but
5769 see the compilation flag regexp/newline above) This flag may be
5770 used when different portions of a string are passed to
5771 regexp-exec and the beginning of the string should not be
5772 interpreted as the beginning of the line.
5773
5774**** Constant: regexp/noteol
5775 The match-end-of-line operator always fails to match (but see the
5776 compilation flag regexp/newline above)
5777
5778**** Function: regexp? OBJ
5779 Return `#t' if OBJ is a compiled regular expression, or `#f'
5780 otherwise.
5781
5782 Regular expressions are commonly used to find patterns in one string
5783and replace them with the contents of another string.
5784
5785**** Function: regexp-substitute PORT MATCH [ITEM...]
5786 Write to the output port PORT selected contents of the match
5787 structure MATCH. Each ITEM specifies what should be written, and
5788 may be one of the following arguments:
5789
5790 * A string. String arguments are written out verbatim.
5791
5792 * An integer. The submatch with that number is written.
5793
5794 * The symbol `pre'. The portion of the matched string preceding
5795 the regexp match is written.
5796
5797 * The symbol `post'. The portion of the matched string
5798 following the regexp match is written.
5799
5800 PORT may be `#f', in which case nothing is written; instead,
5801 `regexp-substitute' constructs a string from the specified ITEMs
5802 and returns that.
5803
5804**** Function: regexp-substitute/global PORT REGEXP TARGET [ITEM...]
5805 Similar to `regexp-substitute', but can be used to perform global
5806 substitutions on STR. Instead of taking a match structure as an
5807 argument, `regexp-substitute/global' takes two string arguments: a
5808 REGEXP string describing a regular expression, and a TARGET string
5809 which should be matched against this regular expression.
5810
5811 Each ITEM behaves as in REGEXP-SUBSTITUTE, with the following
5812 exceptions:
5813
5814 * A function may be supplied. When this function is called, it
5815 will be passed one argument: a match structure for a given
5816 regular expression match. It should return a string to be
5817 written out to PORT.
5818
5819 * The `post' symbol causes `regexp-substitute/global' to recurse
5820 on the unmatched portion of STR. This *must* be supplied in
5821 order to perform global search-and-replace on STR; if it is
5822 not present among the ITEMs, then `regexp-substitute/global'
5823 will return after processing a single match.
5824
5825*** Match Structures
5826
5827 A "match structure" is the object returned by `string-match' and
5828`regexp-exec'. It describes which portion of a string, if any, matched
5829the given regular expression. Match structures include: a reference to
5830the string that was checked for matches; the starting and ending
5831positions of the regexp match; and, if the regexp included any
5832parenthesized subexpressions, the starting and ending positions of each
5833submatch.
5834
5835 In each of the regexp match functions described below, the `match'
5836argument must be a match structure returned by a previous call to
5837`string-match' or `regexp-exec'. Most of these functions return some
5838information about the original target string that was matched against a
5839regular expression; we will call that string TARGET for easy reference.
5840
5841**** Function: regexp-match? OBJ
5842 Return `#t' if OBJ is a match structure returned by a previous
5843 call to `regexp-exec', or `#f' otherwise.
5844
5845**** Function: match:substring MATCH [N]
5846 Return the portion of TARGET matched by subexpression number N.
5847 Submatch 0 (the default) represents the entire regexp match. If
5848 the regular expression as a whole matched, but the subexpression
5849 number N did not match, return `#f'.
5850
5851**** Function: match:start MATCH [N]
5852 Return the starting position of submatch number N.
5853
5854**** Function: match:end MATCH [N]
5855 Return the ending position of submatch number N.
5856
5857**** Function: match:prefix MATCH
5858 Return the unmatched portion of TARGET preceding the regexp match.
5859
5860**** Function: match:suffix MATCH
5861 Return the unmatched portion of TARGET following the regexp match.
5862
5863**** Function: match:count MATCH
5864 Return the number of parenthesized subexpressions from MATCH.
5865 Note that the entire regular expression match itself counts as a
5866 subexpression, and failed submatches are included in the count.
5867
5868**** Function: match:string MATCH
5869 Return the original TARGET string.
5870
5871*** Backslash Escapes
5872
5873 Sometimes you will want a regexp to match characters like `*' or `$'
5874exactly. For example, to check whether a particular string represents
5875a menu entry from an Info node, it would be useful to match it against
5876a regexp like `^* [^:]*::'. However, this won't work; because the
5877asterisk is a metacharacter, it won't match the `*' at the beginning of
5878the string. In this case, we want to make the first asterisk un-magic.
5879
5880 You can do this by preceding the metacharacter with a backslash
5881character `\'. (This is also called "quoting" the metacharacter, and
5882is known as a "backslash escape".) When Guile sees a backslash in a
5883regular expression, it considers the following glyph to be an ordinary
5884character, no matter what special meaning it would ordinarily have.
5885Therefore, we can make the above example work by changing the regexp to
5886`^\* [^:]*::'. The `\*' sequence tells the regular expression engine
5887to match only a single asterisk in the target string.
5888
5889 Since the backslash is itself a metacharacter, you may force a
5890regexp to match a backslash in the target string by preceding the
5891backslash with itself. For example, to find variable references in a
5892TeX program, you might want to find occurrences of the string `\let\'
5893followed by any number of alphabetic characters. The regular expression
5894`\\let\\[A-Za-z]*' would do this: the double backslashes in the regexp
5895each match a single backslash in the target string.
5896
5897**** Function: regexp-quote STR
5898 Quote each special character found in STR with a backslash, and
5899 return the resulting string.
5900
5901 *Very important:* Using backslash escapes in Guile source code (as
5902in Emacs Lisp or C) can be tricky, because the backslash character has
5903special meaning for the Guile reader. For example, if Guile encounters
5904the character sequence `\n' in the middle of a string while processing
5905Scheme code, it replaces those characters with a newline character.
5906Similarly, the character sequence `\t' is replaced by a horizontal tab.
5907Several of these "escape sequences" are processed by the Guile reader
5908before your code is executed. Unrecognized escape sequences are
5909ignored: if the characters `\*' appear in a string, they will be
5910translated to the single character `*'.
5911
5912 This translation is obviously undesirable for regular expressions,
5913since we want to be able to include backslashes in a string in order to
5914escape regexp metacharacters. Therefore, to make sure that a backslash
5915is preserved in a string in your Guile program, you must use *two*
5916consecutive backslashes:
5917
5918 (define Info-menu-entry-pattern (make-regexp "^\\* [^:]*"))
5919
5920 The string in this example is preprocessed by the Guile reader before
5921any code is executed. The resulting argument to `make-regexp' is the
5922string `^\* [^:]*', which is what we really want.
5923
5924 This also means that in order to write a regular expression that
5925matches a single backslash character, the regular expression string in
5926the source code must include *four* backslashes. Each consecutive pair
5927of backslashes gets translated by the Guile reader to a single
5928backslash, and the resulting double-backslash is interpreted by the
5929regexp engine as matching a single backslash character. Hence:
5930
5931 (define tex-variable-pattern (make-regexp "\\\\let\\\\=[A-Za-z]*"))
5932
5933 The reason for the unwieldiness of this syntax is historical. Both
5934regular expression pattern matchers and Unix string processing systems
5935have traditionally used backslashes with the special meanings described
5936above. The POSIX regular expression specification and ANSI C standard
5937both require these semantics. Attempting to abandon either convention
5938would cause other kinds of compatibility problems, possibly more severe
5939ones. Therefore, without extending the Scheme reader to support
5940strings with different quoting conventions (an ungainly and confusing
5941extension when implemented in other languages), we must adhere to this
5942cumbersome escape syntax.
5943
7ad3c1e7
GH
5944* Changes to the gh_ interface
5945
5946* Changes to the scm_ interface
5947
5948* Changes to system call interfaces:
94982a4e 5949
7ad3c1e7 5950** The value returned by `raise' is now unspecified. It throws an exception
e1a191a8
GH
5951if an error occurs.
5952
94982a4e 5953*** A new procedure `sigaction' can be used to install signal handlers
115b09a5
GH
5954
5955(sigaction signum [action] [flags])
5956
5957signum is the signal number, which can be specified using the value
5958of SIGINT etc.
5959
5960If action is omitted, sigaction returns a pair: the CAR is the current
5961signal hander, which will be either an integer with the value SIG_DFL
5962(default action) or SIG_IGN (ignore), or the Scheme procedure which
5963handles the signal, or #f if a non-Scheme procedure handles the
5964signal. The CDR contains the current sigaction flags for the handler.
5965
5966If action is provided, it is installed as the new handler for signum.
5967action can be a Scheme procedure taking one argument, or the value of
5968SIG_DFL (default action) or SIG_IGN (ignore), or #f to restore
5969whatever signal handler was installed before sigaction was first used.
5970Flags can optionally be specified for the new handler (SA_RESTART is
5971always used if the system provides it, so need not be specified.) The
5972return value is a pair with information about the old handler as
5973described above.
5974
5975This interface does not provide access to the "signal blocking"
5976facility. Maybe this is not needed, since the thread support may
5977provide solutions to the problem of consistent access to data
5978structures.
e1a191a8 5979
94982a4e 5980*** A new procedure `flush-all-ports' is equivalent to running
89ea5b7c
GH
5981`force-output' on every port open for output.
5982
94982a4e
JB
5983** Guile now provides information on how it was built, via the new
5984global variable, %guile-build-info. This variable records the values
5985of the standard GNU makefile directory variables as an assocation
5986list, mapping variable names (symbols) onto directory paths (strings).
5987For example, to find out where the Guile link libraries were
5988installed, you can say:
5989
5990guile -c "(display (assq-ref %guile-build-info 'libdir)) (newline)"
5991
5992
5993* Changes to the scm_ interface
5994
5995** The new function scm_handle_by_message_noexit is just like the
5996existing scm_handle_by_message function, except that it doesn't call
5997exit to terminate the process. Instead, it prints a message and just
5998returns #f. This might be a more appropriate catch-all handler for
5999new dynamic roots and threads.
6000
cf78e9e8 6001\f
c484bf7f 6002Changes in Guile 1.1 (released Friday, May 16 1997):
f3b1485f
JB
6003
6004* Changes to the distribution.
6005
6006The Guile 1.0 distribution has been split up into several smaller
6007pieces:
6008guile-core --- the Guile interpreter itself.
6009guile-tcltk --- the interface between the Guile interpreter and
6010 Tcl/Tk; Tcl is an interpreter for a stringy language, and Tk
6011 is a toolkit for building graphical user interfaces.
6012guile-rgx-ctax --- the interface between Guile and the Rx regular
6013 expression matcher, and the translator for the Ctax
6014 programming language. These are packaged together because the
6015 Ctax translator uses Rx to parse Ctax source code.
6016
095936d2
JB
6017This NEWS file describes the changes made to guile-core since the 1.0
6018release.
6019
48d224d7
JB
6020We no longer distribute the documentation, since it was either out of
6021date, or incomplete. As soon as we have current documentation, we
6022will distribute it.
6023
0fcab5ed
JB
6024
6025
f3b1485f
JB
6026* Changes to the stand-alone interpreter
6027
48d224d7
JB
6028** guile now accepts command-line arguments compatible with SCSH, Olin
6029Shivers' Scheme Shell.
6030
6031In general, arguments are evaluated from left to right, but there are
6032exceptions. The following switches stop argument processing, and
6033stash all remaining command-line arguments as the value returned by
6034the (command-line) function.
6035 -s SCRIPT load Scheme source code from FILE, and exit
6036 -c EXPR evalute Scheme expression EXPR, and exit
6037 -- stop scanning arguments; run interactively
6038
6039The switches below are processed as they are encountered.
6040 -l FILE load Scheme source code from FILE
6041 -e FUNCTION after reading script, apply FUNCTION to
6042 command line arguments
6043 -ds do -s script at this point
6044 --emacs enable Emacs protocol (experimental)
6045 -h, --help display this help and exit
6046 -v, --version display version information and exit
6047 \ read arguments from following script lines
6048
6049So, for example, here is a Guile script named `ekko' (thanks, Olin)
6050which re-implements the traditional "echo" command:
6051
6052#!/usr/local/bin/guile -s
6053!#
6054(define (main args)
6055 (map (lambda (arg) (display arg) (display " "))
6056 (cdr args))
6057 (newline))
6058
6059(main (command-line))
6060
6061Suppose we invoke this script as follows:
6062
6063 ekko a speckled gecko
6064
6065Through the magic of Unix script processing (triggered by the `#!'
6066token at the top of the file), /usr/local/bin/guile receives the
6067following list of command-line arguments:
6068
6069 ("-s" "./ekko" "a" "speckled" "gecko")
6070
6071Unix inserts the name of the script after the argument specified on
6072the first line of the file (in this case, "-s"), and then follows that
6073with the arguments given to the script. Guile loads the script, which
6074defines the `main' function, and then applies it to the list of
6075remaining command-line arguments, ("a" "speckled" "gecko").
6076
095936d2
JB
6077In Unix, the first line of a script file must take the following form:
6078
6079#!INTERPRETER ARGUMENT
6080
6081where INTERPRETER is the absolute filename of the interpreter
6082executable, and ARGUMENT is a single command-line argument to pass to
6083the interpreter.
6084
6085You may only pass one argument to the interpreter, and its length is
6086limited. These restrictions can be annoying to work around, so Guile
6087provides a general mechanism (borrowed from, and compatible with,
6088SCSH) for circumventing them.
6089
6090If the ARGUMENT in a Guile script is a single backslash character,
6091`\', Guile will open the script file, parse arguments from its second
6092and subsequent lines, and replace the `\' with them. So, for example,
6093here is another implementation of the `ekko' script:
6094
6095#!/usr/local/bin/guile \
6096-e main -s
6097!#
6098(define (main args)
6099 (for-each (lambda (arg) (display arg) (display " "))
6100 (cdr args))
6101 (newline))
6102
6103If the user invokes this script as follows:
6104
6105 ekko a speckled gecko
6106
6107Unix expands this into
6108
6109 /usr/local/bin/guile \ ekko a speckled gecko
6110
6111When Guile sees the `\' argument, it replaces it with the arguments
6112read from the second line of the script, producing:
6113
6114 /usr/local/bin/guile -e main -s ekko a speckled gecko
6115
6116This tells Guile to load the `ekko' script, and apply the function
6117`main' to the argument list ("a" "speckled" "gecko").
6118
6119Here is how Guile parses the command-line arguments:
6120- Each space character terminates an argument. This means that two
6121 spaces in a row introduce an empty-string argument.
6122- The tab character is not permitted (unless you quote it with the
6123 backslash character, as described below), to avoid confusion.
6124- The newline character terminates the sequence of arguments, and will
6125 also terminate a final non-empty argument. (However, a newline
6126 following a space will not introduce a final empty-string argument;
6127 it only terminates the argument list.)
6128- The backslash character is the escape character. It escapes
6129 backslash, space, tab, and newline. The ANSI C escape sequences
6130 like \n and \t are also supported. These produce argument
6131 constituents; the two-character combination \n doesn't act like a
6132 terminating newline. The escape sequence \NNN for exactly three
6133 octal digits reads as the character whose ASCII code is NNN. As
6134 above, characters produced this way are argument constituents.
6135 Backslash followed by other characters is not allowed.
6136
48d224d7
JB
6137* Changes to the procedure for linking libguile with your programs
6138
6139** Guile now builds and installs a shared guile library, if your
6140system support shared libraries. (It still builds a static library on
6141all systems.) Guile automatically detects whether your system
6142supports shared libraries. To prevent Guile from buildisg shared
6143libraries, pass the `--disable-shared' flag to the configure script.
6144
6145Guile takes longer to compile when it builds shared libraries, because
6146it must compile every file twice --- once to produce position-
6147independent object code, and once to produce normal object code.
6148
6149** The libthreads library has been merged into libguile.
6150
6151To link a program against Guile, you now need only link against
6152-lguile and -lqt; -lthreads is no longer needed. If you are using
6153autoconf to generate configuration scripts for your application, the
6154following lines should suffice to add the appropriate libraries to
6155your link command:
6156
6157### Find quickthreads and libguile.
6158AC_CHECK_LIB(qt, main)
6159AC_CHECK_LIB(guile, scm_shell)
f3b1485f
JB
6160
6161* Changes to Scheme functions
6162
095936d2
JB
6163** Guile Scheme's special syntax for keyword objects is now optional,
6164and disabled by default.
6165
6166The syntax variation from R4RS made it difficult to port some
6167interesting packages to Guile. The routines which accepted keyword
6168arguments (mostly in the module system) have been modified to also
6169accept symbols whose names begin with `:'.
6170
6171To change the keyword syntax, you must first import the (ice-9 debug)
6172module:
6173 (use-modules (ice-9 debug))
6174
6175Then you can enable the keyword syntax as follows:
6176 (read-set! keywords 'prefix)
6177
6178To disable keyword syntax, do this:
6179 (read-set! keywords #f)
6180
6181** Many more primitive functions accept shared substrings as
6182arguments. In the past, these functions required normal, mutable
6183strings as arguments, although they never made use of this
6184restriction.
6185
6186** The uniform array functions now operate on byte vectors. These
6187functions are `array-fill!', `serial-array-copy!', `array-copy!',
6188`serial-array-map', `array-map', `array-for-each', and
6189`array-index-map!'.
6190
6191** The new functions `trace' and `untrace' implement simple debugging
6192support for Scheme functions.
6193
6194The `trace' function accepts any number of procedures as arguments,
6195and tells the Guile interpreter to display each procedure's name and
6196arguments each time the procedure is invoked. When invoked with no
6197arguments, `trace' returns the list of procedures currently being
6198traced.
6199
6200The `untrace' function accepts any number of procedures as arguments,
6201and tells the Guile interpreter not to trace them any more. When
6202invoked with no arguments, `untrace' untraces all curretly traced
6203procedures.
6204
6205The tracing in Guile has an advantage over most other systems: we
6206don't create new procedure objects, but mark the procedure objects
6207themselves. This means that anonymous and internal procedures can be
6208traced.
6209
6210** The function `assert-repl-prompt' has been renamed to
6211`set-repl-prompt!'. It takes one argument, PROMPT.
6212- If PROMPT is #f, the Guile read-eval-print loop will not prompt.
6213- If PROMPT is a string, we use it as a prompt.
6214- If PROMPT is a procedure accepting no arguments, we call it, and
6215 display the result as a prompt.
6216- Otherwise, we display "> ".
6217
6218** The new function `eval-string' reads Scheme expressions from a
6219string and evaluates them, returning the value of the last expression
6220in the string. If the string contains no expressions, it returns an
6221unspecified value.
6222
6223** The new function `thunk?' returns true iff its argument is a
6224procedure of zero arguments.
6225
6226** `defined?' is now a builtin function, instead of syntax. This
6227means that its argument should be quoted. It returns #t iff its
6228argument is bound in the current module.
6229
6230** The new syntax `use-modules' allows you to add new modules to your
6231environment without re-typing a complete `define-module' form. It
6232accepts any number of module names as arguments, and imports their
6233public bindings into the current module.
6234
6235** The new function (module-defined? NAME MODULE) returns true iff
6236NAME, a symbol, is defined in MODULE, a module object.
6237
6238** The new function `builtin-bindings' creates and returns a hash
6239table containing copies of all the root module's bindings.
6240
6241** The new function `builtin-weak-bindings' does the same as
6242`builtin-bindings', but creates a doubly-weak hash table.
6243
6244** The `equal?' function now considers variable objects to be
6245equivalent if they have the same name and the same value.
6246
6247** The new function `command-line' returns the command-line arguments
6248given to Guile, as a list of strings.
6249
6250When using guile as a script interpreter, `command-line' returns the
6251script's arguments; those processed by the interpreter (like `-s' or
6252`-c') are omitted. (In other words, you get the normal, expected
6253behavior.) Any application that uses scm_shell to process its
6254command-line arguments gets this behavior as well.
6255
6256** The new function `load-user-init' looks for a file called `.guile'
6257in the user's home directory, and loads it if it exists. This is
6258mostly for use by the code generated by scm_compile_shell_switches,
6259but we thought it might also be useful in other circumstances.
6260
6261** The new function `log10' returns the base-10 logarithm of its
6262argument.
6263
6264** Changes to I/O functions
6265
6c0201ad 6266*** The functions `read', `primitive-load', `read-and-eval!', and
095936d2
JB
6267`primitive-load-path' no longer take optional arguments controlling
6268case insensitivity and a `#' parser.
6269
6270Case sensitivity is now controlled by a read option called
6271`case-insensitive'. The user can add new `#' syntaxes with the
6272`read-hash-extend' function (see below).
6273
6274*** The new function `read-hash-extend' allows the user to change the
6275syntax of Guile Scheme in a somewhat controlled way.
6276
6277(read-hash-extend CHAR PROC)
6278 When parsing S-expressions, if we read a `#' character followed by
6279 the character CHAR, use PROC to parse an object from the stream.
6280 If PROC is #f, remove any parsing procedure registered for CHAR.
6281
6282 The reader applies PROC to two arguments: CHAR and an input port.
6283
6c0201ad 6284*** The new functions read-delimited and read-delimited! provide a
095936d2
JB
6285general mechanism for doing delimited input on streams.
6286
6287(read-delimited DELIMS [PORT HANDLE-DELIM])
6288 Read until we encounter one of the characters in DELIMS (a string),
6289 or end-of-file. PORT is the input port to read from; it defaults to
6290 the current input port. The HANDLE-DELIM parameter determines how
6291 the terminating character is handled; it should be one of the
6292 following symbols:
6293
6294 'trim omit delimiter from result
6295 'peek leave delimiter character in input stream
6296 'concat append delimiter character to returned value
6297 'split return a pair: (RESULT . TERMINATOR)
6298
6299 HANDLE-DELIM defaults to 'peek.
6300
6301(read-delimited! DELIMS BUF [PORT HANDLE-DELIM START END])
6302 A side-effecting variant of `read-delimited'.
6303
6304 The data is written into the string BUF at the indices in the
6305 half-open interval [START, END); the default interval is the whole
6306 string: START = 0 and END = (string-length BUF). The values of
6307 START and END must specify a well-defined interval in BUF, i.e.
6308 0 <= START <= END <= (string-length BUF).
6309
6310 It returns NBYTES, the number of bytes read. If the buffer filled
6311 up without a delimiter character being found, it returns #f. If the
6312 port is at EOF when the read starts, it returns the EOF object.
6313
6314 If an integer is returned (i.e., the read is successfully terminated
6315 by reading a delimiter character), then the HANDLE-DELIM parameter
6316 determines how to handle the terminating character. It is described
6317 above, and defaults to 'peek.
6318
6319(The descriptions of these functions were borrowed from the SCSH
6320manual, by Olin Shivers and Brian Carlstrom.)
6321
6322*** The `%read-delimited!' function is the primitive used to implement
6323`read-delimited' and `read-delimited!'.
6324
6325(%read-delimited! DELIMS BUF GOBBLE? [PORT START END])
6326
6327This returns a pair of values: (TERMINATOR . NUM-READ).
6328- TERMINATOR describes why the read was terminated. If it is a
6329 character or the eof object, then that is the value that terminated
6330 the read. If it is #f, the function filled the buffer without finding
6331 a delimiting character.
6332- NUM-READ is the number of characters read into BUF.
6333
6334If the read is successfully terminated by reading a delimiter
6335character, then the gobble? parameter determines what to do with the
6336terminating character. If true, the character is removed from the
6337input stream; if false, the character is left in the input stream
6338where a subsequent read operation will retrieve it. In either case,
6339the character is also the first value returned by the procedure call.
6340
6341(The descriptions of this function was borrowed from the SCSH manual,
6342by Olin Shivers and Brian Carlstrom.)
6343
6344*** The `read-line' and `read-line!' functions have changed; they now
6345trim the terminator by default; previously they appended it to the
6346returned string. For the old behavior, use (read-line PORT 'concat).
6347
6348*** The functions `uniform-array-read!' and `uniform-array-write!' now
6349take new optional START and END arguments, specifying the region of
6350the array to read and write.
6351
f348c807
JB
6352*** The `ungetc-char-ready?' function has been removed. We feel it's
6353inappropriate for an interface to expose implementation details this
6354way.
095936d2
JB
6355
6356** Changes to the Unix library and system call interface
6357
6358*** The new fcntl function provides access to the Unix `fcntl' system
6359call.
6360
6361(fcntl PORT COMMAND VALUE)
6362 Apply COMMAND to PORT's file descriptor, with VALUE as an argument.
6363 Values for COMMAND are:
6364
6365 F_DUPFD duplicate a file descriptor
6366 F_GETFD read the descriptor's close-on-exec flag
6367 F_SETFD set the descriptor's close-on-exec flag to VALUE
6368 F_GETFL read the descriptor's flags, as set on open
6369 F_SETFL set the descriptor's flags, as set on open to VALUE
6370 F_GETOWN return the process ID of a socket's owner, for SIGIO
6371 F_SETOWN set the process that owns a socket to VALUE, for SIGIO
6372 FD_CLOEXEC not sure what this is
6373
6374For details, see the documentation for the fcntl system call.
6375
6376*** The arguments to `select' have changed, for compatibility with
6377SCSH. The TIMEOUT parameter may now be non-integral, yielding the
6378expected behavior. The MILLISECONDS parameter has been changed to
6379MICROSECONDS, to more closely resemble the underlying system call.
6380The RVEC, WVEC, and EVEC arguments can now be vectors; the type of the
6381corresponding return set will be the same.
6382
6383*** The arguments to the `mknod' system call have changed. They are
6384now:
6385
6386(mknod PATH TYPE PERMS DEV)
6387 Create a new file (`node') in the file system. PATH is the name of
6388 the file to create. TYPE is the kind of file to create; it should
6389 be 'fifo, 'block-special, or 'char-special. PERMS specifies the
6390 permission bits to give the newly created file. If TYPE is
6391 'block-special or 'char-special, DEV specifies which device the
6392 special file refers to; its interpretation depends on the kind of
6393 special file being created.
6394
6395*** The `fork' function has been renamed to `primitive-fork', to avoid
6396clashing with various SCSH forks.
6397
6398*** The `recv' and `recvfrom' functions have been renamed to `recv!'
6399and `recvfrom!'. They no longer accept a size for a second argument;
6400you must pass a string to hold the received value. They no longer
6401return the buffer. Instead, `recv' returns the length of the message
6402received, and `recvfrom' returns a pair containing the packet's length
6c0201ad 6403and originating address.
095936d2
JB
6404
6405*** The file descriptor datatype has been removed, as have the
6406`read-fd', `write-fd', `close', `lseek', and `dup' functions.
6407We plan to replace these functions with a SCSH-compatible interface.
6408
6409*** The `create' function has been removed; it's just a special case
6410of `open'.
6411
6412*** There are new functions to break down process termination status
6413values. In the descriptions below, STATUS is a value returned by
6414`waitpid'.
6415
6416(status:exit-val STATUS)
6417 If the child process exited normally, this function returns the exit
6418 code for the child process (i.e., the value passed to exit, or
6419 returned from main). If the child process did not exit normally,
6420 this function returns #f.
6421
6422(status:stop-sig STATUS)
6423 If the child process was suspended by a signal, this function
6424 returns the signal that suspended the child. Otherwise, it returns
6425 #f.
6426
6427(status:term-sig STATUS)
6428 If the child process terminated abnormally, this function returns
6429 the signal that terminated the child. Otherwise, this function
6430 returns false.
6431
6432POSIX promises that exactly one of these functions will return true on
6433a valid STATUS value.
6434
6435These functions are compatible with SCSH.
6436
6437*** There are new accessors and setters for the broken-out time vectors
48d224d7
JB
6438returned by `localtime', `gmtime', and that ilk. They are:
6439
6440 Component Accessor Setter
6441 ========================= ============ ============
6442 seconds tm:sec set-tm:sec
6443 minutes tm:min set-tm:min
6444 hours tm:hour set-tm:hour
6445 day of the month tm:mday set-tm:mday
6446 month tm:mon set-tm:mon
6447 year tm:year set-tm:year
6448 day of the week tm:wday set-tm:wday
6449 day in the year tm:yday set-tm:yday
6450 daylight saving time tm:isdst set-tm:isdst
6451 GMT offset, seconds tm:gmtoff set-tm:gmtoff
6452 name of time zone tm:zone set-tm:zone
6453
095936d2
JB
6454*** There are new accessors for the vectors returned by `uname',
6455describing the host system:
48d224d7
JB
6456
6457 Component Accessor
6458 ============================================== ================
6459 name of the operating system implementation utsname:sysname
6460 network name of this machine utsname:nodename
6461 release level of the operating system utsname:release
6462 version level of the operating system utsname:version
6463 machine hardware platform utsname:machine
6464
095936d2
JB
6465*** There are new accessors for the vectors returned by `getpw',
6466`getpwnam', `getpwuid', and `getpwent', describing entries from the
6467system's user database:
6468
6469 Component Accessor
6470 ====================== =================
6471 user name passwd:name
6472 user password passwd:passwd
6473 user id passwd:uid
6474 group id passwd:gid
6475 real name passwd:gecos
6476 home directory passwd:dir
6477 shell program passwd:shell
6478
6479*** There are new accessors for the vectors returned by `getgr',
6480`getgrnam', `getgrgid', and `getgrent', describing entries from the
6481system's group database:
6482
6483 Component Accessor
6484 ======================= ============
6485 group name group:name
6486 group password group:passwd
6487 group id group:gid
6488 group members group:mem
6489
6490*** There are new accessors for the vectors returned by `gethost',
6491`gethostbyaddr', `gethostbyname', and `gethostent', describing
6492internet hosts:
6493
6494 Component Accessor
6495 ========================= ===============
6496 official name of host hostent:name
6497 alias list hostent:aliases
6498 host address type hostent:addrtype
6499 length of address hostent:length
6500 list of addresses hostent:addr-list
6501
6502*** There are new accessors for the vectors returned by `getnet',
6503`getnetbyaddr', `getnetbyname', and `getnetent', describing internet
6504networks:
6505
6506 Component Accessor
6507 ========================= ===============
6508 official name of net netent:name
6509 alias list netent:aliases
6510 net number type netent:addrtype
6511 net number netent:net
6512
6513*** There are new accessors for the vectors returned by `getproto',
6514`getprotobyname', `getprotobynumber', and `getprotoent', describing
6515internet protocols:
6516
6517 Component Accessor
6518 ========================= ===============
6519 official protocol name protoent:name
6520 alias list protoent:aliases
6521 protocol number protoent:proto
6522
6523*** There are new accessors for the vectors returned by `getserv',
6524`getservbyname', `getservbyport', and `getservent', describing
6525internet protocols:
6526
6527 Component Accessor
6528 ========================= ===============
6c0201ad 6529 official service name servent:name
095936d2 6530 alias list servent:aliases
6c0201ad
TTN
6531 port number servent:port
6532 protocol to use servent:proto
095936d2
JB
6533
6534*** There are new accessors for the sockaddr structures returned by
6535`accept', `getsockname', `getpeername', `recvfrom!':
6536
6537 Component Accessor
6538 ======================================== ===============
6c0201ad 6539 address format (`family') sockaddr:fam
095936d2
JB
6540 path, for file domain addresses sockaddr:path
6541 address, for internet domain addresses sockaddr:addr
6542 TCP or UDP port, for internet sockaddr:port
6543
6544*** The `getpwent', `getgrent', `gethostent', `getnetent',
6545`getprotoent', and `getservent' functions now return #f at the end of
6546the user database. (They used to throw an exception.)
6547
6548Note that calling MUMBLEent function is equivalent to calling the
6549corresponding MUMBLE function with no arguments.
6550
6551*** The `setpwent', `setgrent', `sethostent', `setnetent',
6552`setprotoent', and `setservent' routines now take no arguments.
6553
6554*** The `gethost', `getproto', `getnet', and `getserv' functions now
6555provide more useful information when they throw an exception.
6556
6557*** The `lnaof' function has been renamed to `inet-lnaof'.
6558
6559*** Guile now claims to have the `current-time' feature.
6560
6561*** The `mktime' function now takes an optional second argument ZONE,
6562giving the time zone to use for the conversion. ZONE should be a
6563string, in the same format as expected for the "TZ" environment variable.
6564
6565*** The `strptime' function now returns a pair (TIME . COUNT), where
6566TIME is the parsed time as a vector, and COUNT is the number of
6567characters from the string left unparsed. This function used to
6568return the remaining characters as a string.
6569
6570*** The `gettimeofday' function has replaced the old `time+ticks' function.
6571The return value is now (SECONDS . MICROSECONDS); the fractional
6572component is no longer expressed in "ticks".
6573
6574*** The `ticks/sec' constant has been removed, in light of the above change.
6685dc83 6575
ea00ecba
MG
6576* Changes to the gh_ interface
6577
6578** gh_eval_str() now returns an SCM object which is the result of the
6579evaluation
6580
aaef0d2a
MG
6581** gh_scm2str() now copies the Scheme data to a caller-provided C
6582array
6583
6584** gh_scm2newstr() now makes a C array, copies the Scheme data to it,
6585and returns the array
6586
6587** gh_scm2str0() is gone: there is no need to distinguish
6588null-terminated from non-null-terminated, since gh_scm2newstr() allows
6589the user to interpret the data both ways.
6590
f3b1485f
JB
6591* Changes to the scm_ interface
6592
095936d2
JB
6593** The new function scm_symbol_value0 provides an easy way to get a
6594symbol's value from C code:
6595
6596SCM scm_symbol_value0 (char *NAME)
6597 Return the value of the symbol named by the null-terminated string
6598 NAME in the current module. If the symbol named NAME is unbound in
6599 the current module, return SCM_UNDEFINED.
6600
6601** The new function scm_sysintern0 creates new top-level variables,
6602without assigning them a value.
6603
6604SCM scm_sysintern0 (char *NAME)
6605 Create a new Scheme top-level variable named NAME. NAME is a
6606 null-terminated string. Return the variable's value cell.
6607
6608** The function scm_internal_catch is the guts of catch. It handles
6609all the mechanics of setting up a catch target, invoking the catch
6610body, and perhaps invoking the handler if the body does a throw.
6611
6612The function is designed to be usable from C code, but is general
6613enough to implement all the semantics Guile Scheme expects from throw.
6614
6615TAG is the catch tag. Typically, this is a symbol, but this function
6616doesn't actually care about that.
6617
6618BODY is a pointer to a C function which runs the body of the catch;
6619this is the code you can throw from. We call it like this:
6620 BODY (BODY_DATA, JMPBUF)
6621where:
6622 BODY_DATA is just the BODY_DATA argument we received; we pass it
6623 through to BODY as its first argument. The caller can make
6624 BODY_DATA point to anything useful that BODY might need.
6625 JMPBUF is the Scheme jmpbuf object corresponding to this catch,
6626 which we have just created and initialized.
6627
6628HANDLER is a pointer to a C function to deal with a throw to TAG,
6629should one occur. We call it like this:
6630 HANDLER (HANDLER_DATA, THROWN_TAG, THROW_ARGS)
6631where
6632 HANDLER_DATA is the HANDLER_DATA argument we recevied; it's the
6633 same idea as BODY_DATA above.
6634 THROWN_TAG is the tag that the user threw to; usually this is
6635 TAG, but it could be something else if TAG was #t (i.e., a
6636 catch-all), or the user threw to a jmpbuf.
6637 THROW_ARGS is the list of arguments the user passed to the THROW
6638 function.
6639
6640BODY_DATA is just a pointer we pass through to BODY. HANDLER_DATA
6641is just a pointer we pass through to HANDLER. We don't actually
6642use either of those pointers otherwise ourselves. The idea is
6643that, if our caller wants to communicate something to BODY or
6644HANDLER, it can pass a pointer to it as MUMBLE_DATA, which BODY and
6645HANDLER can then use. Think of it as a way to make BODY and
6646HANDLER closures, not just functions; MUMBLE_DATA points to the
6647enclosed variables.
6648
6649Of course, it's up to the caller to make sure that any data a
6650MUMBLE_DATA needs is protected from GC. A common way to do this is
6651to make MUMBLE_DATA a pointer to data stored in an automatic
6652structure variable; since the collector must scan the stack for
6653references anyway, this assures that any references in MUMBLE_DATA
6654will be found.
6655
6656** The new function scm_internal_lazy_catch is exactly like
6657scm_internal_catch, except:
6658
6659- It does not unwind the stack (this is the major difference).
6660- If handler returns, its value is returned from the throw.
6661- BODY always receives #f as its JMPBUF argument (since there's no
6662 jmpbuf associated with a lazy catch, because we don't unwind the
6663 stack.)
6664
6665** scm_body_thunk is a new body function you can pass to
6666scm_internal_catch if you want the body to be like Scheme's `catch'
6667--- a thunk, or a function of one argument if the tag is #f.
6668
6669BODY_DATA is a pointer to a scm_body_thunk_data structure, which
6670contains the Scheme procedure to invoke as the body, and the tag
6671we're catching. If the tag is #f, then we pass JMPBUF (created by
6672scm_internal_catch) to the body procedure; otherwise, the body gets
6673no arguments.
6674
6675** scm_handle_by_proc is a new handler function you can pass to
6676scm_internal_catch if you want the handler to act like Scheme's catch
6677--- call a procedure with the tag and the throw arguments.
6678
6679If the user does a throw to this catch, this function runs a handler
6680procedure written in Scheme. HANDLER_DATA is a pointer to an SCM
6681variable holding the Scheme procedure object to invoke. It ought to
6682be a pointer to an automatic variable (i.e., one living on the stack),
6683or the procedure object should be otherwise protected from GC.
6684
6685** scm_handle_by_message is a new handler function to use with
6686`scm_internal_catch' if you want Guile to print a message and die.
6687It's useful for dealing with throws to uncaught keys at the top level.
6688
6689HANDLER_DATA, if non-zero, is assumed to be a char * pointing to a
6690message header to print; if zero, we use "guile" instead. That
6691text is followed by a colon, then the message described by ARGS.
6692
6693** The return type of scm_boot_guile is now void; the function does
6694not return a value, and indeed, never returns at all.
6695
f3b1485f
JB
6696** The new function scm_shell makes it easy for user applications to
6697process command-line arguments in a way that is compatible with the
6698stand-alone guile interpreter (which is in turn compatible with SCSH,
6699the Scheme shell).
6700
6701To use the scm_shell function, first initialize any guile modules
6702linked into your application, and then call scm_shell with the values
7ed46dc8 6703of ARGC and ARGV your `main' function received. scm_shell will add
f3b1485f
JB
6704any SCSH-style meta-arguments from the top of the script file to the
6705argument vector, and then process the command-line arguments. This
6706generally means loading a script file or starting up an interactive
6707command interpreter. For details, see "Changes to the stand-alone
6708interpreter" above.
6709
095936d2 6710** The new functions scm_get_meta_args and scm_count_argv help you
6c0201ad 6711implement the SCSH-style meta-argument, `\'.
095936d2
JB
6712
6713char **scm_get_meta_args (int ARGC, char **ARGV)
6714 If the second element of ARGV is a string consisting of a single
6715 backslash character (i.e. "\\" in Scheme notation), open the file
6716 named by the following argument, parse arguments from it, and return
6717 the spliced command line. The returned array is terminated by a
6718 null pointer.
6c0201ad 6719
095936d2
JB
6720 For details of argument parsing, see above, under "guile now accepts
6721 command-line arguments compatible with SCSH..."
6722
6723int scm_count_argv (char **ARGV)
6724 Count the arguments in ARGV, assuming it is terminated by a null
6725 pointer.
6726
6727For an example of how these functions might be used, see the source
6728code for the function scm_shell in libguile/script.c.
6729
6730You will usually want to use scm_shell instead of calling this
6731function yourself.
6732
6733** The new function scm_compile_shell_switches turns an array of
6734command-line arguments into Scheme code to carry out the actions they
6735describe. Given ARGC and ARGV, it returns a Scheme expression to
6736evaluate, and calls scm_set_program_arguments to make any remaining
6737command-line arguments available to the Scheme code. For example,
6738given the following arguments:
6739
6740 -e main -s ekko a speckled gecko
6741
6742scm_set_program_arguments will return the following expression:
6743
6744 (begin (load "ekko") (main (command-line)) (quit))
6745
6746You will usually want to use scm_shell instead of calling this
6747function yourself.
6748
6749** The function scm_shell_usage prints a usage message appropriate for
6750an interpreter that uses scm_compile_shell_switches to handle its
6751command-line arguments.
6752
6753void scm_shell_usage (int FATAL, char *MESSAGE)
6754 Print a usage message to the standard error output. If MESSAGE is
6755 non-zero, write it before the usage message, followed by a newline.
6756 If FATAL is non-zero, exit the process, using FATAL as the
6757 termination status. (If you want to be compatible with Guile,
6758 always use 1 as the exit status when terminating due to command-line
6759 usage problems.)
6760
6761You will usually want to use scm_shell instead of calling this
6762function yourself.
48d224d7
JB
6763
6764** scm_eval_0str now returns SCM_UNSPECIFIED if the string contains no
095936d2
JB
6765expressions. It used to return SCM_EOL. Earth-shattering.
6766
6767** The macros for declaring scheme objects in C code have been
6768rearranged slightly. They are now:
6769
6770SCM_SYMBOL (C_NAME, SCHEME_NAME)
6771 Declare a static SCM variable named C_NAME, and initialize it to
6772 point to the Scheme symbol whose name is SCHEME_NAME. C_NAME should
6773 be a C identifier, and SCHEME_NAME should be a C string.
6774
6775SCM_GLOBAL_SYMBOL (C_NAME, SCHEME_NAME)
6776 Just like SCM_SYMBOL, but make C_NAME globally visible.
6777
6778SCM_VCELL (C_NAME, SCHEME_NAME)
6779 Create a global variable at the Scheme level named SCHEME_NAME.
6780 Declare a static SCM variable named C_NAME, and initialize it to
6781 point to the Scheme variable's value cell.
6782
6783SCM_GLOBAL_VCELL (C_NAME, SCHEME_NAME)
6784 Just like SCM_VCELL, but make C_NAME globally visible.
6785
6786The `guile-snarf' script writes initialization code for these macros
6787to its standard output, given C source code as input.
6788
6789The SCM_GLOBAL macro is gone.
6790
6791** The scm_read_line and scm_read_line_x functions have been replaced
6792by Scheme code based on the %read-delimited! procedure (known to C
6793code as scm_read_delimited_x). See its description above for more
6794information.
48d224d7 6795
095936d2
JB
6796** The function scm_sys_open has been renamed to scm_open. It now
6797returns a port instead of an FD object.
ea00ecba 6798
095936d2
JB
6799* The dynamic linking support has changed. For more information, see
6800libguile/DYNAMIC-LINKING.
ea00ecba 6801
f7b47737
JB
6802\f
6803Guile 1.0b3
3065a62a 6804
f3b1485f
JB
6805User-visible changes from Thursday, September 5, 1996 until Guile 1.0
6806(Sun 5 Jan 1997):
3065a62a 6807
4b521edb 6808* Changes to the 'guile' program:
3065a62a 6809
4b521edb
JB
6810** Guile now loads some new files when it starts up. Guile first
6811searches the load path for init.scm, and loads it if found. Then, if
6812Guile is not being used to execute a script, and the user's home
6813directory contains a file named `.guile', Guile loads that.
c6486f8a 6814
4b521edb 6815** You can now use Guile as a shell script interpreter.
3065a62a
JB
6816
6817To paraphrase the SCSH manual:
6818
6819 When Unix tries to execute an executable file whose first two
6820 characters are the `#!', it treats the file not as machine code to
6821 be directly executed by the native processor, but as source code
6822 to be executed by some interpreter. The interpreter to use is
6823 specified immediately after the #! sequence on the first line of
6824 the source file. The kernel reads in the name of the interpreter,
6825 and executes that instead. It passes the interpreter the source
6826 filename as its first argument, with the original arguments
6827 following. Consult the Unix man page for the `exec' system call
6828 for more information.
6829
1a1945be
JB
6830Now you can use Guile as an interpreter, using a mechanism which is a
6831compatible subset of that provided by SCSH.
6832
3065a62a
JB
6833Guile now recognizes a '-s' command line switch, whose argument is the
6834name of a file of Scheme code to load. It also treats the two
6835characters `#!' as the start of a comment, terminated by `!#'. Thus,
6836to make a file of Scheme code directly executable by Unix, insert the
6837following two lines at the top of the file:
6838
6839#!/usr/local/bin/guile -s
6840!#
6841
6842Guile treats the argument of the `-s' command-line switch as the name
6843of a file of Scheme code to load, and treats the sequence `#!' as the
6844start of a block comment, terminated by `!#'.
6845
6846For example, here's a version of 'echo' written in Scheme:
6847
6848#!/usr/local/bin/guile -s
6849!#
6850(let loop ((args (cdr (program-arguments))))
6851 (if (pair? args)
6852 (begin
6853 (display (car args))
6854 (if (pair? (cdr args))
6855 (display " "))
6856 (loop (cdr args)))))
6857(newline)
6858
6859Why does `#!' start a block comment terminated by `!#', instead of the
6860end of the line? That is the notation SCSH uses, and although we
6861don't yet support the other SCSH features that motivate that choice,
6862we would like to be backward-compatible with any existing Guile
3763761c
JB
6863scripts once we do. Furthermore, if the path to Guile on your system
6864is too long for your kernel, you can start the script with this
6865horrible hack:
6866
6867#!/bin/sh
6868exec /really/long/path/to/guile -s "$0" ${1+"$@"}
6869!#
3065a62a
JB
6870
6871Note that some very old Unix systems don't support the `#!' syntax.
6872
c6486f8a 6873
4b521edb 6874** You can now run Guile without installing it.
6685dc83
JB
6875
6876Previous versions of the interactive Guile interpreter (`guile')
6877couldn't start up unless Guile's Scheme library had been installed;
6878they used the value of the environment variable `SCHEME_LOAD_PATH'
6879later on in the startup process, but not to find the startup code
6880itself. Now Guile uses `SCHEME_LOAD_PATH' in all searches for Scheme
6881code.
6882
6883To run Guile without installing it, build it in the normal way, and
6884then set the environment variable `SCHEME_LOAD_PATH' to a
6885colon-separated list of directories, including the top-level directory
6886of the Guile sources. For example, if you unpacked Guile so that the
6887full filename of this NEWS file is /home/jimb/guile-1.0b3/NEWS, then
6888you might say
6889
6890 export SCHEME_LOAD_PATH=/home/jimb/my-scheme:/home/jimb/guile-1.0b3
6891
c6486f8a 6892
4b521edb
JB
6893** Guile's read-eval-print loop no longer prints #<unspecified>
6894results. If the user wants to see this, she can evaluate the
6895expression (assert-repl-print-unspecified #t), perhaps in her startup
48d224d7 6896file.
6685dc83 6897
4b521edb
JB
6898** Guile no longer shows backtraces by default when an error occurs;
6899however, it does display a message saying how to get one, and how to
6900request that they be displayed by default. After an error, evaluate
6901 (backtrace)
6902to see a backtrace, and
6903 (debug-enable 'backtrace)
6904to see them by default.
6685dc83 6905
6685dc83 6906
d9fb83d9 6907
4b521edb
JB
6908* Changes to Guile Scheme:
6909
6910** Guile now distinguishes between #f and the empty list.
6911
6912This is for compatibility with the IEEE standard, the (possibly)
6913upcoming Revised^5 Report on Scheme, and many extant Scheme
6914implementations.
6915
6916Guile used to have #f and '() denote the same object, to make Scheme's
6917type system more compatible with Emacs Lisp's. However, the change
6918caused too much trouble for Scheme programmers, and we found another
6919way to reconcile Emacs Lisp with Scheme that didn't require this.
6920
6921
6922** Guile's delq, delv, delete functions, and their destructive
c6486f8a
JB
6923counterparts, delq!, delv!, and delete!, now remove all matching
6924elements from the list, not just the first. This matches the behavior
6925of the corresponding Emacs Lisp functions, and (I believe) the Maclisp
6926functions which inspired them.
6927
6928I recognize that this change may break code in subtle ways, but it
6929seems best to make the change before the FSF's first Guile release,
6930rather than after.
6931
6932
4b521edb 6933** The compiled-library-path function has been deleted from libguile.
6685dc83 6934
4b521edb 6935** The facilities for loading Scheme source files have changed.
c6486f8a 6936
4b521edb 6937*** The variable %load-path now tells Guile which directories to search
6685dc83
JB
6938for Scheme code. Its value is a list of strings, each of which names
6939a directory.
6940
4b521edb
JB
6941*** The variable %load-extensions now tells Guile which extensions to
6942try appending to a filename when searching the load path. Its value
6943is a list of strings. Its default value is ("" ".scm").
6944
6945*** (%search-load-path FILENAME) searches the directories listed in the
6946value of the %load-path variable for a Scheme file named FILENAME,
6947with all the extensions listed in %load-extensions. If it finds a
6948match, then it returns its full filename. If FILENAME is absolute, it
6949returns it unchanged. Otherwise, it returns #f.
6685dc83 6950
4b521edb
JB
6951%search-load-path will not return matches that refer to directories.
6952
6953*** (primitive-load FILENAME :optional CASE-INSENSITIVE-P SHARP)
6954uses %seach-load-path to find a file named FILENAME, and loads it if
6955it finds it. If it can't read FILENAME for any reason, it throws an
6956error.
6685dc83
JB
6957
6958The arguments CASE-INSENSITIVE-P and SHARP are interpreted as by the
4b521edb
JB
6959`read' function.
6960
6961*** load uses the same searching semantics as primitive-load.
6962
6963*** The functions %try-load, try-load-with-path, %load, load-with-path,
6964basic-try-load-with-path, basic-load-with-path, try-load-module-with-
6965path, and load-module-with-path have been deleted. The functions
6966above should serve their purposes.
6967
6968*** If the value of the variable %load-hook is a procedure,
6969`primitive-load' applies its value to the name of the file being
6970loaded (without the load path directory name prepended). If its value
6971is #f, it is ignored. Otherwise, an error occurs.
6972
6973This is mostly useful for printing load notification messages.
6974
6975
6976** The function `eval!' is no longer accessible from the scheme level.
6977We can't allow operations which introduce glocs into the scheme level,
6978because Guile's type system can't handle these as data. Use `eval' or
6979`read-and-eval!' (see below) as replacement.
6980
6981** The new function read-and-eval! reads an expression from PORT,
6982evaluates it, and returns the result. This is more efficient than
6983simply calling `read' and `eval', since it is not necessary to make a
6984copy of the expression for the evaluator to munge.
6985
6986Its optional arguments CASE_INSENSITIVE_P and SHARP are interpreted as
6987for the `read' function.
6988
6989
6990** The function `int?' has been removed; its definition was identical
6991to that of `integer?'.
6992
6993** The functions `<?', `<?', `<=?', `=?', `>?', and `>=?'. Code should
6994use the R4RS names for these functions.
6995
6996** The function object-properties no longer returns the hash handle;
6997it simply returns the object's property list.
6998
6999** Many functions have been changed to throw errors, instead of
7000returning #f on failure. The point of providing exception handling in
7001the language is to simplify the logic of user code, but this is less
7002useful if Guile's primitives don't throw exceptions.
7003
7004** The function `fileno' has been renamed from `%fileno'.
7005
7006** The function primitive-mode->fdes returns #t or #f now, not 1 or 0.
7007
7008
7009* Changes to Guile's C interface:
7010
7011** The library's initialization procedure has been simplified.
7012scm_boot_guile now has the prototype:
7013
7014void scm_boot_guile (int ARGC,
7015 char **ARGV,
7016 void (*main_func) (),
7017 void *closure);
7018
7019scm_boot_guile calls MAIN_FUNC, passing it CLOSURE, ARGC, and ARGV.
7020MAIN_FUNC should do all the work of the program (initializing other
7021packages, reading user input, etc.) before returning. When MAIN_FUNC
7022returns, call exit (0); this function never returns. If you want some
7023other exit value, MAIN_FUNC may call exit itself.
7024
7025scm_boot_guile arranges for program-arguments to return the strings
7026given by ARGC and ARGV. If MAIN_FUNC modifies ARGC/ARGV, should call
7027scm_set_program_arguments with the final list, so Scheme code will
7028know which arguments have been processed.
7029
7030scm_boot_guile establishes a catch-all catch handler which prints an
7031error message and exits the process. This means that Guile exits in a
7032coherent way when system errors occur and the user isn't prepared to
7033handle it. If the user doesn't like this behavior, they can establish
7034their own universal catcher in MAIN_FUNC to shadow this one.
7035
7036Why must the caller do all the real work from MAIN_FUNC? The garbage
7037collector assumes that all local variables of type SCM will be above
7038scm_boot_guile's stack frame on the stack. If you try to manipulate
7039SCM values after this function returns, it's the luck of the draw
7040whether the GC will be able to find the objects you allocate. So,
7041scm_boot_guile function exits, rather than returning, to discourage
7042people from making that mistake.
7043
7044The IN, OUT, and ERR arguments were removed; there are other
7045convenient ways to override these when desired.
7046
7047The RESULT argument was deleted; this function should never return.
7048
7049The BOOT_CMD argument was deleted; the MAIN_FUNC argument is more
7050general.
7051
7052
7053** Guile's header files should no longer conflict with your system's
7054header files.
7055
7056In order to compile code which #included <libguile.h>, previous
7057versions of Guile required you to add a directory containing all the
7058Guile header files to your #include path. This was a problem, since
7059Guile's header files have names which conflict with many systems'
7060header files.
7061
7062Now only <libguile.h> need appear in your #include path; you must
7063refer to all Guile's other header files as <libguile/mumble.h>.
7064Guile's installation procedure puts libguile.h in $(includedir), and
7065the rest in $(includedir)/libguile.
7066
7067
7068** Two new C functions, scm_protect_object and scm_unprotect_object,
7069have been added to the Guile library.
7070
7071scm_protect_object (OBJ) protects OBJ from the garbage collector.
7072OBJ will not be freed, even if all other references are dropped,
7073until someone does scm_unprotect_object (OBJ). Both functions
7074return OBJ.
7075
7076Note that calls to scm_protect_object do not nest. You can call
7077scm_protect_object any number of times on a given object, and the
7078next call to scm_unprotect_object will unprotect it completely.
7079
7080Basically, scm_protect_object and scm_unprotect_object just
7081maintain a list of references to things. Since the GC knows about
7082this list, all objects it mentions stay alive. scm_protect_object
7083adds its argument to the list; scm_unprotect_object remove its
7084argument from the list.
7085
7086
7087** scm_eval_0str now returns the value of the last expression
7088evaluated.
7089
7090** The new function scm_read_0str reads an s-expression from a
7091null-terminated string, and returns it.
7092
7093** The new function `scm_stdio_to_port' converts a STDIO file pointer
7094to a Scheme port object.
7095
7096** The new function `scm_set_program_arguments' allows C code to set
e80c8fea 7097the value returned by the Scheme `program-arguments' function.
6685dc83 7098
6685dc83 7099\f
1a1945be
JB
7100Older changes:
7101
7102* Guile no longer includes sophisticated Tcl/Tk support.
7103
7104The old Tcl/Tk support was unsatisfying to us, because it required the
7105user to link against the Tcl library, as well as Tk and Guile. The
7106interface was also un-lispy, in that it preserved Tcl/Tk's practice of
7107referring to widgets by names, rather than exporting widgets to Scheme
7108code as a special datatype.
7109
7110In the Usenix Tk Developer's Workshop held in July 1996, the Tcl/Tk
7111maintainers described some very interesting changes in progress to the
7112Tcl/Tk internals, which would facilitate clean interfaces between lone
7113Tk and other interpreters --- even for garbage-collected languages
7114like Scheme. They expected the new Tk to be publicly available in the
7115fall of 1996.
7116
7117Since it seems that Guile might soon have a new, cleaner interface to
7118lone Tk, and that the old Guile/Tk glue code would probably need to be
7119completely rewritten, we (Jim Blandy and Richard Stallman) have
7120decided not to support the old code. We'll spend the time instead on
7121a good interface to the newer Tk, as soon as it is available.
5c54da76 7122
8512dea6 7123Until then, gtcltk-lib provides trivial, low-maintenance functionality.
deb95d71 7124
5c54da76
JB
7125\f
7126Copyright information:
7127
7e267da1 7128Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
5c54da76
JB
7129
7130 Permission is granted to anyone to make or distribute verbatim copies
7131 of this document as received, in any medium, provided that the
7132 copyright notice and this permission notice are preserved,
7133 thus giving the recipient permission to redistribute in turn.
7134
7135 Permission is granted to distribute modified versions
7136 of this document, or of portions of it,
7137 under the above conditions, provided also that they
7138 carry prominent notices stating who last changed them.
7139
48d224d7
JB
7140\f
7141Local variables:
7142mode: outline
7143paragraph-separate: "[ \f]*$"
7144end: