logo search
Вступ до спец

5.6. Розбіжності Нового Світу

В Америці Алгол-60 зустріли прохолодно. Могутня організація SHARE споживачів комп’ютерів фірми IBM перекинулася на сторону Фортрану. Виявилося, що Алгол важко реалізувати.

Європейці одразу прийняли Алгол. Подібно до того, як міністерство оборони США надало рішучу підтримку Коболу, незалежна дослідницька рада ФРН та інші урядові організації західноєвропейських країн підтримали Алгол. Завдяки ним Алгол розповсюдився від Великої Британії до Радянського Союзу. Деякі із спроб реалізації Алголу закінчилися невдачею, але багато компіляторів виявилися вдалими, і незабаром Алгол був визнаний мовою європейських програмістів.

У Радянському Союзі одразу ж після перших публікацій з Алголу-60 почалися роботи зі створення компіляторів для найпоширенішої та наймогутнішої на той час ЕОМ М-20. Оскільки ці роботи мали дуже велике значення для становлення вітчизняних шкіл системного програмування, про них слід розповісти докладніше.

На початку 60-х років в країні були три колективи програмістів, які були здатні вирішити непросту задачу написання компілятора з мови високого рівня. Перший розташовувався на батьківщині машини М-20 – в ІТМ і ОТ Академії Наук і очолювався Святославом Сергійовичем Лавровим. Враховуючи обмежені можливості пам’яті ЕОМ (всього 4096 слів) автори компілятора вирішили спростити завдання, відмовившись від рекурсії та деяких інших, важких для реалізації, властивостей Алголу. Одначе їх транслятор ТА-1, випущений вже у 1962 році, вийшов достатньо ефективним та швидкодіючим, він достатньо широко використовувався у багатьох організаціях європейської частини Союзу.

Другий колектив працював в Інституті прикладної математики АН СРСР, туди був розподілений майже весь перший випуск учнів А.А.Ляпунова, що закінчили у 1954 році механіко-математичний факультет МГУ за фахом «Програмування». Під керівництвом М.Р. Шура-Бури та Едуарда Зіновьєвіча Любімського вони зважилися на реалізацію повної версії Алголу. Весною 1963 року компілятор був готовий, він справлявся з найскладнішими прикладами рекурсивних алгоритмів, але платою за це були гірша швидкодія компілятора та невисока ефективність коду.

Третій колектив сформувався у новосибірському Академмістечку, куди у 1960 році вслід за А.А.Ляпуновим переїхав 28-річний А.П. Ершов, який організував відділ програмування в Обчислювальному центрі Сибірського відділення АН СРСР. Молодіжна команда Єршова зважилася на розробку першого у світі оптимізуючого компілятора із запропонованої ними мови Альфа, яка являла собою Алгол без рекурсій, але проте була розширена комплексними числами та матричними операціями. В результаті закінчений до 1965 року Альфа-транслятор вийшов вельми зручним та ефективним, він широко використовувався при написанні різноманітних програм на М‑20, особливо в сибірських ВНЗ та НДІ.

У США справи йшли інакше. Зрозуміло, що Алгол, врешті-решт, пробився до багатьох американських комп’ютерів, але так і не здолав Фортран. Проте теоретичний вплив Алголу був у США так само сильним, як і в Європі.

Багато мов, що виникли пізніше, базувалися (принаймні, частково) на Алголі, і його внесок в їх розвиток був пов’язаний з декількома основними ідеями. Одна з найбільш важливих – блокова структура, що дозволяє ділити програми на замкнені одиниці, що можуть розроблятися незалежно. Друга ідея – рекурсія, тобто здатність програм повторно звертатися до самої себе. Третя ідея – БНФ, формалізоване визначення синтаксису. Гігант серед виробників комп’ютерів, фірма IBM, приступивши у кінці 1963 р. (одночасно з новою лінією комп’ютерів “Система-360”) до здійснення нового проекту універсальної мови, вельми уважно поставилися до цієї спадщини. Машини лінії “Система-360” проектувалися так, щоб задовольняти потреби як в аналітичних обчислення, так і в обробці даних у сфері бізнесу та спеціальних застосувань.

Природно, що комп’ютер з таким широким спектром можливостей вимагав могутньої універсальної мови високого рівня. Асоціація SHARE, оцінивши перспективність цієї справи, допомогла створити “комітет з розробки передової мови”. До комітету увійшли представники найбільших фірм, а також кращі фахівці з відділів програмування та розробки мов самої IBM.

Не дивлячись на адміністративний тиск (мова повинна була бути розроблена до терміну закінчення робіт по “Системі-360”, квітень 1964 р.), специфікації мови були завершені лише до лютого 1964 р. – нова мова явно запізнювалася до дебюту “Системи-360”. Про результати зусиль, нову мову програмування PL/1 (Programming Language One – мова програмування, перша), комітет доповів асоціації SHARE у березні. Деякі фахівці характеризували мовуPL/1 як дуже складну.

Сподіваючись, що більшість проблем, що були пов’язані з мовою, проясняться у процесі реалізації, фірма IBM дала завдання своїй лабораторії в Харслі (Англія) приступити до роботи над компілятором. Співробітники лабораторії так сильно відредагували мову (точне визначення мови займало близько 200 сторінок), що розробники навряд чи дізналися б, що вийшло в результаті. Проте уточнення перетворили мову на практичний інструмент програмування, який вітали багато програмістів.

Багато того, що було краще у Фортрані, Коболі та Алголі знайшло відображалення у PL/1. Але, як висловився Джон Бекус, перші комерційні мови зробили негативний вплив на розвитокPL/1 та подальших мов програмування. “Оскільки перші мови дуже глибоко проникли в середовище програмістів, – казав Бекус, – вони до цих пір залишаються безвихіддю на шляху до більш досконалих мов”.

Не дивлячись на теоретичну недосконалість, мова PL/1 зіграла виключно важливу роль у практиці програмування для машин класу IBM 360/370. В СРСР в епоху АСУ (70-80-і роки) вона була основною мовою програмування економічних та науково-технічних завдань на ЄС ЕОМ, а також стандартною мовою для навчання програмістів. До того ж наявні у PL/1 механізми низькорівневого програмування (покажчики, засоби зв’язку з обчислювальним середовищем) дозволяли писати вельми ефективні програми. Проте після появи персональних комп’ютерів популярність мови різко впала. Перші покоління мікрокомп’ютерів були дуже слабкими для реалізації компілятора з PL/1, а коли комп’ютери стали достатньо потужніми, було вже пізно – нішу PL/1 зайняли Паскаль та С.