CLU - это язык программирования, созданный в Массачусетском технологическом институте (MIT) Барбарой Лисков и ее студентами в период с 1974 по 1975 год. Хотя он не нашел широкого применения, он представил многие функции, которые широко используются сейчас и рассматриваются как шаг вперед. в разработке объектно-ориентированного программирования (ООП).
Парадигма | мультипарадигма : объектно-ориентированный , процедурный |
---|---|
Разработано | Варвара Лискова и ее ученики |
Разработчик | Массачусетский Институт Технологий |
Впервые появился | 1975 |
Стабильный выпуск | |
Печатная дисциплина | сильный |
Веб-сайт | www |
Основные реализации | |
Собственный CLU, [1] Портативный CLU, [2] clu2c [3] | |
Под влиянием | |
АЛГОЛ 60 , Лисп , Симула , Альфард | |
Под влиянием | |
Ада , Аргус , C ++ , Lua , Python , [4] Ruby , Sather , Swift [5] |
Ключевые вклады включают абстрактные типы данных , [6] совместное использование вызова , итераторы , множественные возвращаемые значения (форма параллельного присваивания ), типобезопасные параметризованные типы и типобезопасные вариантные типы . Он также примечателен использованием классов с конструкторами и методами, но без наследования .
Кластеры
Синтаксис из CLU был основан на Алголом , то отправной точкой для большинства новых конструкций языка. Ключевым дополнением стала концепция кластера , система расширения типов CLU и корень имени языка (CLUster). [7] Кластеры обычно соответствуют концепции «класса» в объектно-ориентированном языке. Например, вот синтаксис CLU для кластера, который реализует комплексные числа :
комплексное_число = кластер: сложение, вычитание, умножение, ... реп = запись [real_part: real, imag_part: real] добавить = процесс ... конец добавить; вычитание = процесс ... конец вычитания; умножить = процесс ... конец умножить; ... конец комплексное_число;
Кластер - это модуль, который инкапсулирует все свои компоненты, за исключением тех, которые явно указаны в предложении «is». Они соответствуют общедоступным компонентам класса в последних объектно-ориентированных языках. Кластер также определяет тип, который может быть назван вне кластера (в данном случае «complex_number»), но его тип представления (rep) скрыт от внешних клиентов.
Имена кластеров являются глобальными, и не было предоставлено никакого механизма пространства имен для группировки кластеров или возможности их создания «локально» внутри других кластеров.
CLU не выполняет неявные преобразования типов . В кластере явные преобразования типов вверх и вниз меняются между абстрактным типом и представлением. Существует универсальный тип any , а процедура force [] проверяет, принадлежит ли объект определенному типу. Объекты могут быть изменяемыми или неизменяемыми, причем последние являются базовыми типами, такими как целые числа, логические значения, символы и строки. [7]
Другие особенности
Другой ключевой особенностью системы типов CLU являются итераторы , которые последовательно, один за другим, возвращают объекты из коллекции. [7] Итераторы предлагают идентичный интерфейс прикладного программирования (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), названо одновременным назначением , [8] но CLU популяризировал его и часто считается прямым влиянием, ведущим к параллельному назначению в более поздних языках.
Все объекты в программе CLU находятся в куче, а управление памятью осуществляется автоматически.
CLU поддерживает определяемые пользователем абстракции данных с параметризацией типа . Это был первый язык, предлагающий безопасные для типов ограниченные параметризованные типы, использующие предложения структуры where для выражения ограничений на фактические аргументы типа.
Влияние
CLU и Ada были основными источниками вдохновения для шаблонов C ++ . [ необходима цитата ]
Механизмы обработки исключений CLU повлияли на более поздние языки, такие как C ++ и Java . [ необходима цитата ]
Sather , Python и C # включают итераторы , впервые появившиеся в CLU. [ необходима цитата ]
Perl и Lua принимали многократное присвоение и многократный возврат из вызовов функций из CLU. [9]
Python и Ruby заимствовали вызов путем совместного использования , оператора yield [10] и множественного присваивания. [11]
Рекомендации
- ^ a b Кертис, Дороти (06.11.2009). "Домашняя страница CLU" . Группа методологии программирования, Лаборатория компьютерных наук и искусственного интеллекта . Массачусетский технологический институт . Проверено 26 мая 2016 .
- ^ а б Кертис, Дороти (2009-11-06). «Индекс / pub / pclu» . Группа методологии программирования, Лаборатория компьютерных наук и искусственного интеллекта . Массачусетский технологический институт . Проверено 26 мая 2016 .
- ^ Ушидзима, Тецу. "clu2c" . clu2c . woodsheep.jp . Проверено 26 мая 2016 .
- ^ Лунд, Фредрик. «Звонок по объекту» . effbot.org . Проверено 21 ноября 2017 года .
замените «CLU» на «Python», «запись» на «экземпляр» и «процедуру» на «функцию или метод», и вы получите довольно точное описание объектной модели Python.
- ^ Латтнер, Крис (2014-06-03). "Домашняя страница Криса Латтнера" . Крис Латтнер . Проверено 3 июня 2014 .
Язык Swift - продукт неустанных усилий команды лингвистических экспертов, гуру документации, ниндзя по оптимизации компиляторов и невероятно важной внутренней группы экспертов, которые предоставили отзывы, чтобы помочь усовершенствовать и протестировать идеи в боевых условиях. Конечно, он также очень выиграл от опыта, с трудом завоеванного многими другими языками в этой области, черпая идеи из Objective-C, Rust, Haskell, Ruby, Python, C #, CLU и слишком многих других, чтобы перечислить.
- ^ Лисков, Варвара ; Зиллес, Стивен (1974). «Программирование с абстрактными типами данных». Материалы симпозиума ACM SIGPLAN по языкам очень высокого уровня . С. 50–59. CiteSeerX 10.1.1.136.3043 . DOI : 10.1145 / 800233.807045 .
- ^ а б в Лисков, Б .; Снайдер, А .; Аткинсон, Р .; Шафферт, К. (август 1977 г.). «Механизмы абстракции в CLU». Коммуникации ACM . 20 (8): 564–576. CiteSeerX 10.1.1.112.656 . DOI : 10.1145 / 359763.359789 . S2CID 17343380 .
- ^ Barron, DW; Бакстон, Дж. Н.; Хартли, Д. Ф.; Nixon, E .; Стрейчи, К. (1963). «Основные особенности CPL» . Компьютерный журнал . 6 (2): 134–143. DOI : 10.1093 / comjnl / 6.2.134 .
- ^ Иерусалимский, Р .; Де Фигейредо, Луизиана; Селес, В. (2007). «Эволюция Lua» (PDF) . Материалы третьей конференции ACM SIGPLAN по истории языков программирования - HOPL III . С. 2-1–2-26. DOI : 10.1145 / 1238844.1238846 . ISBN 978-1-59593-766-7.
- ^ «Корни Рубина и лидерство Маца» . Разработка приложений . 2019-11-08 . Проверено 15 ноября 2019 .
Матц считает, что блоки - величайшее изобретение Ruby (я согласен). Он взял идею из языка 1970-х годов под названием CLU от MIT, который назвал их «итераторами» ...
- ^ «HOWTO по функциональному программированию - документация по Python 3.8.3» . docs.python.org . Проверено 25 мая 2020 .
Внешние ссылки
- Официальный веб-сайт
- История CLU (pdf)
- clu2c : программа для компиляции кода CLU в C
- Словарь языков программирования
- Сравнение CLU на многоязычном демо-алгоритме '99 бутылок пива '