Введение

ActionScript — объектно-ориентированный язык программирования, созданный для мультимедийной платформы Flash. Изначально разработан компанией Macromedia Inc. (позже приобретённой Adobe). На него оказал влияние HyperTalk, язык сценариев для HyperCard. В настоящее время это реализация ECMAScript (то есть он является надмножеством синтаксиса и семантики языка, более известного как JavaScript), хотя изначально он возник как параллельная разработка, обе находясь под влиянием HyperTalk. Код ActionScript обычно компилируется в байт-код. ActionScript используется главным образом для разработки веб-сайтов и программного обеспечения, предназначенного для платформы Adobe Flash, и изначально применялся на веб-страницах в виде встроенных SWF-файлов. ActionScript 3 также используется с системой Adobe AIR для разработки настольных и мобильных приложений. Сам язык имеет открытый исходный код, поскольку его спецификация распространяется бесплатно, а также доступны компилятор с открытым исходным кодом (в составе Apache Flex) и виртуальная машина с открытым исходным кодом (Tamarin). ActionScript также использовался в Scaleform GFx для разработки трёхмерных пользовательских интерфейсов видеоигр и индикаторов на экране.

Обзор

ActionScript изначально был разработан для управления простыми двумерными векторными анимациями, созданными в Adobe Flash (ранее Macromedia Flash). Первоначально ориентированный на анимацию, ранние версии Flash-контента предлагали мало возможностей для интерактивности и, следовательно, имели ограниченные возможности скриптинга. Позднее в новые версии была добавлена функциональность, позволяющая создавать веб-игры и насыщенные веб-приложения с потоковым мультимедиа (таким как видео и аудио). Сегодня ActionScript подходит для разработки настольных и мобильных приложений через Adobe AIR; он используется в некоторых базах данных и в базовой робототехнике, например, в Make Controller Kit. Flash MX 2004 представил ActionScript 2.0 – язык скриптов, более подходящий для разработки Flash-приложений. Часто можно сэкономить время, используя скрипт вместо анимации, что обычно также обеспечивает большую гибкость при редактировании. С появлением альфа-версии Flash Player 9 (в 2006 году) была выпущена новая версия ActionScript – ActionScript 3.0. Эта версия языка предназначена для компиляции и выполнения на виртуальной машине Tamarin (ранее ActionScript Virtual Machine 2), которая также была полностью переписана (под названием AVM2). В связи с этим код, написанный на ActionScript 3.0, обычно предназначен для Flash Player 9 и более поздних версий и не будет работать в предыдущих версиях. При этом ActionScript 3.0 выполняется до 10 раз быстрее, чем устаревший код ActionScript, благодаря улучшениям компилятора JIT (Just-In-Time). Библиотеки Flash можно использовать с возможностями XML браузера для отображения насыщенного контента в браузере. Эта технология известна как Asynchronous Flash and XML (асинхронный Flash и XML), аналогично AJAX. Adobe предлагает линейку продуктов Flex для удовлетворения спроса на насыщенные веб-приложения, построенные на Flash, с поведением и программированием, реализованными на ActionScript. ActionScript 3.0 является основой API (интерфейса прикладного программирования) Flex 2.

История

ActionScript начинался как объектно-ориентированный язык программирования для среды разработки Flash от Macromedia, впоследствии развивавшийся Adobe Systems как Adobe Flash. Первые три версии Flash предоставляли ограниченные возможности интерактивности. Ранние разработчики Flash могли привязывать простую команду, называемую "action", к кнопке или кадру. Набор этих команд представлял собой базовые элементы управления навигацией, включающие команды, такие как "play", "stop", "getURL" и "gotoAndPlay". С выпуском Flash 4 в 1999 году этот простой набор команд превратился в небольшой язык сценариев. Новые возможности, представленные в Flash 4, включали переменные, выражения, операторы, условные операторы и циклы. Несмотря на то, что внутри Flash 4 он именовался "ActionScript", в руководстве пользователя и маркетинговых материалах продолжали использовать термин "actions" для описания этого набора команд.

Временная линия по версиям игроков

Flash Player 2: Первая версия с поддержкой скриптов, ее действия включали gotoAndPlay, gotoAndStop, nextFrame и nextScene для управления временной шкалой. Flash Player 3: Расширенная поддержка базового скриптования, появилась возможность загружать внешние SWF-файлы (loadMovie). Flash Player 4: Первый проигрыватель с полной реализацией скриптов (называемых Actions), скрипты использовали синтаксис на основе Flash и поддерживали циклы, условные операторы, переменные и другие основные языковые конструкции. Flash Player 5: Включен в первую версию ActionScript, он использовал прототипное программирование на основе ECMAScript и позволял полноценное процедурное и объектно-ориентированное программирование. Разработка, основанная на дизайне. Flash Player 6 добавил модель обработки событий, элементы управления доступностью и поддержку переключателя. Первая версия с поддержкой формата Action Message Format (AMF) и протокола обмена сообщениями в реальном времени (RTMP) обеспечила потоковую передачу аудио/видео по запросу. Flash Player 7: Дополнения включали стилизацию текста с помощью Cascading Style Sheets (CSS) и поддержку ActionScript 2.0, языка программирования на основе предложения ECMAScript 4 Netscape. С классовым наследованием. Однако ActionScript 2.0 мог компилироваться в байт-код ActionScript 1.0 для работы в Flash Player 6. Flash Player 8 расширил ActionScript 1/ActionScript 2, добавив новые библиотеки классов с API для управления данными растровых изображений во время выполнения, загрузки файлов и живых фильтров для размытия и отбрасывания теней. Flash Player 9 (первоначально назывался 8.5) добавил ActionScript 3.0 с появлением новой виртуальной машины ActionScript Virtual Machine 2 (AVM2), которая сосуществовала с предыдущей AVM1 для поддержки устаревшего контента. Повышение производительности было основной целью этого релиза, включая новый JIT-компилятор (Just in Time). Добавлена поддержка бинарных сокетов, ECMAScript для XML (E4X) для разбора XML, полноэкранного режима и регулярных выражений. Это первый релиз проигрывателя под названием Adobe Flash Player. Flash Player 10 (первоначально назывался Astro): Добавлена базовая 3D-манипуляция, такая как вращение по осям X, Y и Z, 3D-API для рисования и текстурирование. Возможность создания пользовательских фильтров с помощью Adobe Pixel Bender. Некоторые задачи визуальной обработки теперь перекладываются на графический процессор, что заметно сокращает время рендеринга каждого кадра и повышает частоту кадров, особенно при использовании видео H.264. Появился новый звуковой API, позволяющий создавать аудио во Flash, что ранее было невозможно. Кроме того, Flash Player 10 поддерживает одноранговую (P2P) связь с использованием протокола потоковой передачи мультимедиа в реальном времени (RTMFP). Flash Player 11: Основным дополнением в этой версии стали продвинутые (ускоренные графическими картами) 3D-возможности на основе Stage3D для Windows, Mac, iOS, Android и других основных платформ. Значительно улучшена совместимость с платформой iOS и другими не-десктопными платформами. Другие функции включают кодирование H.264 для камер, встроенную поддержку JSON, кубические кривые Безье, безопасный генератор случайных чисел, сжатие LZMA для SWF-файлов, рабочие потоки для переноса части выполнения кода в другие потоки процессора, ускоренное графическим процессором отображение с камеры, внутренние особенности памяти и анализ производительности, а также компилятор ActionScript 2.0 и другие незначительные дополнения. Flash Player 11.2: выпущен в марте 2012 года, с акцентом на добавление функций, важных для игрового и видеорынков. Некоторые из функций релиза включают следующее: поддержку блокировки мыши, поддержку щелчков правой и средней кнопками мыши, отключение контекстного меню, аппаратное ускорение графики/Stage 3D для Apple iOS и Android через Adobe AIR, поддержку большего количества видеокарт с аппаратным ускорением (с января 2008 года) для расширения доступности контента с аппаратным ускорением, новый API событий Throttle (отправляет событие, когда Flash Player ограничивает, приостанавливает или возобновляет контент), многопоточную декодирование видео на ПК, что повышает общую производительность видео на всех настольных платформах, уведомление об использовании премиальных функций в отладочных сборках; контент работает без ограничений в релизных проигрывателях. Flash Player 11.3: выпущен в июне 2012 года, с акцентом на включение функций и функциональности, важных для игрового рынка, а также на удовлетворение популярных запросов разработчиков. Некоторые из особенностей этого релиза включают следующее: поддержку ввода с клавиатуры в полноэкранном режиме, улучшенную поддержку звука для работы с аудио низкой задержки, возможность потоковой передачи текстур для контента Stage 3D, защищенный режим для Flash Player в Firefox, события меток кадров, поддержку сжатия BitmapData в форматы JPEG и PNG, поддержку требований к песочнице приложений Mac OS X App Store, поддержку потоковой передачи текста для Stage 3D, расширенную информацию о деталях драйвера графического процессора, новый API рисования Bitmap с указанием качества, API событий мыши вне области, поддержку автоматического обновления Flash Player для Mac OS, поддержку стилуса для устройств Android 4.0 (Adobe AIR), USB-отладку для iOS (Adobe AIR), поддержку симулятора iOS (Adobe AIR). Flash Player 11.4: выпущен в августе 2012 года, с акцентом на включение функций и функциональности, важных для игрового рынка, а также на удовлетворение популярных запросов разработчиков. Некоторые из функций релиза включают рабочие потоки ActionScript (обеспечивают параллельное выполнение ActionScript в отдельных потоках), поддержку расширенного профилирования, поддержку сжатия LZMA для ByteArray, поддержку видеокарт с аппаратным ускорением для Stage 3D, расширенную до 2006 года, улучшенную производительность ActionScript при нацеливании на Apple iOS, API индекса производительности для информирования о возможностях производительности текущей среды, поддержку сжатых текстур с поддержкой альфа-канала, поддержку StageVideo, API attachCamera и поддержку push-уведомлений для iOS (Adobe AIR). Flash Player 11.5: выпущен в ноябре 2012 года, с акцентом на повышение производительности и стабильности. Некоторые из функций релиза включают поддержку общих ByteArray для рабочих потоков ActionScript, трассировку стека отладки в релизных сборках Flash Player и различные исправления ошибок. Flash Player 11.6: выпущен в марте 2013 года, с акцентом на повышение производительности, безопасность и стабильность. Некоторые из функций релиза включают возможность запроса данных векторной графики во время выполнения, улучшение пользовательского интерфейса диалогового окна разрешения полноэкранного режима, возможность загрузки SWF-файлов во время выполнения при развертывании в качестве AIR-приложения в режиме AOT на iOS, более точный контроль над поддерживаемым разрешением дисплея на устройствах iOS при развертывании в качестве AIR-приложения, поддержку HiDPI для Flash Professional и доступ к быстрым операциям с памятью/внутренним функциям из ActionScript 3. Flash Player 11.7: выпущен в июне 2013 года, под кодовым названием "Geary", этот релиз сфокусирован на премиальном видео, играх, безопасности и стабильности. Некоторые из функций, запланированных для этого релиза, включают отладку среды выполнения Android, поддержку контроллера OUYA, удаленное размещение SWF-файлов на iOS и предотвращение резервного копирования общих объектов на iOS для улучшения поддержки iCloud. Flash Player 11.8: Adobe планировала выпустить эту версию в первой половине 2013 года, под кодовым названием "Harrison". Этот релиз был сфокусирован на премиальном видео, играх, безопасности и стабильности. Некоторые из функций, которые могли быть включены в этот релиз, включают API рекурсивной остановки на MovieClip и поддержку GamePad в браузерах и Android.

20002004: ActionScript "1.0"

С выходом Flash 5 в сентябре 2000 года "действия" из Flash 4 были усовершенствованы еще раз и впервые получили название "ActionScript". Это была первая версия ActionScript, испытавшая влияние JavaScript и стандарта ECMA 262 (третье издание), поддерживающая объектную модель указанного стандарта и многие из его основных типов данных. Локальные переменные можно было объявлять с помощью оператора, а также создавать пользовательские функции с передачей параметров и возвращаемыми значениями. Важно отметить, что ActionScript теперь можно было набирать в текстовом редакторе, а не собирать, выбирая действия из выпадающих списков и элементов управления диалоговых окон. С последующим выпуском инструмента разработки, Flash MX, и соответствующего проигрывателя, Flash Player 6, язык остался практически неизменным; были внесены лишь незначительные изменения, такие как добавление оператора и оператора "строгого равенства", что приблизило его к соответствию ECMA 262. Двумя важными особенностями ActionScript, отличающими его от более поздних версий, являются его слабая типизация и зависимость от прототипного наследования. Слабая типизация подразумевает возможность переменной хранить данные любого типа. Это позволяет быстро разрабатывать скрипты и особенно хорошо подходит для небольших проектов. Прототипное наследование – это механизм ActionScript 1.0 для повторного использования кода и объектно-ориентированного программирования. Вместо ключевого слова, определяющего общие характеристики класса, ActionScript 1.0 использует специальный объект, служащий "прототипом" для класса объектов. Все общие характеристики класса определены в прототипе класса, и каждый экземпляр этого класса содержит ссылку на этот прототип.

20032006: ActionScript 2.0 (англ. ActionScript 2.0), также известный как ActionScript

Следующая крупная версия языка, ActionScript 2.0, была представлена в сентябре 2003 года с выпуском Flash MX 2004 и соответствующего проигрывателя, Flash Player 7. В ответ на запросы пользователей о языке, лучше подходящем для больших и сложных приложений, ActionScript 2.0 включал проверку типов во время компиляции и синтаксис, основанный на классах, например, ключевые слова и (хотя это и позволяло использовать более структурированный объектно-ориентированный подход к программированию, код по-прежнему компилировался в байт-код ActionScript 1.0, что обеспечивало его работу и на предыдущем Flash Player 6. Иными словами, синтаксис наследования на основе классов представлял собой слой над существующей системой, основанной на прототипах.) С ActionScript 2.0 разработчики могли ограничивать переменные конкретным типом, добавляя аннотацию типа, чтобы ошибки несоответствия типов можно было обнаружить на этапе компиляции. ActionScript 2.0 также представил синтаксис наследования на основе классов, позволяя разработчикам создавать классы и интерфейсы, как в языках, основанных на классах, таких как Java и C++. Эта версия частично соответствовала проекту спецификации ECMAScript четвертого издания.

Flash Lite (светлый)

Flash Lite 1.0: Flash Lite – это технология Flash, разработанная специально для мобильных телефонов и потребительской электроники. Поддерживает Flash 4 ActionScript. Flash Lite 1.1: Добавлена поддержка Flash 4 ActionScript и дополнительные API устройств. Flash Lite 2.0 и 2.1: Добавлена поддержка Flash 7 ActionScript 2.0 и некоторых дополнительных API fscommand2. Flash Lite 3: Добавлена поддержка Flash 8 ActionScript 2.0, а также воспроизведение видео FLV. Flash Lite 4: Добавлена поддержка Flash 10 ActionScript 3.0 в качестве плагина для браузера и аппаратное ускорение графики.

АВИР

Adobe AIR поддерживает ActionScript, а также некоторые расширенные возможности, такие как движок Stage3D, разработанный Adobe. Количество API (интерфейсов прикладного программирования), доступных для ActionScript 3.0, значительно увеличилось.

Синтаксис

Код ActionScript имеет свободный формат и, следовательно, может быть написан с любым количеством или стилем пробелов по желанию автора. Базовый синтаксис основан на ECMAScript.

Защита кода

Как и большинство форматов файлов байт-кода, Flash SWF файлы могут быть декомпилированы в исходный код и ресурсы (аналогично тому, как можно декомпилировать файлы Microsoft .NET). Некоторые декомпиляторы способны почти полностью восстановить исходный файл, вплоть до кода, использованного при создании (хотя результаты зависят от конкретного случая). В противовес декомпиляторам, были разработаны обфускаторы ActionScript, которые преобразуют код в форму, нарушающую работу декомпиляторов, при этом сохраняя функциональность и структуру программы. Более качественные обфускаторы реализуют лексические преобразования, такие как переименование идентификаторов, изменение потока управления и преобразование абстракции данных, что в совокупности затрудняет для декомпиляторов создание полезного для человека результата. Менее надежные обфускаторы внедряют ловушки для декомпиляторов. Эти ловушки либо приводят к неожиданному сбою программного обеспечения декомпилятора, либо генерируют нечитаемый исходный код.