c385b18115352c342696b0da99bb3ebce6fff510
[chise/xemacs-chise.git.1] / info / internals.info-1
1 This is ../info/internals.info, produced by makeinfo version 4.0 from
2 internals/internals.texi.
3
4 INFO-DIR-SECTION XEmacs Editor
5 START-INFO-DIR-ENTRY
6 * Internals: (internals).       XEmacs Internals Manual.
7 END-INFO-DIR-ENTRY
8
9    Copyright (C) 1992 - 1996 Ben Wing.  Copyright (C) 1996, 1997 Sun
10 Microsystems.  Copyright (C) 1994 - 1998 Free Software Foundation.
11 Copyright (C) 1994, 1995 Board of Trustees, University of Illinois.
12
13    Permission is granted to make and distribute verbatim copies of this
14 manual provided the copyright notice and this permission notice are
15 preserved on all copies.
16
17    Permission is granted to copy and distribute modified versions of
18 this manual under the conditions for verbatim copying, provided that the
19 entire resulting derived work is distributed under the terms of a
20 permission notice identical to this one.
21
22    Permission is granted to copy and distribute translations of this
23 manual into another language, under the above conditions for modified
24 versions, except that this permission notice may be stated in a
25 translation approved by the Foundation.
26
27    Permission is granted to copy and distribute modified versions of
28 this manual under the conditions for verbatim copying, provided also
29 that the section entitled "GNU General Public License" is included
30 exactly as in the original, and provided that the entire resulting
31 derived work is distributed under the terms of a permission notice
32 identical to this one.
33
34    Permission is granted to copy and distribute translations of this
35 manual into another language, under the above conditions for modified
36 versions, except that the section entitled "GNU General Public License"
37 may be included in a translation approved by the Free Software
38 Foundation instead of in the original English.
39
40 \1f
41 File: internals.info,  Node: Top,  Next: A History of Emacs,  Prev: (dir),  Up: (dir)
42
43    This Info file contains v1.0 of the XEmacs Internals Manual.
44
45 * Menu:
46
47 * A History of Emacs::          Times, dates, important events.
48 * XEmacs From the Outside::     A broad conceptual overview.
49 * The Lisp Language::           An overview.
50 * XEmacs From the Perspective of Building::
51 * XEmacs From the Inside::
52 * The XEmacs Object System (Abstractly Speaking)::
53 * How Lisp Objects Are Represented in C::
54 * Rules When Writing New C Code::
55 * A Summary of the Various XEmacs Modules::
56 * Allocation of Objects in XEmacs Lisp::
57 * Events and the Event Loop::
58 * Evaluation; Stack Frames; Bindings::
59 * Symbols and Variables::
60 * Buffers and Textual Representation::
61 * MULE Character Sets and Encodings::
62 * The Lisp Reader and Compiler::
63 * Lstreams::
64 * Consoles; Devices; Frames; Windows::
65 * The Redisplay Mechanism::
66 * Extents::
67 * Faces::
68 * Glyphs::
69 * Specifiers::
70 * Menus::
71 * Subprocesses::
72 * Interface to X Windows::
73 * Index::                   Index including concepts, functions, variables,
74                               and other terms.
75
76       --- The Detailed Node Listing ---
77
78 Here are other nodes that are inferiors of those already listed,
79 mentioned here so you can get to them in one step:
80
81 A History of Emacs
82
83 * Through Version 18::          Unification prevails.
84 * Lucid Emacs::                 One version 19 Emacs.
85 * GNU Emacs 19::                The other version 19 Emacs.
86 * XEmacs::                      The continuation of Lucid Emacs.
87
88 Rules When Writing New C Code
89
90 * General Coding Rules::
91 * Writing Lisp Primitives::
92 * Adding Global Lisp Variables::
93 * Techniques for XEmacs Developers::
94
95 A Summary of the Various XEmacs Modules
96
97 * Low-Level Modules::
98 * Basic Lisp Modules::
99 * Modules for Standard Editing Operations::
100 * Editor-Level Control Flow Modules::
101 * Modules for the Basic Displayable Lisp Objects::
102 * Modules for other Display-Related Lisp Objects::
103 * Modules for the Redisplay Mechanism::
104 * Modules for Interfacing with the File System::
105 * Modules for Other Aspects of the Lisp Interpreter and Object System::
106 * Modules for Interfacing with the Operating System::
107 * Modules for Interfacing with X Windows::
108 * Modules for Internationalization::
109
110 Allocation of Objects in XEmacs Lisp
111
112 * Introduction to Allocation::
113 * Garbage Collection::
114 * GCPROing::
115 * Garbage Collection - Step by Step::
116 * Integers and Characters::
117 * Allocation from Frob Blocks::
118 * lrecords::
119 * Low-level allocation::
120 * Pure Space::
121 * Cons::
122 * Vector::
123 * Bit Vector::
124 * Symbol::
125 * Marker::
126 * String::
127 * Compiled Function::
128
129 Events and the Event Loop
130
131 * Introduction to Events::
132 * Main Loop::
133 * Specifics of the Event Gathering Mechanism::
134 * Specifics About the Emacs Event::
135 * The Event Stream Callback Routines::
136 * Other Event Loop Functions::
137 * Converting Events::
138 * Dispatching Events; The Command Builder::
139
140 Evaluation; Stack Frames; Bindings
141
142 * Evaluation::
143 * Dynamic Binding; The specbinding Stack; Unwind-Protects::
144 * Simple Special Forms::
145 * Catch and Throw::
146
147 Symbols and Variables
148
149 * Introduction to Symbols::
150 * Obarrays::
151 * Symbol Values::
152
153 Buffers and Textual Representation
154
155 * Introduction to Buffers::     A buffer holds a block of text such as a file.
156 * The Text in a Buffer::        Representation of the text in a buffer.
157 * Buffer Lists::                Keeping track of all buffers.
158 * Markers and Extents::         Tagging locations within a buffer.
159 * Bufbytes and Emchars::        Representation of individual characters.
160 * The Buffer Object::           The Lisp object corresponding to a buffer.
161
162 MULE Character Sets and Encodings
163
164 * Character Sets::
165 * Encodings::
166 * Internal Mule Encodings::
167
168 Encodings
169
170 * Japanese EUC (Extended Unix Code)::
171 * JIS7::
172
173 Internal Mule Encodings
174
175 * Internal String Encoding::
176 * Internal Character Encoding::
177
178 The Lisp Reader and Compiler
179
180 Lstreams
181
182 Consoles; Devices; Frames; Windows
183
184 * Introduction to Consoles; Devices; Frames; Windows::
185 * Point::
186 * Window Hierarchy::
187
188 The Redisplay Mechanism
189
190 * Critical Redisplay Sections::
191 * Line Start Cache::
192
193 Extents
194
195 * Introduction to Extents::     Extents are ranges over text, with properties.
196 * Extent Ordering::             How extents are ordered internally.
197 * Format of the Extent Info::   The extent information in a buffer or string.
198 * Zero-Length Extents::         A weird special case.
199 * Mathematics of Extent Ordering::      A rigorous foundation.
200 * Extent Fragments::            Cached information useful for redisplay.
201
202 Faces
203
204 Glyphs
205
206 Specifiers
207
208 Menus
209
210 Subprocesses
211
212 Interface to X Windows
213
214 \1f
215 File: internals.info,  Node: A History of Emacs,  Next: XEmacs From the Outside,  Prev: Top,  Up: Top
216
217 A History of Emacs
218 ******************
219
220    XEmacs is a powerful, customizable text editor and development
221 environment.  It began as Lucid Emacs, which was in turn derived from
222 GNU Emacs, a program written by Richard Stallman of the Free Software
223 Foundation.  GNU Emacs dates back to the 1970's, and was modelled after
224 a package called "Emacs", written in 1976, that was a set of macros on
225 top of TECO, an old, old text editor written at MIT on the DEC PDP 10
226 under one of the earliest time-sharing operating systems, ITS
227 (Incompatible Timesharing System). (ITS dates back well before Unix.)
228 ITS, TECO, and Emacs were products of a group of people at MIT who
229 called themselves "hackers", who shared an idealistic belief system
230 about the free exchange of information and were fanatical in their
231 devotion to and time spent with computers. (The hacker subculture dates
232 back to the late 1950's at MIT and is described in detail in Steven
233 Levy's book `Hackers'.  This book also includes a lot of information
234 about Stallman himself and the development of Lisp, a programming
235 language developed at MIT that underlies Emacs.)
236
237 * Menu:
238
239 * Through Version 18::          Unification prevails.
240 * Lucid Emacs::                 One version 19 Emacs.
241 * GNU Emacs 19::                The other version 19 Emacs.
242 * GNU Emacs 20::                The other version 20 Emacs.
243 * XEmacs::                      The continuation of Lucid Emacs.
244
245 \1f
246 File: internals.info,  Node: Through Version 18,  Next: Lucid Emacs,  Up: A History of Emacs
247
248 Through Version 18
249 ==================
250
251    Although the history of the early versions of GNU Emacs is unclear,
252 the history is well-known from the middle of 1985.  A time line is:
253
254    * GNU Emacs version 15 (15.34) was released sometime in 1984 or 1985
255      and shared some code with a version of Emacs written by James
256      Gosling (the same James Gosling who later created the Java
257      language).
258
259    * GNU Emacs version 16 (first released version was 16.56) was
260      released on July 15, 1985.  All Gosling code was removed due to
261      potential copyright problems with the code.
262
263    * version 16.57: released on September 16, 1985.
264
265    * versions 16.58, 16.59: released on September 17, 1985.
266
267    * version 16.60: released on September 19, 1985.  These later
268      version 16's incorporated patches from the net, esp. for getting
269      Emacs to work under System V.
270
271    * version 17.36 (first official v17 release) released on December 20,
272      1985.  Included a TeX-able user manual.  First official unpatched
273      version that worked on vanilla System V machines.
274
275    * version 17.43 (second official v17 release) released on January 25,
276      1986.
277
278    * version 17.45 released on January 30, 1986.
279
280    * version 17.46 released on February 4, 1986.
281
282    * version 17.48 released on February 10, 1986.
283
284    * version 17.49 released on February 12, 1986.
285
286    * version 17.55 released on March 18, 1986.
287
288    * version 17.57 released on March 27, 1986.
289
290    * version 17.58 released on April 4, 1986.
291
292    * version 17.61 released on April 12, 1986.
293
294    * version 17.63 released on May 7, 1986.
295
296    * version 17.64 released on May 12, 1986.
297
298    * version 18.24 (a beta version) released on October 2, 1986.
299
300    * version 18.30 (a beta version) released on November 15, 1986.
301
302    * version 18.31 (a beta version) released on November 23, 1986.
303
304    * version 18.32 (a beta version) released on December 7, 1986.
305
306    * version 18.33 (a beta version) released on December 12, 1986.
307
308    * version 18.35 (a beta version) released on January 5, 1987.
309
310    * version 18.36 (a beta version) released on January 21, 1987.
311
312    * January 27, 1987: The Great Usenet Renaming.  net.emacs is now
313      comp.emacs.
314
315    * version 18.37 (a beta version) released on February 12, 1987.
316
317    * version 18.38 (a beta version) released on March 3, 1987.
318
319    * version 18.39 (a beta version) released on March 14, 1987.
320
321    * version 18.40 (a beta version) released on March 18, 1987.
322
323    * version 18.41 (the first "official" release) released on March 22,
324      1987.
325
326    * version 18.45 released on June 2, 1987.
327
328    * version 18.46 released on June 9, 1987.
329
330    * version 18.47 released on June 18, 1987.
331
332    * version 18.48 released on September 3, 1987.
333
334    * version 18.49 released on September 18, 1987.
335
336    * version 18.50 released on February 13, 1988.
337
338    * version 18.51 released on May 7, 1988.
339
340    * version 18.52 released on September 1, 1988.
341
342    * version 18.53 released on February 24, 1989.
343
344    * version 18.54 released on April 26, 1989.
345
346    * version 18.55 released on August 23, 1989.  This is the earliest
347      version that is still available by FTP.
348
349    * version 18.56 released on January 17, 1991.
350
351    * version 18.57 released late January, 1991.
352
353    * version 18.58 released ?????.
354
355    * version 18.59 released October 31, 1992.
356
357 \1f
358 File: internals.info,  Node: Lucid Emacs,  Next: GNU Emacs 19,  Prev: Through Version 18,  Up: A History of Emacs
359
360 Lucid Emacs
361 ===========
362
363    Lucid Emacs was developed by the (now-defunct) Lucid Inc., a maker of
364 C++ and Lisp development environments.  It began when Lucid decided they
365 wanted to use Emacs as the editor and cornerstone of their C++
366 development environment (called "Energize").  They needed many features
367 that were not available in the existing version of GNU Emacs (version
368 18.5something), in particular good and integrated support for GUI
369 elements such as mouse support, multiple fonts, multiple window-system
370 windows, etc.  A branch of GNU Emacs called Epoch, written at the
371 University of Illinois, existed that supplied many of these features;
372 however, Lucid needed more than what existed in Epoch.  At the time, the
373 Free Software Foundation was working on version 19 of Emacs (this was
374 sometime around 1991), which was planned to have similar features, and
375 so Lucid decided to work with the Free Software Foundation.  Their plan
376 was to add features that they needed, and coordinate with the FSF so
377 that the features would get included back into Emacs version 19.
378
379    Delays in the release of version 19 occurred, however (resulting in
380 it finally being released more than a year after what was initially
381 planned), and Lucid encountered unexpected technical resistance in
382 getting their changes merged back into version 19, so they decided to
383 release their own version of Emacs, which became Lucid Emacs 19.0.
384
385    The initial authors of Lucid Emacs were Matthieu Devin, Harlan
386 Sexton, and Eric Benson, and the work was later taken over by Jamie
387 Zawinski, who became "Mr. Lucid Emacs" for many releases.
388
389    A time line for Lucid Emacs/XEmacs is
390
391    * version 19.0 shipped with Energize 1.0, April 1992.
392
393    * version 19.1 released June 4, 1992.
394
395    * version 19.2 released June 19, 1992.
396
397    * version 19.3 released September 9, 1992.
398
399    * version 19.4 released January 21, 1993.
400
401    * version 19.5 was a repackaging of 19.4 with a few bug fixes and
402      shipped with Energize 2.0.  Never released to the net.
403
404    * version 19.6 released April 9, 1993.
405
406    * version 19.7 was a repackaging of 19.6 with a few bug fixes and
407      shipped with Energize 2.1.  Never released to the net.
408
409    * version 19.8 released September 6, 1993.
410
411    * version 19.9 released January 12, 1994.
412
413    * version 19.10 released May 27, 1994.
414
415    * version 19.11 (first XEmacs) released September 13, 1994.
416
417    * version 19.12 released June 23, 1995.
418
419    * version 19.13 released September 1, 1995.
420
421    * version 19.14 released June 23, 1996.
422
423    * version 20.0 released February 9, 1997.
424
425    * version 19.15 released March 28, 1997.
426
427    * version 20.1 (not released to the net) April 15, 1997.
428
429    * version 20.2 released May 16, 1997.
430
431    * version 19.16 released October 31, 1997.
432
433    * version 20.3 (the first stable version of XEmacs 20.x) released
434      November 30, 1997.  version 20.4 released February 28, 1998.
435
436 \1f
437 File: internals.info,  Node: GNU Emacs 19,  Next: GNU Emacs 20,  Prev: Lucid Emacs,  Up: A History of Emacs
438
439 GNU Emacs 19
440 ============
441
442    About a year after the initial release of Lucid Emacs, the FSF
443 released a beta of their version of Emacs 19 (referred to here as "GNU
444 Emacs").  By this time, the current version of Lucid Emacs was 19.6.
445 (Strangely, the first released beta from the FSF was GNU Emacs 19.7.) A
446 time line for GNU Emacs version 19 is
447
448    * version 19.8 (beta) released May 27, 1993.
449
450    * version 19.9 (beta) released May 27, 1993.
451
452    * version 19.10 (beta) released May 30, 1993.
453
454    * version 19.11 (beta) released June 1, 1993.
455
456    * version 19.12 (beta) released June 2, 1993.
457
458    * version 19.13 (beta) released June 8, 1993.
459
460    * version 19.14 (beta) released June 17, 1993.
461
462    * version 19.15 (beta) released June 19, 1993.
463
464    * version 19.16 (beta) released July 6, 1993.
465
466    * version 19.17 (beta) released late July, 1993.
467
468    * version 19.18 (beta) released August 9, 1993.
469
470    * version 19.19 (beta) released August 15, 1993.
471
472    * version 19.20 (beta) released November 17, 1993.
473
474    * version 19.21 (beta) released November 17, 1993.
475
476    * version 19.22 (beta) released November 28, 1993.
477
478    * version 19.23 (beta) released May 17, 1994.
479
480    * version 19.24 (beta) released May 16, 1994.
481
482    * version 19.25 (beta) released June 3, 1994.
483
484    * version 19.26 (beta) released September 11, 1994.
485
486    * version 19.27 (beta) released September 14, 1994.
487
488    * version 19.28 (first "official" release) released November 1, 1994.
489
490    * version 19.29 released June 21, 1995.
491
492    * version 19.30 released November 24, 1995.
493
494    * version 19.31 released May 25, 1996.
495
496    * version 19.32 released July 31, 1996.
497
498    * version 19.33 released August 11, 1996.
499
500    * version 19.34 released August 21, 1996.
501
502    * version 19.34b released September 6, 1996.
503
504    In some ways, GNU Emacs 19 was better than Lucid Emacs; in some ways,
505 worse.  Lucid soon began incorporating features from GNU Emacs 19 into
506 Lucid Emacs; the work was mostly done by Richard Mlynarik, who had been
507 working on and using GNU Emacs for a long time (back as far as version
508 16 or 17).
509
510 \1f
511 File: internals.info,  Node: GNU Emacs 20,  Next: XEmacs,  Prev: GNU Emacs 19,  Up: A History of Emacs
512
513 GNU Emacs 20
514 ============
515
516    On February 2, 1997 work began on GNU Emacs to integrate Mule.  The
517 first release was made in September of that year.
518
519    A timeline for Emacs 20 is
520
521    * version 20.1 released September 17, 1997.
522
523    * version 20.2 released September 20, 1997.
524
525    * version 20.3 released August 19, 1998.
526
527 \1f
528 File: internals.info,  Node: XEmacs,  Prev: GNU Emacs 20,  Up: A History of Emacs
529
530 XEmacs
531 ======
532
533    Around the time that Lucid was developing Energize, Sun Microsystems
534 was developing their own development environment (called "SPARCWorks")
535 and also decided to use Emacs.  They joined forces with the Epoch team
536 at the University of Illinois and later with Lucid.  The maintainer of
537 the last-released version of Epoch was Marc Andreessen, but he dropped
538 out and the Epoch project, headed by Simon Kaplan, lured Chuck Thompson
539 away from a system administration job to become the primary Lucid Emacs
540 author for Epoch and Sun.  Chuck's area of specialty became the
541 redisplay engine (he replaced the old Lucid Emacs redisplay engine with
542 a ported version from Epoch and then later rewrote it from scratch).
543 Sun also hired Ben Wing (the author of Win-Emacs, a port of Lucid Emacs
544 to Microsoft Windows 3.1) in 1993, for what was initially a one-month
545 contract to fix some event problems but later became a many-year
546 involvement, punctuated by a six-month contract with Amdahl Corporation.
547
548    In 1994, Sun and Lucid agreed to rename Lucid Emacs to XEmacs (a name
549 not favorable to either company); the first release called XEmacs was
550 version 19.11.  In June 1994, Lucid folded and Jamie quit to work for
551 the newly formed Mosaic Communications Corp., later Netscape
552 Communications Corp. (co-founded by the same Marc Andreessen, who had
553 quit his Epoch job to work on a graphical browser for the World Wide
554 Web).  Chuck then become the primary maintainer of XEmacs, and put out
555 versions 19.11 through 19.14 in conjunction with Ben.  For 19.12 and
556 19.13, Chuck added the new redisplay and many other display improvements
557 and Ben added MULE support (support for Asian and other languages) and
558 redesigned most of the internal Lisp subsystems to better support the
559 MULE work and the various other features being added to XEmacs.  After
560 19.14 Chuck retired as primary maintainer and Steve Baur stepped in.
561
562    Soon after 19.13 was released, work began in earnest on the MULE
563 internationalization code and the source tree was divided into two
564 development paths.  The MULE version was initially called 19.20, but was
565 soon renamed to 20.0.  In 1996 Martin Buchholz of Sun Microsystems took
566 over the care and feeding of it and worked on it in parallel with the
567 19.14 development that was occurring at the same time.  After much work
568 by Martin, it was decided to release 20.0 ahead of 19.15 in February
569 1997.  The source tree remained divided until 20.2 when the version 19
570 source was finally retired at version 19.16.
571
572    In 1997, Sun finally dropped all pretense of support for XEmacs and
573 Martin Buchholz left the company in November.  Since then, and mostly
574 for the previous year, because Steve Baur was never paid to work on
575 XEmacs, XEmacs has existed solely on the contributions of volunteers
576 from the Free Software Community.  Starting from 1997, Hrvoje Niksic and
577 Kyle Jones have figured prominently in XEmacs development.
578
579    Many attempts have been made to merge XEmacs and GNU Emacs, but they
580 have consistently failed.
581
582    A more detailed history is contained in the XEmacs About page.
583
584 \1f
585 File: internals.info,  Node: XEmacs From the Outside,  Next: The Lisp Language,  Prev: A History of Emacs,  Up: Top
586
587 XEmacs From the Outside
588 ***********************
589
590    XEmacs appears to the outside world as an editor, but it is really a
591 Lisp environment.  At its heart is a Lisp interpreter; it also
592 "happens" to contain many specialized object types (e.g. buffers,
593 windows, frames, events) that are useful for implementing an editor.
594 Some of these objects (in particular windows and frames) have
595 displayable representations, and XEmacs provides a function
596 `redisplay()' that ensures that the display of all such objects matches
597 their internal state.  Most of the time, a standard Lisp environment is
598 in a "read-eval-print" loop--i.e. "read some Lisp code, execute it, and
599 print the results".  XEmacs has a similar loop:
600
601    * read an event
602
603    * dispatch the event (i.e. "do it")
604
605    * redisplay
606
607    Reading an event is done using the Lisp function `next-event', which
608 waits for something to happen (typically, the user presses a key or
609 moves the mouse) and returns an event object describing this.
610 Dispatching an event is done using the Lisp function `dispatch-event',
611 which looks up the event in a keymap object (a particular kind of
612 object that associates an event with a Lisp function) and calls that
613 function.  The function "does" what the user has requested by changing
614 the state of particular frame objects, buffer objects, etc.  Finally,
615 `redisplay()' is called, which updates the display to reflect those
616 changes just made.  Thus is an "editor" born.
617
618    Note that you do not have to use XEmacs as an editor; you could just
619 as well make it do your taxes, compute pi, play bridge, etc.  You'd just
620 have to write functions to do those operations in Lisp.
621
622 \1f
623 File: internals.info,  Node: The Lisp Language,  Next: XEmacs From the Perspective of Building,  Prev: XEmacs From the Outside,  Up: Top
624
625 The Lisp Language
626 *****************
627
628    Lisp is a general-purpose language that is higher-level than C and in
629 many ways more powerful than C.  Powerful dialects of Lisp such as
630 Common Lisp are probably much better languages for writing very large
631 applications than is C. (Unfortunately, for many non-technical reasons
632 C and its successor C++ have become the dominant languages for
633 application development.  These languages are both inadequate for
634 extremely large applications, which is evidenced by the fact that newer,
635 larger programs are becoming ever harder to write and are requiring ever
636 more programmers despite great increases in C development environments;
637 and by the fact that, although hardware speeds and reliability have been
638 growing at an exponential rate, most software is still generally
639 considered to be slow and buggy.)
640
641    The new Java language holds promise as a better general-purpose
642 development language than C.  Java has many features in common with
643 Lisp that are not shared by C (this is not a coincidence, since Java
644 was designed by James Gosling, a former Lisp hacker).  This will be
645 discussed more later.
646
647    For those used to C, here is a summary of the basic differences
648 between C and Lisp:
649
650   1. Lisp has an extremely regular syntax.  Every function, expression,
651      and control statement is written in the form
652
653              (FUNC ARG1 ARG2 ...)
654
655      This is as opposed to C, which writes functions as
656
657              func(ARG1, ARG2, ...)
658
659      but writes expressions involving operators as (e.g.)
660
661              ARG1 + ARG2
662
663      and writes control statements as (e.g.)
664
665              while (EXPR) { STATEMENT1; STATEMENT2; ... }
666
667      Lisp equivalents of the latter two would be
668
669              (+ ARG1 ARG2 ...)
670
671      and
672
673              (while EXPR STATEMENT1 STATEMENT2 ...)
674
675   2. Lisp is a safe language.  Assuming there are no bugs in the Lisp
676      interpreter/compiler, it is impossible to write a program that
677      "core dumps" or otherwise causes the machine to execute an illegal
678      instruction.  This is very different from C, where perhaps the most
679      common outcome of a bug is exactly such a crash.  A corollary of
680      this is that the C operation of casting a pointer is impossible
681      (and unnecessary) in Lisp, and that it is impossible to access
682      memory outside the bounds of an array.
683
684   3. Programs and data are written in the same form.  The
685      parenthesis-enclosing form described above for statements is the
686      same form used for the most common data type in Lisp, the list.
687      Thus, it is possible to represent any Lisp program using Lisp data
688      types, and for one program to construct Lisp statements and then
689      dynamically "evaluate" them, or cause them to execute.
690
691   4. All objects are "dynamically typed".  This means that part of every
692      object is an indication of what type it is.  A Lisp program can
693      manipulate an object without knowing what type it is, and can
694      query an object to determine its type.  This means that,
695      correspondingly, variables and function parameters can hold
696      objects of any type and are not normally declared as being of any
697      particular type.  This is opposed to the "static typing" of C,
698      where variables can hold exactly one type of object and must be
699      declared as such, and objects do not contain an indication of
700      their type because it's implicit in the variables they are stored
701      in.  It is possible in C to have a variable hold different types
702      of objects (e.g. through the use of `void *' pointers or
703      variable-argument functions), but the type information must then be
704      passed explicitly in some other fashion, leading to additional
705      program complexity.
706
707   5. Allocated memory is automatically reclaimed when it is no longer
708      in use.  This operation is called "garbage collection" and
709      involves looking through all variables to see what memory is being
710      pointed to, and reclaiming any memory that is not pointed to and
711      is thus "inaccessible" and out of use.  This is as opposed to C,
712      in which allocated memory must be explicitly reclaimed using
713      `free()'.  If you simply drop all pointers to memory without
714      freeing it, it becomes "leaked" memory that still takes up space.
715      Over a long period of time, this can cause your program to grow
716      and grow until it runs out of memory.
717
718   6. Lisp has built-in facilities for handling errors and exceptions.
719      In C, when an error occurs, usually either the program exits
720      entirely or the routine in which the error occurs returns a value
721      indicating this.  If an error occurs in a deeply-nested routine,
722      then every routine currently called must unwind itself normally
723      and return an error value back up to the next routine.  This means
724      that every routine must explicitly check for an error in all the
725      routines it calls; if it does not do so, unexpected and often
726      random behavior results.  This is an extremely common source of
727      bugs in C programs.  An alternative would be to do a non-local
728      exit using `longjmp()', but that is often very dangerous because
729      the routines that were exited past had no opportunity to clean up
730      after themselves and may leave things in an inconsistent state,
731      causing a crash shortly afterwards.
732
733      Lisp provides mechanisms to make such non-local exits safe.  When
734      an error occurs, a routine simply signals that an error of a
735      particular class has occurred, and a non-local exit takes place.
736      Any routine can trap errors occurring in routines it calls by
737      registering an error handler for some or all classes of errors.
738      (If no handler is registered, a default handler, generally
739      installed by the top-level event loop, is executed; this prints
740      out the error and continues.) Routines can also specify cleanup
741      code (called an "unwind-protect") that will be called when control
742      exits from a block of code, no matter how that exit occurs--i.e.
743      even if a function deeply nested below it causes a non-local exit
744      back to the top level.
745
746      Note that this facility has appeared in some recent vintages of C,
747      in particular Visual C++ and other PC compilers written for the
748      Microsoft Win32 API.
749
750   7. In Emacs Lisp, local variables are "dynamically scoped".  This
751      means that if you declare a local variable in a particular
752      function, and then call another function, that subfunction can
753      "see" the local variable you declared.  This is actually
754      considered a bug in Emacs Lisp and in all other early dialects of
755      Lisp, and was corrected in Common Lisp. (In Common Lisp, you can
756      still declare dynamically scoped variables if you want to--they
757      are sometimes useful--but variables by default are "lexically
758      scoped" as in C.)
759
760    For those familiar with Lisp, Emacs Lisp is modelled after MacLisp,
761 an early dialect of Lisp developed at MIT (no relation to the Macintosh
762 computer).  There is a Common Lisp compatibility package available for
763 Emacs that provides many of the features of Common Lisp.
764
765    The Java language is derived in many ways from C, and shares a
766 similar syntax, but has the following features in common with Lisp (and
767 different from C):
768
769   1. Java is a safe language, like Lisp.
770
771   2. Java provides garbage collection, like Lisp.
772
773   3. Java has built-in facilities for handling errors and exceptions,
774      like Lisp.
775
776   4. Java has a type system that combines the best advantages of both
777      static and dynamic typing.  Objects (except very simple types) are
778      explicitly marked with their type, as in dynamic typing; but there
779      is a hierarchy of types and functions are declared to accept only
780      certain types, thus providing the increased compile-time
781      error-checking of static typing.
782
783    The Java language also has some negative attributes:
784
785   1. Java uses the edit/compile/run model of software development.  This
786      makes it hard to use interactively.  For example, to use Java like
787      `bc' it is necessary to write a special purpose, albeit tiny,
788      application.  In Emacs Lisp, a calculator comes built-in without
789      any effort - one can always just type an expression in the
790      `*scratch*' buffer.
791
792   2. Java tries too hard to enforce, not merely enable, portability,
793      making ordinary access to standard OS facilities painful.  Java
794      has an "agenda".  I think this is why `chdir' is not part of
795      standard Java, which is inexcusable.
796
797    Unfortunately, there is no perfect language.  Static typing allows a
798 compiler to catch programmer errors and produce more efficient code, but
799 makes programming more tedious and less fun.  For the forseeable future,
800 an Ideal Editing and Programming Environment (and that is what XEmacs
801 aspires to) will be programmable in multiple languages: high level ones
802 like Lisp for user customization and prototyping, and lower level ones
803 for infrastructure and industrial strength applications.  If I had my
804 way, XEmacs would be friendly towards the Python, Scheme, C++, ML,
805 etc... communities.  But there are serious technical difficulties to
806 achieving that goal.
807
808    The word "application" in the previous paragraph was used
809 intentionally.  XEmacs implements an API for programs written in Lisp
810 that makes it a full-fledged application platform, very much like an OS
811 inside the real OS.
812
813 \1f
814 File: internals.info,  Node: XEmacs From the Perspective of Building,  Next: XEmacs From the Inside,  Prev: The Lisp Language,  Up: Top
815
816 XEmacs From the Perspective of Building
817 ***************************************
818
819    The heart of XEmacs is the Lisp environment, which is written in C.
820 This is contained in the `src/' subdirectory.  Underneath `src/' are
821 two subdirectories of header files: `s/' (header files for particular
822 operating systems) and `m/' (header files for particular machine
823 types).  In practice the distinction between the two types of header
824 files is blurred.  These header files define or undefine certain
825 preprocessor constants and macros to indicate particular
826 characteristics of the associated machine or operating system.  As part
827 of the configure process, one `s/' file and one `m/' file is identified
828 for the particular environment in which XEmacs is being built.
829
830    XEmacs also contains a great deal of Lisp code.  This implements the
831 operations that make XEmacs useful as an editor as well as just a Lisp
832 environment, and also contains many add-on packages that allow XEmacs to
833 browse directories, act as a mail and Usenet news reader, compile Lisp
834 code, etc.  There is actually more Lisp code than C code associated with
835 XEmacs, but much of the Lisp code is peripheral to the actual operation
836 of the editor.  The Lisp code all lies in subdirectories underneath the
837 `lisp/' directory.
838
839    The `lwlib/' directory contains C code that implements a generalized
840 interface onto different X widget toolkits and also implements some
841 widgets of its own that behave like Motif widgets but are faster, free,
842 and in some cases more powerful.  The code in this directory compiles
843 into a library and is mostly independent from XEmacs.
844
845    The `etc/' directory contains various data files associated with
846 XEmacs.  Some of them are actually read by XEmacs at startup; others
847 merely contain useful information of various sorts.
848
849    The `lib-src/' directory contains C code for various auxiliary
850 programs that are used in connection with XEmacs.  Some of them are used
851 during the build process; others are used to perform certain functions
852 that cannot conveniently be placed in the XEmacs executable (e.g. the
853 `movemail' program for fetching mail out of `/var/spool/mail', which
854 must be setgid to `mail' on many systems; and the `gnuclient' program,
855 which allows an external script to communicate with a running XEmacs
856 process).
857
858    The `man/' directory contains the sources for the XEmacs
859 documentation.  It is mostly in a form called Texinfo, which can be
860 converted into either a printed document (by passing it through TeX) or
861 into on-line documentation called "info files".
862
863    The `info/' directory contains the results of formatting the XEmacs
864 documentation as "info files", for on-line use.  These files are used
865 when you enter the Info system using `C-h i' or through the Help menu.
866
867    The `dynodump/' directory contains auxiliary code used to build
868 XEmacs on Solaris platforms.
869
870    The other directories contain various miscellaneous code and
871 information that is not normally used or needed.
872
873    The first step of building involves running the `configure' program
874 and passing it various parameters to specify any optional features you
875 want and compiler arguments and such, as described in the `INSTALL'
876 file.  This determines what the build environment is, chooses the
877 appropriate `s/' and `m/' file, and runs a series of tests to determine
878 many details about your environment, such as which library functions
879 are available and exactly how they work.  The reason for running these
880 tests is that it allows XEmacs to be compiled on a much wider variety
881 of platforms than those that the XEmacs developers happen to be
882 familiar with, including various sorts of hybrid platforms.  This is
883 especially important now that many operating systems give you a great
884 deal of control over exactly what features you want installed, and allow
885 for easy upgrading of parts of a system without upgrading the rest.  It
886 would be impossible to pre-determine and pre-specify the information for
887 all possible configurations.
888
889    In fact, the `s/' and `m/' files are basically _evil_, since they
890 contain unmaintainable platform-specific hard-coded information.
891 XEmacs has been moving in the direction of having all system-specific
892 information be determined dynamically by `configure'.  Perhaps someday
893 we can `rm -rf src/s src/m'.
894
895    When configure is done running, it generates `Makefile's and
896 `GNUmakefile's and the file `src/config.h' (which describes the
897 features of your system) from template files.  You then run `make',
898 which compiles the auxiliary code and programs in `lib-src/' and
899 `lwlib/' and the main XEmacs executable in `src/'.  The result of
900 compiling and linking is an executable called `temacs', which is _not_
901 the final XEmacs executable.  `temacs' by itself is not intended to
902 function as an editor or even display any windows on the screen, and if
903 you simply run it, it will exit immediately.  The `Makefile' runs
904 `temacs' with certain options that cause it to initialize itself, read
905 in a number of basic Lisp files, and then dump itself out into a new
906 executable called `xemacs'.  This new executable has been
907 pre-initialized and contains pre-digested Lisp code that is necessary
908 for the editor to function (this includes most basic editing functions,
909 e.g. `kill-line', that can be defined in terms of other Lisp
910 primitives; some initialization code that is called when certain
911 objects, such as frames, are created; and all of the standard
912 keybindings and code for the actions they result in).  This executable,
913 `xemacs', is the executable that you run to use the XEmacs editor.
914
915    Although `temacs' is not intended to be run as an editor, it can, by
916 using the incantation `temacs -batch -l loadup.el run-temacs'.  This is
917 useful when the dumping procedure described above is broken, or when
918 using certain program debugging tools such as Purify.  These tools get
919 mighty confused by the tricks played by the XEmacs build process, such
920 as allocation memory in one process, and freeing it in the next.
921
922 \1f
923 File: internals.info,  Node: XEmacs From the Inside,  Next: The XEmacs Object System (Abstractly Speaking),  Prev: XEmacs From the Perspective of Building,  Up: Top
924
925 XEmacs From the Inside
926 **********************
927
928    Internally, XEmacs is quite complex, and can be very confusing.  To
929 simplify things, it can be useful to think of XEmacs as containing an
930 event loop that "drives" everything, and a number of other subsystems,
931 such as a Lisp engine and a redisplay mechanism.  Each of these other
932 subsystems exists simultaneously in XEmacs, and each has a certain
933 state.  The flow of control continually passes in and out of these
934 different subsystems in the course of normal operation of the editor.
935
936    It is important to keep in mind that, most of the time, the editor is
937 "driven" by the event loop.  Except during initialization and batch
938 mode, all subsystems are entered directly or indirectly through the
939 event loop, and ultimately, control exits out of all subsystems back up
940 to the event loop.  This cycle of entering a subsystem, exiting back out
941 to the event loop, and starting another iteration of the event loop
942 occurs once each keystroke, mouse motion, etc.
943
944    If you're trying to understand a particular subsystem (other than the
945 event loop), think of it as a "daemon" process or "servant" that is
946 responsible for one particular aspect of a larger system, and
947 periodically receives commands or environment changes that cause it to
948 do something.  Ultimately, these commands and environment changes are
949 always triggered by the event loop.  For example:
950
951    * The window and frame mechanism is responsible for keeping track of
952      what windows and frames exist, what buffers are in them, etc.  It
953      is periodically given commands (usually from the user) to make a
954      change to the current window/frame state: i.e. create a new frame,
955      delete a window, etc.
956
957    * The buffer mechanism is responsible for keeping track of what
958      buffers exist and what text is in them.  It is periodically given
959      commands (usually from the user) to insert or delete text, create
960      a buffer, etc.  When it receives a text-change command, it
961      notifies the redisplay mechanism.
962
963    * The redisplay mechanism is responsible for making sure that
964      windows and frames are displayed correctly.  It is periodically
965      told (by the event loop) to actually "do its job", i.e. snoop
966      around and see what the current state of the environment (mostly
967      of the currently-existing windows, frames, and buffers) is, and
968      make sure that that state matches what's actually displayed.  It
969      keeps lots and lots of information around (such as what is
970      actually being displayed currently, and what the environment was
971      last time it checked) so that it can minimize the work it has to
972      do.  It is also helped along in that whenever a relevant change to
973      the environment occurs, the redisplay mechanism is told about
974      this, so it has a pretty good idea of where it has to look to find
975      possible changes and doesn't have to look everywhere.
976
977    * The Lisp engine is responsible for executing the Lisp code in
978      which most user commands are written.  It is entered through a
979      call to `eval' or `funcall', which occurs as a result of
980      dispatching an event from the event loop.  The functions it calls
981      issue commands to the buffer mechanism, the window/frame
982      subsystem, etc.
983
984    * The Lisp allocation subsystem is responsible for keeping track of
985      Lisp objects.  It is given commands from the Lisp engine to
986      allocate objects, garbage collect, etc.
987
988    etc.
989
990    The important idea here is that there are a number of independent
991 subsystems each with its own responsibility and persistent state, just
992 like different employees in a company, and each subsystem is
993 periodically given commands from other subsystems.  Commands can flow
994 from any one subsystem to any other, but there is usually some sort of
995 hierarchy, with all commands originating from the event subsystem.
996
997    XEmacs is entered in `main()', which is in `emacs.c'.  When this is
998 called the first time (in a properly-invoked `temacs'), it does the
999 following:
1000
1001   1. It does some very basic environment initializations, such as
1002      determining where it and its directories (e.g. `lisp/' and `etc/')
1003      reside and setting up signal handlers.
1004
1005   2. It initializes the entire Lisp interpreter.
1006
1007   3. It sets the initial values of many built-in variables (including
1008      many variables that are visible to Lisp programs), such as the
1009      global keymap object and the built-in faces (a face is an object
1010      that describes the display characteristics of text).  This
1011      involves creating Lisp objects and thus is dependent on step (2).
1012
1013   4. It performs various other initializations that are relevant to the
1014      particular environment it is running in, such as retrieving
1015      environment variables, determining the current date and the user
1016      who is running the program, examining its standard input, creating
1017      any necessary file descriptors, etc.
1018
1019   5. At this point, the C initialization is complete.  A Lisp program
1020      that was specified on the command line (usually `loadup.el') is
1021      called (temacs is normally invoked as `temacs -batch -l loadup.el
1022      dump').  `loadup.el' loads all of the other Lisp files that are
1023      needed for the operation of the editor, calls the `dump-emacs'
1024      function to write out `xemacs', and then kills the temacs process.
1025
1026    When `xemacs' is then run, it only redoes steps (1) and (4) above;
1027 all variables already contain the values they were set to when the
1028 executable was dumped, and all memory that was allocated with
1029 `malloc()' is still around. (XEmacs knows whether it is being run as
1030 `xemacs' or `temacs' because it sets the global variable `initialized'
1031 to 1 after step (4) above.) At this point, `xemacs' calls a Lisp
1032 function to do any further initialization, which includes parsing the
1033 command-line (the C code can only do limited command-line parsing,
1034 which includes looking for the `-batch' and `-l' flags and a few other
1035 flags that it needs to know about before initialization is complete),
1036 creating the first frame (or "window" in standard window-system
1037 parlance), running the user's init file (usually the file `.emacs' in
1038 the user's home directory), etc.  The function to do this is usually
1039 called `normal-top-level'; `loadup.el' tells the C code about this
1040 function by setting its name as the value of the Lisp variable
1041 `top-level'.
1042
1043    When the Lisp initialization code is done, the C code enters the
1044 event loop, and stays there for the duration of the XEmacs process.
1045 The code for the event loop is contained in `keyboard.c', and is called
1046 `Fcommand_loop_1()'.  Note that this event loop could very well be
1047 written in Lisp, and in fact a Lisp version exists; but apparently,
1048 doing this makes XEmacs run noticeably slower.
1049
1050    Notice how much of the initialization is done in Lisp, not in C.  In
1051 general, XEmacs tries to move as much code as is possible into Lisp.
1052 Code that remains in C is code that implements the Lisp interpreter
1053 itself, or code that needs to be very fast, or code that needs to do
1054 system calls or other such stuff that needs to be done in C, or code
1055 that needs to have access to "forbidden" structures. (One conscious
1056 aspect of the design of Lisp under XEmacs is a clean separation between
1057 the external interface to a Lisp object's functionality and its internal
1058 implementation.  Part of this design is that Lisp programs are
1059 forbidden from accessing the contents of the object other than through
1060 using a standard API.  In this respect, XEmacs Lisp is similar to
1061 modern Lisp dialects but differs from GNU Emacs, which tends to expose
1062 the implementation and allow Lisp programs to look at it directly.  The
1063 major advantage of hiding the implementation is that it allows the
1064 implementation to be redesigned without affecting any Lisp programs,
1065 including those that might want to be "clever" by looking directly at
1066 the object's contents and possibly manipulating them.)
1067
1068    Moving code into Lisp makes the code easier to debug and maintain and
1069 makes it much easier for people who are not XEmacs developers to
1070 customize XEmacs, because they can make a change with much less chance
1071 of obscure and unwanted interactions occurring than if they were to
1072 change the C code.
1073