taler-merchant-demos

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

rms-lisp.html (57978B)


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