Центральный Дом Знаний - Алгол

Информационный центр "Центральный Дом Знаний"

Заказать учебную работу! Жми!



ЖМИ: ТУТ ТЫСЯЧИ КУРСОВЫХ РАБОТ ДЛЯ ТЕБЯ

      cendomzn@yandex.ru  

Наш опрос

Как Вы планируете отдохнуть летом?
Всего ответов: 922

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Форма входа

Логин:
Пароль:

Алгол

Алгол, сокращённое название ряда языков программирования. Образовано из начальных букв английских слов algorithmic (алгоритмический) и language (язык). Разработан группой учёных разных стран в 1958—60. Окончательный вид языка, принятый на международной конференции в Париже (январь 1960), получил название «Алгол-60» (в отличие от первоначального вида, названного «Алгол-58»).

Основными символами А. являются десятичные цифры, строчные и заглавные латинские буквы, знаки препинания, знаки математических и логических операций, прочие специальные знаки и некоторые английские слова (в частности, begin и end). Из основных символов в А. по определённым правилам образуются конструкции — числа и выражения (арифметические, логические и др.), описания, примечания и операторы, которые, в свою очередь, в сочетании с основными символами образуют более сложные операторы и т. д. Алгоритм, заданный на А., называется алгол-программой. С помощью специальной программы он преобразуется в программу на языке конкретной цифровой вычислительной машины.

Лит.: Алгоритмический язык АЛГОЛ-60, пер. с англ., М., 1965; Лавров С. С., Универсальный язык программирования (АЛГОЛ-60), 2 изд., М., 1967.


Алгол  (англ. Algol от англ. algorithmic — алгоритмический и англ. language — язык), название ряда языков программирования, применяемых при составлении программ для решения научно-технических задач на ЭВМ. Разработан комитетом по языку высокого уровня IFIP в 1958—1960 гг. (Алгол-58, Алгол-60); усовершенствован в 1964—1968 гг. (Алгол 68). Алгол относится к языкам высокого уровня и позволяет легко переводить алгебраические формулы в программные команды. А. был популярен в Европе, в том числе в СССР, в то время как сравнимый с ним язык Фортран был распространён в США и Канаде. Оказал заметное влияние на все разработанные позднее императивные языки программирования — в частности, на язык Pascal.

Обычно названием А. (без уточнения версии языка) именуют Алгол-60, в то время как Алгол 68 рассматривается как самостоятельный язык. 

А. был разработан в 1958 году, на недельной конференции в ETH (Цюрих, Швейцария) как универсальный язык программирования для широкого круга применений, а затем доработан комитетом, созданным Международной федерацией по обработке информации (IFIP). В комитет вошёл ряд ведущих европейских и американских учёных и инженеров-разработчиков языков. Среди них были: Джон Бэкус — один из создателей Фортрана, Джозеф Уэгстен — впоследствии возглавлял комитет по разработке языка Кобол, Джон Маккарти — автор языка Лиспразработанного одновременно с А., Петер Наур — впоследствии доработал «нормальную форму Бэкуса», завершив разработку БНФ, Эдсгер Дейкстра — нидерландский учёный, впоследствии получивший широкую известность как один из создателей структурного программирования и сторонник математического подхода к программированию, будущий лауреат Премии Тьюринга.

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

После принятия в 1958 году первой версии описания языка Алгол-58 (первоначально предполагалось назвать язык IAL — International Algebraic Language, но от этого отказались) довольно быстро были осознаны проблемы, для решения которых комитет сформировал новый вариант стандарта — Алгол-60; он и стал «классическим» Алголом. В 1959 году Джон Бэкус разработал «нормальную форму Бэкуса» (БНФ) — формальный способ описания алгоритмических языков. Первым языком, спецификация которого была записана в БНФ, стал Алгол-58. Впоследствии, после усовершенствований, которые предложил Питер Наур, возникла форма Бэкуса — Наура (аббревиатура та же — БНФ или BNF), которая использовалась для спецификации языка ALGOL-60 уже на этапе её разработки.

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

SHARE — американская ассоциация пользователей компьютеров IBM, — потребовала от фирмы реализовать Алгол для своих машин, но появившийся в конце концов компилятор А. для IBM OS/360 был крайне неудобен в использовании — вполне естественно, что IBM, вложившая в Фортран огромные суммы, не имела стимула для создания нового продукта, который лишь конкурировал бы со старым. В то же время, недостатки Фортрана вынудили IBM искать ему замену и привели к разработке PL/I — языка-наследника Фортрана, в котором влияние А. было весьма заметным.

А вот в Европе А. приняли с энтузиазмом. Он быстро завоевал популярность в академической среде, повсеместно шла разработка компиляторов, многие из которых, несмотря на сложности реализации, оказались весьма успешными. А. распространился от Великобритании до Дальнего востока СССР, став как универсальным языком описания алгоритмов в научных публикациях, так и средством реального программирования.

Язык А. был принят фирмой Burroughs Corporation в их моделях, начиная с B5000 — этот язык получил название Elliott ALGOL. На компьютерах LGP-30 использовался язык Dartmouth ALGOL 30.

Даже когда язык А. почти перестал использоваться для программирования, он ещё долго оставался официальным языком для публикации алгоритмов. 

Именно в А. появилось представление о программе не как о свободной последовательности команд, а как о блочной структуре, состоящей из чётко описанных и отделённых друг от друга частей. Основной блок программы на А. — это сама главная программа. Она содержит свою исполняемую часть, заключённую в блок, ограниченный парой ключевых слов begin и end, а также описания подпрограмм. Каждая подпрограмма — это программа в миниатюре, имеющая собственные, описанные внутри неё данные, однозначно определённый интерфейс в виде имени и списка формальных параметров, и блок кода. При этом в блоке могут выделяться подблоки.

Были выделены структурные управляющие конструкции: ветвления, циклы, последовательные участки, исполняющие условно или многократно вложенные наборы операторов, также ограниченные теми же ключевыми словами begin и end, что дало возможность описывать логику программы без использования безусловных переходов — печально известного оператораgoto, провоцирующего на создание запутанных и плохо структурированных программ.

Современным программистам подобная структура программы кажется чем-то самоочевидной, кое в чём устаревшей и не всегда удобной (так, часто критикуются бесконечные begin — endв программах на Паскале, который унаследовал эту особенность именно от А.), но на момент появления А. всё это было заметным шагом вперёд. Программы становились регулярными, это давало возможность наращивать их по объёму, сохраняя обозримыми, понятными, доступными анализу и исправлению. Именно на базе А. и его языков-потомков были выполнены успешные работы по аналитическому доказательству правильности программ.

Крайне важным свойством А. стала возможность организации рекурсивных процедур, до этого у промышленных языков отсутствовавшая (у лидеров рынка — Фортрана и Кобола, — рекурсия прямо запрещена), но широко использовавшаяся в Лиспе. Использование рекурсивных вычислений в ряде случаев способно значительно упростить структуру программы и сделать её более понятной за счёт близости к математическому описанию алгоритма решения задачи.

Разумеется, не все особенности А. сейчас можно назвать удачными и до конца продуманными. Например, стандарт языка полностью проигнорировал средства ввода-вывода; разработчики решили, что каждая реализация языка может решать этот вопрос самостоятельно, исходя из особенностей целевой машины и потребностей пользователей. С другой стороны, концепции модульного программирования с использованием стандартных библиотек подпрограмм тогда ещё просто не было, и операторы ввода-вывода должны были включаться прямо в язык. Это привело к тому, что каждая реализация организовывала ввод-вывод по-своему, и в этой части А.-программы для разных компиляторов оказывались почти гарантированно несовместимыми.

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

Пример кода на языке Алгол-60:

procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k);
 value n, m; array a; integer n, m, i, k; real y;
comment Максимальный элемент матрицы a, размера n на m 
 передаётся в виде результата в y, а его индексы — в параметры i и 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.

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'

PUNCH(3) посылает текст не на перфоратор, а на удалённый принтер. SAMELINE подавляет возврат каретки. ALIGNED(1,6) указывает формат — 1 знак до и 6 после десятичной точки.

[править]Hello, World

Это пример программы Hello, World для реализации Dartmouth ALGOL 30 см. ссылку.

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

Это альтернативная реализация для Elliott Algol.

 program HiFolks;
 begin
 print "Hello, world";
 end;

Реализация для IBM OS/360 ALGOL F.

'BEGIN'
 OUTSTRING (1, '('HELLO, WORLD!')');
'END'

В соответствии с определением способа передачи параметров по имени, вызов процедуры p в данном случае должен приводить к обнулению всех элементов массива s. Такое использование передачи параметра по имени было названо «трюком Йенсена» в честь впервые предложившего его программиста. Фактически для передачи по имени сложных выражений компилятор должен был создавать специальную неименованную функцию, вычисляющую это выражение в его собственной среде окружения, так называемый санк (англ.). Ближайшим аналогом санка является замыкание в языке Лисп, однако санк возникает только в специфическом контексте передачи параметров. Эта особенность языка Алгол-60, в остальном довольно разумно организованного, примечательна удивительным сочетанием полной практической бесполезности с чрезвычайной сложностью и неэффективностью реализации. Поэтому в дальнейшем развитии языков программирования от передачи параметров по имени отказались. В языке PL/I, в целом очень много унаследовавшем от Алгола-60, на этой волне заодно отказались и от передачи параметров по значению, оставив, как и в раннем Фортране, единственный механизм — по ссылке. В языке Си, напротив, осталась только передача параметров по значению (передача по ссылке там может быть смоделирована путём использования параметров типа «указатель»). А для тех случаев, когда передача параметров по имени имеет смысл (она необходима, например, если требуется создать функцию, для которой значения параметров не вычислялись бы в момент вызова), были созданы специальные синтаксические механизмы.

Loading

Календарь

«  Март 2024  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
25262728293031

Архив записей

Друзья сайта

  • Заказать курсовую работу!
  • Выполнение любых чертежей
  • Новый фриланс 24