Self

Self

Self

Selfобъектно-ориентированный, прототипный язык программирования, который задумывался как развитие языка Smalltalk.

Разрабатывался в лаборатории Xerox PARC, а потом в Стэндфордском университете. Это была экспериментальная разработка, целью которой было выяснить, насколько далеко можно продвинуться в направлении динамической чисто объектно-ориентированной системы программирования.

В итоге в языке Self были реализованы следующие концепции:

  • отсутствие классов; такие языки называются prototype-based; в них создание новых типов объектов осуществляется посредством клонирования имеющихся и внесения изменений непосредственно в структуру нового объекта; каждый объект представляет собой набор слотов одного из нескольких видов: константный (constant), переменный (variable) или родительский (parent), который задаёт наследование; также у объекта может быть активизационная запись (activation record), которая делает объект методом;
  • отсутствие операции присваивания (:=), которая была в Smalltalk; присваивание значений локальных слотов и слотов в получателе (self) также осуществляется посредством посылки сообщения;
  • поддерживается множественное наследование путём делегирования, то есть можно указать больше одного объекта, обрабатывающего сообщения, которые исходный объект не может обработать; в то же время, получателем сообщений, вызванных из родительских методов опять будет дочерний объект;
  • родительские слоты могут быть изменяемыми, то есть поддерживается динамическое множественное наследование; очевидное применение — простая реализация шаблона проектирования State;
  • даже базовые объекты, которые в Smalltalk были зарезервированными словами (nil, true, false), тоже являются обычными слотами в корневом объекте и извлекаются посредством посылки сообщения; таким образом в языке Self осталось только одно зарезервированное слово (resend — делегирования вызова родительским объектам), в то время как в Smalltalk их было пять;
  • в Smalltalk некоторые арифметические операции и сообщения, отвечающие за условия и циклы обрабатываются компилятором специальным образом; это было сделано для улучшения производительности; в Self таких частных случаев нет, и абсолютно все сообщения трактуются одинаково; это означает, что даже простейшая условная конструкция требует две операции посылки сообщения и клонирования нескольких объектов;

Понятно, что все эти нововведения выглядят абсолютно дико с точки зрения практического программирования, тем более это выглядело дико в момент создания Self. Но цель научных разработок как раз и заключается в том, чтобы исследовать невероятные подходы в надежде, что в дальнейшем это может получить выгодное применение. Так получилось и с языком Self.

Имея такие характеристики, трудно себе представить, что язык Self способен выполняться хотя бы умеренно медленно. Действительно, простая интерпретируемая реализация в лоб выполняет программы, написанные на Self, в сотни-тысячи раз медленнее, чем аналогичная программа на Си.

Поэтому разработчики языка в первую очередь сконцентрировали свои усилия на создание эффективного динамического компилятора — Self dynamic compiler technology. Эта система эволюционировала в трёх версиях и к 1993 году достигла невероятных результатов. Стандартный набор целочисленных тестов Стэндфордского университета выполнялся со скоростью 40 % от скорости оптимизирующего компилятора Си. Теория показала, что возможно достичь планки в 60 %, и является пределом для динамических языков, если реализовать более качественное распределение машинного кода.

Ещё более впечатляющие результаты могут быть достигнуты в алгоритмах с высокой степенью полиморфизма. Реальные приложения, как правило, и относятся к этой категории. В языках C/C++ полиморфизм реализуется посредством операции косвенного вызова (indirect call). А эта операция обходится очень дорого на современных суперскалярных процессорах. Динамический адаптивный компилятор Self способен реализовать полиморфный вызов так же хорошо, как и любой другой, или даже полностью исключить его посредством встраивания вызываемого метода в вызывающий (adaptive inlining). Таким образом программы на языках C/C++ показывают даже меньшую производительность на таких тестах.

Что же обеспечило настолько хороший результат? Вот технологии, которые были реализованы в динамическом компиляторе языка Self:

  • многоуровневый сборщик мусора (multi-generational garbage collector) — для эффективного управления памятью;
  • компиляция одного и того же метода для разных получателей сообщения (customization);
  • полиморфный встроенный кэш вызовов (PIC);
  • сбор статистической информации о частоте вызовов каждого метода в системе с дальнейшей передачей этой информации адаптивному компилятору/декомпилятору.
  • динамическая компиляция часто вызываемого метода с возможностью встраивания нескольких методов вверх и вниз по цепочке вызовов;
  • динамическая декомпиляция с замещением методов на стеке в случае программных изменений; это необходимо для сохранения семантики языка, когда в произвольный момент времени может быть внесено изменение в структуру любого объекта.

Правда, следует отметить, что все эти технологии приводили к сильному перерасходу памяти, так что среда разработки Self для нормального функционирования требовала 64 мегабайта памяти.

Проект Self финансировался компанией Sun Microsystems, и в 1994 году было решено официально закрыть проект. Видимо, в тот момент поменялась политическая обстановка внутри компании в связи со скорым выходом языка Java, куда и были брошены основные силы.

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Self" в других словарях:

  • Self — Self, n.; pl. {Selves}. 1. The individual as the object of his own reflective consciousness; the man viewed by his own cognition as the subject of all his mental phenomena, the agent in his own activities, the subject of his own feelings, and the …   The Collaborative International Dictionary of English

  • self- — ♦ Élément, de l angl. self « soi même ». ⇒ auto . self élément, de l angl. self, qui signifie soi même . ⇒SELF , élém. de compos. Élém. tiré de l angl. self « soi même », de même sens, entrant dans la constr. de subst. empr. à l angl. ou faits… …   Encyclopédie Universelle

  • self — self, the self In sociology, the concept of self is most frequently held to derive from the philosophies of Charles Horton Cooley , William James , and George Herbert Mead , and is the foundation of symbolic interactionism . It highlights the… …   Dictionary of sociology

  • self — /self/, n., pl. selves, adj., pron., pl. selves, v. n. 1. a person or thing referred to with respect to complete individuality: one s own self. 2. a person s nature, character, etc.: his better self. 3. personal interest. 4. Philos. a …   Universalium

  • self — self; self·dom; self·hood; self·ish·ness; self·ism; self·ist; self·less; self·ness; self·same·ness; thy·self; un·self; do it your·self; do it your·self·er; non·self; it·self; self·ish; self·ward; self·ish·ly; self·ward·ness; self·wards; …   English syllables

  • self — W3S2 [self] n plural selves [selvz] [: Old English;] 1.) [C usually singular] the type of person you are, your character, your typical behaviour etc sb s usual/normal self ▪ Sid was not his usual smiling self. be/look/feel (like) your old self… …   Dictionary of contemporary English

  • self — W3S2 [self] n plural selves [selvz] [: Old English;] 1.) [C usually singular] the type of person you are, your character, your typical behaviour etc sb s usual/normal self ▪ Sid was not his usual smiling self. be/look/feel (like) your old self… …   Dictionary of contemporary English

  • self — [ self ] (plural selves [ selvz ] ) noun *** count or uncount who you are and what you think and feel, especially the conscious feeling of being separate and different from other people: sense of self: Young babies do not have a fully developed… …   Usage of the words and phrases in modern English

  • self- — is a highly productive prefix forming compounds of various types, in most of which self acts as the object on which the action or attribute signified by the second element operates, e.g. self betrayal (= betrayal of oneself), self awareness (=… …   Modern English usage

  • self- — [self] [ME < OE < self: see SELF] prefix 1. of oneself or itself: refers to the direct object of the implied transitive verb [self love, self restraint] 2. by oneself or itself: refers to the subject of the implied verb [self acting] 3. in …   English World dictionary


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»