ALGOL
АЛГОЛ або ALGOL (скорочення від англ. ALGOrithmic Language — алгоритмічна мова) — сімейство імперативних мов програмування, першу версію розроблено в середині 1950-х, і стала де факто стандартною мовою публікації алгоритмів на наступні 30 років. АЛГОЛ було розроблено для подолання деяких проблем, які були притаманні для Фортрана та дала поштовх для розвитку багатьох інших мов (серед них — Паскаль). У АЛГОЛ застосовувались операторні дужки, це перша мова, яка для їх розмежування застосувала пару begin та end. Фрагменти АЛГОЛ-подібного синтаксису досі використовуються у деяких нотаціях алгоритмів (Pidgin Algol). Офіційні версії АЛГОЛу називають за роками, коли вони вперше були опубліковані. Існує три великі офіційні гілки сімейства АЛГОЛ:
Ніклаус Вірт взяв АЛГОЛ 60 за основу для свого АЛГОЛ-В, перед тим як перейти до розробки Паскалю. АЛГОЛ-В мав би стати наступним поколінням АЛГОЛ, але комітет АЛГОЛ 68 віддав перевагу більш складному й розвиненому дизайну, перед спрощеним і прозорішим АЛГОЛ 60. ІсторіяАЛГОЛ було розроблено спільним комітетом європейських та американських вчених на зустрічі 1958 року у Швейцарському Федеральному Інституті Технологій. Комітет визначив три різні синтаксиси: основний, публікації та реалізації. Різні синтаксиси дозволяли використовувати різні ключові слова та розділові знаки (коми та дефіси) для різних мов. АЛГОЛ переважно використовувався для наукових досліджень у США та Європі. Його широке застосування було ускладнене відсутністю в його специфікації стандартного рішення для вводу-виводу даних та відсутністю інтересу з боку великих постачальників комп'ютерів. АЛГОЛ 60, попри те, став стандартом публікації алгоритмів та зробив вагомий внесок у розвиток подальших мов програмування. Джон Бекус розробив нотацію Бекуса — метод опису мов програмування, прив'язаний до АЛГОЛу 58. Цей метод було переглянуто й розширено Пітером Науром для АЛГОЛу 60. За пропозицією Дональда Кнута його назву було змінено на нотацію Бекуса — Наура.
На зустрічі в Парижі (з 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) направляє вивід на телетайп, а не на перфокарту. Виведення 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 використовував перфокарти з п'ятьма отворами, таким чином у коді було всього 25=32 символи. В ньому були лише літери верхнього регістру, майже не було розділових знаків, тому £ (англійський знак фунта) застосовувався для позначення початку рядка, а ? (знак питання) — для позначення кінця. Особливі послідовності брались у подвійні лапки (наприклад, ££L?? означало новий рядок на телетайпі). HIFOLKS’ BEGIN PRINT £HELLO WORLD££L??’ END’ Версія вводу-виводу ICL 1900 Algol дозволяла введення інформації з паперової стрічки чи перфокарт. «Повний» режим паперової стрічки дозволяв літери нижнього регістру. Вивід здійсювався на принтер. 'BEGIN' 'WRITE TEXT'("HELLO WORLD"); 'END' АЛГОЛ 68«Algol 68 Report» було перекладено російською, німецькою, французькою та болгарською мовами. У мові АЛГОЛ 68 методи вводу-виводу були узагальнено названі «Transput». begin print(("Hello, world!",newline)) end Або викорстовуючи спеціальний канал обміну: begin putf((stand out,$gl$,"Hello, world!")) end Також АЛГОЛ 68 дозволяв програмувати із використанням ширших наборів символів, наприклад кириличного алфавіту, на БЕСМ-4. begin print(("Вітання світу!",newline)) end Примітка: радянський стандарт 1964 року ГОСТ 10859 дозволяв кодування 4-, 5-, 6- та 7-бітних символів на АЛГОЛ. У публікаціях АЛГОЛ 68 зарезервовані слова були в нижньому регістрі, але друкувались напівжирним шрифтом чи підкреслено. Для полегшення програмування 7-бітних комп'ютерів, були «офіційні» методи виділяти зарезервовані слова, наприклад, використовуючи верхній регістр: BEGIN print(("Hello, world!",newline)) END Іноді програмісти були змушені повністю «ДУМАТИ У ВЕРХНЬОМУ РЕГІСТРІ» на комп'ютерах, які мали тільки 6-бітні символи, наприклад суперкомп'ютери CDC. В цьому випадку вищенаведений код мав писатися так: 'BEGIN' PRINT(("HELLO, WORLD!",NEWLINE)) 'END' Зарезервовані слова та заборонені ідентифікатори АЛГОЛ 60Існує 35 зарезервованих слів у мові Великої системи Бюро: Є 71 заборонений ідентифікатор: Джерела
Посилання
|