Алгол 68

Алгол 68

Алго́л 68 (англ. Algol 68 от англ. algorithmic — алгоритмический и англ. language — язык) — процедурный императивный высокоуровневый язык программирования, потомок языка Алгол, существенно доработанный. Разрабатывался в период 1964-68 годов. Позиционировался как универсальный язык для описания произвольных алгоритмов обработки данных высокой сложности. Отличается большим объёмом, богатством возможностей и сложностью синтаксиса.

Содержание

Особенности

Несмотря на схожесть названия и официальную преемственность по отношению к языку Алгол-60, Алгол-68 унаследовал от него лишь некоторые элементы синтаксиса и существенно отличается от языка-предшественника прежде всего наличием большого числа дополнительных синтаксических средств и изобразительных возможностей. В частности, он включает встроенные в язык средства организации параллельных вычислений, операции со структурами как с едиными объектами, матричные операции.

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

Формально Алгол-68 является процедурным языком программирования, ориентированным на описание последовательности команд, но благодаря развитым средствам описания типов и операций он может быть использован для написания программ практически в любом стиле. Так, в приведённом ниже примере программа на Алголе-68 написана в функциональном стиле.

Эта программа реализует классический алгоритм «Решето Эратосфена» для поиска всех простых чисел меньше 100. nil означает null pointer (нулевой указатель) в других языках. Нотация x of y означает «доступ к x как к элементу struct или union y».

begin # Algol-68 prime number sieve, functional style #

  proc error = (string s) void:
     (print(( newline, " error: ", s, newline)); goto stop);
  proc one to = (int n) list:
     (proc f = (int m,n) list: (m>n | nil | cons(m, f(m+1,n))); f(1,n));

  mode list = ref node;
  mode node = struct (int h, list t);
  proc cons = (int n, list l) list: heap node := (n,l);
  proc hd   = (list l) int: ( l is nil | error("hd nil"); skip | h of l );
  proc tl   = (list l) list: ( l is nil | error("tl nil"); skip | t of l );
  proc show = (list l) void: ( l isnt nil | print((" ",whole(hd(l),0))); show(tl(l)));

  proc filter = (proc (int) bool p, list l) list:
     if l is nil then nil 
     elif p(hd(l)) then cons(hd(l), filter(p,tl(l)))
     else filter(p, tl(l))
     fi;

  proc sieve = (list l) list:
     if l is nil then nil 
     else
        proc not multiple = (int n) bool: n mod hd(l) ≠ 0;
        cons(hd(l), sieve( filter( not multiple, tl(l) )))
     fi;

  proc primes = (int n) list: sieve( tl( one to(n) ));

  show( primes(100) )
end

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

 # Next day date - english variant
 mode date = struct(Int day, string month, Int year);
 proc the day following = (date x) date:
      If day of  x < length of month (month of x, year of x)
      then (day of x + 1, month of x, year of x)
      elif month of x = "December"
      then (1, "January", year of x + 1)
      else (1, successor of month (month of x), year of x)
      fi;

 # Nachfolgetag - Deutsche Variante
 menge datum = tupel(ganz tag, wort monat, ganz Jahr);
 funktion naechster tag nach = (datum x) datum:
          wenn tag von x < monatslaenge(monat von x, jahr von x)
          dann (tag von x + 1, monat von x, jahr von x)
          wennaber monat von x = "Dezember"
          dann (1, "Januar", jahr von x + 1)
          ansonsten (1, nachfolgemonat(monat von x), jahr von x)
          endewenn;      

История языка

К 1960 году была закончена работа Комитета по языку высокого уровня IFIP (International Federation for Information Processing, Международная федерация по обработке информации), сформировавшего один из первых «классических» ЯВУ — Алгол. Алгол сразу же завоевал популярность, в первую очередь — в академических кругах Европы, не только как язык практического программирования, но и как универсальный язык описания вычислительных алгоритмов в научных работах. Но уже тогда было ясно, что Алгол не идеален и требует доработки. С одной стороны, в языке отсутствовали некоторые весьма желательные возможности, с другой — некоторые механизмы и конструкции Алгола использовались настолько редко, что встал вопрос об исключении их из языка для упрощения транслятора. В результате к 1962 году IFIP собрал из специалистов множества стран Западной Европы и Америки новый комитет по Алголу. Комитету было поставлено две задачи:

  • Согласовать и утвердить сокращённый вариант Алгола, в котором отсутствовали бы редко используемые конструкции исходного языка.
  • Создать язык-преемник Алгола с учётом известных достоинств и недостатков языка-предка.

Работа комитета длилась в течение шести лет — с 1962 по 1968 годы. Довольно быстро комитету удалось выполнить первую задачу — согласовать сокращённое подмножество Алгола, содержащее только широко используемые его элементы. Вопрос же о языке-преемнике решался в течение нескольких лет, в постоянных дискуссиях. Двое членов комитета: Чарльз Хоар из Оксфордского университета и Никлаус Вирт из Швейцарии (в то время он преподавал в США, в Станфордском университете) в 1965 году предложили комитету свой вариант нового языка, названного ими Algol-W. Он представлял собой умеренную переработку Алгола, очищенную от известных недостатков и дополненную минимумом необходимых возможностей. Будучи опубликован, проект был положительно оценён многими учёными, но комитет отклонил его. Предложений, различной степени проработанности, было много, часть из них отвергалась, часть была использована в проектировании языка. В декабре 1968 года в Мюнхене, на заседании комитета был официально представлен новый язык программирования, получивший название Алгол-68. Язык оказался чрезвычайно развитым, но при этом весьма объёмным и сложным. Даже опытные программисты испытывали затруднения в понимании «сообщения о языке», выпущенного комитетом.

Официальные документы комитета оценивают проделанную им работу положительно, хотя некоторые из членов комитета высказывались как о работе, так и о её результатах, крайне негативно. Из критиков языка наиболее известны вышеупомянутые Чарльз Хоар и Никлаус Вирт. Хоар ещё во время работы комитета критиковал проект за «неясность, сложность и сверхамбициозность». По завершении работы комитета Хоар, Вирт и ещё ряд учёных создали небольшой доклад, излагающий критику нового языка. В его резюмирующей части говорилось: «как инструмент надёжного создания сложных программ язык следует признать неудачным» (этот доклад был запрещён к распространению руководством IFIP). Впоследствии, в 1980 году, в своей Тьюринговской лекции Хоар подробно останавливался на работе комитета по Алголу-68, недостатках как процесса разработки языка, так и его самого.

Для описания языка был использован оригинальный формализм — двухуровневые грамматики ван Вейнгаардена. Это позволило добиться строгости описания (поскольку этот тип грамматик позволяет описывать в формальном виде контекстные условия, которые при описании языка в БНФ или РБНФ приходится передавать словесно), но ещё больше усложнило описание. Кроме того, по грамматикам ван Вейнгаардена крайне затруднительно прямо построить анализатор языка, поэтому исходное описание можно было рассматривать лишь как первоначальную форму спецификации синтаксиса, требующую серьёзной модификации для реального практического применения. Выбранный комитетом формализм описания языка предопределил сложности в его реализации. Процесс разработки компиляторов под новый язык оказался сложным и длительным, хотя в конечном итоге они были созданы и использовались.

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

Возможно, одним из факторов, предопределивших фактический провал Алгола-68, стало появление в начале 1970 годов нового поколения языков высокого уровня, среди которых особую роль сыграл Pascal — по сути, тот самый «улучшенный и дополненный вариант Алгола», которого ждали в академической среде от комитета по Алголу-68, но гораздо более простой. Его широкое распространение практически не оставило ниши для Алгола-68. Несмотря на неудачу, этот язык повлиял на разработчиков более поздних объектно-ориентированных языков, в частности C++, хотя многие возможности были отброшены, а часть — реализована другими способами. В 1977 году, когда комитет по языку программирования Министерства обороны США пришёл к выводу о необходимости разработки нового языка программирования встроенных систем, по решению комитета, предложения по будущему языку должны были базироваться на одном из языков PL/1, Pascal и Алгол-68. Таким образом, у Алгола-68 был шанс стать прародителем нового универсального языка, но этот шанс не осуществился: из 15 представленных на конкурс проектов все 4, отобранные на второй этап для доработки, были основаны на языке Pascal. После ещё одного этапа доработки лучший из этих проектов стал языком Ада.

Критика языка

Прежде всего, отрицательные отзывы касаются сложности синтаксиса Алгола-68. В частности, Хоар отмечал, что, отойдя от простоты языка-прародителя, новый язык совершенно не облегчает разработку программ. Как говорил Хоар, «члены комитета использовали постоянные задержки в его работе, чтобы втиснуть в будущий язык всё более сложные конструкции, вместо того, чтобы попытаться упростить его».

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

Литература

  • «Практическое руководство по Алголу 68», Пейган Ф. Дж. Пер. с англ. — М., Мир, 1979—240 с.
  • «Пересмотренное сообщение об Алголе 68», ред. А. ван Вейнгаарден. Пер. с англ. — М., Мир, 1979—533 с.
  • «Алгол 68: Методы реализации», А. Н. Балуев и др., под ред. Г. С. Цейтина — Л. изд-во Ленингр. ун-та, 1976—224 с.
  • «Неформальное введение в Алгол 68», Ч. Линдси, С. ван дер Мюйлен. Пер. с англ., 1973—408 с.
  • Роберт В Себеста Глава 2.11. Ортогональная структура: язык ALGOL 68 // Основные концепции языков программирования = Concepts of Programming Languages. — 5-е изд. — М.: «Вильямс», 2001. — С. 672. — ISBN 5-8459-0192-8
  • Язык компьютера. — М.: Мир, 1989. — С. 163, 190, 194. — ISBN 5-03-001148-X
Литература на английском языке
  • Brailsford, D.F. and Walker, A.N., Introductory ALGOL 68 Programming, Ellis Horwood/Wiley, 1979
  • McGettrick, A.D., ALGOL 68, A First and Second Course, Cambridge Univ. Press, 1978
  • Peck, J.E.L., An ALGOL 68 Companion, Univ. of British Columbia, October 1971
  • Tanenbaum, A.S., A Tutorial on ALGOL 68, Computing Surveys 8, 155—190, June 1976 and 9, 255—256, September 1977, [1]

Ссылки



Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "Алгол 68" в других словарях:

  • АЛГОЛ — [англ. ALGOL, сокр. < Algorithmic Language алгоритмический язык] инф. язык программирования для ЭВМ, ориентированный на проблему, не зависящий от конкретной машины, особенно пригодный для решения научно технических задач. Словарь иностранных слов …   Словарь иностранных слов русского языка

  • АЛГОЛ — (от англ. algorithmic алгоритмический и language язык) название ряда языков программирования, применяемых при составлении программ для решения научно технических задач на ЭВМ. Разработан в 1958 60 (Алгол 58, Алгол 60); усовершенствован в 1964 68… …   Большой Энциклопедический словарь

  • АЛГОЛ — [от начальных букв английского слова algo (rithmic) алгоритмический и language язык], первоначально алгоритмический язык. Разработан в США в 1958 60 (Алгол 58, Алгол 60); использовался для записи алгоритмов решения задач численного анализа.… …   Современная энциклопедия

  • Алгол — [от начальных букв английского слова algo (rithmic) алгоритмический и language язык], первоначально алгоритмический язык. Разработан в США в 1958 60 (Алгол 58, Алгол 60); использовался для записи алгоритмов решения задач численного анализа.… …   Иллюстрированный энциклопедический словарь

  • АЛГОЛ — универсальный язык для составления программы на ЭВМ, позволяющий с помощью определенных символов и грамматики записать алгоритмы решения задачи. На ЭВМ существуют специальные трансляторы, переводящие А. на язык данной машины. На международной… …   Геологическая энциклопедия

  • АЛГОЛ — (Algol) Сокращенное название алгоритмического языка. Этот язык компьютерного программирования был разработан для математического и научного применения. Он относится к языкам высокого уровня (high level language) и позволяет легко переводить… …   Словарь бизнес-терминов

  • алгол — сущ., кол во синонимов: 1 • язык (247) Словарь синонимов ASIS. В.Н. Тришин. 2013 …   Словарь синонимов

  • АЛГОЛ — машинный язык для описания вычислительных алгоритмов англ.: ALGOL, Algorithmic Language англ. Словарь: С. Фадеев. Словарь сокращений современного русского языка. С. Пб.: Политехника, 1997. 527 с …   Словарь сокращений и аббревиатур

  • АЛГОЛ — названия ряда языков программирования, применяемых при составлении программ для решения научно технических задач на цифровой вычислительной машине …   Большая политехническая энциклопедия

  • Алгол — (англ. Algol от англ. algorithmic  алгоритмический и англ. language  язык)  название ряда языков программирования, применяемых при составлении программ для решения научно технических задач на ЭВМ. Разработан… …   Википедия

  • АЛГОЛ 60 — Алгол (англ. Algol от англ. algorithmic  алгоритмический и англ. language  язык)  название ряда языков программирования, применяемых при составлении программ для решения научно технических задач на ЭВМ. Разработан комитетом по языку высокого… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»