1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-18 09:40:25 +02:00

* intro.texi (Using Guile Modules): Wrote intro to using modules.

(Writing New Modules): New intro for writing modules.
	(Reporting Bugs): Added info about what is a bug and what to
	include in a bug report (taken and adapted from the Emacs
	Reference Manual).
This commit is contained in:
Martin Grabmüller 2001-04-20 07:31:25 +00:00
parent 454a8a8fff
commit 2da0d971eb
2 changed files with 263 additions and 5 deletions

View file

@ -1,3 +1,11 @@
2001-04-20 Martin Grabmueller <mgrabmue@cs.tu-berlin.de>
* intro.texi (Using Guile Modules): Wrote intro to using modules.
(Writing New Modules): New intro for writing modules.
(Reporting Bugs): Added info about what is a bug and what to
include in a bug report (taken and adapted from the Emacs
Reference Manual).
2001-04-19 Martin Grabmueller <mgrabmue@cs.tu-berlin.de> 2001-04-19 Martin Grabmueller <mgrabmue@cs.tu-berlin.de>
* scheme-control.texi (while do): Added documentation for named * scheme-control.texi (while do): Added documentation for named

View file

@ -1,4 +1,4 @@
@c $Id: intro.texi,v 1.5 2001-03-30 16:37:51 ossau Exp $ @c $Id: intro.texi,v 1.6 2001-04-20 07:31:25 mgrabmue Exp $
@page @page
@node What is Guile? @node What is Guile?
@ -708,12 +708,100 @@ provide reasonable backwards compatability.)
@node Using Guile Modules @node Using Guile Modules
@subsection Using Existing Modules @subsection Using Existing Modules
To be written. @c FIXME::martin: Review me!
@c FIXME::martin: More? Or leave the rest to the module chapter?
Guile comes with a lot of useful modules, for example for string
processing or command line parsing. Additionally, there exist many
Guile modules written by other Guile hackers, but which have to be
installed manually.
Existing modules have to be placed in places where Guile looks for them
by default or in directories in the environment variable
@code{GUILE_LOAD_PATH}.
Suppose you want to use the procedures and variables exported by the
module @code{(ice-9 popen)}, which provides the means for communicating
with other processes over pipes. Add the following line to your
currently running Guile REPL or the top of you script file.
@lisp
(use-modules (ice-9 popen))
@end lisp
This will load the module and make the procedures exported by
@code{(ice-9 popen)} automatically available. The next step could be to
open a pipe to @file{ls} and read the contents of the current directory,
one line at a time.
@lisp
(define p (open-input-pipe "ls -l"))
(read-line p)
@result{}
"total 30"
(read-line p)
@result{}
"drwxr-sr-x 2 mgrabmue mgrabmue 1024 Mar 29 19:57 CVS"
@end lisp
More details of module usage can be found in (REFFIXME).
@node Writing New Modules @node Writing New Modules
@subsection Writing New Modules @subsection Writing New Modules
To be written. Of course it is possible to write modules yourself. Using modules for
structuring your programs makes them more readable and lets you
distribute them more easily. Also, explicitly defining the procedures
and variables which are exported from a module adds documentation to the
source and specifies the interface a module provides.
In Guile, you can create new modules and switch to exisiting modules in
order to add bindings to them using the syntactic form
@code{define-module}.
@lisp
(define-module (foo bar))
(define (frob x) x)
@end lisp
Will create the module @code{(foo bar)}.@footnote{It is only convention
that the module names in this section have two elements. One or more
than two elements are perfectly fine, such as @code{(foo)} or @code{(foo
bar braz)}} All definitions following this statement will add bindings
to the module @code{(foo bar)}, and these bindings will not be visible
outside of the module. To make the bindings accessible to other
modules, you have to export them explicitly using one of the following
means:
@itemize @bullet
@item
Export them with the @code{export} form:
@lisp
(export frob)
@end lisp
@item
Include them into the @code{define-module} form with the keyword
@code{export}:
@lisp
(define-module (foo bar)
#:export (frob))
@end lisp
@item
Change the definition of @code{frob} to use @code{define-public}, which
is a combination of @code{define} and @code{export}.
@lisp
(define-public (frob x) x)
@end lisp
@end itemize
After exporting, other modules can access the exported items simply by
using @code{use-modules} to load the module @code{(foo bar)}.
@node Modules and Extensions @node Modules and Extensions
@subsection Modules and Extensions @subsection Modules and Extensions
@ -743,11 +831,173 @@ for example as @file{/usr/local/share/guile/math/bessel.scm}.
@node Reporting Bugs @node Reporting Bugs
@chapter Reporting Bugs @chapter Reporting Bugs
@c FIXME::martin: Review me!
@c FIXME::martin: A lot of this was taken from the Emacs reference
@c manual and adapted. I guess that is okay?
Any problems with the installation should be reported to Any problems with the installation should be reported to
@email{bug-guile@@gnu.org}. @email{bug-guile@@gnu.org}.
[[how about an explanation of what makes a good bug report?]] Whenever you have found a bug in Guile you are encouraged to report it
[[don't complain to us about problems with contributed modules?]] to the Guile developers, so they can fix it. They may probably have
also advice what to do to work around a bug when it is not possible for
you to apply the bugfix or install a new version of Guile yourself.
Before sending in bug reports, please check with the following list that
you really have found a bug.
@itemize @bullet
@item
Whenever documentation and actual behaviour differ, you have certainly
found a bug, either in the documentation or in the program.
@item
When Guile crashes, it is a bug.
@item
When Guile hangs or takes forever to complete a task, it is a bug.
@item
When calculations produce wrong results, it is a bug.
@item
When Guile signals an error for valid Scheme programs, it is a bug.
@item
@c FIXME::martin: Too strict?
When Guile does not signal an error for invalid Scheme programs, it may
be a bug, unless this is explicitly documented.
@item
When some part of the documentation is not clear and does not make sense
to you even after re--reading the section, it is a bug.
@end itemize
When you write a bug report, please make sure to include as much of the
information described below in the report. If you can't figure out some
of the items, it is not a problem, but the more information we get, the
better are chances we can diagnose and fix the bug.
@itemize @bullet
@item
The version number of Guile. Without this, we won't know whether there
is any point in looking for the bug in the current version of Guile.
You can get the version number by invoking the command
@example
$ guile --version
Guile 1.4.1
Copyright (c) 1995, 1996, 1997, 2000 Free Software Foundation
Guile may be distributed under the terms of the GNU General Public Licence;
certain other uses are permitted as well. For details, see the file
`COPYING', which is included in the Guile distribution.
There is no warranty, to the extent permitted by law.
@end example
@item
The type of machine you are using, and the operating system name and
version number. On GNU systems, you can get it with @file{uname}.
@example
$ uname -a
Linux tortoise 2.2.17 #1 Thu Dec 21 17:29:05 CET 2000 i586 unknown
@end example
@item
The operands given to the @file{configure} command when Guile was
installed.
@item
A complete list of any modifications you have made to the Guile source.
(We may not have time to investigate the bug unless it happens in an
unmodified Guile. But if you've made modifications and you don't tell
us, you are sending us on a wild goose chase.)
Be precise about these changes. A description in English is not
enough--send a context diff for them.
Adding files of your own, or porting to another machine, is a
modification of the source.
@item
Details of any other deviations from the standard procedure for
installing Guile.
@item
The complete text of any source files needed to reproduce the bug.
If you can tell us a way to cause the problem without loading any source
files, please do so. This makes it much easier to debug. If you do
need files, make sure you arrange for us to see their exact contents.
@item
The precise Guile invocation command line we need to type to reproduce
the bug.
@item
A description of what behavior you observe that you believe is
incorrect. For example, "The Guile process gets a fatal signal," or,
"The resulting output is as follows, which I think is wrong."
Of course, if the bug is that Guile gets a fatal signal, then one can't
miss it. But if the bug is incorrect results, the maintainer might fail
to notice what is wrong. Why leave it to chance?
If the manifestation of the bug is an Guile error message, it is
important to report the precise text of the error message, and a
backtrace showing how the Scheme program arrived at the error.
This can be done using the procedure @code{backtrace} in the REPL.
@item
Check whether any programs you have loaded into Guile, including your
`.guile' file, set any variables that may affect the functioning of
Guile. Also, see whether the problem happens in a freshly started Guile
without loading your `.guile file (start Guile with the `-q' switch to
prevent loading the init file). If the problem does _not_ occur then,
you must report the precise contents of any programs that you must load
into Guile in order to cause the problem to occur.
@item
If the problem does depend on an init file or other Lisp programs that
are not part of the standard Guile distribution, then you should make
sure it is not a bug in those programs by complaining to their
maintainers first. After they verify that they are using Guile in a way
that is supposed to work, they should report the bug.
@item
If you wish to mention something in the Guile source, show the line of
code with a few lines of context. Don't just give a line number.
The line numbers in the development sources don't match those in your
sources. It would take extra work for the maintainers to determine what
code is in your version at a given line number, and we could not be
certain.
@item
Additional information from a C debugger such as GDB might enable
someone to find a problem on a machine which he does not have available.
If you don't know how to use GDB, please read the GDB manual--it is not
very long, and using GDB is easy. You can find the GDB distribution,
including the GDB manual in online form, in most of the same places you
can find the Guile distribution. To run Guile under GDB, you should
switch to the `libguile' subdirectory in which Guile was compiled, then
do `gdb guile'.
However, you need to think when you collect the additional information
if you want it to show what causes the bug.
For example, many people send just a backtrace, but that is not very
useful by itself. A simple backtrace with arguments often conveys
little about what is happening inside Guile, because most of the
arguments listed in the backtrace are pointers to Scheme objects. The
numeric values of these pointers have no significance whatever; all that
matters is the contents of the objects they point to (and most of the
contents are themselves pointers).
@end itemize
@c Local Variables: @c Local Variables: