elisp @@ macro
[bpt/guile.git] / doc / ref / history.texi
CommitLineData
8680d53b
AW
1@c -*-texinfo-*-
2@c This is part of the GNU Guile Reference Manual.
f5729276 3@c Copyright (C) 2008, 2010, 2011, 2013
8680d53b
AW
4@c Free Software Foundation, Inc.
5@c See the file guile.texi for copying conditions.
6
090d51ed 7@node History
8680d53b
AW
8@section A Brief History of Guile
9
090d51ed
AW
10Guile is an artifact of historical processes, both as code and as a
11community of hackers. It is sometimes useful to know this history when
12hacking the source code, to know about past decisions and future
13directions.
14
15Of course, the real history of Guile is written by the hackers hacking
16and not the writers writing, so we round up the section with a note on
17current status and future directions.
18
8680d53b 19@menu
090d51ed 20* The Emacs Thesis::
8680d53b 21* Early Days::
090d51ed
AW
22* A Scheme of Many Maintainers::
23* A Timeline of Selected Guile Releases::
24* Status::
8680d53b
AW
25@end menu
26
090d51ed
AW
27@node The Emacs Thesis
28@subsection The Emacs Thesis
29
30The story of Guile is the story of bringing the development experience
31of Emacs to the mass of programs on a GNU system.
32
33Emacs, when it was first created in its GNU form in 1984, was a new
34take on the problem of ``how to make a program''. The Emacs thesis is
35that it is delightful to create composite programs based on an
36orthogonal kernel written in a low-level language together with a
37powerful, high-level extension language.
8680d53b 38
090d51ed
AW
39Extension languages foster extensible programs, programs which adapt
40readily to different users and to changing times. Proof of this can be
41seen in Emacs' current and continued existence, spanning more than a
42quarter-century.
43
44Besides providing for modification of a program by others, extension
ca445ba5
AW
45languages are good for @emph{intension} as well. Programs built in
46``the Emacs way'' are pleasurable and easy for their authors to flesh
47out with the features that they need.
090d51ed
AW
48
49After the Emacs experience was appreciated more widely, a number of
50hackers started to consider how to spread this experience to the rest
51of the GNU system. It was clear that the easiest way to Emacsify a
52program would be to embed a shared language implementation into it.
8680d53b
AW
53
54@node Early Days
55@subsection Early Days
56
090d51ed
AW
57Tom Lord was the first to fully concentrate his efforts on an
58embeddable language runtime, which he named ``GEL'', the GNU Extension
59Language.
60
61GEL was the product of converting SCM, Aubrey Jaffer's implementation
62of Scheme, into something more appropriate to embedding as a library.
c4135077 63(SCM was itself based on an implementation by George Carrette, SIOD.)
090d51ed
AW
64
65Lord managed to convince Richard Stallman to dub GEL the official
66extension language for the GNU project. It was a natural fit, given
67that Scheme was a cleaner, more modern Lisp than Emacs Lisp. Part of
68the argument was that eventually when GEL became more capable, it
69could gain the ability to execute other languages, especially Emacs
70Lisp.
71
72Due to a naming conflict with another programming language, Jim Blandy
73suggested a new name for GEL: ``Guile''. Besides being a recursive
72b3aa56 74acronym, ``Guile'' craftily follows the naming of its ancestors,
090d51ed
AW
75``Planner'', ``Conniver'', and ``Schemer''. (The latter was truncated
76to ``Scheme'' due to a 6-character file name limit on an old operating
77system.) Finally, ``Guile'' suggests ``guy-ell'', or ``Guy L.
78Steele'', who, together with Gerald Sussman, originally discovered
79Scheme.
80
81Around the same time that Guile (then GEL) was readying itself for
82public release, another extension language was gaining in popularity,
83Tcl. Many developers found advantages in Tcl because of its shell-like
84syntax and its well-developed graphical widgets library, Tk. Also, at
85the time there was a large marketing push promoting Tcl as a
86``universal extension language''.
87
88Richard Stallman, as the primary author of GNU Emacs, had a particular
89vision of what extension languages should be, and Tcl did not seem to
90him to be as capable as Emacs Lisp. He posted a criticism to the
91comp.lang.tcl newsgroup, sparking one of the internet's legendary
92flamewars. As part of these discussions, retrospectively dubbed the
93``Tcl Wars'', he announced the Free Software Foundation's intent to
94promote Guile as the extension language for the GNU project.
95
96It is a common misconception that Guile was created as a reaction to
97Tcl. While it is true that the public announcement of Guile happened
98at the same time as the ``Tcl wars'', Guile was created out of a
99condition that existed outside the polemic. Indeed, the need for a
100powerful language to bridge the gap between extension of existing
101applications and a more fully dynamic programming environment is still
102with us today.
103
104@node A Scheme of Many Maintainers
72b3aa56 105@subsection A Scheme of Many Maintainers
090d51ed
AW
106
107Surveying the field, it seems that Scheme implementations correspond
108with their maintainers on an N-to-1 relationship. That is to say, that
109those people that implement Schemes might do so on a number of
110occasions, but that the lifetime of a given Scheme is tied to the
111maintainership of one individual.
112
113Guile is atypical in this regard.
114
72b3aa56 115Tom Lord maintained Guile for its first year and a half or so,
090d51ed
AW
116corresponding to the end of 1994 through the middle of 1996. The
117releases made in this time constitute an arc from SCM as a standalone
118program to Guile as a reusable, embeddable library, but passing
119through a explosion of features: embedded Tcl and Tk, a toolchain for
120compiling and disassembling Java, addition of a C-like syntax,
121creation of a module system, and a start at a rich POSIX interface.
122
123Only some of those features remain in Guile. There were ongoing
124tensions between providing a small, embeddable language, and one which
679cceed 125had all of the features (e.g.@: a graphical toolkit) that a modern Emacs
090d51ed
AW
126might need. In the end, as Guile gained in uptake, the development
127team decided to focus on depth, documentation and orthogonality rather
128than on breadth. This has been the focus of Guile ever since, although
129there is a wide range of third-party libraries for Guile.
130
131Jim Blandy presided over that period of stabilization, in the three
132years until the end of 1999, when he too moved on to other projects.
133Since then, Guile has had a group maintainership. The first group was
134Maciej Stachowiak, Mikael Djurfeldt, and Marius Vollmer, with Vollmer
135staying on the longest. By late 2007, Vollmer had mostly moved on to
9813088c 136other things, so Neil Jerram and Ludovic Court@`es
1e32c6cd 137stepped up to take on the primary maintenance responsibility. Jerram and
9813088c 138Court@`es were joined by Andy Wingo in late 2009.
090d51ed
AW
139
140Of course, a large part of the actual work on Guile has come from
141other contributors too numerous to mention, but without whom the world
142would be a poorer place.
143
144@node A Timeline of Selected Guile Releases
145@subsection A Timeline of Selected Guile Releases
146
147@table @asis
148@item guile-i --- 4 February 1995
149SCM, turned into a library.
150
151@item guile-ii --- 6 April 1995
152A low-level module system was added. Tcl/Tk support was added,
153allowing extension of Scheme by Tcl or vice versa. POSIX support was
154improved, and there was an experimental stab at Java integration.
155
156@item guile-iii --- 18 August 1995
157The C-like syntax, ctax, was improved, but mostly this release
158featured a start at the task of breaking Guile into pieces.
159
160@item 1.0 --- 5 January 1997
6515a666
AW
161@code{#f} was distinguished from @code{'()}. User-level, cooperative
162multi-threading was added. Source-level debugging became more useful,
163and programmer's and user's manuals were begun. The module system
164gained a high-level interface, which is still used today in more or
165less the same form.
090d51ed
AW
166
167@item 1.1 --- 16 May 1997
168@itemx 1.2 --- 24 June 1997
169Support for Tcl/Tk and ctax were split off as separate packages, and
170have remained there since. Guile became more compatible with SCSH, and
0f7e6c56 171more useful as a UNIX scripting language. Libguile could now be built as
090d51ed
AW
172a shared library, and third-party extensions written in C became
173loadable via dynamic linking.
174
175@item 1.3.0 --- 19 October 1998
176Command-line editing became much more pleasant through the use of the
177readline library. The initial support for internationalization via
0f7e6c56
AW
178multi-byte strings was removed; 10 years were to pass before proper
179internationalization would land again. Initial Emacs Lisp support
180landed, ports gained better support for file descriptors, and fluids
181were added.
090d51ed
AW
182
183@item 1.3.2 --- 20 August 1999
184@itemx 1.3.4 --- 25 September 1999
185@itemx 1.4 --- 21 June 2000
186A long list of lispy features were added: hooks, Common Lisp's
187@code{format}, optional and keyword procedure arguments,
188@code{getopt-long}, sorting, random numbers, and many other fixes and
0f7e6c56
AW
189enhancements. Guile also gained an interactive debugger, interactive
190help, and better backtraces.
090d51ed
AW
191
192@item 1.6 --- 6 September 2002
193Guile gained support for the R5RS standard, and added a number of SRFI
194modules. The module system was expanded with programmatic support for
195identifier selection and renaming. The GOOPS object system was merged
196into Guile core.
197
198@item 1.8 --- 20 February 2006
199Guile's arbitrary-precision arithmetic switched to use the GMP
6515a666
AW
200library, and added support for exact rationals. Guile's embedded
201user-space threading was removed in favor of POSIX pre-emptive
202threads, providing true multiprocessing. Gettext support was added,
203and Guile's C API was cleaned up and orthogonalized in a massive way.
090d51ed 204
4b93693d 205@item 2.0 --- 16 February 2010
0f7e6c56
AW
206A virtual machine was added to Guile, along with the associated compiler
207and toolchain. Support for internationalization was finally
208reimplemented, in terms of unicode, locales, and libunistring. Running
209Guile instances became controllable and debuggable from within Emacs,
4b93693d
AW
210via Geiser. Guile caught up to features found in a number of other
211Schemes: SRFI-18 threads, module-hygienic macros, a profiler, tracer,
212and debugger, SSAX XML integration, bytevectors, a dynamic FFI,
213delimited continuations, module versions, and partial support for R6RS.
f5729276
AW
214
215@item 2.2 --- mid-2014
216The virtual machine and introduced in 2.0 was completely rewritten,
217along with much of the compiler and toolchain. This speeds up many
218Guile programs as well as reducing startup time and memory usage. A PEG
219parser toolkit was added, making it easier to write other language
220frontends.
090d51ed
AW
221@end table
222
223@node Status
224@subsection Status, or: Your Help Needed
225
226Guile has achieved much of what it set out to achieve, but there is
227much remaining to do.
8680d53b 228
090d51ed
AW
229There is still the old problem of bringing existing applications into
230a more Emacs-like experience. Guile has had some successes in this
231respect, but still most applications in the GNU system are without
232Guile integration.
8680d53b 233
090d51ed
AW
234Getting Guile to those applications takes an investment, the
235``hacktivation energy'' needed to wire Guile into a program that only
236pays off once it is good enough to enable new kinds of behavior. This
237would be a great way for new hackers to contribute: take an
238application that you use and that you know well, think of something
239that it can't yet do, and figure out a way to integrate Guile and
240implement that task in Guile.
8680d53b 241
090d51ed
AW
242With time, perhaps this exposure can reverse itself, whereby programs
243can run under Guile instead of vice versa, eventually resulting in the
244Emacsification of the entire GNU system. Indeed, this is the reason
245for the naming of the many Guile modules that live in the @code{ice-9}
246namespace, a nod to the fictional substance in Kurt Vonnegut's
247novel, Cat's Cradle, capable of acting as a seed crystal to
248crystallize the mass of software.
8680d53b 249
090d51ed
AW
250Implicit to this whole discussion is the idea that dynamic languages
251are somehow better than languages like C. While languages like C have
252their place, Guile's take on this question is that yes, Scheme is more
253expressive than C, and more fun to write. This realization carries an
254imperative with it to write as much code in Scheme as possible rather
255than in other languages.
8680d53b 256
090d51ed
AW
257These days it is possible to write extensible applications almost
258entirely from high-level languages, through byte-code and native
259compilation, speed gains in the underlying hardware, and foreign call
f5729276
AW
260interfaces in the high-level language. Smalltalk systems are like this,
261as are Common Lisp-based systems. While there already are a number of
262pure-Guile applications out there, users still need to drop down to C
263for some tasks: interfacing to system libraries that don't have prebuilt
264Guile interfaces, and for some tasks requiring high performance. Native
265ahead-of-time compilation, planned for Guile 3.0, should help with
266this.
8680d53b 267
090d51ed
AW
268Still, even with an all-Guile application, sometimes you want to
269provide an opportunity for users to extend your program from a
270language with a syntax that is closer to C, or to Python. Another
679cceed 271interesting idea to consider is compiling e.g.@: Python to Guile. It's
090d51ed 272not that far-fetched of an idea: see for example IronPython or JRuby.
8680d53b 273
f5729276
AW
274And then there's Emacs itself. Guile's Emacs Lisp support has reached
275an excellent level of correctness, robustness, and speed. However there
276is still work to do to finish its integration into Emacs itself. This
277will give lots of exciting things to Emacs: native threads, a real
278object system, more sophisticated types, cleaner syntax, and access to
279all of the Guile extensions.
8680d53b 280
090d51ed 281Finally, there is another axis of crystallization, the axis between
f5729276
AW
282different Scheme implementations. Guile does not yet support the latest
283Scheme standard, R7RS, and should do so. Like all standards, R7RS is
284imperfect, but supporting it will allow more code to run on Guile
285without modification, and will allow Guile hackers to produce code
286compatible with other schemes. Help in this regard would be much
090d51ed 287appreciated.