Movatterモバイル変換


[0]ホーム

URL:


Перейти до вмісту
Вікіпедія
Пошук

ALGOL

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено зAlgol)
АЛГОЛ
Парадигмапроцедурна,імперативна,структурна
Дата появи1958
ТворціРозроблена комітетом інженерів
Під впливом відFortran Редагувати інформацію у Вікіданих
Вплинула наПаскаль,Ada

АЛГОЛ абоALGOL (скорочення відангл.ALGOrithmicLanguage — алгоритмічна мова) — сімействоімперативнихмов програмування, першу версію розроблено в середині 1950-х, і сталаде факто стандартною мовою публікаціїалгоритмів на наступні 30 років. АЛГОЛ було розроблено для подолання деяких проблем, які були притаманні дляФортрана та дала поштовх для розвитку багатьох інших мов (серед них —Паскаль). У АЛГОЛ застосовувалисьоператорні дужки, це перша мова, яка для їх розмежування застосувала паруbegin таend. Фрагменти АЛГОЛ-подібного синтаксису досі використовуються у деяких нотаціях алгоритмів (Pidgin Algol).

Офіційні версії АЛГОЛу називають за роками, коли вони вперше були опубліковані. Існує три великі офіційні гілки сімейства АЛГОЛ:

  1. АЛГОЛ 58 — спочатку відомий як IAL (англ.InternationalAlgorithmicLanguage — Міжнародна Алгоритмічна Мова);
  2. АЛГОЛ 60 — версія1963 року;
  3. АЛГОЛ 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;begininteger p, q;    y := 0; i := k := 1;for p:=1step 1until ndofor q:=1step 1until mdoif abs(a[p, q]) > ythenbegin y := abs(a[p, q]);            i := p; k := qendend 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;beginprint '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 зарезервованих слів у мові Великої системи Бюро: 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 а також назви всіх внутрішніх функцій.

Джерела

[ред. |ред. код]
  1. Архівована копія. Архіворигіналу за 27 вересня 2011. Процитовано 8 листопада 2007.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)

Посилання

[ред. |ред. код]
Рівень
Низькорівневі
Високорівневі
Загального
призначення
Серверні
Запитів до баз
даних[суперечливо 1]
Розмітки тавекторної
графіки
[суперечливо 1]
Синхронні
Символьних та
чисельних обчислень
Квантових обчислень
Логічні
Академічні
Езотеричні
  1. абНемає загальноприйнятого рішення, чи вважати усі ці мови саме мовами програмування
Отримано зhttps://uk.wikipedia.org/w/index.php?title=ALGOL&oldid=40785204
Категорії:
Приховані категорії:

[8]ページ先頭

©2009-2025 Movatter.jp