taler-merchant-demos

Python-based Frontends for the Demonstration Web site
Log | Files | Refs | Submodules | README | LICENSE

rms-lisp.html (61506B)


      1 <!--#set var="ENGLISH_PAGE" value="/gnu/rms-lisp.en.html" -->
      2 
      3 <!--#include virtual="/server/header.ru.html" -->
      4 <!-- Parent-Version: 1.96 -->
      5 <!-- This page is derived from /server/standards/boilerplate.html -->
      6 <!--#set var="TAGS" value="gnu-history" -->
      7 <!--#set var="DISABLE_TOP_ADDENDUM" value="yes" -->
      8 
      9 <!-- This file is automatically generated by GNUnited Nations! -->
     10 <title>Мой опыт работы с Лиспом и развитие GNU Emacs - Проект GNU - Фонд свободного
     11 программного обеспечения</title>
     12 <style type="text/css" media="print,screen"><!--
     13 a[href*='#foot-'] { font-size: .94em; }
     14 -->
     15 </style>
     16 
     17 <!--#include virtual="/gnu/po/rms-lisp.translist" -->
     18 <!--#include virtual="/server/banner.ru.html" -->
     19 <!--#include virtual="/gnu/gnu-breadcrumb.ru.html" -->
     20 <!--GNUN: OUT-OF-DATE NOTICE-->
     21 <!--#include virtual="/server/top-addendum.ru.html" -->
     22 <div class="article reduced-width">
     23 <h2>Мой опыт работы с Лиспом и развитие GNU Emacs</h2>
     24 
     25 <div class="infobox">
     26 <p>Запись речи Ричарда Столмена на Международной конференции по Лиспу, 28
     27 октября 2002.</p>
     28 </div>
     29 <hr class="thin" />
     30 
     31 <p>Поскольку ни одна из моих обычных речей не имеет никакого отношения к Лиспу,
     32 ни одна из них не подходит для сегодняшнего выступления. Так что мне
     33 придется импровизировать. Поскольку в своей профессиональной деятельности
     34 мне доводилось выполнять довольно много работы, связанной с Лиспом, у меня,
     35 должно быть, есть что порассказать.</p>
     36 
     37 <p>Моя первая встреча с Лиспом произошла, когда я прочел руководство по
     38 Лисп&nbsp;1.5 в старших классах. Именно тогда меня поразила идея, что может
     39 быть такой язык программирования. Возможность сделать что-нибудь на Лиспе
     40 впервые появилась у меня, когда я был на младших курсах в Гарварде и писал
     41 интерпретатор Лиспа для PDP-11. Это была очень маленькая машина&nbsp;&mdash;
     42 в ней было что-то вроде 8k памяти,&mdash; и мне удалось написать
     43 интерпретатор длиной в тысячу команд. Это оставляло мне немного места для
     44 данных. Это было до того, как я узнал, как выглядят настоящие программы,
     45 которые выполняют настоящие системные задачи.</p>
     46 
     47 <p>Я начал выполнять работы над настоящей реализацией Лиспа с Джоном-Л Уайтом,
     48 как только я начал работать в Массачусетском техническом институте. Туда
     49 меня принял не Джон-Л, а Расселл Нофтскер, что было в высшей степени
     50 парадоксально, если учесть то, что случилось впоследствии&nbsp;&mdash; он,
     51 должно быть, сильно об этом пожалел.</p>
     52 
     53 <p>В семидесятые годы XX&nbsp;века, до того, как моя жизнь политизировалась в
     54 результате ужасных событий, я просто делал одно расширение различных
     55 программ за другим, и большинство из них не имело никакого отношения к
     56 Лиспу. Но попутно я писал текстовый редактор, Emacs. Интересная мысль,
     57 заложенная в Emacs, состояла в том, что в нем был язык программирования, и
     58 пользовательские команды редактирования писались на этом интерпретируемом
     59 языке программирования, так что во время редактирования в редактор можно
     60 было загружать новые команды. Можно было подредактировать программы,
     61 которыми пользуешься, а потом продолжать редактировать ими. Итак, у нас была
     62 система, полезная не для программирования, и все-таки во время пользования
     63 ею можно было программировать. Я не знаю, была ли это первая такая система,
     64 но это определенно был первый такой редактор.</p>
     65 
     66 <p>Эта атмосфера построения гигантских, сложных программ для применения в своем
     67 собственном редактировании, а затем обмена ими с другими людьми, питала дух
     68 нестесненного сотрудничества, который царил тогда в Лаборатории
     69 искусственного интеллекта. Идея была в том, что можно передать копию
     70 программы, которая у тебя есть, тому, кому она нужна. Мы обменивались
     71 программами со всеми, кто только хотел ими пользоваться, программы были
     72 человеческим знанием. Так что, хотя и не было организованной политической
     73 мысли, связывающей то, как мы обменивались программами, с устройством Emacs,
     74 я убежден, что между ними была связь&nbsp;&mdash; возможно, неосознанная. Я
     75 думаю, что именно природа нашего образа жизни в Лаборатории искусственного
     76 интеллекта привела к созданию Emacs и сделала его таким, каким он был.</p>
     77 
     78 <p>В первоначальном Emacs Лиспа не было. Языком низкого уровня&nbsp;&mdash;
     79 неинтерпретируемым языком&nbsp;&mdash; был ассемблер PDP-10. Интерпретатор,
     80 который мы писали, на самом деле писался не для Emacs, он писался для
     81 TECO&nbsp;<a href="#tf1">(1)</a>. Это был наш текстовый редактор и крайне
     82 уродливый язык программирования, настолько уродливый, насколько это только
     83 возможно. Причина была в том, что он не был спроектирован как язык
     84 программирования, он был спроектирован как язык редактора и команд. Были
     85 такие команды, как <code>5l</code>, что означало <code>передвинуться на пять
     86 строк</code>, или <code>i</code> с последующим текстом и <kbd>ESC</kbd> для
     87 того, чтобы вставить этот текст. Можно было набрать строку, которая была
     88 последовательностью команд, это называлось командной строкой. Она
     89 завершалась символами <kbd>ESC</kbd> <kbd>ESC</kbd>, и тогда
     90 последовательность выполнялась.</p>
     91 
     92 <p>Ну, люди хотели дополнить этот язык средствами программирования, так что они
     93 добавили некоторые такие средства. Например, одной из первых была добавлена
     94 конструкция цикла, это были <code>&lt;</code> <code>&gt;</code>. Ими
     95 окружали команды, и это был цикл. Были другие непонятные команды, которыми
     96 можно было пользоваться для условного выхода из цикла. При создании Emacs
     97 мы&nbsp;<a href="#foot-1">[1]</a> добавили возможность создания подпрограмм
     98 с именами. До того это было вроде Бейсика, в именах подпрограмм могло быть
     99 только по одной букве. Писать на этом большие программы было трудно, так что
    100 мы дописали программу, чтобы у них могли быть более длинные имена. На самом
    101 деле там были довольно замысловатые средства; по-моему, средство
    102 &ldquo;unwind-protect&rdquo; Лисп заимствовал из TECO.</p>
    103 
    104 <p>Мы начали закладывать довольно замысловатые средства, и у всех у них был
    105 уродливейший синтаксис, какой только можно придумать, и это
    106 работало&nbsp;&mdash; люди все равно были в состоянии писать на этом крупные
    107 программы. Очевидным уроком было то, что такой язык, как TECO, который не
    108 был спроектирован как язык программирования,&mdash; это был неверный
    109 путь. Язык, на котором вы строите свои расширения, должен задумываться как
    110 язык программирования не задним числом; его следует проектировать как язык
    111 программирования. Фактически, мы обнаружили, что лучшим языком
    112 программирования для этих целей был Лисп.</p>
    113 
    114 <p>Это открыл Берни Гринберг&nbsp;<a href="#foot-2">[2]</a>. Он написал версию
    115 Emacs на MacLisp в Multics, и он писал свои программы на MacLisp
    116 прямолинейным манером. Сам редактор был полностью написан на Лиспе. Emacs
    117 для Multics имел большой успех&nbsp;&mdash; программирование новых команд
    118 редактирования было таким удобным, что даже секретарши в его конторе начали
    119 учиться пользованию им. Они пользовались руководством, которое кто-то
    120 написал и в котором было показано, как дополнять Emacs, но там не
    121 говорилось, что это программирование. Так что секретарш, которые думали, что
    122 не могут программировать, это не отпугивало. Они читали руководство,
    123 обнаруживали, что могут делать что-то полезное, и учились программировать.</p>
    124 
    125 <p>Так что Берни понял, что приложение&mdash; программа, которая делает что-то
    126 полезное для вас&nbsp;&mdash; внутри которого был Лисп и которое вы можете
    127 дополнять, переписывая программы на Лиспе,&mdash; на самом деле очень
    128 хороший способ научиться программировать. Это дает людям возможность писать
    129 небольшие программы, которые для них полезны, чего в большинстве областей
    130 вы, наверное, не можете. Они могут получать поощрение от практической пользы
    131 для них самих на стадии, где это труднее всего&nbsp;&mdash; когда они не
    132 думают, что могут программировать,&mdash; пока они не дойдут до точки, в
    133 которой они уже стали программистами.</p>
    134 
    135 <p>В этот момент люди начали размышлять, как получить что-то вроде этого на
    136 платформе, где у них не было полнофункциональной реализации Лиспа. У MacLisp
    137 для Multics был как компилятор, так и интерпретатор&nbsp;&mdash; это была
    138 полностью оснащенная система Лисп&nbsp;&mdash; но люди хотели реализовать
    139 что-то подобное на других системах, где у них не было уже написанного
    140 компилятора Лиспа. Ну, если у вас нет компилятора Лиспа, вы не можете
    141 написать весь редактор на Лиспе&nbsp;&mdash; он был бы слишком медленным,
    142 особенно перерисовка, если бы пришлось выполнять Лисп на интерпретаторе. Так
    143 что мы разработали гибридную технику. Идея состояла в том, чтобы писать
    144 интерпретатор Лиспа и низкоуровневые части редактора вместе, так что части
    145 редактора были встроенными средствами Лиспа. Это были бы любые части, в
    146 оптимизации которых мы ощущали необходимость. Это была техника, которую мы
    147 уже сознательно практиковали в первоначальном Emacs, потому что были
    148 определенные весьма высокоуровневые функции, которые мы перереализовали на
    149 машинном языке, переделав их в примитивы TECO. Например, был примитив TECO
    150 для заполнения абзаца (на самом деле для основной работы по заполнению
    151 абзаца, потому что некоторые из наименее ресурсоемких частей работы
    152 выполнялись на более высоком уровне программой TECO). Можно было выполнять
    153 всю работу, написав программу на TECO, но она была слишком медленной, так
    154 что мы оптимизировали ее, перенеся часть ее на машинный язык. Здесь (в
    155 гибридной технике) мы воспользовались той же идеей: большая часть редактора
    156 будет написана на Лиспе, но определенные его части, которые нужно было
    157 выполнять особенно быстро, будут написаны на низком уровне.</p>
    158 
    159 <p>Таким образом, когда я писал свою вторую реализацию Emacs, я следовал такого
    160 же рода схеме. Язык низкого уровня больше не был машинным языком, это был
    161 Си. Си был хорошим, эффективным языком для переносимых программ,
    162 предназначенных для выполнения в операционной системе типа Unix. Там был
    163 интерпретатор Лиспа, но я реализовал средства для решения специальных задач
    164 редактирования прямо на Си&nbsp;&mdash; сюда входили манипуляция буферами
    165 редактора, вставка текста в начало, чтение и запись файлов, перерисовка
    166 буфера на экране, управление окнами редактора.</p>
    167 
    168 <p>Так вот, это был не первый Emacs, написанный на Си и работавший в
    169 Unix. Первый был написан Джеймсом Гослингом, его называли GosMacs. С ним
    170 вышла странная история. Вначале он, казалось, находился под влиянием той же
    171 самой атмосферы обмена и сотрудничества первоначального Emacs. Я сначала
    172 выпускал первоначальный Emacs для людей в Массачусетском техническом
    173 институте. Кое-кто захотел перенести его на Twenex&nbsp;&mdash; сначала
    174 редактор работал только в Несовместимой системе разделения времени, которой
    175 мы пользовались в институте. Они перенесли его на Twenex, это означало, что
    176 в мире было несколько сотен вычислительных систем, в которых его
    177 потенциально можно было применять. Мы начали распространять его среди них с
    178 правилом &ldquo;вы должны присылать назад все свои улучшения&rdquo;, чтобы
    179 мы все могли извлекать из этого пользу. Никто никогда не пытался следить за
    180 соблюдением этого, но насколько я знаю, люди действительно сотрудничали.</p>
    181 
    182 <p>И Гослинг, на первых порах, казалось, принимал в этом участие. Он написал
    183 руководство, в котором он называл эту программу Emacs в надежде, что другие
    184 члены сообщества будут улучшать ее, пока она не заслужит этого названия. Это
    185 был верный подход к сообществу&nbsp;&mdash; просить их присоединиться и
    186 улучшать программу. Но после этого его отношение, кажется, изменилось, и он
    187 продал программу одной компании.</p>
    188 
    189 <p>В это время я работал над системой GNU (свободной операционной системой типа
    190 Unix, которую многие ошибочно называют &ldquo;Linux&rdquo;). Свободного
    191 редактора Emacs, который работал бы в Unix, не было. Однако был у меня
    192 знакомый, который участвовал в разработке Emacs Гослинга. Гослинг передал
    193 ему, по электронной почте, разрешение распространять его собственную
    194 версию. Он предложил мне воспользоваться этой версией. Тогда я обнаружил,
    195 что в Emacs Гослинга не было настоящего Лиспа. В нем был язык
    196 программирования, известный как &ldquo;mocklisp&rdquo;, он синтаксически
    197 выглядит как Лисп, но в нем нет структур данных Лиспа. Так что программы не
    198 были данными и не хватало жизненно важных элементов Лиспа. Его структурами
    199 данных были строки, числа и некоторые другие специализированные объекты.</p>
    200 
    201 <p>Я пришел к выводу, что не могу воспользоваться этим, и был вынужден заменить
    202 это все, и первым шагом было написание настоящего интерпретатора Лиспа. Я
    203 постепенно перебазировал каждую часть редактора на настоящие структуры
    204 данных Лиспа взамен написанных по случаю структур данных, создав возможность
    205 вывода внутренних структур данных редактора и манипуляций ими в
    206 пользовательских программах на Лиспе.</p>
    207 
    208 <p>Единственным исключением была перерисовка. Долгое время перерисовка была
    209 своего рода другим миром. Редактор вступал в мир перерисовки, и все начинало
    210 проводиться над совершенно особыми структурами данных, для которых не было
    211 безопасной сборки мусора, не было безопасных прерываний, и в это время
    212 нельзя было выполнять никаких программ на Лиспе. С тех пор мы это
    213 изменили&nbsp;&mdash; сейчас можно выполнять программы на Лиспе во время
    214 перерисовки. Это очень удобно.</p>
    215 
    216 <p>Эта вторая программа Emacs была &ldquo;свободной программой&rdquo; в
    217 современном смысле этого слова&nbsp;&mdash; она была частью открытой
    218 политической кампании за освобождение программ. Сущность этой кампании
    219 состояла в том, что всякий должен быть волен делать то, что мы в старые
    220 времена делали в Массачусетском техническом институте, работая вместе над
    221 программами и работая со всеми, кто только желал работать с нами. Это было
    222 основой движения за свободное программное обеспечение&nbsp;&mdash; опыт моей
    223 жизни в Лаборатории искусственного интеллекта&nbsp;&mdash; работать над
    224 человеческим знанием и не стоять ни у кого на пути к дальнейшему применению
    225 и дальнейшему распространению человеческого знания.</p>
    226 
    227 <p>В это время можно было сделать компьютер, который стоил примерно столько же,
    228 сколько другие компьютеры, не предназначенные для Лиспа, но он выполнял бы
    229 Лисп гораздо быстрее, чем они, и при этом с полной проверкой типов на каждой
    230 операции. Обычные компьютеры, как правило, вынуждали выбирать между
    231 скоростью выполнения и хорошей проверкой типов. Так что, конечно, можно было
    232 получить компилятор Лиспа и быстро выполнять программы, но когда они
    233 пытались взять <code>car</code> от числа, это приводило к бессмысленным
    234 результатам и в конце концов когда-нибудь приводило к сбою.</p>
    235 
    236 <p>Машина-Лисп была в состоянии выполнять команды почти так же быстро, как те
    237 другие машины, но каждая команда... команда <code>car</code> выполняла
    238 проверку типов&nbsp;&mdash; так что когда вы пытались взять <code>car</code>
    239 от числа в скомпилированной программе, это немедленно давало ошибку. Мы
    240 построили машину, и у нас была для нее операционная система Лиспа. Она почти
    241 полностью была написана на Лиспе, за исключением только частей, записанных в
    242 микрокоде. Возник интерес к производству машин, это означало, что нужно
    243 создать компанию.</p>
    244 
    245 <p>Было два разных представления о том, какой должна быть эта
    246 компания. Гринблэтт хотел создать то, что он называл &ldquo;хакерской&rdquo;
    247 компанией. Это означало, что это была бы компания под управлением хакеров и
    248 работающая благоприятным для хакеров образом. Другой целью была поддержка
    249 культуры Лаборатории искусственного интеллекта&nbsp;<a
    250 href="#foot-3">[3]</a>. К сожалению, у Гринблэтта не было никакого делового
    251 опыта, так что другие люди из группы машины-Лиспа говорили, что они
    252 сомневаются в том, что он сможет это сделать. Они думали, что избежать
    253 внешних капиталовложений, как он планировал, не удастся.</p>
    254 
    255 <p>Но почему он хотел избежать внешних капиталовложений? Потому что когда у
    256 компании есть внешние вкладчики, они берут контроль в свои руки и не
    257 позволяют вам быть щепетильным; а если вы сколько-нибудь щепетильны, то они
    258 в конце концов поставят на руководящую должность кого-нибудь другого.</p>
    259 
    260 <p>Так что у Гринблэтта была мысль, что он найдет клиента, который заплатит за
    261 комплектующие вперед. Они собрали бы машины и поставили их ему; извлекая
    262 таким образом доход из этих комплектующих, они смогли бы купить
    263 комплектующие еще для нескольких машин, продать их, а потом купить
    264 комплектующие для большего числа машин и так далее. Другие люди из группы
    265 думали, что так работать не получится.</p>
    266 
    267 <p>Гринблэтт привлек Расселла Нофтскера, человека, который нанял меня, а в
    268 последствии ушел из Лаборатории искусственного интеллекта и создал
    269 прибыльную компанию. Считалось, что у Расселла есть деловая хватка. Он
    270 продемонстрировал эту деловую хватку, сказав людям в группе: &ldquo;Давайте
    271 бросим Гринблэтта и забудем о его идеях; а мы создадим другую
    272 компанию&rdquo;. Ударил в спину, совсем как настоящий предприниматель. Эти
    273 люди решили сформировать компанию под названием &ldquo;Symbolics&rdquo;,
    274 привлекать внешний капитал, не быть щепетильными и делать все возможное,
    275 чтобы победить.</p>
    276 
    277 <p>Но Гринблэтт не отступил. Он и немногие лояльные по отношению к нему люди
    278 решили все равно образовать Lisp Machines Inc. и работать по своему плану. И
    279 что бы вы думали? Им это удалось! У них появился первый клиент, и им
    280 заплатили вперед. Они собирали машины, продавали их и собирали еще и еще. В
    281 конце концов они встали на ноги, несмотря на то, что большинство людей в
    282 группе им не помогало. Компания Symbolics также начала успешную
    283 деятельность, так что было две конкурирующих компании, производящих
    284 машины-Лиспы. Когда в Symbolics поняли, что LMI и не думает вылетать в
    285 трубу, они стали искать способы разрушить ее.</p>
    286 
    287 <p>Таким образом, за уходом из нашей лаборатории последовала
    288 &ldquo;война&rdquo; в нашей лаборатории. Уход произошел, когда компания
    289 Symbolics переманила всех хакеров, кроме меня и тех немногих, кто по
    290 совместительству работал в LMI. Потом они установили правило и исключили
    291 тех, кто по совместительству работал в институте, так что им пришлось уйти
    292 полностью, и я остался один. Теперь Лаборатория искусственного интеллекта
    293 была беспомощна. А институт заключил с этими двумя компаниями одно очень
    294 глупое соглашение. Это был трехсторонний договор, в котором обе компании
    295 лицензировали исходные тексты системы машины-Лиспа. Эти компании должны были
    296 предоставлять свои изменения в пользование института. Но в договоре не
    297 говорилось, что институт вправе размещать их в системах своих машин-Лиспов,
    298 которые лицензировали обе компании. Никто не предвидел, что группу хакеров
    299 Лаборатории искусственного интеллекта разгонят, но так и случилось.</p>
    300 
    301 <p> Итак, в Symbolics созрел план&nbsp;<a href="#foot-4">[4]</a>. Они сказали
    302 лаборатории: &ldquo;Мы продолжим предоставлять в ваше пользование свои
    303 изменения в системе, но вам нельзя размещать их в системе машины-Лиспа
    304 института. Вместо этого мы предоставим вам доступ к системе машины-Лиспа
    305 Symbolics, и вы сможете работать на ней, но это все, что вы можете делать.</p>
    306 
    307 <p>Это фактически означало, что они потребовали от нас встать на ту или другую
    308 сторону и пользоваться либо версией института, либо версией Symbolics. Что
    309 бы мы ни выбрали, это определяло бы, в какую систему пойдут наши
    310 усовершенствования. Если бы мы работали над версией Symbolics и
    311 совершенствовали ее, мы поддерживали бы только Symbolics. Если бы мы
    312 пользовались версией института и совершенствовали ее, мы предоставляли бы
    313 работу в распоряжение обеих компаний, но в Symbolics понимали, что с нашей
    314 стороны это было бы поддержкой LMI, потому что мы помогали бы им продолжать
    315 существование. Так что нам не позволили оставаться нейтральными.</p>
    316 
    317 <p>Вплоть до этого момента я не принимал сторону ни одной из компаний, хотя мне
    318 было больно видеть, что произошло с нашим сообществом и программами. Но
    319 теперь компания Symbolics принуждала меня к этому. Итак, пытаясь помочь
    320 компании Lisp Machines Inc. удержаться на плаву&nbsp;<a
    321 href="#foot-5">[5]</a>, я начал дублировать все улучшения в системе
    322 машины-Лиспа, которые делали в Symbolics. Я писал эквивалентные улучшения
    323 сам (т.е. тексты программ были моими собственными).</p>
    324 
    325 <p>Через некоторое время&nbsp;<a href="#foot-6">[6]</a> я пришел к заключению,
    326 что было бы лучше всего, если бы я даже не заглядывал в их тексты.  Когда
    327 они делали объявление о выпуске предварительной версии, в котором было
    328 описание выпуска, я видел, какие там были функции, а потом реализовывал
    329 их. К тому времени, как они выпускали окончательную версию, я тоже выпускал
    330 такую версию.</p>
    331 
    332 <p>Таким образом в течение двух лет я не давал им покончить с LMI, и эти две
    333 компании продолжали работу. Но я не хотел тратить долгие годы на то, чтобы
    334 наказать кого-то, просто мешая злому делу. Я увидел, что они наказаны
    335 довольно основательно, потому что они наткнулись на конкуренцию, которая не
    336 уходила и не собиралась исчезать&nbsp;<a href="#foot-7">[7]</a>. Тем
    337 временем пришла пора начать обустройство нового сообщества взамен того,
    338 которое было уничтожено их действиями и действиями других.</p>
    339 
    340 <p>В семидесятых годах сообщество Лиспа не ограничивалось Лабораторией
    341 искусственного интеллекта Массачусетского технического института, и не все
    342 хакеры были в этом институте. Война, которую начала компания Symbolics,
    343 опустошила Массачусетский технический институт, но в то время происходили и
    344 другие события. Были люди, которые прекращали сотрудничество, и все это
    345 вместе опустошило наше сообщество, и от него почти ничего не осталось.</p>
    346 
    347 <p>Когда я прекратил наказывать Symbolics, мне пришлось придумывать, что делать
    348 дальше. Мне нужно было сделать свободную операционную систему, это было
    349 ясно&nbsp;&mdash; единственным способом дать людям совместно работать и
    350 обмениваться была свободная операционная система.</p>
    351 
    352 <p>Сперва я подумывал о создании системы на базе Лиспа, но я осознал, что с
    353 технической точки зрения это не хорошо. Чтобы получить что-то подобное
    354 системе машины-Лиспа, нужен микрокод специального назначения. Именно это
    355 позволяло выполнять программы так же быстро, как другие компьютеры выполняли
    356 свои программы, и при этом еще и пользоваться проверкой типов. Без этого все
    357 свелось бы к чему-то наподобие компиляторов Лиспа для других
    358 машин. Программы были бы быстрее, но они были бы нестабильны. Так вот, это
    359 допустимо, если выполнять одну программу на системе с разделением
    360 времени&nbsp;&mdash; если одна программа дает сбой, это не катастрофа, это
    361 нечто, что ваша программа время от времени делает. Но это делало ее
    362 недостаточно хорошей, чтобы писать на ней операционную систему, так что я
    363 отказался от мысли о том, чтобы сделать систему наподобие машины-Лиспа.</p>
    364 
    365 <p>Вместо этого я решил сделать операционную систему типа Unix, в которой были
    366 бы реализации Лиспа, чтобы выполнять пользовательские программы. Ядро было
    367 бы написано не на Лиспе, но Лисп у нас был бы. Так что именно разработка
    368 этой операционной системы, операционной системы GNU, привела меня к
    369 написанию GNU Emacs. В процессе этого я стремился сделать абсолютно
    370 минимально возможную реализацию Лиспа. Размер программ имел чрезвычайное
    371 значение.</p>
    372 
    373 <p>В то время, в&nbsp;1985&nbsp;году, были люди, у которых были одномегабайтные
    374 машины без виртуальной памяти. Они хотели быть в состоянии использовать GNU
    375 Emacs. Это значило, что мне нужно ограничивать программу как можно меньшим
    376 размером.</p>
    377 
    378 <p>Например, в то время единственной циклической конструкцией была
    379 <code>while</code>, которая была крайне проста. Не было никаких способов
    380 досрочного выхода из оператора <code>while</code>, приходилось просто
    381 пользоваться механизмом исключений или проверять переменную в цикле. Это
    382 показывает, как далеко я зашел в ограничениях на размер. У нас не было
    383 <code>caar</code>, <code>cadr</code> и так далее; &ldquo;выжать все
    384 возможное&rdquo;&nbsp;&mdash; таким духом был пропитан GNU Emacs и его Лисп
    385 с самого начала.</p>
    386 
    387 <p>Разумеется, машины сейчас больше, и мы уже так не делаем. Мы заложили
    388 <code>caar</code>, <code>cadr</code> и так далее, и сейчас при случае мы
    389 могли бы заложить другую циклическую конструкцию. Мы охотно расширим его в
    390 некоторых пределах, но мы не хотим расширять его до уровня Общего Лиспа. Я
    391 однажды реализовывал Общий Лисп на машине-Лиспе, и мне он не так уж
    392 понравился. Одна из вещей, которые мне ужасно не нравятся&nbsp;&mdash;
    393 аргументы-ключевые слова&nbsp;<a href="#foot-8">[8]</a>. На мой взгляд, это
    394 выглядит не совсем по-лисповски; иногда я пишу так, но я свожу к минимуму
    395 число случаев, когда я это делаю.</p>
    396 
    397 <p>На этом проекты GNU, связанные с Лиспом, не кончились. Впоследствии,
    398 примерно в&nbsp;1995&nbsp;году, мы размышляли над организацией проекта
    399 графической рабочей среды. Было ясно, что для программ среды нам нужен язык
    400 программирования, на котором была бы написана значительная ее часть, чтобы
    401 сделать ее легко расширяемой, как редактор. Встал вопрос о том, каким должен
    402 быть язык.</p>
    403 
    404 <p>В то время для этих целей усиленно продвигался TCL&nbsp;<a
    405 href="#tf2">(2)</a>. Я был очень невысокого мнения о TCL, в основном потому,
    406 что это был не Лисп. Он выглядел слегка похожим на Лисп, но семантически он
    407 им не был, и он был не таким ясным. Потом кто-то показал мне объявление, в
    408 котором компания Sun пыталась нанять кого-нибудь для работы над TCL, чтобы
    409 сделать его &ldquo;стандартом де-факто для языка расширений&rdquo; во всем
    410 мире. А я подумал: &ldquo;Нам нужно предотвратить это&rdquo;. Так что мы
    411 начали делать Scheme стандартным языком расширений GNU. Не Общий Лисп,
    412 потому что он был слишком велик. Идея была в том, что у нас будет
    413 интерпретатор Scheme, спроектированный для компоновки в приложения так же,
    414 как это делали с TCL. Тогда мы стали бы рекомендовать это как
    415 предпочтительный пакет расширений для всех программ GNU.</p>
    416 
    417 <p>Есть одна интересная выгода, которую можно извлечь из применения такого
    418 мощного языка, как вариант Лиспа, в качестве первичного языка расширений. Вы
    419 можете реализовывать другие языки переводом их на ваш первичный язык. Если
    420 ваш первичный язык&nbsp;&mdash; TCL, вы не можете легко реализовать Лисп
    421 переводом его на TCL. Но если ваш первичный язык&nbsp;&mdash; Лисп, то
    422 нетрудно реализовывать другие языки, переводя их. Наша идея состояла в том,
    423 что если бы каждое расширяемое приложение поддерживало Scheme, то вы могли
    424 бы написать реализацию TCL, Python или Perl на Scheme, которая переводит эту
    425 программу на Scheme. Тогда вы могли бы загружать ее в любое приложение и
    426 надстраивать его под свой любимый язык, и оно работало бы и с другими
    427 надстройками.</p>
    428 
    429 <p>До тех пор, пока языки расширения слабы, пользователям приходится применять
    430 только тот язык, который вы им предоставляете. Что означает, что людям,
    431 влюбленным в какой бы то ни было данный язык, приходится бороться за выбор
    432 разработчиков приложений&nbsp;&mdash; говоря разработчику приложения:
    433 &ldquo;Заложите, пожалуйста, в свое приложение мой язык, а не
    434 его&rdquo;. Тогда у пользователей вообще не будет выбора&nbsp;&mdash; каким
    435 бы приложением они ни пользовались, оно приходит с одним языком, и у них нет
    436 другого выхода. Но когда у вас мощный язык, который может реализовывать
    437 другие языки, переводя с них, то вы предоставляете пользователю выбор языка,
    438 и нам больше не приходится вести войну языков. Именно это, как мы надеемся,
    439 сделает Guile, наш интерпретатор Scheme. У нас есть человек, который этим
    440 летом работает над завершением транслятора с Python на Scheme. Я не знаю,
    441 полностью ли он завершен, но если кто-то заинтересован в этом проекте, пусть
    442 свяжется. Так что вот какие у нас планы на будущее.</p>
    443 
    444 <p>Я не говорил о свободном программном обеспечении, но позвольте мне кратко
    445 рассказать вам немного о том, что это означает. Выражение &ldquo;свободная
    446 программа&rdquo; подразумевает не стоимость; оно не означает, что вы
    447 получаете ее бесплатно. (Возможно, вы заплатили за копию или получили копию
    448 бесплатно.) Оно означает, что у вас как у пользователя есть
    449 свобода. Жизненно важно то, что вы вольны выполнять программу, вольны
    450 изучать, что она делает, вольны изменять ее под свои нужды, вольны
    451 перераспространять копии среди других и вольны публиковать улучшенные,
    452 расширенные версии. Вот что значит свободная программа. Если вы пользуетесь
    453 несвободной программой, вы утратили жизненно важную свободу, так что никогда
    454 этого не делайте.</p>
    455 
    456 <p>Назначение проекта GNU заключается в том, чтобы облегчить людям отказ от
    457 попирающих свободу, господствующих над пользователем, несвободных программ
    458 предоставлением свободных программ для их замены. Для тех, у кого нет
    459 моральных сил для отказа от несвободных программ, когда это означает
    460 какое-то практическое неудобство,&mdash; для них мы пытаемся дать свободную
    461 альтернативу, чтобы вы могли перейти к свободе с меньшими усилиями и
    462 меньшими жертвами в практическом смысле. Чем меньше жертвы, тем лучше. Мы
    463 хотим облегчить для вас сотрудничество и свободную жизнь.</p>
    464 
    465 <p>Сотрудничество&nbsp;&mdash; это вопрос свободы. Мы привыкли думать о свободе
    466 и сотрудничестве с обществом как о противоположностях. Но в данном случае
    467 они на одной стороне. При свободных программах вы вольны и сотрудничать с
    468 другими, и помогать самим себе. При несвободных программах кто-то доминирует
    469 над вами и разобщает людей. Вам не позволяют обмениваться с ними, вы не
    470 вольны сотрудничать или помогать обществу, точно так же, как вы не вольны
    471 помочь самим себе. Разобщенность и беспомощность&nbsp;&mdash; состояние
    472 пользователей, применяющих несвободные программы.</p>
    473 
    474 <p>Мы выработали умопомрачительное количество свободных программ. Мы сделали
    475 то, что, как утверждалось, мы никогда не сможем сделать; у нас есть две
    476 операционных системы из свободных программ. У нас есть множество приложений,
    477 и нам, очевидно, еще много предстоит пройти. Так что нам нужна ваша
    478 помощь. Я хотел бы попросить вас стать добровольцами проекта GNU; помогите
    479 нам разработать свободные программы для новых задач. Загляните на <a
    480 href="/help/">gnu.org/help</a> за предложениями того, как помочь. Если вы
    481 хотите заказать что-то, на это есть ссылка с домашней страницы. Если вы
    482 хотите почитать о философских вопросах, загляните в /philosophy. Если вы
    483 ищете свободные программы для пользования, загляните в /directory, где
    484 сейчас перечислено около 1900&nbsp;пакетов (это только часть всех свободных
    485 программ, какие есть). Пожалуйста, пишите новые программы и передавайте
    486 нам. Мой сборник очерков, &ldquo;Свободные программы и свободное
    487 общество&rdquo;, находится в продаже, и его можно приобрести на
    488 www.gnu.org. Всего доброго!</p>
    489 <div class="column-limit"></div>
    490 
    491 <h3 class="footnote">Примечания</h3>
    492 <ol>
    493 <li id="foot-1">Гай Стил составил первоначальный симметричный набор команд Emacs; потом мы с
    494 ним начали реализовывать Emacs (на базе TECO), но после одной длительной
    495 совместной сессии разработки Стил начал отходить, так что Emacs заканчивал
    496 я. Другие, в частности, Юджин Чиччарелли и Майк Мак-Магон, внесли свой вклад
    497 значительно позднее.</li>
    498 
    499 <li id="foot-2">Берни Гринберг утверждает, что реализация Emacs Дана Уайнреба для
    500 машины-Лиспа вышла раньше реализации Гринберга для Multics. Я приношу
    501 извинения за эту ошибку.</li>
    502 
    503 <li id="foot-3">План Гринблэтта, насколько я понимаю, заключался в том, чтобы нанимать людей
    504 из лаборатории по совместительству, так что они могли продолжать работать в
    505 Лаборатории искусственного интеллекта. Symbolics вместо этого нанимала их на
    506 полный рабочий день, так что они прекращали работать в институте.</li>
    507 
    508 <li id="foot-4">Этот план основывался на том (в той речи я этого не сказал явно), что в
    509 начальный период бывшие хакеры Лаборатории искусственного интеллекта, как в
    510 Symbolics, так и в LMI, продолжали вносить свои изменения в систему
    511 машины-Лиспа института&nbsp;&mdash; хотя по контракту этого не
    512 требовалось. План Symbolics заключался в том, чтобы прервать это
    513 сотрудничество в одностороннем порядке.</li>
    514 
    515 <li id="foot-5">Не то чтобы меня особенно заботила судьба LMI, но я просто не хотел
    516 позволить Symbolics нажиться на своей агрессии по отношению к Лаборатории
    517 искусственного интеллекта.</li>
    518 
    519 <li id="foot-6">Из этого утверждения был неверно сделан вывод, что я никогда-никогда не
    520 заглядывал в программы Symbolics. В действительности здесь говорится, что я
    521 это делал, поначалу. Исходный текст Symbolics был доступен в институте, где
    522 я был вправе его читать, и сначала именно так я узнавал об их изменениях.
    523 
    524 <p>Но это значило, что я был вынужден предпринимать особые усилия, чтобы решать
    525 каждую задачу по-другому, чтобы избежать копирования программ
    526 Symbolics. Через некоторое время я сделал вывод, что лучше даже не
    527 смотреть. Так я мог писать программы каким угодно наилучшим образом, не
    528 оглядываясь на то, что могло быть в текстах Symbolics.</p></li>
    529 
    530 <li id="foot-7">Symbolics как-то раз выразила в институте протест, в котором говорилось, что
    531 моя работа, помешав их плану, стоила компании Symbolics миллион долларов.</li>
    532 
    533 <li id="foot-8">Я не возражаю, если очень сложная и громоздкая функция принимает
    534 аргументы-кодовые слова. Беспокоит меня случай, когда ими пользуются такие
    535 простые функции, как &ldquo;member&rdquo;.</li>
    536 
    537 <li id="foot-9">В 2021 году эту книгу можно купить в магазине <a
    538 href="https://shop.fsf.org/books-docs/free-software-free-society-selected-essays-richard-m-stallman-3rd-edition">GNU
    539 Press</a>.</li>
    540 </ol>
    541 </div>
    542 
    543 <div class="translators-notes">
    544 
    545 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->
    546 <h3>Примечания переводчиков</h3>
    547 <ol>
    548 <li id="tf1"><span lang="en" xml:lang="en">TECO, Text Editor and
    549 COrrector</span>&nbsp;&mdash; англ. текстовый редактор и корректор.</li>
    550 <li id="tf2"><span lang="en" xml:lang="en">TCL, Tool
    551 Command Language</span>&nbsp;&mdash; англ. инструментальный командный
    552 язык.</li>
    553 </ol></div>
    554 </div>
    555 
    556 <!-- for id="content", starts in the include above -->
    557 <!--#include virtual="/server/footer.ru.html" -->
    558 <div id="footer" role="contentinfo">
    559 <div class="unprintable">
    560 
    561 <p>Пожалуйста, присылайте общие запросы фонду и GNU по адресу <a
    562 href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Есть также <a
    563 href="/contact/">другие способы связаться</a> с фондом. Отчеты о
    564 неработающих ссылках и другие поправки или предложения можно присылать по
    565 адресу <a href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.</p>
    566 
    567 <p>
    568 <!-- TRANSLATORS: Ignore the original text in this paragraph,
    569         replace it with the translation of these two:
    570 
    571         We work hard and do our best to provide accurate, good quality
    572         translations.  However, we are not exempt from imperfection.
    573         Please send your comments and general suggestions in this regard
    574         to <a href="mailto:web-translators@gnu.org">
    575 
    576         &lt;web-translators@gnu.org&gt;</a>.</p>
    577 
    578         <p>For information on coordinating and contributing translations of
    579         our web pages, see <a
    580         href="/server/standards/README.translations.html">Translations
    581         README</a>. -->
    582 Мы старались сделать этот перевод точным и качественным, но исключить
    583 возможность ошибки мы не можем. Присылайте, пожалуйста, свои замечания и
    584 предложения по переводу по адресу <a
    585 href="mailto:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>.
    586 </p><p>Сведения по координации и предложениям переводов наших статей см. в
    587 <a href="/server/standards/README.translations.html">&ldquo;Руководстве по
    588 переводам&rdquo;</a>.</p>
    589 </div>
    590 
    591 <!-- Regarding copyright, in general, standalone pages (as opposed to
    592      files generated as part of manuals) on the GNU web server should
    593      be under CC BY-ND 4.0.  Please do NOT change or remove this
    594      without talking with the webmasters or licensing team first.
    595      Please make sure the copyright date is consistent with the
    596      document.  For web pages, it is ok to list just the latest year the
    597      document was modified, or published.
    598      
    599      If you wish to list earlier years, that is ok too.
    600      Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
    601      years, as long as each year in the range is in fact a copyrightable
    602      year, i.e., a year in which the document was published (including
    603      being publicly visible on the web or in a revision control system).
    604      
    605      There is more detail about copyright years in the GNU Maintainers
    606      Information document, www.gnu.org/prep/maintain. -->
    607 <p>Copyright &copy; 2003, 2007, 2021, 2013, 2021 Free Software Foundation, Inc.</p>
    608 
    609 <p>Это произведение доступно по <a rel="license"
    610 href="http://creativecommons.org/licenses/by-nd/4.0/deed.ru">лицензии
    611 Creative Commons Attribution-NoDerivs (<em>Атрибуция&nbsp;&mdash; Без
    612 производных произведений</em>) 4.0 Всемирная</a>.</p>
    613 
    614 <!--#include virtual="/server/bottom-notes.ru.html" -->
    615 <div class="translators-credits">
    616 
    617 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
    618 <em>Внимание! В подготовке этого перевода участвовал только один человек. Вы
    619 можете существенно улучшить перевод, если проверите его и расскажете о
    620 найденных ошибках в <a
    621 href="http://savannah.gnu.org/projects/www-ru">русской группе переводов
    622 gnu.org</a>.</em></div>
    623 
    624 <p class="unprintable"><!-- timestamp start -->
    625 Обновлено:
    626 
    627 $Date: 2021/11/02 17:04:14 $
    628 
    629 <!-- timestamp end -->
    630 </p>
    631 </div>
    632 </div>
    633 <!-- for class="inner", starts in the banner include -->
    634 </body>
    635 </html>