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