ALGOL W¶
ALGOL W — это язык программирования высокого уровня, разработанный в 1966 году группой под руководством Никлауса Вирта и Тони Хоара как преемник языка ALGOL 60. Он представляет собой расширение ALGOL 60, в которое были добавлены структурированные типы данных, динамические массивы, строковый тип и улучшенный механизм ввода-вывода. ALGOL W стал важным этапом в развитии языков программирования, оказав влияние на последующие языки, включая Pascal, Simula и Ada.
¶История
¶Предпосылки создания
К середине 1960-х годов ALGOL 60, несмотря на свою значимость для теоретического программирования, столкнулся с рядом практических ограничений. В нём отсутствовали:
- механизмы работы с записями (структурами);
- динамические массивы;
- строковый тип данных;
- стандартизированные средства ввода-вывода;
- эффективные способы обработки исключительных ситуаций.
Кроме того, в ALGOL 60 была сложная процедура передачи параметров по имени (call by name), которая часто приводила к неэффективному коду и трудноуловимым ошибкам.
¶Разработка
В 1965 году Международная федерация по обработке информации (IFIP) начала работу над новым стандартом ALGOL X, который должен был заменить ALGOL 60. Однако процесс шёл медленно из-за разногласий между участниками. Параллельно Никлаус Вирт, работавший в Стэнфордском университете, и Тони Хоар, работавший в Университете Квинс в Белфасте, предложили свой проект расширения ALGOL 60, который они назвали ALGOL W (W — от фамилии Вирта).
Первая реализация ALGOL W была создана в 1966 году на компьютере IBM System/360 в Стэнфордском университете. Компилятор был написан на языке ассемблера IBM 360. В 1967 году Вирт опубликовал описание языка, а в 1968 году — полное руководство.
¶Дальнейшая судьба
ALGOL W не был принят в качестве стандарта IFIP (эта роль в итоге досталась ALGOL 68), но он оказал значительное влияние на развитие языков программирования. Сам Вирт использовал опыт работы над ALGOL W при создании языка Pascal (1970), который унаследовал многие его черты. Тони Хоар применил идеи ALGOL W при разработке языка для операционной системы «Венера» (проект «Венера» в Университете Квинс).
¶Характеристики языка
¶Основные особенности
ALGOL W сохранил блочную структуру и лексическую область видимости ALGOL 60, но внёс ряд существенных изменений:
- Типы данных:
- Базовые типы: integer (целое), real (вещественное), logical (логическое), complex (комплексное), bits (битовые строки), string (строки).
- Составные типы: array (массивы — статические и динамические), record (записи — структуры с именованными полями).
- Возможность определения пользовательских типов через конструкцию type.
- Структуры (records):
ALGOL W ввёл понятие записи — составного типа данных, объединяющего поля разных типов. Это была одна из первых реализаций структур в языках программирования высокого уровня.
- Динамические массивы:
Размер массивов мог задаваться во время выполнения программы, что было значительным шагом вперёд по сравнению с ALGOL 60, где размеры массивов должны были быть константами.
- Строковый тип:
Строки переменной длины (до 255 символов) с поддержкой операций конкатенации, сравнения и извлечения подстрок.
- Управляющие конструкции:
- Условный оператор if-then-else (с обязательным else, что устраняло неоднозначность в ALGOL 60).
- Циклы for (с шагом и с условием), while и repeat-until.
- Оператор выбора case.
- Процедуры и функции:
- Поддержка рекурсии.
- Передача параметров по значению и по ссылке (call by value и call by reference).
- Возврат значений из функций.
Стандартизированные процедуры read, write, readln, writeln для работы с текстовыми файлами.
¶Пример программы
``algol BEGIN INTEGER N; REAL SUM; WRITE("Введите количество чисел: "); READ(N); IF N > 0 THEN BEGIN INTEGER I; REAL ARRAY A(1::N); SUM := 0.0; FOR I := 1 UNTIL N DO BEGIN WRITE("Введите число ", I, ": "); READ(A(I)); SUM := SUM + A(I) END; WRITE("Среднее арифметическое: ", SUM / N) END ELSE WRITE("Некорректное количество чисел") END ``
¶Влияние на другие языки
¶Pascal
Язык Pascal, созданный Никлаусом Виртом в 1970 году, напрямую унаследовал от ALGOL W:
- концепцию записей (records);
- динамические массивы;
- улучшенный синтаксис управляющих конструкций;
- механизм ввода-вывода.
¶Simula
Язык Simula 67, разработанный Оле-Йоханом Далем и Кристеном Нюгором, использовал идеи ALGOL W для создания объектно-ориентированной парадигмы. В частности, концепция классов в Simula была развитием записей ALGOL W с добавлением методов и наследования.
¶Ada
Язык Ada (1980-е годы) заимствовал из ALGOL W:
- строгую типизацию;
- поддержку записей;
- динамические массивы;
- синтаксис для работы с исключениями.
¶C и C++
Хотя C и C++ не являются прямыми потомками ALGOL W, они переняли идею структур (struct) и динамических массивов, которые впервые были реализованы именно в ALGOL W.
¶Критика
Несмотря на свои достоинства, ALGOL W имел ряд недостатков:
- Отсутствие модульности — язык не поддерживал раздельную компиляцию и модули, что усложняло разработку больших программ.
- Ограниченная работа с файлами — ввод-вывод был ориентирован на текстовые файлы, отсутствовала поддержка бинарных файлов и произвольного доступа.
- Отсутствие обработки исключений — хотя язык ввёл некоторые механизмы для обработки ошибок, полноценной системы исключений не было.
- Сложность реализации — компилятор ALGOL W был достаточно сложным для своего времени и требовал значительных вычислительных ресурсов.
¶Интересные факты
- ALGOL W был одним из первых языков, в котором была реализована концепция динамических массивов — возможность задавать размер массива во время выполнения программы.
- Язык использовался в Стэнфордском университете для обучения программированию в 1960-1970-х годах.
- Компилятор ALGOL W был написан на ассемблере IBM System/360 и занимал около 40 КБ памяти.
- В 1968 году Никлаус Вирт опубликовал книгу «ALGOL W Programming», которая стала одним из первых учебников по структурному программированию.
¶Источники
- Wirth, N., Hoare, C. A. R. (1966). A Contribution to the Development of ALGOL. Communications of the ACM, 9(6), 413-432.
- Wirth, N. (1968). ALGOL W Programming. Stanford University Press.
- Sebesta, R. W. (2012). Concepts of Programming Languages. 10th Edition. Addison-Wesley.
- История развития языков программирования: от ALGOL 60 до Pascal. — М.: Мир, 1985.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


