summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/en/rms-lisp.html
diff options
context:
space:
mode:
Diffstat (limited to 'talermerchantdemos/blog/articles/en/rms-lisp.html')
-rw-r--r--talermerchantdemos/blog/articles/en/rms-lisp.html144
1 files changed, 82 insertions, 62 deletions
diff --git a/talermerchantdemos/blog/articles/en/rms-lisp.html b/talermerchantdemos/blog/articles/en/rms-lisp.html
index a5f0dd1..ec94a91 100644
--- a/talermerchantdemos/blog/articles/en/rms-lisp.html
+++ b/talermerchantdemos/blog/articles/en/rms-lisp.html
@@ -1,13 +1,26 @@
<!--#include virtual="/server/header.html" -->
-<!-- Parent-Version: 1.77 -->
+<!-- Parent-Version: 1.96 -->
+<!-- This page is derived from /server/standards/boilerplate.html -->
+<!--#set var="TAGS" value="gnu-history" -->
+<!--#set var="DISABLE_TOP_ADDENDUM" value="yes" -->
<title>My Lisp Experiences and the Development of GNU Emacs
- GNU Project - Free Software Foundation</title>
+<style type="text/css" media="print,screen"><!--
+a[href*='#foot-'] { font-size: .94em; }
+--></style>
<!--#include virtual="/gnu/po/rms-lisp.translist" -->
<!--#include virtual="/server/banner.html" -->
+<!--#include virtual="/gnu/gnu-breadcrumb.html" -->
+<!--GNUN: OUT-OF-DATE NOTICE-->
+<!--#include virtual="/server/top-addendum.html" -->
+<div class="article reduced-width">
<h2>My Lisp Experiences and the Development of GNU Emacs</h2>
-<blockquote><p>(Transcript of Richard Stallman's Speech, 28 Oct 2002, at the
-International Lisp Conference).</p></blockquote>
+<div class="infobox">
+<p>Transcript of Richard Stallman's speech at the
+International Lisp Conference, 28 Oct 2002.</p>
+</div>
+<hr class="thin" />
<p>Since none of my usual speeches have anything to do with Lisp, none
of them were appropriate for today. So I'm going to have to wing it.
@@ -19,8 +32,8 @@ in high school. That's when I had my mind blown by the idea that there
could be a computer language like that. The first time I had a chance
to do anything with Lisp was when I was a freshman at Harvard and I
wrote a Lisp interpreter for the <abbr title="Programmed Data
-Processor">PDP</abbr>-11. It was a very small machine
-&mdash; it had something like 8k of memory &mdash; and I managed to write the
+Processor">PDP</abbr>-11. It was a very small machine&mdash;it
+had something like 8k of memory&mdash;and I managed to write the
interpreter in a thousand instructions. This gave me some room for a
little bit of data. That was before I got to see what real software
was like, that did real system jobs.</p>
@@ -29,7 +42,7 @@ was like, that did real system jobs.</p>
once I started working at <abbr title="Massachusetts Institute of
Technology">MIT</abbr>. I got hired at the Artificial Intelligence Lab
not by JonL, but by Russ Noftsker, which was most ironic considering
-what was to come &mdash; he must have really regretted that day.</p>
+what was to come&mdash;he must have really regretted that day.</p>
<p>During the 1970s, before my life became politicized by horrible
events, I was just going along making one extension after another for
@@ -57,25 +70,25 @@ nature of the way we lived at the AI Lab that led to Emacs and made it
what it was.</p>
<p>The original Emacs did not have Lisp in it. The lower level
-language, the non-interpreted language &mdash; was PDP-10
+language, the non-interpreted language&mdash;was PDP-10
Assembler. The interpreter we wrote in that actually wasn't written
for Emacs, it was written for <abbr title="Text Editor and
COrrector">TECO</abbr>. It was our text editor, and was an
extremely ugly programming language, as ugly as could possibly be. The
reason was that it wasn't designed to be a programming language, it
was designed to be an editor and command language. There were commands
-like &lsquo;5l&rsquo;, meaning &lsquo;move five lines&rsquo;, or
-&lsquo;i&rsquo; and then a string and then an ESC to insert that
+like <code>5l</code>, meaning <code>move five lines</code>, or
+<code>i</code> and then a string and then an ESC to insert that
string. You would type a string that was a series of commands, which
was called a command string. You would end it with ESC ESC, and it
would get executed.</p>
<p>Well, people wanted to extend this language with programming
facilities, so they added some. For instance, one of the first was a
-looping construct, which was &lt; &gt;. You would put those around
+looping construct, which was <code>&lt;&nbsp;&gt;</code>. You would put those around
things and it would loop. There were other cryptic commands that could
-be used to conditionally exit the loop. To make Emacs, we
-<a href="#foot-1">(1)</a> added facilities to have subroutines with
+be used to conditionally exit the loop. To make Emacs, we&#8239;<a
+href="#foot-1">[1]</a> added facilities to have subroutines with
names. Before that, it was sort of like Basic, and the subroutines
could only have single letters as their names. That was hard to
program big programs with, so we added code so they could have longer
@@ -84,7 +97,7 @@ think that Lisp got its unwind-protect facility
from TECO.</p>
<p>We started putting in rather sophisticated facilities, all with the
-ugliest syntax you could ever think of, and it worked &mdash; people were
+ugliest syntax you could ever think of, and it worked&mdash;people were
able to write large programs in it anyway. The obvious lesson was that
a language like TECO, which wasn't designed to be a
programming language, was the wrong way to go. The language that you
@@ -94,10 +107,10 @@ language. In fact, we discovered that the best programming language
for that purpose was Lisp.</p>
<p>It was Bernie Greenberg, who discovered that it
-was <a href="#foot-2">(2)</a>. He wrote a version of Emacs in Multics
+was&#8239;<a href="#foot-2">[2]</a>. He wrote a version of Emacs in Multics
MacLisp, and he wrote his commands in MacLisp in a straightforward
fashion. The editor itself was written entirely in Lisp. Multics Emacs
-proved to be a great success &mdash; programming new editing commands
+proved to be a great success&mdash;programming new editing commands
was so convenient that even the secretaries in his office started
learning how to use it. They used a manual someone had written which
showed how to extend Emacs, but didn't say it was a programming. So
@@ -105,22 +118,22 @@ the secretaries, who believed they couldn't do programming, weren't
scared off. They read the manual, discovered they could do useful
things and they learned to program.</p>
-<p>So Bernie saw that an application &mdash; a program that does something
-useful for you &mdash; which has Lisp inside it and which you could extend
+<p>So Bernie saw that an application&mdash;a program that does something
+useful for you&mdash;which has Lisp inside it and which you could extend
by rewriting the Lisp programs, is actually a very good way for people
to learn programming. It gives them a chance to write small programs
that are useful for them, which in most arenas you can't possibly
-do. They can get encouragement for their own practical use &mdash; at the
-stage where it's the hardest &mdash; where they don't believe they can
+do. They can get encouragement for their own practical use&mdash;at the
+stage where it's the hardest&mdash;where they don't believe they can
program, until they get to the point where they are programmers.</p>
<p>At that point, people began to wonder how they could get something
like this on a platform where they didn't have full service Lisp
implementation. Multics MacLisp had a compiler as well as an
-interpreter &mdash; it was a full-fledged Lisp system &mdash; but people wanted
+interpreter&mdash;it was a full-fledged Lisp system&mdash;but people wanted
to implement something like that on other systems where they had not
already written a Lisp compiler. Well, if you didn't have the Lisp
-compiler you couldn't write the whole editor in Lisp &mdash; it would be
+compiler you couldn't write the whole editor in Lisp&mdash;it would be
too slow, especially redisplay, if it had to run interpreted Lisp. So
we developed a hybrid technique. The idea was to write a Lisp
interpreter and the lower level parts of the editor together, so that
@@ -145,7 +158,7 @@ followed the same kind of design. The low level language was not
machine language anymore, it was C. C was a good, efficient language
for portable programs to run in a Unix-like operating system. There
was a Lisp interpreter, but I implemented facilities for special
-purpose editing jobs directly in C &mdash; manipulating editor buffers,
+purpose editing jobs directly in C&mdash;manipulating editor buffers,
inserting leading text, reading and writing files, redisplaying the
buffer on the screen, managing editor windows.</p>
@@ -154,7 +167,7 @@ Unix. The first was written by James Gosling, and was referred to as
GosMacs. A strange thing happened with him. In the beginning, he
seemed to be influenced by the same spirit of sharing and cooperation
of the original Emacs. I first released the original Emacs to people
-at MIT. Someone wanted to port it to run on Twenex &mdash; it
+at MIT. Someone wanted to port it to run on Twenex&mdash;it
originally only ran on the Incompatible Timesharing System we used
at MIT. They ported it to Twenex, which meant that there
were a few hundred installations around the world that could
@@ -166,7 +179,7 @@ know people did cooperate.</p>
<p>Gosling did, at first, seem to participate in this spirit. He wrote
in a manual that he called the program Emacs hoping that others in the
community would improve it until it was worthy of that name. That's
-the right approach to take towards a community &mdash; to ask them to join
+the right approach to take towards a community&mdash;to ask them to join
in and make the program better. But after that he seemed to change the
spirit, and sold it to a company.</p>
@@ -178,7 +191,7 @@ developing Gosling's Emacs. Gosling had given him, by email, permission
to distribute his own version. He proposed to me that I use that
version. Then I discovered that Gosling's Emacs did not have a real
Lisp. It had a programming language that was known as
-&lsquo;mocklisp&rsquo;, which looks syntactically like Lisp, but didn't
+&ldquo;mocklisp,&rdquo; which looks syntactically like Lisp, but didn't
have the data structures of Lisp. So programs were not data, and vital
elements of Lisp were missing. Its data structures were strings,
numbers and a few other specialized things.</p>
@@ -195,17 +208,17 @@ sort of an alternate world. The editor would enter the world of
redisplay and things would go on with very special data structures
that were not safe for garbage collection, not safe for interruption,
and you couldn't run any Lisp programs during that. We've changed that
-since &mdash; it's now possible to run Lisp code during redisplay. It's
+since&mdash;it's now possible to run Lisp code during redisplay. It's
quite a convenient thing.</p>
-<p>This second Emacs program was &lsquo;free software&rsquo; in the
-modern sense of the term &mdash; it was part of an explicit political
+<p>This second Emacs program was &ldquo;free software&rdquo; in the
+modern sense of the term&mdash;it was part of an explicit political
campaign to make software free. The essence of this campaign was that
everybody should be free to do the things we did in the old days
at MIT, working together on software and working with
whomever wanted to work with us. That is the basis for the free
-software movement &mdash; the experience I had, the life that I've lived at
-the MIT AI lab &mdash; to be working on human knowledge, and
+software movement&mdash;the experience I had, the life that I've lived at
+the MIT AI lab&mdash;to be working on human knowledge, and
not be standing in the way of anybody's further using and further
disseminating human knowledge.</p>
@@ -219,8 +232,8 @@ take <code>car</code> of a number, it got nonsensical results and eventually
crashed at some point.</p>
<p>The Lisp machine was able to execute instructions about as fast as
-those other machines, but each instruction &mdash; a <code>car</code> instruction would
-do data typechecking &mdash; so when you tried to get the <code>car</code> of a number
+those other machines, but each instruction&mdash;a <code>car</code> instruction would
+do data typechecking&mdash;so when you tried to get the <code>car</code> of a number
in a compiled program, it would give you an immediate error. We built
the machine and had a Lisp operating system for it. It was written
almost entirely in Lisp, the only exceptions being parts written in
@@ -231,7 +244,7 @@ meant they should start a company.</p>
like. Greenblatt wanted to start what he called a
&ldquo;hacker&rdquo; company. This meant it would be a company run by
hackers and would operate in a way conducive to hackers. Another goal
-was to maintain the AI Lab culture <a href="#foot-3">(3)</a>.
+was to maintain the AI Lab culture&#8239;<a class="ftn" href="#foot-3">[3]</a>.
Unfortunately, Greenblatt didn't have any business experience, so
other people in the Lisp machine group said they doubted whether he
could succeed. They thought that his plan to avoid outside investment
@@ -284,7 +297,7 @@ was entitled to put them into the MIT Lisp machine
systems that both companies had licensed. Nobody had envisioned that
the AI lab's hacker group would be wiped out, but it was.</p>
-<p> So Symbolics came up with a plan <a href="#foot-4">(4)</a>. They
+<p> So Symbolics came up with a plan&#8239;<a href="#foot-4">[4]</a>. They
said to the lab, &ldquo;We will continue making our changes to the
system available for you to use, but you can't put it into
the MIT Lisp machine system. Instead, we'll give you
@@ -305,12 +318,12 @@ we were not allowed to be neutral anymore.</p>
although it made me miserable to see what had happened to our
community and the software. But now, Symbolics had forced the issue.
So, in an effort to help keep Lisp Machines
-Inc. going <a href="#foot-5">(5)</a> &mdash; I began duplicating all
+Inc. going&#8239;<a href="#foot-5">[5]</a>&mdash;I began duplicating all
of the improvements Symbolics had made to the Lisp machine system. I
wrote the equivalent improvements again myself (i.e., the code was my
own).</p>
-<p>After a while <a href="#foot-6">(6)</a>, I came to the conclusion
+<p>After a while&#8239;<a href="#foot-6">[6]</a>, I came to the conclusion
that it would be best if I didn't even look at their code. When they
made a beta announcement that gave the release notes, I would see what
the features were and then implement them. By the time they had a real
@@ -321,7 +334,7 @@ Machines Incorporated, and the two companies went on. But, I didn't
want to spend years and years punishing someone, just thwarting an
evil deed. I figured they had been punished pretty thoroughly because
they were stuck with competition that was not leaving or going to
-disappear <a href="#foot-7">(7)</a>. Meanwhile, it was time to start
+disappear&#8239;<a href="#foot-7">[7]</a>. Meanwhile, it was time to start
building a new community to replace the one that their actions and
others had wiped out.</p>
@@ -333,7 +346,7 @@ were people giving up on cooperation, and together this wiped out the
community and there wasn't much left.</p>
<p>Once I stopped punishing Symbolics, I had to figure out what to do
-next. I had to make a free operating system, that was clear &mdash; the
+next. I had to make a free operating system, that was clear&mdash;the
only way that people could work together and share was with a free
operating system.</p>
@@ -344,7 +357,7 @@ made it possible to run programs as fast as other computers would run
their programs and still get the benefit of typechecking. Without
that, you would be reduced to something like the Lisp compilers for
other machines. The programs would be faster, but unstable. Now that's
-okay if you're running one program on a timesharing system &mdash; if one
+okay if you're running one program on a timesharing system&mdash;if one
program crashes, that's not a disaster, that's something your program
occasionally does. But that didn't make it good for writing the
operating system in, so I rejected the idea of making a system like
@@ -363,21 +376,21 @@ machines without virtual memory. They wanted to be able to use GNU
Emacs. This meant I had to keep the program as small as possible.</p>
<p>For instance, at the time the only looping construct was
-&lsquo;while&rsquo;, which was extremely simple. There was no way to
-break out of the &lsquo;while&rsquo; statement, you just had to do a
+<code>while</code>, which was extremely simple. There was no way to
+break out of the <code>while</code> statement, you just had to do a
catch and a throw, or test a variable that ran the loop. That shows
how far I was pushing to keep things small. We didn't have
-&lsquo;caar&rsquo; and &lsquo;cadr&rsquo; and so on; &ldquo;squeeze
+<code>caar</code> and <code>cadr</code> and so on; &ldquo;squeeze
out everything possible&rdquo; was the spirit of GNU Emacs, the spirit
of Emacs Lisp, from the beginning.</p>
<p>Obviously, machines are bigger now, and we don't do it that way
-any more. We put in &lsquo;caar&rsquo; and &lsquo;cadr&rsquo; and so
+any more. We put in <code>caar</code> and <code>cadr</code> and so
on, and we might put in another looping construct one of these
days. We're willing to extend it some now, but we don't want to extend
it to the level of common Lisp. I implemented Common Lisp once on the
Lisp machine, and I'm not all that happy with it. One thing I don't
-like terribly much is keyword arguments <a href="#foot-8">(8)</a>.
+like terribly much is keyword arguments&#8239;<a href="#foot-8">[8]</a>.
They don't seem quite Lispy
to me; I'll do it sometimes but I minimize the times when I do
that.</p>
@@ -420,14 +433,14 @@ work with other customizations as well.</p>
<p>As long as the extensibility languages are weak, the users have to
use only the language you provided them. Which means that people who
love any given language have to compete for the choice of the
-developers of applications &mdash; saying &ldquo;Please, application
+developers of applications&mdash;saying &ldquo;Please, application
developer, put my language into your application, not his
-language.&rdquo; Then the users get no choices at all &mdash; whichever
+language.&rdquo; Then the users get no choices at all&mdash;whichever
application they're using comes with one language and they're stuck
with [that language]. But when you have a powerful language that can
implement others by translating into it, then you give the user a
choice of language and we don't have to have a language war
-anymore. That's what we're hoping &lsquo;Guile&rsquo;, our scheme
+anymore. That's what we're hoping Guile, our scheme
interpreter, will do. We had a person working last summer finishing up
a translator from Python to Scheme. I don't know if it's entirely
finished yet, but for anyone interested in this project, please get in
@@ -441,13 +454,13 @@ freedom as a user. The crucial thing is that you are free to run the
program, free to study what it does, free to change it to suit your
needs, free to redistribute the copies of others and free to publish
improved, extended versions. This is what free software means. If you
-are using a non-free program, you have lost crucial freedom, so don't
+are using a nonfree program, you have lost crucial freedom, so don't
ever do that.</p>
<p>The purpose of the GNU project is to make it easier for people to
-reject freedom-trampling, user-dominating, non-free software by
+reject freedom-trampling, user-dominating, nonfree software by
providing free software to replace it. For those who don't have the
-moral courage to reject the non-free software, when that means some
+moral courage to reject the nonfree software, when that means some
practical inconvenience, what we try to do is give a free alternative
so that you can move to freedom with less of a mess and less of a
sacrifice in practical terms. The less sacrifice the better. We want
@@ -457,27 +470,29 @@ to make it easier for you to live in freedom, to cooperate.</p>
thinking of freedom and cooperation with society as if they are
opposites. But here they're on the same side. With free software you
are free to cooperate with other people as well as free to help
-yourself. With non-free software, somebody is dominating you and
+yourself. With nonfree software, somebody is dominating you and
keeping people divided. You're not allowed to share with them, you're
not free to cooperate or help society, anymore than you're free to
help yourself. Divided and helpless is the state of users using
-non-free software.</p>
+nonfree software.</p>
<p>We've produced a tremendous range of free software. We've done what
people said we could never do; we have two operating systems of free
software. We have many applications and we obviously have a lot
farther to go. So we need your help. I would like to ask you to
volunteer for the GNU project; help us develop free software for more
-jobs. Take a look at <a href="/help/">http://www.gnu.org/help</a> to
+jobs. Take a look at <a href="/help/help.html">gnu.org/help</a> to
find suggestions for how to help. If you want to order things, there's
a link to that from the home page. If you want to read about
philosophical issues, look in /philosophy. If you're looking for free
software to use, look in /directory, which lists about 1900 packages
now (which is a fraction of all the free software out there). Please
write more and contribute to us. My book of essays, &ldquo;Free
-Software and Free Society&rdquo;, is on sale and can be purchased at
-<a href="http://www.gnu.org/">www.gnu.org</a>. Happy hacking!</p>
+Software and Free Society,&rdquo; is on sale and can be purchased at
+www.gnu.org&#8239;<a href="#foot-9">[9]</a>. Happy hacking!</p>
+<div class="column-limit"></div>
+<h3 class="footnote">Footnotes</h3>
<ol>
<li id="foot-1">Guy Steele designed the original symmetrical Emacs
command set; then he and I began implementing Emacs (on top of TECO),
@@ -498,7 +513,7 @@ MIT.</li>
<li id="foot-4">The background of this plan, which I did not state
explicitly in the talk, is that during an initial period the ex-AI-Lab
hackers, whether at Symbolics or LMI, continued contributing their
-changes to the MIT Lisp Machine system &mdash; even though the
+changes to the MIT Lisp Machine system&mdash;even though the
contract did not require this. Symbolics' plan was to rupture this
cooperation unilaterally.</li>
@@ -524,11 +539,16 @@ by thwarting their plan, had cost Symbolics a million dollars.</li>
<li id="foot-8">I don't mind if a very complex and heavyweight
function takes keyword arguments. What bothers me is making simple
basic functions such as &ldquo;member&rdquo; use them.</li>
+
+<li id="foot-9">In 2021, this book can be purchased from <a
+href="https://shop.fsf.org/books-docs/free-software-free-society-selected-essays-richard-m-stallman-3rd-edition">
+GNU Press</a>.</li>
</ol>
+</div>
</div><!-- for id="content", starts in the include above -->
<!--#include virtual="/server/footer.html" -->
-<div id="footer">
+<div id="footer" role="contentinfo">
<div class="unprintable">
<p>Please send general FSF &amp; GNU inquiries to
@@ -546,13 +566,13 @@ to <a href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.</p>
to <a href="mailto:web-translators@gnu.org">
&lt;web-translators@gnu.org&gt;</a>.</p>
- <p>For information on coordinating and submitting translations of
+ <p>For information on coordinating and contributing translations of
our web pages, see <a
href="/server/standards/README.translations.html">Translations
README</a>. -->
Please see the <a
href="/server/standards/README.translations.html">Translations
-README</a> for information on coordinating and submitting translations
+README</a> for information on coordinating and contributing translations
of this article.</p>
</div>
@@ -573,7 +593,7 @@ of this article.</p>
There is more detail about copyright years in the GNU Maintainers
Information document, www.gnu.org/prep/maintain. -->
-<p>Copyright &copy; 2003, 2007, 2013, 2014, 2020 Free Software Foundation, Inc.</p>
+<p>Copyright &copy; 2003, 2007, 2013, 2021 Free Software Foundation, Inc.</p>
<p>This page is licensed under a <a rel="license"
href="http://creativecommons.org/licenses/by-nd/4.0/">Creative
@@ -583,10 +603,10 @@ Commons Attribution-NoDerivatives 4.0 International License</a>.</p>
<p class="unprintable">Updated:
<!-- timestamp start -->
-$Date: 2020/09/21 18:46:44 $
+$Date: 2021/11/02 13:56:41 $
<!-- timestamp end -->
</p>
</div>
-</div>
+</div><!-- for class="inner", starts in the banner include -->
</body>
</html>