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

редактировать
CLU
Paradigm multi-paradigm : объект -ориентированный, процедурный
Разработан Барбарой Лисков и ее учениками
Разработчик Массачусетский технологический институт
Впервые появился1975; 45 лет назад (1975 г.)
Стабильный выпуск Native CLU 1.5 (SPARC, VAX ) / 26 мая 1989 г.; 31 год назад (1989-05-26).

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

Печатная дисциплина строгий
Веб-сайтwww.pmg.lcs.mit.edu /CLU.html
Основные реализации
Собственный CLU, Портативный CLU, clu2c
Под влиянием
АЛГОЛ 60, Лисп, Simula, Alphard
Под влиянием
Ada, Argus, C ++, Lua, Python, Ruby, Sather, Swift

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

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

Содержание

  • 1 Кластеры
  • 2 Другие функции
  • 3 Влияние
  • 4 Ссылки
  • 5 Внешние ссылки

Кластеры

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

комплексное_число = кластер - это сложение, вычитание, умножение,... rep = record [real_part: real, imag_part: real] add = proc... конец добавить; subtract = proc... end subtract; умножить = процесс... конец умножить;... конец комплексное_число;

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

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

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

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

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

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

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

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

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

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

Influence

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

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

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

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

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

Ссылки

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

Последняя правка сделана 2021-05-13 11:21:11
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте