Сьогодні майже всі далекі від програмування люди чули слово FORTRAN, а переважна більшість навіть найбільш малограмотних кодувальників знає абревіатуру BNF. У принципі, цих двох досягнень (а це справді Досягнення, коли створене тобою щось, від самого початку призначене для кваліфікованих спеціалістів, «переростає» всі професійні обмеження та стає частиною загальновживаної мови) цілком достатньо для того, щоб абсолютно законно привласнити Джону Бекусу титул «видатний», і, для завершення статті, перерахувати регалії великого розробника. Але це буде нецікаво. Ми спробуємо поговорити не стільки про самого Джона Бекуса, скільки про менш відомі його досягнення, про те, що ховається за фасадом буденних (а вони вже практично буденні) слів, таких як FORTRAN. Ба більше, - ми навіть згадаємо інструменти, за допомогою яких будь-який охочий може сьогодні відчути себе «в шкурі» Джона Бекуса початку 50-х років минулого століття.
Біографічна
«складова» статті буде скромною. Джон Бекус народився і виховувався в
благополучній заможній американській родині. Його відправили до престижної
школи і, як і багато дітей із благополучних заможних сімей, навчався геть
погано. Не побажав іти стопами батька (колись успішного хіміка), служив в
армії, у протиповітряній обороні, марно намагався вивчитися на лікаря, і
залишився на все життя вкрай незадоволеним медициною, його слова навіть стали
розхожою цитатою: «Я ненавидів їх. Їм не подобалося думати, в цьому медичному
училищі. Усе, що вони робили - це запам'ятовування. Там не можна було думати».
Двадцятирічному Джону Бекусу лікарі поставили важкий діагноз - пухлина мозку.
Результати першої операції виявилися не дуже вдалими, і через рік була друга.
До свого повноцінного повноліття (традиційно - 21 рік) Джон Бекус опинився
далеко не в найкращому моральному стані. Його приваблювала музика, але він не
був музикантом, і, як багато молодих людей його віку, просто хотів мати дуже
хороший музичний центр. Примітно, що в 1946 р. саме такого музичного центру,
якого хотів молодий Джон Бекус, не виробляв ніхто. До речі, шанувальники того,
що сьогодні називають «хай-енд», - зауважте: історія життя Джона Бекуса
доводить не просто право на існування найнеймовірніших апаратів, а загалом
спроможність самої ідеї ексклюзивної звукової техніки, бо якщо серед сотень
тисяч незадоволених досяжним на сьогодні рівнем буде хоч один Бекус - це
виправдовує все.
Саме завдяки
неможливості придбати бажане Бекус вирішив... навчитися створювати апаратуру
самостійно. Причому не просто «робити», а саме створювати, проектувати такою,
якою хотілося її бачити тільки йому. А для цього треба було знати радіотехніку,
тому вибір був очевидний - радіотехнічна школа. Там Джон Бекус стикається з
вельми непростою, але нудною (точніше, одноманітною в механізмі вирішення)
математичною задачею розрахунку амплітудно-частотної характеристики
підсилювача. Дивно, але це завдання захоплює юнака, і він вирішує зайнятися
математикою всерйоз. Ну а далі все просто: Колумбійський університет, випадкове
знайомство в 1949 р. з примітивним електромеханічним обчислювачем IBM SSEC
(Selective Sequence Electronic Calculator), що переросло в три роки роботи.
Саме тоді, у ці перші три роки програмування машини з довготривалою пам'яттю на
перфострічках, Бекус створює те, що сьогодні ми називаємо «плаваючою крапкою»,
а в ті часи називалося «масштабувальний фактор» і давало змогу оперувати
числами або надто великими, або надто малими для розрядної сітки машини. Наприкінці
1953 р. IBM випускає комп'ютер моделі 704 із вбудованою реалізацією
«масштабуючого фактора», уже званої «плаваючою точкою», і того ж року Бекус
пише доповідну записку своєму безпосередньому начальнику з проханням схвалити
створення мови програмування для цієї машини. Власне, з цього моменту і
починається відлік нової епохи - тієї самої, в якій ми з вами запускаємо наші
компілятори командного рядка або IDE і бадьоро стукаємо по клавішах, уявляючи
наші комп'ютери чимось, що здатне виконувати обрану нами мову програмування.
До речі, для
багатьох залежних від помилок любителів обурюватися жахливим дисбалансом між
вартістю CD-RW-диска і записаними на ньому програмами досвід Джона Бекуса -
єдине доступне позбавлення від залежності. І для «процедур» немає жодної
потреби намагатися за шалені гроші купити раритетні залишки комп'ютера моделі
704, які дивом збереглися, - симулятор трохи більш розвиненої моделі - IBM 709
- доступний усім охочим. Так само як і документація на абсолютно немислимі 25
тисяч рядків машинного коду, які і є компілятор FORTRAN. І спробуйте,
користуючись тільки симулятором (!), написати код і створити документацію
такого класу!
На жаль, у новій епосі, час якої вже не відраховує дні життя
Джона Бекуса, зовсім небагато хто знає про його пізні, порівняно з тими, що
зробили його знаменитим, роботи. У 1977 р., отримуючи найпрестижнішу нагороду
комп'ютерного світу, The ACM Turing Award, Бекус виголосив промову, кожна фраза
якої напрочуд актуальна і сьогодні. З першими ж словами виступу майже тридцятирічної давнини і зараз погодиться
будь-який програміст: «Традиційні мови програмування жахливо розростаються, але
не стають сильнішими. Спадкові дефекти на всіх базових рівнях призводять до
того, що мови стають одночасно «жирними» і «слабкими»: їхній примітивний стиль
«одна операція в один момент часу» успадковується від єдиного для всіх мов
предка - архітектури машини фон Неймана...». Ба більше, сама назва
тьюрінгівської лекції Бекуса багатьом здасться дивною: «Чи можна звільнити
програміста від фоннейманівського стилю? Функціональний стиль і визначена ним
алгебра програм». Про які ж спадкові дефекти архітектури говорив у 1977 р. Джон
Бекус?
Фоннейманівська
модель обчислювача утворена трьома фундаментальними елементами: вузлом обробки
(у сучасних термінах - центральним процесором), вузлом зберігання (оперативною
пам'яттю) і каналом передавання інформації, що їх з'єднує. По суті, всі сучасні
обчислювальні машини на апаратному рівні дуже близькі до цієї моделі. Бекус
називав цю спільність «машинами з операцією присвоювання» і стверджував, що в
ній від початку криється недосконалість через поділ обчислень на математично чисту
абстрактну частину (функції) та зобов'язану своїм існуванням реаліям апаратних
засобів «приземлену» частину присвоювань. Іншими словами, традиційний у
математиці запис
y = f(x)
в обчислювальній
техніці містить справді традиційну математичну частину праворуч від операції
присвоювання («=»), та решту, суто «комп'ютерну» частину (адже математичний
символ рівності та операція присвоювання - далеко не одне й те саме). Бекус
обґрунтовано вказував і доводив, що такий поділ коду є джерелом дуже високої
складності мов програмування, специфікації яких вимірюються сотнями і навіть
тисячами сторінок. Як альтернативу він запропонував дивовижний функціональний
стиль програмування - взагалі без змінних, тобто без операцій присвоювання і
без можливості присвоєння даним імен. У моделі Бекуса все програмування
будувалося на основі безлічі примітивних функцій і винятково гнучких способів
їх комбінування. Базових примітивних функцій для моделі Бекуса потрібно зовсім
мало - «+», додавання двох чисел, і «-» - віднімання. Перелік операцій
комбінування функцій також невеликий. Транспонування списків - це утворення
списку з пар із двох списків, наприклад, транспонування списків a, b, c і d, f,
e породжує список a,d, b,f, c,e. Комбінатор «α» застосовує вказану функцію до
кожного елемента списку, наприклад, α+a,d, b,f, c,e призводить до формування
списку a+d, b+f, c+e. Бінарний комбінатор «°» визначає композицію функцій, -
наприклад, операція f°g(x) еквівалентна f(g(x)). І, нарешті, комбінатор «/» дає
змогу вставляти бінарну (таку, що оперує двома операндами) функцію між
елементами списку - /-a, b, c, d призводить до виконання послідовності операцій
(a-(b-(c-d))).
Згодом із цих
ідей Джона Бекуса було сформовано те, що в сучасному функціональному
програмуванні заведено називати монадами станів (state monad), і на чому
ґрунтуються підсистеми вводу/виводу практично всіх мов функціонального
програмування.
Звичайно, не
варто забувати, що в тьюрінгівській промові Бекус говорив усе-таки про
складність мов програмування. Якщо ми звернемося до історії створення FORTRAN
авторства Бекуса, то знайдемо в цьому документі одне важливе доповнення: «...на
створення FORTRAN істотно вплинула економіка програмування в 1954 р.». Так, у
ті часи розробка складного компілятора зі складної на рівні специфікацій мови була
справді завданням, що вимагало такої видатної особистості, як Джон Бекус.
Але час іде.
Транслятори з дуже складних нефункціональних мов існують і працюють, до того ж
настільки непогано, що саме з їхньою допомогою створено гібрид
об'єктно-орієнтованої та функціональної мов OCAML (Objective CAML), на якому
реалізовано симулятор оригінальної системи функціонального програмування Джона
Бекуса.
Комп'ютерний огляд
Немає коментарів:
Дописати коментар