PDA

Просмотр полной версии : Компиляция недостижимого кода


Tails
25.09.2015, 23:30
Вопрос по первичной обработке кода компилятором. Достаточно ли умен компилятор (Flex 4.6.0), что-бы не включать недостижимые инструкций в конечный проект?
Допустим, у меня есть такая переменная:
public static const DEBUG_MODE:Boolean = Boolean( 0 ); // 0 Тут потому, что его проще заменить на 1 и наоборот, чем писать true false.

И такие инструкции:
if(DEBUG_MODE){
// Тяжёлый код 1
}
if(DEBUG_MODE && <ещё какое то выражение>){
// Тяжёлый код 2
}

Будет ли полностью отсечено первое условие в рантайме?
Будет ли полностью отсечено второе условие в рантайме?
Никто не заморачивался по поводу такой фигни?

Под полностью, я имею ввиду, чтобы его вообще не было в конечном swf. К сожалению, декомпилятора нету, что бы проверить.

neonoviiwolf
26.09.2015, 00:27
может закоментить и посмотреть на объём swf?

illuzor
26.09.2015, 01:24
Tails, может лучше использовать условную компиляцию?

ALeXVoz
26.09.2015, 01:33
Только закомментировнный код не будет компилироваться.

Tails
26.09.2015, 02:08
Спасибо.
Тут на форуме, в блогах это когда то уже обсуждали.

caseyryan
26.09.2015, 08:25
Собственно, а какая тебе разница будет он вкомпилирован или нет? Если он не выполняется, то проблем нет

Tails
26.09.2015, 09:12
Да вообщем то проблем нет, просто из любопытства вот поинтересовался. Ответы на мои вопросы такие, что компилятор ни черта не делает. Как напишешь, так и будет в конечном swf.
Даже такие индуские инструкций как:
if(false){
// Очень много кода...
}
Судя по статье (http://flasher.ru/forum/blog.php?bt=6790) и комментариям в блоге iNils.

caseyryan
26.09.2015, 09:21
Ну, это не такая уж индуская конструкция. Такая конструкция даже в джаве, с ее гораздо более строгим компилятором, считается нормой
Индусской я бы назвал вот эту:

private function someFunc():void {
// какой-то код
return;
// еще какой-то код. Который в джаве не даст скомпилировать проект,
// кинув unreachable code эксепшен, а в ас3 прокатит без проблем
}

Tails
26.09.2015, 09:40
Согласен :)

ZackMercury
26.09.2015, 10:54
Так есть же более простая встроенная возможность с помощью выпадающего списка на верхней панели FD:
http://www.flashdevelop.org/wikidocs/index.php?title=AS3_Conditional_Compilation

CONFIG::debug
private function someFunction() {
trace("debug version");
}

CONFIG::release
private function someFunction() {
trace("release version");
}

private function someFunction() {
CONFIG::debug {
trace("This code is NOT compiled in Release configuration");
return;
}
trace("This code never executed in Debug configuration - and apparently not even compiled");
}

public const COMPANY:String = CONFIG::companyName;

private function someFunction() {
if (CONFIG::debug == true) {
trace("This code only executed in Debug configuration (but still compiled).");
}
trace("Built: " + CONFIG::timeStamp);
}

Tails
27.09.2015, 13:19
ZackMercury,
Благодарю за примеры! :)

Korchy
27.09.2015, 14:16
Так есть же более простая встроенная возможность с помощью выпадающего списка на верхней панели FD:


Ух ты, не знал. А я свой класс писал и везде условия тыкал. А оно оказывается все встроено. Надо будет попробовать.

Tails
27.09.2015, 15:25
Ух ты, не знал. А я свой класс писал и везде условия тыкал. А оно оказывается все встроено. Надо будет попробовать.

Снипет ещё сразу добавь:
CONFIG::debug {
$(EntryPoint)
}