www-commits
[Top][All Lists]
Advanced

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

www/gnu po/rms-lisp.translist rms-lisp.ru.html ...


From: GNUN
Subject: www/gnu po/rms-lisp.translist rms-lisp.ru.html ...
Date: Thu, 28 Feb 2013 05:29:37 +0000

CVSROOT:        /web/www
Module name:    www
Changes by:     GNUN <gnun>     13/02/28 05:29:37

Modified files:
        gnu/po         : rms-lisp.translist 
Added files:
        gnu            : rms-lisp.ru.html 
        gnu/po         : rms-lisp.ru-en.html 

Log message:
        Automatic update by GNUnited Nations.

CVSWeb URLs:
http://web.cvs.savannah.gnu.org/viewcvs/www/gnu/rms-lisp.ru.html?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/gnu/po/rms-lisp.translist?cvsroot=www&r1=1.5&r2=1.6
http://web.cvs.savannah.gnu.org/viewcvs/www/gnu/po/rms-lisp.ru-en.html?cvsroot=www&rev=1.1

Patches:
Index: po/rms-lisp.translist
===================================================================
RCS file: /web/www/www/gnu/po/rms-lisp.translist,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- po/rms-lisp.translist       11 Mar 2012 11:49:36 -0000      1.5
+++ po/rms-lisp.translist       28 Feb 2013 05:29:37 -0000      1.6
@@ -8,6 +8,8 @@
 <li><a href="/gnu/rms-lisp.es.html">español</a>&nbsp;[es]</li>
 <!-- French -->
 <li><a href="/gnu/rms-lisp.fr.html">français</a>&nbsp;[fr]</li>
+<!-- Russian -->
+<li><a href="/gnu/rms-lisp.ru.html">русский</a>&nbsp;[ru]</li>
 <!-- Albanian -->
 <li><a href="/gnu/rms-lisp.sq.html">Shqip</a>&nbsp;[sq]</li>
 </ul>

Index: rms-lisp.ru.html
===================================================================
RCS file: rms-lisp.ru.html
diff -N rms-lisp.ru.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ rms-lisp.ru.html    28 Feb 2013 05:29:35 -0000      1.1
@@ -0,0 +1,615 @@
+
+
+<!--#include virtual="/server/header.ru.html" -->
+<!-- Parent-Version: 1.72 -->
+
+<!-- This file is automatically generated by GNUnited Nations! -->
+ <!--#set var="ENGLISH_PAGE" value="/gnu/rms-lisp.en.html" -->
+
+<title>Мой опыт работы с Лиспом и развитие GNU 
Emacs - Проект GNU - Фонд свободного
+программного обеспечения</title>
+
+<!--#include virtual="/server/banner.ru.html" -->
+<!--#include virtual="/gnu/po/rms-lisp.translist" -->
+<h2>Мой опыт работы с Лиспом и развитие GNU 
Emacs</h2>
+
+<blockquote><p>(Запись речи Ричарда Столмена, 
28&nbsp;октября 2002&nbsp;года на
+Международной конференции по 
Лиспу).</p></blockquote>
+
+<p>Поскольку ни одна из моих обычных речей 
не имеет никакого отношения к Лиспу,
+ни одна из них не подходит для 
сегодняшнего выступления. Так что мне
+придется импровизировать. Поскольку в 
своей профессиональной деятельности
+мне доводилось выполнять довольно много 
работы, связанной с Лиспом, у меня,
+должно быть, есть что порассказать.</p>
+
+<p>Моя первая встреча с Лиспом произошла, 
когда я прочел руководство по
+Лисп&nbsp;1.5 в старших классах. Именно тогда 
меня поразила идея, что может
+быть такой язык программирования. 
Возможность сделать что-нибудь на Лиспе
+впервые появилась у меня, когда я был на 
младших курсах в Гарварде и писал
+интерпретатор Лиспа для PDP-11. Это была 
очень маленькая машина&nbsp;&mdash;
+в ней было что-то вроде 8k памяти,&mdash; и мне 
удалось написать
+интерпретатор длиной в тысячу команд. Это 
оставляло мне немного места для
+данных. Это было до того, как я узнал, как 
выглядят настоящие программы,
+которые выполняют настоящие системные 
задачи.</p>
+
+<p>Я начал выполнять работы над настоящей 
реализацией Лиспа с Джоном-Л Уайтом,
+как только я начал работать в 
Массачусетском техническом институте. Туда
+меня принял не Джон-Л, а Расселл Нофтскер, 
что было в высшей степени
+парадоксально, если учесть то, что 
случилось впоследствии&nbsp;&mdash; он,
+должно быть, сильно об этом пожалел.</p>
+
+<p>В семидесятые годы XX&nbsp;века, до того, как 
моя жизнь политизировалась в
+результате ужасных событий, я просто делал 
одно расширение различных
+программ за другим, и большинство из них не 
имело никакого отношения к
+Лиспу. Но попутно я писал текстовый 
редактор, Emacs. Интересная мысль,
+заложенная в Emacs, состояла в том, что в нем 
был язык программирования, и
+пользовательские команды редактирования 
писались на этом интерпретируемом
+языке программирования, так что во время 
редактирования в редактор можно
+было загружать новые команды. Можно было 
подредактировать программы,
+которыми пользуешься, а потом продолжать 
редактировать ими. Итак, у нас была
+система, полезная не для программирования, 
и все-таки во время пользования
+ею можно было программировать. Я не знаю, 
была ли это первая такая система,
+но это определенно был первый такой 
редактор.</p>
+
+<p>Эта атмосфера построения гигантских, 
сложных программ для применения в своем
+собственном редактировании, а затем 
обмена ими с другими людьми, питала дух
+нестесненного сотрудничества, который 
царил тогда в Лаборатории
+искусственного интеллекта. Идея была в 
том, что можно передать копию
+программы, которая у тебя есть, тому, кому 
она нужна. Мы обменивались
+программами со всеми, кто только хотел ими 
пользоваться, программы были
+человеческим знанием. Так что, хотя и не 
было организованной политической
+мысли, связывающей то, как мы обменивались 
программами, с устройством Emacs,
+я убежден, что между ними была связь&nbsp;&mdash; 
возможно, неосознанная. Я
+думаю, что именно природа нашего образа 
жизни в Лаборатории искусственного
+интеллекта привела к созданию Emacs и 
сделала его таким, каким он был.</p>
+
+<p>В первоначальном Emacs Лиспа не было. 
Языком низкого уровня&nbsp;&mdash;
+неинтерпретируемым языком&nbsp;&mdash; был 
ассемблер PDP-10. Интерпретатор,
+который мы писали, на самом деле писался не 
для Emacs, он писался для
+TECO&nbsp;<a href="#tf1">[1]</a>. Это был наш текстовый 
редактор и крайне
+уродливый язык программирования, 
настолько уродливый, насколько это только
+возможно. Причина была в том, что он не был 
спроектирован как язык
+программирования, он был спроектирован 
как язык редактора и команд. Были
+такие команды, как &ldquo;5l&rdquo;, что означало 
&ldquo;передвинуться на
+пять строк&rdquo;, или &ldquo;i&rdquo; с последующим 
текстом и <em>ESC</em>
+для того, чтобы вставить этот текст. Можно 
было набрать строку, которая была
+последовательностью команд, это 
называлось командной строкой. Она
+завершалась символами <em>ESC</em> <em>ESC</em>, и 
тогда последовательность
+выполнялась.</p>
+
+<p>Ну, люди хотели дополнить этот язык 
средствами программирования, так что они
+добавили некоторые такие средства. 
Например, одной из первых была добавлена
+конструкция цикла, это были <em>&lt;</em> 
<em>&gt;</em>. Ими окружали
+команды, и это был цикл. Были другие 
непонятные команды, которыми можно было
+пользоваться для условного выхода из 
цикла. При создании Emacs мы&nbsp;<a
+href="#foot-1">(1)</a> добавили возможность 
создания подпрограмм с
+именами. До того это было вроде Бейсика, в 
именах подпрограмм могло быть
+только по одной букве. Писать на этом 
большие программы было трудно, так что
+мы дописали программу, чтобы у них могли 
быть более длинные имена. На самом
+деле там были довольно замысловатые 
средства; по-моему, средство
+&ldquo;unwind-protect&rdquo; Лисп заимствовал из TECO.</p>
+
+<p>Мы начали закладывать довольно 
замысловатые средства, и у всех у них был
+уродливейший синтаксис, какой только 
можно придумать, и это
+работало&nbsp;&mdash; люди все равно были в 
состоянии писать на этом крупные
+программы. Очевидным уроком было то, что 
такой язык, как TECO, который не
+был спроектирован как язык 
программирования,&mdash; это был неверный
+путь. Язык, на котором вы строите свои 
расширения, должен задумываться как
+язык программирования не задним числом; 
его следует проектировать как язык
+программирования. Фактически, мы 
обнаружили, что лучшим языком
+программирования для этих целей был 
Лисп.</p>
+
+<p>Это открыл Берни Гринберг&nbsp;<a 
href="#foot-2">(2)</a>. Он написал версию
+Emacs на MacLisp в Multics, и он писал свои программы 
на MacLisp
+прямолинейным манером. Сам редактор был 
полностью написан на Лиспе. Emacs
+для Multics имел большой успех&nbsp;&mdash; 
программирование новых команд
+редактирования было таким удобным, что 
даже секретарши в его конторе начали
+учиться пользованию им. Они пользовались 
руководством, которое кто-то
+написал и в котором было показано, как 
дополнять Emacs, но там не
+говорилось, что это программирование. Так 
что секретарш, которые думали, что
+не могут программировать, это не 
отпугивало. Они читали руководство,
+обнаруживали, что могут делать что-то 
полезное, и учились программировать.</p>
+
+<p>Так что Берни понял, что приложение&mdash; 
программа, которая делает что-то
+полезное для вас&nbsp;&mdash; внутри которого 
был Лисп и которое вы можете
+дополнять, переписывая программы на 
Лиспе,&mdash; на самом деле очень
+хороший способ научиться программировать. 
Это дает людям возможность писать
+небольшие программы, которые для них 
полезны, чего в большинстве областей
+вы, наверное, не можете. Они могут получать 
поощрение от практической пользы
+для них самих на стадии, где это труднее 
всего&nbsp;&mdash; когда они не
+думают, что могут программировать,&mdash; 
пока они не дойдут до точки, в
+которой они уже стали программистами.</p>
+
+<p>В этот момент люди начали размышлять, как 
получить что-то вроде этого на
+платформе, где у них не было 
полнофункциональной реализации Лиспа. У 
MacLisp
+для Multics был как компилятор, так и 
интерпретатор&nbsp;&mdash; это была
+полностью оснащенная система Лисп&nbsp;&mdash; 
но люди хотели реализовать
+что-то подобное на других системах, где у 
них не было уже написанного
+компилятора Лиспа. Ну, если у вас нет 
компилятора Лиспа, вы не можете
+написать весь редактор на Лиспе&nbsp;&mdash; он 
был бы слишком медленным,
+особенно перерисовка, если бы пришлось 
выполнять Лисп на интерпретаторе. Так
+что мы разработали гибридную технику. Идея 
состояла в том, чтобы писать
+интерпретатор Лиспа и низкоуровневые 
части редактора вместе, так что части
+редактора были встроенными средствами 
Лиспа. Это были бы любые части, в
+оптимизации которых мы ощущали необх
одимость. Это была техника, которую мы
+уже сознательно практиковали в 
первоначальном Emacs, потому что были
+определенные весьма высокоуровневые 
функции, которые мы перереализовали на
+машинном языке, переделав их в примитивы 
TECO. Например, был примитив TECO
+для заполнения абзаца (на самом деле для 
основной работы по заполнению
+абзаца, потому что некоторые из наименее 
ресурсоемких частей работы
+выполнялись на более высоком уровне 
программой TECO). Можно было выполнять
+всю работу, написав программу на TECO, но она 
была слишком медленной, так
+что мы оптимизировали ее, перенеся часть 
ее на машинный язык. Здесь (в
+гибридной технике) мы воспользовались той 
же идеей: большая часть редактора
+будет написана на Лиспе, но определенные 
его части, которые нужно было
+выполнять особенно быстро, будут написаны 
на низком уровне.</p>
+
+<p>Таким образом, когда я писал свою вторую 
реализацию Emacs, я следовал такого
+же рода схеме. Язык низкого уровня больше 
не был машинным языком, это был
+Си. Си был хорошим, эффективным языком для 
переносимых программ,
+предназначенных для выполнения в 
операционной системе типа Unix. Там был
+интерпретатор Лиспа, но я реализовал 
средства для решения специальных задач
+редактирования прямо на Си&nbsp;&mdash; сюда вх
одили манипуляция буферами
+редактора, вставка текста в начало, чтение 
и запись файлов, перерисовка
+буфера на экране, управление окнами 
редактора.</p>
+
+<p>Так вот, это был не первый Emacs, написанный 
на Си и работавший в
+Unix. Первый был написан Джеймсом Гослингом, 
его называли GosMacs. С ним
+вышла странная история. Вначале он, 
казалось, находился под влиянием той же
+самой атмосферы обмена и сотрудничества 
первоначального Emacs. Я сначала
+выпускал первоначальный Emacs для людей в 
Массачусетском техническом
+институте. Кое-кто захотел перенести его 
на Twenex&nbsp;&mdash; сначала
+редактор работал только в Несовместимой 
системе разделения времени, которой
+мы пользовались в институте. Они перенесли 
его на Twenex, это означало, что
+в мире было несколько сотен вычислительных
 систем, в которых его
+потенциально можно было применять. Мы 
начали распространять его среди них с
+правилом &ldquo;вы должны присылать назад все 
свои улучшения&rdquo;, чтобы
+мы все могли извлекать из этого пользу. 
Никто никогда не пытался следить за
+соблюдением этого, но насколько я знаю, 
люди действительно сотрудничали.</p>
+
+<p>И Гослинг, на первых порах, казалось, 
принимал в этом участие. Он написал
+руководство, в котором он называл эту 
программу Emacs в надежде, что другие
+члены сообщества будут улучшать ее, пока 
она не заслужит этого названия. Это
+был верный подход к сообществу&nbsp;&mdash; 
просить их присоединиться и
+улучшать программу. Но после этого его 
отношение, кажется, изменилось, и он
+продал программу одной компании.</p>
+
+<p>В это время я работал над системой GNU 
(свободной операционной системой типа
+Unix, которую многие ошибочно называют 
&ldquo;Linux&rdquo;). Свободного
+редактора Emacs, который работал бы в Unix, не 
было. Однако был у меня
+знакомый, который участвовал в разработке 
Emacs Гослинга. Гослинг передал
+ему, по электронной почте, разрешение 
распространять его собственную
+версию. Он предложил мне воспользоваться 
этой версией. Тогда я обнаружил,
+что в Emacs Гослинга не было настоящего 
Лиспа. В нем был язык
+программирования, известный как 
&ldquo;mocklisp&rdquo;, он синтаксически
+выглядит как Лисп, но в нем нет структур 
данных Лиспа. Так что программы не
+были данными и не хватало жизненно важных 
элементов Лиспа. Его структурами
+данных были строки, числа и некоторые 
другие специализированные объекты.</p>
+
+<p>Я пришел к выводу, что не могу 
воспользоваться этим, и был вынужден 
заменить
+это все, и первым шагом было написание 
настоящего интерпретатора Лиспа. Я
+постепенно перебазировал каждую часть 
редактора на настоящие структуры
+данных Лиспа взамен написанных по случаю 
структур данных, создав возможность
+вывода внутренних структур данных 
редактора и манипуляций ими в
+пользовательских программах на Лиспе.</p>
+
+<p>Единственным исключением была 
перерисовка. Долгое время перерисовка была
+своего рода другим миром. Редактор вступал 
в мир перерисовки, и все начинало
+проводиться над совершенно особыми 
структурами данных, для которых не было
+безопасной сборки мусора, не было 
безопасных прерываний, и в это время
+нельзя было выполнять никаких программ на 
Лиспе. С тех пор мы это
+изменили&nbsp;&mdash; сейчас можно выполнять 
программы на Лиспе во время
+перерисовки. Это очень удобно.</p>
+
+<p>Эта вторая программа Emacs была 
&ldquo;свободной программой&rdquo; в
+современном смысле этого слова&nbsp;&mdash; она 
была частью открытой
+политической кампании за освобождение 
программ. Сущность этой кампании
+состояла в том, что всякий должен быть 
волен делать то, что мы в старые
+времена делали в Массачусетском тех
ническом институте, работая вместе над
+программами и работая со всеми, кто только 
желал работать с нами. Это было
+основой движения за свободное программное 
обеспечение&nbsp;&mdash; опыт моей
+жизни в Лаборатории искусственного 
интеллекта&nbsp;&mdash; работать над
+человеческим знанием и не стоять ни у кого 
на пути к дальнейшему применению
+и дальнейшему распространению 
человеческого знания.</p>
+
+<p>В это время можно было сделать компьютер, 
который стоил примерно столько же,
+сколько другие компьютеры, не 
предназначенные для Лиспа, но он выполнял 
бы
+Лисп гораздо быстрее, чем они, и при этом с 
полной проверкой типов на каждой
+операции. Обычные компьютеры, как правило, 
вынуждали выбирать между
+скоростью выполнения и хорошей проверкой 
типов. Так что, конечно, можно было
+получить компилятор Лиспа и быстро 
выполнять программы, но когда они
+пытались взять <code>car</code> от числа, это 
приводило к бессмысленным
+результатам и в конце концов когда-нибудь 
приводило к сбою.</p>
+
+<p>Машина-Лисп была в состоянии выполнять 
команды почти так же быстро, как те
+другие машины, но каждая команда... команда 
<code>car</code> выполняла
+проверку типов&nbsp;&mdash; так что когда вы 
пытались взять <code>car</code>
+от числа в скомпилированной программе, это 
немедленно давало ошибку. Мы
+построили машину, и у нас была для нее 
операционная система Лиспа. Она почти
+полностью была написана на Лиспе, за 
исключением только частей, записанных в
+микрокоде. Возник интерес к производству 
машин, это означало, что нужно
+создать компанию.</p>
+
+<p>Было два разных представления о том, 
какой должна быть эта
+компания. Гринблэтт хотел создать то, что 
он называл &ldquo;хакерской&rdquo;
+компанией. Это означало, что это была бы 
компания под управлением хакеров и
+работающая благоприятным для хакеров 
образом. Другой целью была поддержка
+культуры Лаборатории искусственного 
интеллекта&nbsp;<a
+href="#foot-3">(3)</a>. К сожалению, у Гринблэтта не 
было никакого делового
+опыта, так что другие люди из группы 
машины-Лиспа говорили, что они
+сомневаются в том, что он сможет это 
сделать. Они думали, что избежать
+внешних капиталовложений, как он 
планировал, не удастся.</p>
+
+<p>Но почему он хотел избежать внешних 
капиталовложений? Потому что когда у
+компании есть внешние вкладчики, они берут 
контроль в свои руки и не
+позволяют вам быть щепетильным; а если вы 
сколько-нибудь щепетильны, то они
+в конце концов поставят на руководящую 
должность кого-нибудь другого.</p>
+
+<p>Так что у Гринблэтта была мысль, что он 
найдет клиента, который заплатит за
+комплектующие вперед. Они собрали бы 
машины и поставили их ему; извлекая
+таким образом доход из этих комплектующих, 
они смогли бы купить
+комплектующие еще для нескольких машин, 
продать их, а потом купить
+комплектующие для большего числа машин и 
так далее. Другие люди из группы
+думали, что так работать не получится.</p>
+
+<p>Гринблэтт привлек Расселла Нофтскера, 
человека, который нанял меня, а в
+последствии ушел из Лаборатории 
искусственного интеллекта и создал
+прибыльную компанию. Считалось, что у Р
асселла есть деловая хватка. Он
+продемонстрировал эту деловую хватку, 
сказав людям в группе: &ldquo;Давайте
+бросим Гринблэтта и забудем о его идеях; а 
мы создадим другую
+компанию&rdquo;. Ударил в спину, совсем как 
настоящий предприниматель. Эти
+люди решили сформировать компанию под 
названием &ldquo;Symbolics&rdquo;,
+привлекать внешний капитал, не быть 
щепетильными и делать все возможное,
+чтобы победить.</p>
+
+<p>Но Гринблэтт не отступил. Он и немногие 
лояльные по отношению к нему люди
+решили все равно образовать Lisp Machines Inc. и 
работать по своему плану. И
+что бы вы думали? Им это удалось! У них 
появился первый клиент, и им
+заплатили вперед. Они собирали машины, 
продавали их и собирали еще и еще. В
+конце концов они встали на ноги, несмотря 
на то, что большинство людей в
+группе им не помогало. Компания Symbolics также 
начала успешную
+деятельность, так что было две 
конкурирующих компании, производящих
+машины-Лиспы. Когда в Symbolics поняли, что LMI и 
не думает вылетать в
+трубу, они стали искать способы разрушить 
ее.</p>
+
+<p>Таким образом, за уходом из нашей 
лаборатории последовала
+&ldquo;война&rdquo; в нашей лаборатории. Уход 
произошел, когда компания
+Symbolics переманила всех хакеров, кроме меня и 
тех немногих, кто по
+совместительству работал в LMI. Потом они 
установили правило и исключили
+тех, кто по совместительству работал в 
институте, так что им пришлось уйти
+полностью, и я остался один. Теперь 
Лаборатория искусственного интеллекта
+была беспомощна. А институт заключил с 
этими двумя компаниями одно очень
+глупое соглашение. Это был трехсторонний 
договор, в котором обе компании
+лицензировали исходные тексты системы 
машины-Лиспа. Эти компании должны были
+предоставлять свои изменения в 
пользование института. Но в договоре не
+говорилось, что институт вправе размещать 
их в системах своих машин-Лиспов,
+которые лицензировали обе компании. Никто 
не предвидел, что группу хакеров
+Лаборатории искусственного интеллекта 
разгонят, но так и случилось.</p>
+
+<p> Итак, в Symbolics созрел план&nbsp;<a 
href="#foot-4">(4)</a>. Они сказали
+лаборатории: &ldquo;Мы продолжим 
предоставлять в ваше пользование свои
+изменения в системе, но вам нельзя 
размещать их в системе машины-Лиспа
+института. Вместо этого мы предоставим вам 
доступ к системе машины-Лиспа
+Symbolics, и вы сможете работать на ней, но это 
все, что вы можете делать.</p>
+
+<p>Это фактически означало, что они 
потребовали от нас встать на ту или другую
+сторону и пользоваться либо версией 
института, либо версией Symbolics. Что
+бы мы ни выбрали, это определяло бы, в какую 
систему пойдут наши
+усовершенствования. Если бы мы работали 
над версией Symbolics и
+совершенствовали ее, мы поддерживали бы 
только Symbolics. Если бы мы
+пользовались версией института и 
совершенствовали ее, мы предоставляли бы
+работу в распоряжение обеих компаний, но в 
Symbolics понимали, что с нашей
+стороны это было бы поддержкой LMI, потому 
что мы помогали бы им продолжать
+существование. Так что нам не позволили 
оставаться нейтральными.</p>
+
+<p>Вплоть до этого момента я не принимал 
сторону ни одной из компаний, хотя мне
+было больно видеть, что произошло с нашим 
сообществом и программами. Но
+теперь компания Symbolics принуждала меня к 
этому. Итак, пытаясь помочь
+компании Lisp Machines Inc. удержаться на 
плаву&nbsp;<a
+href="#foot-5">(5)</a>, я начал дублировать все 
улучшения в системе
+машины-Лиспа, которые делали в Symbolics. Я 
писал эквивалентные улучшения
+сам (т.е. тексты программ были моими 
собственными).</p>
+
+<p>Через некоторое время&nbsp;<a href="#foot-6">(6)</a> я 
пришел к заключению,
+что было бы лучше всего, если бы я даже не 
заглядывал в их тексты.  Когда
+они делали объявление о выпуске 
предварительной версии, в котором было
+описание выпуска, я видел, какие там были 
функции, а потом реализовывал
+их. К тому времени, как они выпускали 
окончательную версию, я тоже выпускал
+такую версию.</p>
+
+<p>Таким образом в течение двух лет я не 
давал им покончить с LMI, и эти две
+компании продолжали работу. Но я не хотел 
тратить долгие годы на то, чтобы
+наказать кого-то, просто мешая злому делу. 
Я увидел, что они наказаны
+довольно основательно, потому что они 
наткнулись на конкуренцию, которая не
+уходила и не собиралась исчезать&nbsp;<a 
href="#foot-7">(7)</a>. Тем
+временем пришла пора начать обустройство 
нового сообщества взамен того,
+которое было уничтожено их действиями и 
действиями других.</p>
+
+<p>В семидесятых годах сообщество Лиспа не 
ограничивалось Лабораторией
+искусственного интеллекта 
Массачусетского технического института, и 
не все
+хакеры были в этом институте. Война, 
которую начала компания Symbolics,
+опустошила Массачусетский технический 
институт, но в то время происходили и
+другие события. Были люди, которые 
прекращали сотрудничество, и все это
+вместе опустошило наше сообщество, и от 
него почти ничего не осталось.</p>
+
+<p>Когда я прекратил наказывать Symbolics, мне 
пришлось придумывать, что делать
+дальше. Мне нужно было сделать свободную 
операционную систему, это было
+ясно&nbsp;&mdash; единственным способом дать 
людям совместно работать и
+обмениваться была свободная операционная 
система.</p>
+
+<p>Сперва я подумывал о создании системы на 
базе Лиспа, но я осознал, что с
+технической точки зрения это не хорошо. 
Чтобы получить что-то подобное
+системе машины-Лиспа, нужен микрокод 
специального назначения. Именно это
+позволяло выполнять программы так же 
быстро, как другие компьютеры выполняли
+свои программы, и при этом еще и 
пользоваться проверкой типов. Без этого все
+свелось бы к чему-то наподобие 
компиляторов Лиспа для других
+машин. Программы были бы быстрее, но они 
были бы нестабильны. Так вот, это
+допустимо, если выполнять одну программу 
на системе с разделением
+времени&nbsp;&mdash; если одна программа дает 
сбой, это не катастрофа, это
+нечто, что ваша программа время от времени 
делает. Но это делало ее
+недостаточно хорошей, чтобы писать на ней 
операционную систему, так что я
+отказался от мысли о том, чтобы сделать 
систему наподобие машины-Лиспа.</p>
+
+<p>Вместо этого я решил сделать 
операционную систему типа Unix, в которой 
были
+бы реализации Лиспа, чтобы выполнять 
пользовательские программы. Ядро было
+бы написано не на Лиспе, но Лисп у нас был 
бы. Так что именно разработка
+этой операционной системы, операционной 
системы GNU, привела меня к
+написанию GNU Emacs. В процессе этого я 
стремился сделать абсолютно
+минимально возможную реализацию Лиспа. Р
азмер программ имел чрезвычайное
+значение.</p>
+
+<p>В то время, в&nbsp;1985&nbsp;году, были люди, у 
которых были одномегабайтные
+машины без виртуальной памяти. Они хотели 
быть в состоянии использовать GNU
+Emacs. Это значило, что мне нужно 
ограничивать программу как можно меньшим
+размером.</p>
+
+<p>Например, в то время единственной 
циклической конструкцией была
+&ldquo;while&rdquo;, которая была крайне проста. Не 
было никаких способов
+досрочного выхода из оператора &ldquo;while&rdquo;, 
приходилось просто
+пользоваться механизмом исключений или 
проверять переменную в цикле. Это
+показывает, как далеко я зашел в 
ограничениях на размер. У нас не было
+&ldquo;caar&rdquo;, &ldquo;cadr&rdquo; и так далее; 
&ldquo;выжать все
+возможное&rdquo;&nbsp;&mdash; таким духом был 
пропитан GNU Emacs и его Лисп
+с самого начала.</p>
+
+<p>Разумеется, машины сейчас больше, и мы 
уже так не делаем. Мы заложили
+&ldquo;caar&rdquo;, &ldquo;cadr&rdquo; и так далее, и сейчас 
при случае мы
+могли бы заложить другую циклическую 
конструкцию. Мы охотно расширим его в
+некоторых пределах, но мы не хотим 
расширять его до уровня Общего Лиспа. Я
+однажды реализовывал Общий Лисп на 
машине-Лиспе, и мне он не так уж
+понравился. Одна из вещей, которые мне 
ужасно не нравятся&nbsp;&mdash;
+аргументы-ключевые слова&nbsp;<a href="#foot-8">(8)</a>. 
На мой взгляд, это
+выглядит не совсем по-лисповски; иногда я 
пишу так, но я свожу к минимуму
+число случаев, когда я это делаю.</p>
+
+<p>На этом проекты GNU, связанные с Лиспом, не 
кончились. Впоследствии,
+примерно в&nbsp;1995&nbsp;году, мы размышляли над 
организацией проекта
+графической рабочей среды. Было ясно, что 
для программ среды нам нужен язык
+программирования, на котором была бы 
написана значительная ее часть, чтобы
+сделать ее легко расширяемой, как 
редактор. Встал вопрос о том, каким должен
+быть язык.</p>
+
+<p>В то время для этих целей усиленно 
продвигался TCL&nbsp;<a
+href="#tf2">[2]</a>. Я был очень невысокого мнения о 
TCL, в основном потому,
+что это был не Лисп. Он выглядел слегка пох
ожим на Лисп, но семантически он
+им не был, и он был не таким ясным. Потом 
кто-то показал мне объявление, в
+котором компания Sun пыталась нанять 
кого-нибудь для работы над TCL, чтобы
+сделать его &ldquo;стандартом де-факто для 
языка расширений&rdquo; во всем
+мире. А я подумал: &ldquo;Нам нужно 
предотвратить это&rdquo;. Так что мы
+начали делать Scheme стандартным языком 
расширений GNU. Не Общий Лисп,
+потому что он был слишком велик. Идея была 
в том, что у нас будет
+интерпретатор Scheme, спроектированный для 
компоновки в приложения так же,
+как это делали с TCL. Тогда мы стали бы 
рекомендовать это как
+предпочтительный пакет расширений для 
всех программ GNU.</p>
+
+<p>Есть одна интересная выгода, которую 
можно извлечь из применения такого
+мощного языка, как вариант Лиспа, в 
качестве первичного языка расширений. Вы
+можете реализовывать другие языки 
переводом их на ваш первичный язык. Если
+ваш первичный язык&nbsp;&mdash; TCL, вы не можете 
легко реализовать Лисп
+переводом его на TCL. Но если ваш первичный 
язык&nbsp;&mdash; Лисп, то
+нетрудно реализовывать другие языки, 
переводя их. Наша идея состояла в том,
+что если бы каждое расширяемое приложение 
поддерживало Scheme, то вы могли
+бы написать реализацию TCL, Python или Perl на 
Scheme, которая переводит эту
+программу на Scheme. Тогда вы могли бы 
загружать ее в любое приложение и
+надстраивать его под свой любимый язык, и 
оно работало бы и с другими
+надстройками.</p>
+
+<p>До тех пор, пока языки расширения слабы, 
пользователям приходится применять
+только тот язык, который вы им 
предоставляете. Что означает, что людям,
+влюбленным в какой бы то ни было данный 
язык, приходится бороться за выбор
+разработчиков приложений&nbsp;&mdash; говоря 
разработчику приложения:
+&ldquo;Заложите, пожалуйста, в свое 
приложение мой язык, а не
+его&rdquo;. Тогда у пользователей вообще не 
будет выбора&nbsp;&mdash; каким
+бы приложением они ни пользовались, оно 
приходит с одним языком, и у них нет
+другого выхода. Но когда у вас мощный язык, 
который может реализовывать
+другие языки, переводя с них, то вы 
предоставляете пользователю выбор языка,
+и нам больше не приходится вести войну 
языков. Именно это, как мы надеемся,
+сделает &ldquo;Guile&rdquo;, наш интерпретатор Scheme. 
У нас есть человек,
+который этим летом работает над 
завершением транслятора с Python на
+Scheme. Я не знаю, полностью ли он завершен, но 
если кто-то заинтересован в
+этом проекте, пусть свяжется. Так что вот 
какие у нас планы на будущее.</p>
+
+<p>Я не говорил о свободном программном 
обеспечении, но позвольте мне кратко
+рассказать вам немного о том, что это 
означает. Выражение &ldquo;свободная
+программа&rdquo; подразумевает не стоимость; 
оно не означает, что вы
+получаете ее бесплатно. (Возможно, вы 
заплатили за копию или получили копию
+бесплатно.) Оно означает, что у вас как у 
пользователя есть
+свобода. Жизненно важно то, что вы вольны 
выполнять программу, вольны
+изучать, что она делает, вольны изменять ее 
под свои нужды, вольны
+перераспространять копии среди других и 
вольны публиковать улучшенные,
+расширенные версии. Вот что значит 
свободная программа. Если вы пользуетесь
+несвободной программой, вы утратили 
жизненно важную свободу, так что никогда
+этого не делайте.</p>
+
+<p>Назначение проекта GNU заключается в том, 
чтобы облегчить людям отказ от
+попирающих свободу, господствующих над 
пользователем, несвободных программ
+предоставлением свободных программ для их 
замены. Для тех, у кого нет
+моральных сил для отказа от несвободных 
программ, когда это означает
+какое-то практическое неудобство,&mdash; для 
них мы пытаемся дать свободную
+альтернативу, чтобы вы могли перейти к 
свободе с меньшими усилиями и
+меньшими жертвами в практическом смысле. 
Чем меньше жертвы, тем лучше. Мы
+хотим облегчить для вас сотрудничество и 
свободную жизнь.</p>
+
+<p>Сотрудничество&nbsp;&mdash; это вопрос 
свободы. Мы привыкли думать о свободе
+и сотрудничестве с обществом как о 
противоположностях. Но в данном случае
+они на одной стороне. При свободных 
программах вы вольны и сотрудничать с
+другими, и помогать самим себе. При 
несвободных программах кто-то доминирует
+над вами и разобщает людей. Вам не 
позволяют обмениваться с ними, вы не
+вольны сотрудничать или помогать 
обществу, точно так же, как вы не вольны
+помочь самим себе. Разобщенность и 
беспомощность&nbsp;&mdash; состояние
+пользователей, применяющих несвободные 
программы.</p>
+
+<p>Мы выработали умопомрачительное 
количество свободных программ. Мы сделали
+то, что, как утверждалось, мы никогда не 
сможем сделать; у нас есть две
+операционных системы из свободных 
программ. У нас есть множество приложений,
+и нам, очевидно, еще много предстоит 
пройти. Так что нам нужна ваша
+помощь. Я хотел бы попросить вас стать 
добровольцами проекта GNU; помогите
+нам разработать свободные программы для 
новых задач. Загляните на <a
+href="/help/"> http://www.gnu.org/help</a> за предложениями 
того, как
+помочь. Если вы хотите заказать что-то, на 
это есть ссылка с домашней
+страницы. Если вы хотите почитать о 
философских вопросах, загляните в
+/philosophy. Если вы ищете свободные программы 
для пользования, загляните в
+/directory, где сейчас перечислено около 
1900&nbsp;пакетов (это только часть
+всех свободных программ, какие есть). 
Пожалуйста, пишите новые программы и
+передавайте нам. Мой сборник очерков, 
&ldquo;Свободные программы и свободное
+общество&rdquo;, находится в продаже, и его 
можно приобрести на <a
+href="http://www.gnu.org/";>www.gnu.org</a>. Всего доброго!</p>
+
+<ol>
+<li id="foot-1">Гай Стил составил первоначальный 
симметричный набор команд Emacs; потом мы с
+ним начали реализовывать Emacs (на базе TECO), 
но после одной длительной
+совместной сессии разработки Стил начал 
отходить, так что Emacs заканчивал
+я. Другие, в частности, Юджин Чиччарелли и 
Майк Мак-Магон, внесли свой вклад
+значительно позднее.</li>
+
+<li id="foot-2">Берни Гринберг утверждает, что 
реализация Emacs Дана Уайнреба для
+машины-Лиспа вышла раньше реализации 
Гринберга для Multics. Я приношу
+извинения за эту ошибку.</li>
+
+<li id="foot-3">План Гринблэтта, насколько я 
понимаю, заключался в том, чтобы нанимать 
людей
+из лаборатории по совместительству, так 
что они могли продолжать работать в
+Лаборатории искусственного интеллекта. 
Symbolics вместо этого нанимала их на
+полный рабочий день, так что они 
прекращали работать в институте.</li>
+
+<li id="foot-4">Этот план основывался на том (в 
той речи я этого не сказал явно), что в
+начальный период бывшие хакеры 
Лаборатории искусственного интеллекта, 
как в
+Symbolics, так и в LMI, продолжали вносить свои 
изменения в систему
+машины-Лиспа института&nbsp;&mdash; хотя по 
контракту этого не
+требовалось. План Symbolics заключался в том, 
чтобы прервать это
+сотрудничество в одностороннем порядке.</li>
+
+<li id="foot-5">Не то чтобы меня особенно 
заботила судьба LMI, но я просто не хотел
+позволить Symbolics нажиться на своей агрессии 
по отношению к Лаборатории
+искусственного интеллекта.</li>
+
+<li id="foot-6">Из этого утверждения был неверно 
сделан вывод, что я никогда-никогда не
+заглядывал в программы Symbolics. В 
действительности здесь говорится, что я
+это делал, поначалу. Исходный текст Symbolics 
был доступен в институте, где
+я был вправе его читать, и сначала именно 
так я узнавал об их изменениях.
+
+<p>Но это значило, что я был вынужден 
предпринимать особые усилия, чтобы решать
+каждую задачу по-другому, чтобы избежать 
копирования программ
+Symbolics. Через некоторое время я сделал 
вывод, что лучше даже не
+смотреть. Так я мог писать программы каким 
угодно наилучшим образом, не
+оглядываясь на то, что могло быть в текстах 
Symbolics.</p></li>
+
+<li id="foot-7">Symbolics как-то раз выразила в 
институте протест, в котором говорилось, 
что
+моя работа, помешав их плану, стоила 
компании Symbolics миллион долларов.</li>
+
+<li id="foot-8">Я не возражаю, если очень сложная 
и громоздкая функция принимает
+аргументы-кодовые слова. Беспокоит меня 
случай, когда ими пользуются такие
+простые функции, как &ldquo;member&rdquo;.</li>
+</ol>
+
+
+<div style="font-size: small;">
+
+<!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->
+<h3>Примечания переводчиков</h3>
+<ol>
+<li id="tf1"><span lang="en" xml:lang="en">TECO, Text Editor and
+COrrector</span>&nbsp;&mdash; англ. текстовый редактор и 
корректор.</li>
+<li id="tf2"><span lang="en" xml:lang="en">TCL, Tool
+Command Language</span>&nbsp;&mdash; англ. 
инструментальный командный
+язык.</li>
+</ol></div>
+</div>
+
+<!-- for id="content", starts in the include above -->
+<!--#include virtual="/server/footer.ru.html" -->
+<div id="footer">
+
+<p>Пожалуйста, присылайте общие запросы 
фонду и GNU по адресу <a
+href="mailto:address@hidden";>&lt;address@hidden&gt;</a>. Есть также <a
+href="/contact/">другие способы связаться</a> с 
фондом. Отчеты о
+неработающих ссылках и другие поправки 
или предложения можно присылать по
+адресу <a href="mailto:address@hidden";>&lt;address@hidden&gt;</a>.</p>
+
+<p>
+<!-- TRANSLATORS: Ignore the original text in this paragraph,
+        replace it with the translation of these two:
+
+        We work hard and do our best to provide accurate, good quality
+        translations.  However, we are not exempt from imperfection.
+        Please send your comments and general suggestions in this regard
+        to <a href="mailto:address@hidden";>
+
+        &lt;address@hidden&gt;</a>.</p>
+
+        <p>For information on coordinating and submitting translations of
+        our web pages, see <a
+        href="/server/standards/README.translations.html">Translations
+        README</a>. -->
+Мы старались сделать этот перевод точным и 
качественным, но исключить
+возможность ошибки мы не можем. 
Присылайте, пожалуйста, свои замечания и
+предложения по переводу по адресу <a
+href="mailto:address@hidden";>&lt;address@hidden&gt;</a>.
+</p><p>Сведения по координации и 
предложениям переводов наших статей см. в
+<a href="/server/standards/README.translations.html">&ldquo;Р
уководстве по
+переводам&rdquo;</a>.</p>
+
+<!-- Regarding copyright, in general, standalone pages (as opposed to
+     files generated as part of manuals) on the GNU web server should
+     be under CC BY-ND 3.0 US.  Please do NOT change or remove this
+     without talking with the webmasters or licensing team first.
+     Please make sure the copyright date is consistent with the
+     document.  For web pages, it is ok to list just the latest year the
+     document was modified, or published.
+     
+     If you wish to list earlier years, that is ok too.
+     Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
+     years, as long as each year in the range is in fact a copyrightable
+     year, i.e., a year in which the document was published (including
+     being publicly visible on the web or in a revision control system).
+     
+     There is more detail about copyright years in the GNU Maintainers
+     Information document, www.gnu.org/prep/maintain. -->
+<p>Copyright &copy; 2003, 2007, 2013 Free Software Foundation, Inc.</p>
+
+<p>Это произведение доступно по <a rel="license"
+href="http://creativecommons.org/licenses/by-nd/3.0/us/deed.ru";>лицензии
+Creative Commons Attribution-NoDerivs (<em>Атрибуция&nbsp;&mdash; 
Без
+производных произведений</em>) 3.0 США</a>.</p>
+
+<!--#include virtual="/server/bottom-notes.ru.html" -->
+<div class="translators-credits">
+
+<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
+<em>Внимание! В подготовке этого перевода 
участвовал только один человек. Вы
+можете существенно улучшить перевод, если 
проверите его и расскажете о
+найденных ошибках в <a
+href="http://savannah.gnu.org/projects/www-ru";>русской группе 
переводов
+gnu.org</a>.</em></div>
+
+
+ <p><!-- timestamp start -->
+Обновлено:
+
+$Date: 2013/02/28 05:29:35 $
+
+<!-- timestamp end -->
+</p>
+</div>
+</div>
+</body>
+</html>

Index: po/rms-lisp.ru-en.html
===================================================================
RCS file: po/rms-lisp.ru-en.html
diff -N po/rms-lisp.ru-en.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ po/rms-lisp.ru-en.html      28 Feb 2013 05:29:36 -0000      1.1
@@ -0,0 +1,590 @@
+<!--#include virtual="/server/header.html" -->
+<!-- Parent-Version: 1.72 -->
+<title>My Lisp Experiences and the Development of GNU Emacs
+- GNU Project - Free Software Foundation</title>
+<!--#include virtual="/server/banner.html" -->
+<!--#include virtual="/gnu/po/rms-lisp.translist" -->
+<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>
+
+<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.
+Since I've done enough things in my career connected with Lisp I
+should be able to say something interesting.</p>
+
+<p>My first experience with Lisp was when I read the Lisp 1.5 manual
+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
+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>
+
+<p>I began doing work on a real Lisp implementation with JonL White
+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>
+
+<p>During the 1970s, before my life became politicized by horrible
+events, I was just going along making one extension after another for
+various programs, and most of them did not have anything to do with
+Lisp. But, along the way, I wrote a text editor, Emacs. The
+interesting idea about Emacs was that it had a programming language,
+and the user's editing commands would be written in that interpreted
+programming language, so that you could load new commands into your
+editor while you were editing. You could edit the programs you were
+using and then go on editing with them. So, we had a system that was
+useful for things other than programming, and yet you could program it
+while you were using it. I don't know if it was the first one of
+those, but it certainly was the first editor like that.</p>
+
+<p>This spirit of building up gigantic, complicated programs to use in
+your own editing, and then exchanging them with other people, fueled
+the spirit of free-wheeling cooperation that we had at the AI Lab
+then. The idea was that you could give a copy of any program you had
+to someone who wanted a copy of it. We shared programs to whomever
+wanted to use them, they were human knowledge. So even though there
+was no organized political thought relating the way we shared software
+to the design of Emacs, I'm convinced that there was a connection
+between them, an unconscious connection perhaps. I think that it's the
+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 <abbr>PDP</abbr>-10
+Assembler. The interpreter we wrote in that actually wasn't written
+for Emacs, it was written for <acronym title="Text Editor and
+COrrector">TECO</acronym>. 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
+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
+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
+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
+names. Actually, there were some rather sophisticated facilities; I
+think that Lisp got its unwind-protect facility
+from <acronym>TECO</acronym>.</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
+able to write large programs in it anyway. The obvious lesson was that
+a language like <acronym>TECO</acronym>, which wasn't designed to be a
+programming language, was the wrong way to go. The language that you
+build your extensions on shouldn't be thought of as a programming
+language in afterthought; it should be designed as a programming
+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
+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
+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
+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
+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
+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
+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
+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
+parts of the editor were built-in Lisp facilities. Those would be
+whatever parts we felt we had to optimize. This was a technique that
+we had already consciously practiced in the original Emacs, because
+there were certain fairly high level features which we re-implemented
+in machine language, making them into <acronym>TECO</acronym>
+primitives. For instance, there was a <acronym>TECO</acronym>
+primitive to fill a paragraph (actually, to do most of the work of
+filling a paragraph, because some of the less time-consuming parts of
+the job would be done at the higher level by a <acronym>TECO</acronym>
+program). You could do the whole job by writing
+a <acronym>TECO</acronym> program, but that was too slow, so we
+optimized it by putting part of it in machine language. We used the
+same idea here (in the hybrid technique), that most of the editor
+would be written in Lisp, but certain parts of it that had to run
+particularly fast would be written at a lower level.</p>
+
+<p>Therefore, when I wrote my second implementation of Emacs, I
+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,
+inserting leading text, reading and writing files, redisplaying the
+buffer on the screen, managing editor windows.</p>
+
+<p>Now, this was not the first Emacs that was written in C and ran on
+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 <abbr>MIT</abbr>. Someone wanted to port it to run on Twenex &mdash; it
+originally only ran on the Incompatible Timesharing System we used
+at <abbr>MIT</abbr>. They ported it to Twenex, which meant that there
+were a few hundred installations around the world that could
+potentially use it. We started distributing it to them, with the rule
+that &ldquo;you had to send back all of your improvements&rdquo; so we
+could all benefit. No one ever tried to enforce that, but as far as I
+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
+in and make the program better. But after that he seemed to change the
+spirit, and sold it to a company.</p>
+
+<p>At that time I was working on the GNU system (a free software
+Unix-like operating system that many people erroneously call
+&ldquo;Linux&rdquo;).  There was no free software Emacs editor that ran
+on Unix. I did, however, have a friend who had participated in
+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
+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>
+
+<p>I concluded I couldn't use it and had to replace it all, the first
+step of which was to write an actual Lisp interpreter. I gradually
+adapted every part of the editor based on real Lisp data structures,
+rather than ad hoc data structures, making the data structures of the
+internals of the editor exposable and manipulable by the user's Lisp
+programs.</p>
+
+<p>The one exception was redisplay. For a long time, redisplay was
+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
+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
+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 <abbr>MIT</abbr>, 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 <abbr>MIT</abbr> 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>
+
+<p>At the time, you could make a computer that was about the same price
+range as other computers that weren't meant for Lisp, except that it
+would run Lisp much faster than they would, and with full type checking
+in every operation as well. Ordinary computers typically forced you to
+choose between execution speed and good typechecking.  So yes, you could
+have a Lisp compiler and run your programs fast, but when they tried to
+take <tt>car</tt> 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 car instruction would
+do data typechecking &mdash; so when you tried to get the car 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
+the microcode. People became interested in manufacturing them, which
+meant they should start a company.</p>
+
+<p>There were two different ideas about what this company should be
+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>.
+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
+wouldn't work.</p>
+
+<p>Why did he want to avoid outside investment? Because when a company
+has outside investors, they take control and they don't let you have
+any scruples. And eventually, if you have any scruples, they also
+replace you as the manager.</p>
+
+<p>So Greenblatt had the idea that he would find a customer who would
+pay in advance to buy the parts. They would build machines and deliver
+them; with profits from those parts, they would then be able to buy
+parts for a few more machines, sell those and then buy parts for a
+larger number of machines, and so on. The other people in the group
+thought that this couldn't possibly work.</p>
+
+<p>Greenblatt then recruited Russell Noftsker, the man who had hired
+me, who had subsequently left the AI Lab and created a successful
+company.  Russell was believed to have an aptitude for business. He
+demonstrated this aptitude for business by saying to the other people
+in the group, &ldquo;Let's ditch Greenblatt, forget his ideas, and
+we'll make another company.&rdquo; Stabbing in the back, clearly a
+real businessman. Those people decided they would form a company
+called Symbolics. They would get outside investment, not have
+scruples, and do everything possible to win.</p>
+
+<p>But Greenblatt didn't give up. He and the few people loyal to him
+decided to start Lisp Machines Inc. anyway and go ahead with their
+plans. And what do you know, they succeeded! They got the first
+customer and were paid in advance. They built machines and sold them,
+and built more machines and more machines. They actually succeeded
+even though they didn't have the help of most of the people in the
+group. Symbolics also got off to a successful start, so you had two
+competing Lisp machine companies. When Symbolics saw that LMI was not
+going to fall flat on its face, they started looking for ways to
+destroy it.</p>
+
+<p>Thus, the abandonment of our lab was followed by &ldquo;war&rdquo;
+in our lab.  The abandonment happened when Symbolics hired away all
+the hackers, except me and the few who worked at LMI part-time. Then
+they invoked a rule and eliminated people who worked part-time
+for <abbr>MIT</abbr>, so they had to leave entirely, which left only
+me. The AI lab was now helpless.  And <abbr>MIT</abbr> had made a very
+foolish arrangement with these two companies.  It was a three-way
+contract where both companies licensed the use of Lisp machine system
+sources. These companies were required to let <abbr>MIT</abbr> use
+their changes. But it didn't say in the contract that <abbr>MIT</abbr>
+was entitled to put them into the <abbr>MIT</abbr> 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
+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 <abbr>MIT</abbr> Lisp machine system. Instead, we'll give you
+access to Symbolics' Lisp machine system, and you can run it, but
+that's all you can do.&rdquo;</p>
+
+<p>This, in effect, meant that they demanded that we had to choose a
+side, and use either the <abbr>MIT</abbr> version of the system or the
+Symbolics version.  Whichever choice we made determined which system
+our improvements went to. If we worked on and improved the Symbolics
+version, we would be supporting Symbolics alone. If we used and
+improved the <abbr>MIT</abbr> version of the system, we would be doing
+work available to both companies, but Symbolics saw that we would be
+supporting LMI because we would be helping them continue to exist. So
+we were not allowed to be neutral anymore.</p>
+
+<p>Up until that point, I hadn't taken the side of either company,
+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
+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
+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
+release, I did too.</p>
+
+<p>In this way, for two years, I prevented them from wiping out Lisp
+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
+building a new community to replace the one that their actions and
+others had wiped out.</p>
+
+<p>The Lisp community in the 70s was not limited to
+the <abbr>MIT</abbr> AI Lab, and the hackers were not all
+at <abbr>MIT</abbr>. The war that Symbolics started was what wiped
+out <abbr>MIT</abbr>, but there were other events going on then. There
+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
+only way that people could work together and share was with a free
+operating system.</p>
+
+<p>At first, I thought of making a Lisp-based system, but I realized
+that wouldn't be a good idea technically. To have something like the
+Lisp machine system, you needed special purpose microcode. That's what
+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
+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
+the Lisp machine.</p>
+
+<p>I decided instead to make a Unix-like operating system that would
+have Lisp implementations to run as user programs. The kernel wouldn't
+be written in Lisp, but we'd have Lisp. So the development of that
+operating system, the GNU operating system, is what led me to write
+the GNU Emacs. In doing this, I aimed to make the absolute minimal
+possible Lisp implementation. The size of the programs was a
+tremendous concern.</p>
+
+<p>There were people in those days, in 1985, who had one-megabyte
+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
+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
+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
+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>.
+They don't seem quite Lispy
+to me; I'll do it sometimes but I minimize the times when I do
+that.</p>
+
+<p>That was not the end of the GNU projects involved with Lisp. Later
+on around 1995, we were looking into starting a graphical desktop
+project. It was clear that for the programs on the desktop, we wanted
+a programming language to write a lot of it in to make it easily
+extensible, like the editor. The question was what it should be.</p>
+
+<p>At the time, <acronym title="Tool Command Language">TCL</acronym>
+was being pushed heavily for this purpose. I had a very low opinion
+of <acronym>TCL</acronym>, basically because it wasn't Lisp. It looks
+a tiny bit like Lisp, but semantically it isn't, and it's not as
+clean.  Then someone showed me an ad where Sun was trying to hire
+somebody to work on <acronym>TCL</acronym> to make it the
+&ldquo;de-facto standard extension language&rdquo; of the world. And I
+thought, &ldquo;We've got to stop that from happening.&rdquo; So we
+started to make Scheme the standard extensibility language for
+GNU. Not Common Lisp, because it was too large. The idea was that we
+would have a Scheme interpreter designed to be linked into
+applications in the same way <acronym>TCL</acronym> was linked into
+applications. We would then recommend that as the preferred
+extensibility package for all GNU programs.</p>
+
+<p>There's an interesting benefit you can get from using such a
+powerful language as a version of Lisp as your primary extensibility
+language.  You can implement other languages by translating them into
+your primary language. If your primary language
+is <acronym>TCL</acronym>, you can't very easily implement Lisp by
+translating it into <acronym>TCL</acronym>. But if your primary
+language is Lisp, it's not that hard to implement other things by
+translating them. Our idea was that if each extensible application
+supported Scheme, you could write an implementation
+of <acronym>TCL</acronym> or Python or Perl in Scheme that translates
+that program into Scheme. Then you could load that into any
+application and customize it in your favorite language and it would
+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
+developer, put my language into your application, not his
+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
+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
+touch. So that's the plan we have for the future.</p>
+
+<p>I haven't been speaking about free software, but let me briefly
+tell you a little bit about what that means. Free software does not
+refer to price; it doesn't mean that you get it for free. (You may
+have paid for a copy, or gotten a copy gratis.) It means that you have
+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
+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
+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
+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
+to make it easier for you to live in freedom, to cooperate.</p>
+
+<p>This is a matter of the freedom to cooperate. We're used to
+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
+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>
+
+<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
+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>
+
+<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),
+but after one long joint development session, Steele began drifting
+away, so I finished Emacs.  Others particularly including Eugene
+C. Cicciarelli and Mike McMahon contributed substantially later
+on.</li>
+
+<li id="foot-2">Bernie Greenberg says that Dan Weinreb's
+implementation of Emacs for the Lisp Machine came before Greenberg's
+implementation for Multics.  I apologize for the mistake.</li>
+
+<li id="foot-3">Greenblatt's plan, as I understood it, was to hire lab
+people part time, so that they could continue working at the AI Lab.
+Symbolics hired them full time instead, so they stopped working at
+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
+contract did not require this.  Symbolics' plan was to rupture this
+cooperation unilaterally.</li>
+
+<li id="foot-5">It was not that I cared particularly about the fate of
+LMI, but rather I did not want to let Symbolics gain through its
+aggression against the AI Lab.</li>
+
+<li id="foot-6">This statement has been misconstrued as saying that I
+never, ever looked at Symbolics' code.  Actually it says I did look,
+at first.  The Symbolics source code was available at MIT, where I was
+entitled to read it, and at first that's how I found out about their
+changes.
+
+<p>But that meant I had to make a special effort to solve each problem
+differently, in order to avoid copying Symbolics code.  After a while,
+I concluded it was better not to even look.  That way I could write
+code in whatever way was best, without concern for what might be in
+Symbolics' code.</p></li>
+
+<li id="foot-7">Symbolics at one point protested to MIT that my work,
+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>
+</ol>
+
+</div><!-- for id="content", starts in the include above -->
+<!--#include virtual="/server/footer.html" -->
+<div id="footer">
+
+<p>Please send general FSF &amp; GNU inquiries to
+<a href="mailto:address@hidden";>&lt;address@hidden&gt;</a>.
+There are also <a href="/contact/">other ways to contact</a>
+the FSF.  Broken links and other corrections or suggestions can be sent
+to <a href="mailto:address@hidden";>&lt;address@hidden&gt;</a>.</p>
+
+<p><!-- TRANSLATORS: Ignore the original text in this paragraph,
+        replace it with the translation of these two:
+
+        We work hard and do our best to provide accurate, good quality
+        translations.  However, we are not exempt from imperfection.
+        Please send your comments and general suggestions in this regard
+        to <a href="mailto:address@hidden";>
+        &lt;address@hidden&gt;</a>.</p>
+
+        <p>For information on coordinating and submitting 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
+of this article.</p>
+
+<!-- Regarding copyright, in general, standalone pages (as opposed to
+     files generated as part of manuals) on the GNU web server should
+     be under CC BY-ND 3.0 US.  Please do NOT change or remove this
+     without talking with the webmasters or licensing team first.
+     Please make sure the copyright date is consistent with the
+     document.  For web pages, it is ok to list just the latest year the
+     document was modified, or published.
+     
+     If you wish to list earlier years, that is ok too.
+     Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
+     years, as long as each year in the range is in fact a copyrightable
+     year, i.e., a year in which the document was published (including
+     being publicly visible on the web or in a revision control system).
+     
+     There is more detail about copyright years in the GNU Maintainers
+     Information document, www.gnu.org/prep/maintain. -->
+
+<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/3.0/us/";>Creative
+Commons Attribution-NoDerivs 3.0 United States License</a>.</p>
+
+<!--#include virtual="/server/bottom-notes.html" -->
+
+<p>Updated:
+<!-- timestamp start -->
+$Date: 2013/02/28 05:29:36 $
+<!-- timestamp end -->
+</p>
+</div>
+</div>
+</body>
+</html>



reply via email to

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