АЛГОЛ
| Парадигма: | процедурна, імперативна, структурна |
|---|---|
| Дата появи: | 1958 |
| Творці: | Розроблена комітетом інженерів |
| Вплинула на: | Паскаль, Ada |
АЛГОЛ або ALGOL (скорочення від англ. ALGOrithmic Language — алгоритмічна мова) — сімейство імперативних мов програмування, перша версія розроблена в середині 1950-х, і стала де факто стандартною мовою публікації алгоритмів на наступні 30 років. АЛГОЛ було розроблено для подолання деяких проблем, які були притаманні для Фортрана та дала поштовх для розвитку багатьох інших мов (серед них — Паскаль). У АЛГОЛ використовувались операторні дужки, це перша мова, яка для їх розмежування застосувала пару begin та end. Фрагменти АЛГОЛ-подібного синтаксису досі використовуються у деяких нотаціях алгоритмів (Pidgin Algol).
Існує три великі офіційні гілки сімейства АЛГОЛ:
- АЛГОЛ 58 — спочатку відомий як IAL (англ. International Algorithmic Language — Міжнародна Алгоритмічна Мова);
- АЛГОЛ 60 — версія 1963 року;
- АЛГОЛ 68 — версія 1973 року;
Ніклаус Вірт взяв АЛГОЛ 60 за основу для свого АЛГОЛ-В, перед тим як перейти до розробки Паскалю. АЛГОЛ-В мав би стати наступним поколінням АЛГОЛ, але комітет АЛГОЛ 68 віддав перевагу більш комплексному і розвинутому дизайну, перед спрощеним і прозорішим АЛГОЛ 60. Офіційні версії АЛГОЛу іменуються за роками, коли вони вперше були опубліковані.
Зміст |
Історія [ред.]
АЛГОЛ був спільно розроблений комітетом європейських та американських вчених на зустрічі 1958 року у Швейцарському Федеральному Інституті Технологій. Комітет визначив три різні синтаксиси: основний, публікації та реалізації. Різні синтаксиси дозволяли використовувати різні ключові слова та розділові знаки (коми та дефіси) для різних мов.
АЛГОЛ переважно використовувався для наукових досліджень у США та Європі. Його впровадження у широке застосування було ускладнене відсутністю стандартного рішення доступу до вводу-виводу даних в його специфікації та відсутністю інтересу з боку великих постачальників комп'ютерів. АЛГОЛ 60, попри те, став стандартном публікації алгоритмів та зробив вагомий внесок у розвиток подальших мов програмування.
Джон Бекус розробив нотації Бакуса — метод опису мов програмування, сильно прив'язаний до АЛГОЛу 58. Цей метод був переглянутий та розширений Пітером Науром для АЛГОЛу 60, та за пропозицією Дональда Кнута переіменований на нотацію Бекуса-Наура.
| « | Як редактор першого бюллетеня АЛГОЛу, я брав участь у міжнародному обговоренні мови, та був обраний членом Європейської групи розробників у листопаді 1959. На цій посаді я був редактором звіту про АЛГОЛ 60, який став результатом зустрічі у Парижі у січні 1960 року. | » |
|
— Пітер Наур |
||
На зустрічі в Парижі (з 1 по 16 січня) також були присутні:
- З Європи: Фрідріх Бауер, Пітер Наур, Гайнц Рутішаузер, Клаус Замелсон, Бернард Вакуі, Адріан ван Війнгаарден та Майкл Вуджер;
- Із США: Джон Бакус, Джулі Грін, Чарльз Катц, Джон МакКарті, Алан Перліс, Джосеф Генрі Вегстейн
| « | Зустріч була виснажлива, довга та весела. Хтось нервував коли його гарні ідеї відкидались разом з поганими ідеями інших. Але старанність панувала весь період роботи. «Робота тринадцяти» була чудовою. | » |
|
— Алан Перліс |
||
І Джон Бекус, і Пітер Наур були також в комітеті, який розробив АЛГОЛ 60, як і Уеллі Ферціг, який пізніше створив мову програмування Лого.
АЛГОЛ 60 надав розвиток для багатьох мов, які наслідували його; вислів Чарльза Ентоні Хоара про нього, згодом став афоризмом: «Це мова, яка настільки випередила час, що стала не тільки розвитком її попередників, але й майже всіх її наступників». Цей вислів інколи приписують Едсгеру Дейкстрі, який також брав участь у розробці першого компілятора для АЛГОЛ 60.
Офіційні специфікації АЛГОЛ 60 та його реалізації [ред.]
Існувало біля 70 покращень, розширень, розгалуджень та підмов АЛГОЛ 60[1].
Великі системи Бюрро — стекові машини, розроблені для програмування на розширеному варіанті АЛГОЛ 60, відомому як Elliot ALGOL; їхня операційна система, MCP, була написана на Elliot ALGOL ще у 1961. Корпорація Unisys досі продає машини з цією назвою, які використовують MCP та підтримують набір компіляторів Elliot ALGOL.
Властивості [ред.]
АЛГОЛ 60 був офіційно визначений без можливостей вводу-виводу даних; різні реалізації компілятора визначали свої власні методи, які рідко були сумісні одне з одним. На відміну, АЛГОЛ 68 мав розширену бібліотеку transput, для вводу-виводу даних.
АЛГОЛ 60 дозволяв два методи передачі параметрів: за значенням, та за назвою. Передача за назвою мала певні обмеження, на відміну від передачі за посиланням, що робило її небажаною для програмування на імперативних мовах. Наприклад, у АЛГОЛ 60 неможливо зробити процедуру, яка міняє місцями значення двох параметрів тоді, коли отриманими фактичними параметрами можуть бути цілі змінні та масив цілих.
Приклад коду (АЛГОЛ 60) [ред.]
(Те, як виділений текст має бути написаний залежить від конкретної реалізації, наприклад 'INTEGER' (включно з лапками) замість integer.)
procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k);
value n, m; array a; integer n, m, i, k; real y;
comment Найбільший по-модулю елемент матриці а, розміром n на m
заноситься до y, а його індекси до i та k;
begin integer p, q;
y := 0; i := k := 1;
for p:=1 step 1 until n do
for q:=1 step 1 until m do
if abs(a[p, q]) > y then
begin y := abs(a[p, q]);
i := p; k := q
end
end Absmax
Це приклад того, як реалізувати таблицю, використовуючи Elliott 803 ALGOL .
FLOATING POINT ALGOL TEST' BEGIN REAL A,B,C,D' READ D' FOR A:= 0.0 STEP D UNTIL 6.3 DO BEGIN PRINT PUNCH(3),££L??' B := SIN(A)' C := COS(A)' PRINT PUNCH(3),SAMELINE,ALIGNED(1,6),A,B,C' END' END'
PUNCH(3) направляє вивід на телетайп, а не на перфокарту.
SAMELINE запобігає поверненню каретки та забезпечує нормальний вивід стрічки аргументів.
ALIGNED(1,6) форматований вивід 1 цифри до і 6 після коми.
Вивід Hello world в різних версіях [ред.]
Варіативність та неможливість перенесення програм з однієї реалізації АЛГОЛ на іншу легко демонструється класичною hello world-програмою
АЛГОЛ 58 (IAL) [ред.]
ALGOL 58 не мав методів вводу-виводу.
Сімейство АЛГОЛ 60 [ред.]
Оскільки АЛГОЛ 60 також не мав стандартнизованих методів вводу-виводу інформації, не існує переносимої hello world-програми на АЛГОЛ. Наступна програма могла бути скомпільована та виконана на реалізації АЛГОЛ на мейнфреймі Unisys A-Series, і є спрощенням коду взятого з цього сайту (англ.).
BEGIN FILE F(KIND=REMOTE); EBCDIC ARRAY E[0:11]; REPLACE E BY "HELLO WORLD!"; WRITE(F, *, E); END.
Альтернативний приклад, використовуючи Elliott Algol I/O. Elliott Algol використовував різні дужки для позначення початку рядка та кінця: ‘ та ’.
program HiFolks;
begin
print ‘Hello world’;
end;
Наступна версія для Elliott 803 Algol (A104). Стандарт Elliott 803 використовував перфокарти з 5 отворами, та мав лише букви верхнього регістру. У коді були відсутні будь-які символи рядка, тому £ (англійський знак фунта) використовувався для початку рядка та ? (знак питання) для кінця рядка. Спеціальні послідовності брались у подвійні знаки рядку (наприклад, ££L?? означав новий рядок на телетайпі).
HIFOLKS’
BEGIN
PRINT £HELLO WORLD££L??’
END’
Версія вводу-виводу ICL 1900 Algol дозволяла введення інформаціх з паперової смужки чи перфокарт. «Повний» режим паперової смужки дозволяв букви нижнього регістру. Вивід здійсювався на принтер.
'BEGIN'
'WRITE TEXT'("HELLO WORLD");
'END'
АЛГОЛ 68 [ред.]
У мові «Algol 68 Report», методи вводу-виводу були узагальнено названі «Transput».
У публікаціях АЛГОЛ 68 зарезервовані слова були в нижньому регістрі, але друкувались напівжирним шрифтом або підкреслено.
begin
print(("Hello, world!",newline))
end
АБО викорстовуючи спеціальний канал обміну:
begin putf((stand out,$gl$,"Hello, world!")) end
Для полегшення програмування 7-бітних комп'ютерів, були «офіційні» методи виділяти зарезервовані слова, наприклад, використовуючи верхній регистр:
BEGIN
print(("Hello, world!",newline))
END
Іноді програмісти були змушені повністю «ДУМАТИ У ВЕРХНЬОМУ РЕГІСТРІ» на комп'ютерах, які мали тільки 6-бітні символи, наприклад суперкомп'ютери CDC. В цьому випадку вищенаведений код мав писатися так:
'BEGIN'
PRINT(("HELLO, WORLD!",NEWLINE))
'END'
«Algol 68 Report» був перекладений на російську, німецьку, французьку та балгарську мови, та дозволяв програмувати із використанням ширших наборів символів, наприклад кирилічного алфавіту, на БЕСМ-4.
BEGIN
print(("Здравствуй, мир!",newline))
END
Примітка: російський стандарт 1964 року ГОСТ 10859 дозволяв кодування 4-, 5-, 6- та 7-бітних символів на АЛГОЛ.
Зарезервовані слова та заборонені ідентифікатори АЛГОЛ 60 [ред.]
Існує 35 зарезервованих слів у мові Великої системі Бюро: ALPHA, ARRAY, BEGIN, BOOLEAN, COMMENT, CONTINUE, DIRECT, DO, DOUBLE, ELSE, END, EVENT, FALSE, FILE, FOR, FORMAT, GO, IF, INTEGER, LABEL, LIST, LONG, OWN, POINTER, PROCEDURE, REAL, STEP, SWITCH, TASK, THEN, TRUE, UNTIL, VALUE, WHILE, ZIP.
Існує такі 71 заборонені ідентифікатори: ACCEPT, AND, ATTACH, BY, CALL, CASE, CAUSE, CLOSE, DEALLOCATE, DEFINE, DETACH, DISABLE, DISPLAY, DIV, DUMP, ENABLE, EQL, EQV, EXCHANGE, EXTERNAL, FILL, FORWARD, GEQ, GTR, IMP, IN, INTERRUPT, IS, LB, LEQ, LIBERATE, LINE, LOCK, LSS, MERGE, MOD, MONITOR, MUX, NEQ, NO, NOT, ON, OPEN, OR, OUT, PICTURE, PROCESS, PROCURE, PROGRAMDUMP, RB, READ, RELEASE, REPLACE, RESET, RESIZE, REWIND, RUN, SCAN, SEEK, SET, SKIP, SORT, SPACE, SWAP, THRU, TIMES, TO, WAIT, WHEN, WITH, WRITE а також назви усіх внутрішніх функцій.
Посилання [ред.]
- Переглянутий звіт про алгоритмічну мову АЛГОЛ 60 Пітер Наур.
- БНФ синтаксису АЛГОЛ 60
- “Старий одяг Імператора“ — промова Хоара на врученні Нагороди Тьюринга у 1980 році, яка розглядає історію та розвиток АЛГОЛ
- MARST, вільний Algol-to-C транслятор
- Ретрокомп'ютерний Музей Еріка Реймонда, серед іншого містить посилання на NASE Algol-60 інтерпретатор, написаний на C.
