Commit | Line | Data |
---|---|---|
8680d53b AW |
1 | @c -*-texinfo-*- |
2 | @c This is part of the GNU Guile Reference Manual. | |
3 | @c Copyright (C) 2008 | |
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 |
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 | ||
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 | ||
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. | |
8680d53b | 38 | |
090d51ed AW |
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 | |
ca445ba5 AW |
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. | |
090d51ed AW |
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. | |
8680d53b AW |
53 | |
54 | @node Early Days | |
55 | @subsection Early Days | |
56 | ||
090d51ed AW |
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. | |
c4135077 | 63 | (SCM was itself based on an implementation by George Carrette, SIOD.) |
090d51ed AW |
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 | acroymn, ``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 Mantainers | |
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 maintaned 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 Courtès stepped up to take on | |
137 | the primary maintenance responsibility. | |
138 | ||
139 | Of course, a large part of the actual work on Guile has come from | |
140 | other contributors too numerous to mention, but without whom the world | |
141 | would be a poorer place. | |
142 | ||
143 | @node A Timeline of Selected Guile Releases | |
144 | @subsection A Timeline of Selected Guile Releases | |
145 | ||
146 | @table @asis | |
147 | @item guile-i --- 4 February 1995 | |
148 | SCM, turned into a library. | |
149 | ||
150 | @item guile-ii --- 6 April 1995 | |
151 | A low-level module system was added. Tcl/Tk support was added, | |
152 | allowing extension of Scheme by Tcl or vice versa. POSIX support was | |
153 | improved, and there was an experimental stab at Java integration. | |
154 | ||
155 | @item guile-iii --- 18 August 1995 | |
156 | The C-like syntax, ctax, was improved, but mostly this release | |
157 | featured a start at the task of breaking Guile into pieces. | |
158 | ||
159 | @item 1.0 --- 5 January 1997 | |
6515a666 AW |
160 | @code{#f} was distinguished from @code{'()}. User-level, cooperative |
161 | multi-threading was added. Source-level debugging became more useful, | |
162 | and programmer's and user's manuals were begun. The module system | |
163 | gained a high-level interface, which is still used today in more or | |
164 | less the same form. | |
090d51ed AW |
165 | |
166 | @item 1.1 --- 16 May 1997 | |
167 | @itemx 1.2 --- 24 June 1997 | |
168 | Support for Tcl/Tk and ctax were split off as separate packages, and | |
169 | have remained there since. Guile became more compatible with SCSH, and | |
170 | more useful as a UNIX scripting language. Libguile can now be built as | |
171 | a shared library, and third-party extensions written in C became | |
172 | loadable via dynamic linking. | |
173 | ||
174 | @item 1.3.0 --- 19 October 1998 | |
175 | Command-line editing became much more pleasant through the use of the | |
176 | readline library. The initial support for internationalization via | |
177 | multi-byte strings was removed, and has yet to be added back, though | |
178 | UTF-8 hacks are common. Modules gained the ability to have custom | |
c4135077 AW |
179 | expanders, which is still used for syntax-case macros. Initial Emacs |
180 | Lisp support landed, ports gained better support for file descriptors, | |
181 | and fluids were 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 | |
186 | A 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 | |
189 | enhancements. Guile now has an interactive debugger, interactive help, | |
190 | and gives better backtraces. | |
191 | ||
192 | @item 1.6 --- 6 September 2002 | |
193 | Guile gained support for the R5RS standard, and added a number of SRFI | |
194 | modules. The module system was expanded with programmatic support for | |
195 | identifier selection and renaming. The GOOPS object system was merged | |
196 | into Guile core. | |
197 | ||
198 | @item 1.8 --- 20 February 2006 | |
199 | Guile's arbitrary-precision arithmetic switched to use the GMP | |
6515a666 AW |
200 | library, and added support for exact rationals. Guile's embedded |
201 | user-space threading was removed in favor of POSIX pre-emptive | |
202 | threads, providing true multiprocessing. Gettext support was added, | |
203 | and Guile's C API was cleaned up and orthogonalized in a massive way. | |
090d51ed AW |
204 | |
205 | @item 2.0 --- thus far, only unstable snapshots available | |
206 | A virtual machine was added to Guile, along with the associated | |
6515a666 AW |
207 | compiler and toolchain. Support for internationalization was added. |
208 | Running Guile instances became controllable and debuggable from within | |
c4135077 AW |
209 | Emacs, via GDS, which was also backported to 1.8.5. An SRFI-18 |
210 | interface to multithreading was added, including thread cancellation. | |
090d51ed AW |
211 | @end table |
212 | ||
213 | @node Status | |
214 | @subsection Status, or: Your Help Needed | |
215 | ||
216 | Guile has achieved much of what it set out to achieve, but there is | |
217 | much remaining to do. | |
8680d53b | 218 | |
090d51ed AW |
219 | There is still the old problem of bringing existing applications into |
220 | a more Emacs-like experience. Guile has had some successes in this | |
221 | respect, but still most applications in the GNU system are without | |
222 | Guile integration. | |
8680d53b | 223 | |
090d51ed AW |
224 | Getting Guile to those applications takes an investment, the |
225 | ``hacktivation energy'' needed to wire Guile into a program that only | |
226 | pays off once it is good enough to enable new kinds of behavior. This | |
227 | would be a great way for new hackers to contribute: take an | |
228 | application that you use and that you know well, think of something | |
229 | that it can't yet do, and figure out a way to integrate Guile and | |
230 | implement that task in Guile. | |
8680d53b | 231 | |
090d51ed AW |
232 | With time, perhaps this exposure can reverse itself, whereby programs |
233 | can run under Guile instead of vice versa, eventually resulting in the | |
234 | Emacsification of the entire GNU system. Indeed, this is the reason | |
235 | for the naming of the many Guile modules that live in the @code{ice-9} | |
236 | namespace, a nod to the fictional substance in Kurt Vonnegut's | |
237 | novel, Cat's Cradle, capable of acting as a seed crystal to | |
238 | crystallize the mass of software. | |
8680d53b | 239 | |
090d51ed AW |
240 | Implicit to this whole discussion is the idea that dynamic languages |
241 | are somehow better than languages like C. While languages like C have | |
242 | their place, Guile's take on this question is that yes, Scheme is more | |
243 | expressive than C, and more fun to write. This realization carries an | |
244 | imperative with it to write as much code in Scheme as possible rather | |
245 | than in other languages. | |
8680d53b | 246 | |
090d51ed AW |
247 | These days it is possible to write extensible applications almost |
248 | entirely from high-level languages, through byte-code and native | |
249 | compilation, speed gains in the underlying hardware, and foreign call | |
250 | interfaces in the high-level language. Smalltalk systems are like | |
251 | this, as are Common Lisp-based systems. While there already are a | |
252 | number of pure-Guile applications out there, users still need to drop | |
253 | down to C for some tasks: interfacing to system libraries that don't | |
254 | have prebuilt Guile interfaces, and for some tasks requiring high | |
255 | performance. | |
8680d53b | 256 | |
090d51ed AW |
257 | The addition of the virtual machine in Guile 2.0, together with the |
258 | compiler infrastructure, should go a long way to addressing the speed | |
259 | issues. But there is much optimization to be done. Interested | |
260 | contributors will find lots of delightful low-hanging fruit, from | |
261 | simple profile-driven optimization to hacking a just-in-time compiler | |
262 | from VM bytecode to native code. | |
8680d53b | 263 | |
090d51ed AW |
264 | Still, even with an all-Guile application, sometimes you want to |
265 | provide an opportunity for users to extend your program from a | |
266 | language with a syntax that is closer to C, or to Python. Another | |
267 | interesting idea to consider is compiling e.g. Python to Guile. It's | |
268 | not that far-fetched of an idea: see for example IronPython or JRuby. | |
8680d53b | 269 | |
090d51ed AW |
270 | And then there's Emacs itself. Though there is a somewhat-working |
271 | Emacs Lisp translator for Guile, it cannot yet execute all of Emacs | |
272 | Lisp. A serious integration of Guile with Emacs would replace the | |
273 | Elisp virtual machine with Guile, and provide the necessary C shims so | |
274 | that Guile could emulate Emacs' C API. This would give lots of | |
275 | exciting things to Emacs: native threads, a real object system, more | |
276 | sophisticated types, cleaner syntax, and access to all of the Guile | |
277 | extensions. | |
8680d53b | 278 | |
090d51ed AW |
279 | Finally, there is another axis of crystallization, the axis between |
280 | different Scheme implementations. Guile does not yet support the | |
281 | latest Scheme standard, R6RS, and should do so. Like all standards, | |
282 | R6RS is imperfect, but supporting it will allow more code to run on | |
283 | Guile without modification, and will allow Guile hackers to produce | |
284 | code compatible with other schemes. Help in this regard would be much | |
285 | appreciated. |