ASC2 — ActionScript Compiler

Сегодня я уже упоминал о выходе компилятора ASC2.
Теперь напишу о нем немного подробнее.
Это новый компилятор для ActionScript. На самом деле не такой уж новый — был создан на основе компилятора Falcon, который был отдан в Apache.
Этот компилятор компилирует только чистый ActionScript, НИКАКИХ FLEX!.
Он является частью AIR 3.4/FP 11.4 SDK.
Скачать ASC2 (как часть Air 3.4 SDK).
Насколько я понял, это что то типа бета версии компилятора.

Так что же дает нам использование этого компилятора? (могу наделать ошибок в переводе, некоторые моменты не понимаю. Если че исправляйте)

1. Новая мультипоточная архитектура дает компилировать несколько файлов одновременно, что позволяет существенно уменьшить время компиляции.
2. Лучшая работа с константами. Имеется ввиду, что работа с результаты, которые являются константами быстрее. Напомню, что для mxmlc пофигу является переменная или результат константой или не является он работает одинаково.
3. Уменьшение накладных расходов функции путем удаления ненужных (а вот тут не понял) activation records (записей активации ??).
4. Одна из самых ожидаемых фич. Оптимизация кода путем инлайнинга и удаление мертвого кода.
5. Добавлен оператор «goto» для не линейного контроля потока исполнения. Думаю не надо рассказывать, что это. Только не понимаю нафига они его добавили. Многие языки пытались долгое время избавится от него.
6. Поддержка алгоритма компрессии LZMA.
7. Инкрементальная компиляция много быстрее.
8. Доступны с командной строки такие инструменты как fontswf, optimizer, swfdump и swcdepends.
9. Инструменты asdoc и fdb также включены.
10. Теперь посредством Embed тега нельзя встроить шрифт в проект. Для этого нужно, чтобы шрифт был включен в SWF, а та в свою очередь подключена (или встроена) в проект. Это можно сделать посредством инструмента fontswf или Flash Professional CS6. (не понимаю для чего это было сделано)
11. Относительный путь в коде решается относительно встраиваемого файла. Для определения пути относительно рута сорсов нужно предварять ваш путь прямым слэшем «/».
12. Сообщение об ошибках, которые кидает компилятор, может быть переведено на такие языки как French, Japanese, и Simplified Chinese. Локаль определяется JVM и может быть перезаписана путем использования locale configuration option.
13. Ну и конечно же поддержка мультипоточности с помощью Workers.

Можно явным способом заинлайнить методы используя метатег [Inline].
Также для этого обязательно в аргументах компилятора нужно добавить параметр -inline.

Чтобы функция могла быть заинлайненой она должна отвечать некоторым условиям:
- быть final, static или область видимости файла или пакета;
- не должна содержать какие либо активации (это не совсем понял);
- не должна содержать операторы ‘try’ или ‘with’ ;
- не должна содержать замыкания;
- тело ф-и должно быть меньше 50 выражений;

В оригинале статьи есть парочка простых примеров показывающих при каких обстоятельства будет инлайн и при каких нет.

Смотря на то как развивается флеш платформа можно сделать простой вывод — ни на какую пенсию флеш и близко не собирается.
По поводу компилятора. Можно было ожидать такого решения — Adobe избавляется от Flex и все что с ним связано и делает таргетинг на мобильные платформы и 3d веб. Еще год назад я что то такое ожидал, только думал, что они допилят mxmlc, а они взяли и запилили вообще новый компилер «с блэк-джеком и ш…».
Однозначно этот компилятор будет лучше mxmlc, только надо немного времени, чтобы его отполировали.
Таблица обратной совместимости компиляторов

Поделиться в соц. сетях

Опубликовать в LiveJournal
Опубликовать в Google Plus
  • SlavaRa

    Привет.
    Начал писать на флешере статейку по работе с этим компилятором, наткнулся на твою запись, кулл) goto сделали для команды Alchemy, вообще я не думаю, что рядовые флешеры будут им пользоваться.
    И вот интересно почему break/break loop; таких мыслей не рождает

    • VirtualMaestro

      По-поводу break никаких эмоций, вроде все ок и ничего не цепляет))
      А вот на goto… уже как условный рефлекс)) Сколько помню всегда считалось плохой практикой и всегда избегал его использование, начиная с С++…