CLU (язык программирования) - CLU (programming language)
Парадигма | мультипарадигма : объектно-ориентированный , процедурный |
---|---|
Разработано | Варвара Лискова и ее ученики |
Разработчик | Массачусетский Институт Технологий |
Впервые появился | 1975 |
Стабильный выпуск | |
Печатная дисциплина | сильный |
Веб-сайт | pmg |
Основные реализации | |
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_number
s может использоваться взаимозаменяемо с итератором для массива integer
s. Отличительной особенностью итераторов 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 и множественного присваивания.
использованная литература
внешние ссылки
- Официальный веб-сайт
- Лисков, Варвара (апрель 1992 г.). «История CLU» (PDF) . MIT-LCS-TR-561. Архивировано из оригинального (PDF) 17 сентября 2003 года.
- clu2c : программа для компиляции кода CLU в C
- Словарь языков программирования
- Сравнение CLU на многоязычном демонстрационном сайте алгоритма '99 бутылок пива '
- Лисков, Б .; Аткинсон, Р .; Блум, Т .; Moss, E .; Schaffert, JC; Scheifler, R .; Снайдер, А. (1981). Справочное руководство CLU . Конспект лекций по информатике. 114 . Springer. DOI : 10.1007 / BFb0035014 . ISBN 9783540108368. S2CID 27382594 .