stringtranslate.com

ActionScript

ActionScriptобъектно-ориентированный язык программирования, изначально разработанный Macromedia Inc. (позже приобретённый Adobe ). На него повлиял HyperTalk , язык сценариев для HyperCard . [3] Сейчас он является реализацией ECMAScript (то есть представляет собой надмножество синтаксиса и семантики языка, более известного как JavaScript ), хотя изначально он возник как родственный язык, и оба находились под влиянием HyperTalk . Код ActionScript обычно преобразуется в формат байт-кода компилятором .

ActionScript в основном используется для разработки веб-сайтов и программного обеспечения, ориентированного на платформу Adobe Flash , первоначально находя применение на веб-страницах в виде встроенных SWF- файлов.

ActionScript 3 также используется с системой Adobe AIR для разработки настольных и мобильных приложений. Сам язык является языком с открытым исходным кодом, поскольку его спецификация предлагается бесплатно [4] , и доступны как компилятор с открытым исходным кодом (как часть 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 alpha (в 2006 году) была выпущена более новая версия ActionScript, ActionScript 3.0. Эта версия языка предназначена для компиляции и запуска на версии виртуальной машины Tamarin , ранее ActionScript Virtual Machine 2, которая также была полностью переписана (получила название AVM2). [5] Из-за этого код, написанный на ActionScript 3.0, как правило, предназначен для Flash Player 9 и выше и не будет работать в предыдущих версиях. В то же время ActionScript 3.0 выполняется до 10 раз быстрее, чем устаревший код ActionScript, благодаря улучшениям компилятора just-in-time . [6]

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

История

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

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

Хронология по версии плеера

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

2000–2004: ActionScript «1.0».

С выпуском Flash 5 в сентябре 2000 года «действия» из Flash 4 были снова улучшены и впервые названы «ActionScript». [12] Это была первая версия ActionScript с влиянием JavaScript и стандарта ECMA-262 (третье издание), поддерживающая объектную модель указанного стандарта и многие из его основных типов данных . Локальные переменные могут быть объявлены с помощью оператора var , а также могут быть созданы пользовательские функции с передачей параметров и возвращаемыми значениями. Примечательно, что ActionScript теперь также можно было набирать с помощью текстового редактора, а не собирать, выбирая действия из раскрывающихся списков и элементов управления диалоговых окон. Со следующим выпуском его инструмента разработки Flash MX и соответствующего ему проигрывателя Flash Player 6 язык остался по сути неизменным; были только незначительные изменения, такие как добавление оператора switch и оператора «строгого равенства» ( === ), что приблизило его к соответствию 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 разработчики могли ограничивать переменные определенным типом, добавляя аннотацию типа, чтобы ошибки несоответствия типов можно было обнаружить во время компиляции . 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 ).

Обновление языка добавило несколько новых функций:

Флэш Лайт

ВОЗДУХ

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

Синтаксис

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

ActionScript 2.0

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

createTextField ( "приветствие" , 0 , 0 , 0 , 100 , 100 ) ; приветствие.текст = " Привет, мир" ;       

При написании внешних файлов классов 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 = " Привет , мир " ; } }                     

ActionScript 3.0

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

var txtHello : TextField = new TextField (); txtHello . text = "Привет, мир" ; this . addChild ( txtHello );       

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

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

пакет 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" ; addParent ( txtHello ); } } }                    

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

<?xml версия="1.0" кодировка="utf-8"?> <s:Приложение 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 { // Выводит наше сообщение "Hello, world!" в заголовок title . text = " Hello, World!" ; } ]]> </fx:Script>            <s:Label id= "title" fontSize= "54" fontStyle= "bold" /> </s:Application>    

Структуры данных

Типы данных

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

Типы данных верхнего уровня ActionScript 2

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

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

Примитивные (простые) типы данных ActionScript 3 [13]

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

Использование типов данных

Основной синтаксис:

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, являются неизменяемыми. [14]

Так что если переменная предположительно примитивного типа, например, целое число, передается в функцию, изменение этой переменной внутри функции не изменит исходную переменную, так как внутри функции создается новый объект int. Если переменная другого (не примитивного) типа данных, например, XML, передается в функцию, изменение этой переменной внутри функции также изменит исходную переменную, так как новый объект 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 ). Некоторые декомпиляторы способны практически полностью реконструировать исходный файл, вплоть до фактического кода, который использовался во время создания (хотя результаты различаются в зависимости от конкретного случая). [15] [16] [17]

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

Ссылки

  1. ^ Нельсон, Гэри (28 апреля 2020 г.). «Как ActionScript предвосхитил TypeScript». Medium . Получено 9 июля 2022 г. .
  2. ^ RFC  4329 (ограничение, совместимое с EcmaScript)
  3. ^ "Потерянное десятилетие Apple, HyperCard и то, чего НЕ могло бы быть, если бы Apple тогда была такой, какой она является сегодня". ZDNet . 17 апреля 2011 г. Архивировано из оригинала 21 апреля 2011 г. Получено 4 декабря 2014 г.
  4. ^ "Спецификация языка ActionScript 3". Архивировано из оригинала 27 марта 2017 г. Получено 12 ноября 2016 г.
  5. ^ Бримелоу, Ли (18 августа 2008 г.). "Шесть причин использовать ActionScript 3.0". Adobe Systems Incorporated . Получено 18 июня 2010 г.
  6. ^ Гроссман, Гэри; Хуан, Эмми (27 июня 2006 г.). "Обзор ActionScript 3.0". Adobe Systems Incorporated . Получено 18 июня 2010 г.
  7. ^ "Стандарт ECMA-262". Ecma-international.org . Получено 22 апреля 2013 г. .
  8. ^ Waldemar Horwat, ed. (30 июня 2003 г.). "ECMAScript 4 Netscape Proposal". Netscape . Архивировано из оригинала 11 июля 2007 г. . Получено 11 апреля 2019 г. .
  9. ^ "Flash Player | Adobe Flash Player 11 | Обзор". Adobe.com. 9 апреля 2013 г. Получено 22 апреля 2013 г.
  10. ^ "Adobe Labs – Adobe Flash Player 10.1". Labs.adobe.com. Архивировано из оригинала 5 января 2010 г. Получено 17 декабря 2009 г.
  11. ^ "Заметки о выпуске Flash Player 11 и AIR 3 для Adobe Labs" (PDF) . Архивировано из оригинала (PDF) 14 июля 2011 г.
  12. ^ "Flash Player 11, AIR 3 Release Notes". helpx.adobe.com . Получено 7 октября 2016 г. .
  13. ^ ab "Описания типов данных + Документация Flash CS3". Архивировано из оригинала 2 ноября 2007 г. Получено 13 июля 2007 г.
  14. ^ "Flex 3 – Параметры функции". Livedocs.adobe.com. Архивировано из оригинала 12 февраля 2009 г. Получено 17 декабря 2009 г.
  15. ^ "Обзор другого декомпилятора третьей стороной". Flashmagazine.com. 21 октября 2007 г. Архивировано из оригинала 20 июня 2017 г. Получено 22 апреля 2013 г.
  16. ^ "Комментарии клиентов об одном декомпиляторе Flash". Topshareware.com . Получено 22 апреля 2013 г. .
  17. Отзывы клиентов о другом продукте Flash Архивировано 18 августа 2006 г. на Wayback Machine

Внешние ссылки