АЛГОЛ

редактировать
Семейство языков программирования

АЛГОЛ
Руководство по АЛГОЛ-20 от 1965 года
Парадигма Процедурное, императив, структурированный
СемьяАЛГОЛ
Разработано Бауэром, Боттенбрухом, Рутисхаузером, Самельсон, Бэкус, Кац, Перлис, Вегштейн, Наур, ван Вейнгаарден, Вудгер, Маккарти
Впервые появилось1958; 62 года назад (1958)
Дисциплина набора текста Статический, сильный
Объем Лексический
Под влиянием
Большинство последующих императивных языков (так называемые АЛГОЛ-подобные языки )
например PL / I, Simula, BCPL, B, Pascal, C

ALGOL(/ ˈælɡɒl, -ɡɔːl / ; сокращение от " Алгоритмический язык") - это семейство императивных компьютерных языков программирования, первоначально разработанных в 1958 году. Алгол сильно повлиял на многие другие языки и был стандартным методом для описание алгоритма, используемое Association for Computing Machinery (ACM) в учебниках и академических источниках до появления объектно-ориентированных языков на протяжении более тридцати лет.

В том смысле, что синтаксис большинства современных языков является «алголо-подобным», он, возможно, был самым влиятельным из четырех языков программирования высокого уровня, среди которых он был примерно современным: FORTRAN, Лисп и КОБОЛ. Он был разработан, чтобы избежать некоторых предполагаемых проблем с FORTRAN, и в конечном итоге привел к появлению многих других языков программирования, включая PL / I, Simula, BCPL, B, Pascal и C.

ALGOL представил кодовые блоки и пары begin... endдля их разделения. Это был также первый язык, реализующий определения вложенных функций с лексической областью видимости. Более того, это был первый язык программирования, который уделил особое внимание формальному определению языка и в отчете Algol 60 представил форму Бэкуса – Наура, основную формальную грамматику обозначение для языкового дизайна.

Существовали три основные спецификации, названные по годам, в которые они были впервые опубликованы:

  • АЛГОЛ 58 - первоначально предлагалось называть IAL, для международного алгебраического языка.
  • АЛГОЛ 60 - Впервые реализован как X1 ALGOL 60 в середине 1960 года. Пересмотрено в 1963 году.
  • АЛГОЛ 68 - введены новые элементы, включая гибкие массивы, срезы, параллелизм, идентификацию операторов. Пересмотрено в 1973 г.

АЛГОЛ 68 существенно отличается от АЛГОЛА 60 и не был хорошо принят, так что в целом «Алгол» означает АЛГОЛ 60 и его диалекты.

Содержание

  • 1 Важные реализации
  • 2 История
    • 2.1 Исследование алгоритмов и языков программирования
    • 2.2 Временная шкала реализаций IAL
  • 3 Свойства
  • 4 Примеры и проблемы переносимости
    • 4.1 Пример кода сравнения
      • 4.1.1 АЛГОЛ 60
      • 4.1.2 АЛГОЛ 68
    • 4.2 Временная шкала: Hello world
      • 4.2.1 АЛГОЛ 58 (IAL)
      • 4.2.2 Семейство АЛГОЛ 60
      • 4.2. 3 ALGOL 68
    • 4.3 Временная шкала специальных символов ALGOL
  • 5 См. Также
  • 6 Ссылки
  • 7 Дополнительная литература
  • 8 Внешние ссылки

Важные реализации

Международный алгебраический язык (IAL), переименованный в АЛГОЛ 58, имел большое влияние и, как правило, считался предком большинства современных языков программирования (так называемых языков, подобных Алголу). Кроме того, объектный код ALGOL был простой, компактной и основанной на стеке архитектурой набора инструкций, обычно используемой при обучении конструкции компилятора и других языков высокого порядка; первым из которых обычно считается Алгол.

История

Алгол был разработан совместно комитетом европейских и американских компьютерных ученых на встрече в 1958 году в Швейцарском федеральном технологическом институте в Цюрихе (ETH Zurich ; см. АЛГОЛ 58 ). Он определил три разных синтаксиса: синтаксис ссылки, синтаксис публикации и синтаксис реализации. Различный синтаксис позволял использовать разные имена ключевых слов и соглашения для десятичных знаков (запятые и точки) для разных языков.

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

Семейное древо Алгола, Фортрана и COBOL династии языков программирования

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

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

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

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

АЛГОЛ 60 вдохновил многие языки, которые последовали за ним. Тони Хоар заметил:« Это язык, настолько опередивший свое время, что он был не только улучшение по сравнению с его предшественниками, но также и почти со всеми его преемниками ». Язык программирования Scheme, вариант Lisp, который принял блочную структуру и лексическую область видимости ALGOL, также принял формулировку «Пересмотренный отчет по схеме алгоритмического языка» для своих стандартов документов, посвященных ALGOL.

Исследование алгоритмов и языков программирования

Как отметил Питер Ландин, язык Algol был первый язык, который органично сочетает императивные эффекты с (вызовом по имени) лямбда-исчислением. Возможно, самая элегантная формулировка языка принадлежит Джону К. Рейнольдсу, и он best демонстрирует свою синтаксическую и семантическую чистоту. Идеализированный Алгол Рейнольдса также представил убедительный методологический аргумент относительно пригодности l обычные эффекты в контексте языков с вызовом по имени, которые нужно противопоставить глобальным эффектам, используемым в языках с вызовом по значению, таких как ML. Концептуальная целостность языка сделала его одним из основных объектов семантических исследований, наряду с Программирование вычислимых функций (PCF) и ML.

Временная шкала реализаций IAL

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

ИмяГодАвторСтранаОписаниеЦелевой ЦП
ZMMD- реализация1958Фридрих Л. Бауэр, Хайнц Рутисхаузер, Клаус Самельсон, Герман БоттенбрухГерманияреализация ALGOL 58 Z22
(позже Zuse Z23 поставлялся с компилятором Algol 60)
X1 АЛГОЛ 60август 1960Эдсгер В. Дейкстра и Яап А. Зонневельд НидерландыПервая реализация Алгола 60Electrologica X1
Эллиотт АЛГОЛ 1960-е годыС. AR Hoare UKТема лекции 1980 Тьюринга Elliott 803, Elliott 503, Elliott 4100 series
JOVIAL 1960Джулс Шварц СШАA DOD HOL до Ada Разное (см. Статью)
Алгол Берроуза
(несколько вариантов)
1961Burroughs Corporation (с участием Hoare, Dijkstra и др.)USAОснова Burroughs (и теперь Unisys MCP на основе) компьютеровбольших систем Burroughs, а также их среднего уровня.
1961Технологический институт Case СШАSimula изначально была заключена по контракту как расширение моделирования Case ALGOLUNIVAC 1107
1961USAДля системы разделения времени ODINPDP-1
1961Питер Наур, Йорн Йенсен ДанияРеализация полного Algol 60DASK в Regnecentralen
Дартмут ALGOL 30 1962Томас Юджин Курц и др.СШАLGP-30
1962Италия
Переводчик Алгола1962G. ван дер Мей и В.Л. van der Poel НидерландыStaatsbedrijf der Posterijen, Telegrafie en TelefonieZEBRA
1963UKEnglish Electric Company KDF9
1963СШАТест компилятора компилятора META II
Whetstone 1964Брайан Рэнделл и LJ RussellUKПодразделение атомной энергии компании English Electric Company. Предшественник Ferranti Pegasus, National Physical Laboratories ACE и English Electric DEUCE реализации.English Electric Company KDF9
1965НорвегияUNIVAC
ALGEK1965СССР АЛГЭК на базе АЛГОЛ-60 и COBOL для экономических задачМинск -22
ALGOL W 1966Никлаус Вирт СШАПредлагаемый преемник ALGOL 60IBM System / 360
1966publ. А. Виил, М. Котли, М. Рахенди,Эстонская ССР Минск-22
1967Группа GAMS (ГАМС, группа автоматизации программирования для машин среднего класса), сотрудничество Академий Comecon наукComecon Минск-22, позже ES EVM, BESM
1967ПольшаПольский компьютер
Simula 67 1967Оле-Йохан Даль и Кристен Найгаард НорвегияАлгол 60 с классамиUNIVAC 1107
Китайский Алгол 1972КитайКитайские иероглифы, выраженные через систему символов
DG / L 1972USADG Eclipse семейство компьютеров
S-algol 1979Рон Моррисон UKДобавление ортогональных типов данных с предполагаемым использованием в качестве языка обученияPDP-11 с последующей реализацией на Java VM

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

Свойства

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

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

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

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

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

Сравнение примеров кода

АЛГОЛ 60

(способ написания полужирного текста зависит от реализации, например, ' INTEGER '- кавычки включены - для целого числа. Это известно как штриховка.)

процедура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

Вот пример того, как создать таблицу, используя АЛГОЛ Elliott 803.

ТЕСТ АЛГОЛА С ПЛАВАЮЩЕЙ ТОЧКОЙ 'НАЧАТЬ REAL A, B, C, D' ПРОЧИТАТЬ D 'ДЛЯ A: = 0,0 ШАГ D ДО 6,3 НАЧАТЬ ПУАНСОН (3), £ £ L ??' B: = SIN (A) 'C: = COS (A)' ПУАНСОН (3), SAMELINE, ВЫРАВНЕН (1,6), A, B, C 'КОНЕЦ' КОНЕЦ '

ПУАНСОН (3 ) отправляет вывод на телетайп, а не перфоратор.
SAMELINE подавляет возврат каретки + перевод строки, обычно печатаемый между аргументами.
ALIGNED (1,6) управляет форматом вывода с 1 цифрой до и 6 после десятичная точка.

АЛГОЛ 68

Следующие примеры кода являются версиями АЛГОЛА 68 вышеупомянутых примеров кода АЛГОЛА 60.

Реализации АЛГОЛА 68 использовали подходы АЛГОЛА 60 к сглаживанию. В случае АЛГОЛА 68 лексемы с полужирным шрифтом являются зарезервированными словами, типами (режимs) или операторами.

procabs max = ([,] reala, refrealy, refinti, k) real: комментарийАбсолютно наибольший элемент матрицы a размером ⌈a на 2⌈a передается в y, а нижние индексы этого элемента к i и k; commentbeginrealy: = 0; i: = ⌊a; k: = 2⌊a; дляp от⌊a до⌈a doдляq от2⌊a до2⌈a doifabsa [p, q]>y , затемy: = absa [p, q]; i: = p; k: = q fiodod; y end# abs max #

Примечание: нижняя (⌊) и верхняя (⌈) границы массива и нарезка массива напрямую доступны программисту.

алгоритм algol68 с плавающей запятой: (reala, b, c, d; # printf - отправляет вывод в файлstand out. # # Printf ($ p $); - выбирает новую страницу # printf (($ pg $, "Enter d:")); read (d); дляшаг из0 whilea: = step * d; a <= 2*pi doprintf ($ l $); # $ l $ - выбирает новую строку. # B: = sin (a); c: = cos (a); printf (( $ zd.6d $, a, b, c)) # форматирует вывод с 1 цифрой до и 6 после десятичной точки. # od)

Временная шкала: Hello world

Варианты и отсутствие переносимости программ от одной реализации к другой легко продемонстрировать с помощью классической программы hello world.

АЛГОЛ 58 (IAL)

АЛГОЛ 58 не имеет средств ввода-вывода.

семейство АЛГОЛ 60

Поскольку в Алголе 60 не было средств ввода-вывода, в Алголе нет переносимой программы hello world. Следующие три примера взяты из расширенного алгоритма Берроуза. Первые два прямого вывода на интерактивный терминал они выполняются. Первый использует символьный массив, похожий на C. Язык позволяет использовать идентификатор массива в качестве указателя на массив и, следовательно, в операторе REPLACE.

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

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

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

Еще более простая программа, использующая оператор Display. Обратите внимание, что его вывод будет в системной консоли ('SPO'):

BEGIN DISPLAY («HELLO WORLD!») END.

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

программаHiFolks; начатьprint'Hello world'; конец;

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

HIFOLKS 'НАЧАТЬ ПЕЧАТЬ £ HELLO WORLD £ L ??' END '

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

'BEGIN' WRITE TEXT ('(' HELLO% WORLD ')'); 'КОНЕЦ'

АЛГОЛ 68

Алгол 68код был опубликован с зарезервированными словами, обычно в нижнем регистре, но выделенными жирным или подчеркнутым.

beginprintf (($ gl $, "Hello, world!")) end

На языке "Algol 68 Report" функции ввода / вывода собирательно назывались «Транспут».

Временная шкала специальных символов АЛГОЛА

Алголы были задуманы в то время, когда наборы символов были разнообразными и быстро развивались; Кроме того, АЛГОЛЫ были определены так, что требовались только прописные буквы.

1960: IFIP - Язык и отчет Algol 60 включают несколько математических символов, которые доступны на современных компьютерах и операционных системах, но, к сожалению, не поддерживаются большинством вычислительных систем в то время. Например: ×, ÷, ≤, ≥, ≠, ¬, ∨, ∧, ⊂, ≡, ␣ и ⏨.

Сентябрь 1961 г.: ASCII - в набор символов ASCII, тогда еще находившийся на ранней стадии разработки, был добавлен символ \ (обратная косая черта), чтобы поддержка логических операторов ALGOL / \ и \/.

1962: ALCOR - этот набор символов включал необычный рунический крестик «᛭» для умножения и «⏨» «Десятичный экспоненциальный знак для записи с плавающей запятой.

1964: ГОСТ - Советский стандарт 1964 года ГОСТ 10859 разрешал кодирование 4-битных, 5-битных, 6 -битовые и 7-битные символы в ALGOL.

1968: «Отчет Algol 68» - использовались существующие символы ALGOL, а затем были приняты →, ↓, ↑, □, ⌊, ⌈, ⎩, ⎧, ○ , ⊥ и ¢, которые можно найти на клавиатуре IBM 2741 со вставленными typeball (или мячом для гольфа) печатающими головками (например, Мяч для гольфа APL ). Они стали доступны в середине 1960-х, когда разрабатывалась АЛГОЛ 68. Отчет был переведен на русский, немецкий, французский и болгарский языки и позволял программировать на языках с более крупными наборами символов, например, кириллица алфавит советского БЭСМ -4. Все символы ALGOL также являются частью стандарта Unicode, и большинство из них доступно в нескольких популярных шрифтах .

2009 Октябрь: Unicode - (Десятичный экспоненциальный символ) для записи с плавающей запятой был добавлен в Unicode 5.2 для обратной совместимости с исторической программой Buran программным обеспечением ALGOL.

См. Также

Ссылки

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

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

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