Языки АЛГОЛ и СИМУЛА

Языки АЛГОЛ-68 и СИМУЛА больше ориентированы на построение новых объектов программистом, чем на предоставление пользователю готовых средств из его проблемной области (языки типа «ядро»). Специалист в области языков программирования обязан знать их, хотя они и не стали широко используемыми. Видимо, сказались недостаточно мощная административная поддержка и эффект занятой экологической ниши. Кроме того, оба языка оказались непривычными для программистов, непростыми в изучении, сложными в реализации. Достаточно указать на необходимость реализации «сборки мусора» для освобождения когда-то запрошенных программой, но позднее ставших недоступными областей памяти. Как это часто бывает с языками типа «ядро», от потенциальных пользователей также требовалось наличие способности к теоретическим построениям и рассуждениям.

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

Блочная видимость имен, впервые введенная в языке АЛГОЛ-60, обычно связывается со стековым механизмом управления памятью и проектированием программ «сверху вниз». При этом внутренние блоки считаются детализирующими понятия из объемлющих блоков, во внутренних блоках доступны имена объектов объемлющего блока, в объемлющем блоке недоступны имена объектов внутренних блоков. В языке СИМУЛА вне объекта видны имена его атрибутов — внутренних для чего объектов. Аналогичная видимость имен обеспечивается для полей записей в языках ПЛ/1 или ПАСКАЛЬ, но в языке СИМУЛА считается, что данные неразрывно связаны с программами их обработки, поэтому атрибутом объекта некоторого класса может быть не только переменная, но и подпрограмма.

Язык АЛГОЛ-68 обладает утонченным синтаксисом, доведенной почти до совершенства абстракцией понятия операции, имеет богатейшие изобразительные возможности (выразимы, например, непрямоугольные массивы). Однако наглядности и простоте понимания программ не способствуют, например, возможность изменения приоритета операций и выполнение неявных преобразований (приведений), зависящих от характера контекста конструкции (в языке имеется пять видов контекстов). Достаточно часто возникают вопросы, для разрешения которых приходится обращаться к формальному описанию, использующему аппарат двухуровневых грамматик, — процедура, мало доступная среднему программисту. С современной точки зрения, недостатком языка является также структурная, а не именная эквивалентность видов (вид — аналог типа данных), отсутствие антиблочной видимости имен и других средств, изобретенных позднее. Но главное, как показал опыт распространения языков ПАСКАЛЬ и Си, АЛГОЛ-68 оказался слишком громоздким, ему не хватило простоты. Ведь с теоретической точки зрения язык Си не представляет особого интереса, а язык ПАСКАЛЬ очень похож на подмножество языка АЛГОЛ-68. Оказалось важным не только предоставлять возможности, но и ограничивать их.