Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Common Lisp Object System (CLOS) — это механизм объектно-ориентированного программирования в ANSI Common Lisp. CLOS — мощная динамическая объектная система, которая радикально отличается от средств объектно-ориентированного программирования, встречающихся в более статических языках, таких как C++ или Java. CLOS был вдохновлён более ранними объектными системами Lisp, такими как MIT Flavors и CommonLoops, хотя он более универсален, чем любая из них. Изначально предлагавшийся как дополнение, CLOS был принят в качестве части стандарта ANSI для Common Lisp и был адаптирован для других диалектов Lisp, таких как EuLisp или Emacs Lisp.
The Common Lisp Object System (CLOS) is the facility for object oriented programming in ANSI Common Lisp. CLOS is a powerful dynamic object system which differs radically from the OOP facilities found in more static languages such as C++ or Java. CLOS was inspired by earlier Lisp object systems such as MIT Flavors and CommonLoops, although it is more general than either. Originally proposed as an add on, CLOS was adopted as part of the ANSI standard for Common Lisp and has been adapted into other Lisp dialects such as EuLisp or Emacs Lisp.
Протокол метаобъекта
Помимо стандарта ANSI Common Lisp существует широко реализованное расширение CLOS, называемое протоколом метаобъектов (MOP). MOP определяет стандартный интерфейс к внутренним механизмам реализации CLOS, рассматривая классы, описания слотов, обобщенные функции и сами методы как экземпляры метаклассов, и позволяет определять новые метаклассы и изменять поведение CLOS. Гибкость MOP в CLOS предвосхитила аспектно-ориентированное программирование, которое позже было разработано одними и теми же инженерами, такими как Грегор Кицалес. MOP определяет поведение всей объектной системы посредством набора протоколов, которые определены в терминах CLOS. Таким образом, можно создавать новые объектные системы, расширяя или изменяя предоставляемую функциональность CLOS. В книге "Искусство протокола метаобъектов" описывается использование и реализация MOP в CLOS. Различные реализации Common Lisp поддерживают протокол метаобъектов в несколько различном объеме. Проект Closer направлен на обеспечение отсутствующих функций.
Outside of the ANSI Common Lisp standard, there is a widely implemented extension to CLOS called the Metaobject Protocol (MOP). The MOP defines a standard interface to the underpinnings of the CLOS implementation, treating classes, slot descriptions, generic functions and methods themselves as instances of metaclasses, and allows the definition of new metaclasses and the modification of all CLOS behavior. The flexibility of the CLOS MOP prefigures aspect oriented programming, which was later developed by some of the same engineers, such as Gregor Kiczales. The MOP defines the behavior of the whole object system by a set of protocols. These are defined in terms of CLOS. Thus it is possible to create new object systems by extending or changing the provided CLOS functionality. The book The Art of the Metaobject Protocol describes the use and implementation of the CLOS MOP. The various Common Lisp implementations have slightly different support for the Meta Object Protocol. The Closer project aims to provide the missing features.
Влияние старых объектных систем на основе Lisp
Flavors (и его преемник New Flavors) была объектной системой на Lisp Machine MIT. Значительная часть операционных систем Lisp Machine и многие приложения для неё использовали Flavors или New Flavors. Flavors представила множественное наследование и миксины, среди прочих возможностей. Flavors в значительной степени устарела, хотя реализации для Common Lisp существуют. Flavors использовала парадигму передачи сообщений. New Flavors представила обобщённые функции. CommonLoops была преемницей LOOPS (из Xerox Interlisp D). CommonLoops была реализована для Common Lisp. Портативная реализация под названием Portable CommonLoops (PCL) стала первой реализацией CLOS. PCL широко портирована и до сих пор служит основой для реализации CLOS в нескольких реализациях Common Lisp. PCL реализована преимущественно на портативном Common Lisp, с небольшим количеством системно-зависимых частей.
Flavors (and its successor New Flavors) was the object system on the MIT Lisp Machine. Large parts of the Lisp Machine operating systems and many applications for it use Flavors or New Flavors. Flavors introduced multiple inheritance and mixins, among other features. Flavors is mostly obsolete, though implementations for Common Lisp do exist. Flavors was using the message passing paradigm. New Flavors introduced generic functions. CommonLoops was the successor of LOOPS (from Xerox Interlisp D). CommonLoops was implemented for Common Lisp. A portable implementation called Portable CommonLoops (PCL) was the first implementation of CLOS. PCL is widely ported and still provides the base for the CLOS implementation of several Common Lisp implementations. PCL is implemented mostly in portable Common Lisp with only a few system dependent parts.