Jump to content

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

(Перенаправлено с языка программирования CLU )
КЛУ
Парадигма мультипарадигмальность : объектно-ориентированная , процедурная
Разработано Барбара Лисков и ее ученики
Разработчик Массачусетский технологический институт
Впервые появился 1975 год ; 49 лет назад ( 1975 )
Стабильная версия
Родной CLU 1.5 ( SPRC , VAX ) / 26 мая 1989 г .; 35 лет назад ( 1989-05-26 ) [1]

Портативный CLU / 6 ноября 2009 г .; 14 лет назад ( 06.11.2009 ) [2]

Дисциплина набора текста сильный
Веб-сайт пмг .csail .edu /CLU .html
Основные реализации
ПДП-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_numbers можно использовать взаимозаменяемо с массивом 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]

  1. ^ Jump up to: а б Кертис, Дороти (6 ноября 2009 г.). «Главная страница CLU» . Группа методологии программирования, Лаборатория информатики и искусственного интеллекта . Массачусетский технологический институт . Проверено 26 мая 2016 г.
  2. ^ Jump up to: а б Кертис, Дороти (6 ноября 2009 г.). «Индекс /pub/pclu» . Группа методологии программирования, Лаборатория информатики и искусственного интеллекта . Массачусетский технологический институт . Проверено 26 мая 2016 г.
  3. ^ «Файлы CLU, 1976–1989» . Кассеты коллекции Tech Square (ToTS), MC-0741 . Департамент уникальных коллекций Массачусетского технологического института. swh:1:dir:5dc935d1c236b15a99b0750cf236b2d89ec951d0 .
  4. ^ Ушиджима, Тецу. "clu2c " clu2c woodsheep.jp . Проверено 2 мая 2016 г.
  5. ^ Jump up to: а б с Страуструп, Бьярн (1996). История C++: 1979–1991 гг . Нью-Йорк, штат Нью-Йорк, США: Ассоциация вычислительной техники. стр. 699–769. дои : 10.1145/234286.1057836 . Проверено 25 марта 2022 г.
  6. ^ Лунд, Фредрик. «Вызов по объекту» . effbot.org . Архивировано из оригинала 23 ноября 2019 года . Проверено 21 ноября 2017 г. замените «CLU» на «Python», «запись» на «экземпляр» и «процедуру» на «функцию или метод», и вы получите довольно точное описание объектной модели Python.
  7. ^ Латтнер, Крис (3 июня 2014 г.). «Домашняя страница Криса Латтнера» . Крис Лэттнер . Проверено 3 июня 2014 г. Язык Swift — это продукт неустанных усилий команды языковых экспертов, гуру документации, ниндзя по оптимизации компиляторов и невероятно важной внутренней экспериментальной группы, которая предоставляла отзывы, помогающие совершенствовать и проверять идеи. Конечно, он также получил большую пользу от опыта, с трудом полученного многими другими языками в этой области, черпая идеи из Objective-C, Rust, Haskell, Ruby, Python, C#, CLU и многих других, чтобы их перечислять.
  8. ^ Jump up to: а б Лисков, Барбара (1992). «История CLU». Вторая конференция ACM SIGPLAN по истории языков программирования.
  9. ^ Лисков, Варвара ; Зиллес, Стивен (1974). «Программирование с абстрактными типами данных». Материалы симпозиума ACM SIGPLAN по языкам очень высокого уровня . стр. 50–59. CiteSeerX   10.1.1.136.3043 . дои : 10.1145/800233.807045 .
  10. ^ Jump up to: а б с Лисков, Б. ; Снайдер, А.; Аткинсон, Р.; Шафферт, К. (август 1977 г.). «Механизмы абстракции в CLU». Коммуникации АКМ . 20 (8): 564–576. CiteSeerX   10.1.1.112.656 . дои : 10.1145/359763.359789 . S2CID   17343380 .
  11. ^ Бэррон, Д.В.; Бакстон, JN; Хартли, Д.Ф.; Никсон, Э.; Стрейчи, К. (1963). «Основные особенности CPL» . Компьютерный журнал . 6 (2): 134–143. дои : 10.1093/comjnl/6.2.134 .
  12. ^ Иерусалимский, Р.; Де Фигейредо, ЛХ; Селес, В. (2007). «Эволюция Lua» (PDF) . Материалы третьей конференции ACM SIGPLAN по истории языков программирования — HOPL III . стр. 2-1–2-26. дои : 10.1145/1238844.1238846 . ISBN  978-1-59593-766-7 . Архивировано (PDF) из оригинала 3 июля 2010 г.
  13. ^ «Корни Рубина и лидерство Маца» . Appfolio Engineering . 08.11.2019 . Проверено 15 ноября 2019 г. Мац считает, что блоки — это величайшее изобретение Ruby (я согласен). Он позаимствовал эту идею из языка 1970-х годов под названием CLU, разработанного Массачусетским технологическим институтом, который называл их «итераторами»…
  14. ^ «HOWTO по функциональному программированию — документация Python 3.8.3» . docs.python.org . Проверено 25 мая 2020 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 6c124f795e9cee3d397f6f99d63fa701__1705984860
URL1:https://arc.ask3.ru/arc/aa/6c/01/6c124f795e9cee3d397f6f99d63fa701.html
Заголовок, (Title) документа по адресу, URL1:
CLU (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)