*** empty log message ***
[bpt/guile.git] / doc / intro.texi
CommitLineData
5134bfa7 1@c $Id: intro.texi,v 1.7 2001-05-06 01:49:56 ttn Exp $
38a93523
NJ
2
3@page
4@node What is Guile?
5@chapter What is Guile?
6
7Guile is an interpreter for the Scheme programming language, packaged
8for use in a wide variety of environments. Guile implements Scheme as
9described in the
10@tex
11Revised$^5$
12@end tex
13@ifinfo
14Revised^5
15@end ifinfo
16Report on the Algorithmic Language Scheme (usually known as R5RS),
17providing clean and general data and control structures. Guile goes
18beyond the rather austere language presented in R5RS, extending it with
19a module system, full access to POSIX system calls, networking support,
20multiple threads, dynamic linking, a foreign function call interface,
21powerful string processing, and many other features needed for
22programming in the real world.
23
24Like a shell, Guile can run interactively, reading expressions from the
25user, evaluating them, and displaying the results, or as a script
26interpreter, reading and executing Scheme code from a file. However,
27Guile is also packaged as an object library, allowing other applications
28to easily incorporate a complete Scheme interpreter. An application can
29use Guile as an extension language, a clean and powerful configuration
30language, or as multi-purpose ``glue'', connecting primitives provided
31by the application. It is easy to call Scheme code from C code and vice
32versa, giving the application designer full control of how and when to
33invoke the interpreter. Applications can add new functions, data types,
34control structures, and even syntax to Guile, creating a domain-specific
35language tailored to the task at hand, but based on a robust language
36design.
37
38Guile's module system allows one to break up a large program into
39manageable sections with well-defined interfaces between them. Modules
40may contain a mixture of interpreted and compiled code; Guile can use
41either static or dynamic linking to incorporate compiled code. Modules
42also encourage developers to package up useful collections of routines
43for general distribution; as of this writing, one can find Emacs
44interfaces, database access routines, compilers, GUI toolkit interfaces,
45and HTTP client functions, among others.
46
47In the future, we hope to expand Guile to support other languages like
48Tcl and Perl by translating them to Scheme code. This means that users
49can program applications which use Guile in the language of their
50choice, rather than having the tastes of the application's author
51imposed on them.
52
53
54@page
55@node Whirlwind Tour
56@chapter A Whirlwind Tour
57
58This chapter presents a quick tour of all the ways that Guile can be
59used.
60
61@menu
5134bfa7
TTN
62* Running Guile Interactively::
63* Guile Scripts::
64* Linking Programs With Guile::
65* Writing Extensions for Guile::
66* Guile Modules::
38a93523
NJ
67@end menu
68
69
70@node Running Guile Interactively
71@section Running Guile Interactively
72
73In its simplest form, Guile acts as an interactive interpreter for the
74Scheme programming language, reading and evaluating Scheme expressions
75the user enters from the terminal. Here is a sample interaction between
76Guile and a user; the user's input appears after the @code{$} and
77@code{guile>} prompts:
78
79@example
80$ guile
81guile> (+ 1 2 3) ; add some numbers
826
83guile> (define (factorial n) ; define a function
84 (if (zero? n) 1 (* n (factorial (- n 1)))))
85guile> (factorial 20)
862432902008176640000
87guile> (getpwnam "jimb") ; find my entry in /etc/passwd
88#("jimb" ".0krIpK2VqNbU" 4008 10 "Jim Blandy" "/u/jimb"
89 "/usr/local/bin/bash")
90guile> @kbd{C-d}
91$
92@end example
93
94@c [[When we get a fancier read-eval-print loop, with features for bouncing
95@c around among modules, referring to the value of the last expression,
96@c etc. then this section will get longer.]]
97
98
99@node Guile Scripts
100@section Guile Scripts
101
102Like AWK, Perl, or any shell, Guile can interpret script files. A Guile
103script is simply a file of Scheme code with some extra information at
104the beginning which tells the operating system how to invoke Guile, and
105then tells Guile how to handle the Scheme code.
106
107Before we present the details, here is a trivial Guile script:
108
109@example
110#!/usr/local/bin/guile -s
111!#
112(display "Hello, world!")
113(newline)
114@end example
115
116@menu
117* The Top of a Script File:: How to start a Guile script.
118* Scripting Examples:: Simple Guile scripts, explained.
119@end menu
120
121
122@node The Top of a Script File
123@subsection The Top of a Script File
124
125The first line of a Guile script must tell the operating system to use
126Guile to evaluate the script, and then tell Guile how to go about doing
127that. Here is the simplest case:
128
129@itemize @bullet
130
131@item
132The first two characters of the file must be @samp{#!}.
133
134The operating system interprets this to mean that the rest of the line
135is the name of an executable that can interpret the script. Guile,
136however, interprets these characters as the beginning of a multi-line
137comment, terminated by the characters @samp{!#} on a line by themselves.
138(This is an extension to the syntax described in R5RS, added to support
139shell scripts.)
140
141@item
142Immediately after those two characters must come the full pathname to
143the Guile interpreter. On most systems, this would be
144@samp{/usr/local/bin/guile}.
145
146@item
147Then must come a space, followed by a command-line argument to pass to
148Guile; this should be @samp{-s}. This switch tells Guile to run a
149script, instead of soliciting the user for input from the terminal.
150There are more elaborate things one can do here; see @ref{The Meta
151Switch}.
152
153@item
154Follow this with a newline.
155
156@item
157The second line of the script should contain only the characters
158@samp{!#} --- just like the top of the file, but reversed. The
159operating system never reads this far, but Guile treats this as the end
160of the comment begun on the first line by the @samp{#!} characters.
161
162@item
163The rest of the file should be a Scheme program.
164
165@end itemize
166
167Guile reads the program, evaluating expressions in the order that they
168appear. Upon reaching the end of the file, Guile exits.
169
170The function @code{command-line} returns the name of the script file and
171any command-line arguments passed by the user, as a list of strings.
172
173For example, consider the following script file:
174@example
175#!/usr/local/bin/guile -s
176!#
177(write (command-line))
178(newline)
179@end example
180
181If you put that text in a file called @file{foo} in the current
182directory, then you could make it executable and try it out like this:
183@example
184$ chmod a+x foo
185$ ./foo
186("./foo")
187$ ./foo bar baz
188("./foo" "bar" "baz")
5134bfa7 189$
38a93523
NJ
190@end example
191
192As another example, here is a simple replacement for the POSIX
193@code{echo} command:
194@example
195#!/usr/local/bin/guile -s
196!#
197(for-each (lambda (s) (display s) (display " "))
198 (cdr (command-line)))
199(newline)
200@end example
201
202@deffn procedure command-line
203@deffnx primitive program-arguments
204Return a list of the command-line arguments passed to the currently
205running program. If the program invoked Guile with the @samp{-s},
206@samp{-c} or @samp{--} switches, these procedures ignore everything up
207to and including those switches.
208@end deffn
209
210
211@node Scripting Examples
212@subsection Scripting Examples
213
214To start with, here are some examples of invoking Guile directly:
215
216@table @code
217
218@item guile -- a b c
219Run Guile interactively; @code{(command-line)} will return @*
220@code{("/usr/local/bin/guile" "a" "b" "c")}.
221
222@item guile -s /u/jimb/ex2 a b c
223Load the file @file{/u/jimb/ex2}; @code{(command-line)} will return @*
224@code{("/u/jimb/ex2" "a" "b" "c")}.
225
226@item guile -c '(write %load-path) (newline)'
227Write the value of the variable @code{%load-path}, print a newline,
228and exit.
229
230@item guile -e main -s /u/jimb/ex4 foo
231Load the file @file{/u/jimb/ex4}, and then call the function
232@code{main}, passing it the list @code{("/u/jimb/ex4" "foo")}.
233
234@item guile -l first -ds -l last -s script
235Load the files @file{first}, @file{script}, and @file{last}, in that
236order. The @code{-ds} switch says when to process the @code{-s}
237switch. For a more motivated example, see the scripts below.
238
239@end table
240
241
242Here is a very simple Guile script:
243@example
244#!/usr/local/bin/guile -s
245!#
246(display "Hello, world!")
247(newline)
248@end example
249The first line marks the file as a Guile script. When the user invokes
250it, the system runs @file{/usr/local/bin/guile} to interpret the script,
251passing @code{-s}, the script's filename, and any arguments given to the
252script as command-line arguments. When Guile sees @code{-s
253@var{script}}, it loads @var{script}. Thus, running this program
254produces the output:
255@example
256Hello, world!
257@end example
258
259Here is a script which prints the factorial of its argument:
260@example
261#!/usr/local/bin/guile -s
262!#
263(define (fact n)
264 (if (zero? n) 1
265 (* n (fact (- n 1)))))
266
267(display (fact (string->number (cadr (command-line)))))
268(newline)
269@end example
270In action:
271@example
272$ fact 5
273120
274$
275@end example
276
277However, suppose we want to use the definition of @code{fact} in this
278file from another script. We can't simply @code{load} the script file,
279and then use @code{fact}'s definition, because the script will try to
280compute and display a factorial when we load it. To avoid this problem,
281we might write the script this way:
282
283@example
284#!/usr/local/bin/guile \
285-e main -s
286!#
287(define (fact n)
288 (if (zero? n) 1
289 (* n (fact (- n 1)))))
290
291(define (main args)
292 (display (fact (string->number (cadr args))))
293 (newline))
294@end example
295This version packages the actions the script should perform in a
296function, @code{main}. This allows us to load the file purely for its
297definitions, without any extraneous computation taking place. Then we
298used the meta switch @code{\} and the entry point switch @code{-e} to
299tell Guile to call @code{main} after loading the script.
300@example
301$ fact 50
30230414093201713378043612608166064768844377641568960512000000000000
303@end example
304
305Suppose that we now want to write a script which computes the
306@code{choose} function: given a set of @var{m} distinct objects,
307@code{(choose @var{n} @var{m})} is the number of distinct subsets
308containing @var{n} objects each. It's easy to write @code{choose} given
309@code{fact}, so we might write the script this way:
310@example
311#!/usr/local/bin/guile \
312-l fact -e main -s
313!#
314(define (choose n m)
315 (/ (fact m) (* (fact (- m n)) (fact n))))
316
317(define (main args)
318 (let ((n (string->number (cadr args)))
319 (m (string->number (caddr args))))
320 (display (choose n m))
321 (newline)))
322@end example
323
324The command-line arguments here tell Guile to first load the file
325@file{fact}, and then run the script, with @code{main} as the entry
326point. In other words, the @code{choose} script can use definitions
327made in the @code{fact} script. Here are some sample runs:
328@example
329$ choose 0 4
3301
331$ choose 1 4
3324
333$ choose 2 4
3346
335$ choose 3 4
3364
337$ choose 4 4
3381
339$ choose 50 100
340100891344545564193334812497256
341@end example
342
343
344@node Linking Programs With Guile
345@section Linking Programs With Guile
346
347The Guile interpreter is available as an object library, to be linked
348into applications using Scheme as a configuration or extension
349language. This chapter covers the mechanics of linking your program
350with Guile on a typical POSIX system.
351
352Parts III and IV of this manual describe the C functions Guile provides.
353Furthermore, any Scheme function described in this manual as a
354``Primitive'' is also callable from C; see @ref{Scheme Primitives}.
355
356The header file @code{<libguile.h>} provides declarations for all of
357Guile's functions and constants. You should @code{#include} it at the
358head of any C source file that uses identifiers described in this
ac3e3f5b
MV
359manual. Once you've compiled your source files, you need to link them
360against the Guile object code library, @code{libguile}.
361
362On most systems, you should not need to do tell the compiler and linker
363explicitely where they can find @file{libguile.h} and @file{libguile}.
364When Guile has been installed in a peculiar way, or when you are on a
365peculiar system, things might not be so easy and you might need to pass
366additional @code{-I} or @code{-L} options to the compiler. Guile
367provides the utility program @code{guile-config} to help you find the
368right values for these options. You would typically run
369@code{guile-config} during the configuration phase of your program and
370use the obtained information in the Makefile.
38a93523
NJ
371
372@menu
373* Guile Initialization Functions:: What to call first.
374* A Sample Guile Main Program:: Sources and makefiles.
375@end menu
376
377
378@node Guile Initialization Functions
379@subsection Guile Initialization Functions
380
ac3e3f5b
MV
381To initialize Guile, you can use one of two functions. The first,
382@code{scm_boot_guile}, is the most portable way to initialize Guile. It
383should be used whenever you have control over the main function of your
384program because it never returns. The second function,
385@code{scm_init_guile}, does return and can thus be used in more
386situations. However, @code{scm_init_guile} is not as widely available
387as @code{scm_boot_guile} because it needs to rely on non-portable code
388to find the stack bounds. When Guile does not know how to find these
389bounds on your system, it will not provide @code{scm_init_guile}.
390
391When you can tolerate the limits of @code{scm_boot_guile}, you should
392use it in favor of @code{scm_init_guile} since that will make your
393program more portable.
38a93523
NJ
394
395@deftypefun void scm_boot_guile (int @var{argc}, char **@var{argv}, void (*@var{main_func}) (), void *@var{closure})
396Initialize the Guile Scheme interpreter. Then call @var{main_func},
397passing it @var{closure}, @var{argc}, and @var{argv}. @var{main_func}
398should do all the work of the program (initializing other packages,
399defining application-specific functions, reading user input, and so on)
400before returning. When @var{main_func} returns, call @code{exit (0)};
401@code{scm_boot_guile} never returns. If you want some other exit value,
402have @var{main_func} call exit itself.
403
404@code{scm_boot_guile} arranges for the Scheme @code{command-line}
405function to return the strings given by @var{argc} and @var{argv}. If
406@var{main_func} modifies @var{argc} or @var{argv}, it should call
407@code{scm_set_program_arguments} with the final list, so Scheme code
408will know which arguments have been processed.
409
38a93523 410Why must the caller do all the real work from @var{main_func}? Guile's
ac3e3f5b
MV
411garbage collector scans the stack to find all local variables that
412reference Scheme objects. To do this, it needs to know the bounds of
413the stack that might contain such references. Because there is no
414protable way in C to find the base of the stack, @code{scm_boot_guile}
415assumes that all references are above its own stack frame. If you try
416to manipulate Scheme objects after this function returns, it's the luck
417of the draw whether Guile's storage manager will be able to find the
418objects you allocate. So, @code{scm_boot_guile} function exits, rather
419than returning, to discourage you from making that mistake.
420
421See @code{scm_init_guile}, below, for a function that can find the real
422base of the stack, but not in a portable way.
423@end deftypefun
424
425@deftypefun void scm_init_guile ()
426Initialize the Guile Scheme interpreter.
427
428In contrast to @code{scm_boot_guile}, this function knows how to find
429the true base of the stack and thus does not need to usurp the control
430flow of your program. However, since finding the stack base can not be
431done portably, this function might not be available in all installations
432of Guile. If you can, you should use @code{scm_boot_guile} instead.
433
434Note that @code{scm_init_guile} does not inform Guile about the command
435line arguments that should be returned by the Scheme function
436@code{comamnd-line}. You can use @code{scm_set_program_arguments} to do
437this.
38a93523
NJ
438@end deftypefun
439
440One common way to use Guile is to write a set of C functions which
441perform some useful task, make them callable from Scheme, and then link
442the program with Guile. This yields a Scheme interpreter just like
443@code{guile}, but augmented with extra functions for some specific
444application --- a special-purpose scripting language.
445
446In this situation, the application should probably process its
447command-line arguments in the same manner as the stock Guile
448interpreter. To make that straightforward, Guile provides this
449function:
450
451@deftypefun void scm_shell (int @var{argc}, char **@var{argv})
452Process command-line arguments in the manner of the @code{guile}
453executable. This includes loading the normal Guile initialization
454files, interacting with the user or running any scripts or expressions
455specified by @code{-s} or @code{-e} options, and then exiting.
456@xref{Invoking Guile}, for more details.
457
458Since this function does not return, you must do all
459application-specific initialization before calling this function.
38a93523
NJ
460@end deftypefun
461
462
463@node A Sample Guile Main Program
464@subsection A Sample Guile Main Program
465
466Here is @file{simple-guile.c}, source code for a @code{main} and an
467@code{inner_main} function that will produce a complete Guile
468interpreter.
469
470@example
471/* simple-guile.c --- how to start up the Guile
472 interpreter from C code. */
473
474/* Get declarations for all the scm_ functions. */
475#include <libguile.h>
476
477static void
478inner_main (void *closure, int argc, char **argv)
479@{
480 /* module initializations would go here */
481 scm_shell (argc, argv);
482@}
483
484int
485main (int argc, char **argv)
486@{
487 scm_boot_guile (argc, argv, inner_main, 0);
488 return 0; /* never reached */
489@}
490@end example
491
492The @code{main} function calls @code{scm_boot_guile} to initialize
493Guile, passing it @code{inner_main}. Once @code{scm_boot_guile} is
494ready, it invokes @code{inner_main}, which calls @code{scm_shell} to
495process the command-line arguments in the usual way.
496
ac3e3f5b
MV
497Here is a Makefile which you can use to compile the above program. It
498uses @code{guile-config} to learn about the necessary compiler and
499linker flags.
38a93523
NJ
500@example
501# Use GCC, if you have it installed.
502CC=gcc
503
ac3e3f5b
MV
504# Tell the C compiler where to find <libguile.h>
505CFLAGS=`guile-config compile`
38a93523 506
ac3e3f5b
MV
507# Tell the linker what libraries to use and where to find them.
508LIBS=`guile-config link`
38a93523
NJ
509
510simple-guile: simple-guile.o
ac3e3f5b
MV
511 $@{CC@} simple-guile.o $@{LIBS@} -o simple-guile
512
38a93523
NJ
513simple-guile.o: simple-guile.c
514 $@{CC@} -c $@{CFLAGS@} simple-guile.c
515@end example
516
517If you are using the GNU Autoconf package to make your application more
518portable, Autoconf will settle many of the details in the Makefile above
519automatically, making it much simpler and more portable; we recommend
ac3e3f5b
MV
520using Autoconf with Guile. Guile also provides the @code{GUILE_FLAGS}
521macro for autoconf that performs all necessary checks. Here is a
522@file{configure.in} file for @code{simple-guile} that uses this macro.
523Autoconf can use as this file as template to generate a @code{configure}
524script. In order for Autoconf to find the @code{GUILE_FLAGS} macro, you
525will need to run @code{aclocal} first. This is not really Guile
526specific, so you should refer to the Autoconf documentation REFFIXME
527when in doubt.
38a93523
NJ
528@example
529AC_INIT(simple-guile.c)
530
531# Find a C compiler.
532AC_PROG_CC
533
ac3e3f5b
MV
534# Check for Guile
535GUILE_FLAGS
38a93523
NJ
536
537# Generate a Makefile, based on the results.
538AC_OUTPUT(Makefile)
539@end example
540
541Here is a @code{Makefile.in} template, from which the @code{configure}
542script produces a Makefile customized for the host system:
543@example
544# The configure script fills in these values.
545CC=@@CC@@
ac3e3f5b
MV
546CFLAGS=@@GUILE_CFLAGS@@
547LIBS=@@GUILE_LDFLAGS@@
38a93523
NJ
548
549simple-guile: simple-guile.o
ac3e3f5b 550 $@{CC@} simple-guile.o $@{LIBS@} -o simple-guile
38a93523
NJ
551simple-guile.o: simple-guile.c
552 $@{CC@} -c $@{CFLAGS@} simple-guile.c
553@end example
554
555The developer should use Autoconf to generate the @file{configure}
556script from the @file{configure.in} template, and distribute
557@file{configure} with the application. Here's how a user might go about
558building the application:
559
560@example
561$ ls
562Makefile.in configure* configure.in simple-guile.c
563$ ./configure
564creating cache ./config.cache
ac3e3f5b 565checking for gcc... (cached) gcc
38a93523
NJ
566checking whether the C compiler (gcc ) works... yes
567checking whether the C compiler (gcc ) is a cross-compiler... no
ac3e3f5b
MV
568checking whether we are using GNU C... (cached) yes
569checking whether gcc accepts -g... (cached) yes
570checking for Guile... yes
38a93523
NJ
571creating ./config.status
572creating Makefile
573$ make
ac3e3f5b
MV
574gcc -c -I/usr/local/include simple-guile.c
575gcc simple-guile.o -L/usr/local/lib -lguile -lqthreads -lpthread -lm -o simple-guile
38a93523
NJ
576$ ./simple-guile
577guile> (+ 1 2 3)
5786
579guile> (getpwnam "jimb")
580#("jimb" "83Z7d75W2tyJQ" 4008 10 "Jim Blandy" "/u/jimb"
581 "/usr/local/bin/bash")
582guile> (exit)
5134bfa7 583$
38a93523
NJ
584@end example
585
ac3e3f5b
MV
586@node Writing Extensions for Guile
587@section Writing Extensions for Guile
588
589The previous sections have briefly explained how to write programs that
590make use of an embedded Guile interpreter. But sometimes, all you want
591to do is make new primitive procedures and data types available to the
592Scheme programmer. Writing a new version of @code{guile} is
593inconvenient in this case and it would in fact make the life of the
8d009ee4 594users of your new features needlessly hard.
ac3e3f5b
MV
595
596@c [[ the following is probably a bit longwinded ]]
597
598For example, suppose that there is a program @code{guile-db} that is a
599version of Guile with additional features for accessing a database.
600People who want to write Scheme programs that use these features would
601have to use @code{guile-db} instead of the usual @code{guile} program.
602Now suppose that there is also a program @code{guile-gtk} that extends
603Guile with access to the popular Gtk+ toolkit for graphical user
604interfaces. People who want to write GUIs in Scheme would have to use
605@code{guile-gtk}. Now, what happens when you want to write a Scheme
606application that uses a GUI to let the user accessa a database? You
607would have to write a @emph{third} program that incorporates both the
608database stuff and the GUI stuff. This might not be easy (because
609@code{guile-gtk} might be a quite obscure program, say) and taking this
610example further makes it easy to see that this approach can not work in
611practice.
612
613It would have been much better if both the database features and the GUI
614feature had been provided as libraries that can just be linked with
615@code{guile}. Guile makes it easy to do just this, and we encourage you
616to make your extensions to Guile available as libraries whenever
617possible.
618
619You write the new primitive procedures and data types in the normal
620fashion, and link them into a shared library instead of into a
621standalone program. The shared library can then be loaded dynamically
622by Guile.
623
624@menu
5134bfa7 625* A Sample Guile Extension::
ac3e3f5b
MV
626@end menu
627
628@node A Sample Guile Extension
629@subsection A Sample Guile Extension
630
631This section explains how to make the Bessel functions of the C library
632available to Scheme. First we need to write the appropriate glue code
633to convert the arguments and return values of the functions from Scheme
634to C and back. Additionally, we need a function that will add them to
635the set of Guile primitives. Because this is just an example, we will
636only implement this for the @code{j0} function, tho.
637
638Consider the following file @file{bessel.c}.
639
640@smallexample
641#include <math.h>
642#include <libguile.h>
643
644SCM
645j0_wrapper (SCM x)
646@{
647 return scm_make_real (j0 (scm_num2dbl (x, "j0")));
648@}
649
650void
651init_bessel ()
652@{
653 scm_make_gsubr ("j0", 1, 0, 0, j0_wrapper);
654@}
655@end smallexample
656
657This C source file needs to be compiled into a shared library. Here is
658how to do it on GNU/Linux:
659
660@smallexample
661gcc -shared -o libguile-bessel.so -fPIC bessel.c
662@end smallexample
663
664For creating shared libraries portably, we recommend the use of
665@code{GNU Libtool}.
666
667A shared library can be loaded into a running Guile process with
668@code{dynamic-link}. After it has been linked you can call its exported
669functions via @code{dynamic-call}. For our example, we are going to
670call the function @code{init_bessel} which will make @code{j0_wrapper}
671available to Scheme programs with the name @code{j0}. Note that we do
672not specify a filename extension such as @file{.so} when invoking
673@code{dynamic-link}. The right extension for the host platform will be
674provided automatically.
675
676@smalllisp
677(define bessel-lib (dynamic-link "libguile-bessel"))
678(dynamic-call "init_bessel" bessel-lib)
679(j0 2)
680@result{} 0.223890779141236
681@end smalllisp
682
683For this to work, @code{dynamic-link} must be able to find
684@file{libguile-bessel}, of course. It will look in the places that are
685usual for your operating system, and it will additionally look into the
686directories listed in the @code{LTDL_LIBRRAY_PATH} environment variable.
687
688To see how these Guile extensions via shared libraries relate to the
689module system, see below REFFIXME.
38a93523 690
95a62aed
MV
691@node Guile Modules
692@section Guile Modules
38a93523 693
ac3e3f5b 694Guile has support for dividing a program into @dfn{modules}. By using
95a62aed
MV
695modules, you can group related code together and manage the
696composition of complete programs from largely independent parts.
ac3e3f5b
MV
697
698(The module system is in flux, and will likely look very different in
699the future. Feel free to use the existing system anyway. Guile will
700provide reasonable backwards compatability.)
38a93523 701
95a62aed 702@menu
5134bfa7
TTN
703* Using Guile Modules::
704* Writing New Modules::
705* Modules and Extensions::
95a62aed
MV
706@end menu
707
708@node Using Guile Modules
709@subsection Using Existing Modules
710
2da0d971
MG
711Guile comes with a lot of useful modules, for example for string
712processing or command line parsing. Additionally, there exist many
713Guile modules written by other Guile hackers, but which have to be
714installed manually.
715
716Existing modules have to be placed in places where Guile looks for them
5134bfa7
TTN
717by default or in colon-separated directories in the environment variable
718@code{GUILE_LOAD_PATH}. When this variable is set, those directories
719are searched first, then the the default. The following command
720shows the complete list of directories searched:
721
722@smallexample
723guile -c '(for-each write-line %load-path)'
724@end smallexample
2da0d971
MG
725
726Suppose you want to use the procedures and variables exported by the
727module @code{(ice-9 popen)}, which provides the means for communicating
728with other processes over pipes. Add the following line to your
729currently running Guile REPL or the top of you script file.
730
731@lisp
732(use-modules (ice-9 popen))
733@end lisp
734
735This will load the module and make the procedures exported by
736@code{(ice-9 popen)} automatically available. The next step could be to
737open a pipe to @file{ls} and read the contents of the current directory,
738one line at a time.
739
740@lisp
741(define p (open-input-pipe "ls -l"))
742(read-line p)
743@result{}
744"total 30"
745(read-line p)
746@result{}
747"drwxr-sr-x 2 mgrabmue mgrabmue 1024 Mar 29 19:57 CVS"
748@end lisp
749
750More details of module usage can be found in (REFFIXME).
751
95a62aed
MV
752
753@node Writing New Modules
754@subsection Writing New Modules
755
2da0d971
MG
756Of course it is possible to write modules yourself. Using modules for
757structuring your programs makes them more readable and lets you
758distribute them more easily. Also, explicitly defining the procedures
759and variables which are exported from a module adds documentation to the
760source and specifies the interface a module provides.
761
762In Guile, you can create new modules and switch to exisiting modules in
763order to add bindings to them using the syntactic form
764@code{define-module}.
765
766@lisp
767(define-module (foo bar))
768
769(define (frob x) x)
770@end lisp
771
772Will create the module @code{(foo bar)}.@footnote{It is only convention
773that the module names in this section have two elements. One or more
774than two elements are perfectly fine, such as @code{(foo)} or @code{(foo
775bar braz)}} All definitions following this statement will add bindings
776to the module @code{(foo bar)}, and these bindings will not be visible
777outside of the module. To make the bindings accessible to other
778modules, you have to export them explicitly using one of the following
779means:
780
781@itemize @bullet
782@item
783Export them with the @code{export} form:
784@lisp
785(export frob)
786@end lisp
787
788@item
789Include them into the @code{define-module} form with the keyword
790@code{export}:
791@lisp
792(define-module (foo bar)
793 #:export (frob))
794@end lisp
795
796@item
797Change the definition of @code{frob} to use @code{define-public}, which
798is a combination of @code{define} and @code{export}.
799@lisp
800(define-public (frob x) x)
801@end lisp
802@end itemize
803
804After exporting, other modules can access the exported items simply by
805using @code{use-modules} to load the module @code{(foo bar)}.
806
95a62aed
MV
807
808@node Modules and Extensions
809@subsection Modules and Extensions
810
811In addition to Scheme code you can also put new procedures and other
812named features that are provided by an extension into a module.
813
814You do this by writing a small Scheme file that defines the module.
815That Scheme file in turn invokes @code{dynamic-link} and
816@code{dynamic-call} as explained above to make the extension
817available.
818
819Suppose we want to put the Bessel function @code{j0} from the example
820extension into a module called @code{(math bessel)}. We would have to
821write a Scheme file with this contents
822
823@smallexample
824(define-module (math bessel))
825
826(dynamic-call "init_bessel" (dynamic-link "libguile-bessel"))
827@end smallexample
828
a4318577 829The file should of course be saved in the right place for autoloading,
95a62aed 830for example as @file{/usr/local/share/guile/math/bessel.scm}.
38a93523
NJ
831
832@page
833@node Reporting Bugs
834@chapter Reporting Bugs
835
836Any problems with the installation should be reported to
837@email{bug-guile@@gnu.org}.
838
2da0d971 839Whenever you have found a bug in Guile you are encouraged to report it
5134bfa7
TTN
840to the Guile developers, so they can fix it. They may also be able to
841suggest workarounds when it is not possible for you to apply the bugfix
842or install a new version of Guile yourself.
2da0d971
MG
843
844Before sending in bug reports, please check with the following list that
845you really have found a bug.
846
847@itemize @bullet
848@item
849Whenever documentation and actual behaviour differ, you have certainly
850found a bug, either in the documentation or in the program.
851
852@item
853When Guile crashes, it is a bug.
854
855@item
856When Guile hangs or takes forever to complete a task, it is a bug.
857
858@item
859When calculations produce wrong results, it is a bug.
860
861@item
862When Guile signals an error for valid Scheme programs, it is a bug.
863
864@item
2da0d971
MG
865When Guile does not signal an error for invalid Scheme programs, it may
866be a bug, unless this is explicitly documented.
867
868@item
869When some part of the documentation is not clear and does not make sense
870to you even after re--reading the section, it is a bug.
871@end itemize
872
873When you write a bug report, please make sure to include as much of the
874information described below in the report. If you can't figure out some
875of the items, it is not a problem, but the more information we get, the
5134bfa7 876more likely we can diagnose and fix the bug.
2da0d971
MG
877
878@itemize @bullet
879@item
880The version number of Guile. Without this, we won't know whether there
881is any point in looking for the bug in the current version of Guile.
882
883You can get the version number by invoking the command
884
885@example
886$ guile --version
887Guile 1.4.1
888Copyright (c) 1995, 1996, 1997, 2000 Free Software Foundation
889Guile may be distributed under the terms of the GNU General Public Licence;
890certain other uses are permitted as well. For details, see the file
891`COPYING', which is included in the Guile distribution.
892There is no warranty, to the extent permitted by law.
893@end example
894
895@item
896The type of machine you are using, and the operating system name and
897version number. On GNU systems, you can get it with @file{uname}.
898
899@example
900$ uname -a
901Linux tortoise 2.2.17 #1 Thu Dec 21 17:29:05 CET 2000 i586 unknown
902@end example
903
904@item
905The operands given to the @file{configure} command when Guile was
5134bfa7
TTN
906installed. It's often useful to augment this with the output of the
907command @code{guile-config info}.
2da0d971
MG
908
909@item
910A complete list of any modifications you have made to the Guile source.
911(We may not have time to investigate the bug unless it happens in an
912unmodified Guile. But if you've made modifications and you don't tell
913us, you are sending us on a wild goose chase.)
914
915Be precise about these changes. A description in English is not
916enough--send a context diff for them.
917
918Adding files of your own, or porting to another machine, is a
919modification of the source.
920
921@item
922Details of any other deviations from the standard procedure for
923installing Guile.
924
925@item
926The complete text of any source files needed to reproduce the bug.
927
928If you can tell us a way to cause the problem without loading any source
929files, please do so. This makes it much easier to debug. If you do
930need files, make sure you arrange for us to see their exact contents.
931
932@item
933The precise Guile invocation command line we need to type to reproduce
934the bug.
935
936@item
937A description of what behavior you observe that you believe is
938incorrect. For example, "The Guile process gets a fatal signal," or,
939"The resulting output is as follows, which I think is wrong."
940
941Of course, if the bug is that Guile gets a fatal signal, then one can't
942miss it. But if the bug is incorrect results, the maintainer might fail
943to notice what is wrong. Why leave it to chance?
944
945If the manifestation of the bug is an Guile error message, it is
946important to report the precise text of the error message, and a
947backtrace showing how the Scheme program arrived at the error.
948
949This can be done using the procedure @code{backtrace} in the REPL.
950
951@item
952Check whether any programs you have loaded into Guile, including your
5134bfa7 953@file{.guile} file, set any variables that may affect the functioning of
2da0d971 954Guile. Also, see whether the problem happens in a freshly started Guile
5134bfa7
TTN
955without loading your @file{.guile} file (start Guile with the @code{-q}
956switch to prevent loading the init file). If the problem does
957@emph{not} occur then, you must report the precise contents of any
958programs that you must load into Guile in order to cause the problem to
959occur.
2da0d971
MG
960
961@item
962If the problem does depend on an init file or other Lisp programs that
963are not part of the standard Guile distribution, then you should make
964sure it is not a bug in those programs by complaining to their
965maintainers first. After they verify that they are using Guile in a way
966that is supposed to work, they should report the bug.
967
968@item
969If you wish to mention something in the Guile source, show the line of
970code with a few lines of context. Don't just give a line number.
971
972The line numbers in the development sources don't match those in your
973sources. It would take extra work for the maintainers to determine what
974code is in your version at a given line number, and we could not be
975certain.
976
977@item
978Additional information from a C debugger such as GDB might enable
979someone to find a problem on a machine which he does not have available.
980If you don't know how to use GDB, please read the GDB manual--it is not
981very long, and using GDB is easy. You can find the GDB distribution,
982including the GDB manual in online form, in most of the same places you
983can find the Guile distribution. To run Guile under GDB, you should
5134bfa7
TTN
984switch to the @file{libguile} subdirectory in which Guile was compiled, then
985do @code{gdb .libs/guile}.
986@c fixme: libguile/.libs is for libtool-enabled systems -- what about rest?
2da0d971
MG
987
988However, you need to think when you collect the additional information
989if you want it to show what causes the bug.
990
991For example, many people send just a backtrace, but that is not very
992useful by itself. A simple backtrace with arguments often conveys
993little about what is happening inside Guile, because most of the
994arguments listed in the backtrace are pointers to Scheme objects. The
995numeric values of these pointers have no significance whatever; all that
996matters is the contents of the objects they point to (and most of the
997contents are themselves pointers).
998@end itemize
999
38a93523
NJ
1000
1001
1002@c Local Variables:
1003@c TeX-master: "guile.texi"
1004@c End: