summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/ru/rms-lisp.html
diff options
context:
space:
mode:
Diffstat (limited to 'talermerchantdemos/blog/articles/ru/rms-lisp.html')
-rw-r--r--talermerchantdemos/blog/articles/ru/rms-lisp.html613
1 files changed, 613 insertions, 0 deletions
diff --git a/talermerchantdemos/blog/articles/ru/rms-lisp.html b/talermerchantdemos/blog/articles/ru/rms-lisp.html
new file mode 100644
index 0000000..2a5fdab
--- /dev/null
+++ b/talermerchantdemos/blog/articles/ru/rms-lisp.html
@@ -0,0 +1,613 @@
+<!--#set var="ENGLISH_PAGE" value="/gnu/rms-lisp.en.html" -->
+
+<!--#include virtual="/server/header.ru.html" -->
+<!-- Parent-Version: 1.77 -->
+
+<!-- This file is automatically generated by GNUnited Nations! -->
+<title>Мой опыт работы с Лиспом и развитие GNU Emacs - Проект GNU - Фонд свободного
+программного обеспечения</title>
+
+<!--#include virtual="/gnu/po/rms-lisp.translist" -->
+<!--#include virtual="/server/banner.ru.html" -->
+<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; каким
+бы приложением они ни пользовались, оно приходит с одним языком, и у них нет
+другого выхода. Но когда у вас мощный язык, который может реализовывать
+другие языки, переводя с них, то вы предоставляете пользователю выбор языка,
+и нам больше не приходится вести войну языков. Именно это, как мы надеемся,
+сделает Guile, наш интерпретатор 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 class="translators-notes">
+
+<!--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">
+<div class="unprintable">
+
+<p>Пожалуйста, присылайте общие запросы фонду и GNU по адресу <a
+href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Есть также <a
+href="/contact/">другие способы связаться</a> с фондом. Отчеты о
+неработающих ссылках и другие поправки или предложения можно присылать по
+адресу <a href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&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:web-translators@gnu.org">
+
+ &lt;web-translators@gnu.org&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:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>.
+</p><p>Сведения по координации и предложениям переводов наших статей см. в
+<a href="/server/standards/README.translations.html">&ldquo;Руководстве по
+переводам&rdquo;</a>.</p>
+</div>
+
+<!-- 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 4.0. 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, 2014, 2020 Free Software Foundation, Inc.</p>
+
+<p>Это произведение доступно по <a rel="license"
+href="http://creativecommons.org/licenses/by-nd/4.0/deed.ru">лицензии
+Creative Commons Attribution-NoDerivs (<em>Атрибуция&nbsp;&mdash; Без
+производных произведений</em>) 4.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 class="unprintable"><!-- timestamp start -->
+Обновлено:
+
+$Date: 2020/07/01 17:02:57 $
+
+<!-- timestamp end -->
+</p>
+</div>
+</div>
+</body>
+</html>