ALGOL
ALGOL (сокращение от «Algorithmic Language — семейство императивных языков компьютерного программирования, первоначально разработанных в 1958 году. ALGOL сильно влиял на многие другие языки и был стандартным методом описания algorithm, используемым Ассоциацией вычислительной техники (ACM) в textbooks и академических источниках в течение более чем тридцати лет.
В том смысле, что синтакс большинства современных языков является «Algol-like», он, возможно, был самым влиятельным из четырёх языков программирования высокого уровня, среди которых он был роумным: FORTRAN, Lisp и COBOL. Он был разработан, чтобы избежать некоторых из воспринимаемых проблем с FORTRAN и в конечном итоге дал начало многим другим языкам программирования, в том числе PL/B, PAsCl,
ALGOL ввел кодовые блоки и. пары для их разграничения. Это был также первый язык, реализующий определения вложенных функций с лексической сферой действия. Более того, это был первый язык программирования, который уделял детальное внимание формальному определению языка и через Algol 60 Report представил форму Backus — Naur, основную формальную нотацию для дизайна языка.
5 ХУДШИХ языков программирования, которые не стоит учить!
Было три основных выражения, названных в честь лет, когда они были впервые опубликованы:
- ALGOL 58 — первоначально предлагалось называться IAL, для международного альраического языка.
- ALGOL 60 — впервые реализован как X1 ALGOL 60 в середине 1960 года. Пересмотрено в 1963 году.
- ALGOL 68 — представил новые элементы, включая гибкие arrais, ces, параллелизм, идентификацию оператора. Пересмотрено в 1973 году.
ALGOL 68 существенно отличается от ALGOL 60 и не был хорошо принят, так что в целом «Algol» означает ALGOL 60 и его диалекты.
Важные соображения
Международный Al raic Language (IAL), переименованный в ALGOL 58, был очень влиятельным и в целом считался анцестором большинства современных языков программирования (так называемых Algol-подобных языков). Кроме того, объектный код ALGOL представлял собой простую, компактную и основанную на стеке архитектуру набора, обычно используемую при обучении компостроению и другим языкам высокого порядка, из которых Algol обычно считается первым.
История
ALGOL был совместно разработан комитетом европейских и американских компьютерщиков на встрече в 1958 году в Швейцарском федеральном технологическом институте в Иче (ETH ich; cf. ALGOL 58). В ней были указаны три различных синтакса: эталонный синтакс, синтакс публикации и синтакс реализации. Различные синтаксы позволяли ему использовать различные имена ключей и конукции для десятичных точек (запятые против периодов) для разных языков.
ALGOL использовался в основном учеными-исследователями в США и Европе. Его использованию в коммерческих приложениях мешало отсутствие в его описании стандартных средств ввода/вывода и отсутствие интереса к языку со стороны крупных компьютерных вендоров, отличных от Burro s Corporation. ALGOL 60, однако, стал стандартом для публикации algorithms и оказал глубокое влияние на будущее развитие языка.
Алгол
Семейное древо династий языков программирования Algol, Fortrun и COHARI
Джон Бэкус разработал метод нормальной формы Бэкуса для описания языков программирования специально для ALGOL 58. Он был пересмотрен и расширен Петером Науром для ALGOL 60, а в Donald Knuth’s переименована в форму Backus — Naur.
Питер Наур: «Будучи редактором ALGOL Bulletin I был втянут в международные дискуссии языка и был выбран в члены европейской языковой дизайнерской группы в ноябре 1959 года. В этом качестве я был редактором доклада ALGOL 60, подготовленного в результате встречи ALGOL 60 в Париже в январе 1960 года «.
На совещании в Париже (с 1 по 16 января) присутствовали следующие лица:
- Х.Л. В, Петер Наур, Х.Рутисхаузер, Х.Самельсон, Бернард Вокез, Хаан ван Вийнгаарден и Майкл Вудгер (из Европы)
- Джон Бэкус, Йен Грин, Чарльз Ке, Джон Маккарти, Алан Дж. Перлис, и Джозеф Генри Кстейн (из США).
Алан Перлис дал видное описание встречи: «Встречи были экс-, бесконечными и изнурительными. Один стал агватированным, когда хорошие идеи были отвергнуты вместе с плохими другими. Тем не менее, делигенция в течение всего периода. Химия 13 была превосходной «.
ALGOL 60 вдохновил многие языки, которые следовали за ним. Хур заметил: «Вот язык настолько опередил свое время, что это было не только усовершенствование своих преддатчиков, но и почти всех его преемников». Язык программирования Scheme, вариант Lisp, принявший блочную структуру и лексическую область ALGOL, также принял формулировку «Пересмотренный отчет о схеме Algorithmic языка» для своих стандартов в HOMAGE AL.
ALGOL и исследование языка программирования
Как отметил Питер Ланьо, ALGOL был первым языком, который сочетал бесшовно непроницаемые эффекты с (call-by-name) lambda calculus. Пожалуй, самая элегантная формализация языка обусловлена Джоном К. Рейнольдсом, и он лучше всего демонстрирует свою синтактическую и семантическую чистоту. Идеализированный ALGOL Рейнольдса также выдвинул дологическую аргументацию относительно пригодности локальных эффектов в контексте языков call-by-name, в отличие от глобальных эффектов, используемых языками call-by-value, такими как ML. Концептуальная интегральность языка сделала его одним из основных объектов семантических исследований, наряду с программированием вычислительных функций (PCF) и PCML.
Хронология IAL
На сегодняшний день было по меньшей мере 70 дополнений, удлинений, vations и суббалангов Algol 60.
Диалекты Burro s включали специальные диалекты Bootstro, такие как ESPOL и NEWP. Последний до сих пор используется для системного программного обеспечения Unisys MCP.
Свойства
ALGOL 60, как официально определено, не имеет средств ввода-вывода; элементы определяют свои собственные способы, которые редко совместимы друг с другом. Напротив, ALGOL 68 предлагает обширную библиотеку средств ввода/вывода.
ALGOL 60 допускает две стратегии оценки для передачи параметров: общий вызов по значению и вызов по имени. Поименный вызов имеет определенные эффекты в отличие от поименного вызова.
Например, без указания параметров как значения или ссылки невозможно разработать процедуру, которая будет заменять значения двух параметров, если фактические параметры, которые передаются, являются целочисленной переменной и array, который той же самой целочисленной переменной. Подумайте о передаче pointer, чтобы поменять местами (i, A [i]) в функции. Теперь, когда каждый раз происходит ссылка на своп, он пересматривается. Скажем, i: = 1 и A [i]: = 2, так что каждый раз, когда происходит своп, он возвращает другую комбинацию значений ([1,2], [2,1], [1,2] и так далее). Аналогичная ситуация возникает при передаче функции random в качестве фактического аргумента.
Call-by-name известен многим компаниям по интересным «громам», которые используются для его реализации. Дональд Кнут (Donald Knuth) разработал тест «мужчина или мальчик» для разделения компиляторов, которые реализовали «рекурсию и нелокальные ссылки».
ALGOL 68 был определен с использованием двухуровневого формализма, изобретённого Хааном ван Вийнгаарденом и носящего его имя. Van Wijngaarden ars используют контекстно-свободный ars для генерации бесконечного набора постановок, которые будут распознавать конкретную программу ALGOL 68; примечательно, что они способны выразить те требования, которые во многих других стандартах языка программирования помечены как «семантика» и должны быть выражены в ambiguity-склонной к естественному языку прозы, а затем реализованы в compilers как ad hoc код к формальному языку.
Примеры и проблемы переносимости
Сравнение образцов кода
ALGOL 60
(Способ написания текста bold зависит от реализации, например, «INTEGER» кавычки, включенные для целых чисел. Это известно как строб.)
Процедура Absmax (a) Размер: (n, m) Результат: (y) Подстрочные значения: (i, k); значение n, m; array a; целое число n, m, i, k; вещественное y; комментарий Абсолютный наибольший элемент матрицы a, размера n по m переносится в y, и подстрочные значения этого элемента в i и k; начать целое число p, q: 0; i: 1; i: k: k: 1) до шага (1:1:1:1:1:1; начало = 1; начало = 1; начало, начало = 1; начало = 1; начало = 1; начало = 1; начало = 1; начало = 1; начало = 1; начало = 1; начало = 1; начало = 1; начало = 1; начало = 1; начало = 1)
Ниже приведен пример изготовления таблицы с использованием ALGOL Tott 803.
ПОПЛАВКОВАЯ ТОЧКА ALGOL TEST ‘BEGIN REAL A, B, C, D’ READ D’FOR A: = 0.0 STEP D ДО 6.3 НАЧНИТЕ ПЕЧАТЬ ПРОБИВКА (3), £ L? ‘B: = SIN (A)’ C: = CO(A (A (A)) ‘ПЕЧАТЬ (A), _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _. _ _ _ _. _. _. _ _. _ _. _ _, _, _, _ _ _ _. _ _ _,
PUNCH (3) отсылает выходной сигнал на телеприцептор, а не на пробойник. SAMELINE подавляет обратную + линейную подачу каретки, обычно печатаемую между аргументами. ALI (1,6) управляет форматом выходного сигнала с 1 цифрой до и 6 после десятичной точки.
ALGOL 68
Следующие коды являются версиями ALGOL 68 вышеприведенного кода ALGOL 60.
ALGOL 68, использовавшие подходы ALGOL 60 к стробу. В случае ALGOL 68 маркеры с шрифтом bold являются зарезервированными словами, типами (модами) или операторами.
proc max = ([,] real a, ref real y, ref int i, k) real: comment Абсолютный наибольший элемент матрицы a, размером a на 2 a переносится в y, а подстрочные индексы этого элемента в i и k; комментарий начинается с вещественных y: = 0; i: = a; k: = 2 a; для p от a до a для q от 2 ‘ a до 2 q ‘ a;
floating point algol68 test: (real a, b, c, d; # printf — отсылает вывод в выделенный файл. # # printf ($ p $); — выбирает новую страницу # printf (($ pg $, «Enter d:»)); читает (d); для шага от 0 в то время как a: = step * d; a < = 2 *pi do printf ($ $ $) printf ($ $ $);
Временная шкала: H world
Вариации и отсутствие портабельности программ от одной реализации к другой легко демонстрирует классическая программа h world.
ALGOL 58 (IAL)
ALGOL 58 не имел средств ввода-вывода.
Семейство ALGOL 60
Поскольку ALGOL 60 не имел средств ввода/вывода, в ALGOL нет портабельной программы h World. Следующие три примера — в Burro s Extended Algol. Первые два прямых выхода на интерактивном терминале, на котором они работают. Первый использует символ array, похожий на C. Язык позволяет использовать array identifier в качестве точки для array и, следовательно, в операторе REPLACE.
BEGIN FILE F (KIND = REMOTE); EBCDIC ARRAY E [0:11]; ЗАМЕНИТЬ E НА «HINGWORLD!»; WRITE (F, *, E); END.
Программа, использующая встроенный формат:
BEGIN FILE F (KIND = REMOTE); WRITE (F, < «HINGWORLD!» ; END.
Четная программа использующая оператор Display. Обратите внимание, что его вывод будет в конечном итоге на системном консоле (‘SPO:
НАЧАЛО ОТОБРАЖЕНИЯ («HINGWORLD! КОНЕЦ.
Альтернативный пример использования ввода-вывода Tott Algol состоит в следующем. Tott Algol использовал различные символы для «open-string-quote» и «close-string-quote»:
программа HiFolks; начать печатать ‘H world’; завершить;
Вот версия для Hott 803 Algol (A104) Стандарт Hott 803 использовал 5 дырочных бумажных букв и, таким образом, имел только верхний case. В коде отсутствовали какие-либо символы кавычек, поэтому £ (UK Pound Sign) использовался для открытых кавычек и? (Question Mark) для закрытых кавычек.
HIFOLKS ‘BEGIN PRINT £ HINGWORLD £ L??’ END ‘APOS;
Версия Algol I/O серии ICT 1900 позволяла вводить данные с бумажного конверта или пробитого карда. Символы открытых и закрытых кавычек были представлены с помощью «» (и) «» и пробелов%. «» BEGIN ‘WRITE TEXT (‘ (‘H % WORLD ;’ ENDAPOS;
ALGOL 68
Код ALGOL 68 был опубликован с зарезервированными словами обычно в нижнем регистре, но с жирным или неполным шрифтом. Begin printf (($ gl $, «H, world!»)) заканчивается на языке «Algol 68 Report» средства ввода/вывода были коллективно названы » ut».
Временная шкала специальных символов ALGOL
ALGOL были задуманы в то время, когда наборы символов были разнообразны и быстро развивались; также, ALGOL были определены так, что требовались только буквы uppercase.
1960: IFIP — Язык и отчет Algol 60 включал несколько символов, которые доступны на современных компьютерах и операционных системах, но, к сожалению, не были на большинстве вычислительных систем в то время. Например: ×, start. и .
1961 Сентябрь: ASCI — Набор символов ASCI, находившийся тогда на ранней стадии разработки, имел добавленный к нему символ(Обратная косая черта) для поддержки булевых операторов ALGOL/и/.
1962: ALCOR — Этот набор символов включал необычный «» рунический перекрестный символ для lication и «» десятичный символ экспоненты для обозначения плавающей точки.
1964: GOST — советский стандарт GOST 10859 1964 года допускал кодирование 4-разрядных, 5-разрядных, 6-разрядных и 7-разрядных символов в ALGOL.
1968: «Algol 68 Report» — используются существующие символы ALGOL, а также принятые символы. и,, которые можно найти на клавиатуре IBM 2741 с наборными (или шариковыми) печатающими головками (такими как APL ball). Доклад был переведен на русский, немецкий, французский и болгарский языки и позволял программировать на языках с более крупными наборами символов, например, C c alphabet советского BESM-4. Все символы ALGOL также являются частью стандарта Unicode и большинство из них доступны в нескольких популярных шрифтах.
2009 Октябрь: Unicode — (Десятичный символ экспоненты) для обозначения плавающей точки был добавлен в Unicode 5.2 для обратной совместимости с исторической программой Buran программы ALGOL.
См. также
Дальнейшее чтение
- Ф. Л. А., Р. А. Манн, М. Фелисиано, К. Самельсон, Введение в Algol. Прентис Холл, 1964,
- Брайан Ранделл и Л. Дж. Белл, Реализация ALGOL 60: Перевод и использование программ ALGOL 60 на компьютере. Академическая пресса, 1964 год. Дизайн Whetstone Comp . Одно из ранних опубликованных описаний реализации comp . См. соответствующие документы: Whetstone Algol Revisited иThe Whetstone KDF9 Algol Translator от Брайана Ранделла
- Revised Report on the Algorithmic Language Algol 60, Peter Naur, et al. Определение ALGOL
- «Европейская сторона последней фазы разработки ALGOL 60» Петра Наура
Внешние связи
- История ALGOL в Музее компьютерной истории
- Компания ALGOL-F с поддержкой Web для небольших экспериментов
Источник: ru.knowledgr.com
История языков программирования: Algol — жертва конфликта интересов
Название языка Algol (ALGOrithmic Language), первая версия которого появилась в 1958 году, подчеркивает то обстоятельство, что он предназначен для записи алгоритмов. Благодаря четкой логической структуре Algol стал стандартным средством записи алгоритмов в научной и технической литературе. Однако он так и не смог полноценно конкурировать с языком Fortran, а с COBOL его и вовсе было трудно сравнивать в силу отсутствия некоторых важных возможностей у Algol – той же обработки текстов например или форматирования ввода/вывода.
«Роды» Algol проходили очень тяжело. Для некоторых его создателей, прямо скажем, – в муках. Ученые и эксперты отрасли никак не могли прийти к единому мнению по многим вопросам.
В результате новый язык скорее вызвал интерес, чем привлек потребителей. Грейс Хоппер охарактеризовала его так: «Похож на большую поэму: простой и ясный с точки зрения математики, но отнюдь не практичный».
Предыстория
В середине 50-х годов роль программирования в машинных кодах стала уменьшаться. Появились языки более высокого уровня – Fortran, Algol, COBOL и так далее.
Первым из них и одним из наиболее распространенных был Fortran (FORmula TRANslator – переводчик формул), разработанный группой программистов фирмы IBM в 1954 году (первая версия). Этот язык был ориентирован на научно-технические расчеты математического характера.
Грейс Хоппер — американская учёная и контр-адмирал флота США. Программист гарвардского компьютера Марк I.
В 1954 году группа под руководством Грейс Хоппер разработала систему, включающую язык программирования и компилятор, которая в дальнейшем получила название Math-Matic. После удачного завершения работ по созданию Math-Matic Хоппер и ее группа принялись за разработку нового языка и компилятора, который позволил бы пользователями программировать на языке, близком к обычному английскому. В 1958 году появился компилятор Flow-Matic. Компилятор Flow-Matic был первым языком для обработки коммерческих данных.
Разработки в этом направлении привели к созданию языка COBOL (Common Business Oriented Language). Он был создан в 1960 году. В этом языке были слабее развиты математические средства, но зато хорошо развиты средства обработки текстов, организация вывода данных в форме требуемого документа. Он задумывался как основной язык для массовой обработки данных в сферах управления и бизнеса.
Лучшее – враг хорошего
В 50-х годах ХХ века весь ученый мир ждал решения проблемы определения единого языка для научного программирования. Первыми предложили свой вариант США. В 1957 году начал активно распространяться Fortran. Но европейское сообщество опасалось гегемонии IBM (там и был создан Fortran) и других агрессивных американских фирм. Поэтому они решили, что на европейском рынке непременно обязана взойти новая «звезда».
В 1958 году в Цюрихе, на базе Федерального технического университета был создан специальный комитет. 27 мая прошло первое заседание, на котором собрались восемь наиболее уважаемых авторитетов в области компьютеров: четверо из Европы и четверо из США. На встрече присутствовали создатель Fortran Джон Бэкус и Джозеф Уэгстен, который в последующем стал председателем кратковременного комитета по COBOL.
Федеральный технический университет. г. Цюрих
Конференция под девизом «Лучшее — враг хорошего» на деле не соответствовала этому утверждению. Из этого работа продвигалась медленно. Американцы настаивали на языке, который был бы близок к уже используемым на компьютерах. Европейцев интересовали не столько компьютеры, сколько мощь языка при решении сложных математических задач. На второй день обсуждение едва не зашло в тупик из-за мелкого, но вызвавшего бурю эмоций пункта — десятичной точки.
Один из европейцев, ударив кулаком по столу, воскликнул: «Нет! Я никогда не буду использовать точку в десятичных дробях!» Американцы же пренебрежительно отнеслись к европейской привычке использовать в десятичных дробях запятую. Тогда Джозеф Уэгстен взял на себя миротворческую роль и попытался утихомирить «десятичную бурю».
Окончательное решение проблемы, предложенное Уэгстеном, обеспечило новому языку одно из его наиболее замечательных свойств. Он предложил трехуровневую модель языка: уровень описаний, публикаций и реализации.
Мелкие вопросы, типа выбора между точкой и запятой или используемого алфавита, были вынесены на второй-третий уровень, что позволило относительно быстро решить принципиальные вопросы. На уровне публикаций, согласованном позже, допускалось использование национальных ключевых слов и стандартов представления данных (в том числе и десятичной точки), уровень реализации определял язык совершенно строго — согласно ему должны были строиться трансляторы.
Дальнейшие обсуждения пошли исключительно на первом уровне, что позволило двигаться дальше и не застревать на второстепенных деталях.
Полуфабрикат
Язык, созданный на конференции в Цюрихе, многое унаследовал от Fortran, но в Algol основные понятия были собраны в более логичную, можно даже сказать, изящную структуру. Но из-за недостатка времени и необходимости компромиссов было допущено немало оплошностей. Одна из них заключалась в отсутствии процедур ввода и вывода данных. Участники совещания намеренно не касались этой области, где многое зависит от типа компьютера, полагая, что процедуры ввода и вывода должен написать разработчик компилятора языка.
Однако единодушие комитета не было абсолютным: часть делегатов уехала с конференции, полагая, что работа сделана в самом грубом приближении, а другая же часть верила, что сделано достаточно, чтобы Algol стал «звездой» и новым международным стандартом.
Одним из таких оптимистов был Джон Бэкус. В феврале 1959 года он убедил влиятельную организацию SHARE (куда входили пользователи компьютеров фирмы IBM) сделать ставку на новый язык программирования. После этого организация настоятельно порекомендовала IBM реализовать Algol.
На словах компания пошла навстречу своим клиентам, а на деле работа в этом направлении почти не велась. В то время IBM была мировым лидером на рынке компьютеров и активно внедряла Fortran, что вполне ожидаемо. У членов SHARE, на самом деле, тоже не было ясной позиции. Когда их энтузиазм угас, они как ни в чем не бывало продолжали поддерживать Fortran.
А Бэкус, несмотря на неудачу, продолжал активно продвигать Algol.
Вернувшись в Цюрих, он заинтересовался грамматикой, то есть правильным расположением слов и знаков в языке. Бэкус разработал строгую и точную систему определения каждой структуры языка логическим образом. Например, определяя элемент «цифра», он писал: «: = 0|1|2|… |9|».
Вскоре программисты стали называть этот подход к описанию синтаксиса нормальной формой Бэкуса, или БНФ. (Последующее уточнение этой работы датским астрономом Питером Науром привело к тому, что такой подход часто стали называть «форма Бэкуса-Наура», (сокращение осталось то же — БНФ). БНФ оказала существенное влияние на разработку языков программирования, в частности была положена в основу второго этапа разработки Алгола.
Между тем, успешным Algol-58 так и не стал: требовалась серьезная доработка.
Algol-60
В январе 1960 года 13 представителей стран Европы и США, включая 7 человек из прошлой цюрихской группы, встретились в Париже, чтобы «залатать дыры», оставшиеся в первом варианте. Одним из вновь прибывших был Наур, предложивший вариант измененного языка Algol, записанный при помощи БНФ.
Синтаксические диаграммы и дерево разбора
После восьми дней трудных переговоров участники конференции покинули Париж в приподнятом настроении, считая, что согласие достигнуто и даже самые ярые критики Алгола должны отныне умолкнуть.
С редким единодушием комитет по разработке Algol-60 «голосует» для этой групповой фотографии, сделанной на конференции в Париже в 1960 году. Среди участников – американский специалист по компьютерам Джон Бэкус (ближайший к камере справа) и датский астроном Петер Наур (четвертый слева), в честь которых система описания языков программирования получила название «форма Бэкуса — Наура». (Фотографию сделал Джон Маккарти, создатель языка LISP)
Но едва американские участники конференции сошли с трапа самолета, на Algol-60 обрушилась жесткая критика со стороны. Кроме того, небольшая группа участников конференции указала на неоднозначности, оставшиеся в языке, и приступила к их «рекламированию». Другие критики подчеркивали, что в язык так и не включены средства ввода/вывода.
В Америке Algol-60 встретили холодно. Более того, оказалось, что для него очень сложно написать компилятор: даже самые продвинутые компьютеры того времени не могли воспринимать набор из 116 литер, которые встречались в языке описаний.
В Европе рассуждали по-другому: новый язык давал возможность обмениваться интересными и сложными идеями, невзирая на границы и языковые барьеры. Что еще важнее, он позволил европейской компьютерной индустрии обрести независимость от американских технологий.
Algol 68
В 1962 году под эгидой Международной федерации по обработке информации (International Federation for Information Processing, IFIP) был создан новый комитет, задачей которого являлись дальнейшее совершенствование Algol. В составе нового комитета оказалось немало ученых с мировым именем, в частности, Эдсгер Дейкстра, Никлаус Вирт и Тони Хоар.
Одним из недостатков предшествующей версии все-таки было признано отсутствие ввода/вывода. Пренебрежение к этому моменту объяснялось академической направленностью языка: для ученых главный интерес представляет сам алгоритм, а в каком виде будут представлены выходные данные — дело второстепенное. Для промышленных нужд такой подход не годился.
Вторым серьезным недостатком было низкое быстродействие. Поэтому важной задачей стало повышение эффективности работы на этапе выполнения программы.
Руководителем группы разработки языка по каким-то причинам был А. Ван Вейнгаарден, директор Математического центра Амстердама. Будучи чистым математиком, он, пользуясь своим авторитетом, принимал решения, с которыми не соглашались программисты-практики, что негативно повлияло на получившийся в результате язык.
К сожалению, авторитарный стиль руководства ван Вейнгаардена нередко приводил к размолвкам в коллективе и даже стал причиной выхода Хоара и Вирта из команды. О том, как тяжела была эта потеря для команды, можно судить по такому факту: предложения Вирта, не принятые комитетом, легли в основу языка Pascal.
В Algol 68 было реализовано несколько интересных идей (например, механизмы расширения языка, а также средства для параллельных вычислений), но он получил ограниченное применение.
В России были энтузиасты, которые активно использовали его в работе, и язык на основе Algol 68 стал некогда базовым для программирования отечественного компьютера «Эльбрус».
Особенности языка
Как и в большинстве других языков программирования, программа на Algol состоит из главной программы и набора подпрограмм.
begin procedure SUM(V,N); valueN; realarray V; integer N; begin integer I; real TEMP; TEMP:=0; for I:=1 step1 until N do TEMP:=TEMP+V[I]; SUM:=TEMP end; integer K; START: inreal(1,K); if K>0 then begin realarray A[1:K]; inarray(1,A); outreal(2,SUM(A,K)); gotoSTART end end
Структуры данных, созданные внутри блока, локальны в его пределах и при выходе из блока уничтожаются. Таким образом можно управлять временем жизни данных и областью видимости их идентификаторов. Динамическое выделение памяти для переменных в блоке позволяет эффективно использовать рекурсию.
Блоки могут образовывать вложенные структуры, то есть внутрь блока может быть вложен блок, в него — другой блок и так далее. Важной особенностью языка является также то, что блок является разновидностью оператора — составным оператором и может быть употреблен везде, где допустим обычный оператор.
В Algol реализованы логический, целочисленный и вещественный типы, а из структур данных — лишь однородный массив. Правда, массивы являются динамическими, что позволяло эффективно управлять распределением памяти. К сожалению, типы и структуры данных в языке не слишком разнообразны. Пожалуй, это и определило дальнейшую судьбу языка, применявшегося в первую очередь для научных вычислений.
К особенностям языка можно также отнести механизмы передачи параметров подпрограммам. Их два: хорошо известная передача по значению и довольно экзотическая передача по имени.
Переданное в процедуру выражение вычисляется каждый раз – как если бы вместо формальных параметров были подставлены их значения, вычисленные в контексте вызывающей программы. По сути это нечто среднее между макроподстановкой и вызовом подпрограммы.
Begin procedure p (a,b); name a, b; integer a, b; begin for a:=1 step1 until 10 do b := 0 end p; integer i; integer array s [1:10]; p (i, s[i]) end
При выполнении процедуры p на каждом шаге цикла вместо a подставляется i, а вместо b подставляется s[i], и эта процедура просто обнуляет массив s. Проблем с таким способом передачи параметров очень много, поэтому передача параметров по имени так и осталась прерогативой Algol. Но этот способ передачи параметров оказал влияние на дальнейшее развитие языков программирования.
Роль в истории
Так же, как министерство обороны США в свое время активно поддержало язык COBOL, независимый исследовательский совет Германии и другие правительственные организации западноевропейских стран поддержали Algol.
Благодаря этому язык распространился от Великобритании до Советского Союза. Большинство компиляторов оказались удачными, и вскоре Algol был признан международным языком европейских программистов.
Algol не стал всеобщим международным стандартом, как надеялись некоторые, поскольку такой его статус всерьез задел бы американские интересы. Он набрал небольшую популярность в США, но так навсегда и остался в тени Fortran.
Тем не менее, многие языки, возникшие позднее, базировались (по крайней мере, частично) на Algol, и его вклад в их развитие связан с несколькими основными идеями.
Одна из наиболее важных — блочная структура, позволяющая делить программы на замкнутые единицы, разрабатываемые независимо. Другая идея — рекурсия. Третья идея — БНФ, формализованное определение синтаксиса.
Эти и другие фундаментальные идеи достались в наследство разработчикам других языков.
- история языков программирования
- программирование
- algol
- fortran
- структурное программирование
- Программирование
- Компиляторы
- Математика
Источник: habr.com
1.3 Язык Упрощенный Алгол.
Основные меры сложности выражаются в терминах определения1 для РАМ и машин Тьюринга, но вообще говоря, нет необходимости описывать алгоритмы в терминах столь простых машин. Для более наглядного описания алгоритмов мы введем некоторый язык высокого уровня, называемый Упрощенным Алголом. Программу на Упрощенном Алголе можно перевести непосредственно в программу для РАМ с помощью соответствующего транслятора. Однако нас не интересуют детали перевода Упрощенного Алгола в конкретную программу для РАМ. Для наших целей нужно рассматривать лишь время и память, необходимые для выполнения команд, составленных оператором на Упрощенном Алголе.
Упрощенный Алгол отличается от всех принятых языков программирования тем, что он разрешает использовать любой тип математических предписаний, если только их значения понятны, а перевод в команды РАМ очевиден. Этот язык не имеет также фиксированного набора типов данных. Переменные могут представлять целые числа, слова и массивы.
Дополнительные типы данных — множества, списки, очереди и т.д. — можно вводить по мере необходимости. Формальное описание типов данных по возможности избегается. Тип данных какой-то переменной и ее область действия должны быть ясны по ее названию, либо по контексту.
В Упрощенном Алголе применяются традиционные конструкции математики и языков программирования, такие, как выражения, условия, операторы и процедуры.
Программа на Упрощенном Алголе — это оператор одного из следующих типов:
2) if условие then оператор else оператор
3а) while условие do оператор
3б) repeat оператор until условие
4) for переменнаяисходное значение step размер шага
until заключительное значение do оператор
5) метка: оператор
6) goto метка
блок
8а) procedure имя (список параметров): оператор
8б) return выражение
8в) имя процедуры (аргументы)
9а) read переменная
9б) write переменная
10) comment комментарий
11) любой другой произвольный оператор
Дадим краткую характеристику перечисленных операторов.
1. Временная сложность оператора присваивания определяется временем, которое затрачивается на вычисление значения выражение и присваивании этого значения переменной.
2. Вес if-оператора равен сумме весов, требуемых для вычисления значения и проверки его, и веса оператора, стоящего сразу за then, или оператора, стоящего за else, в зависимости от того, какой из них выполняется на самом деле.
3. Временная сложность операторов while и repeat определяется одинаково: вес этих операторов равен сумме весов всех проверок условия и всех выполненных операторов.
4. Вес for-оператора определяется аналогично while-оператору.
5. Меткам не приписывается никакого веса.
6. Основное применение goto-оператора — выход из while-операторов. Вес goto равен 1.
7. Последовательность операторов между begin и end образует оператор, который называется блоком. Вес блока равен сумме весов операторов, составляющих блок.
8. В Упрощенном Алголе процедуры можно определять и впоследствии вызывать. Определяются процедуры соответствующим оператором (оператор определения процедур)-см. 8а ,-аргументами которого являются формальные параметры.
Например, следующий оператор определяет процедуру-функцию MIN (определение меньшего числа в паре чисел):
procedure MIN(x, y)
if x>y then return y else return x;
Процедуры используются одним из двух способов. Один способ — в качестве функции. После того как процедура-функция описана, к ней можно обратиться в некотором выражении, вызывая ее имя с нужными аргументами. В этом случае последним оператором, выполняемом в данной процедуре, должен быть return-оператор(8б).
Этот оператор приводит к вычислению выражения, следующего за выделенным словом return, и окончанию выполнения процедуры. Значением функции будет значение этого выражения. Например, QMIN(3+2, 7) приводит к тому, что Q получает значение 5. Выражения 2+3 и 7 называются фактическими параметрами этого обращения к данной процедуре.
Второй способ применения процедур состоит в вызове ее с помощью оператора вызова процедуры (8в). Этот оператор есть, по существу, имя процедуры, за которым идет список фактических параметров. Оператор вызова процедуры может изменить (и обычно изменяет) данные (значения переменных, массивов и т.д.) вызываемой программы. В определении вызываемой таким способом процедуры return-оператор не нужен. Завершение выполнения последнего оператора процедуры завершает и выполнение оператора ее вызова. Например, следующий оператор определяет процедуру INV(x, y) (взаимо замену):
procedure INV(x, y)
tx;
xy;
yt;
Для обращения к этой процедуре можно было бы написать оператор вызова процедуры такого вида:INV(A[i], А[j]).
Обмен информацией между процедурами можно осуществлять двумя способами. Во-первых, с помощью глобальных переменных, которые неявно описаны в некоторой универсальной области. В этой области есть подобласть, в которой определены процедуры. Во-вторых, связь между процедурами можно осуществлять с помощью параметров.
В упрощенном Алголе используется вызов по ссылке, при котором параметры обрабатываются с помощью указателей на фактические параметры. Если фактический параметр является выражением (возможно, постоянной), то соответствующий формальный параметр трактуется как локальная переменная, которой в качестве начального значения присвоено значение этого выражения. Поэтому вес реализуемого вычисления функции или выполнения вызова процедуры на РАМ равен сумме весов выполненных операторов в определении соответствующей процедуры.
9. Вес read-оператора равен 1, а вес write-оператора на 1 больше вычисленного значения выражения, стоящего за словом write.
10. Вес comment-оператора равен 0.
Поскольку переменные не будут описываться, будем считать, что в качестве области действия переменной берется вся процедура или программа. Всякий раз, когда может возникнуть недоразумение по поводу области действия переменной, будет даваться явное описание.
Источник: studfile.net
Алгол
Алгол это первоначально алгоритмический язык, применяющийся для записи алгоритмов решения задач числительного анализа; позднее — название ряда языков программирования, применяемых для описания программ решения на ЭВМ научно-технических задач.
Существует несколько разновидностей языка алгол: алгол-58, алгол-60, алгол-68 и другие; наиболее распространён был алгол-68 — многоцелевой универсальный язык программирования, широко используемый для описания программ решения задач в различных областях науки и техники.
Слово алгол произошло от английского algorithmic.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Постоянный автор научно-популярного журнала «Техник». Сотрудник НИИ Точных Приборов. Технический эксперт.
Источник: www.polislov.ru