summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/uk/rms-lisp.html
diff options
context:
space:
mode:
Diffstat (limited to 'talermerchantdemos/blog/articles/uk/rms-lisp.html')
-rw-r--r--talermerchantdemos/blog/articles/uk/rms-lisp.html590
1 files changed, 590 insertions, 0 deletions
diff --git a/talermerchantdemos/blog/articles/uk/rms-lisp.html b/talermerchantdemos/blog/articles/uk/rms-lisp.html
new file mode 100644
index 0000000..080cc4d
--- /dev/null
+++ b/talermerchantdemos/blog/articles/uk/rms-lisp.html
@@ -0,0 +1,590 @@
+<!--#set var="ENGLISH_PAGE" value="/gnu/rms-lisp.en.html" -->
+
+<!--#include virtual="/server/header.uk.html" -->
+<!-- Parent-Version: 1.77 -->
+
+<!-- This file is automatically generated by GNUnited Nations! -->
+<title>Мій досвід роботи з Лsспом і розвиток GNU Emacs - Проект GNU - Фонд вільного
+програмного забезпечення</title>
+
+<!--#include virtual="/gnu/po/rms-lisp.translist" -->
+<!--#include virtual="/server/banner.uk.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>Я почав виконувати роботи над справжньою реалізацією Ліспа з Джоном-Л Уайтом
+відразу, коли мене прийняли у <abbr title="Massachusetts Institute of
+Technology">MIT</abbr>. Туди мене прийняв не Джон-Л, а Расселл Нофтскер, що
+було вельми іронічно з огляду на те, що трапилося згодом&nbsp;&mdash; він,
+вірогідно, сильно про це шкодував.</p>
+
+<p>У сімдесяті роки XX&nbsp;століття, до того, як моє життя в політизувалося
+внаслідок жахливих подій, я просто робив одне розширення одних програм за
+іншими, і більшість з них не мали жодного стосунку до Ліспа. Але водночас я
+писав текстовий редактор Emacs. Цікава думка, закладена в Emacs, полягала в
+тому, що в ньому була мова програмування, і користувацькі команди
+редагування писалися на цій інтерпретованій мові програмування, тому під час
+редагування у редактор можна було завантажувати нові команди. Можна було
+підредагувати програми, якими користуєшся, а потім продовжувати редагувати
+ними. Отже, у нас була система, корисна не для програмування, і все-таки під
+час користування нею можна було програмувати. Я не знаю, чи це була перша
+така система, але це точно був перший такий редактор.</p>
+
+<p>Ця атмосфера побудови гігантських, складних програм для застосування в
+своєму власному редагуванні, а потім обміну ними з іншими людьми, живила дух
+вільної співпраці, який панував тоді в Лабораторії штучного інтелекту. Ідея
+була в тому, що можна передати копію програми, що в тебе є, тому, кому вона
+потрібна. Ми обмінювалися програмами з усіма, хто тільки хотів ними
+користуватися, програми були людським знанням. Отож, хоча і не було
+організованої політичної думки, яка б поєднувала те, як ми обмінювалися
+програмами зі облаштуванням Emacs, я переконаний, що між ними був
+зв'язок&nbsp;&nbsp; можливо, неусвідомлений. Я думаю, що саме природа нашого
+способу життя в Лабораторії штучного інтелекту привела до створення Emacs і
+зробила його таким, яким він був.</p>
+
+<p>У первісному Emacs Ліспа не було. Мовою низького рівня&nbsp;&mdash;
+неітерпретованою мовою&nbsp;&nbsp; був асемблер 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;&nbsp; люди
+все одно були у змозі писати на цьому великі програми. Очевидним уроком було
+те, що така мова, як TECO, неспроектована як мова програмування,&mdash; є
+хибним шляхом. Мова, на якій ви будуєте свої розширення, повинна
+замислюватися як мова програмування не заднім числом; її відразу слід
+проектувати як мову програмування. Фактично, ми виявили, що найкращою мовою
+програмування для цих цілей був Лісп.</p>
+
+<p>Це відкрив Берні Грінберг&nbsp;<a href="#foot-2">(2)</a>. Він написав версію
+Emacs на MacLisp в Multics, і він писав свої програми на MacLisp
+прямолінійним методом. Сам редактор був повністю написаний на Ліспі. Emacs
+для Multics мав великий успіх&nbsp;&nbsp; програмування нових команд
+редагування було таким зручним, що навіть секретарки в його конторі почали
+навчання користуванню ним. Вони користувалися посібником, яке хтось написав
+і в якому було показано, як доповнювати Emacs, але там не говорилося, що це
+програмування. Тому секретарок, які думали, що не можуть програмувати, це не
+відлякувало. Вони читали посібник, виявляли, що можуть робити щось корисне,
+і вчилися програмувати.</p>
+
+<p>Отож, Берні зрозумів, що застосунок &mdash; програма, яка робить щось
+корисне для вас&nbsp;&nbsp; всередині якої був Лісп і яку ви можете
+доповнювати, переписуючи програми на Ліспі,&mdash; насправді дуже хороший
+спосіб навчитися програмувати. Це дає людям можливість писати невеликі
+програми, які для них корисні, чого в більшості областей ви напевно не
+можете. Вони можуть отримувати заохочення від практичної користі для них
+самих на стадії, де це найважче&nbsp;&mdash; коли вони не думають, що можуть
+програмувати,&mdash; поки вони не дійдуть до точки, в якої вони вже стали
+програмістами.</p>
+
+<p>У цей момент люди почали міркувати, як отримати щось подібне на платформі,
+де у них не було повної реалізації Ліспа. У MacLisp для Multics був
+компілятор та інтерпретатор&nbsp;&mdash; це була повністю оснащена система
+Лісп&nbsp;&mdash; але людям кортілося впровадити подібне на інших системах,
+де у них не було вже написаного компілятора Ласпа. Ну, якщо у вас немає
+компілятора Ласпа, ви не можете написати весь редактор на Ліспі&nbsp;&mdash;
+він був би занадто повільним, особливо перемальовування, якщо б довелося
+виконувати Лисп на інтерпретаторі. Таким чином, ми розробили гібридну
+техніку. Ідея полягала в тому, щоб писати інтерпретатор Ліспа і
+низькорівневі частині редактора разом, тоді частини редактора ставали
+вбудованими засобами Ліспа. Це були б будь-які частини, в оптимізації яких
+ми відчували необхідність. Цю методику ми вже свідомо практикували у
+первісному Emacs, тому що були певні вельми високорівневі функції, які ми
+перереалізували на машинній мові, переробивши їх на примітиви
+TECO. Наприклад, був примітив TECO для заповнення абзацу (насправді для
+основної роботи із заповнення абзацу, тому що деякі з найменш ресурсомістких
+частин роботи виконувалися на вищому рівні програмою TECO). Можна було
+виконувати всю роботу, написавши програму на TECO, але вона була занадто
+повільною, так що ми оптимізували її, переносячи частину її на машинну
+мову. Тут (в гібридної техніки) ми скористалися тією ж ідеєю: велика частина
+редактора буде написана на Ліспі, але певні його частини, які потрібно було
+виконувати особливо швидко, будуть написані на низькому рівні.</p>
+
+<p>Таким чином, коли я писав свою другу реалізацію Emacs, я дотримувався цієї
+схеми. Мова низького рівня більше не була машинною мовою, це був Сі. Сі
+виявилася доброю, ефективною мовою для переносних програм, призначених для
+виконання у операційних системах на кшталт Unix. Там був інтерпретатор
+Ліспа, але я реалізував засоби для вирішення спеціальних завдань редагування
+безпоередньо на Сі&nbsp;&nbsp; сюди входили маніпуляція буферами редактора,
+вставка тексту на початок, читання і запис файлів, оновлення буфера на
+екрані, управління вікнами редактора.</p>
+
+<p>Доречі це був не перший Emacs, написаний на Сі і працював в Unix. Перший був
+написаний Джеймсом Гослінгом, його називали GosMacs. З них вийшла дивна
+історія. Спочатку він, здавалося, перебував під впливом тієї ж самої
+атмосфери обміну і співробітництва початкового Emacs. Я спочатку випускав
+початковий Emacs для людей в Массачусетському технологічному
+інституті. Дехто захотів перенести його на Twenex&nbsp;&nbsp; спочатку
+редактор працював тільки у Несумісній системі поділу часу, якою ми
+користувалися в інституті. Вони перенесли його на Twenex, це означало, що в
+світі було кілька сотень обчислювальних систем, в яких потенційно можна було
+його застосовувати. Ми почали поширення серед них із правилом &ldquo; ви
+повинні надсилати назад свої поліпшення&rdquo;, щоб ми всі могли отримувати
+з цього користь. Ніхто ніколи не намагався стежити за дотриманням цього, але
+наскільки я знаю, люди дійсно співпрацювали.</p>
+
+<p>І Гослінг, на перших порах, здавалося, брав у цьому участь. Він написав
+підручник, в якому він називав цю програму Emacs, сподіваючися, що інші
+члени співтовариства будуть покращувати її, поки вона не заслугожить цієї
+назви. Це був правильний підхід до спільноти&nbsp;&nbsp; просити їх
+приєднатися і поліпшувати програму. Але після цього його ставлення,
+здається, змінилося, і він продав програму одній компанії.</p>
+
+<p>В цей час я працював над системою GNU (вільною операційною системою типу
+Unix, яку багато хто помилково називає &ldquo;Linux&rdquo;). Вільного
+редактора Emacs, який працював би в Unix, не існувало. Проте був у мене
+знайомий, який брав участь у розробці Emacs Гослінга. Гослінг передав йому,
+по електронній пошті, дозвіл поширювати його власну версію. Він запропонував
+мені скористатися цією версією. Тоді я виявив, що в Emacs Гослінга не було
+справжнього Ліспа. В ньому була мова програмування, відома як
+&ldquo;mocklisp&rdquo;, він синтаксично виглядає як Лисп, але у ньому немає
+структур даних Лиспа. Тому програми не були даними і не вистачало життєво
+важливих елементів Ліспа. Його структурами даних були рядки, числа і деякі
+інші спеціалізовані об'єкти.</p>
+
+<p>Я прийшов до висновку, що не можу скористатися цим, і був змушений замінити
+це все. Першим кроком було написання справжнього інтерпретатора Ліспа. Я
+поступово перебазував кожну частину редактора на справжні структури даних
+Ліспа замість написаних так-собі структур даних, створивши можливість
+виведення внутрішніх структур даних редактора і маніпуляцій ними у
+користувацьких програмах на Ліспі.</p>
+
+<p>Єдиним винятком було відображення на дисплеї. Довгий час оновлення на
+дисплеї було іншим світом. Редактор вступав у світ перемальовування, і все
+починало проводитися над абсолютно особливими структурами даних, для яких не
+було безпечного збору сміття, не було безпечних переривань, і в цей час не
+можна було виконувати ніяких програм на Ліспі. З тих пір ми це
+змінили&nbsp;&nbsp; зараз можна виконувати програми на Ліспі під час
+перемальовування. Це дуже зручно.</p>
+
+<p>Ця друга програма Emacs була &ldquo;вільною програмою&rdquo; сучасному
+розумінні цього слова&nbsp;&mdash; вона була частиною відкритої політичної
+кампанії за звільнення програм. Сутність цієї кампанії полягала в тому, що
+кожен має право вільно робити те, що ми у старі часи робили в
+Массачусетському технологічному інституті, працюючи разом над програмами і
+працюючи з усіма, хто тільки бажав працювати з нами. Це стало основою руху
+за вільне програмне забезпечення&nbsp;&nbsp; на основі досвіду мого життя в
+Лабораторії штучного інтелекту&nbsp;&nbsp; працюйте над людським знанням і
+не стовбичте ні в кого на шляху до подальшого застосування та подальшого
+поширення людського знання.</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;&nbsp; єдиним способом дати людям спільно працювати і обмінюватися
+була вільна операційна система.</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;&nbsp; таким духом був просякнутий
+GNU Emacs і його Лісп з самого початку.</p>
+
+<p>Зрозуміло, машин зараз більше і ми вже так не робимо. Ми заклали
+&ldquo;caar&rdquo;, &ldquo;cadr&rdquo; і так далі, і зараз при нагоді ми
+могли б закласти іншу циклічну конструкцію. Ми охоче розширимо його в деяких
+межах, але ми не хочемо розширювати його до рівня Загального Ліспа. Я одного
+разу реалізовував Загальний Лісп на машині-Ліспі, і мені він не так вже
+сподобався. Одна з речей, які мені страшенно не подобаються&nbsp;&nbsp;
+аргументи-ключові слова&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;&nbsp; TCL, ви не можете легко впровадити Лісп
+переведенням його на TCL. Але якщо ваш первинна мова&nbsp;&nbsp; Лісп, то
+неважко реалізовувати інші мови, переводячи їх. Наша ідея полягала в тому,
+що якщо б кожний відкритий додаток підтримував Scheme, то ви могли б
+написати реалізацію TCL, Python або Perl на Scheme, яка переводить цю
+програму на Scheme. Тоді ви могли б завантажувати її в будь-який додаток і
+надбудовувати його під свою улюблену мову і він працював би і з іншими
+надбудовами.</p>
+
+<p>До тих пір, поки мови розширення слабкі, користувачам доводиться
+застосовувати тільки ту мову, яку ви їм надаєте. Що означає, що людям,
+залюбленим, в яку б то не було дану мову, доводиться боротися за вибір
+розробників додатків&nbsp;&nbsp; кажучи розробнику програми:
+&ldquo;Закладіть, будь ласка, в свій додаток мою мову, а не
+його&rdquo;. Тоді у користувачів взагалі не буде вибору&nbsp;&nbsp; яким би
+додатком вони не користувалися, він приходить з однією мовою, і у них немає
+іншого виходу. Але коли у вас потужна мова, яка може реалізовувати інші
+мови, переводячи з них, то ви надаєте користувачеві вибір мови, і нам більше
+не доводиться вести війну мов. Саме це, як ми сподіваємося, зробить Guile,
+наш інтерпретатор Scheme. У нас є людина, яка цього літа працює над
+завершенням транслятора з Python на Scheme. Я не знаю, чи повністю він
+завершений, але якщо хтось зацікавлений у цьому проекті, нехай
+зв'яжеться. Ось такі у нас плани на майбутнє.</p>
+
+<p>Я не говорив про вільне програмне забезпечення, але дозвольте мені коротко
+розповісти вам трохи про те, що це означає. Вираз &ldquo;вільна
+програма&rdquo; передбачає не вартість; воно не означає, що ви отримаєте її
+безкоштовно. (Можливо, ви заплатили за копію або отримали копію
+безкоштовно.) Воно означає, що у вас як у користувача є свобода. Життєво
+важливо те, що ви вільні виконувати програму, вільні вивчати, що вона
+робить, можете змінювати її під свої потреби, вільні перерозповсюджувати
+копії серед інших і вільні публікувати поліпшені, розширені версії. Ось що
+означає вільна програма. Якщо ви користуєтеся невільною програмою, то ви
+втратили життєво важливу свободу, тому ніколи цього не робіть.</p>
+
+<p>Призначення проекту GNU полягає в тому, щоб полегшити людям відмову від
+зневажаючих свободу, пануючих над користувачем невільних програм наданням
+вільних програм для їхньої заміни. Для тих, у кого немає моральних сил для
+відмови від невільних програм, коли це означає яку-небудь практичну
+незручність,&mdash; для них ми намагаємося дати вільну альтернативу, щоб ви
+могли перейти до свободи з меншими зусиллями і меншими жертвами в
+практичному сенсі. Чим менші жертви, тим краще. Ми хочемо полегшити для вас
+співпрацю і вільне життя.</p>
+
+<p>Співпраця&nbsp;&mdash; це питання свободи. Ми звикли думати про свободу і
+співпрацю з товариством як про протилежності. Але в даному випадку вони на
+одній стороні. При вільних програмах ви вільні співпрацювати з іншими і
+допомагати самим собі. При невільних програмах хтось домінує над вами і
+роз'єднує людей. Вам не дозволяють обмінюватися з ними, ви не вільні
+співпрацювати або допомагати суспільству, точно так само, як ви не вільні
+допомогти самим собі. Роз'єднаність і безпорадність&nbsp;&nbsp; стан
+користувачів, які застосовують невільні програми.</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;&nbsp; хоча за контрактом цього не
+вимагалося. План 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.-->
+ </div>
+</div>
+
+<!-- for id="content", starts in the include above -->
+<!--#include virtual="/server/footer.uk.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 Фонд вільного програмного
+забезпечення, Inc.</p>
+
+<p>Ця сторінка доступна на умовах <a rel="license"
+href="http://creativecommons.org/licenses/by-nd/4.0/deed.uk"> ліцензії
+Creative Commons Attribution-NoDerivatives (<em>Із зазначенням
+авторства&nbsp;&mdash; Без похідних творів</em>) 4.0 Міжнародна</a>.</p>
+
+<!--#include virtual="/server/bottom-notes.uk.html" -->
+<div class="translators-credits">
+
+<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
+Підтримка українського перекладу: Андрій Бандура
+(andriykopanytsia@gmail.com)</div>
+
+<p class="unprintable"><!-- timestamp start -->
+Оновлено:
+
+$Date: 2020/07/04 09:00:35 $
+
+<!-- timestamp end -->
+</p>
+</div>
+</div>
+</body>
+</html>