CLU (язык программирования) - CLU (programming language)

CLU
Парадигма мультипарадигма : объектно-ориентированный , процедурный
Разработано Варвара Лискова и ее ученики
Разработчик Массачусетский Институт Технологий
Впервые появился 1975 ; 46 лет назад ( 1975 )
Стабильный выпуск
Собственный CLU 1.5 ( SPARC , VAX ) / 26 мая 1989 г . ; 32 года назад ( 1989-05-26 )

Portable CLU / 6 ноября 2009 г . ; 11 лет назад ( 2009-11-06 )

Печатная дисциплина сильный
Веб-сайт pmg .csail .mit .edu / CLU .html
Основные реализации
PDP-10 CLU, собственный CLU, портативный CLU, clu2c
Под влиянием
АЛГОЛ 60 , Лисп , Симула , Альфард
Под влиянием
Ада , Аргус , C ++ , Lua , Python , Ruby , Sather , Swift

CLU - это язык программирования, созданный в Массачусетском технологическом институте (MIT) Барбарой Лисков и ее студентами, начиная с 1973 года. Хотя он не нашел широкого применения, он представил многие функции, которые широко используются сейчас и рассматриваются как шаг в развитии. разработка объектно-ориентированного программирования (ООП).

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

Кластеры

Синтаксис из CLU был основан на Алголом , то отправной точкой для большинства новых конструкций языка. Ключевым дополнением стала концепция кластера , система расширения типов CLU и корень имени языка (CLUster). Кластеры обычно соответствуют концепции «класса» в объектно-ориентированном языке. Например, вот синтаксис CLU для кластера, который реализует комплексные числа :

    complex_number = cluster is add, subtract, multiply, ...
        rep = record [ real_part: real, imag_part: real ]
        add = proc ... end add;
        subtract = proc ... end subtract;
        multiply = proc ... end multiply;
        ...
    end complex_number;

Кластер - это модуль, который инкапсулирует все свои компоненты, за исключением тех, которые явно указаны в предложении «is». Они соответствуют общедоступным компонентам класса в последних объектно-ориентированных языках. Кластер также определяет тип, который может быть назван вне кластера (в данном случае «complex_number»), но его тип представления (rep) скрыт от внешних клиентов.

Имена кластеров являются глобальными, и не было предоставлено никакого механизма пространства имен для группирования кластеров или возможности их создания «локально» внутри других кластеров.

CLU не выполняет неявные преобразования типов . В кластере явные преобразования типов вверх и вниз меняются между абстрактным типом и представлением. Существует универсальный тип any , а процедура force [] проверяет, принадлежит ли объект определенному типу. Объекты могут быть изменяемыми или неизменяемыми, причем последние являются базовыми типами, такими как целые числа, логические значения, символы и строки.

Другие особенности

Другой ключевой особенностью системы типов CLU являются итераторы , которые последовательно, один за другим, возвращают объекты из коллекции. Итераторы предлагают идентичный интерфейс прикладного программирования (API) независимо от того, с какими данными они используются. Таким образом, итератор для коллекции complex_numbers может использоваться взаимозаменяемо с итератором для массива integers. Отличительной особенностью итераторов CLU является то, что они реализованы как сопрограммы, при этом каждое значение предоставляется вызывающей стороне через оператор yield . Итераторы, подобные тем, что есть в CLU, теперь являются общей чертой многих современных языков, таких как C #, Ruby и Python, хотя в последнее время их часто называют генераторами.

CLU также включает обработку исключений , основанную на различных попытках на других языках; исключения вызываются signalи обрабатываются с помощью except. В отличие от большинства других языков с обработкой исключений, исключения не передаются неявно вверх по цепочке вызовов. Кроме того, в отличие от большинства других языков, которые обеспечивают обработку исключений, исключения в CLU считаются частью обычного потока выполнения и считаются «нормальным» и эффективным способом выхода из циклов или возврата из функций; это позволяет напрямую присваивать возвращаемые значения «кроме случаев», когда применяются другие условия. Исключения, которые не перехватываются и не отменяются явным образом, немедленно преобразуются в особую исключительную ситуацию сбоя, которая обычно завершает программу.

CLU часто считают первым языком с типобезопасными вариантными типами , называемыми oneofs , до того, как они появились в языке ML .

Последней отличительной особенностью CLU является параллельное присваивание (множественное присваивание), при котором несколько переменных могут появляться в левой части оператора присваивания . Например, написание x,y := y,xобменивается значениями xи y. Таким же образом функции могут возвращать несколько значений, например x,y,z := f(t). Параллельное присваивание (хотя и не множественные возвращаемые значения) предшествовало CLU, появилось в CPL (1963), названо одновременным присваиванием , но CLU популяризировал его и часто считается прямым влиянием, ведущим к параллельному присваиванию в более поздних языках.

Все объекты в программе CLU находятся в куче, а управление памятью осуществляется автоматически.

CLU поддерживает определяемые пользователем абстракции данных с параметризацией типа . Это был первый язык, предлагающий безопасные для типов ограниченные параметризованные типы, использующие предложения структуры where для выражения ограничений на фактические аргументы типа.

Влиять

CLU и Ada были основными источниками вдохновения для шаблонов C ++ .

Механизмы обработки исключений CLU повлияли на более поздние языки, такие как C ++ и Java .

Sather , Python и C # включают итераторы , которые впервые появились в CLU.

Perl и Lua принимали многократное присвоение и многократный возврат из вызовов функций из CLU.

Python и Ruby заимствовали вызов путем совместного использования , оператора yield и множественного присваивания.

использованная литература

внешние ссылки