regenerate psyntax-pp.scm
[bpt/guile.git] / doc / ref / scheme-using.texi
CommitLineData
46f7666d
NJ
1@c -*-texinfo-*-
2@c This is part of the GNU Guile Reference Manual.
2460274d 3@c Copyright (C) 2006, 2010, 2011
46f7666d
NJ
4@c Free Software Foundation, Inc.
5@c See the file guile.texi for copying conditions.
6
7@node Using Guile Interactively
8@section Using Guile Interactively
9
10When you start up Guile by typing just @code{guile}, without a
11@code{-c} argument or the name of a script to execute, you get an
12interactive interpreter where you can enter Scheme expressions, and
13Guile will evaluate them and print the results for you. Here are some
14simple examples.
15
16@lisp
749c2532 17scheme@@(guile-user)> (+ 3 4 5)
dc3b2661 18$1 = 12
749c2532 19scheme@@(guile-user)> (display "Hello world!\n")
46f7666d 20Hello world!
749c2532 21scheme@@(guile-user)> (values 'a 'b)
dc3b2661
AW
22$2 = a
23$3 = b
46f7666d
NJ
24@end lisp
25
26@noindent
27This mode of use is called a @dfn{REPL}, which is short for
28``Read-Eval-Print Loop'', because the Guile interpreter first reads the
29expression that you have typed, then evaluates it, and then prints the
30result.
31
749c2532
AW
32The prompt shows you what language and module you are in. In this case, the
33current language is @code{scheme}, and the current module is
34@code{(guile-user)}. @xref{Other Languages}, for more information on Guile's
35support for languages other than Scheme.
36
46f7666d 37@menu
2460274d 38* Init File::
3c0b7725 39* Readline::
ca290a89 40* Value History::
3c0b7725
AW
41* REPL Commands::
42* Error Handling::
43* Interactive Debugging::
46f7666d
NJ
44@end menu
45
46
2460274d
AW
47@node Init File
48@subsection The Init File, @file{~/.guile}
49
50@cindex .guile
51When run interactively, Guile will load a local initialization file from
52@file{~/.guile}. This file should contain Scheme expressions for
53evaluation.
54
55This facility lets the user customize their interactive Guile
56environment, pulling in extra modules or parameterizing the REPL
57implementation.
58
59To run Guile without loading the init file, use the @code{-q}
60command-line option.
61
62
46f7666d
NJ
63@node Readline
64@subsection Readline
65
66To make it easier for you to repeat and vary previously entered
67expressions, or to edit the expression that you're typing in, Guile
68can use the GNU Readline library. This is not enabled by default
69because of licensing reasons, but all you need to activate Readline is
70the following pair of lines.
71
72@lisp
749c2532
AW
73scheme@@(guile-user)> (use-modules (ice-9 readline))
74scheme@@(guile-user)> (activate-readline)
46f7666d
NJ
75@end lisp
76
ced9917e 77It's a good idea to put these two lines (without the
2460274d
AW
78@code{scheme@@(guile-user)>} prompts) in your @file{.guile} file.
79@xref{Init File}, for more on @file{.guile}.
46f7666d
NJ
80
81
ca290a89 82@node Value History
46f7666d
NJ
83@subsection Value History
84
85Just as Readline helps you to reuse a previous input line, @dfn{value
ced9917e
AW
86history} allows you to use the @emph{result} of a previous evaluation in
87a new expression. When value history is enabled, each evaluation result
88is automatically assigned to the next in the sequence of variables
89@code{$1}, @code{$2}, @dots{}. You can then use these variables in
90subsequent expressions.
46f7666d
NJ
91
92@lisp
749c2532 93scheme@@(guile-user)> (iota 10)
46f7666d 94$1 = (0 1 2 3 4 5 6 7 8 9)
749c2532 95scheme@@(guile-user)> (apply * (cdr $1))
46f7666d 96$2 = 362880
749c2532 97scheme@@(guile-user)> (sqrt $2)
46f7666d 98$3 = 602.3952191045344
749c2532 99scheme@@(guile-user)> (cons $2 $1)
46f7666d
NJ
100$4 = (362880 0 1 2 3 4 5 6 7 8 9)
101@end lisp
102
dc3b2661
AW
103Value history is enabled by default, because Guile's REPL imports the
104@code{(ice-9 history)} module. Value history may be turned off or on within the
105repl, using the options interface:
106
107@lisp
108scheme@@(guile-user)> ,option value-history #f
109scheme@@(guile-user)> 'foo
110foo
111scheme@@(guile-user)> ,option value-history #t
112scheme@@(guile-user)> 'bar
113$5 = bar
114@end lisp
115
116Note that previously recorded values are still accessible, even if value history
117is off. In rare cases, these references to past computations can cause Guile to
118use too much memory. One may clear these values, possibly enabling garbage
119collection, via the @code{clear-value-history!} procedure, described below.
120
121The programmatic interface to value history is in a module:
122
123@lisp
124(use-modules (ice-9 history))
125@end lisp
126
127@deffn {Scheme Procedure} value-history-enabled?
128Return true iff value history is enabled.
129@end deffn
130
131@deffn {Scheme Procedure} enable-value-history!
132Turn on value history, if it was off.
133@end deffn
134
135@deffn {Scheme Procedure} disable-value-history!
136Turn off value history, if it was on.
137@end deffn
138
139@deffn {Scheme Procedure} clear-value-history!
140Clear the value history. If the stored values are not captured by some other
141data structure or closure, they may then be reclaimed by the garbage collector.
142@end deffn
46f7666d
NJ
143
144
3c0b7725
AW
145@node REPL Commands
146@subsection REPL Commands
46f7666d 147
3c0b7725
AW
148@cindex commands
149The REPL exists to read expressions, evaluate them, and then print their
150results. But sometimes one wants to tell the REPL to evaluate an
151expression in a different way, or to do something else altogether. A
152user can affect the way the REPL works with a @dfn{REPL command}.
46f7666d 153
3c0b7725
AW
154The previous section had an example of a command, in the form of
155@code{,option}.
46f7666d
NJ
156
157@lisp
3c0b7725 158scheme@@(guile-user)> ,option value-history #t
46f7666d
NJ
159@end lisp
160
161@noindent
3c0b7725
AW
162Commands are distinguished from expressions by their initial comma
163(@samp{,}). Since a comma cannot begin an expression in most languages,
164it is an effective indicator to the REPL that the following text forms a
165command, not an expression.
46f7666d 166
3c0b7725
AW
167REPL commands are convenient because they are always there. Even if the
168current module doesn't have a binding for @code{pretty-print}, one can
169always @code{,pretty-print}.
46f7666d 170
3c0b7725
AW
171The following sections document the various commands, grouped together
172by functionality. Many of the commands have abbreviations; see the
173online help (@code{,help}) for more information.
46f7666d 174
3c0b7725
AW
175@menu
176* Help Commands::
177* Module Commands::
178* Language Commands::
179* Compile Commands::
180* Profile Commands::
181* Debug Commands::
182* Inspect Commands::
183* System Commands::
184@end menu
46f7666d 185
3c0b7725
AW
186@node Help Commands
187@subsubsection Help Commands
46f7666d 188
3c0b7725
AW
189When Guile starts interactively, it notifies the user that help can be
190had by typing @samp{,help}. Indeed, @code{help} is a command, and a
191particularly useful one, as it allows the user to discover the rest of
192the commands.
46f7666d 193
ced9917e 194@deffn {REPL Command} help [@code{all} | group | @code{[-c]} command]
3c0b7725 195Show help.
46f7666d 196
3c0b7725
AW
197With one argument, tries to look up the argument as a group name, giving
198help on that group if successful. Otherwise tries to look up the
199argument as a command, giving help on the command.
46f7666d 200
3c0b7725
AW
201If there is a command whose name is also a group name, use the @samp{-c
202@var{command}} form to give help on the command instead of the group.
46f7666d 203
3c0b7725
AW
204Without any argument, a list of help commands and command groups
205are displayed.
206@end deffn
46f7666d 207
3c0b7725
AW
208@deffn {REPL Command} show [topic]
209Gives information about Guile.
46f7666d 210
3c0b7725
AW
211With one argument, tries to show a particular piece of information;
212currently supported topics are `warranty' (or `w'), `copying' (or `c'),
213and `version' (or `v').
46f7666d 214
3c0b7725
AW
215Without any argument, a list of topics is displayed.
216@end deffn
46f7666d 217
3c0b7725
AW
218@deffn {REPL Command} apropos regexp
219Find bindings/modules/packages.
220@end deffn
46f7666d 221
3c0b7725
AW
222@deffn {REPL Command} describe obj
223Show description/documentation.
224@end deffn
46f7666d 225
3c0b7725
AW
226@node Module Commands
227@subsubsection Module Commands
ee6be719 228
3c0b7725
AW
229@deffn {REPL Command} module [module]
230Change modules / Show current module.
ee6be719
NJ
231@end deffn
232
3c0b7725
AW
233@deffn {REPL Command} import [module ...]
234Import modules / List those imported.
235@end deffn
46f7666d 236
3c0b7725
AW
237@deffn {REPL Command} load file
238Load a file in the current module.
239@end deffn
46f7666d 240
cdab9fc6
AW
241@deffn {REPL Command} reload [module]
242Reload the given module, or the current module if none was given.
243@end deffn
244
3c0b7725
AW
245@deffn {REPL Command} binding
246List current bindings.
247@end deffn
46f7666d 248
8fdd85f8
AR
249@deffn {REPL Command} in module expression
250@deffnx {REPL Command} in module command [args ...]
251Evaluate an expression, or alternatively, execute another meta-command
252in the context of a module. For example, @samp{,in (foo bar) ,binding}
253will show the bindings in the module @code{(foo bar)}.
254@end deffn
255
3c0b7725
AW
256@node Language Commands
257@subsubsection Language Commands
46f7666d 258
3c0b7725
AW
259@deffn {REPL Command} language language
260Change languages.
46f7666d
NJ
261@end deffn
262
3c0b7725
AW
263@node Compile Commands
264@subsubsection Compile Commands
46f7666d 265
3c0b7725
AW
266@deffn {REPL Command} compile exp
267Generate compiled code.
268@end deffn
46f7666d 269
3c0b7725
AW
270@deffn {REPL Command} compile-file file
271Compile a file.
272@end deffn
46f7666d 273
3c0b7725
AW
274@deffn {REPL Command} disassemble exp
275Disassemble a compiled procedure.
276@end deffn
46f7666d 277
3c0b7725
AW
278@deffn {REPL Command} disassemble-file file
279Disassemble a file.
280@end deffn
46f7666d 281
3c0b7725
AW
282@node Profile Commands
283@subsubsection Profile Commands
46f7666d 284
3c0b7725
AW
285@deffn {REPL Command} time exp
286Time execution.
46f7666d
NJ
287@end deffn
288
3c0b7725
AW
289@deffn {REPL Command} profile exp
290Profile execution.
46f7666d
NJ
291@end deffn
292
3c0b7725
AW
293@deffn {REPL Command} trace exp
294Trace execution.
46f7666d
NJ
295@end deffn
296
3c0b7725
AW
297@node Debug Commands
298@subsubsection Debug Commands
46f7666d 299
3c0b7725
AW
300These debugging commands are only available within a recursive REPL;
301they do not work at the top level.
46f7666d 302
3c0b7725
AW
303@deffn {REPL Command} backtrace [count] [#:width w] [#:full? f]
304Print a backtrace.
46f7666d 305
3c0b7725
AW
306Print a backtrace of all stack frames, or innermost @var{COUNT} frames.
307If @var{count} is negative, the last @var{count} frames will be shown.
46f7666d
NJ
308@end deffn
309
3c0b7725
AW
310@deffn {REPL Command} up [count]
311Select a calling stack frame.
312
313Select and print stack frames that called this one.
314An argument says how many frames up to go.
46f7666d
NJ
315@end deffn
316
3c0b7725
AW
317@deffn {REPL Command} down [count]
318Select a called stack frame.
319
320Select and print stack frames called by this one.
321An argument says how many frames down to go.
46f7666d
NJ
322@end deffn
323
3c0b7725
AW
324@deffn {REPL Command} frame [idx]
325Show a frame.
326
327Show the selected frame. With an argument, select a frame by index,
328then show it.
329@end deffn
46f7666d 330
3c0b7725
AW
331@deffn {REPL Command} procedure
332Print the procedure for the selected frame.
333@end deffn
46f7666d 334
3c0b7725
AW
335@deffn {REPL Command} locals
336Show local variables.
46f7666d 337
3c0b7725 338Show locally-bound variables in the selected frame.
46f7666d
NJ
339@end deffn
340
54d9a994
JOR
341@deffn {REPL Command} error-message
342@deffnx {REPL Command} error
343Show error message.
344
345Display the message associated with the error that started the current
346debugging REPL.
347@end deffn
348
1ecf39a6
AW
349@deffn {REPL Command} registers
350Show the VM registers associated with the current frame.
351
352@xref{Stack Layout}, for more information on VM stack frames.
353@end deffn
354
47b86dbf
MG
355@deffn {REPL Command} width [cols]
356Sets the number of display columns in the output of @code{,backtrace}
357and @code{,locals} to @var{cols}. If @var{cols} is not given, the width
358of the terminal is used.
359@end deffn
360
1ecf39a6
AW
361The next 3 commands work at any REPL.
362
363@deffn {REPL Command} break proc
364Set a breakpoint at @var{proc}.
365@end deffn
366
367@deffn {REPL Command} break-at-source file line
368Set a breakpoint at the given source location.
369@end deffn
370
371@deffn {REPL Command} tracepoint proc
372Set a tracepoint on the given procedure. This will cause all calls to
373the procedure to print out a tracing message. @xref{Tracing Traps}, for
374more information.
375@end deffn
376
377The rest of the commands in this subsection all apply only when the
378stack is @dfn{continuable} --- in other words when it makes sense for
379the program that the stack comes from to continue running. Usually this
380means that the program stopped because of a trap or a breakpoint.
381
382@deffn {REPL Command} step
383Tell the debugged program to step to the next source location.
384@end deffn
385
386@deffn {REPL Command} next
387Tell the debugged program to step to the next source location in the
388same frame. (See @ref{Traps} for the details of how this works.)
389@end deffn
390
391@deffn {REPL Command} finish
392Tell the program being debugged to continue running until the completion
393of the current stack frame, and at that time to print the result and
394reenter the REPL.
395@end deffn
396
3c0b7725
AW
397
398@node Inspect Commands
399@subsubsection Inspect Commands
400
401@deffn {REPL Command} inspect EXP
402Inspect the result(s) of evaluating @var{exp}.
403@end deffn
46f7666d 404
3c0b7725
AW
405@deffn {REPL Command} pretty-print EXP
406Pretty-print the result(s) of evaluating @var{exp}.
407@end deffn
46f7666d 408
3c0b7725
AW
409@node System Commands
410@subsubsection System Commands
46f7666d 411
3c0b7725
AW
412@deffn {REPL Command} gc
413Garbage collection.
46f7666d
NJ
414@end deffn
415
3c0b7725
AW
416@deffn {REPL Command} statistics
417Display statistics.
46f7666d
NJ
418@end deffn
419
3c0b7725
AW
420@deffn {REPL Command} option [key value]
421List/show/set options.
46f7666d
NJ
422@end deffn
423
3c0b7725
AW
424@deffn {REPL Command} quit
425Quit this session.
46f7666d
NJ
426@end deffn
427
2460274d
AW
428Current REPL options include:
429
430@table @code
431@item compile-options
432The options used when compiling expressions entered at the REPL.
433@xref{Compilation}, for more on compilation options.
434@item interp
435Whether to interpret or compile expressions given at the REPL, if such a
436choice is available. Off by default (indicating compilation).
437@item prompt
438A customized REPL prompt. @code{#f} by default, indicating the default
439prompt.
440@item value-history
441Whether value history is on or not. @xref{Value History}.
442@item on-error
443What to do when an error happens. By default, @code{debug}, meaning to
444enter the debugger. Other values include @code{backtrace}, to show a
445backtrace without entering the debugger, or @code{report}, to simply
446show a short error printout.
447@end table
448
449Default values for REPL options may be set using
450@code{repl-default-option-set!} from @code{(system repl common)}:
451
452@deffn {Scheme Procedure} repl-set-default-option! key value
453Set the default value of a REPL option. This function is particularly
454useful in a user's init file. @xref{Init File}.
455@end deffn
456
46f7666d 457
3c0b7725
AW
458@node Error Handling
459@subsection Error Handling
460
461When code being evaluated from the REPL hits an error, Guile enters a
462new prompt, allowing you to inspect the context of the error.
463
464@lisp
465scheme@@(guile-user)> (map string-append '("a" "b") '("c" #\d))
466ERROR: In procedure string-append:
467ERROR: Wrong type (expecting string): #\d
468Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
469scheme@@(guile-user) [1]>
470@end lisp
471
472The new prompt runs inside the old one, in the dynamic context of the
473error. It is a recursive REPL, augmented with a reified representation
474of the stack, ready for debugging.
475
476@code{,backtrace} (abbreviated @code{,bt}) displays the Scheme call
477stack at the point where the error occurred:
478
479@lisp
480scheme@@(guile-user) [1]> ,bt
481 1 (map #<procedure string-append _> ("a" "b") ("c" #\d))
482 0 (string-append "b" #\d)
483@end lisp
484
485In the above example, the backtrace doesn't have much source
486information, as @code{map} and @code{string-append} are both
487primitives. But in the general case, the space on the left of the
488backtrace indicates the line and column in which a given procedure calls
489another.
490
491You can exit a recursive REPL in the same way that you exit any REPL:
492via @samp{(quit)}, @samp{,quit} (abbreviated @samp{,q}), or
493@kbd{C-d}, among other options.
494
495
496@node Interactive Debugging
497@subsection Interactive Debugging
498
499A recursive debugging REPL exposes a number of other meta-commands that
500inspect the state of the computation at the time of the error. These
501commands allow you to
502
503@itemize @bullet
504@item
505display the Scheme call stack at the point where the error occurred;
506
507@item
508move up and down the call stack, to see in detail the expression being
509evaluated, or the procedure being applied, in each @dfn{frame}; and
510
511@item
512examine the values of variables and expressions in the context of each
513frame.
514@end itemize
515
516@noindent
517@xref{Debug Commands}, for documentation of the individual
518commands. This section aims to give more of a walkthrough of a typical
519debugging session.
520
521First, we're going to need a good error. Let's try to macroexpand the
522expression @code{(unquote foo)}, outside of a @code{quasiquote} form,
523and see how the macroexpander reports this error.
524
525@lisp
526scheme@@(guile-user)> (macroexpand '(unquote foo))
527ERROR: In procedure macroexpand:
528ERROR: unquote: expression not valid outside of quasiquote in (unquote foo)
529Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
530scheme@@(guile-user) [1]>
531@end lisp
532
533The @code{backtrace} command, which can also be invoked as @code{bt},
534displays the call stack (aka backtrace) at the point where the debugger
535was entered:
536
537@lisp
538scheme@@(guile-user) [1]> ,bt
539In ice-9/psyntax.scm:
540 1130:21 3 (chi-top (unquote foo) () ((top)) e (eval) (hygiene #))
541 1071:30 2 (syntax-type (unquote foo) () ((top)) #f #f (# #) #f)
542 1368:28 1 (chi-macro #<procedure de9360 at ice-9/psyntax.scm...> ...)
543In unknown file:
544 0 (scm-error syntax-error macroexpand "~a: ~a in ~a" # #f)
545@end lisp
546
547A call stack consists of a sequence of stack @dfn{frames}, with each
548frame describing one procedure which is waiting to do something with the
549values returned by another. Here we see that there are four frames on
550the stack.
551
552Note that @code{macroexpand} is not on the stack -- it must have made a
553tail call to @code{chi-top}, as indeed we would find if we searched
554@code{ice-9/psyntax.scm} for its definition.
555
556When you enter the debugger, the innermost frame is selected, which
557means that the commands for getting information about the ``current''
558frame, or for evaluating expressions in the context of the current
559frame, will do so by default with respect to the innermost frame. To
560select a different frame, so that these operations will apply to it
561instead, use the @code{up}, @code{down} and @code{frame} commands like
562this:
563
564@lisp
565scheme@@(guile-user) [1]> ,up
566In ice-9/psyntax.scm:
567 1368:28 1 (chi-macro #<procedure de9360 at ice-9/psyntax.scm...> ...)
568scheme@@(guile-user) [1]> ,frame 3
569In ice-9/psyntax.scm:
570 1130:21 3 (chi-top (unquote foo) () ((top)) e (eval) (hygiene #))
571scheme@@(guile-user) [1]> ,down
572In ice-9/psyntax.scm:
573 1071:30 2 (syntax-type (unquote foo) () ((top)) #f #f (# #) #f)
574@end lisp
575
576Perhaps we're interested in what's going on in frame 2, so we take a
577look at its local variables:
578
579@lisp
580scheme@@(guile-user) [1]> ,locals
581 Local variables:
582 $1 = e = (unquote foo)
583 $2 = r = ()
584 $3 = w = ((top))
585 $4 = s = #f
586 $5 = rib = #f
587 $6 = mod = (hygiene guile-user)
588 $7 = for-car? = #f
589 $8 = first = unquote
590 $9 = ftype = macro
591 $10 = fval = #<procedure de9360 at ice-9/psyntax.scm:2817:2 (x)>
592 $11 = fe = unquote
593 $12 = fw = ((top))
594 $13 = fs = #f
595 $14 = fmod = (hygiene guile-user)
596@end lisp
597
598All of the values are accessible by their value-history names
599(@code{$@var{n}}):
600
601@lisp
602scheme@@(guile-user) [1]> $10
603$15 = #<procedure de9360 at ice-9/psyntax.scm:2817:2 (x)>
604@end lisp
605
606We can even invoke the procedure at the REPL directly:
607
608@lisp
609scheme@@(guile-user) [1]> ($10 'not-going-to-work)
610ERROR: In procedure macroexpand:
611ERROR: source expression failed to match any pattern in not-going-to-work
612Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
613@end lisp
614
615Well at this point we've caused an error within an error. Let's just
616quit back to the top level:
617
618@lisp
619scheme@@(guile-user) [2]> ,q
620scheme@@(guile-user) [1]> ,q
621scheme@@(guile-user)>
622@end lisp
623
624Finally, as a word to the wise: hackers close their REPL prompts with
625@kbd{C-d}.
626
627
46f7666d
NJ
628@node Using Guile in Emacs
629@section Using Guile in Emacs
630
b20ef3a6 631@cindex Emacs
767dbb1a
AW
632Any text editor can edit Scheme, but some are better than others. Emacs
633is the best, of course, and not just because it is a fine text editor.
634Emacs has good support for Scheme out of the box, with sensible
635indentation rules, parenthesis-matching, syntax highlighting, and even a
636set of keybindings for structural editing, allowing navigation,
637cut-and-paste, and transposition operations that work on balanced
638S-expressions.
639
640As good as it is, though, two things will vastly improve your experience
641with Emacs and Guile.
642
643@cindex Paredit
644The first is Taylor Campbell's
645@uref{http://www.emacswiki.org/emacs/ParEdit, Paredit}. You should not
646code in any dialect of Lisp without Paredit. (They say that
647unopinionated writing is boring---hence this tone---but it's the
648truth, regardless.) Paredit is the bee's knees.
649
650@cindex Geiser
917b2bf6
NJ
651The second is
652@iftex
653Jos@'e
654@end iftex
655@ifnottex
656José
657@end ifnottex
658Antonio Ortega Ruiz's
767dbb1a
AW
659@uref{http://www.nongnu.org/geiser/, Geiser}. Geiser complements Emacs'
660@code{scheme-mode} with tight integration to running Guile processes via
661a @code{comint-mode} REPL buffer.
662
663Of course there are keybindings to switch to the REPL, and a good REPL
664environment, but Geiser goes beyond that, providing:
01d2ee15 665
767dbb1a 666@itemize @bullet
46f7666d 667@item
767dbb1a 668Form evaluation in the context of the current file's module.
46f7666d 669@item
767dbb1a 670Macro expansion.
46f7666d 671@item
767dbb1a 672File/module loading and/or compilation.
46f7666d 673@item
767dbb1a
AW
674Namespace-aware identifier completion (including local bindings, names
675visible in the current module, and module names).
46f7666d 676@item
767dbb1a
AW
677Autodoc: the echo area shows information about the signature of the
678procedure/macro around point automatically.
46f7666d 679@item
767dbb1a 680Jump to definition of identifier at point.
46f7666d 681@item
767dbb1a
AW
682Access to documentation (including docstrings when the implementation
683provides it).
46f7666d 684@item
767dbb1a 685Listings of identifiers exported by a given module.
62ae9557 686@item
767dbb1a 687Listings of callers/callees of procedures.
94a2c24a 688@item
767dbb1a 689Rudimentary support for debugging and error navigation.
62ae9557 690@item
767dbb1a 691Support for multiple, simultaneous REPLs.
62ae9557
NJ
692@end itemize
693
767dbb1a
AW
694See Geiser's web page at @uref{http://www.nongnu.org/geiser/}, for more
695information.
62ae9557
NJ
696
697
715146aa
AW
698@node Using Guile Tools
699@section Using Guile Tools
700
701@cindex guild
702@cindex guile-tools
703@cindex wizards
704Guile also comes with a growing number of command-line utilities: a
705compiler, a disassembler, some module inspectors, and in the future, a
706system to install Guile packages from the internet. These tools may be
8698e810 707invoked using the @code{guild} program.
715146aa
AW
708
709@example
710$ guild compile -o foo.go foo.scm
711wrote `foo.go'
712@end example
713
8698e810
LC
714This program used to be called @code{guile-tools} up to
715Guile version 2.0.1, and for backward
715146aa
AW
716compatibility it still may be called as such. However we changed the
717name to @code{guild}, not only because it is pleasantly shorter and
718easier to read, but also because this tool will serve to bind Guile
719wizards together, by allowing hackers to share code with each other
720using a CPAN-like system.
721
722@xref{Compilation}, for more on @code{guild compile}.
723
724A complete list of guild scripts can be had by invoking @code{guild
725list}, or simply @code{guild}.
726
46f7666d
NJ
727@c Local Variables:
728@c TeX-master: "guile.texi"
729@c End: