АЛГОЛ 60

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

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

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

Содержание

  • 1 Стандартизация
  • 2 История
    • 2.1 АЛГОЛ 60 временная шкала реализаций
  • 3 Свойства
    • 3.1 АЛГОЛ 60 Зарезервированные слова и ограниченные идентификаторы
      • 3.1.1 Стандартные операторы
  • 4 Примеры и проблемы переносимости
    • 4.1 Сравнение примеров кода
      • 4.1.1 АЛГОЛ 60
      • 4.1.2 Семейство АЛГОЛ 60
  • 5 См. Также
  • 6 Ссылки
  • 7 Дополнительная литература
  • 8 Внешние ссылки

Стандартизация

АЛГОЛ 60 - с COBOL - были первыми языками, стремящимися к стандартизации.

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

История

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

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

Питер Наур: «Как редактор бюллетеня ALGOL я был вовлечен в международные дискуссии по языку и был избран членом Европейской группа языкового дизайна в ноябре 1959 года. В этом качестве я был редактором отчета ALGOL 60, подготовленного в результате встречи ALGOL 60 в Париже в январе 1960 года ».

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

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

Изначально язык не включал рекурсию. Он был вставлен в спецификацию в последнюю минуту, вопреки желанию некоторых членов комитета.

АЛГОЛ 60 вдохновил многие языки, которые последовали за ним. Тони Хоар заметил: «Этот язык настолько опередил свое время, что он был не только улучшением своих предшественников, но и почти всех. его преемники. "

График реализации Алгола 60

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

ИмяГодАвторСостояниеОписаниеЦелевой ЦП
X1 АЛГОЛ 60август 1960 г.Эдсгер В. Дейкстра и Яап А. Зонневельд НидерландыПервая реализация ALGOL 60Electrologica X1
Algol1960Эдгар Т.. УтюгиUSAAlgol 60 CDC 1604
Burroughs Algol
(несколько вариантов)
1961Корпорация Берроуза (с участием Хора, Дейкстры и др.)СШАОснова Берроуза (а теперь на Unisys MCP ) компьютерыбольшие системы Берроуза
, а также их средний уровень.
1961СШАSimula изначально была заключена по контракту как расширение моделирования Case ALGOLUNIVAC 1107
1961USAдля разделения времени ODIN системаPDP-1
1961Питер Наур, Йорн Йенсен ДанияAlgol 60DASK в Regnecentralen
1962,ШвецияАлгол 60СМИЛ в Лундском университете
1962Питер Наур, Йорн Йенсен ДанияAlgol 60GIER at Regnecentralen
Дартмут ALGOL 30 1962Томас Юджин Курц и др.СШАLGP-30
Алькор Майнц 20021962Урсула Хилл-Самельсон, Ханс ЛангмаакГерманияSiemens 2002
1962Италия
Эллиотт АЛГОЛ 1962С. А. Р. Хоар UKОбсуждался в его лекции 1980 Премии Тьюринга Эллиот 803 и Эллиотт 503
Алгол 601962Роланд ШтробельВосточная Германия Осуществляется Институтом прикладной математики Немецкой академии наук в Берлине Zeiss-Rechenautomat ZRA 1
Algol Translator1962Г. ван дер Мей и В.Л. van der Poel НидерландыStaatsbedrijf der Posterijen, Telegrafie en TelefonieZEBRA
1963UKEnglish Electric Company KDF9
1963СШАТест компилятора META II, компилятор
FP6000 Algol1963Roger Moore Canada, написанный для Saskatchewan Power Corp FP6000
Whetstone 1964Брайан Рэнделл и Лоуфорд Джон РасселUKПодразделение атомной энергии English Electric Company. Предшественник реализации Ferranti Pegasus, National Physical Laboratories ACE и English Electric DEUCE.English Electric Company KDF9
1965НорвегияUNIVAC
Algol 601965FEJ Kruseman AretzНидерландыКомпилятор MC для EL-X8Electrologica X8
ALGEK1965СССР Минск-22 АЛГЭК, основанный на поддержке АЛГОЛ-60 и COBOL, для хозяйственных задач
1966опубл. А. Виил, М. Котли и М. Рахенди,Эстонская ССР Минск-22
1967Группа GAMS (ГАМС, группа автоматизированного программирования для машин среднего класса), сотрудничество Академий Comecon наукComecon Минск-22, позже ES EVM, BESM
1967ПольшаПольский компьютер
Китайский Алгол 1972КитайКитайские иероглифы, выраженные через систему символов
DG / L 1972СШАDG Eclipse семейство компьютеров
NASE 1990Эрик ШёнфельдерГерманияПереводчикLinux и MS Windows
MARST 2000Андрей МахоринРоссияТранслятор из Алгола-60 в CВсе процессоры, поддерживаемые GNU Compiler Collection; MARST является частью проекта GNU

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

Свойства

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

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

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

АЛГОЛ 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
  • ДО
  • VALUE
  • WHILE
  • ZIP

В стандартном суб-языке больших систем Burroughs есть 71 такой ограниченный идентификатор:

  • ACCEPT
  • AND
  • ATTACH
  • BY
  • CALL
  • CASE
  • CAUSE
  • CLOSE
  • DEALLOCATE
  • DEFINE
  • DETACH
  • DISABLE
  • DISPLAY
  • DIV
  • DUMP
  • ENABLE
  • EQL
  • EQV
  • ОБМЕН
  • ВНЕШНИЙ
  • ЗАПОЛНИТЬ
  • ВПЕРЕД
  • GEQ
  • GTR
  • IMP
  • IN
  • ПРЕРЫВАНИЕ
  • IS
  • LB
  • LEQ
  • LIBERATE
  • LINE
  • БЛОКИРОВКА
  • LSS
  • MERGE
  • MOD
  • МОНИТОР
  • MUX
  • NEQ
  • NO
  • NOT
  • ON
  • OPEN
  • OR
  • OUT
  • ИЗОБРАЖЕНИЕ
  • ПРОЦЕСС
  • ЗАКАЗАТЬ
  • PROGRAMDUMP
  • RB
  • READ
  • RELEASE
  • REPLACE
  • RESET
  • RESIZE
  • REWIND
  • RUN
  • SCAN
  • SEEK
  • SET
  • SKIP
  • SORT
  • SPACE
  • SWAP
  • THRU
  • TIMES
  • TO
  • WAIT
  • WHEN
  • WITH
  • WRITE

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

Стандартные операторы

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

Примеры и проблемы переносимости

Сравнение образцов кода

АЛГОЛ 60

процедураAbsmax (a) Размер: (n, m) Результат : (y) Индексы: (i, k); значениеn, m; массивa; целое числоn, m, i, k; реальныйy; комментарийАбсолютно наибольший элемент матрицы a размером n на m переносится в y, а нижние индексы этого элемента в i и k; beginцелое числоp, q; у: = 0; i: = k: = 1; дляp: = 1 шаг1 доn doдляq: = 1 шаг1 доm doifabs (a [p, q])>y затемbeginy: = abs (a [p, q]); i: = p; k: = q endendAbsmax

Реализации различаются по способу написания текста, выделенного жирным шрифтом. Слово «INTEGER», включая кавычки, должно использоваться в некоторых реализациях вместо целого числа, приведенного выше, тем самым обозначая как специальное ключевое слово.

Ниже приведен пример создания таблицы с использованием АЛГОЛА Эллиотта 803 :

АЛГОЛ ПЛАВАЮЩЕЙ ТОЧКИ ТЕСТ 'НАЧАЛО REAL A, B, C, D' READ D 'FOR A: = 0.0 ШАГ D ДО 6.3 НАЧАТЬ ПЕЧАТЬ ПУАНСОН (3), £ $$ L ??' B: = SIN (A) 'C: = COS (A)' PRINT PUNCH (3), SAMELINE, ALIGNED (1,6), A , B, C 'END' END '

семейство ALGOL 60

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

НАЧАТЬ ФАЙЛ F (KIND = REMOTE); EBCDIC ARRAY E [0:11]; ЗАМЕНИТЕ E НА «ПРИВЕТ, МИР!»; ЗАПИСАТЬ (F, *, E); КОНЕЦ.

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

BEGIN FILE F (KIND = REMOTE); ЗАПИСАТЬ (F, <"HELLO WORLD!">); КОНЕЦ.

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

BEGIN DISPLAY («HELLO WORLD!») END.

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

программойHiFolks; beginprint Hello world 'end;

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

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

В версии ICT 1900 series Algol I / O версия допускала ввод с бумажной ленты или перфокарты. Бумажная лента в «полном» режиме допускает строчные буквы. Вывод был на строчный принтер. Обратите внимание на использование '(', ')' и%.

'PROGRAM' (HELLO) 'BEGIN' 'COMMENT' OPEN QUOTE IS '(', CLOSE IS ')', ПЕЧАТНОЕ ПРОСТРАНСТВО ДОЛЖНО БЫТЬ НАПИСАНО КАК% ПОТОМУ ЧТО ПРОСТРАНСТВА ИГНОРИРУЮТСЯ; НАПИСАТЬ ТЕКСТ ('(' HELLO% WORLD ')'); 'END' 'FINISH'

См. Также

Ссылки

Дополнительная литература

Внешние ссылки

Последняя правка сделана 2021-06-07 21:24:50
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте