Історія мов програмування: Algol — жертва конфлікту інтересів

image

Вплив Algol на ІТ-індустрію

Назва мови Algol (ALGOrithmic Language), перша версія якого з'явилася в 1958 році, підкреслює ту обставину, що він призначений для запису алгоритмів. Завдяки чіткій логічній структурі Algol став стандартним засобом запису алгоритмів в науковій і технічній літературі. Однак він так і не зміг повноцінно конкурувати з мовою Fortran, а з COBOL його й зовсім важко порівнювати в силу відсутності деяких важливих можливостей у Algol – тієї ж обробки текстів наприклад або форматування введення/виводу.

«Пологи» Algol проходили дуже важко. Для деяких його творців, прямо скажемо, – в муках. Вчені та експерти галузі ніяк не могли прийти до єдиної думки з багатьох питань.

У результаті новий мову швидше викликав інтерес, чим привернув споживачів. Грейс Хоппер охарактеризувала його так: «Схожий на велику поему: простий і ясний з точки зору математики, але аж ніяк не практичний».

Передісторія
У середині 50-х років роль програмування в машинних кодах стала зменшуватися. З'явилися мови більш високого рівня – Fortran, Algol, COBOL і так далі.

Першим з них і одним з найбільш поширених був Fortran (FORmula TRANslator – перекладач формул), розроблений групою програмістів фірми IBM в 1954 році (перша версія). Ця мова був орієнтований на науково-технічні розрахунки математичного характеру.

image
Грейс Хопер — американська вчена і контр-адмірал флоту США. Програміст гарвардського комп'ютера Марк I.

У 1954 році група під керівництвом Грейс Хоппер розробила систему, що включає мову програмування і компілятор, яка в подальшому отримала назву Math-Matic. Після вдалого завершення робіт по створенню Math-Matic Хоппер і її група взялися за розробку нової мови і компілятора, який дозволив би користувачами програмувати на мові, близькій до звичайного англійської. У 1958 році з'явився компілятор Flow-Matic. Компілятор Flow-Matic був першою мовою для обробки комерційних даних.

Розробки в цьому напрямку привели до створення мови COBOL (Common Business Oriented Language). Він був створений в 1960 році. У цьому мові були слабкіше розвинені математичні засоби, але зате добре розвинені засоби обробки текстів, організація виводу даних у формі необхідного документа. Він задумувався як основну мову для масової обробки даних в сферах управління і бізнесу.

Краще – ворог хорошого
У 50-х роках ХХ століття весь вчений світ чекав вирішення проблеми визначення єдиної мови для наукового програмування. Першими запропонували свій варіант США. У 1957 році почав активно поширюватися Fortran. Але європейське співтовариство побоювалося гегемонії IBM (там і був створений Fortran) та інших агресивних американських фірм. Тому вони вирішили, що на європейському ринку неодмінно зобов'язана зійти нова «зірка».

В 1958 році в Цюріху, на базі Федерального технічного університету був створений спеціальний комітет. 27 травня пройшло перше засідання, на якому зібралися вісім найбільш шанованих авторитетів в області комп'ютерів: четверо з Європи і четверо з США. На зустрічі були присутні творець Fortran Джон Бекус і Джозеф Уэгстен, який в подальшому став головою короткочасного комітету з COBOL.

image
Федеральний технічний університет. р. Цюріх

Конференція під девізом «Краще — ворог хорошого» на справі не відповідала цим твердженням. З цього робота просувалася повільно. Американці наполягали на мові, який був би близький до вже використовується на комп'ютерах. Європейців цікавили не стільки комп'ютери, скільки міць мови при вирішенні складних математичних задач. На другий день обговорення ледь не зайшло в глухий кут з-за малого, але викликало бурю емоцій пункту — десяткової точки.

Один з європейців, ударивши кулаком по столу, вигукнув: «Ні! Я ніколи не буду використовувати крапку в десяткових дробах!» Американці ж зневажливо поставилися до європейської звичкою використовувати в десяткових дробах кому. Тоді Джозеф Уэгстен взяв на себе миротворчу роль і спробував втихомирити «десяткову бурю».

Остаточне рішення проблеми, запропоноване Уэгстеном, забезпечило новій мові одне з найбільш чудових властивостей. Він запропонував трирівневу модель мови: рівень описів, публікацій та реалізації.
Дрібні питання, типу вибору між крапкою і комою або використовуваного алфавіту, були винесені на другий-третій рівень, що дозволило досить швидко вирішити принципові питання. На рівні публікацій, погодженому пізніше, допускалося використання національних ключових слів і стандартів представлення даних (у тому числі і десяткової крапки), рівень реалізації визначав мову абсолютно строго — згідно йому повинні були будуватися транслятори.
Подальші обговорення пішли винятково на першому рівні, що дозволило рухатися далі і не застрягати на другорядних деталях.

Напівфабрикат
Мова, створена на конференції в Цюріху, багато чого успадкував від Fortran, але в Algol основні поняття були зібрані в більш логічну, можна навіть сказати, витончену структуру. Але із-за нестачі часу і необхідності компромісів було допущено чимало помилок. Одна з них полягала у відсутності процедур введення та виведення даних. Учасники наради навмисно не стосувалися цієї області, де багато чого залежить від типу комп'ютера, вважаючи, що процедури вводу і виводу повинен написати розробник компілятора мови.

Однак одностайність комітету не було абсолютним: частина делегатів поїхала з конференції, вважаючи, що робота зроблена в самому грубому наближенні, а інша ж частина вірила, що зроблено достатньо, щоб Algol став «зіркою» та новим міжнародним стандартом.

image

Одним з таких оптимістів був Джон Бекус. В лютому 1959 року він переконав впливову організацію SHARE (куди входили користувачі комп'ютерів фірми IBM) зробити ставку на нову мову програмування. Після цього організація настійно порекомендувала IBM реалізувати Algol.

На словах компанія пішла назустріч своїм клієнтам, а на ділі робота в цьому напрямку майже не велася. У той час IBM була світовим лідером на ринку комп'ютерів і активно впроваджувала Fortran, що цілком очікувано. У членів SHARE, насправді, теж не було ясної позиції. Коли їх ентузіазм згас, вони як ні в чому не бувало продовжували підтримувати Fortran.

А Бекус, незважаючи на невдачу, продовжував активно просувати Algol.

Повернувшись в Цюріх, він зацікавився граматикою, тобто правильним розташуванням слів і знаків у мові. Бекус розробив строгу і точну систему визначення кожної структури мови логічним чином. Наприклад, визначаючи елемент «цифра», він писав: «<цифра>: = 0/1/2|… |9|».

Незабаром програмісти стали називати цей підхід до опису синтаксису нормальною формою Бекуса, або БНФ. (Подальше уточнення цієї роботи датським астрономом Пітером Науром призвело до того, що такий підхід часто стали називати «форма Бекуса-Наура», (скорочення залишилося те ж — БНФ). БНФ справила значний вплив на розробку мов програмування, зокрема була покладена в основу другого етапу розробки Algol'у.

Між тим, успішним Algol-58 так і не став: потрібна серйозна доробка.

Algol-60
У січні 1960 року 13 представників країн Європи та США, включаючи 7 людина з минулого цюріхській групи, зустрілися в Парижі, щоб «залатати дірки», які залишилися в першому варіанті. Одним з новоприбулих був Наур, запропонував варіант зміненого мови Algol, записаний за допомогою БНФ.

image
Синтаксичні діаграми і дерево розбору

Після восьми днів важких переговорів учасники конференції покинули Париж у піднесеному настрої, вважаючи, що згода досягнута, і навіть найзапекліші критики Algol'у відтепер повинні замовкнути.

image
З рідкісною одностайністю комітет з розробки Algol-60 «голосує» для цієї групової фотографії, зробленої на конференції в Парижі в 1960 році. Серед учасників – американський фахівець з комп'ютерів Джон Бекус (найближчий до камери праворуч) і датський астроном Петер Наур (четвертий зліва), в честь яких система опису мов програмування отримала назву «форма Бекуса — Наура». (Фотографію зробив Джон Маккарті, творець мови LISP)

Але навряд американські учасники конференції зійшли з трапу літака, на Algol-60 обрушилася жорстка критика з боку. Крім того, невелика група учасників конференції вказала на неоднозначності, що залишилися в мові, і приступила до їх «рекламування». Інші критики підкреслювали, що мова так і не включені засоби введення/виводу.

В Америці Algol-60 зустріли холодно. Більше того, виявилося, що для нього дуже складно написати компілятор: навіть найбільш просунуті комп'ютери того часу не могли сприймати набір з 116 літер, які зустрічалися в мові описів.

В Європі міркували по-іншому: новий мову давав можливість обмінюватися цікавими і складними ідеями, незважаючи на кордони і мовні бар'єри. Що ще важливіше, він дозволив європейської комп'ютерної індустрії здобути незалежність від американських технологій.

Algol 68
У 1962 році під егідою Міжнародної федерації з обробки інформації (International Federation for Information Processing, IFIP) був створений новий комітет, завданням якого є подальше вдосконалення Algol. У складі нового комітету виявилося чимало вчених зі світовим ім'ям, зокрема, Эдсгер Дейкстра, Ніклаус Вірт і Тоні Хоар.

Одним з недоліків попередньої версії все-таки було визнано відсутність вводу/виводу. Зневага до цього моменту пояснювалося академічної спрямованістю мови: для вчених головний інтерес представляє сам алгоритм, а в якому вигляді будуть представлені вихідні дані — справа другорядна. Для промислових потреб такий підхід не годився.

Другим серйозним недоліком була низька швидкодія. Тому важливим завданням стало підвищення ефективності роботи на етапі виконання програми.

Керівником групи розробки мови з якихось причин був А. Ван Вейнгаарден, директор Математичного центру Амстердама. Будучи відомим математиком, він, користуючись своїм авторитетом, приймав рішення, з якими не погоджувалися програмісти-практики, що негативно вплинуло на отриманий в результаті мову.

На жаль, авторитарний стиль керівництва ван Вейнгаардена нерідко приводив до суперечок в колективі і навіть став причиною виходу Хоара та Вірта з команди. Про те, як важка була ця втрата для команди, можна судити з такого факту: пропозиції Вірта, не прийняті комітетом, лягли в основу мови Pascal.

У Algol 68 було реалізовано кілька цікавих ідей (наприклад, механізми розширення мови, а також засоби для паралельних обчислень), але він отримав обмежене застосування.

image

У Росії були ентузіасти, які активно використовували його в роботі, і мову на основі Algol 68 став колись базовим для програмування вітчизняного комп'ютера «Ельбрус».

Особливості мови
Як і в більшості інших мов програмування, програма на Algol складається з головної програми і набору підпрограм.

begin
procedure SUM(V,N); valueN;
realarray V;
integer N;

begin
integer I;
real TEMP;

TEMP:=0;
for I:=1 step1 until N do
TEMP:=TEMP+V[I];
SUM:=TEMP
end;

integer K;

START:
inreal(1,K);
if K>0 then
begin
realarray A[1:K];
inarray(1,A);
outreal(2,SUM(A,K));
gotoSTART
end
end


Структури даних, створені всередині блоку, локальні в його межах і при виході з блоку знищуються. Таким чином можна керувати часом життя даних і областю видимості їх ідентифікаторів. Динамічне виділення пам'яті для змінних у блоці дозволяє ефективно використовувати рекурсію.

Блоки можуть утворювати вкладені структури, тобто всередину блоку може бути вкладений блок, у нього — інший блок і так далі. Важливою особливістю мови є також те, що блок є різновидом оператора — складовим оператором і може бути використаний скрізь, де припустимо звичайний оператор.

У Algol реалізовані логічний, цілочисельний і речовинний типи, а зі структур даних — лише однорідний масив. Правда, масиви є динамічними, що дозволяло ефективно управляти розподілом пам'яті. На жаль, типи і структури даних в мові не дуже різноманітні. Мабуть, це й визначило подальшу долю мови, що застосовувався в першу чергу для наукових обчислень.

До особливостей мови можна також віднести механізми передачі параметрів подпрограммам. Їх два: добре відома передача за значенням і досить екзотична передача по імені.
Передане в процедуру вираз обчислюється кожен раз – як якщо б замість формальних параметрів були підставлені їх значення, обчислені в контексті викликаючої програми. По суті це щось середнє між макроподстановкой і викликом підпрограми.

Begin

procedure p (a,b);

name a, b; integer a, b;

begin
for a:=1 step1 until 10 do
b := 0
end p;

integer i; integer s array [1:10];
p (i, s[i])

end


При виконанні процедури p на кожному кроці циклу замість a підставляється i, а замість b підставляється s[i], і ця процедура просто обнуляє масив s. Проблем з таким способом передачі параметрів дуже багато, тому передача параметрів по імені так і залишилася прерогативою Algol. Але цей спосіб передачі параметрів вплинув на подальший розвиток мов програмування.

Роль в історії
Так само, як міністерство оборони США в свій час активно підтримало мова COBOL, незалежний дослідницький рада Німеччини та інші урядові організації західноєвропейських країн підтримали Algol.

Завдяки цьому мова поширився від Великобританії до Радянського Союзу. Більшість компіляторів виявилися вдалими, і незабаром Algol був визнаний міжнародною мовою європейських програмістів.

Algol не став загальним міжнародним стандартом, як сподівалися деякі, оскільки такий його статус серйозно зачепив би американські інтереси. Він набрав невелику популярність в США, але так назавжди і залишився в тіні Fortran.

Тим не менш, багато мов, що виникли пізніше, базувалися (принаймні, частково) на Algol, і його внесок в їх розвиток пов'язаний з декількома основними ідеями.

Одна з найбільш важливих — блокова структура, що дозволяє ділити програми на замкнуті одиниці, що розробляються незалежно. Інша ідея — рекурсія. Третя ідея — БНФ, формалізоване визначення синтаксису.

Ці та інші фундаментальні ідеї дісталися у спадок розробникам інших мов.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.