* oldprint.scm (print-table-add!): Ditto.
[bpt/guile.git] / devel / policy / goals.text
CommitLineData
6a2b0a5e
MD
1This file states the goals of Guile.
2
3* Goals of Guile
4
5Guile is many things to many people. It has multiple ways to approach
6it: as a C library that provides an extension language, as a
7programming language in its own right, as a interface to the operating
8system, as an interactive shell, or as a platform that integrates many
9independent subsystems.
10
11These different roles have a lot in common, but there are also some
12opposing forces that need to be balanced.
13
14Not everything of what is outlined below has been realized yet. The
15things that are missing will receive high priority from the
16maintainers of Guile. One thing that is not mentioned below because
17it goes without saying is documentation. It is of course a goal of
18Guile to have high quality documentation.
19
20More information about the current status of Guile and planned changed
21can be found in the file "plans.text".
22
23** Guile as an extension language library
24
25Guile's primary aim is to provide a good extension language which is
163fada3 26easy to add to an application written in C for the GNU system. This
6a2b0a5e
MD
27means that it must export the features of a higher level language in a
28way that makes it easy not to break them from C code.
29
30For example, one important feature of Guile is automatic garbage
31collection. The C interface to the garbage collector makes it easy to
32use its services for the data structures of the application itself.
33
34** Guile as a programming language
35
36It is an aim to support easy programming using Guile. This includes
37providing the powerful features of the programming language Scheme,
38like garbage collection, dynamic types, hygienic macros and higher
39order functions.
40
41This also includes things that go beyond standard Scheme, like a
42module system to manage multiple name spaces, a system for object
43oriented programming, support for comfortable multi-threading, and
44internationalization features like Unicode support.
45
46To make it useful, Guile offers good performance.
47
48** Guile as an interface to the operating system
49
50Guile supports most of the POSIX system calls. Most of Scsh is
51available to Guile users and Guile programs. Beyond POSIX, Guile also
52makes available important system libraries like the graphical toolkit
53Gtk+.
54
55** Guile as an interactive shell
56
57Guile provides a command line interface with readline support. The
58interactive features of the programming language allow you to
59incrementally alter a running system. A integrated debugger allows
60you to analyze such a running system in great detail.
61
62Guile provides online documentation for most of its features.
63
64Guile can also be controlled from Emacs. This allows you to update
65the definition of a function or some other object in a Guile process
66with the touch of a few keys. You have access to the documentation in
67a context sensitive way. It also integrates the debugger nicely into
68your editing environment.
69
70** Guile as an integration platform
71
72With all the features describes above, Guile allows the implementation
73of well behaved modules. When most of an application is implemented
74as modules with generality and re-usability in mind, Guile will be the
75platform where the integration and reusing will take place.
76
77Thus, Guile makes it easy to factor your application into well
78separated modules and then finish it off by combining them with a thin
79layer of Scheme code.
80
81Guile has support for writing modules in C or other compiled
82languages.
163fada3
MD
83
84** Guile as a basis for other languages
85
86Scheme is a very powerful language, which makes it possible
87to implement other languages by translating them into Scheme.
88
89By writing translators that convert various popular scripting
90languages into Scheme, we can enable users to choose their favorite
91languages for extending any program that provides extensibility using
92Guile.