Просмотр полной версии : Компиляция недостижимого кода
Вопрос по первичной обработке кода компилятором. Достаточно ли умен компилятор (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?
Tails, может лучше использовать условную компиляцию?
Только закомментировнный код не будет компилироваться.
Спасибо.
Тут на форуме, в блогах это когда то уже обсуждали.
caseyryan
26.09.2015, 08:25
Собственно, а какая тебе разница будет он вкомпилирован или нет? Если он не выполняется, то проблем нет
Да вообщем то проблем нет, просто из любопытства вот поинтересовался. Ответы на мои вопросы такие, что компилятор ни черта не делает. Как напишешь, так и будет в конечном 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 прокатит без проблем
}
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);
}
ZackMercury,
Благодарю за примеры! :)
Так есть же более простая встроенная возможность с помощью выпадающего списка на верхней панели FD:
Ух ты, не знал. А я свой класс писал и везде условия тыкал. А оно оказывается все встроено. Надо будет попробовать.
Ух ты, не знал. А я свой класс писал и везде условия тыкал. А оно оказывается все встроено. Надо будет попробовать.
Снипет ещё сразу добавь:
CONFIG::debug {
$(EntryPoint)
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.