С любезного разрешения Николя Каннассе (Nicolas Cannasse) перевел главную страницу сайта MTASC.org. В результате получился своеобразный MTASC FAQ. Странно, что до сих пор никто этого не сделал. По-моему, время сэкономленное в результате использования самого быстрого в мире компилятора .as файлов гораздо больше чем время, потраченное на перевод этой статьи. Но так или иначе теперь для многих статьи Constantiner-а, в которых он пишет про компиляцию с использованием MTASC-а, станут более понятными.
Содержание:
- Знакомство
- Установка
- Использование
- Примеры
- Загрузка
- Контакты
- Использование компонентов (пакет MX)
- MTASC и ActionScript 3
- Сравнение MTASC и Macromedia Flash Compiler
- Логотип MTASC для вашего сайта
Знакомство

MTASC — это первый бесплатный ActionScript компилятор с открытыми исходными кодами.
Он может компилировать большое число .as файлов классов за очень короткое время и немедленно сгенерировать соответствующий байткод в SWF файл без необходимости в наличии Macromedia Flash и других приложений.
Вы можете загрузить его прямо сейчас, но прежде прочтите сравнение между MTASC и Macromedia Compiler (MMC), который поставляется вместе с Flash. Если это ваш первый опыт использования MTASC, прочтите инструкцию по установке и использованию MTASC. Пожалуйста, посетите также сайт сообщества OSFlash.
Добавьте логотип MTASC на ваш сайт!
Установка
Ниже приведена инструкция по установке MTASC для его использования из-под командной строки на операционных системах семейства Windows.
Для начала, загрузите соответствующую для вашей системы сборку MTASC и инсталлируйте/распакуйте все, что входит в ее состав, на ваш компьютер. Затем добавьте путь до исполняемого файла в переменную среды PATH (смотрите http://www.chem.gla.ac.uk/~louis/software/faq/q1.html, если вы не знаете как это делается). Например, если вы проинсталлировали компилятор в папку c:\program files\mtasc, то в качестве переменной среды вы должны будете добавить c:\progra~1\mtasc. Теперь все готово к использованию. Вы можете создать файл compile.bat, содержащий следующий текст:
-
mtasc.exe ВашФайл.as -swf ВашПроект.swf
-
pause
Поместите файл compile.bat совместно с файлами вашего проекта и запустите его, когда вам нужно будет скомпилировать проект.
Использование
MTASC — компилятор, работающий из-под командной строки. Он может легко интегрироваться с вашим любимым редактором .as файлов для их компилирования с его помощью. В основном, использование компилятора заключается в вызове следующей команды: mtasc "путь_до_ваших_.as_файлов_классов" -swf "путь_до_swf_файла_вашего_проекта". Помните, что если вы имеете два класса, например, Point и Line, причем класс Point используется в коде класса Line, то вам нет необходимости указывать компилятору, чтобы он скомпилировал класс Point. MTASC сделает это автоматически, как только в коде класса Line обнаружит ссылку на класс Point. Поэтому, если вы хотите включить в приложение минимальное количество классов, необходимых для запуска приложения, то вы можете просто скомпилировать, используя класс Main.as, где Main.as — главный класс вашего проекта, содержащий точку входа в приложение.
Теперь, когда вы знаете, как обращаться с MTASC, давайте посмотрим как он работает. MTASC находит соответствующий SWF файл когда обнаруживает параметр -swf, компилирует все необходимые .as файлы и обновляет SWF файл путем замещения всех классов, которые до этого в нем содержались, на новые скомпилированные классы.
Очень просто начать использовать MTASC вместо MMC. Откройте свой проект и опубликуйте его так, как вы обычно это делаете с помощью Macromedia Flash (предположим, что скомпилированный файл называется project.swf). Теперь запустите MTASC, используя путь до опубликованного SWF файла в качестве аргумента: mtasc (ваши .as файлы) -swf project.swf. Все классы будут скомпилированы и обновлены в SWF файле. Помните, что MTASC добавляет скомпилированные классы в SWF файл путем замещения всех классов, до этого скомпилированных во Flash.
Если во время компиляции у вас возникают ошибки, такие как «Класс не найден» (class not found), «Файл не найден» (file not found), «Ошибка в имени класса» (class name mistake), то вам следует использовать параметр -cp для того, чтобы добавить путь к пакету классов (другими словами, директорию, в которой следует искать .as файлы). Например, если ваши классы находятся в папке /code, то не нужно вызывать команду mtasc code/Hello.as, потому что это приведет к поиску класса code.Hello (вместе с названием пакета), а нужно вызвать mtasc -cp code Hello.as.
Ниже приведены остальные параметры использования MTASC:
-swf файл— задает файл SWF, в который будут помещены скомпилированные файлы классов;-cp путь— добавляет директорию в ClassPath проекта. В этом параметре задаются директории, в которых MTASC будет искать.asфайлы с классами. Вы можете несколько раз использовать этот параметр, для добавления нескольких директорий;-main— производит автоматический вызов методаmain, для основного класса ролика. Внимание: методmainдолжен принимать один параметрcontainer:MovieClip, в качестве которого MTASC передаст ссылку на основную временную диаграмму_rootролика. Чтобы понять почему это важно, прочитайте эту статью;-header width:height:fps:bgcolor— вместо использования готового SWF файла, заставляет MTASC скомпилировать новый файл, содержащий только код, и использовать для этого предопределенные параметры публикации. Параметрbgcolor- необязательный. В качестве него вы должны подставить шестнадцатеричное число (например, FF0000);- -mx — использовать заранее скомпилированные MX классы (смотрите ниже секцию о компонентах V2).
А вот другие аргументы, предназначенные для опытных пользователей:
-version номер_версии— определяет версию SWF файла. Обозначьте версию 6, для создания SWF, совместимого с 6r89 сборкой проигрывателя. Или версию 8, для того, чтобы использовать возможности 8 версии плеера;-v— активирует подробный режим, в котором выводится дополнительная информация о процессе компиляции;-out путь_к_файлу— изменяет адрес конечного SWF файла;-msvc— использование стиля форматирования ошибок как в Microsoft Visual Studio, а не стиля Java (для имен файлов и номеров линий);-strict— будет использован строгий режим компиляции, требующий, чтобы все переменные были типизированы;-exclude файл— исключает генерацию кода для классов, перечисленных в специальном файле (каждый из путей к исключаемым классам, должен располагаться на новой строке этого файла);-trace функция— определяет пользовательскую функцию трассировки (см. секцию «Средства трассировки») илиnoдля деактивации всех действий трассировки;-keep— сохраняет все AS2 классы, скомпилированные Macromedia компиллером в SWF файле (это также действует на классы, которые до этого были скомпилированы при помощи MTASC);-frame номер_кадра— позволяет экспортировать AS2 классы в определенный кадр ролика;-pack путь_до_пакета— компилирует все классы, содержащиеся в указанном пакете без рекурсии (так, для компиляции файлов из папкиc:\flash\code\my\appпакетаmy.app, необходимо вызвать командуmtasc -cp c:\flash\code -pack my/app);-group— объединяет классы в один единственный клип (это приводит к уменьшению размера SWF, но может привести к возникновению проблем, при использовании параметров-keepи-mx);-wimp— добавляет предупреждения для инструкций импорта, которые не используются в файле класса;-infer— добавляет предугадывание типа при инициализации локальных переменных (см. ниже).
Примеры
Теперь вы знаете, как использовать MTASC с помощью командной строки. В следующих простых примерах мы рассмотрим, как с ним работать. В первом примере не используется заранее подготовленный файл SWF с содержимым, поэтому создается новый файл, содержащий только код класса Tuto.as, выводящего в текстовом поле некоторый текст:
-
class Tuto {
-
-
static var app : Tuto;
-
-
function Tuto(container:MovieClip) {
-
// Создаем текстовое поле 'tf' с размерами 800x600
-
// и координатами 0,0.
-
container.createTextField("tf",0,0,0,800,600);
-
// Выводим текст в текстовом поле.
-
container.tf.text = "Hello world !";
-
}
-
-
/**
-
* Точка входа в приложение.
-
*
-
* @param container Ссылка на основную временную диаграмму ролика _root.
-
*/
-
static function main(container:MovieClip):Void {
-
app = new Tuto(container);
-
}
-
}
Если вы захотите запустить это приложение, то это можно сделать вызовом следующей команды:
-
mtasc -swf tuto.swf -main -header 800:600:20 Tuto.as
Первый параметр -swf tuto.swf задает имя конечного файла. Третий параметр -header 800:600:20 заставляет MTASC скомпилировать новый SWF с размерами сцены 800x600 пикселов и частотой смены кадров 20 FPS. Второй параметр -main говорит, что необходимо вызвать метод main у всех инициализируемых классов. Последний параметр — компилируемый файл класса. Если вам необходимо скомпилировать несколько файлов, то вы просто можете перечислить их поочередно в командной строке без каких-либо проблем. Однако, не включайте таким способом пути к большому количеству файлов, компилируемых с помощью MTASC, используйте для этого параметр -cp (см. ниже).
Если для вашего кода необходимо использование библиотеки классов, которая локально расположена где-нибудь на вашем компьютере, то вам нужно использовать параметр -cp, чтобы MTASC смог найти нужные файлы классов. Например, если вы используете класс mx.controls.Button, расположенный на вашем жестком диске в папке C:\Program Files\Macromedia\Flash MX 2004\en\First Run\Classes\mx\controls, вам нужно вызвать следующую команду:
-
mtasc -cp "C:\Program Files\Macromedia\Flash MX 2004\en\First Run\Classes"
Не забывайте пути к классам, содержащие пробелы, указывать в кавычках и не забывайте удалять пути к файлам, если необходимости в их компиляции уже нет. Если вам нужно скомпилировать класс app.File.as, расположенный на жестком диске по адресу C:\My Project\app\File.as, запустите следующую команду:
-
mtasc -cp "C:\My Project" app\File.as
Если вам необходимо скомпилировать все файлы из пакета app, то используйте параметр -pack app и, если необходимо, параметр -cp для компиляции других классов.
Загрузка
Последние сборки компилятора для различных платформ и исходные файлы доступны для скачивания с соответствующего раздела официального сайта MTASC.
Другие инструменты:
- Графический интерфейс, созданный человеком по имени Daniel Aguilar (не возьмусь переводить фамилию) доступен по адресу http://www.protozoo.com;
- Другой GUI для MacOSX: http://www.telefonica.net/web2/xmtasc.
Контакты
Если у вас возникают проблемы при использовании MTASC, или у вас есть вопросы, или предложения по добавлению новых возможностей в MTASC, то вы можете подписаться на мэйл лист. Здесь же вы можете поискать в архиве сообщений ответ на вопрос, аналогичный вашему. Если вы не хотите использовать лист рассылки, или если вы хотите получить информацию или персональную поддержку, вы можете связаться с создателями MTASC, воспользовавшись следующим адресом электронной почты: ncannasse@motion-twin.com.
Если вы ищете ресурс о других бесплатных Flash приложениях, то посетите сайт OSFlash.org, там содержится огромное количество информации на эту тему. В частности, именно на нем в настоящий момент расположен MTASC FAQ, в качестве одного из разделов Wiki.
Использование компонентов (пакет MX)
MTASC позволяет использовать при компиляции компоненты Macromedia V2, но для этого рекомендуется добавлять дополнительный параметр: -mx. Ниже показан простой пример использования компонентов.
- Давайте напишем небольшое приложение, использующее Macromedia V2 компоненты, состоящее из одного файла класса
Test.as:Actionscript:-
class Test {
-
function Test() {
-
mx.controls.Alert.show("hello world","title");
-
}
-
}
-
- Откройте Flash IDE, создайте новый документ, назовите его «test.fla» и добавьте компонент Alert в библиотеку;
- Добавьте следующий код в первый кадр документа:
t = new Test();(это необходимо для того, чтобы ваше приложение заработало); - Опубликуйте файл как
test.swfи протестируйте. Должно появиться всплывающее окно; - С этого момента больше нет необходимости во Flash IDE (конечно, если вы не будете использовать другие компоненты). Закройте ее!
- Подправьте код приложения Test.as, так как посчитаете нужным (вдруг вы захотите что-нибудь изменить в нем);
- Для повторной компиляции с помощью MTASC используйте следующую команду:
CODE:
-
mtasc -cp "путь_до_папки_с_классами_компонентов" -mx -swf test.swf Test.as
Где путем до классов компонентов может быть "c:\program files\macromedia\flash mx 2004\en\First Run\Classes";
-
- Желаем быстрой компиляции!
MTASC и ActionScript 3
Последняя версия MTASC является наиболее стабильной. Так, при обновлении до нее версии 1.11, разработчики в основном фокусировались на исправлении мелких ошибок и общем улучшении работы компилятора. Некоторые люди спрашивают о будущем MTASC. Их интересует, будет ли следующая версия публиковать SWF под девятую версию плеера и поддерживать ActionScript 3.
MTASC не будет иметь поддержки ActionScript 3, так как сейчас ведутся работы над новым мощным языком, названным haXe, который будет поддерживать Flash Player 6-7-8 и 9, также как и JavaScript и серверные скриптовые языки.
Вы можете подробнее узнать об этом на сайте haXe.org.
Сравнение MTASC и Macromedia Flash Compiler
MTASC корректно обрабатывает некоторые известные проблемы, происходящие при использовании Macromedia Compiler (MMC). Он является более строгим компилятором, поэтому может определять большее количество ошибок, что помогает вам в написании более качественных программ. Вследствие этого, появляются некоторые различия между MMC и MTASC, поэтому при первых попытках компиляции с использованием MTASC у вас могут появиться ошибки.
Тем не менее, перед разработчиками компилятора стояли следующие задачи, которые пользователь сейчас может без проблем использовать:
- Переходить на компиляцию с использованием или MMC, или MTASC, что поможет исправить многие ошибки в вашем коде, легко и правильно его модифицировать. Это делает ваш код более надежным.
- Компилировать с помощью MMC. Разработчики не планируют перевести всех пользователей с MMC на MTASC . И не ставят перед собой задачу создать вокруг этого компилятора собственное сообщество. Как инструмент, MTASC не вносит никаких несовместимых нововведений в язык ActionScript. (Невольно вспоминается война за место под солнцем между браузерами Netscape и IE, приведшая к очень печальным последствиям. — Прим. пер.).
Скорость и баги
MMC ужасно медленный. Он целую вечность компилирует большие проекты, и с этим фактом невозможно не считаться, так как приходится все это время ждать и откладывать дальнейшее редактирование проекта. Кроме того, MMC иногда вынуждает вас перезагружать компьютер или несколько раз компилировать ваш проект, для получения пригодного результата (это связано с багом в использовании оперативной памяти, смотрите статью http://www.actionscript.com/archives/00000591.html для получения дополнительной информации об этой ошибке).
MTASC основан на лучшей из доступных технологий компилирования (а именно, на языке программирования OCaml), и поэтому у него гораздо выше скорость компилирования, чем у MMC (компилирует 100 классов менее чем за 5 секунд). С тех пор, как исходные коды были сделаны более компактными и для их написания использовались хорошие технологии, стало возможным легко поддерживать и расширять его функциональность, применяя испытанные алгоритмы. Обратная связь с разработчиками очень помогает Open Source сообществу в короткие сроки исправлять различные ошибки.
Вывод: Неужели этого еще мало?
Цена и общая стоимость владения
Смотрите предыдущий абзац о том, как MMC тратит попусту ваше время (считайте, что деньги). Если вы профессиональный ActionScript программист, то должны понимать, о чем здесь говорится.
MTASC бесплатен и, к тому же, имеет открытые исходные коды. Поэтому вы можете бесплатно его использовать, изменять исходные коды так как посчитаете необходимым и при выходе новых версий компилятора бесплатно получать исправления ошибок в его работе.
Вывод: Разработчики верят, что опенсорсное движение спасет мир и в первую очередь программистов вашей компании.
Отслеживание областей определения локальных переменных
В MMC (да и вообще в Flash Virtual Machine) не блокируется двойное определение переменной внутри функций. Это хорошо иллюстрирует следующий код:
-
function f() {
-
var x = 1;
-
if( true ) {
-
var x = "hello";
-
// ...
-
}
-
trace(x+1);
-
}
Будет выведено "hello1", а не число 2. Следующий код тоже работает, несмотря на то, что он не будет компилироваться во многих традиционных языках программирования:
-
function f() {
-
if( true )
-
var x = 1;
-
return x + 1; // что будет, если в инструкцию if
-
// в качестве параметра поступит false?
-
}
MTASC препятствует возникновению подобных ошибок. Вы не можете создавать новую локальную переменную с аналогичным именем и не можете использовать локальную переменную за пределами области ее объявления. Следующий пример иллюстрирует это:
-
function f() {
-
{
-
var x : Number = 1;
-
// ... используйте x как Number
-
}
-
// вы не можете использовать x здесь
-
{
-
var x : String = "hello";
-
// ... используйте x как String
-
}
-
// вы не можете использовать x здесь
-
}
Вывод: сокрытие локальных переменных необходимо для получения более полного контроля над типами переменных и для проверки правильности кода. Flash Virtual Machine недостает лексического отслеживания областей объявления локальных переменных, начиная с предыдущей AS1 версии языка. MTASC во время компиляции активно сообщает вам о конструкциях в коде, подверженых ошибкам, что позволяет экономить много времени во время отладки приложения.
#include
MMC позволяет встраивать фрагменты кода из внешних файлов в ваш ролик с использованием директивы #include.
MTASC не позволяет пользоваться этой директивой.
Рациональность подобного решения: Подобные практики кода вышли из употребления в ActionScript 2, где программисты должны хранить свой код во внешних файлах классов.
Определение локальных функций
MMC позволяет создавать именованные локальные функции:
-
function f(x) {
-
function g(y) {
-
return x+y;
-
}
-
}
MTASC позволяет создавать в теле других функций только литералы функций (т .е. анонимные функции, сохраненные в переменной):
-
function f(x) {
-
var g = function(y) {
-
return x+y;
-
};
-
}
Рациональность подобного решения: Это необходимо для нахождения различий между определением локальной функции и определением метода.
Средства трассировки
MMC предоставляет только простую функцию trace, которая выводит некоторый текст в окно Output (что работает только в IDE). Это не совсем удобно, к тому же многие люди предпочитают вести логи в процессе компиляции и отладки.
MTASC во время компиляции использует переопределенную функцию trace. Допустим у вас есть такой вот класс:
-
class Test {
-
-
static function main(mc) {
-
trace("hello world");
-
}
-
-
}
При компиляции с использованием команды mtasc -trace MyClass.myTrace Test.as (...) все вызовы функции trace будут заменены на вызов функции MyClass.myTrace (т. е. на вашу переопределенную функцию trace) и будут добавлены дополнительные параметры содержащие отладочную информацию. Т. е. будет так, как если бы вы написали:
-
class Test {
-
-
static function main(mc) {
-
MyClass.myTrace("hello world","Test::main","Test.as",4);
-
}
-
-
}
Где дополнительными параметрами являются:
- Полное имя класса и имя метода;
- Название файла класса;
- Номер строки, содержащей вызов функции.
Безусловно, будет очень просто написать свою функцию трассировки, которая, например, будет фильтровать поступающую информацию и выводить сообщения только от тех классов, отладку которых вы производите в настоящий момент. Помните, что функция trace во MTASC может принимать любое количество параметров, и что дополнительная отладочная информация добавляется после всех других параметров.
Если вы хотите создать окончательную версию вашего приложения, в коде которого не должно содержаться вызовов функции trace, просто используйте параметр командной строки "-trace no" для компиляции приложения и удаления из него всех вызовов trace.
Строгая типизация массивов
MTASC содержит расширения синтаксиса языка, которые позволяют строго типизировать ваши массивы, сохраняя при этом совместимость с ActionScript 2:
-
var x : /*String*/ Array;
Объявленным типом этой переменной является массив (Array), содержащий строки (String). Все обращения к элементам массива для чтения и записи будут проверяться на соответствие типу данных String, к которому принадлежат все элементы этого массива. Типизация элементов массивов — это только дополнительная проверка, производимая компилятором. Она не производится на этапе исполнения приложения. Будьте внимательны и не допускайте пробелов между "/*" и "*/".
Предугадывание типа локальных переменных
Если вы используете параметр командной строки -infer, то для всех локальных переменных, которым присвоено какое-либо начальное значение, автоматически объявляется их тип так, как показано ниже:
-
var x : String = "hello";
-
var x : Number = Math.cos(Math.PI);
-
var x : MyClass = new MyClass();
Все эти инструкции могут быть получены из следующего кода путем его компиляции с параметром -infer:
-
var x = "hello";
-
var x = Math.cos(Math.PI);
-
var x = new MyClass();
Вы можете использовать параметр -infer совместно с параметром -strict и ошибки несоответствия типов больше не будут выводиться, поскольку объявленный тип переменных всегда будет совпадать с присваиваемыми им значениями.
Другие незначительные отличия
- массив
argumentsподдерживается, однако к нему нельзя обратиться динамически (с помощьюeval("arguments"), например); - при компилировании с помощью MTASC, тип параметров сеттеров и возвращаемый тип геттеров могут отличаться друг от друга;
- при компиляции с использованием MTASC, функции, неимеющие в своем теле инструкции return, автоматически типизируются как возвращающие Void;
- не поддерживается инициализация членов класса за пределами тела класса (только если это не константа и не статический метод);
- при компиляции с помощью MTASC свойство клипов
rootнедоступно при вызове без соответствующего контекста. Например, если вы используете_parentвнутри класса, в котором не определено соответсвующее свойство, «посыплятся» ошибки компиляции; eval(this)не работает.
Логотип MTASC для вашего сайта

Вы можете разместить на своем сайте этот маленький банер (88x31, GIF, 2k) для того, чтобы помочь в продвижении бесплатного компилятора MTASC и open source сообщества:
Юр, покажи Николя перевод статьи - он получился просто отличный! Пусть линкует со стартовой страницы сайта http://mtasc.org/.