123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- @node Introduction
- @chapter Introduction
- Guile is an interpreter for Scheme, a clean, economical programming
- language in the Lisp family. You can invoke Guile from the shell to
- evaluate Scheme expressions interactively, or use it as an interpreter
- for script files. However, Guile is also packaged as a library, to be
- embedded as an extension language into other applications. The
- application can supplement the base language with special-purpose
- functions and datatypes, allowing the user to customize and extend it by
- writing Scheme code.
- In its simplest form, Guile is an ordinary interpreter. The
- @code{guile} program can read and evaluate Scheme expressions entered
- from the terminal. Here is a sample interaction between Guile and a
- user; the user's input appears after the @code{$} and @code{guile>}
- prompts:
- @example
- $ guile
- guile> (+ 1 2 3) ; add some numbers
- 6
- guile> (define (factorial n) ; define a function
- (if (zero? n) 1 (* n (factorial (- n 1)))))
- guile> (factorial 20)
- 2432902008176640000
- guile> (getpwnam "jimb") ; find my entry in /etc/passwd
- #("jimb" ".0krIpK2VqNbU" 4008 10 "Jim Blandy" "/u/jimb"
- "/usr/local/bin/bash")
- guile> @kbd{C-d}
- $
- @end example
- Guile can also interpret script files. For example, here is a Guile script
- containing a script which displays the
- application can
- supplement the base language with its own functions, datatypes and
- syntax, allowing the user to extend and
- Guile interpret
- . An
- application the Guile interpreter to allow
- , allowing
- applications to incorporate the Scheme interpreter for customization
- [[interactive]]
- [[script interpreter]]
- [[embedded]]
- [[other languages]]
- The concept of an extension language library does not originate with
- Guile. However, Guile is the first to offer users a choice of languages
- to program in.
- Guile currently supports Scheme and Ctax , and we expect to support Emacs Lisp in the near future.
- Scheme is powerful enough that other languages can be
- conveniently translated into it,
- However, unlike other extension packages, Guile gives users a choice of
- languages to program in. Guile can
- In this sense, Guile resembles the Tcl and Python packages, providing
- both an ordinary interpreter and an extension language library.
- However, unlike those packages, Guile supports more than one programming
- language.
- ; users can
- write Scheme code to control and customize applications which
- incorporate Guile
- , adding their own functions,
- datatypes, and syntax, to allow the user to programm
- link it into your own programs to make them
- Guile is a library containing an interpreter for Scheme, a complete but
- economical programming language, which the developer can customize to
- suit the application at hand by adding new functions, data types, and
- control structures. These may be implemented in C, and then
- ``exported'' for use by the interpreted code. Because Guile already
- provides a full-featured interpreter, the developer need not neglect the
- language's design in order to concentrate on code relevant to the task.
- In this way, Guile provides a framework for the construction of
- domain-specific languages.
- Guile provides first-class functions, a rich set of data types,
- exception handling, a module system, and a powerful macro facility.
- Guile also supports dynamic linking and direct access to Unix system
- calls. Releases in the near future will support a source-level
- debugger and bindings for the Tk user interface toolkit.
- Guile is a framework for writing applications controlled by specialized
- languages. In its simplest form, Guile is an interpreter for Scheme, a
- clean, economical programming language in the Lisp family. However,
- Guile is packaged as a library, allowing applications to link against it
- and use Scheme as their extension language. The application can add
- primitive functions to the language, implement new data types, and even
- adjust the language's syntax.
- [the introduction is probably not what Jim has in mind; I just took the
- one I had in earlier, since the file had the same name intro.texi]
- Guile is an implementation of the Scheme programming language, but, like
- other modern implementations of Scheme, it adds many features that the
- community of Scheme programmers considers necessary for an ``industrial
- strength'' language.
- Examples of extensions to Scheme are the module system
- (@pxref{Modules}), the Unix system programming tools (@pxref{POSIX
- system calls and networking} and @pxref{The Scheme shell (scsh)}), an
- interface to @emph{libtool} to make it easier to add C libraries as
- primitives (@pxref{Linking Guile with your code}), and (FIXME add more).
- On top of these extensions, which many other Scheme implementations
- provide, Guile also offers the possibility of writing routines in other
- languages and running them simultaneously with Scheme. The desire to
- implement other languages (in particular Emacs Lisp) on top of Scheme is
- responsible for Guile's only deviation from the R4RS @footnote{R4RS is
- the Revised^4 Report on the Algorithmic Language Scheme, the closest
- thing to a standard Scheme specification today} Scheme standard
- (@cite{r4rs}): Guile is case sensitive, whereas ``standard'' Scheme is
- not.
- But even more fundamentally, Guile is meant to be an @emph{embeddable}
- Scheme interpreter. This means that a lot of work has gone into
- packaging the interpreter as a C library (@pxref{A Portable C to Scheme Interface} and @pxref{Scheme data representation}).
- This reference manual is mainly driven by the need to document all the
- features that go beyond standard Scheme.
- @menu
- * Getting started::
- * Guile feature list::
- * What you need to use Guile::
- * Roadmap to the Manual::
- * Motivation for Guile::
- * History of Guile::
- @end menu
- @node Getting started
- @section Getting started
- We assume that you know how to program in Scheme, although we do not
- assume advanced knowledge. If you don't know Scheme, there are many
- good books on Scheme at all levels, and the Guile Tutorial might give
- you a good enough feel for the language. We also assume that you know
- how to program in C, since there will be many examples of how to program
- in C using Guile as a library.
- Many diverse topics from the world of Unix hacking will be covered here,
- such as shared libraries, socket programming, garbage collection, and so
- forth. If at any time you feel you don't have enough background on a
- given topic, just go up a level or two in the manual, and you will find
- that the chapter begins with a few paragraphs that introduce the topic.
- If you are still lost, read through the Guile tutorial and then come
- back to this reference manual.
- To run the core Guile interpreter and extension library you need no more
- than a basically configured GNU/Unix system and the Guile sources. You
- should download and install the Guile sources (@pxref{Obtaining and
- Installing Guile}).
- @node Guile feature list
- @section Guile feature list
- In a reductionist view, Guile could be regarded as:
- @itemize @bullet
- @item
- An R4RS-compliant Scheme interpreter.
- @item
- Some Scheme features that go beyond the R4RS standard, notably a module
- system, exception handling primitives and an interface to Aubrey
- Jaffer's SLIB.
- @item
- A symbolic debugger for Scheme, and gdb extensions to facilitate
- debugging libguile programs.
- @item
- An embeddable version of the same interpreter, called @emph{libguile}.
- @item
- A portable high level API on top of libguile (the @code{gh_} interface).
- @item
- A collection of bundled C libraries with a Guile API. As we write, this
- list includes:
- @table @strong
- @item Rx
- a regular expression library.
- @item Unix
- a low-level interface to the POSIX system calls, socket library
- and other Unix system services.
- @item Tk
- an interface to John Ousterhout's Tk toolkit.
- @end table
- @item
- A set of tools for implementing other languages @emph{on top of Scheme},
- and an example implementation of a language called @emph{Ctax}.
- @end itemize
- @node What you need to use Guile
- @section What you need to use Guile
- @node Roadmap to the Manual
- @section Roadmap to the Manual
- @node Motivation for Guile
- @section Motivation for Guile
- @node History of Guile
- @section History of Guile
- @page
- @node Using Guile
- @chapter Using Guile
- [I think that this might go in the appendix in Jim's view of the manual]
- @page
- @node Invoking Guile
- @appendix Invoking Guile
- --- mentions read-eval-print loops
- --- both the SCSH and GAWK manuals relegate invocation details
- to an appendix. We can give examples in the introduction.
- @table @samp
- @item -h
- @itemx --help
- Display a helpful message.
- @item -v
- @item --version
- Display the current version.
- @item --emacs
- To be used for emacs editing support.
- @item -s @var{file}
- Process @var{file} as a script then quit. This is a terminating option:
- any further command line arguments can be accessed by the script using
- the @code{(program-arguments)} procedure.
- An executable script can start with the following:
- @smallexample
- #!/usr/bin/guile -s
- !#
- @end smallexample
- Note the @code{!#} token on the second line. It is very important
- to include this token when writing Guile scripts. Guile and SCSH,
- the Scheme shell, share the convention that @code{#!} and
- @code{!#} may be used to mark block comments (@pxref{Block
- comments and interpreter triggers}). If the closing @code{!#}
- token is not included, then Guile will consider the block comment
- to be unclosed, and the script will probably not compile
- correctly.
- It is also important to include the @samp{-s} option at the
- beginning of the Guile script, so that Guile knows not to behave
- in an interactive fashion.
- @end table
|