Коллега алгола


image

Влияние Algol на ИТ-индустрию

Название языка Algol (ALGOrithmic Language), первая версия которого появилась в 1958 году, подчеркивает то обстоятельство, что он предназначен для записи алгоритмов. Благодаря четкой логической структуре Algol стал стандартным средством записи алгоритмов в научной и технической литературе. Однако он так и не смог полноценно конкурировать с языком Fortran, а с COBOL его и вовсе было трудно сравнивать в силу отсутствия некоторых важных возможностей у Algol – той же обработки текстов например или форматирования ввода/вывода.

«Роды» Algol проходили очень тяжело. Для некоторых его создателей, прямо скажем, – в муках. Ученые и эксперты отрасли никак не могли прийти к единому мнению по многим вопросам.

В результате новый язык скорее вызвал интерес, чем привлек потребителей. Грейс Хоппер охарактеризовала его так: «Похож на большую поэму: простой и ясный с точки зрения математики, но отнюдь не практичный».


Предыстория

В середине 50-х годов роль программирования в машинных кодах стала уменьшаться. Появились языки более высокого уровня – Fortran, Algol, COBOL и так далее.

Первым из них и одним из наиболее распространенных был Fortran (FORmula TRANslator – переводчик формул), разработанный группой программистов фирмы IBM в 1954 году (первая версия). Этот язык был ориентирован на научно-технические расчеты математического характера.

image
Грейс Хоппер — американская учёная и контр-адмирал флота США. Программист гарвардского компьютера Марк 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.

image
Федеральный технический университет. г. Цюрих

Конференция под девизом «Лучшее — враг хорошего» на деле не соответствовала этому утверждению. Из этого работа продвигалась медленно. Американцы настаивали на языке, который был бы близок к уже используемым на компьютерах. Европейцев интересовали не столько компьютеры, сколько мощь языка при решении сложных математических задач. На второй день обсуждение едва не зашло в тупик из-за мелкого, но вызвавшего бурю эмоций пункта — десятичной точки.


Один из европейцев, ударив кулаком по столу, воскликнул: «Нет! Я никогда не буду использовать точку в десятичных дробях!» Американцы же пренебрежительно отнеслись к европейской привычке использовать в десятичных дробях запятую. Тогда Джозеф Уэгстен взял на себя миротворческую роль и попытался утихомирить «десятичную бурю».

Окончательное решение проблемы, предложенное Уэгстеном, обеспечило новому языку одно из его наиболее замечательных свойств. Он предложил трехуровневую модель языка: уровень описаний, публикаций и реализации.

Мелкие вопросы, типа выбора между точкой и запятой или используемого алфавита, были вынесены на второй-третий уровень, что позволило относительно быстро решить принципиальные вопросы. На уровне публикаций, согласованном позже, допускалось использование национальных ключевых слов и стандартов представления данных (в том числе и десятичной точки), уровень реализации определял язык совершенно строго — согласно ему должны были строиться трансляторы.

Дальнейшие обсуждения пошли исключительно на первом уровне, что позволило двигаться дальше и не застревать на второстепенных деталях.

Полуфабрикат

Язык, созданный на конференции в Цюрихе, многое унаследовал от Fortran, но в Algol основные понятия были собраны в более логичную, можно даже сказать, изящную структуру. Но из-за недостатка времени и необходимости компромиссов было допущено немало оплошностей. Одна из них заключалась в отсутствии процедур ввода и вывода данных. Участники совещания намеренно не касались этой области, где многое зависит от типа компьютера, полагая, что процедуры ввода и вывода должен написать разработчик компилятора языка.


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

image

Одним из таких оптимистов был Джон Бэкус. В феврале 1959 года он убедил влиятельную организацию SHARE (куда входили пользователи компьютеров фирмы IBM) сделать ставку на новый язык программирования. После этого организация настоятельно порекомендовала IBM реализовать Algol.

На словах компания пошла навстречу своим клиентам, а на деле работа в этом направлении почти не велась. В то время IBM была мировым лидером на рынке компьютеров и активно внедряла Fortran, что вполне ожидаемо. У членов SHARE, на самом деле, тоже не было ясной позиции. Когда их энтузиазм угас, они как ни в чем не бывало продолжали поддерживать Fortran.

А Бэкус, несмотря на неудачу, продолжал активно продвигать Algol.


Вернувшись в Цюрих, он заинтересовался грамматикой, то есть правильным расположением слов и знаков в языке. Бэкус разработал строгую и точную систему определения каждой структуры языка логическим образом. Например, определяя элемент «цифра», он писал: «<цифра>: = 0|1|2|… |9|».

Вскоре программисты стали называть этот подход к описанию синтаксиса нормальной формой Бэкуса, или БНФ. (Последующее уточнение этой работы датским астрономом Питером Науром привело к тому, что такой подход часто стали называть «форма Бэкуса-Наура», (сокращение осталось то же — БНФ). БНФ оказала существенное влияние на разработку языков программирования, в частности была положена в основу второго этапа разработки Алгола.

Между тем, успешным Algol-58 так и не стал: требовалась серьезная доработка.

Algol-60

В январе 1960 года 13 представителей стран Европы и США, включая 7 человек из прошлой цюрихской группы, встретились в Париже, чтобы «залатать дыры», оставшиеся в первом варианте. Одним из вновь прибывших был Наур, предложивший вариант измененного языка Algol, записанный при помощи БНФ.

image
Синтаксические диаграммы и дерево разбора

После восьми дней трудных переговоров участники конференции покинули Париж в приподнятом настроении, считая, что согласие достигнуто и даже самые ярые критики Алгола должны отныне умолкнуть.

image
С редким единодушием комитет по разработке Algol-60 «голосует» для этой групповой фотографии, сделанной на конференции в Париже в 1960 году.


еди участников – американский специалист по компьютерам Джон Бэкус (ближайший к камере справа) и датский астроном Петер Наур (четвертый слева), в честь которых система описания языков программирования получила название «форма Бэкуса — Наура». (Фотографию сделал Джон Маккарти, создатель языка LISP)

Но едва американские участники конференции сошли с трапа самолета, на Algol-60 обрушилась жесткая критика со стороны. Кроме того, небольшая группа участников конференции указала на неоднозначности, оставшиеся в языке, и приступила к их «рекламированию». Другие критики подчеркивали, что в язык так и не включены средства ввода/вывода.

В Америке Algol-60 встретили холодно. Более того, оказалось, что для него очень сложно написать компилятор: даже самые продвинутые компьютеры того времени не могли воспринимать набор из 116 литер, которые встречались в языке описаний.

В Европе рассуждали по-другому: новый язык давал возможность обмениваться интересными и сложными идеями, невзирая на границы и языковые барьеры. Что еще важнее, он позволил европейской компьютерной индустрии обрести независимость от американских технологий.

Algol 68

В 1962 году под эгидой Международной федерации по обработке информации (International Federation for Information Processing, IFIP) был создан новый комитет, задачей которого являлись дальнейшее совершенствование Algol. В составе нового комитета оказалось немало ученых с мировым именем, в частности, Эдсгер Дейкстра, Никлаус Вирт и Тони Хоар.


Одним из недостатков предшествующей версии все-таки было признано отсутствие ввода/вывода. Пренебрежение к этому моменту объяснялось академической направленностью языка: для ученых главный интерес представляет сам алгоритм, а в каком виде будут представлены выходные данные — дело второстепенное. Для промышленных нужд такой подход не годился.

Вторым серьезным недостатком было низкое быстродействие. Поэтому важной задачей стало повышение эффективности работы на этапе выполнения программы.

Руководителем группы разработки языка по каким-то причинам был А. Ван Вейнгаарден, директор Математического центра Амстердама. Будучи чистым математиком, он, пользуясь своим авторитетом, принимал решения, с которыми не соглашались программисты-практики, что негативно повлияло на получившийся в результате язык.

К сожалению, авторитарный стиль руководства ван Вейнгаардена нередко приводил к размолвкам в коллективе и даже стал причиной выхода Хоара и Вирта из команды. О том, как тяжела была эта потеря для команды, можно судить по такому факту: предложения Вирта, не принятые комитетом, легли в основу языка Pascal.

В Algol 68 было реализовано несколько интересных идей (например, механизмы расширения языка, а также средства для параллельных вычислений), но он получил ограниченное применение.


image

В России были энтузиасты, которые активно использовали его в работе, и язык на основе 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, и его вклад в их развитие связан с несколькими основными идеями.

Одна из наиболее важных — блочная структура, позволяющая делить программы на замкнутые единицы, разрабатываемые независимо. Другая идея — рекурсия. Третья идея — БНФ, формализованное определение синтаксиса.

Эти и другие фундаментальные идеи достались в наследство разработчикам других языков.

Источник: habr.com

Если вы обратите внимание на созвездие Персея, вы заметите необычную звезду под названием Алголь, которую называют часто «Звездой Демона» или «Свирепой Звездой». Если вы станете наблюдать за звездой с помощью телескопа, вначале не заметите ничего странного, однако с течением времени звезда может становиться то более яркой, то более тусклой.

Впервые такое необычное свойство звезды было замечено в 1667 году астрономом Джеминиано Монтанари, позже было подтверждено другими астрономами. Джон Гудрик заметил в 1783 году, что звезда теряет яркость каждые 2,867 суток.

Новые исследования ученых Университета Хельсинки, Финляндия, показали, что еще 3000 лет назад древние египтяне заметили периодичную переменность звезды. Ученые основывались на статистическом анализе куска папируса, известного как Каирский Календарь.

Уже не первый раз выдвигают предположения, что человечеству было известно о переменности Алголь еще до официального открытия в 17-м веке. Определенно это был знакомый объект, который появлялся в мифологии и фольклоре. Во втором веке Птолемей называл Алголь «Горгоной Персея» и ассоциировал ее со смертью от обезглавливания. (В греческой мифологии герой Персей отрубил голову горгоны Медузы).

В других культурах звезду также ассоциировали с насилием и несчастьями. Однако исследователи из Хельсинки пошли дальше мифологии и предположений и предложили серьезный анализ, основанный на исторических документах.

Гудрик предполагал, что периодичная переменность Алголь связана с фактором затмения, а именно, что темное тело, которое вращается на орбите вокруг звезды, периодически затмевает ее и временно делает звезду менее яркой для земного наблюдателя. В качестве альтернативы он предполагал, что у Алголь может быть более темная сторона, которая поворачивается к Земле каждые 2,687 суток.

Его гипотезы не подтверждались до 1881 года, когда Эдвард Чарльз Пикеринг доказал, что Алголь на самом деле является бинарной звездной системой, то есть в этой системе не одна а две звезды, названные Алголь A и Алголь В.

Еще более интригующим является то, что это была затменно-двойная звезда, то есть одна из звезд системы, более тусклая, при обращении проходит перед своей более яркой сестрой, закрывая ее свет. То есть первая гипотеза Гудрика оказалась верной.

В действительности сегодня астрономам известно, что Алголь является тройной звездной системой, которая имеет также Алголь С, расположенную немного дальше двух первых и имеющую большую орбиту.

Египтяне должны были наблюдать за небом очень скрупулезно, чтобы делать предсказания будущего, разделив календарь на удачные и неудачные дни. Каирский Календарь содержит полный список таких дней в течение одного года примерно 1200 года до нашей эры.

Но каким образом египтяне могли сделать предположения о характеристиках дней? Пока это остается загадкой. Финские ученые взяли этот исторический материал и с помощью статистического анализа определили циклы, которые стояли за ними. В календаре оказались два значительных периодичных цикла. Один из них был 29,6 дней, очень близкий к обращению Луны вокруг Земли (29,53059 суток).

Другой периодичный цикл был 2,85 суток. Автор исследований Лаури Йетсу (Lauri Jetsu) и его коллеги выдвинули предположение, что это соответствует переменному периоду Алголь. Этот цикл близок к циклу, который вычислил Гудрик еще в 1783 году.

Проблема в том, что этот цикл близок, однако он не совсем точен. Известно, что египтяне были очень точны в своих расчетах. Не исключено, что Алголь поменяла свой период со временем.

Это могло случиться из-за присутствия третьей звезды в звездной системе Алголь. Вычисление поведения системы, состоящей из 2 тел — это одно дело, а тройная система – совершенно другое, особенно если учесть, что современные астрономы работают с этими данными всего 300 лет.

Источник: www.infoniac.ru

В 1962 году в СССР разработан первый транслятор для языка высокого уровня

Коллега алгола
Михаил Шура-Бура и Андрей Ершов — представители двух школ российского программирования

Только в конце 50-х у пользователей советских ЭВМ появилась возможность вводить в свои машины символьную информацию. На начальных этапах все программирование было численным, поскольку устройства ввода могли работать только с числовыми данными. Видимо, поэтому системное программирование для первых отечественных машин развивалось в направлении создания трансляторов, а не автокодов и стандартных подпрограмм. В середине 50-х появились так называемые программирующие программы для БЭСМ и «Стрелы» — первый опыт автоматизации программирования в Советском Союзе. Первые школы программирования СССР складывались там, где шла наиболее интенсивная эксплуатация этих «рабочих лошадок» раннего периода отечественной техники, — в ИТМиВТ и в Институте прикладной математики под руководством академика Келдыша (здесь, кстати, в 1954 году была создана система расчета термоядерного взрыва). Благодаря накопленному опыту этим коллективам удалось к 1962 году добиться новых успехов — именно здесь разрабатываются отечественные трансляторы с только что появившегося языка высокого уровня Алгол.

Первая версия Алгола была выпущена в 1958-м. Однако признание и известность получил усовершенствованный вариант языка, Алгол-60, названный так потому, что работа международного коллектива разработчиков над его спецификацией завершилась в 1960 году. Никлаус Вирт назвал Алгол-60 «первым языком, который был ясно определен: его синтаксис задан с помощью строгого формализма». В этом же году стартовали проекты реализации трансляторов для Алгола-60 в СССР: в ИТМиВТ и в ИПМ.

К этому времени основная вычислительная нагрузка в этих организациях с БЭСМ и «Стрелы» перешла на последнюю ламповую машину Лебедева, М-20. Машина выпускалась серийно и завоевала популярность у программистов не столько даже из-за своего быстродействия, сколько благодаря изяществу и удобству. Идейным соавтором Лебедева при разработке М-20 был математик и программист Михаил Романович Шура-Бура, создавший для этой ЭВМ так называемую интерпретирующую систему ИС-2, которая автоматизировала обращение к библиотечным подпрограммам и использовалась всеми появившимися в дальнейшем трансляторами с Алгола для этой машины. Под руководством Шура-Буры коллектив программистов ИПМ начал разработку своего транслятора.

Но первый транслятор с языка Алгол для М-20 был завершен в тех же стенах, где была разработана сама машина, в ИТМиВТ, хотя по времени этот проект был запущен несколько позже проекта ИПМ. Его автор, Святослав Сергеевич Лавров, стремился сделать систему трансляции как можно быстрее и по возможности эффективнее. Поэтому транслятор по версии ИТМиВТ под названием ТА-1 был фактически транслятором с подмножества языка, без рекурсии процедур и с рядом других ограничений.

В ИПМ в начале 60-х работал блестящий коллектив программистов — почти весь первый выпуск специальности «Программирование» кафедры вычислительной математики мехмата МГУ, ученики Алексея Андреевича Ляпунова. Эдуард Зиновьевич Любимский, который вместе с Шура-Бурой руководил разработкой транслятора с Алгола, вспоминает, что, познакомившись с языком, специалисты института поначалу замахнулись на систему автоматизации программирования более высокого уровня, чем Алгол-60. Алгол по удаленности от машинного уровня был аналогичен операторной схеме программы Ляпунова. Однако Шура-Бура настоял на том, чтобы решать более «приземленную» и насущную задачу.

В ИПМ тоже был свой ТА1 — первая, не вполне удачная версия транслятора. Окончательный вариант, ТА2, был завершен несколько позже разработки ИТМиВТ, весной 1963 года, и уже в мае демонстрировался на международной конференции по программированию в Киеве. Это была практически полная реализация языка, и во время показов в Киеве на М-20 транслятор справился с придуманной одним из участников тяжелейшей рекурсией. Любимский рассказал также, что вскоре после завершения разработки авторам ТА2 попал в руки западногерманский журнал с тестовой программой для трансляторов с Алгола-60. Журнал предлагал проверить зрелость транслятора, на какую категорию он потянет: man or boy. В ИПМ прогнали программу и удостоверились в высоком уровне своей разработки.

Первая версия языка, Алгол-58, очень заинтересовала Андрея Петровича Ершова. После окончания мехмата (тот же выпуск Ляпунова) он работал в ИТМиВТ и был автором программирующей программы для БЭСМ. Однако в начале 60-х Ершов — уже в Новосибирске, где формировался новый научный центр, Сибирское отделение АН СССР. Ершова пригласил сюда академик Соболев, о роли которого в развитии вычислительной математики и становлении советского программирования мы уже не раз упоминали. Теперь Соболев возглавил Институт математики СО; организацией отдела программирования в институте занялся Ершов.

Постепенно в Сибири сложилась новая мощная программистская школа. Одним из первых ее ярких результатов стала разработка языка Альфа, явившегося итогом работы Ершова и его коллег над Алголом-58. Ершов развил возможности этого языка, в частности добавил матричные операции, и полученный в конечном итоге язык оказался во многом схож с Алголом-60. Фактически, завершенный в 1961 году язык Альфа — это «расширенное подмножество» Алгола-60, без рекурсий, но с определением многомерных значений и операциями над ними, возможностью инициирования переменных и некоторыми другими нововведениями.

Источник: www.osp.ru


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.