Сообщение раз в 3 раунда

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #21
AlmazON, Скорее из-за компи паста))
up http://hlmod.ru/forum/showpost.php?p=163017&postcount=24
В конце концов отправить PrintToChatAll и PTA (желательно с форматируемым текстом) и посмотреть через sm profiler скорость.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
для одной переменной это одинаково, но для массивов decl быстрее
Я так же думаю, поэтому не имеет смысла применять decl в цикле - это лишь длиннее по коду, а потому и хуже (и +1 строчка к тому же).
Оффтоп
отправить PrintToChatAll и PTA (желательно с форматируемым текстом)
Чуток быстрее должно быть лишь из-за отсутствия SetGlobalTransTarget(i);. Даже buffer создаётся в момент начала поиска нашего сокращения PTA. Поэтому и говорю, что больше выгоды для простого текста (можно цветным, но не более). Для форматируемого - не рационально (если ни разово).
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #23

Vit_ amin

Добрая душа
Сообщения
1,525
Реакции
688
Вопрос не в экономии электричества. И не в лишней проверке на бота. Вопрос в культуре написания кода.
В данном случае, так будет оптимальнее:
public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
decl i;
for (i = 1; i <= MaxClients; i++)
if (IsClientInGame(i) && !IsFakeClient(i)) PrintToChat(i, "Напишите !stopmusic чтобы отключить звуки босса.");
}

P.S. Просто, не люблю лишние скобки. И переменную "i" нет смысла обьявлять через "new", так как идет явное указание значения переменной - "i = 1".
"PrintToChatAll" и.т.д. - просты в использовании, но с точки зрения нагрузки и оптимизации кода - есть зло.
В данном случае переменная "i" - неявно объявлена ...
Так или иначе к примеру я делаю проверку на AI игроков (уже привычка).
Либо делаю отдельную функцию для этого.
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
"decl i" не имеет смысла в цикле потому, что всем плевать на переменную в 4 байта, нельзя присваивать значение при объявлении, и к тому же она в таком случае имеет видимость вне цикла. Такое объявление просто не удобное.
 
Сообщения
149
Реакции
29
"decl i" - локальная переменная, видимая только внутри public Event_RoundStart.
"for (i = 1; i <= MaxClients; i++)"
"i = 1" - это ЯВНОЕ указание значения переменной. Если "i = 1" - не явное указание значения переменой, не мог ты, Vit_ amin, привести пример явного указания значения переменной "i"?

AlmazON, про какую лишнюю строчку ты говоришь? Используя "new i" - ты автоматически обьявляешь переменную с принудительной очисткой в значение "0". Даже если речь идет о 4 байтах. То есть - в данном случае, это эквивалент "decl i" + "i = 0". А затем ты указываешь переменной "i", которая уже имеет значение "0" - новое значение "1" - для дальнейшего использования в цикле "for (i = 1; i <= MaxClients; i++)". То есть, фактически ты дважды назначаешь значение для одной переменной.
Я же - обьявляю переменную i ("decl i", и заметь - с минимальной нагрузкой для плагина и процессора), и в следующей строке - даю ЯВНОЕ указание переменной "for (i = 1; i <= MaxClients; i++)" и использую СРАЗУ по назначению. Чувствуешь разницу? Без лишнего телодвижения "new i" (получаем переменную "i" со значением 0), а потом "i = 1; i <= MaxClients; i++"

И дело тут не в 4 байтах. тут вопрос принципа.

P.S. Больше дебатов по этой теме с моей стороны не будет. Если для кого то "i = 1" - не явное указание значения переменной, а кто то рассказывает про "всем плевать на переменную в 4 байта" - то ЧТО и с КЕМ мы обсуждаем в этой теме? То что ЧЕРНОЕ - это БЕЛОЕ?

P.S. В запале дебатов не уделил внимания чудесному изречению - "нельзя присваивать значение при объявлении". Почему - нельзя? Кто запретил? А что будет, если присваивать значение при объявлении? А разве "new" не производит присвоение значения "0" обьявляемой переменной? Однозначно - в золотую коллекцию маразма!
А на счет видимости переменной "i" вне цикла - ну убивайся так. Для цикла переменную нужно было обьявить в ЛЮБОМ СЛУЧАЕ. И то, что переменная примет какое то значение - в этом и есть смысл данной переменной. Но если и это для тебя - не аргументы, утешься тем, что в данном случае - процедура состоит только из 1 цикла:

public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
decl i;
for (i = 1; i <= MaxClients; i++)
if (IsClientInGame(i) && !IsFakeClient(i)) PrintToChat(i, "Напишите !stopmusic чтобы отключить звуки босса.");
}

Переменная ни на что больше - не влияет.
Краш сервера - отменяется. И конец света - то же.
 
Последнее редактирование:

Vit_ amin

Добрая душа
Сообщения
1,525
Реакции
688
Если ты не знаешь, что такое явное/неявное объявление советую почитать хотя-бы эту статью
 
Сообщения
149
Реакции
29
Vit_ amin, читай статьи на эту тему сам. И перестань писать чушь про то, что "i = 1" - не явное указание значения переменной.
P.S. Кстати, Vit_ amin, а какой смысл давать ссылка на статью по VBA, когда тут обсуждается Павн? Или - как говорится - слышал звон, но не знаешь, где он? Или ты хочешь сказать, что методы, описанные в той статье можно применять в Павне напрямую? ..... Цирк уехал - клоуны - остались ....
 

Vit_ amin

Добрая душа
Сообщения
1,525
Реакции
688
Vit_ amin, читай статьи на эту тему сам. И перестань писать чушь про то, что "i = 1" - не явное указание значения переменной.
P.S. Кстати, Vit_ amin, а какой смысл давать ссылка на статью по VBA, когда тут обсуждается Павн? Или - как говорится - слышал звон, но не знаешь, где он? Или ты хочешь сказать, что методы, описанные в той статье можно применять в Павне напрямую? ..... Цирк уехал - клоуны - остались ....

  1. Я эту тему читал давно, поэтому знаю чем отличается явное или неявное объявление переменной.
  2. Я дал ссылку на эту статью потому что синтаксис объявления явной/неявной переменной совпадает и в том и другом языке программирования.
  3. Ну а насчет цирка, что могу сказать мне тебя очень жаль, что твой словарный запас на уровне интернет цитат.
 
Сообщения
149
Реакции
29
Vit_ amin, в таком случае, если ты не владеешь информацией и ничего не можешь сказать по сути вопроса, поднятого в данной теме - go into spectator. Просто - наблюдай, читай что пишут, набирайся знаний.
P.S. Когда многозначительно молчишь - кажешься умнее ... Болтунов тут и без тебя хватает.
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Александр Смирнов 8452246, слова "нельзя присваивать значение при объявлении" означают, что нельзя написать "decl i = 0".
Про "плевать в переменную в 4 байта" - это не вопрос принципа. 4 байта просто не существенно. Другое дело в больших массивах. Если ты не в курсе, то под массивы память обычно выделяется в последовательных ячейках памяти, и тут уже может сыграть скорость. Что будет быстрее в таком случае? Вызов calloc или указатель на уже выделенный участок памяти?
 
Сообщения
149
Реакции
29
Давайте заканчивать с "шаманством".
wiki.alliedmods.net/Optimizing_Plugins_(SourceMod_Scripting)

Везде на форумах разработчики SourceMod предостерегают от использования "decl". Их аргументы - используйте "new", так так как "new" имеет инициализацию "0". Использование "decl" требует внимательности и определенного уровня того, кто пишет код. Подавляющее большинство тех, кто пишет на SourceMod - это "Алмазоны", "Витамины" и прочий зоопарк. Если они начнут использовать "decl", но забывать при этом о инициализации переменных, обьявленных через "decl" - получится лавинообразный поток кривого и глючного кода. Поэтому, лучший друг новичков - "new". Мы с вами говорим о оптимизации. Порой, оптимизация плагина - это 50-70% переписанного кода. И оптимизация невозможна без понимания того, каким образом обьявляются и используются переменные и каких ресурсов это стоит. Я не говорю, что "decl" - это панацея от всего. Например, при использовании такого рода переменных как i[128][128] - проще использовать new i[128][128]. Но мы рассматриваем конкретный пример:

public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
decl i;
for (i = 1; i <= MaxClients; i++)
if (IsClientInGame(i) && !IsFakeClient(i)) PrintToChat(i, "Напишите !stopmusic чтобы отключить звуки босса.");
}

И я утверждаю, что так, как написал я - это наиболее оптимально в данном случае.

P.S. gibs, я в курсе. Меня учить не нужно. И если аргументов нет - зачем продолжаешь дебаты? Что умного и аргументированного ты написал в этой теме? Плюй дальше на 4 бита, они роли - не играют. Специально для таких как ты разработчики железа скоро выпустят проц на 10ГГц - чтобы ваш код не тормозил. Я пытаюсь вам обьяснить про правильный код. Вы пишите про свой фристайл. Читай wiki... И перечитай пост 36.
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
кто пишет на SourceMod - это "Алмазоны", "Витамины" и прочий зоопарк
Слушай, директор зоопарка, это не ты ли жаловался:
Типа - избранный. Если кому интересно - чуть позже могу показать скрины моей переписки с WS в скайпе. Но факт остается фактом - под новый СМ он отказался компилить свои плагины и то, что плагины у него покупали - не послужило побудительным мотивом для тех поддержки.
Да я бы на его месте, с таким то самомнением заказчика и вовсе ничего не делал! И, раз ты такой умный, что же не напишешь сам свой плагин? И вообще, почему ничего не напишешь полезного для форума? Докажи, что ты такой "ас". Или где-то в одной умной книжке про decl начитался и более, иного выдать не способен?
Напиши хороший плагин, а мы посмотрим. Оффтоп
Оффтоп
 
Сообщения
149
Реакции
29
Чтобы написать плагин - нужно разбираться в моде. Джайл - лично для меня - тупой мод. Я не хочу в нём разбираться. Мне было легче купить плагин, что я и сделал.
А для того, чтобы поржать, не нужно для тебя писать плагин. По всему видно, что ты - весельчак по жизни и тебя все смешит. Но - смех без причины - признак ....... Алмазона.
P.S. Я рад, что мне удалось доходчиво обьяснить тебе про "decl". Доказывать, что я "ас" - не буду. Ты уже это доказал в данной теме. И еще. Не пытайся стать на чье то место. Попробуй найти свое. И кто тебе сказал, что я не пишу плагины? Пишу. Но, боюсь, для тебя код, который я использую - будет шоком. Сам посуди - только обсуждение "decl" - 40 постов!
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Оффтоп
Я рад, что мне удалось доходчиво обьяснить тебе про "decl"
В циклах по-прежнему пишу new - я рад, что ты этому рад) По поводу "лишних" 4 байт - они не из воздуха берутся, а всё равно, занимаются в момент операции, пусть из "мусора", но тоже занимаются! Не такие уж "лишние" и не надо мне о скорости. Когда её не станет хватать, она также начнёт выделяться заново, как и new, становясь "выделенной при более раннем вызове функции или же других функций".
Оффтоп
 
Сообщения
149
Реакции
29
))) пиши как и прежде - "new". Но, думаю, многие уже сделали выводы по качеству твоего скрипта и твоих советов.

"По поводу "лишних" 4 байт - они не из воздуха берутся, а всё равно, занимаются в момент операции, пусть из "мусора", но тоже занимаются! Не такие уж "лишние" и не надо мне о скорости. Когда её не станет хватать, она также начнёт выделяться заново, как и new, становясь "выделенной при более раннем вызове функции или же других функций" - не мог бы ты подтвердить это высер какими либо ссылками из солидных источников или описанием? А то как то некрасиво получается - я обьясняю, поясняю на примерах, привожу ссылки wiki по теме, а ты - все пустозвонишь и пустозвонишь...
P.S. Кстати, AlmazON, а ты не считаешь, что твоя базарная риторика без аргументов - опускает твой авторитет в глазах пользователей данного форума? То, что ты слаб в программировании - уже всем понятно. Сейчас ты открываешь свою грань как человек. И как человек - по моему, ты - не очень ...
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
не мог бы ты подтвердить
Ты адекватный? Ты реально считаешь, что decl черпает память из воздуха или что? Ссылку с фразой "памятью, выделенной при более раннем вызове функции или же других функций" тебе давали уже.
И вообще, даже мои сомнения уже развеялись - decl в цикле бесполезен. Чётко же дано понять, что для одного однострочного значения скорость одинаковая! Если разница и есть, то она настолько ничтожна, что её даже https://wiki.alliedmods.net/SourceMod_Profiler не регистрирует. Иначе возьми и проверь! Ссылка официальная, именно по SM.
многие уже сделали выводы по качеству твоего скрипта
Мои плагины комментировали куда более авторитетные лица, нежели ты. Так что, плети языком дальше - это ты умеешь)
 
Сообщения
149
Реакции
29
Ты - не внимателен. Я просил, чтобы ты хоть как то подтвердил свой высер:

"По поводу "лишних" 4 байт - они не из воздуха берутся, а всё равно, занимаются в момент операции, пусть из "мусора", но тоже занимаются! Не такие уж "лишние" и не надо мне о скорости. Когда её не станет хватать, она также начнёт выделяться заново, как и new, становясь "выделенной при более раннем вызове функции или же других функций".

Именно то, что ты тут написал. Не нужно уводить тему в сторону - по-шагово, подтверди свои слова, ссылками из солидных, достоверных источников или описанием. Я понимаю, что в той фигне, что ты написал - отсутствует логика. Но - это же ты написал, верно?

P.S. И еще. Покажи мне упоминание, где я говорил, что для "decl" не выделяется память. По моему, ты еще занимаешься тем, что приписываешь мне того, что я не говорил. То есть - сам придумываешь бред, потом пишешь, что это сказал я, а затем - гневно опровергаешь свой же бред.
 
Последнее редактирование:
Сверху Снизу