XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
cJass "cj_antibj_base.j" или подробнее об антиBJ
Читая статью об cjass, я наткнулся на:
» раскрыть
include "cj_order.j"
include "cj_antibj_base.j"

Данные подключаемые файлы предназначены для удобства и небольшой оптимизации карт во время сохранения.

Первый из них заменяет все вызовы функций вида OrderId("smart") на соответствующие им целочисленные значения приказов, а также вводит макросы вида order_smart для целочисленных значений всех существующих приказов.

Второй же выполняет легкую оптимизацию при использовании в карте функций и констант из файла "Blizzard.j". Используемые константы заменяются на их значения, а многие функции заменяются на свои аналоги из "common.j". Хочу заметить, что эта оптимизация работает даже на ГУИ-триггерах в вашей карте.


Возникло пару вопросов:
1) Функция "антиBJ" и вправду оптимизирует все BJ, причем так как надо, без ошибок?
2) Раз, она оптимизирует, все BJ, то тогда скажите зачем, нужны все эти статьи про оптимизации, про "плохой тон BJ функций", зачем если включив это в код, можно убрать все это?!
3) Впихивать это: include "cj_antibj_base.j" надо в нестандартные триггеры в самое начало?
Старый 09.09.2012, 00:52
jeffz

offline
Опыт: 104
Активность:
Только что посмотрел, как это работает.
После подключения cj_antibj_base.j в коде карты были найдены следующие изменения:
  1. Некоторые функции, которые возвращали константы или вызывали несколько других функций, были заменены на эти константы или на вызовы этих функций (например, GetPlayableMapRect() заменилось на bj_mapInitialPlayableArea)
  2. Константы (элементарного типа, из Blizzard.j) были заменены на их значения (bj_UNIT_FACING на 270.)
  3. Функции, вызывающие native-функции были заменены на эти native-функции (FogEnableOff() на FogEnable(false))
  4. Функция InitCustomTriggers() была убрана, а на месте её вызова появился последовательный вызов инициализаций триггеров
Не о всём, но суть ясна.
Ответы на вопросы:
  1. Не смотрел, оптимизирует-ли, но, скорее всего, нет. Почитай пункты 1 и 3.
  2. Опять же, нужно посмотреть.
  3. Да.
Поправьте меня, если где-то ошибаюсь.
Старый 09.09.2012, 03:35
Doc

offline
Опыт: 63,163
Активность:
Как бы от утечек она не спасет.
Старый 09.09.2012, 03:36
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,024
Активность:
Xipxop, да толку от анти бж мало, так как по сути одна бж заменяется другой, это придел того что делает эта система, а как был сам факт вызова паразитной функции в коде так он и остался, сама архитектура бж, не способствует производительности....
Старый 09.09.2012, 06:02
YellowStar
poon
offline
Опыт: 15,144
Активность:
cj_order круто, остальным не пользуюсь.
Старый 09.09.2012, 07:05
adic3x

offline
Опыт: 108,439
Активность:
cj_order оптимизирует приказы, причем очень хорошо.
cj_antibj_base производит незначительную оптимизацию bj функций, можно открыть сам файл и посмотреть, что на что будет заменено.
ADOLF добавил:
да толку от анти бж мало, так как по сути одна бж заменяется другой
quq_CCCP профессионально пишет бред по всему jass форуму, его можно не слушать.
Старый 09.09.2012, 09:39
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,024
Активность:
ADOLF, ну я посмотрел код после этих преобразований, толку так скажем 0....
Ну и что что мы заменим IsUnitDeadBJ на ей содержимое?
Ну а сами условия гуи с 10 функций, как были так и остались, ппц, какой толк от этого?
Старый 09.09.2012, 09:44
Doc

offline
Опыт: 63,163
Активность:
quq_CCCP профессионально пишет бред по всему jass форуму, его можно не слушать.
quq_CCCP, честно, необязательно отвечать в КАЖДОЙ теме, особенно если ты не знаешь ответа/не разбираешься в теме. По-твоему когда в одной функции вложена другая это ни на что не влияет, а когда в одном условии вложено другое - влияет?
Старый 09.09.2012, 10:13
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,024
Активность:
Doc, ну значит ты невидел код после этих приобразований, которые гордо называются анти BJ но на самом деле всего лиш иллюзиия, которая только немножко изменяет BJ архетектуру, но как были утечки и потеря производительности на вызов всякого мусора так они и остались....
Старый 09.09.2012, 10:16
Doc

offline
Опыт: 63,163
Активность:
quq_CCCP, блин, ты тогда хотя-бы пиши "ТРЕД НЕ ЧИТАЛ, ЩАС НАПИШУ ФИГНЮ: %yourpost%"
Все уже давно сказали, что утечки она НЕ УБИРАЕТ и не должна. Она избавляет от потери производительности, убирая вызов мусора. А ты пожалуйста проверь несколько раз, прежде чем говорить.
Старый 09.09.2012, 10:19
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,024
Активность:
Doc, ну какой упорный
((код jass
function 001 takes nothing retursn boolean
returns GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE) and IsUnitEnemy(GetFilterUnit(),udg_Player001) and IsUnitType(GetFilterUnit(),UNIT_TYPE_MECANICAL)
end function
тоже самое но гуи, и после вашего оптимизатора...
function 001 nothing returns boolean
if ( not ( IsUnitEnemy(GetFilterUnit(), udg_TempPlayer)) ) then
return false
endif
if ( not ( GetUnitStateSwap(UNIT_STATE_LIFE, GetFilterUnit()) > 0.00 ) ) then
return false
endif
if ( not ( IsUnitType(GetFilterUnit(),UNIT_TYPE_MECANICAL) ) then
return false
endif
return true
endfunction
))
Бж заменили их содержимим, да собственно толку то от этого... Я ВИДЕЛ УСЛОВИЯ ИЗ 5 РАЗНЫХ ФУНКИЙ, а их можно заменить 1, в ифах (if,then,else) функции условиями не заменяют, это я все увидел примерно полгода назад уведел скрипт карты после такой оптимизации..
К стати когда нафиг ненужно else его не удаляют...
Старый 09.09.2012, 10:31
Doc

offline
Опыт: 63,163
Активность:
quq_CCCP,
  1. Не могу написать доступно о твоем интеллектуальном развитии, за это варнят.
  2. Это не код после оптимизации.
  3. dg-lab.com/s/owyodj ТАК ПОНЯТНО?
Старый 09.09.2012, 10:36
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
Ладно думаю тему закрыть, ответ получен.

Коротко об ответе: Пихать в нестандартный триггер, в самое начало, убирает он только лишний вызов функции ссылающуюся на другую функцию.
Старый 09.09.2012, 13:04
Doc

offline
Опыт: 63,163
Активность:
Можно запихнуть ее куда угодно, это ни на что не влияет.
Старый 09.09.2012, 13:14
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 15:56.