more fixes to equal? for arrays
[bpt/guile.git] / doc / ref / intro.texi
1 @c -*-texinfo-*-
2 @c This is part of the GNU Guile Reference Manual.
3 @c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2006, 2010
4 @c Free Software Foundation, Inc.
5 @c See the file guile.texi for copying conditions.
6
7 @node Introduction to Guile
8 @chapter Introduction to Guile
9
10 @menu
11 * What is Guile?::
12 * Obtaining and Installing Guile::
13 * Whirlwind Tour::
14 * Discouraged and Deprecated::
15 * Reporting Bugs::
16 @end menu
17
18 @node What is Guile?
19 @section What is Guile?
20
21 Guile is an interpreter for the Scheme programming language, packaged
22 for use in a wide variety of environments. Guile implements Scheme as
23 described in the
24 @tex
25 Revised$^5$
26 @end tex
27 @ifnottex
28 Revised^5
29 @end ifnottex
30 Report on the Algorithmic Language Scheme (usually known as @acronym{R5RS}),
31 providing clean and general data and control structures. Guile goes
32 beyond the rather austere language presented in @acronym{R5RS}, extending it with
33 a module system, full access to @acronym{POSIX} system calls, networking support,
34 multiple threads, dynamic linking, a foreign function call interface,
35 powerful string processing, and many other features needed for
36 programming in the real world.
37
38 Like a shell, Guile can run interactively, reading expressions from the
39 user, evaluating them, and displaying the results, or as a script
40 interpreter, reading and executing Scheme code from a file. However,
41 Guile is also packaged as an object library, allowing other applications
42 to easily incorporate a complete Scheme interpreter. An application can
43 then use Guile as an extension language, a clean and powerful configuration
44 language, or as multi-purpose ``glue'', connecting primitives provided
45 by the application. It is easy to call Scheme code from C code and vice
46 versa, giving the application designer full control of how and when to
47 invoke the interpreter. Applications can add new functions, data types,
48 control structures, and even syntax to Guile, creating a domain-specific
49 language tailored to the task at hand, but based on a robust language
50 design.
51
52 Guile's module system allows one to break up a large program into
53 manageable sections with well-defined interfaces between them.
54 Modules may contain a mixture of interpreted and compiled code; Guile
55 can use either static or dynamic linking to incorporate compiled code.
56 Modules also encourage developers to package up useful collections of
57 routines for general distribution; as of this writing, one can find
58 Emacs interfaces, database access routines, compilers, @acronym{GUI}
59 toolkit interfaces, and @acronym{HTTP} client functions, among others.
60
61 In the future, we hope to expand Guile to support other languages like
62 Tcl and Perl by translating them to Scheme code. This means that users
63 can program applications which use Guile in the language of their
64 choice, rather than having the tastes of the application's author
65 imposed on them.
66
67 @node Obtaining and Installing Guile
68 @section Obtaining and Installing Guile
69
70 Guile can be obtained from the main GNU archive site
71 @url{ftp://ftp.gnu.org} or any of its mirrors. The file will be named
72 guile-version.tar.gz. The current version is @value{VERSION}, so the
73 file you should grab is:
74
75 @url{ftp://ftp.gnu.org/pub/gnu/guile/guile-@value{VERSION}.tar.gz}
76
77 To unbundle Guile use the instruction
78
79 @example
80 zcat guile-@value{VERSION}.tar.gz | tar xvf -
81 @end example
82
83 @noindent
84 which will create a directory called @file{guile-@value{VERSION}} with
85 all the sources. You can look at the file @file{INSTALL} for detailed
86 instructions on how to build and install Guile, but you should be able
87 to just do
88
89 @example
90 cd guile-@value{VERSION}
91 ./configure
92 make
93 make install
94 @end example
95
96 This will install the Guile executable @file{guile}, the Guile library
97 @file{libguile} and various associated header files and support
98 libraries. It will also install the Guile tutorial and reference
99 manual.
100
101 @c [[include instructions for getting R5RS]]
102
103 Since this manual frequently refers to the Scheme ``standard'', also
104 known as R5RS, or the
105 @tex
106 ``Revised$^5$ Report on the Algorithmic Language Scheme'',
107 @end tex
108 @ifnottex
109 ``Revised^5 Report on the Algorithmic Language Scheme'',
110 @end ifnottex
111 we have included the report in the Guile distribution; see
112 @ref{Top, , Introduction, r5rs, Revised(5) Report on the Algorithmic
113 Language Scheme}.
114 This will also be installed in your info directory.
115
116 @node Whirlwind Tour
117 @section A Whirlwind Tour
118
119 This chapter presents a quick tour of all the ways that Guile can be
120 used. There are additional examples in the @file{examples/}
121 directory in the Guile source distribution.
122
123 The following examples assume that Guile has been installed in
124 @code{/usr/local/}.
125
126 @menu
127 * Running Guile Interactively::
128 * Running Guile Scripts::
129 * Linking Guile into Programs::
130 * Writing Guile Extensions::
131 * Using the Guile Module System::
132 @end menu
133
134
135 @node Running Guile Interactively
136 @subsection Running Guile Interactively
137
138 In its simplest form, Guile acts as an interactive interpreter for the
139 Scheme programming language, reading and evaluating Scheme expressions
140 the user enters from the terminal. Here is a sample interaction between
141 Guile and a user; the user's input appears after the @code{$} and
142 @code{guile>} prompts:
143
144 @example
145 $ guile
146 guile> (+ 1 2 3) ; add some numbers
147 6
148 guile> (define (factorial n) ; define a function
149 (if (zero? n) 1 (* n (factorial (- n 1)))))
150 guile> (factorial 20)
151 2432902008176640000
152 guile> (getpwnam "jimb") ; find my entry in /etc/passwd
153 #("jimb" ".0krIpK2VqNbU" 4008 10 "Jim Blandy" "/u/jimb"
154 "/usr/local/bin/bash")
155 guile> @kbd{C-d}
156 $
157 @end example
158
159
160 @node Running Guile Scripts
161 @subsection Running Guile Scripts
162
163 Like AWK, Perl, or any shell, Guile can interpret script files. A Guile
164 script is simply a file of Scheme code with some extra information at
165 the beginning which tells the operating system how to invoke Guile, and
166 then tells Guile how to handle the Scheme code.
167
168 Here is a trivial Guile script, for more details @xref{Guile Scripting}.
169
170 @example
171 #!/usr/local/bin/guile -s
172 !#
173 (display "Hello, world!")
174 (newline)
175 @end example
176
177
178 @node Linking Guile into Programs
179 @subsection Linking Guile into Programs
180
181 The Guile interpreter is available as an object library, to be linked
182 into applications using Scheme as a configuration or extension
183 language.
184
185 Here is @file{simple-guile.c}, source code for a program that will
186 produce a complete Guile interpreter. In addition to all usual
187 functions provided by Guile, it will also offer the function
188 @code{my-hostname}.
189
190 @example
191 #include <stdlib.h>
192 #include <libguile.h>
193
194 static SCM
195 my_hostname (void)
196 @{
197 char *s = getenv ("HOSTNAME");
198 if (s == NULL)
199 return SCM_BOOL_F;
200 else
201 return scm_from_locale_string (s);
202 @}
203
204 static void
205 inner_main (void *data, int argc, char **argv)
206 @{
207 scm_c_define_gsubr ("my-hostname", 0, 0, 0, my_hostname);
208 scm_shell (argc, argv);
209 @}
210
211 int
212 main (int argc, char **argv)
213 @{
214 scm_boot_guile (argc, argv, inner_main, 0);
215 return 0; /* never reached */
216 @}
217 @end example
218
219 When Guile is correctly installed on your system, the above program
220 can be compiled and linked like this:
221
222 @example
223 $ gcc -o simple-guile simple-guile.c \
224 `pkg-config --cflags --libs guile-2.0`
225 @end example
226
227 When it is run, it behaves just like the @code{guile} program except
228 that you can also call the new @code{my-hostname} function.
229
230 @example
231 $ ./simple-guile
232 guile> (+ 1 2 3)
233 6
234 guile> (my-hostname)
235 "burns"
236 @end example
237
238 @node Writing Guile Extensions
239 @subsection Writing Guile Extensions
240
241 You can link Guile into your program and make Scheme available to the
242 users of your program. You can also link your library into Guile and
243 make its functionality available to all users of Guile.
244
245 A library that is linked into Guile is called an @dfn{extensions}, but
246 it really just is an ordinary object library.
247
248 The following example shows how to write a simple extension for Guile
249 that makes the @code{j0} function available to Scheme code.
250
251 @smallexample
252 #include <math.h>
253 #include <libguile.h>
254
255 SCM
256 j0_wrapper (SCM x)
257 @{
258 return scm_make_real (j0 (scm_num2dbl (x, "j0")));
259 @}
260
261 void
262 init_bessel ()
263 @{
264 scm_c_define_gsubr ("j0", 1, 0, 0, j0_wrapper);
265 @}
266 @end smallexample
267
268 This C source file needs to be compiled into a shared library. Here is
269 how to do it on GNU/Linux:
270
271 @smallexample
272 gcc -shared -o libguile-bessel.so -fPIC bessel.c
273 @end smallexample
274
275 For creating shared libraries portably, we recommend the use of GNU
276 Libtool (@pxref{Top, , Introduction, libtool, GNU Libtool}).
277
278 A shared library can be loaded into a running Guile process with the
279 function @code{load-extension}. The @code{j0} is then immediately
280 available:
281
282 @smallexample
283 $ guile
284 guile> (load-extension "./libguile-bessel" "init_bessel")
285 guile> (j0 2)
286 0.223890779141236
287 @end smallexample
288
289
290 @node Using the Guile Module System
291 @subsection Using the Guile Module System
292
293 Guile has support for dividing a program into @dfn{modules}. By using
294 modules, you can group related code together and manage the
295 composition of complete programs from largely independent parts.
296
297 (Although the module system implementation is in flux, feel free to use it
298 anyway. Guile will provide reasonable backwards compatibility.)
299
300 Details on the module system beyond this introductory material can be found in
301 @xref{Modules}.
302
303 @menu
304 * Using Modules::
305 * Writing new Modules::
306 * Putting Extensions into Modules::
307 @end menu
308
309
310 @node Using Modules
311 @subsubsection Using Modules
312
313 Guile comes with a lot of useful modules, for example for string
314 processing or command line parsing. Additionally, there exist many
315 Guile modules written by other Guile hackers, but which have to be
316 installed manually.
317
318 Here is a sample interactive session that shows how to use the
319 @code{(ice-9 popen)} module which provides the means for communicating
320 with other processes over pipes together with the @code{(ice-9
321 rdelim)} module that provides the function @code{read-line}.
322
323 @smallexample
324 $ guile
325 guile> (use-modules (ice-9 popen))
326 guile> (use-modules (ice-9 rdelim))
327 guile> (define p (open-input-pipe "ls -l"))
328 guile> (read-line p)
329 "total 30"
330 guile> (read-line p)
331 "drwxr-sr-x 2 mgrabmue mgrabmue 1024 Mar 29 19:57 CVS"
332 @end smallexample
333
334 @node Writing new Modules
335 @subsubsection Writing new Modules
336
337 You can create new modules using the syntactic form
338 @code{define-module}. All definitions following this form until the
339 next @code{define-module} are placed into the new module.
340
341 One module is usually placed into one file, and that file is installed
342 in a location where Guile can automatically find it. The following
343 session shows a simple example.
344
345 @smallexample
346 $ cat /usr/local/share/guile/foo/bar.scm
347
348 (define-module (foo bar))
349 (export frob)
350
351 (define (frob x) (* 2 x))
352
353 $ guile
354 guile> (use-modules (foo bar))
355 guile> (frob 12)
356 24
357 @end smallexample
358
359 @node Putting Extensions into Modules
360 @subsubsection Putting Extensions into Modules
361
362 In addition to Scheme code you can also put things that are defined in
363 C into a module.
364
365 You do this by writing a small Scheme file that defines the module and
366 call @code{load-extension} directly in the body of the module.
367
368 @smallexample
369 $ cat /usr/local/share/guile/math/bessel.scm
370
371 (define-module (math bessel))
372 (export j0)
373
374 (load-extension "libguile-bessel" "init_bessel")
375
376 $ file /usr/local/lib/libguile-bessel.so
377 @dots{} ELF 32-bit LSB shared object @dots{}
378 $ guile
379 guile> (use-modules (math bessel))
380 guile> (j0 2)
381 0.223890779141236
382 @end smallexample
383
384 There is also a way to manipulate the module system from C but only
385 Scheme files can be autoloaded. Thus, we recommend that you define
386 your modules in Scheme.
387
388 @node Discouraged and Deprecated
389 @section Discouraged and Deprecated
390
391 From time to time functions and other features of Guile become
392 obsolete. Guile has some mechanisms in place that can help you cope
393 with this.
394
395 Guile has two levels of obsoleteness: things can be @emph{deprecated},
396 meaning that their use is considered harmful and should be avoided,
397 even in old code; or they can be merely @emph{discouraged}, meaning
398 that they are fine in and of themselves, but that there are better
399 alternatives that should be used in new code.
400
401 When you use a feature that is deprecated, you will likely get a
402 warning message at run-time. Also, deprecated features are not ready
403 for production use: they might be very slow. When something is merely
404 discouraged, it performs normally and you wont get any messages at
405 run-time.
406
407 The primary source for information about just what things are
408 discouraged or deprecated in a given release is the file
409 @file{NEWS}. That file also documents what you should use instead
410 of the obsoleted things.
411
412 The file @file{README} contains instructions on how to control the
413 inclusion or removal of the deprecated and/or discouraged features
414 from the public API of Guile, and how to control the warning messages
415 for deprecated features.
416
417 The idea behind those mechanisms is that normally all deprecated and
418 discouraged features are available, but that you can omit them on
419 purpose to check whether your code still relies on them.
420
421 @node Reporting Bugs
422 @section Reporting Bugs
423
424 Any problems with the installation should be reported to
425 @email{bug-guile@@gnu.org}.
426
427 Whenever you have found a bug in Guile you are encouraged to report it
428 to the Guile developers, so they can fix it. They may also be able to
429 suggest workarounds when it is not possible for you to apply the bug-fix
430 or install a new version of Guile yourself.
431
432 Before sending in bug reports, please check with the following list that
433 you really have found a bug.
434
435 @itemize @bullet
436 @item
437 Whenever documentation and actual behavior differ, you have certainly
438 found a bug, either in the documentation or in the program.
439
440 @item
441 When Guile crashes, it is a bug.
442
443 @item
444 When Guile hangs or takes forever to complete a task, it is a bug.
445
446 @item
447 When calculations produce wrong results, it is a bug.
448
449 @item
450 When Guile signals an error for valid Scheme programs, it is a bug.
451
452 @item
453 When Guile does not signal an error for invalid Scheme programs, it may
454 be a bug, unless this is explicitly documented.
455
456 @item
457 When some part of the documentation is not clear and does not make sense
458 to you even after re-reading the section, it is a bug.
459 @end itemize
460
461 When you write a bug report, please make sure to include as much of the
462 information described below in the report. If you can't figure out some
463 of the items, it is not a problem, but the more information we get, the
464 more likely we can diagnose and fix the bug.
465
466 @itemize @bullet
467 @item
468 The version number of Guile. Without this, we won't know whether there
469 is any point in looking for the bug in the current version of Guile.
470
471 You can get the version number by invoking the command
472
473 @example
474 $ guile --version
475 Guile 1.9.0
476 Copyright (c) 1995, 1996, 1997, 2000, 2001, 2002, 2003, 2004,
477 2005, 2006, 2007, 2008, 2009 Free Software Foundation
478 Guile may be distributed under the terms of the GNU Lesser General
479 Public Licence. For details, see the files `COPYING.LESSER' and
480 `COPYING', which are included in the Guile distribution. There is
481 no warranty, to the extent permitted by law.
482 @end example
483
484 @item
485 The type of machine you are using, and the operating system name and
486 version number. On GNU systems, you can get it with @file{uname}.
487
488 @example
489 $ uname -a
490 Linux tortoise 2.2.17 #1 Thu Dec 21 17:29:05 CET 2000 i586 unknown
491 @end example
492
493 @item
494 The operands given to the @file{configure} command when Guile was
495 installed. It's often useful to augment this with the output of the
496 command @code{guile-config info}.
497
498 @item
499 A complete list of any modifications you have made to the Guile source.
500 (We may not have time to investigate the bug unless it happens in an
501 unmodified Guile. But if you've made modifications and you don't tell
502 us, you are sending us on a wild goose chase.)
503
504 Be precise about these changes. A description in English is not
505 enough---send a context diff for them.
506
507 Adding files of your own, or porting to another machine, is a
508 modification of the source.
509
510 @item
511 Details of any other deviations from the standard procedure for
512 installing Guile.
513
514 @item
515 The complete text of any source files needed to reproduce the bug.
516
517 If you can tell us a way to cause the problem without loading any source
518 files, please do so. This makes it much easier to debug. If you do
519 need files, make sure you arrange for us to see their exact contents.
520
521 @item
522 The precise Guile invocation command line we need to type to reproduce
523 the bug.
524
525 @item
526 A description of what behavior you observe that you believe is
527 incorrect. For example, "The Guile process gets a fatal signal," or,
528 "The resulting output is as follows, which I think is wrong."
529
530 Of course, if the bug is that Guile gets a fatal signal, then one can't
531 miss it. But if the bug is incorrect results, the maintainer might fail
532 to notice what is wrong. Why leave it to chance?
533
534 If the manifestation of the bug is a Guile error message, it is
535 important to report the precise text of the error message, and a
536 backtrace showing how the Scheme program arrived at the error.
537
538 This can be done using the procedure @code{backtrace} in the REPL.
539
540 @item
541 Check whether any programs you have loaded into Guile, including your
542 @file{.guile} file, set any variables that may affect the functioning of
543 Guile. Also, see whether the problem happens in a freshly started Guile
544 without loading your @file{.guile} file (start Guile with the @code{-q}
545 switch to prevent loading the init file). If the problem does
546 @emph{not} occur then, you must report the precise contents of any
547 programs that you must load into Guile in order to cause the problem to
548 occur.
549
550 @item
551 If the problem does depend on an init file or other Scheme programs that
552 are not part of the standard Guile distribution, then you should make
553 sure it is not a bug in those programs by complaining to their
554 maintainers first. After they verify that they are using Guile in a way
555 that is supposed to work, they should report the bug.
556
557 @item
558 If you wish to mention something in the Guile source, show the line of
559 code with a few lines of context. Don't just give a line number.
560
561 The line numbers in the development sources might not match those in your
562 sources. It would take extra work for the maintainers to determine what
563 code is in your version at a given line number, and we could not be
564 certain.
565
566 @item
567 Additional information from a C debugger such as GDB might enable
568 someone to find a problem on a machine which he does not have available.
569 If you don't know how to use GDB, please read the GDB manual---it is not
570 very long, and using GDB is easy. You can find the GDB distribution,
571 including the GDB manual in online form, in most of the same places you
572 can find the Guile distribution. To run Guile under GDB, you should
573 switch to the @file{libguile} subdirectory in which Guile was compiled, then
574 do @code{gdb guile} or @code{gdb .libs/guile} (if using GNU Libtool).
575
576 However, you need to think when you collect the additional information
577 if you want it to show what causes the bug.
578
579 For example, many people send just a backtrace, but that is not very
580 useful by itself. A simple backtrace with arguments often conveys
581 little about what is happening inside Guile, because most of the
582 arguments listed in the backtrace are pointers to Scheme objects. The
583 numeric values of these pointers have no significance whatever; all that
584 matters is the contents of the objects they point to (and most of the
585 contents are themselves pointers).
586 @end itemize
587
588
589
590 @c Local Variables:
591 @c TeX-master: "guile.texi"
592 @c End: