1 @c $Id: intro.texi,v 1.4 2001-03-25 00:31:10 mvo Exp $
5 @chapter What is Guile?
7 Guile is an interpreter for the Scheme programming language, packaged
8 for use in a wide variety of environments. Guile implements Scheme as
16 Report on the Algorithmic Language Scheme (usually known as R5RS),
17 providing clean and general data and control structures. Guile goes
18 beyond the rather austere language presented in R5RS, extending it with
19 a module system, full access to POSIX system calls, networking support,
20 multiple threads, dynamic linking, a foreign function call interface,
21 powerful string processing, and many other features needed for
22 programming in the real world.
24 Like a shell, Guile can run interactively, reading expressions from the
25 user, evaluating them, and displaying the results, or as a script
26 interpreter, reading and executing Scheme code from a file. However,
27 Guile is also packaged as an object library, allowing other applications
28 to easily incorporate a complete Scheme interpreter. An application can
29 use Guile as an extension language, a clean and powerful configuration
30 language, or as multi-purpose ``glue'', connecting primitives provided
31 by the application. It is easy to call Scheme code from C code and vice
32 versa, giving the application designer full control of how and when to
33 invoke the interpreter. Applications can add new functions, data types,
34 control structures, and even syntax to Guile, creating a domain-specific
35 language tailored to the task at hand, but based on a robust language
38 Guile's module system allows one to break up a large program into
39 manageable sections with well-defined interfaces between them. Modules
40 may contain a mixture of interpreted and compiled code; Guile can use
41 either static or dynamic linking to incorporate compiled code. Modules
42 also encourage developers to package up useful collections of routines
43 for general distribution; as of this writing, one can find Emacs
44 interfaces, database access routines, compilers, GUI toolkit interfaces,
45 and HTTP client functions, among others.
47 In the future, we hope to expand Guile to support other languages like
48 Tcl and Perl by translating them to Scheme code. This means that users
49 can program applications which use Guile in the language of their
50 choice, rather than having the tastes of the application's author
56 @chapter A Whirlwind Tour
58 This chapter presents a quick tour of all the ways that Guile can be
62 * Running Guile Interactively::
64 * Linking Programs With Guile::
65 * Writing Extensions for Guile::
70 @node Running Guile Interactively
71 @section Running Guile Interactively
73 In its simplest form, Guile acts as an interactive interpreter for the
74 Scheme programming language, reading and evaluating Scheme expressions
75 the user enters from the terminal. Here is a sample interaction between
76 Guile and a user; the user's input appears after the @code{$} and
77 @code{guile>} prompts:
81 guile> (+ 1 2 3) ; add some numbers
83 guile> (define (factorial n) ; define a function
84 (if (zero? n) 1 (* n (factorial (- n 1)))))
87 guile> (getpwnam "jimb") ; find my entry in /etc/passwd
88 #("jimb" ".0krIpK2VqNbU" 4008 10 "Jim Blandy" "/u/jimb"
89 "/usr/local/bin/bash")
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.]]
100 @section Guile Scripts
102 Like AWK, Perl, or any shell, Guile can interpret script files. A Guile
103 script is simply a file of Scheme code with some extra information at
104 the beginning which tells the operating system how to invoke Guile, and
105 then tells Guile how to handle the Scheme code.
107 Before we present the details, here is a trivial Guile script:
110 #!/usr/local/bin/guile -s
112 (display "Hello, world!")
117 * The Top of a Script File:: How to start a Guile script.
118 * Scripting Examples:: Simple Guile scripts, explained.
122 @node The Top of a Script File
123 @subsection The Top of a Script File
125 The first line of a Guile script must tell the operating system to use
126 Guile to evaluate the script, and then tell Guile how to go about doing
127 that. Here is the simplest case:
132 The first two characters of the file must be @samp{#!}.
134 The operating system interprets this to mean that the rest of the line
135 is the name of an executable that can interpret the script. Guile,
136 however, interprets these characters as the beginning of a multi-line
137 comment, terminated by the characters @samp{!#} on a line by themselves.
138 (This is an extension to the syntax described in R5RS, added to support
142 Immediately after those two characters must come the full pathname to
143 the Guile interpreter. On most systems, this would be
144 @samp{/usr/local/bin/guile}.
147 Then must come a space, followed by a command-line argument to pass to
148 Guile; this should be @samp{-s}. This switch tells Guile to run a
149 script, instead of soliciting the user for input from the terminal.
150 There are more elaborate things one can do here; see @ref{The Meta
154 Follow this with a newline.
157 The second line of the script should contain only the characters
158 @samp{!#} --- just like the top of the file, but reversed. The
159 operating system never reads this far, but Guile treats this as the end
160 of the comment begun on the first line by the @samp{#!} characters.
163 The rest of the file should be a Scheme program.
167 Guile reads the program, evaluating expressions in the order that they
168 appear. Upon reaching the end of the file, Guile exits.
170 The function @code{command-line} returns the name of the script file and
171 any command-line arguments passed by the user, as a list of strings.
173 For example, consider the following script file:
175 #!/usr/local/bin/guile -s
177 (write (command-line))
181 If you put that text in a file called @file{foo} in the current
182 directory, then you could make it executable and try it out like this:
188 ("./foo" "bar" "baz")
192 As another example, here is a simple replacement for the POSIX
195 #!/usr/local/bin/guile -s
197 (for-each (lambda (s) (display s) (display " "))
198 (cdr (command-line)))
202 @deffn procedure command-line
203 @deffnx primitive program-arguments
204 Return a list of the command-line arguments passed to the currently
205 running program. If the program invoked Guile with the @samp{-s},
206 @samp{-c} or @samp{--} switches, these procedures ignore everything up
207 to and including those switches.
211 @node Scripting Examples
212 @subsection Scripting Examples
214 To start with, here are some examples of invoking Guile directly:
219 Run Guile interactively; @code{(command-line)} will return @*
220 @code{("/usr/local/bin/guile" "a" "b" "c")}.
222 @item guile -s /u/jimb/ex2 a b c
223 Load the file @file{/u/jimb/ex2}; @code{(command-line)} will return @*
224 @code{("/u/jimb/ex2" "a" "b" "c")}.
226 @item guile -c '(write %load-path) (newline)'
227 Write the value of the variable @code{%load-path}, print a newline,
230 @item guile -e main -s /u/jimb/ex4 foo
231 Load the file @file{/u/jimb/ex4}, and then call the function
232 @code{main}, passing it the list @code{("/u/jimb/ex4" "foo")}.
234 @item guile -l first -ds -l last -s script
235 Load the files @file{first}, @file{script}, and @file{last}, in that
236 order. The @code{-ds} switch says when to process the @code{-s}
237 switch. For a more motivated example, see the scripts below.
242 Here is a very simple Guile script:
244 #!/usr/local/bin/guile -s
246 (display "Hello, world!")
249 The first line marks the file as a Guile script. When the user invokes
250 it, the system runs @file{/usr/local/bin/guile} to interpret the script,
251 passing @code{-s}, the script's filename, and any arguments given to the
252 script as command-line arguments. When Guile sees @code{-s
253 @var{script}}, it loads @var{script}. Thus, running this program
259 Here is a script which prints the factorial of its argument:
261 #!/usr/local/bin/guile -s
265 (* n (fact (- n 1)))))
267 (display (fact (string->number (cadr (command-line)))))
277 However, suppose we want to use the definition of @code{fact} in this
278 file from another script. We can't simply @code{load} the script file,
279 and then use @code{fact}'s definition, because the script will try to
280 compute and display a factorial when we load it. To avoid this problem,
281 we might write the script this way:
284 #!/usr/local/bin/guile \
289 (* n (fact (- n 1)))))
292 (display (fact (string->number (cadr args))))
295 This version packages the actions the script should perform in a
296 function, @code{main}. This allows us to load the file purely for its
297 definitions, without any extraneous computation taking place. Then we
298 used the meta switch @code{\} and the entry point switch @code{-e} to
299 tell Guile to call @code{main} after loading the script.
302 30414093201713378043612608166064768844377641568960512000000000000
305 Suppose 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
308 containing @var{n} objects each. It's easy to write @code{choose} given
309 @code{fact}, so we might write the script this way:
311 #!/usr/local/bin/guile \
315 (/ (fact m) (* (fact (- m n)) (fact n))))
318 (let ((n (string->number (cadr args)))
319 (m (string->number (caddr args))))
320 (display (choose n m))
324 The 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
326 point. In other words, the @code{choose} script can use definitions
327 made in the @code{fact} script. Here are some sample runs:
340 100891344545564193334812497256
344 @node Linking Programs With Guile
345 @section Linking Programs With Guile
347 The Guile interpreter is available as an object library, to be linked
348 into applications using Scheme as a configuration or extension
349 language. This chapter covers the mechanics of linking your program
350 with Guile on a typical POSIX system.
352 Parts III and IV of this manual describe the C functions Guile provides.
353 Furthermore, any Scheme function described in this manual as a
354 ``Primitive'' is also callable from C; see @ref{Scheme Primitives}.
356 The header file @code{<libguile.h>} provides declarations for all of
357 Guile's functions and constants. You should @code{#include} it at the
358 head of any C source file that uses identifiers described in this
359 manual. Once you've compiled your source files, you need to link them
360 against the Guile object code library, @code{libguile}.
362 On most systems, you should not need to do tell the compiler and linker
363 explicitely where they can find @file{libguile.h} and @file{libguile}.
364 When Guile has been installed in a peculiar way, or when you are on a
365 peculiar system, things might not be so easy and you might need to pass
366 additional @code{-I} or @code{-L} options to the compiler. Guile
367 provides the utility program @code{guile-config} to help you find the
368 right values for these options. You would typically run
369 @code{guile-config} during the configuration phase of your program and
370 use the obtained information in the Makefile.
373 * Guile Initialization Functions:: What to call first.
374 * A Sample Guile Main Program:: Sources and makefiles.
378 @node Guile Initialization Functions
379 @subsection Guile Initialization Functions
381 To 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
383 should be used whenever you have control over the main function of your
384 program because it never returns. The second function,
385 @code{scm_init_guile}, does return and can thus be used in more
386 situations. However, @code{scm_init_guile} is not as widely available
387 as @code{scm_boot_guile} because it needs to rely on non-portable code
388 to find the stack bounds. When Guile does not know how to find these
389 bounds on your system, it will not provide @code{scm_init_guile}.
391 When you can tolerate the limits of @code{scm_boot_guile}, you should
392 use it in favor of @code{scm_init_guile} since that will make your
393 program more portable.
395 @deftypefun void scm_boot_guile (int @var{argc}, char **@var{argv}, void (*@var{main_func}) (), void *@var{closure})
396 Initialize the Guile Scheme interpreter. Then call @var{main_func},
397 passing it @var{closure}, @var{argc}, and @var{argv}. @var{main_func}
398 should do all the work of the program (initializing other packages,
399 defining application-specific functions, reading user input, and so on)
400 before returning. When @var{main_func} returns, call @code{exit (0)};
401 @code{scm_boot_guile} never returns. If you want some other exit value,
402 have @var{main_func} call exit itself.
404 @code{scm_boot_guile} arranges for the Scheme @code{command-line}
405 function 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
408 will know which arguments have been processed.
410 Why must the caller do all the real work from @var{main_func}? Guile's
411 garbage collector scans the stack to find all local variables that
412 reference Scheme objects. To do this, it needs to know the bounds of
413 the stack that might contain such references. Because there is no
414 protable way in C to find the base of the stack, @code{scm_boot_guile}
415 assumes that all references are above its own stack frame. If you try
416 to manipulate Scheme objects after this function returns, it's the luck
417 of the draw whether Guile's storage manager will be able to find the
418 objects you allocate. So, @code{scm_boot_guile} function exits, rather
419 than returning, to discourage you from making that mistake.
421 See @code{scm_init_guile}, below, for a function that can find the real
422 base of the stack, but not in a portable way.
425 @deftypefun void scm_init_guile ()
426 Initialize the Guile Scheme interpreter.
428 In contrast to @code{scm_boot_guile}, this function knows how to find
429 the true base of the stack and thus does not need to usurp the control
430 flow of your program. However, since finding the stack base can not be
431 done portably, this function might not be available in all installations
432 of Guile. If you can, you should use @code{scm_boot_guile} instead.
434 Note that @code{scm_init_guile} does not inform Guile about the command
435 line arguments that should be returned by the Scheme function
436 @code{comamnd-line}. You can use @code{scm_set_program_arguments} to do
440 One common way to use Guile is to write a set of C functions which
441 perform some useful task, make them callable from Scheme, and then link
442 the program with Guile. This yields a Scheme interpreter just like
443 @code{guile}, but augmented with extra functions for some specific
444 application --- a special-purpose scripting language.
446 In this situation, the application should probably process its
447 command-line arguments in the same manner as the stock Guile
448 interpreter. To make that straightforward, Guile provides this
451 @deftypefun void scm_shell (int @var{argc}, char **@var{argv})
452 Process command-line arguments in the manner of the @code{guile}
453 executable. This includes loading the normal Guile initialization
454 files, interacting with the user or running any scripts or expressions
455 specified by @code{-s} or @code{-e} options, and then exiting.
456 @xref{Invoking Guile}, for more details.
458 Since this function does not return, you must do all
459 application-specific initialization before calling this function.
463 @node A Sample Guile Main Program
464 @subsection A Sample Guile Main Program
466 Here is @file{simple-guile.c}, source code for a @code{main} and an
467 @code{inner_main} function that will produce a complete Guile
471 /* simple-guile.c --- how to start up the Guile
472 interpreter from C code. */
474 /* Get declarations for all the scm_ functions. */
475 #include <libguile.h>
478 inner_main (void *closure, int argc, char **argv)
480 /* module initializations would go here */
481 scm_shell (argc, argv);
485 main (int argc, char **argv)
487 scm_boot_guile (argc, argv, inner_main, 0);
488 return 0; /* never reached */
492 The @code{main} function calls @code{scm_boot_guile} to initialize
493 Guile, passing it @code{inner_main}. Once @code{scm_boot_guile} is
494 ready, it invokes @code{inner_main}, which calls @code{scm_shell} to
495 process the command-line arguments in the usual way.
497 Here is a Makefile which you can use to compile the above program. It
498 uses @code{guile-config} to learn about the necessary compiler and
501 # Use GCC, if you have it installed.
504 # Tell the C compiler where to find <libguile.h>
505 CFLAGS=`guile-config compile`
507 # Tell the linker what libraries to use and where to find them.
508 LIBS=`guile-config link`
510 simple-guile: simple-guile.o
511 $@{CC@} simple-guile.o $@{LIBS@} -o simple-guile
513 simple-guile.o: simple-guile.c
514 $@{CC@} -c $@{CFLAGS@} simple-guile.c
517 If you are using the GNU Autoconf package to make your application more
518 portable, Autoconf will settle many of the details in the Makefile above
519 automatically, making it much simpler and more portable; we recommend
520 using Autoconf with Guile. Guile also provides the @code{GUILE_FLAGS}
521 macro for autoconf that performs all necessary checks. Here is a
522 @file{configure.in} file for @code{simple-guile} that uses this macro.
523 Autoconf can use as this file as template to generate a @code{configure}
524 script. In order for Autoconf to find the @code{GUILE_FLAGS} macro, you
525 will need to run @code{aclocal} first. This is not really Guile
526 specific, so you should refer to the Autoconf documentation REFFIXME
529 AC_INIT(simple-guile.c)
537 # Generate a Makefile, based on the results.
541 Here is a @code{Makefile.in} template, from which the @code{configure}
542 script produces a Makefile customized for the host system:
544 # The configure script fills in these values.
546 CFLAGS=@@GUILE_CFLAGS@@
547 LIBS=@@GUILE_LDFLAGS@@
549 simple-guile: simple-guile.o
550 $@{CC@} simple-guile.o $@{LIBS@} -o simple-guile
551 simple-guile.o: simple-guile.c
552 $@{CC@} -c $@{CFLAGS@} simple-guile.c
555 The developer should use Autoconf to generate the @file{configure}
556 script from the @file{configure.in} template, and distribute
557 @file{configure} with the application. Here's how a user might go about
558 building the application:
562 Makefile.in configure* configure.in simple-guile.c
564 creating cache ./config.cache
565 checking for gcc... (cached) gcc
566 checking whether the C compiler (gcc ) works... yes
567 checking whether the C compiler (gcc ) is a cross-compiler... no
568 checking whether we are using GNU C... (cached) yes
569 checking whether gcc accepts -g... (cached) yes
570 checking for Guile... yes
571 creating ./config.status
574 gcc -c -I/usr/local/include simple-guile.c
575 gcc simple-guile.o -L/usr/local/lib -lguile -lqthreads -lpthread -lm -o simple-guile
579 guile> (getpwnam "jimb")
580 #("jimb" "83Z7d75W2tyJQ" 4008 10 "Jim Blandy" "/u/jimb"
581 "/usr/local/bin/bash")
586 @node Writing Extensions for Guile
587 @section Writing Extensions for Guile
589 The previous sections have briefly explained how to write programs that
590 make use of an embedded Guile interpreter. But sometimes, all you want
591 to do is make new primitive procedures and data types available to the
592 Scheme programmer. Writing a new version of @code{guile} is
593 inconvenient in this case and it would in fact make the life of the
594 users of your new features needlessly hard.
596 @c [[ the following is probably a bit longwinded ]]
598 For example, suppose that there is a program @code{guile-db} that is a
599 version of Guile with additional features for accessing a database.
600 People who want to write Scheme programs that use these features would
601 have to use @code{guile-db} instead of the usual @code{guile} program.
602 Now suppose that there is also a program @code{guile-gtk} that extends
603 Guile with access to the popular Gtk+ toolkit for graphical user
604 interfaces. 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
606 application that uses a GUI to let the user accessa a database? You
607 would have to write a @emph{third} program that incorporates both the
608 database 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
610 example further makes it easy to see that this approach can not work in
613 It would have been much better if both the database features and the GUI
614 feature 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
616 to make your extensions to Guile available as libraries whenever
619 You write the new primitive procedures and data types in the normal
620 fashion, and link them into a shared library instead of into a
621 standalone program. The shared library can then be loaded dynamically
625 * A Sample Guile Extension::
628 @node A Sample Guile Extension
629 @subsection A Sample Guile Extension
631 This section explains how to make the Bessel functions of the C library
632 available to Scheme. First we need to write the appropriate glue code
633 to convert the arguments and return values of the functions from Scheme
634 to C and back. Additionally, we need a function that will add them to
635 the set of Guile primitives. Because this is just an example, we will
636 only implement this for the @code{j0} function, tho.
638 Consider the following file @file{bessel.c}.
642 #include <libguile.h>
647 return scm_make_real (j0 (scm_num2dbl (x, "j0")));
653 scm_make_gsubr ("j0", 1, 0, 0, j0_wrapper);
657 This C source file needs to be compiled into a shared library. Here is
658 how to do it on GNU/Linux:
661 gcc -shared -o libguile-bessel.so -fPIC bessel.c
664 For creating shared libraries portably, we recommend the use of
667 A 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
669 functions via @code{dynamic-call}. For our example, we are going to
670 call the function @code{init_bessel} which will make @code{j0_wrapper}
671 available to Scheme programs with the name @code{j0}. Note that we do
672 not specify a filename extension such as @file{.so} when invoking
673 @code{dynamic-link}. The right extension for the host platform will be
674 provided automatically.
677 (define bessel-lib (dynamic-link "libguile-bessel"))
678 (dynamic-call "init_bessel" bessel-lib)
680 @result{} 0.223890779141236
683 For 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
685 usual for your operating system, and it will additionally look into the
686 directories listed in the @code{LTDL_LIBRRAY_PATH} environment variable.
688 To see how these Guile extensions via shared libraries relate to the
689 module system, see below REFFIXME.
692 @section Guile Modules
694 Guile has support for dividing a program into @dfn{modules}. By using
695 modules, you can group related code together and manage the
696 composition of complete programs from largely independent parts.
698 (The module system is in flux, and will likely look very different in
699 the future. Feel free to use the existing system anyway. Guile will
700 provide reasonable backwards compatability.)
703 * Using Guile Modules::
704 * Writing New Modules::
705 * Modules and Extensions::
708 @node Using Guile Modules
709 @subsection Using Existing Modules
713 @node Writing New Modules
714 @subsection Writing New Modules
718 @node Modules and Extensions
719 @subsection Modules and Extensions
721 In addition to Scheme code you can also put new procedures and other
722 named features that are provided by an extension into a module.
724 You do this by writing a small Scheme file that defines the module.
725 That Scheme file in turn invokes @code{dynamic-link} and
726 @code{dynamic-call} as explained above to make the extension
729 Suppose we want to put the Bessel function @code{j0} from the example
730 extension into a module called @code{(math bessel)}. We would have to
731 write a Scheme file with this contents
734 (define-module (math bessel))
736 (dynamic-call "init_bessel" (dynamic-link "libguile-bessel"))
739 The file should of course be saved in the right place for autolading,
740 for example as @file{/usr/local/share/guile/math/bessel.scm}.
744 @chapter Reporting Bugs
746 Any problems with the installation should be reported to
747 @email{bug-guile@@gnu.org}.
749 [[how about an explanation of what makes a good bug report?]]
750 [[don't complain to us about problems with contributed modules?]]
754 @c TeX-master: "guile.texi"