Self как развитие идей Smalltalk[]
Наличие в Smalltalk понятия класса создает проблему: если всё объект, и каждый объект является членом некоторого класса, то к какому классу относятся объекты, соответствующие классам? Ответ на этот вопрос, который предлагает Smalltalk, довольно сложен. Метауровень Smalltalk содержит "теневую" иерархию классов классов (это не опечатка!), плюс класс Metaclass и класс класса Metaclass.
Self устроен проще. Каждый объект имеет именованые слоты, в которых лежат ссылки на другие объекты. Один слот объекта (prototype) является выделеным в том смысле, что если при попытке обратиться к слоту объекта этот слот найти не удалось, поиск продолжается в том объекте, на который ссылается слот prototype, и так до тех пор, пока не будет найден искомый слот, или пока у очередного объекта слот prototype не будет пустым. Методы объекта хранятся в его слотах.
Благодаря такой архитектуре, объекты Self становятся самодостаточными, а понятие класса исчезает. Разумеется, для эффективной реализации такого языка требуется очень мощная поддержка со стороны виртуальной машины (разработка ВМ Self продвинула технологию виртуальных машин на качественно новый уровень; из широко используемых ВМ эти достижения используют, с одной стороны, виртуальная машина Java (HotSpot), с другой стороны -- ВМ VisualWorks).
Self и Morphic[]
Простота Self приводит к удивительно естественной технике работы с объектами. Основной операцией является клонирование -- порождение нового объекта, использующего существующий в качестве прототипа.
Self дал начало графической архитектуре Morphic (перенесенной впоследствии под Squeak). Основной единицей в Morphic является морф (morph) -- интерактивный графический объект. Для Morphic клонирование является основным способом порождать новые морфы. Поэтому вместо специальных операций вроде "создать кнопку" Morphic предлагает взять прототип кнопки и склонировать (программным путем, либо интерактивно, через меню).
История Self[]
История языка Self печальна. Он родился в начале 1980-х как ответ на определенное окостенение Smalltalk-80 (связанное с началом попыток его коммерциализации). С начала 1990-х "местом обитания" Self стали лаборатории Sun. Во второй половине 1990-х Self был принесен в жертву более перспективному, с точки зрения руководства , языку -- Java. Работы над языком были свернуты и фактически его история на этом закончилась.
ToDo:
- Более подробно проследить истории разработчиков Self
- Написать о связях Self и Strongtalk
Ссылки[]
- Self Home Page
- Классическая статья Self: the power of simplicity