Jump to content

АЛГОЛ 60

АЛГОЛ 60
Парадигмы процедурный , императивный , структурированный
Семья АЛГОЛ
Разработано Бэкус , Бауэр , Грин , Кац , Маккарти , Наур , Перлис , Рутисхаузер , Самельсон , ван Вейнгаарден , Вокуа , Вегштейн , Вуджер
Впервые появился 1960 год ; 64 года назад ( 1960 )
Дисциплина набора текста Статический , сильный
Объем Лексический
Под влиянием
АЛГОЛ 58
Под влиянием
Большинство последующих императивных языков (так называемые АЛГОЛ-подобные языки), например, PL/I , Simula , CPL , Pascal , Ada , C.

АЛГОЛ 60 (сокращение от Algorithmic Language 1960 ) — член семейства АЛГОЛ языков программирования . Он последовал за АЛГОЛом 58 , в котором были введены кодовые блоки и begin и end пары для их разграничения, что представляет собой ключевой шаг на пути развития структурного программирования . АЛГОЛ 60 был одним из первых языков, реализовавших определения функций (которые можно было вызывать рекурсивно). Определения функций ALGOL 60 могли быть вложены друг в друга (что впервые было введено в любом языке программирования) с лексической областью действия . породил множество других языков, включая CPL , PL/I , Simula , BCPL , B , Pascal и C. Он Практически каждый компьютер той эпохи имел язык системного программирования, основанный на концепциях АЛГОЛ-60.

Никлаус Вирт основал свой собственный АЛГОЛ W на основе АЛГОЛА 60, прежде чем приступить к разработке Паскаля . Алгол-W задумывался как АЛГОЛ следующего поколения, но комитет АЛГОЛ 68 принял решение о более сложной и продвинутой конструкции, а не об очищенном упрощенном АЛГОЛе 60. Официальные версии АЛГОЛА названы в честь года их первой публикации. АЛГОЛ 68 существенно отличается от АЛГОЛА 60, и за это его частично критиковали, так что в целом «АЛГОЛ» относится к диалектам АЛГОЛА 60.

Стандартизация [ править ]

АЛГОЛ 60 – вместе с КОБОЛом – были первыми языками, которые стремились к стандартизации.

  • ISO 1538:1984 Языки программирования – АЛГОЛ 60 (стабилизированный)
  • ISO/TR 1672:1977 Аппаратное представление основных символов АЛГОЛА... (сейчас отозвано)

История [ править ]

АЛГОЛ 60 использовался в основном учеными-исследователями в США и Европе. Его использованию в коммерческих приложениях препятствовало отсутствие стандартных средств ввода/вывода в его описании и отсутствие интереса к языку со стороны крупных поставщиков компьютеров. Однако АЛГОЛ 60 стал стандартом для публикации алгоритмов и оказал глубокое влияние на будущее развитие языка.

Джон Бэкус разработал метод нормальной формы Бэкуса для описания языков программирования специально для АЛГОЛА 58. Он был переработан и расширен Питером Науром для АЛГОЛА 60 и по Дональда Кнута предложению переименован в форму Бэкуса-Наура . [1]

Питер Наур: «Как редактор бюллетеня АЛГОЛ, я был вовлечен в международные дискуссии по языку и в ноябре 1959 года был выбран членом европейской группы разработчиков языков. В этом качестве я был редактором отчета по АЛГОЛ 60, подготовленного в результате встречи АЛГОЛ-60 в Париже в январе 1960 года». [2]

На встрече в Париже (с 11 по 16 января) присутствовали следующие люди:

Алан Перлис дал яркое описание встречи: «Встречи были утомительными, бесконечными и волнующими. Человек раздражался, когда хорошие идеи одного человека отбрасывались вместе с плохими идеями других. Тем не менее, усердие сохранялось в течение всего периода. 13-й был превосходен».

Язык изначально не включал рекурсию . Его включили в спецификацию в последнюю минуту, вопреки желанию некоторых членов комитета. [3]

АЛГОЛ 60 вдохновил множество последовавших за ним языков. Тони Хоар заметил: «Это язык, настолько опередивший свое время, что он стал улучшением не только своих предшественников, но и почти всех своих преемников». [4] [5]

График реализации ALGOL 60 [ править ]

На сегодняшний день существует не менее 70 дополнений, расширений, производных и подъязыков Алгола 60. [6]

Имя Год Автор Состояние Описание Целевой процессор
X1 АЛГОЛ 60 август 1960 г. [7] Эдсгер В. Дейкстра и Яап А. Зонневельд  Нидерланды Первая реализация АЛГОЛА 60 [8] Электрологика X1
Алголь 1960 [9] Эдгар Т. Айронс  олень АЛГОЛ 60 ЦКД 1604
Берроуз Алгол
(Несколько вариантов)
1961 Burroughs Corporation (при участии Хоара , Дейкстры и др.)  олень Основа компьютеров Burroughs (а теперь и Unisys MCP ) Большие системы Берроуза
и системы среднего уровня
Случай Алгола 1961  олень Simula изначально задумывалась как расширение моделирования Case ALGOL. УНИВАК 1107
ГОГОЛЬ 1961 Уильям М. Маккиман  олень Для системы разделения времени ODIN ПДП-1
ДАСК АЛГОЛ 1961 Питер Наур , Йорн Йенсен  Дания АЛГОЛ 60 DASK в Регнецентралене
СМИЛ АЛГОЛ 1962 Торгиль Экман , Карл-Эрик Фрёберг  Швеция АЛГОЛ 60 СМИЛ в Лундском университете
ГИР АЛГОЛ 1962 Питер Наур , Йорн Йенсен  Дания АЛГОЛ 60 GIER в Регнецентрале
Дартмутский Алгол 30 [10] 1962 Томас Юджин Курц , Стивен Дж. Гарланд , Роберт Ф. Харгрейвс, Энтони В. Кнапп , Хорхе ЛЛасер  олень АЛГОЛ 60 ЛГП-30
Алькор Майнц 2002 1962 Урсула Хилл-Самельсон, Ханс Лангмаак  Германия Сименс 2002 г.
ALCOR-Иллинойс 7090 1962
[11] [12]
Манфред Пауль , Ганс Рюдигер Виле, Давид Грис и Рудольф Байер  Соединенные Штаты ,  Западная Германия АЛГОЛ 60
Внедрено в Иллинойсе и TH München , 1962–1964 гг.
ИБМ 7090
Военный корабль США 90 Алгол 1962 Л. Петроне  Италия
Эллиотт Алгол 1962 АВТОМОБИЛЬ Хоар  Великобритания Обсуждается в его на Премии Тьюринга 1980 года. лекции Эллиот 803 и Эллиот 503
АЛГОЛ 60 1962 Роланд Штробель [13]  Восточная Германия Реализовано Институтом прикладной математики Немецкой академии наук в Берлине. Zeiss-Rechenautomat ZRA 1
АЛГОЛ 60 1962 Бернар Вокуа , Луи Болье [14]  Франция Институт компьютерных наук и прикладной математики Гренобля (IMAG) и Compagnie des Machines Bull Бык Гамма 60
Алголь переводчик 1962 Г. ван дер Мей и В.Л. ван дер Поэль  Нидерланды Государственная почта, Телеграфная и телефонная компания ЗЕБРА
Кидсгроув Алгол 1963 ФГ Дункан  Великобритания Английская электрическая компания KDF9
ГОЛОВА ГОЛОВЫ [15] 1963 Стивен Дж. Гарланд , Энтони В. Нэпп , Томас Юджин Курц  олень Автономный процессор ALGOL для подмножества ALGOL 60 ЛГП-30
ВАЛГОЛЬ 1963 Вэл Шорре  олень Тест META II компилятора компилятора
FP6000 Алголь 1963 Роджер Мур  Канада написано для Saskatchewan Power Corp. ФП6000
точильный камень 1964 Брайан Рэнделл и Лоуфорд Джон Рассел  Великобритания Подразделение атомной энергетики английской электрической компании. Предшественник Ferranti Pegasus , National Physical Laboratories ACE и English Electric DEUCE. реализаций Английская электрическая компания KDF9
АЛГОЛ 60 1964 Жан-Клод Буссар [16]  Франция Гренобльский институт компьютерных наук и прикладной математики [ fr ] ИБМ 7090
АЛГОЛ 60 1965 Клод Пэйр [ фр ] [17]  Франция Вычислительный центр факультета наук Нанси ИБМ 1620
Дартмутский АЛГОЛ 1965 Стивен Дж. Гарланд , Сарр Блумсон, Рон Мартин  олень АЛГОЛ 60 Система разделения времени Дартмут для GE 235
НЕ АЛГОЛ 1965  Норвегия УНИВАК
АЛГОЛ 60 1965 [18] ФЕЙ Круземан Арец  Нидерланды MC-компилятор для EL-X8 Электрологика X8
ВОДОРОСЛИ 1965  Советский Союз Минск-22 АЛГЭК на базе АЛГОЛ 60 и поддержки КОБОЛ для экономических задач.
МАЛГОЛ 1966 publ. A. Viil, M Kotli & M. Rakhendi,  Эстонская ССР Минск-22
ЗАРПЛАТА 1967 GAMS group (ГАМС, группа автоматизации программирования для машин среднего класса), cooperation of Comecon Academies of Science СЭВ Минск-22 , позже ЕС ЭВМ , БЭСМ
ALGOL/ZAM 1967  Польша Польский ZAM компьютер
Китайский Алгол 1972  Китай Китайские иероглифы, выраженные через систему символов.
ГД/Л 1972  олень DG Eclipse Семейство компьютеров
НОС 1990 Эрик Шенфельдер  Германия Устный переводчик Линукс и MS Windows
МАРСТ 2000 Андрей Махорин  Россия Транслятор с Алгола 60 на C Все процессоры, поддерживаемые коллекцией компиляторов GNU; MARST является частью проекта GNU.

Диалекты Берроуза включали специальные диалекты системного программирования, такие как ESPOL и NEWP .

Свойства [ править ]

Алгол 60 в официальном определении не имел средств ввода-вывода; реализации определяли свои собственные способами, которые редко были совместимы друг с другом. Напротив, АЛГОЛ 68 предлагал обширную библиотеку средств передачи (на языке АЛГОЛ 68 означает ввод/вывод).

АЛГОЛ 60 предоставил две стратегии оценки передачи параметров : общий вызов по значению и вызов по имени . В объявлении процедуры указано для каждого формального параметра, который должен был использоваться: значение, указанное для вызова по значению и опущенное для вызова по имени. Вызов по имени имеет определенные эффекты в отличие от вызова по ссылке . Например, без указания параметров как value или reference невозможно разработать процедуру, которая будет менять местами значения двух параметров, если фактические передаваемые параметры представляют собой целочисленную переменную и массив, индексированный той же целочисленной переменной. . [19] Подумайте о передаче указателя на swap(i, A[i]) в функцию. Теперь, когда каждый раз упоминается своп, он пересчитывается. Скажем, i := 1 и A[i] := 2, поэтому при каждом обращении к swap он будет возвращать другую комбинацию значений ([1,2], [2,1], [1,2] и т. д. на). Аналогичная ситуация возникает со случайной функцией, переданной в качестве фактического аргумента.

Функция Call-by-name известна многим разработчикам компиляторов благодаря интересным « thunks », которые используются для ее реализации. Дональд Кнут разработал « тест мужчины или мальчика » для разделения компиляторов, которые правильно реализовали « рекурсию и нелокальные ссылки». Этот тест содержит пример вызова по имени.

слова и АЛГОЛ 60 Зарезервированные ограниченные идентификаторы

В стандартном Burroughs Large Systems подъязыке 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

В стандартном подъязыке Burroughs Large Systems имеется 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

а также имена всех встроенных функций.

Стандартные операторы [ править ]

Приоритет Оператор
первая арифметика первый ↑ (сила)
второй ×, / (действительное), ÷ (целое)
третий +, -
второй <, ≤, =, ≥, >, ≠
третий ¬ (нет)
четвертый ∧ (и)
пятый ∨ (или)
шестой ⊃ (импликация)
седьмой ≡ (эквивалентность)

Примеры и проблемы переносимости [ править ]

Сравнение примеров кода [ править ]

АЛГОЛ edit60

procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k);
    value n, m; array a; integer n, m, i, k; real y;
comment The absolute greatest element of the matrix a, of size n by m,
    is copied to y, and the subscripts of this element to i and 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: [20]

 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'

Семейство АЛГОЛ 60 [ править ]

Поскольку в АЛГОЛе 60 не было средств ввода-вывода, в АЛГОЛе нет переносимой программы hello world . Следующая программа может (и будет) скомпилироваться и работать на реализации ALGOL для мэйнфрейма Unisys серии A и представляет собой простое упрощение кода, взятого из The Language Guide. [21] в Мичиганском университете - Дирборн, Компьютер и информация Департамент науки Привет, мир! Страница примера программы АЛГОЛ. [22]

BEGIN
  FILE F(KIND=REMOTE);
  EBCDIC ARRAY E[0:11];
  REPLACE E BY "HELLO WORLD!";
  WRITE(F, *, E);
END.

Где * и т. д. представляют собой спецификацию формата, используемую в FORTRAN, например [23]

Более простая программа, использующая встроенный формат:

 BEGIN
   FILE F(KIND=REMOTE);
   WRITE(F, <"HELLO WORLD!">);
 END.

Еще более простая программа, использующая оператор Display:

BEGIN DISPLAY("HELLO WORLD!") END.

Альтернативный пример использования ввода-вывода Elliott Algol выглядит следующим образом. Эллиот Алгол использовал разные символы для «цитат открытой строки» и «кавычек закрытой строки», представленных здесь как   '   и    .

 program HiFolks;
 begin
    print Hello world
 end;

Вот версия для Elliott 803 Algol (A104). В стандартном Elliott 803 использовалась бумажная лента с 5 отверстиями, поэтому в ней были только заглавные буквы. В коде отсутствовали символы кавычек, поэтому £ для открытой кавычки использовался (знак фунта), а ? (знак вопроса) для закрытия цитаты. Специальные последовательности заключались в двойные кавычки (например, £L?? выводила на телетайпе новую строку).

  HIFOLKS'
  BEGIN
     PRINT £HELLO WORLD£L??'
  END'

Версия ввода-вывода Algol серии ICT 1900 позволяла вводить данные с бумажной ленты или перфокарты. В режиме «заполнения» бумажной ленты разрешен нижний регистр. Вывод осуществлялся на построчный принтер. Обратите внимание на использование символов «(», «)» и %. [24]

  'PROGRAM' (HELLO)
  'BEGIN'
     'COMMENT' OPEN QUOTE IS '(', CLOSE IS ')', PRINTABLE SPACE HAS TO
               BE WRITTEN AS % BECAUSE SPACES ARE IGNORED;
     WRITE TEXT('('HELLO%WORLD')');
  'END'
  'FINISH'

Прыжок [ править ]

LEAP — это расширение языка программирования АЛГОЛ 60, обеспечивающее ассоциативную память троек. Три элемента в тройке обозначают связь с тем, что атрибут объекта имеет определенное значение. LEAP был создан Джеромом Фельдманом (Калифорнийский университет в Беркли) и Полом Ровнером (Лаборатория Линкольна Массачусетского технологического института) в 1967 году. LEAP также был реализован в SAIL.

См. также [ править ]

Ссылки [ править ]

  1. ^ Кнут, Дональд Э. (декабрь 1964 г.). «Обычная форма Бэкуса против формы Бэкуса Наура» . Коммуникации АКМ . 7 (12): 735–6. дои : 10.1145/355588.365140 . S2CID   47537431 .
  2. ^ Цитирование премии ACM / Питер Наур , 2005 г.
  3. ^ ван Эмден, Мартен (2014). «Как рекурсия проникла в программирование: история об интригах, предательстве и продвинутой семантике языка программирования» . Место программиста .
  4. ^ Хоар, ЦАР (декабрь 1973 г.). «Советы по проектированию языков программирования» (PDF) . п. 27. (Это утверждение иногда ошибочно приписывают Эдсгеру В. Дейкстре , также участвовавшему в реализации первого компилятора ALGOL 60. )
  5. ^ Абельсон, Хэл ; Дыбвиг, РК ; и др. Рис, Джонатан; Клингер, Уильям (ред.). «Пересмотренный (3) отчет об алгоритмической языковой схеме (посвященный памяти Алгола 60)» . Проверено 20 октября 2009 г.
  6. Энциклопедия компьютерных языков. Архивировано 27 сентября 2011 г., в Wayback Machine.
  7. ^ Дневной свет, EG (2011). «Сплоченный клич Дейкстры к обобщению: появление рекурсивной процедуры, конец 1950-х - начало 1960-х годов» . Компьютерный журнал . 54 (11): 1756–1772. дои : 10.1093/comjnl/bxr002 .
  8. ^ Круземан Арец, FEJ (30 июня 2003 г.). «Компилятор Дейкстра-Зонневельда ALGOL 60 для Electrologica X1» (PDF) . Программная инженерия . История информатики. Амстердам: Centrum Wiskunde & Informatica. ISSN   1386-3711 . Архивировано из оригинала (PDF) 17 января 2004 г.
  9. ^ Айронс, Эдгар Т. , Синтаксически управляемый компилятор для ALGOL 60, Communications of the ACM, Vol. 4, с. 51. (январь 1961 г.)
  10. ^ Курц, Томас Э. (1978). "БАЗОВЫЙ". История языков программирования . стр. 515–537. дои : 10.1145/800025.1198404 . ISBN  0127450408 .
  11. ^ Грис, Д.; Пол, М.; Виле, HR (1965). «Некоторые методы, использованные в ALCOR Illinois 7090» . Коммуникации АКМ . 8 (8): 496–500. дои : 10.1145/365474.365511 . S2CID   18365024 .
  12. ^ Байер, Р.; Грис, Д.; Пол, М.; Виле, HR (1967). «Вскрытие ALCOR Illinois 7090/7094» . Коммуникации АКМ . 10 (12): 804–808. дои : 10.1145/363848.363866 . S2CID   3783605 .
  13. ^ Автоматические калькуляторы с барабанным хранилищем , Друзья Технической коллекции Дрездена.
  14. ^ Мунье-Кун, Пьер (2014). «Алголь во Франции: от универсального проекта к встроенной культуре» . IEEE Анналы истории вычислений . 36 (4): 6. ISSN   1058-6180 .
  15. ^ Курц, соч. цит. , стр. 517.
  16. ^ Буссар, Жан-Клод (июнь 1964 г.). Исследование и создание компилятора Алгола60 на электронных калькуляторах типа IBM 7090/94 и 7040/44 [ Проектирование и реализация компилятора Алгола60 на электронных калькуляторах IBM 7090/94 и 7040/44 ] (PhD) (на французском языке). Университет Жозефа-Фурье - Гренобль I.
  17. ^ Клод Пэйр (27 апреля 1965 г.). Описание компилятора АЛГОЛА . Группа пользователей Европейского региона 1620 . ИБМ.
  18. ^ Круземан Арец, FEJ (1973). Компилятор Алгола 60 в Алголе 60 . Трактаты Математического центра. Амстердам: Математический центр.
  19. ^ Ахо, Альфред В .; Сетхи, Рави ; Уллман, Джеффри Д. (1986). Составители: принципы, методы и инструменты (1-е изд.). Аддисон-Уэсли. ISBN  978-0-201-10194-2 . , Раздел 7.5 и ссылки в нем
  20. ^ "803 АЛГОЛ" , руководство для Elliott 803 АЛГОЛ.
  21. ^ «Язык программирования АЛГОЛ» . www.engin.umd.umich.edu . Архивировано из оригинала 10 февраля 2010 года . Проверено 11 января 2022 г.
  22. ^ «Привет, мир! Пример программы» . www.engin.umd.umich.edu . Архивировано из оригинала 4 февраля 2010 года . Проверено 11 января 2022 г.
  23. ^ Фортран#"Привет, мир!" пример
  24. ^ «Серия ICL 1900: Язык Алгол» . Техническая публикация ICL 3340. 1965 г.

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: e61a7138b26c0b54afc6bf770aa84f6c__1713857460
URL1:https://arc.ask3.ru/arc/aa/e6/6c/e61a7138b26c0b54afc6bf770aa84f6c.html
Заголовок, (Title) документа по адресу, URL1:
ALGOL 60 - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)