Введение
Язык программирования HyperTalk — это устаревший высокоуровневый процедурный язык программирования, созданный в 1987 году Дэном Винклером и использовавшийся Биллом Аткинсоном совместно с гипермедийной программой HyperCard от Apple Computer. Поскольку основной аудиторией HyperTalk были начинающие программисты, разработчиков на HyperTalk обычно называли "авторами", а процесс написания программ — "скриптингом". Скрипты HyperTalk были близки к естественному английскому языку и использовали логическую структуру, схожую с языком программирования Pascal. HyperTalk поддерживал базовые управляющие структуры процедурных языков: циклы for/while/until, условные операторы if/then/else, а также вызовы "обработчиков" функций и сообщений (обработчик функции представлял собой подпрограмму, а обработчик сообщения — процедуру). Обычно программисту не требовалось явно указывать типы данных; преобразование между строками и числами происходило прозрачно в фоновом режиме. Классы и структуры данных в традиционном понимании отсутствовали; вместо них использовались специальные строковые литералы или "списки" "элементов", разделенных запятыми (в более поздних версиях свойство "itemDelimiter" позволяло выбирать произвольный разделитель). Выполнение кода обычно начиналось в ответ на событие, например, щелчок мыши по элементу пользовательского интерфейса. В конце 1980-х годов компания Apple рассматривала возможность использования языка, нечувствительного к регистру, который изначально интерпретировался, но получил компиляцию "точно в срок" (JIT) с HyperCard 2.0.
HyperTalk is a discontinued high level, procedural programming language created in 1987 by Dan Winkler and used in conjunction with Apple Computer's HyperCard hypermedia program by Bill Atkinson. Because the main target audience of HyperTalk was beginning programmers, HyperTalk programmers were usually called "authors" and the process of writing programs was known as "scripting". HyperTalk scripts resembled written English and used a logical structure similar to that of the Pascal programming language. HyperTalk supported the basic control structures of procedural languages: repeat for/while/until, if/then/else, as well as function and message "handler" calls (a function handler was a subroutine and a message handler a procedure). Data types usually did not need to be specified by the programmer; conversion happened transparently in the background between strings and numbers. There were no classes or data structures in the traditional sense; in their place were special string literals, or "lists" of "items" delimited by commas (in later versions the "itemDelimiter" property allowed choosing an arbitrary character). Code execution typically began as a response to an event such as a mouse click on a UI widget. In the late 1980s, Apple considered The case insensitive language was initially interpreted, but gained just in time compilation with HyperCard 2.0.
Объекты, контейнеры и скрипты
Основной концепцией пользовательского интерфейса HyperCard была карта – система отображения, имитирующая индексную карточку. Карты обычно использовались для хранения информации, подобно записи в обычной плоской файловой базе данных. Графическая компоновка карты создавалась с помощью мыши путем размещения на ней различных элементов, таких как текстовые поля и кнопки. За прозрачными областями каждой карты отображалась основная "карта" – фон. Объекты, размещенные на фоне, такие как поля и кнопки, использовались в качестве общего макета для нескольких карт, но с уникальным содержимым для каждой карты. Коллекция карт, фонов и связанных с ними данных хранилась в одном файле, известном как стек (карт). Все эти объекты, содержащие данные, в совокупности называются контейнерами. Функции HyperTalk, или скрипты, обычно хранились в свойстве "скрипт", доступном во многих контейнерах стека. Скрипты могли обращаться к свойствам контейнера, соответствующим переменным экземпляра, с помощью команд get и set. Свойство "скрипт" содержало обычный текст и не имело специальных свойств; скрипты можно было помещать и запускать из любого текстового контейнера, включая строковые переменные, или импортировать из других стеков с помощью команды start using. Скрипт мог быть даже текстом, введенным пользователем в текстовое поле на экране. Произвольный текст можно было выполнить с помощью команды do, аналогично Dynamic SQL.
Управление HyperCard
В отличие от универсальных платформ быстрой разработки приложений, стеки HyperCard всегда выглядели как стеки: панель меню принадлежала HyperCard, а не программисту (по умолчанию, хотя scripting позволял добавлять, удалять и изменять пункты меню), одно окно имело фиксированный размер (в ранних версиях), а в некоторых случаях команды, критически важные для работы, были встроены непосредственно в приложение и не были доступны из HyperTalk. Яркий пример – создание новых карточек, которое осуществлялось как часть приложения, а не напрямую из языка HyperTalk. Новую карточку можно было создать только через пункт меню "Новая карточка", который можно было эмулировать в коде с помощью команды `doMenu "Новая карточка"`. HyperTalk вызывал команды меню, но и команды меню, в свою очередь, могли вызывать обработчики в HyperTalk. Чтобы выполнить пользовательский код при выборе пункта меню "Копировать", нужно было поместить скрипт в стек, используя обработчик `on doMenu itemName`, а затем проверить значение `itemName` на соответствие строке "Копировать". HyperTalk также предоставлял возможность управления встроенными инструментами рисования через scripting, изменяя параметры инструментов и имитируя движения мыши командами "перетащить от начала до конца" и "кликнуть в позиции".
Расширение HyperTalk
Хотя язык HyperTalk, как и сама HyperCard, пришел в упадок, интерес к нему возродился благодаря протоколу плагинов, так называемым внешним командам (XCMD) и внешним функциям (XFCN), которые представляли собой контейнеры для нативного кода, подключаемые к стекам (в виде ресурсов, специфичных для Macintosh) с единственной точкой входа и возвращаемым значением. XCMD и XFCN можно было вызывать из скриптов HyperTalk как обычные обработчики сообщений и функций, а также они могли отправлять сообщения обратно в приложение HyperCard. Некоторые авторы XCMD добавили расширенные возможности, такие как поддержка полноценной цветовой палитры (ColorizeHC, HyperTint, AddColor), множество специализированных окон (Prompt, Tabloid, Textoid, Listoid, ShowDialog, MegaWindows), поддержку перетаскивания и различные аппаратные интерфейсы для языка.