www-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

www/gnu rms-lisp.html


From: Therese Godefroy
Subject: www/gnu rms-lisp.html
Date: Tue, 2 Nov 2021 09:49:43 -0400 (EDT)

CVSROOT:        /webcvs/www
Module name:    www
Changes by:     Therese Godefroy <th_g> 21/11/02 09:49:43

Modified files:
        gnu            : rms-lisp.html 

Log message:
        Add a footnote to say Free Software Free Society can be purchased
        from GNU Press; use <code> instead of quotes for commands;
        restyle footnote refs with brackets; standardize quotes & dashes;
        weed out non-copyrightable years; update to boilerplate 1.96;
        add breadcrumbs.

CVSWeb URLs:
http://web.cvs.savannah.gnu.org/viewcvs/www/gnu/rms-lisp.html?cvsroot=www&r1=1.44&r2=1.45

Patches:
Index: rms-lisp.html
===================================================================
RCS file: /webcvs/www/www/gnu/rms-lisp.html,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -b -r1.44 -r1.45
--- rms-lisp.html       21 Sep 2020 18:46:44 -0000      1.44
+++ rms-lisp.html       2 Nov 2021 13:49:43 -0000       1.45
@@ -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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 <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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 <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 @@
 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 @@
 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 @@
 <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 @@
 <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: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 @@
      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 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 @@
 
 <p class="unprintable">Updated:
 <!-- timestamp start -->
-$Date: 2020/09/21 18:46:44 $
+$Date: 2021/11/02 13:49:43 $
 <!-- timestamp end -->
 </p>
 </div>
-</div>
+</div><!-- for class="inner", starts in the banner include -->
 </body>
 </html>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]