Язык Common LISP Object System (CLOS)

В языке Lisp существует несколько десятков диалектов, включая MacLisp, Standard Lisp, SpiceLisp, S-1 Lisp, ZetaLisp, Nil, InterLisp и Scheme. В начале 80-х годов под воздействием идей объектно-ориентированного программирования возникла серия новых диалектов Lisp, многие из которых были ориентированы на представление знаний. Успех Ги Стила (Guy Steele) в стандартизации Common Lisp способствовал попытке стандартизировать объектно-ориентированные диалекты в 1986 г. Идея стандартизации была поддержана летней конференцией 1986 г. по ACM Lisp и функциональному программированию, в результате чего была создана специальная рабочая группа при комитете X3J13 ANSI (Комитет по стандартизации Common Lisp).

Поскольку новый диалект должен был стать надстройкой к Common Lisp, он получил название Common Lisp Object System (сокращенно CLOS). В комитет вошли Боб Матис и Ги Стил (Bob Mathis, Guy Steele). Возглавил комитет Дэниел Бобров (Daniel Bobrow), а его членами стали Соня Кин, Линда де Мишель, Патрик Дассуд, Ричард Габриель, Джеймс Кемпф, Грегор Кацазлес и Девид Мун (Sonya Keene, Linda de Michiel, Patrick Dussud, Richard Gabriel, James Kempf, Gregor Kicazles, David Moon).

Серьезное влияние на проект CLOS оказали языки NewFlavors и CommonLoops. После двухлетней работы в 1988 г. была опубликована полная спецификация CLOS.

Кин (Keene) отмечает, что в проекте CLOS ставились три основные цели:

  • "Представление стандартного расширения языка, включающего все наиболее
    полезные приемы объектно-ориентированного проектирования.
  • Обеспечение эффективного и гибкого интерфейса программиста, позволяющего
    реализовать самые различные задачи.
  • Проект CLOS должен быть открытым для дальнейшего совершенствования и учета
    требований пользователя объектно-ориентированного программирования".

Не поддерживая прямо механизм устойчивости, CLOS имеет расширение с протоколом метаобъектов для реализации этого механизма.

Характеристики CLOS:

Абстракции Переменные объектов
Методы объектов
Переменные классов
Методы классов
Да
Да
Да
Да
Ограничение доступа Для переменных

Для методов

Чтение, запись, доступ
Общедоступные
Модульность Виды модульности Пакет (монолитный)
Иерархия Наследование
Обобщенные блоки
Метаклассы
Множественное
Нет
Да
Типирование Строгое типирование
Полиморфизм
Возможно
Да (множественный)
Параллельность Многозадачность Да
Устойчивость Устойчивость объектов Косвенно

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *