CLU (язык программирования)
Эта статья нуждается в дополнительных цитатах для проверки . ( февраль 2013 г. ) |
Парадигма | мультипарадигмальность : объектно-ориентированная , процедурная |
---|---|
Разработано | Барбара Лисков и ее ученики |
Разработчик | Массачусетский технологический институт |
Впервые появился | 1975 год |
Стабильная версия | |
Дисциплина набора текста | сильный |
Веб-сайт | пмг |
Основные реализации | |
ПДП-10 ЦЛУ, [3] Родной CLU, [1] Портативный CLU, [2] clu2c [4] | |
Под влиянием | |
Алгол 60 , Лисп , Симула , Альфард | |
Под влиянием | |
Ада , Аргус , C++ , [5] Луа , Питон , [6] Руби , Сатер , Свифт [7] |
CLU — это язык программирования , созданный в Массачусетском технологическом институте (MIT) Барбарой Лисков и ее студентами, начиная с 1973 года. [8] Хотя он не нашел широкого применения, он представил множество функций, которые широко используются сейчас, и рассматривается как шаг в развитии объектно-ориентированного программирования (ООП).
Ключевые вклады включают абстрактные типы данных , [9] вызов по совместному использованию , итераторы , множественные возвращаемые значения (форма параллельного присваивания ), типобезопасные параметризованные типы и типобезопасные варианты типов . Он также примечателен использованием классов с конструкторами и методами, но без наследования .
Кластеры
[ редактировать ]Синтаксис . CLU был основан на АЛГОЛе , который в то время был отправной точкой для большинства новых языковых проектов Ключевым дополнением стала концепция кластера , системы расширения типов CLU и корня названия языка (CLUster). [10] Кластеры обычно соответствуют понятию «класс» в объектно-ориентированном языке. Например, вот синтаксис 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». Они соответствуют общедоступным компонентам класса в последних объектно-ориентированных языках. Кластер также определяет тип, который может быть назван вне кластера (в данном случае «комплекс_номер»), но его тип представления (rep) скрыт от внешних клиентов.
Имена кластеров являются глобальными, и не было предусмотрено никакого механизма пространства имен для группировки кластеров или возможности их создания «локально» внутри других кластеров.
В кластере явные преобразования типов вверх и вниз изменяются между абстрактным типом и представлением; неявные преобразования между этими типами обозначаются специальным типом cvt . В противном случае CLU не выполняет неявных преобразований типов . Существует универсальный тип Any и процедура Force[] для проверки принадлежности объекта к определенному типу. Объекты могут быть изменяемыми или неизменяемыми, причем последние представляют собой базовые типы , такие как целые числа, логические значения, символы и строки. [10]
Другие особенности
[ редактировать ]Еще одной ключевой особенностью системы типов CLU являются итераторы , которые последовательно, один за другим, возвращают объекты из коллекции. [10] Итераторы предлагают идентичный интерфейс прикладного программирования (API) независимо от того, с какими данными они используются. Таким образом, итератор для коллекции complex_number
s можно использовать взаимозаменяемо с массивом integer
с. Отличительной особенностью итераторов CLU является то, что они реализованы как сопрограммы, где каждое значение передается вызывающему объекту через оператор доходности . Итераторы, подобные тем, что есть в 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) и называется одновременным присваиванием . [11] но CLU популяризировал его, и его часто считают прямым влиянием, приведшим к параллельному назначению в более поздних языках.
Все объекты в программе CLU находятся в куче, а управление памятью происходит автоматически.
CLU поддерживает с параметризацией типа определяемые пользователем абстракции данных . Это был первый язык, предлагающий типобезопасные ограниченные параметризованные типы, использующие предложенияwhere для выражения ограничений на фактические аргументы типа. В отличие от языков с дженериками на основе шаблонов, использование такой абстракции данных можно проверить по типу без доступа к реализации абстракции.
Влияние
[ редактировать ]CLU и Ada послужили главным источником вдохновения для C++ шаблонов . [5]
Механизмы обработки исключений CLU повлияли на более поздние языки, такие как C++. [5] и Ява . [ нужна ссылка ]
Sather , Python и C# включают итераторы , которые впервые появились в CLU. [8]
Perl и Lua принимали множественные присваивания и множественные возвраты из вызовов функций из CLU. [12]
Python и Ruby заимствовали поделившись вызов , оператором доходности , [13] и множественное задание. [14]
Ссылки
[ редактировать ]- ^ Jump up to: а б Кертис, Дороти (6 ноября 2009 г.). «Главная страница CLU» . Группа методологии программирования, Лаборатория информатики и искусственного интеллекта . Массачусетский технологический институт . Проверено 26 мая 2016 г.
- ^ Jump up to: а б Кертис, Дороти (6 ноября 2009 г.). «Индекс /pub/pclu» . Группа методологии программирования, Лаборатория информатики и искусственного интеллекта . Массачусетский технологический институт . Проверено 26 мая 2016 г.
- ^ «Файлы CLU, 1976–1989» . Кассеты коллекции Tech Square (ToTS), MC-0741 . Департамент уникальных коллекций Массачусетского технологического института. swh:1:dir:5dc935d1c236b15a99b0750cf236b2d89ec951d0 .
- ^ Ушиджима, Тецу. "clu2c " clu2c woodsheep.jp . Проверено 2 мая 2016 г.
- ^ Jump up to: а б с Страуструп, Бьярн (1996). История C++: 1979–1991 гг . Нью-Йорк, штат Нью-Йорк, США: Ассоциация вычислительной техники. стр. 699–769. дои : 10.1145/234286.1057836 . Проверено 25 марта 2022 г.
- ^ Лунд, Фредрик. «Вызов по объекту» . effbot.org . Архивировано из оригинала 23 ноября 2019 года . Проверено 21 ноября 2017 г.
замените «CLU» на «Python», «запись» на «экземпляр» и «процедуру» на «функцию или метод», и вы получите довольно точное описание объектной модели Python.
- ^ Латтнер, Крис (3 июня 2014 г.). «Домашняя страница Криса Латтнера» . Крис Лэттнер . Проверено 3 июня 2014 г.
Язык Swift — это продукт неустанных усилий команды языковых экспертов, гуру документации, ниндзя по оптимизации компиляторов и невероятно важной внутренней экспериментальной группы, которая предоставляла отзывы, помогающие совершенствовать и проверять идеи. Конечно, он также получил большую пользу от опыта, с трудом полученного многими другими языками в этой области, черпая идеи из Objective-C, Rust, Haskell, Ruby, Python, C#, CLU и многих других, чтобы их перечислять.
- ^ Jump up to: а б Лисков, Барбара (1992). «История CLU». Вторая конференция ACM SIGPLAN по истории языков программирования.
- ^ Лисков, Варвара ; Зиллес, Стивен (1974). «Программирование с абстрактными типами данных». Материалы симпозиума ACM SIGPLAN по языкам очень высокого уровня . стр. 50–59. CiteSeerX 10.1.1.136.3043 . дои : 10.1145/800233.807045 .
- ^ Jump up to: а б с Лисков, Б. ; Снайдер, А.; Аткинсон, Р.; Шафферт, К. (август 1977 г.). «Механизмы абстракции в CLU». Коммуникации АКМ . 20 (8): 564–576. CiteSeerX 10.1.1.112.656 . дои : 10.1145/359763.359789 . S2CID 17343380 .
- ^ Бэррон, Д.В.; Бакстон, JN; Хартли, Д.Ф.; Никсон, Э.; Стрейчи, К. (1963). «Основные особенности CPL» . Компьютерный журнал . 6 (2): 134–143. дои : 10.1093/comjnl/6.2.134 .
- ^ Иерусалимский, Р.; Де Фигейредо, ЛХ; Селес, В. (2007). «Эволюция Lua» (PDF) . Материалы третьей конференции ACM SIGPLAN по истории языков программирования — HOPL III . стр. 2-1–2-26. дои : 10.1145/1238844.1238846 . ISBN 978-1-59593-766-7 . Архивировано (PDF) из оригинала 3 июля 2010 г.
- ^ «Корни Рубина и лидерство Маца» . Appfolio Engineering . 08.11.2019 . Проверено 15 ноября 2019 г.
Мац считает, что блоки — это величайшее изобретение Ruby (я согласен). Он позаимствовал эту идею из языка 1970-х годов под названием CLU, разработанного Массачусетским технологическим институтом, который называл их «итераторами»…
- ^ «HOWTO по функциональному программированию — документация Python 3.8.3» . docs.python.org . Проверено 25 мая 2020 г.
Внешние ссылки
[ редактировать ]- Официальный сайт
- Лисков, Барбара (апрель 1992 г.). «История CLU» (PDF) . МИТ-LCS-TR-561. Архивировано из оригинала (PDF) 17 сентября 2003 г.
- clu2c : программа для компиляции кода CLU в C.
- Словарь языков программирования
- Сравнение CLU на многоязычном демонстрационном сайте алгоритма «99 бутылок пива»
- Лисков Б.; Аткинсон, Р.; Блум, Т.; Мосс, Э.; Шафферт, Дж. К.; Шайфлер, Р.; Снайдер, А. (1981). Справочное руководство CLU . Конспекты лекций по информатике. Том. 114. Спрингер. дои : 10.1007/BFb0035014 . ISBN 9783540108368 . S2CID 27382594 .