Введение
телесериал SK8 (произносится "скейт") представлял собой мультимедийную среду разработки, созданную в группе передовых технологий Apple с 1988 по 1997 год. Его описывали как "HyperCard на стероидах", сочетающий версию языка программирования HyperTalk из HyperCard с современной объектно-ориентированной платформой для приложений. Целью проекта было предоставить творческим дизайнерам возможность создавать сложные, автономные приложения. Основными компонентами SK8 были объектная система, язык программирования, библиотеки графики и компонентов, а также Project Builder – интегрированная среда разработки. На протяжении большей части своей истории SK8 оставался исследовательским проектом и послужил вдохновением для ряда других проектов Apple, таких как AppleScript, а также использовался в качестве платформы для прототипирования. Хотя примерно в 1993 году команда из подразделения Apple Product Division была назначена для выпуска среды выполнения SK8 (SK8 Runtime), ограничения возможностей Mac и переход на процессор PowerPC сделали этот масштабный проект невыполнимым. Поскольку основная часть первоначальной концепции была реализована, а простого пути для выпуска в составе MacOS не было, активная разработка была прекращена в 1996–1997 годах, а исходный код Macintosh Common Lisp для всего проекта был опубликован в 1997 году.
SK8 (pronounced "skate") was a multimedia authoring environment developed in Apple's Advanced Technology Group from 1988 until 1997. It was described as "HyperCard on steroids", combining a version of HyperCard's HyperTalk programming language with a modern object oriented application platform. The project's goal was to allow creative designers to create complex, stand alone applications. The main components of SK8 included the object system, the programming language, the graphics and components libraries, and the Project Builder, an integrated development environment. For much of its history, SK8 remained a research project, and inspired a number of other Apple projects like AppleScript, as well as seeing use as a prototyping platform. Although around 1993 a team was assigned by the Apple Product Division to release a SK8 runtime, the limitation of the Mac's capabilities as well as the shift to the PowerPC chip made such a large project intractable. With the bulk of the original vision completed and no easy path to release as part of MacOS, active development ended in 1996–1997, and the Macintosh Common Lisp source code for the entire project was released to the public in 1997.
История
Проект SK8 был создан Рубеном Клейманом, когда он пришел в Apple в 1987 году. Он пришел в Apple для разработки гибкого, объектно-ориентированного пользовательского интерфейса и мультимедийной среды разработки. Название проекта произошло от его увлечения скейтбордингом. К счастью, в это же время HyperCard с его интерфейсом прямого манипулирования и языком сценариев готовился к выпуску. Хотя HyperCard отлично подходил для простых приложений, он использовал ограниченную модель взаимодействия – «стопки» карточек, что ограничивало его потенциальное применение. SK8 стремился расширить эти возможности для более широкого спектра задач программирования. Ранняя работа над SK8 была сосредоточена на инфраструктуре, а не на визуальном программировании. Первой разработкой Клеймана стала динамическая, прототипная объектная система MacFrames – система фреймов/объектов с плагинами для механизмов логического вывода. С помощью настроек MacFrames можно было эмулировать различные объектные системы, включая KEE от IntelliCorp. Эти исследования, в сотрудничестве с пользователями, разрабатывающими реальные приложения и прототипы в Apple, привели к созданию объектной модели, использованной в SK8. MacFrames был разработан на Coral Lisp, который Apple приобрела и который стал Macintosh Common Lisp. В то время у Macintosh не было универсальной системы межпроцессного взаимодействия (IPC). Клейман создал IPC-инициализатор для Mac, чтобы MacFrames мог взаимодействовать с другими процессами, в частности, с HyperCard. Это позволило использовать HyperCard в качестве визуального интерфейса для MacFrames. Еще одной целью MacFrames было встроить распределенные вычисления непосредственно в объектную систему. Вместо использования RPC API можно было просто установить свойство объекта с нужным значением и функцией обратного вызова для получения результатов. Группа контроля качества Apple использовала MacFrames для создания автоматизированной системы «черного ящика» для тестирования. SK8 Project Builder был создан для предоставления богатого набора инструментов прямого манипулирования, включая инструменты для создания интерактивных элементов управления и общего, но неинвазивного связующего звена. Целью создателя было предоставить визуальный интерфейс прямого манипулирования для создания визуальных сред разработки. То есть, система могла использоваться для разработки совершенно разных сред разработки, адаптированных к различным задачам. Первая версия графической системы SK8 была разработана для расширения HyperCard, позволяя карточкам иметь несколько слоев вместо одного шаблона «фона». Изначально система SK8 была запрограммирована на Lisp. Это считалось слишком сложным для общего использования. Кроме того, росло беспокойство по поводу количества различных языков, используемых в Apple. В рамках более широких усилий по модернизации MacOS требовался новый единый язык сценариев. В 1989 году Клейман присоединился к Дэвиду Кенфилду Смиту и Ларри Теслеру для разработки и реализации первой версии AppleScript. Эта версия AppleScript использовала объекты SK8, а два года спустя подразделение Apple Product Division перереализовала AppleScript, используя AppleEvents в качестве связующего звена для связи с объектами AppleScript. Изначальный прототип был переименован в SK8Script и в 1992 году был переписан на ассемблере. Ряд исследователей из группы передовых технологий начали использовать SK8 для своих проектов. Некоторые университеты и корпорации также приняли участие. Система использовалась для разработки прототипов для Newton, интерфейсов QuickTime, межпроцессного взаимодействия, а также для прототипирования многих проектов, включая Stagecraft – обучающий инструмент для детей. В 1992 и 1993 годах, в целях повышения производительности, SK8 был полностью переработан. Работая в Кембриджском исследовательском центре Apple, хранилище объектов Macintosh Common Lisp было изолировано и напрямую подключено к хранилищу SK8. Отладчик SK8Script был переписан на уровне языка ассемблера (ранее на Lisp), а производительность компилятора и времени выполнения была улучшена.
Описание
Система SK8 включает в себя объектную систему, графические и компонентные объекты, язык программирования SK8Script и среду Project Builder.
Система объектов
Система объектов SK8, как и JavaScript, была основана на прототипах, но в отличие от JavaScript, сами свойства объектов являлись объектами. Таким образом, свойства были не просто именами, служащими ключами для установки или получения значений, но также обладали произвольным поведением. Это позволяло свойствам проявлять интеллектуальные функции (например, запускать механизм логического вывода или выступать в качестве конечных точек в RPC-сетях); их можно было рассматривать как «умные свойства». Цель заключалась в том, чтобы позволить разработчикам приложений сосредоточиться на манипулировании объектами, а не на изучении API, которые были бы встроены непосредственно в объекты. Иерархическое пространство имен для управления именами свойств реализовано не было.
SK8Скрипт
До 1989 года языком сценариев SK8 был Lisp. Затем он был заменен на SK8Script, который испытал сильное влияние HyperTalk (HT). Многие различия между SK8Script и HyperTalk можно рассматривать как обобщение концепций HT, устраняющее тесную привязку к конкретным объектам среды HyperCard и заменяющее её обобщенным синтаксисом, способным взаимодействовать с любым объектом. Как и в HT, ключевой концепцией системы SK8Script являются "контейнеры", которые приблизительно соответствуют объектам в традиционных системах, и система "фрагментации", позволявшая идентифицировать и перечислять эти контейнеры. HT впервые предложил возможность обращения к объектам и коллекциям различными способами, позволяя программисту выбирать наиболее естественный синтаксис в конкретной ситуации и использовать совершенно другой синтаксис в другом месте. SK8Script предлагал аналогичную систему.
Графика и компоненты
Вселенная SK8 была построена на мультимедийной системе, использующей концепцию «Актеры на сцене». Актерами являлись любые объекты, основанные на прототипе Actor, который содержал базовую структуру, необходимую для поддержки 2D-графики, включая информацию о местоположении и размере объекта, например. Актеры становились видимыми при размещении на Сцене – невидимом фоновом объекте, который перехватывал пользовательские события для обеспечения интерактивности. В SK8 традиционное окно было объектом, как и любой другой графический элемент. Когда Актер находился на Сцене, он мог функционировать как оконный объект. Было легко создавать сложные объекты, имитирующие поведение окон (например, окно в форме пончика, с отверстием, имеющим 0% непрозрачности, содержащее текстовый объект, прокручивающийся по кругу, или, возможно, воспроизводящийся фильм внутри его рамки). Объект, известный как «гало» (halo), предоставлял элементы управления для изменения размера и другие виджеты для манипулирования в визуальной среде разработки. Все Актеры SK8 могли содержать другие Актеры. По иерархии можно было перемещаться с помощью chunking-выражений, например, можно было установить видимость первого прямоугольника в CoolOval в значение true. Затем объекты можно было сделать видимыми в пользовательском интерфейсе, переместив их на Сцену с помощью команды insert, например, `insert CoolOval into the stage`, что приводило к отображению как овала, так и прямоугольника. Пользовательские интерфейсы (GUI) создавались исключительно из Актеров. Оконный объект мог быть построен из непрозрачного прямоугольника, содержащего другие объекты (например, кнопки закрытия, виджеты). Стиль отрисовки каждого Актера контролировался Рендерером (Renderer), который облегчал процесс создания GUI. Например, BevelRenderer можно было использовать для создания скошенных краев вокруг Актера, создавая эффект, похожий на элементы управления Windows 3.x или панель заголовка в NeXTSTEP. Другие Рендереры поддерживали заливку цветом и изображениями, градиенты, текстуры и смешивание. Хотя с точки зрения программирования не было различий, базовые объекты, такие как прямоугольники, классифицировались как «геометрические актеры» (geometry actors), а более традиционные элементы GUI, такие как кнопки, – как «актеры интерфейса» (interface actors). Сцена перехватывала пользовательские события, такие как щелчки мыши и нажатия клавиш, и отправляла их Актерам. Визуальная иерархия определяла, какой объект первым получит сообщение – Сцена была упорядочена по оси Z, и объекты, расположенные ближе к переднему плану, получали сообщения первыми. Сообщения могли передаваться вверх по иерархии классов/прототипов с помощью команды `do inherited`.
Создатель проекта
Project Builder была средой для создания визуальных сред разработки. Она предоставляла возможности редактирования кода, отладки, работы с графикой, библиотеку интеллектуальных компонентов, поддержку целевых платформ во время выполнения и систему построения графического интерфейса с использованием прямого манипулирования. Ключевым элементом системы Builder была панель "Обзор", содержащая категоризированный список всех объектов в текущем открытом проекте, включая библиотеки, пользовательские функции и методы, переменные и так далее. Эти объекты можно было просматривать и редактировать двойным щелчком мыши или через всплывающее меню, появлявшееся при выборе объекта в конструкторе графического интерфейса. Редактор объектов отображал "свойства" объекта (переменные экземпляра и класса) в одной панели и его "обработчики" (методы) – в другой. Конструктор графического интерфейса включал систему перетаскивания для создания визуальных объектов. В SK8 не было традиционных "экранов"; вместо этого использовался невидимый объект "Сцена", который служил фоном для управления событиями и визуальными объектами. Примечательно, что для отображения чего-либо не требовались и не предполагались окна в традиционном понимании. Фактически, любой визуальный объект мог обладать свойствами, характерными для окна (благодаря перетаскиванию и другим интеллектуальным свойствам). SK8 также включал систему редактирования и программирования полных меню, которой не было в HyperCard. Еще одной востребованной функцией, отсутствовавшей в HyperCard, был медиа-редактор, позволявший импортировать и экспортировать ресурсы Macintosh в проект. SK8 интегрировал эту функциональность непосредственно в IDE. Другие компоненты системы включали онлайн-документацию, списки системных объектов и команд, а также окна редактора кода и отладчика.
Взаимодействие с системой
SK8Script предоставлял систему для вызова функций операционной системы и возврата из них, позволяя ему более напрямую взаимодействовать с Macintosh Toolbox. В HyperCard взаимодействие с произвольным кодом Toolbox осуществлялось через пользовательские ресурсы кода, известные как XCMD и XFCN, которые инкапсулировали функциональность в "черный ящик". Эти ресурсы вызывались и возвращали управление в рамках одной операции, при этом внутренние операции оставались невидимыми. Под управлением SK8, SK8Script мог взаимодействовать непосредственно с инкапсулированным кодом, устанавливая значения переменных, вызывая функции и получая результаты. Внешний код также мог вызывать SK8Script, просматривая и изменяя значения переменных или вызывая функции.