Материал из РУВИКИ — свободной энциклопедии

ActionScript

ActionScript
Логотип программы ActionScript
Тип Объектно-ориентированный язык программирования[1]
Автор Гэри Гроссман
Разработчики Macromedia (поглощена Adobe Systems, 2005)
Написана на Компилятор: Java[2], виртуальная машина: C++[3]
Интерфейс Интерфейс командной строки
Движки ActionScript Virtual Machine (AVM1, AVM2)[4]
Операционные системы Windows, macOS, Android, iOS (через Adobe AIR)[5]; любая с современным браузером (через Apache Royale)[6]
Языки интерфейса Английский (основной), есть локализации[7]
Первый выпуск 1998
Аппаратные платформы IA-32, x86-64, ARM (через Adobe AIR)[8]; любая с современным браузером (через Apache Royale)[6]
Последняя версия 3.0 (27 июня 2006)
Репозиторий flex-sdk[9], royale-asjs[10]
Состояние Нишевая технология, поддержка унаследованных систем[11]
Лицензия Открытая спецификация, Apache License 2.0 (для Apache Royale)[12]
Сайт
flex.apache.org airsdk.harman.com
flex.apache.org
ActionScript
англ. ActionScript

ActionScript — объектно-ориентированный язык программирования, изначально разработанный компанией Macromedia Inc. (позднее приобретённой Adobe). Является реализацией стандарта ECMAScript, что делает его синтаксически схожим с JavaScript, хотя изначально языки развивались параллельно. Код на ActionScript компилируется в байт-код для выполнения в специализированной виртуальной машине (ActionScript Virtual Machine, AVM).

Исторически язык преимущественно использовался для разработки интерактивного контента для платформы Adobe Flash. После официального прекращения поддержки Flash Player 31 декабря 2020 года ActionScript перешёл в разряд нишевых технологий, используемых для поддержки унаследованных систем и в узкоспециализированных сферах.

Тем не менее, последняя версия языка, ActionScript 3.0, продолжает использоваться в нескольких направлениях. Ключевым из них является среда выполнения Adobe AIR, позволяющая создавать кроссплатформенные настольные и мобильные приложения; с 2019 года её поддержкой и развитием занимается компания HARMAN. Другое направление — проект с открытым исходным кодом Apache Royale, преемник Apache Flex, который компилирует код на ActionScript 3 в HTML5 и JavaScript для работы в современных браузерах[14].

Сам язык является открытым: его спецификация общедоступна[15], а компилятор с открытым исходным кодом входит в состав Apache Flex SDK.

ActionScript также использовался с Scaleform GFx для разработки трёхмерных пользовательских интерфейсов видеоигр и HUD.

ActionScript изначально был предназначен для управления простыми двумерными векторными анимациями, созданными в Adobe Flash (ранее Macromedia Flash). Первые версии Flash были ориентированы на анимацию и предоставляли мало возможностей для интерактивности, а значит, и ограниченные возможности скриптинга. Позднее были добавлены функции, позволившие создавать веб-игры и богатые интернет-приложения с потоковым мультимедиа (например, видео и аудио). После прекращения поддержки Adobe Flash Player в конце 2020 года язык перешёл в разряд нишевых технологий, но продолжает использоваться для разработки настольных и мобильных приложений через Adobe AIR[16], а также для создания веб-приложений с помощью Apache Royale.

Flash MX 2004 представил ActionScript 2.0 — скриптовый язык, более подходящий для разработки приложений Flash. Часто можно сэкономить время, написав скрипт вместо анимации, что также обеспечивает большую гибкость при редактировании.

С выходом Flash Player 9 в 2006 году была выпущена новая версия языка — ActionScript 3.0[17]. Эта версия предназначена для компиляции и выполнения на полностью переписанной виртуальной машине AVM2 (ActionScript Virtual Machine 2). Благодаря улучшениям JIT-компилятора, код на ActionScript 3.0 выполняется до 10 раз быстрее по сравнению с кодом на предыдущих версиях языка[18]. ActionScript 3.0 остаётся последней основной версией языка; его развитие продолжается в рамках SDK для Adobe AIR и Apache Royale, которые расширяют его возможности, а не через выпуск новых версий языка[16].

Библиотеки Flash могут использоваться совместно с возможностями XML браузера для отображения насыщенного контента, что известно как Asynchronous Flash and XML (аналог AJAX). ActionScript 3.0 составляет основу API фреймворка Apache Flex и его преемника Apache Royale, предназначенных для создания насыщенных интернет-приложений.

ActionScript начинался как объектно-ориентированный язык программирования для инструмента создания Flash от Macromedia, позднее развиваемого компанией Adobe Systems как Adobe Flash. Первые три версии инструмента создания Flash предоставляли ограниченные возможности интерактивности. Ранние разработчики Flash могли прикреплять простую команду, называемую «действием», к кнопке или кадру. Набор действий включал базовые элементы управления навигацией, такие как «play», «stop», «getURL» и «gotoAndPlay».

С выходом Flash 4 в 1999 году этот простой набор действий превратился в небольшой скриптовый язык. Новые возможности Flash 4 включали переменные, выражения, операторы, if-операторы и циклы. Хотя внутри компании язык назывался «ActionScript», в руководстве пользователя Flash 4 и маркетинговых материалах по-прежнему использовался термин «actions» для описания этого набора команд.

Хронология по версиям проигрывателя[править | править код]

  • Flash Player 2: Первая версия с поддержкой скриптов, действия включали gotoAndPlay, gotoAndStop, nextFrame и nextScene для управления временной шкалой.
  • Flash Player 3: Расширенная базовая поддержка скриптов, появилась возможность загружать внешние SWF (loadMovie).
  • Flash Player 4: Первый проигрыватель с полноценной реализацией скриптов (называемых Actions), синтаксис был основан на Flash и поддерживал циклы, условия, переменные и другие базовые конструкции языка.
  • Flash Player 5: Включён первый вариант ActionScript, использовалось прототипное программирование на основе ECMAScript[19], и позволялось полное процедурное программирование и объектно-ориентированное программирование. Разработка на основе дизайна.
  • Flash Player 6: Добавлена модель обработки событий, элементы управления доступностью и поддержка switch. Первая версия с поддержкой Action Message Format (AMF) и Real-Time Messaging Protocol (RTMP), что позволило потоковую передачу аудио/видео по требованию.
  • Flash Player 7: Добавлены стилизация текста с помощью CSS, поддержка ActionScript 2.0 — языка программирования на основе предложения ECMAScript 4 Netscape[20] с наследованием на основе классов. Однако ActionScript 2.0 может кросс-компилироваться в байткод ActionScript 1.0, чтобы работать в Flash Player 6.
  • Flash Player 8: Дальнейшее расширение ActionScript 1/2 за счёт новых библиотек классов с API для управления растровыми данными во время выполнения, загрузки файлов и живых фильтров для размытия и тени.
  • Flash Player 9 (первоначально назывался 8.5): Добавлен ActionScript 3.0 с появлением новой виртуальной машины ActionScript Virtual Machine 2 (AVM2), которая сосуществует с предыдущей AVM1 для поддержки устаревшего контента. Основной целью релиза было повышение производительности, включая новый JIT-компилятор. Добавлена поддержка бинарных сокетов, ECMAScript for XML (E4X), полноэкранного режима и регулярных выражений. Это первый релиз проигрывателя под названием Adobe Flash Player[21].
  • Flash Player 10 (первоначально назывался Astro): Добавлены базовые возможности 3D — вращение по осям X, Y, Z, 3D API для рисования и текстурирование. Возможность создавать пользовательские фильтры с помощью Adobe Pixel Bender. Некоторые задачи визуальной обработки теперь выполняются на GPU, что заметно снижает время рендеринга каждого кадра и увеличивает частоту кадров, особенно при работе с видео H.264. Новый звуковой API позволяет создавать аудио в Flash, чего ранее не было[22]. Также Flash Player 10 поддерживает P2P-коммуникацию с использованием Real Time Media Flow Protocol (RTMFP).
  • Flash Player 11: Основное нововведение — продвинутые 3D-возможности на базе Stage3D с аппаратным ускорением для Windows, Mac, iOS, Android и других платформ. Значительно улучшена совместимость с iOS и другими не настольными платформами. Другие функции: кодирование H.264 для камер, нативная поддержка JSON, кубические кривые Безье, защищённый генератор случайных чисел, сжатие LZMA для SWF, поддержка многопоточности (workers), ускоренный рендеринг видеопотока с камеры, анализ производительности, ActionScript Compiler 2.0 и др[23].
  • Flash Player 11.2: Выпущен в марте 2012 года, акцент на функции для игр и видео. Новое: поддержка захвата мыши, правой и средней кнопки мыши, отключение контекстного меню, аппаратное ускорение Stage 3D для iOS и Android через Adobe AIR, поддержка большего числа видеокарт (с января 2008), новый API событий Throttle, многопоточная обработка видео на ПК, уведомления о премиум-функциях в debug-версиях проигрывателя.
  • Flash Player 11.3: Выпущен в июне 2012 года, ориентирован на игровые функции и запросы разработчиков. Новое: поддержка клавиатуры в полноэкранном режиме, улучшенная работа с низкой задержкой аудио, потоковая загрузка текстур для Stage 3D, защищённый режим для Flash Player в Firefox, события меток кадров, сжатие BitmapData в JPEG и PNG, поддержка sandbox для Mac OS X App Store, потоковая передача текста для Stage 3D, расширенная информация о драйверах GPU, новый API качества отрисовки Bitmap, поддержка стилуса для Android 4.0 (Adobe AIR), отладка по USB для iOS (Adobe AIR), поддержка iOS-симулятора (Adobe AIR).
  • Flash Player 11.4: Выпущен в августе 2012 года, акцент на игровые функции и запросы разработчиков. Новое: ActionScript workers (многопоточное выполнение), расширенное профилирование, поддержка LZMA для ByteArray, поддержка видеокарт 2006 года для Stage 3D, улучшенная производительность ActionScript на iOS, API индекса производительности, поддержка сжатых текстур с альфа-каналом, StageVideo.attachCamera API, push-уведомления для iOS (Adobe AIR).
  • Flash Player 11.5: Выпущен в ноябре 2012 года, акцент на производительность и стабильность. Новое: общий ByteArray для ActionScript workers, отладочный stack trace в релизах Flash Player, исправления ошибок.
  • Flash Player 11.6: Выпущен в марте 2013 года, улучшения производительности, безопасности и стабильности. Новое: запрос векторных данных графики во время выполнения, улучшенный интерфейс диалога разрешения на полноэкранный режим, загрузка SWF во время выполнения при развёртывании как AIR-приложение в режиме AOT на iOS, более тонкий контроль разрешения дисплея на iOS, поддержка HiDPI для Flash Professional, быстрые операции с памятью в ActionScript 3.
  • Flash Player 11.7: Выпущен в июне 2013 года, кодовое имя «Geary», акцент на премиум-видео, игры, безопасность и стабильность. Новое: отладка Android captive runtime, поддержка контроллера OUYA, удалённое размещение SWF на iOS, предотвращение резервного копирования shared objects на iOS для лучшей поддержки iCloud.
  • Flash Player 11.8: Планировался к выпуску во второй половине 2013 года, кодовое имя «Harrison». Акцент на премиум-видео, игры, безопасность и стабильность. Новое: рекурсивный stop API для MovieClips, поддержка GamePad на настольных браузерах и Android.

2000—2004: ActionScript «1.0»[править | править код]

С выходом Flash 5 в сентябре 2000 года «actions» из Flash 4 были вновь усовершенствованы и впервые получили название «ActionScript»[24]. Это была первая версия ActionScript с влиянием JavaScript и стандарта ECMA-262 (третье издание), поддерживающая объектную модель и многие основные типы данных стандарта. Локальные переменные объявлялись с помощью var, пользовательские функции с передачей параметров и возвращаемыми значениями также могли быть созданы. Важно, что теперь ActionScript можно было набирать в текстовом редакторе, а не собирать из выпадающих списков и диалогов. В следующем релизе инструмента (Flash MX) и проигрывателя (Flash Player 6) язык остался практически без изменений; были лишь незначительные доработки, такие как добавление оператора switch и оператора строгого равенства ({{{1}}}), что приблизило его к стандарту ECMA-262. Две важные особенности ActionScript, отличающие его от последующих версий, — это слабая система типов и наследование на основе прототипов. Слабая типизация позволяет переменной содержать данные любого типа, что ускоряет разработку скриптов и особенно удобно для небольших проектов. Прототипное наследование — механизм ActionScript 1.0 для повторного использования кода и объектно-ориентированного программирования. Вместо ключевого слова class для определения общих характеристик класса, ActionScript 1.0 использует специальный объект-прототип, к которому ссылаются все экземпляры класса.

2003—2006: ActionScript 2.0[править | править код]

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

2006—2020: ActionScript 3.0[править | править код]

В июне 2006 года дебютировал ActionScript 3.0 вместе с Adobe Flex 2.0 и проигрывателем Flash Player 9. ActionScript 3.0 стал фундаментальной переработкой языка, настолько глубокой, что использует совершенно другую виртуальную машину. Flash Player 9 содержит две виртуальные машины: AVM1 для кода на ActionScript 1.0 и 2.0 и AVM2 для контента на ActionScript 3.0. ActionScript 3.0 добавил ограниченную поддержку аппаратного ускорения (DirectX, OpenGL).

Обновление языка включило ряд новых возможностей:

  • Проверка типов на этапе компиляции и выполнения — информация о типах доступна как во время компиляции, так и во время выполнения.
  • Повышенная производительность благодаря системе наследования на основе классов, отдельной от прототипной системы.
  • Поддержка пакетов, пространств имён и регулярных выражений.
  • Компиляция в совершенно новый тип байткода, несовместимый с байткодом ActionScript 1.0 и 2.0.
  • Переработанный API Flash Player, организованный по пакетам.
  • Унифицированная система обработки событий, основанная на стандарте DOM.
  • Интеграция ECMAScript for XML (E4X) для обработки XML.
  • Прямой доступ к списку отображения Flash во время выполнения для полного контроля над отображаемым контентом.
  • Полное соответствие черновику спецификации ECMAScript четвёртого издания.
  • Ограниченная поддержка динамических 3D-объектов (вращение по осям X, Y, Z и текстурирование).

ActionScript 3.0 остаётся последней основной версией языка. Прекращение поддержки Flash Player в конце 2020 года ознаменовало завершение его доминирования в вебе, однако развитие языка не остановилось. Оно продолжается в рамках SDK для Adobe AIR и Apache Royale, которые расширяют его возможности, а не через выпуск новых версий языка.

Flash Lite[править | править код]

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

AIR[править | править код]

Среда выполнения Adobe AIR является ключевой платформой, где продолжает использоваться ActionScript 3.0. Она позволяет создавать кроссплатформенные настольные и мобильные приложения из единой кодовой базы. В 2019 году Adobe передала поддержку и развитие AIR SDK компании HARMAN[25], которая продолжает активно выпускать обновления, расширяя возможности языка за счёт новых API[26].

Приложения AIR работают как самостоятельные исполняемые файлы и имеют доступ к расширенным возможностям, недоступным в браузере: аппаратно-ускоренной графике через движок Stage3D, доступу к файловой системе и расширению функциональности с помощью нативных расширений (ANE, Adobe Native Extensions)[27].

Основные сферы применения Adobe AIR:

  • Игры: Платформа остаётся популярной в индустрии мобильных игр, особенно при использовании с фреймворками для рендеринга с ускорением на GPU, такими как Starling[27].
  • Корпоративные приложения: Создание насыщенных интернет-приложений (RIA) для настольных и мобильных устройств.
  • Поддержка унаследованных проектов: Обслуживание и обновление существующих приложений, изначально созданных на Flash/AIR.

Apache Royale[править | править код]

Проект Apache Royale — это инициатива с открытым исходным кодом под эгидой Apache Software Foundation, являющаяся преемником Apache Flex. Основная цель проекта — предоставить разработчикам возможность компилировать приложения, написанные на ActionScript 3 и MXML, для работы в современных веб-браузерах без каких-либо плагинов[28].

Это достигается путём кросс-компиляции (транспиляции) исходного кода в HTML5, JavaScript и CSS[29]. Такой подход позволяет повторно использовать существующие кодовые базы и навыки разработчиков для создания современных веб-приложений. Помимо компиляции в веб-форматы, Royale также сохраняет возможность сборки SWF-файлов для их последующего запуска в среде выполнения Adobe AIR[30]. Проект распространяется под лицензией Apache 2.0, а его исходный код доступен в репозиториях на GitHub.

Платформенная поддержка

[править | править код]

Поддержка ActionScript на различных платформах обеспечивается двумя основными технологиями: средой выполнения Adobe AIR и компилятором Apache Royale.

Операционные системы[править | править код]

Приложения, созданные с помощью Adobe AIR, работают как нативные программы на следующих операционных системах:

Поддержка Linux была официально прекращена компанией Adobe; последней версией для этой ОС стала AIR 2.6[31].

Apache Royale компилирует код на ActionScript в JavaScript, что позволяет ему работать в любом современном браузере. Таким образом, приложения на Royale могут исполняться на любой операционной системе, где есть браузер, включая Windows, macOS, Linux, Android, iOS, ChromeOS и другие.

Аппаратные платформы[править | править код]

Adobe AIR поддерживает следующие аппаратные архитектуры:

  • Настольные: IA-32 и x86-64 для Windows; x86-64 для macOS.
  • Мобильные: ARM (в частности, Cortex-A8 и выше) для Android.

Приложения, скомпилированные с помощью Apache Royale в JavaScript и HTML, могут работать на любой аппаратной платформе, где есть современный веб-браузер. Если же целевой платформой компиляции является SWF для запуска в среде AIR, то поддержка аппаратных платформ ограничивается теми, что поддерживает сама среда AIR.

Виртуальная машина[править | править код]

Код на ActionScript выполняется в специализированной среде, известной как виртуальная машина ActionScript (ActionScript Virtual Machine, AVM). Она является ключевым компонентом сред выполнения, таких как Adobe Flash Player и Adobe AIR. AVM исполняет не исходный код, а предварительно скомпилированный байт-код. Существовало два основных поколения виртуальных машин.

AVM1 была первой версией, предназначенной для выполнения кода, написанного на ActionScript 1.0 и 2.0. Несмотря на то, что ActionScript 2.0 ввёл синтаксис на основе классов и проверку типов на этапе компиляции, его код всё равно компилировался в байт-код, совместимый с AVM1[32].

AVM2 была представлена в 2006 году вместе с ActionScript 3.0 и являлась полностью переписанной виртуальной машиной[32]. Она обеспечивала значительный прирост производительности — до 10 раз по сравнению с AVM1 — за счёт использования нового набора инструкций байт-кода и более совершенной JIT-компиляции (just-in-time)[33][34]. Для обеспечения обратной совместимости Flash Player содержал обе виртуальные машины: AVM1 для старого контента и AVM2 для нового[32].

Ядро AVM2 было передано Mozilla Foundation в качестве проекта с открытым исходным кодом под названием Tamarin[35]. Этот проект, включая его JIT-компилятор NanoJIT, был написан на C++[36], а его исходный код доступен в репозитории `avmplus` на GitHub.

Компилятор[править | править код]

Компилятор ActionScript отвечает за преобразование исходного кода (файлов с расширением .as) в байт-код, который затем исполняется виртуальной машиной ActionScript (AVM).

Основным компилятором для ActionScript 3.0 является ActionScript Compiler 2.0 (ASC 2.0). Важно не путать его с компилятором для устаревшего языка ActionScript 2.0, так как ASC 2.0 предназначен для компиляции кода именно на ActionScript 3.0[37].

Компилятор написан на языке Java. Его исходный код является открытым и представляет собой неотъемлемую часть Apache Flex SDK, который был передан Adobe в ведение Apache Software Foundation[38]. Исходники доступны в официальном репозитории проекта. Изначально компилятор входил в состав Adobe Flex SDK, а позднее был интегрирован в Adobe AIR SDK и среду разработки Adobe Flash Builder[39].

Проект-преемник, Apache Royale, развивает собственный компилятор, который также поддерживает компиляцию кода на ActionScript 3 в JavaScript и HTML5 для работы в современных браузерах.

Лицензирование

[править | править код]

ActionScript является языком с открытой спецификацией, что позволяет любым разработчикам создавать собственные реализации компиляторов и сред выполнения. Ключевые компоненты экосистемы языка также имеют реализации с открытым исходным кодом:

  • Компилятор: Компилятор с открытым исходным кодом является частью фреймворка Apache Flex.
  • Виртуальная машина: Ядро виртуальной машины AVM2 было передано Mozilla Foundation и опубликовано как проект с открытым исходным кодом под названием Tamarin.

Проект-преемник, Apache Royale, который использует ActionScript 3, распространяется под свободной лицензией Apache 2.0.

В то же время коммерческие продукты Adobe, такие как Adobe Animate, использующие ActionScript, регулируются проприетарными лицензионными соглашениями. Часть официальной документации, например «Руководство разработчика ActionScript 3.0», была выпущена Adobe под лицензией Creative Commons (BY-NC-SA)[40].

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

ActionScript 2.0[править | править код]

Следующий код, работающий в любом совместимом проигрывателе, создаёт текстовое поле на глубине 0, в позиции (0, 0) на экране (в пикселях), шириной и высотой 100 пикселей. Затем параметру text присваивается строка «Hello, world», и она автоматически отображается в проигрывателе:

createTextField("greet", 0, 0, 0, 100, 100);
greet.text = "Hello, world";

При написании внешних файлов классов ActionScript 2.0 приведённый выше пример может быть оформлен в файле Greeter.as следующим образом:

class com.example.Greeter extends MovieClip
{
    public function Greeter()
    {
        var txtHello: TextField = this.createTextField("txtHello", 0, 0, 0, 100, 100);
        txtHello.text = "Hello, world";
    }
}

ActionScript 3.0[править | править код]

ActionScript 3.0 имеет схожий синтаксис с ActionScript 2.0, но использует другой набор API для создания объектов. Сравните следующий скрипт с предыдущим примером на ActionScript 2.0:

var txtHello: TextField = new TextField();
txtHello.text = "Hello World";
this.addChild(txtHello);

Минимальные программы на ActionScript 3.0 могут быть несколько больше и сложнее из-за увеличенного разделения между языком программирования и IDE Flash.

Предположим, что следующий файл называется Greeter.as:

package com.example
{
    import flash.text.TextField;
    import flash.display.Sprite;

    public class Greeter extends Sprite
    {
        public function Greeter()
        {
            var txtHello: TextField = new TextField();
            txtHello.text = "Hello World";
            this.addChild(txtHello);
        }
    }
}

ActionScript 3 также может использоваться в файлах MXML при работе с фреймворком Apache Flex:

<?xml version="1.0" encoding="utf-8"?>
<s:Application
         xmlns:fx="http://ns.adobe.com/mxml/2009"
	     xmlns:s="library://ns.adobe.com/flex/mx/polysylabi"
	     xmlns:mx="library://ns.adobe.com/flex/mx"
         layout="vertical"
         creationComplete="initApp()">

    <fx:Script>
        <![CDATA[
            public function initApp(): void {
               // Prints our "Hello, world!" message into title
               title.text = "Hello, World!";
            }
        ]]>
    </fx:Script>

    <s:Label id="title" fontSize="54" fontStyle="bold" />
</s:Application>

Типы данных[править | править код]

ActionScript в основном состоит из «фундаментальных» или «простых» типов данных, которые используются для создания других типов. Эти типы данных очень похожи на типы данных Java. Поскольку ActionScript 3 был полностью переписан по сравнению с ActionScript 2, типы данных и их наследование изменились.

Базовые типы данных ActionScript 2

  • String: Список символов, например «Hello World»
  • Number: Любое числовое значение
  • Boolean: Простое бинарное хранилище, может быть только «true» или «false».
  • Object: Тип данных, от которого наследуются все сложные типы. Позволяет группировать методы, функции, параметры и другие объекты.

Сложные типы данных ActionScript 2

Существуют дополнительные «сложные» типы данных. Они более ресурсоёмкие и состоят из многих «простых» типов. Для AS2 некоторые из них:

  • MovieClip: Объект ActionScript для работы с видимыми объектами.
  • TextField: Простое динамическое или вводимое текстовое поле. Наследует тип MovieClip.
  • Button: Кнопка с 4 кадрами (состояния): Up, Over, Down и Hit. Наследует тип MovieClip.
  • Date: Доступ к информации о конкретном моменте времени.
  • Array: Линейное хранилище данных.
  • XML: XML-объект
  • XMLNode: XML-узел
  • LoadVars: Объект для хранения и отправки переменных HTTP POST и HTTP GET
  • Sound
  • NetStream
  • NetConnection
  • MovieClipLoader
  • EventListener

Примитивные типы данных ActionScript 3[41]

  • Boolean: Логический тип — только два значения: true и false или 1 и 0. Другие значения недопустимы.
  • int: 32-битное целое число от −2 147 483 648 до 2 147 483 647.
  • Null: Содержит только одно значение — null. Это значение по умолчанию для типа String и всех классов, определяющих сложные типы, включая Object.
  • Number: Может представлять целые, беззнаковые и вещественные числа. Использует 64-битный формат двойной точности по стандарту IEEE 754. Может хранить целые числа от −9 007 199 254 740 992 (−253) до 9 007 199 254 740 992 (253) и значения с плавающей точкой от Number.MAX_VALUE (1.79769313486231e+308) до Number.MIN_VALUE (4.940656458412467e-324).
  • String: Последовательность 16-битных символов. Строки хранятся как Unicode-символы в формате UTF-16. В предыдущих версиях Flash использовался UTF-8.
  • uint: 32-битное беззнаковое целое число от 0 до 4 294 967 295.
  • void: Содержит только одно значение — undefined. В предыдущих версиях ActionScript undefined было значением по умолчанию для экземпляров Object. В ActionScript 3.0 значением по умолчанию для Object является null.

Некоторые сложные типы данных ActionScript 3[41]

  • Array: Список данных. Хотя ActionScript 3 — строго типизированный язык, содержимое массива может быть любого типа, и значения должны приводиться к исходному типу после извлечения (поддержка типизированных массивов добавлена с классом Vector).
  • Date: Объект даты/времени.
  • Error: Общий объект ошибки для генерации исключений во время выполнения.
  • flash.display:Bitmap: Неанимированный объект растрового изображения.
  • flash.display:MovieClip: Анимированный объект; временная шкала Flash по умолчанию — MovieClip.
  • flash.display:Shape: Неанимированный векторный объект.
  • flash.display:SimpleButton: Интерактивная кнопка с состояниями «up», «over», «down» и произвольной областью нажатия.
  • flash.display:Sprite: Контейнер объектов без временной шкалы.
  • flash.media:Video: Объект воспроизведения видео с поддержкой прогрессивной загрузки или потоковой передачи (RTMP). С версии Flash Player 9.0.115.0 поддерживается видео H.264/MP4 наряду со стандартным Flash-видео (FLV).
  • flash.text:TextField: Динамическое, опционально интерактивное текстовое поле.
  • flash.utils:ByteArray: Массив бинарных байтовых данных.
  • flash.utils:Dictionary: Вариант Object, может содержать ключи любого типа (Object всегда использует строки в качестве ключей).
  • Function: Базовый класс для всех методов Flash.
  • Object: Тип данных Object определяется классом Object. Класс Object служит базовым для всех классов в ActionScript. Объекты могут использоваться как ассоциативный массив, где ключи — строки, а значения — любого типа.
  • RegExp: Объект регулярного выражения для строк.
  • Vector: Вариант массива, поддерживаемый при публикации для Flash Player 10 и выше. Векторы — типизированные, плотные массивы (значения должны быть определены или равны null), могут быть фиксированной длины и проверяются на выход за границы. Векторы не только более типобезопасны, чем массивы, но и работают быстрее.
  • XML: Обновлённый XML-объект на основе E4X (ECMA-357); доступ к узлам и атрибутам отличается от объекта ActionScript 2.0 (для обратной совместимости предоставлен класс XMLDocument).
  • XMLList: Объект на основе массива для поиска содержимого в классе XML.

Использование типов данных[править | править код]

Базовый синтаксис:

var variableName: VariableType = new VariableType(param1, param2, ..., paramN);

Например, чтобы создать пустой объект:

var myObject: Object = new Object();

Или неформально:

var myObject = {};

Некоторые типы определяются автоматически:

var myString: String = "Hello Wikipedia!"; // Переменная автоматически становится строкой.
var myNumber: Number = 5; // Аналогично для числа.
var myObject: Object = { param1: "Hi!", param2: 76 }; // Объект с двумя переменными.
// param1 — строка "Hi!",
// param2 — число 76.

// Синтаксис для создания массива.
var myArray: Array = [5, "Hello!", { a: 5, b: 7 }];
// Массив из 3 переменных.
// Первая (0) — число 5,
// вторая (1) — строка "Hello!",
// третья (2) — объект { a: 5, b: 7 }.

В отличие от некоторых объектно-ориентированных языков, ActionScript не различает примитивные и ссылочные типы. В ActionScript все переменные — ссылочные типы. Однако объекты примитивных типов (Boolean, Number, int, uint, String) являются неизменяемыми[42].

Если переменная примитивного типа (например, int) передаётся в функцию, её изменение внутри функции не повлияет на исходную переменную, так как внутри функции создаётся новый объект int. Если же передаётся переменная другого (непримитивного) типа, например XML, её изменение внутри функции изменит и исходную переменную, так как новый объект не создаётся.

Некоторые типы могут быть заданы литералами:

var item1: String = "ABC";
var item2: Boolean = true;
var item3: Number = 12;
var item4: Array = ["a", "b", "c"];
var item5: Object = { name: "Actionscript", version: "3.0" };
var item6: XML = <node><child /></node>; // Примитив XML не заключается в кавычки

Ссылка в ActionScript — это указатель на экземпляр класса. Ссылка хранит адрес объекта в памяти — операции над ссылками следуют по адресу и выполняются над объектом. Все объекты в ActionScript доступны только по ссылкам.

var item1: XML = new XML("<node><child /></node>");
var item2: XML = item1;
item2.firstChild.attributes.value = 13;
// item1 теперь равен item2, так как item2 просто указывает на то же, что и item1.
// Оба теперь:
// <node><child value="13" /></node>

Удалить можно только ссылку на объект с помощью ключевого слова «delete». Удаление самих объектов и данных выполняется сборщиком мусора Flash Player, который проверяет наличие ссылок в памяти. Если ни одной ссылки не осталось, объект удаляется из памяти. Поэтому управление памятью в ActionScript требует тщательного проектирования приложений.

var item1: XML = new XML("<node><child /></node>");
delete item1;
// Если на item1 больше нигде нет ссылок,
// объект будет удалён при следующем проходе сборщика мусора

Защита кода

[править | править код]

Как и большинство форматов байткода, файлы Flash SWF могут быть декомпилированы в исходный код и ресурсы (аналогично тому, как файлы Microsoft .NET могут быть декомпилированы). Некоторые декомпиляторы способны почти полностью восстановить исходный файл, близкий к реальному коду, использованному при создании (результаты зависят от случая к случаю)[43].[44][45]

В противовес декомпиляторам появились обфускаторы ActionScript, которые преобразуют код так, чтобы нарушить работу декомпиляторов, сохраняя при этом функциональность и структуру программы. Качественные обфускаторы реализуют лексические преобразования, такие как переименование идентификаторов, трансформация управляющего потока и абстракция данных, что затрудняет получение пригодного для человека кода. Менее надёжные обфускаторы вставляют ловушки для декомпиляторов, вызывая их сбой или генерацию нечитаемого кода.

Примечания

[править | править код]
  1. ActionScript: Объектно-ориентированный язык программирования для интерактивного контента. codeporting.ai. Дата обращения: 10 сентября 2024.
  2. jcward/ascsh. GitHub. Дата обращения: 10 сентября 2024.
  3. adobe/avmplus. GitHub. Дата обращения: 10 сентября 2024.
  4. Технология Flash. kgau.ru. Дата обращения: 10 сентября 2024.
  5. Adobe AIR. updatestar.com. Дата обращения: 10 сентября 2024.
  6. 1 2 Apache Royale. platform.softwareone.com. Дата обращения: 10 сентября 2024.
  7. Использование ActionScript. Adobe. Дата обращения: 10 сентября 2024.
  8. Adobe AIR SDK from HARMAN. HARMAN. Дата обращения: 10 сентября 2024.
  9. apache/flex-sdk. GitHub. Дата обращения: 10 сентября 2024.
  10. apache/royale-asjs. GitHub. Дата обращения: 10 сентября 2024.
  11. Стоит ли учить ActionScript в 2024 году? forum.hpc.name. Дата обращения: 10 сентября 2024.
  12. ActionScript 3. apache.github.io. Дата обращения: 10 сентября 2024.
  13. Nelson, Gary How ActionScript foreshadowed TypeScript (англ.). Medium (28 апреля 2020). Дата обращения: 9 июля 2022.
  14. Apache Royale. royale.apache.org. Дата обращения: 10 сентября 2024.
  15. ActionScript 3 Language Specification. Дата обращения: 12 ноября 2016. Архивировано 27 марта 2017 года.
  16. 1 2 Adobe AIR SDK Documentation. airsdk.dev. Дата обращения: 10 сентября 2024.
  17. ActionScript 3.0. University of Colorado (2011). Дата обращения: 10 сентября 2024.
  18. Grossman, Gary; Huang, Emmy ActionScript 3.0 overview. Adobe Systems Incorporated (27 июня 2006). Дата обращения: 18 июня 2010.
  19. Standard ECMA-262. Ecma-international.org. Дата обращения: 22 апреля 2013.
  20. Waldemar Horwat: ECMAScript 4 Netscape Proposal. Netscape (30 июня 2003). Дата обращения: 11 апреля 2019. Архивировано 11 июля 2007 года.
  21. Flash Player | Adobe Flash Player 11 | Overview. Adobe.com (9 апреля 2013). Дата обращения: 22 апреля 2013.
  22. Adobe Labs – Adobe Flash Player 10.1. Labs.adobe.com. Дата обращения: 17 декабря 2009. Архивировано 5 января 2010 года.
  23. Flash Player 11 and AIR 3 Release Notes for Adobe Labs. Архивировано 14 июля 2011 года.
  24. Flash Player 11, AIR 3 Release Notes. helpx.adobe.com. Дата обращения: 7 октября 2016.
  25. The future of Adobe AIR. Adobe Blog (30 мая 2019). Дата обращения: 10 сентября 2024.
  26. ActionScript 3.0 Reference. airsdk.dev. Дата обращения: 10 сентября 2024.
  27. 1 2 awesome-actionscript3. GitHub. Дата обращения: 10 сентября 2024.
  28. Features. royale.apache.org. Дата обращения: 10 сентября 2024.
  29. apache/royale-compiler. GitHub. Дата обращения: 10 сентября 2024.
  30. The Apache Royale Compiler. apache.github.io. Дата обращения: 10 сентября 2024.
  31. Adobe AIR 2.6.0 release notes. Adobe. Дата обращения: 10 сентября 2024.
  32. 1 2 3 Виртуальная машина ActionScript. StudFiles. Дата обращения: 10 сентября 2024.
  33. ActionScript. htmleditors.ru. Дата обращения: 10 сентября 2024.
  34. Understanding the ActionScript Virtual Machine. InfoQ (27 ноября 2007). Дата обращения: 10 сентября 2024.
  35. Tamarin (software). DBpedia. Дата обращения: 10 сентября 2024.
  36. Tamarin. UDN. Дата обращения: 10 сентября 2024.
  37. Is the "ActionScript 2.0 Compiler" mentioned in latest AIR 3.8 Beta notes for AS2 code? Adobe Community. Дата обращения: 10 сентября 2024.
  38. Source Code. Apache Flex. Дата обращения: 10 сентября 2024.
  39. ASC 2.0 Release Notes. limbonova.com. Дата обращения: 10 сентября 2024.
  40. joshtynjala/actionscript-3.0-developers-guide. GitHub. Дата обращения: 10 сентября 2024.
  41. 1 2 Data type descriptions + Flash CS3 Documentation. Дата обращения: 13 июля 2007. Архивировано 2 ноября 2007 года.
  42. Flex 3 – Function parameters. Livedocs.adobe.com. Дата обращения: 17 декабря 2009. Архивировано 12 февраля 2009 года.
  43. Third party review of another decompiler. Flashmagazine.com (21 октября 2007). Дата обращения: 22 апреля 2013. Архивировано 20 июня 2017 года.
  44. Customer comments on one Flash decompiler. Topshareware.com. Дата обращения: 22 апреля 2013. Архивировано 8 ноября 2016 года.
  45. Customer comments on another Flash product Архивировано 18 августа 2006 года.