diff options
Diffstat (limited to 'talermerchantdemos/blog/articles/en/rms-lisp.html')
-rw-r--r-- | talermerchantdemos/blog/articles/en/rms-lisp.html | 144 |
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 -— it had something like 8k of memory — and I managed to write the +Processor">PDP</abbr>-11. It was a very small machine—it +had something like 8k of memory—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 — he must have really regretted that day.</p> +what was to come—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 — was PDP-10 +language, the non-interpreted language—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 ‘5l’, meaning ‘move five lines’, or -‘i’ 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 < >. You would put those around +looping construct, which was <code>< ></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 <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 — people were +ugliest syntax you could ever think of, and it worked—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 <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 — programming new editing commands +proved to be a great success—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 — a program that does something -useful for you — which has Lisp inside it and which you could extend +<p>So Bernie saw that an application—a program that does something +useful for you—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 — at the -stage where it's the hardest — where they don't believe they can +do. They can get encouragement for their own practical use—at the +stage where it's the hardest—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 — it was a full-fledged Lisp system — but people wanted +interpreter—it was a full-fledged Lisp system—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 — it would be +compiler you couldn't write the whole editor in Lisp—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 — manipulating editor buffers, +purpose editing jobs directly in C—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 — it +at MIT. Someone wanted to port it to run on Twenex—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 — to ask them to join +the right approach to take towards a community—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 -‘mocklisp’, which looks syntactically like Lisp, but didn't +“mocklisp,” 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 — it's now possible to run Lisp code during redisplay. It's +since—it's now possible to run Lisp code during redisplay. It's quite a convenient thing.</p> -<p>This second Emacs program was ‘free software’ in the -modern sense of the term — it was part of an explicit political +<p>This second Emacs program was “free software” in the +modern sense of the term—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 — the experience I had, the life that I've lived at -the MIT AI lab — to be working on human knowledge, and +software movement—the experience I had, the life that I've lived at +the MIT AI lab—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 — a <code>car</code> instruction would -do data typechecking — so when you tried to get the <code>car</code> of a number +those other machines, but each instruction—a <code>car</code> instruction would +do data typechecking—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 “hacker” 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 <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 <a href="#foot-4">[4]</a>. They said to the lab, “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> — I began duplicating all +Inc. going <a href="#foot-5">[5]</a>—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 <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 <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 — the +next. I had to make a free operating system, that was clear—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 — if one +okay if you're running one program on a timesharing system—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 -‘while’, which was extremely simple. There was no way to -break out of the ‘while’ 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 -‘caar’ and ‘cadr’ and so on; “squeeze +<code>caar</code> and <code>cadr</code> and so on; “squeeze out everything possible” 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 ‘caar’ and ‘cadr’ 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 <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 — saying “Please, application +developers of applications—saying “Please, application developer, put my language into your application, not his -language.” Then the users get no choices at all — whichever +language.” Then the users get no choices at all—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 ‘Guile’, 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, “Free -Software and Free Society”, 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,” is on sale and can be purchased at +www.gnu.org <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 — even though the +changes to the MIT Lisp Machine system—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 “member” 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 & GNU inquiries to @@ -546,13 +566,13 @@ to <a href="mailto:webmasters@gnu.org"><webmasters@gnu.org></a>.</p> to <a href="mailto:web-translators@gnu.org"> <web-translators@gnu.org></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 © 2003, 2007, 2013, 2014, 2020 Free Software Foundation, Inc.</p> +<p>Copyright © 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> |