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

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

Закрытая тема
 
Oxygen D
Вернулся
offline
Опыт: 5,180
Активность:
Дефайны или константы?
Как лучше и почему?
  private constant int A = 1
  private constant int B = 2
  private constant int C = 3


или

  define {
   A = 1
   B = 2
   C = 3
  }
Старый 18.01.2012, 15:12
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Oxygen_D, ну обычно юзают defaine, потому что не они в отличии не занимают ячейку памяти, а просто препроцессором вставляются в местах их использования.
Старый 18.01.2012, 15:13
Oxygen D
Вернулся
offline
Опыт: 5,180
Активность:
alexprey, Ну, а на сколько это больше нагружает игру? Просто речь идет о перезаписи нескольких сотен констант в дефайны.
Старый 18.01.2012, 15:26
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
Если писать изначально - однозначно дефайны. Если уже написаны константы, то переписывать их это бред ИМХО.
Старый 18.01.2012, 15:28
Oxygen D
Вернулся
offline
Опыт: 5,180
Активность:
клоз.
Старый 18.01.2012, 15:54
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
разве сжасс значения констант не переписываются при компилляции в коде как дефайны? работает же совершенно одинаково
Старый 18.01.2012, 16:46
alpha

offline
Опыт: 7,387
Активность:
Oxygen_D:
Как лучше и почему?
  private constant int A = 1
  private constant int B = 2
  private constant int C = 3


или

  define {
   A = 1
   B = 2
   C = 3
  }
Использование дэфайнов и констант в такой ситуации может и не оправдано, но если уж делаешь, то делай через дэфайны. Через дэфайны у тебя хоть не будет заниматся та ничтожная часть памяти и не будет лишних байт в файле конечного кода.
Clamp:
разве сжасс значения констант не переписываются при компилляции в коде как дефайны? работает же совершенно одинаково
Не переводит, также новый адик немного отлаживает лишнего в код.
Вот пример:
globals
   boolexpr cj_true_bool_4896bnao87
endglobals
function cj_true_a497bnsor7 takes nothing returns boolean
   return true
endfunction
function cjLibw560nbs9b8nse46703948__init takes nothing returns nothing
   set cj_true_bool_4896bnao87=Condition(function cj_true_a497bnsor7)
endfunction
нигде не используется, тулзами можно подтереть, конечно, но вся жуть еще глубже - такие функции создаются и время от времени конфликтуют между собой.
(не дезинформация, все подтверждено на практике)
test test test
через тулзы, я слышал, константы убераются, адик их наличие игнорирует
Mephissto добавил:
Oxygen_D:
alexprey, Ну, а на сколько это больше нагружает игру? Просто речь идет о перезаписи нескольких сотен констант в дефайны.
Нинасколько, фактически, только обращение к ним как к переменным занимает некоторые ресурсы, да и для усвоения поиграйте в массивные карты типа DotA. Там использована масса переменных, вот на личном опыте убедитесь.
"Перепись" констант в дэфайны в целом-то полезно скажется, только предпроцессор будет больше требовать ресурсов в момент сохранении карты

Отредактировано Mephissto, 18.01.2012 в 18:02.
Старый 18.01.2012, 18:15
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Mephissto:
массивные карты типа DotA
What???
Старый 18.01.2012, 20:46
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Сначала подумал что мефисто шарит, но после:
Цитата:
Сообщение от Mephissto
да и для усвоения поиграйте в массивные карты типа DotA.

:facepalm:


бтв, не помню откуда у меня эта инфа, но согласно этой инфе, константы, поскольку они константы в конечном итоге обрабатываются так же, как дефайны препроцессором, только самой средой.

Faion добавил:
или мб это делают протекторы, не помню уже.

PS: тема неочем и бессмыслена, не на том пытаетесь экономить, учитесь писать алгоритмы нормальные, а не такты экономить.
Старый 18.01.2012, 21:02
alpha

offline
Опыт: 7,387
Активность:
Faion:
бтв, не помню откуда у меня эта инфа, но согласно этой инфе, константы, поскольку они константы в конечном итоге обрабатываются так же, как дефайны препроцессором, только самой средой.
Провел Benchmark тест. Вот результаты:
constant integer define value(integer)
Максимум .000031848 .000025422
Среднее зн. ~ .0000305 ~ .0000246
Минимум .000028216 .000024102
Величина в секундах.
Характеристики машины говорить не буду, т.к тут все и так ясно.
А пример "DotA" я дал хоть и не наилучший, но верный.
Вот карта, в ней описана методика теста.
Прикрепленные файлы
Тип файла: w3x test.w3x (41.9 Кбайт, 5 просмотров )
Старый 18.01.2012, 21:39
Elf_Stratigo

offline
Опыт: 4,699
Активность:
пффф, тулза векса подставляет значения в точки обращения, такчто разница только в оформлении
Старый 18.01.2012, 22:30
alpha

offline
Опыт: 7,387
Активность:
Elf_Stratigo:
пффф, тулза векса подставляет значения в точки обращения, такчто разница только в оформлении
Не автоматом же, каждый раз необходимо создавать/подгружать нужную настройку, заменив константы на дэфайны мы не лишний раз подстрахуемся.
В этом случае если констант больше сотни, то их надо заменить. Это существенно сократит конечный код(зависит, конечно, от ситуации, но в большенстве случаев это так), если не произвести обработку внешними программами.
Да и операция замены констант на дэфайны проста.
Старый 18.01.2012, 23:09
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Faion:
такты экономить
чтобы эконосить такты тут надо уже весь двиг вара знать наизусть, а так же иметь представление о процессорах
Mephissto:
Это существенно сократит конечный код
лол что???
((код jass
define pi_2 bj_PI/2.
constant real pi_2 = bj_PI/2.
))
А теперь минус. Дефайн подставит выражение, когда константа уже конкретное значение
Mephissto:
Провел Benchmark тест. Вот результаты:
каким образом. Имхо проводить тест на jass это ерунда, нужно использовать внешнии тулзы для этого
Так же у дефайнов нельзя использовать спецификаторы доступа (private, public)
Всем константы, посоны!
alexprey добавил:
Faion:
PS: тема неочем и бессмыслена, не на том пытаетесь экономить, учитесь писать алгоритмы нормальные, а не такты экономить.
Короче плюсую, насчет бредовости и бессмысленности темы, пожтому лучше закрыть иначе будет холивар

Отредактировано alexprey, 19.01.2012 в 01:38.
Старый 19.01.2012, 01:26
alpha

offline
Опыт: 7,387
Активность:
Так же у дефайнов нельзя использовать спецификаторы доступа (private, public)
Ты уверен?)
Я в либрари их все время пишу как приватные
#define pi_2 = (bj_PI/2.)
constant real pi_2 = bj_PI/2.
взял в ковычки - исправил дело
Старый 19.01.2012, 02:23
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Mephissto:
Я в либрари их все время пишу как приватные
А ну тогда ок.
Старый 19.01.2012, 02:25
ScorpioT1000
Работаем
offline
Опыт: отключен
Дефайны, если нужна производительность. Константы, если нужна обратная совместимость, или в команде есть vjass-еретики.
ScorpioT1000 добавил:
И да, в твоем случае нужна энумерация:
enum (reputationtypes) { REP_ENEMY, REP_NEUTRAL, REP_ALLY, REP_FRIEND }
ScorpioT1000 добавил:
Не переводит, также новый адик немного отлаживает лишнего в код.
это не лишнее, в предпоследней версии вара, если вместо фильтра указать null, будет утечка)
Старый 20.01.2012, 04:21
Hares
полупротосс
offline
Опыт: 6,966
Активность:
вот пример на vb (можно на любом другом языке)
((код vb
Function Parse(Text as String) as String

Dim i, L as Long: L = Len("constant")

For i = 1 to Len(Parse)
If Mid(Parse, i, L) = "constant" Then
Parse = Left(Parse, i - 1) + "define" + Mid(Parse, i + L + 1)
End If
Next

End Function
))
Создаёте текстбокс, вбиваете в него свой код, создаёте кнопку, под конпку пишете ивент. В качестве действия прогоняете текст из текстбокса через эту ф-ию (с заменой) (можно в виде массива строк, так будет быстрее).
Hares добавил:
И чё париться-то?
Старый 20.01.2012, 15:44
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Hares, а вот что парится
((код jass
constant string my_msg = "constant = %1"
))
Применяем твою прогу
((код jass
define string my_msg = "define = %1"
))
Старый 20.01.2012, 17:15
alpha

offline
Опыт: 7,387
Активность:
Ручками все наделал за 8 минут и Ваших супер программ сделанных на vb не надо
Прикрепленные файлы
Тип файла: rar thread icons.rar (93.3 Кбайт, 2 просмотров )
Тип файла: rar Icons.rar (69.4 Кбайт, 6 просмотров )

Отредактировано alpha, 26.03.2012 в 20:17.
Старый 20.01.2012, 17:19
Oxygen D
Вернулся
offline
Опыт: 5,180
Активность:
Забыл сказать тему клоз. Написал прогу которая меняет в тексте одно слово на другое. Просто ввел private constant заменить на define. И вуаля, как насчитала моя прога 122 слова были заменеы успешно:)
Старый 24.01.2012, 23:12
Закрытая тема

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

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

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

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



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