Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 2 ПерваяПервая 1 2
Показано с 11 по 13 из 13
  1. #11
    Аватар для 123
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.02.2014
    Сообщений
    93
    Репутация:
    8 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    И давайте не будем сейчас путать "как правильно" с "как мне удобно". Люди спросили именно о первом и ни к чему сейчас полемику устраивать.
    А то, что гораздо легче пойти и ограбить какую-нибудь старушку, чем самому заработать - это да, не поспоришь. Но, опять же, правильно ли это? Не думаю.
    А с каких ты решаешь "как правильно"? Есть два варианта способных на жизнь, и какой из них "правильный" - каждый решает для себя сам. Ты сейчас утверждаешь "как тебе удобнее" - поэтому твои слова, ничем не отличаются от моих слов.

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Выше сказано лишь то, что кто-то не разбирается в поставленном вопросе и делает из этого какие-то выводы (особенно забавно читать про "захлёбывание" было). Про все "крупные геймплеи" говорить бессмысленно, ибо достаточно взглянуть на остальной код, чтоб понять как они написаны (и речь не о том, что авторы плохие и написали всё плохо, а о том, что эти скрипты начинали писаться очень давно и тогда о подобном особо не думали (чтоб это понять, достаточно лишь на официальный форум зайти и почитать темы ~2010 года. Там и stock быстрее pubic, и массивы лучше объявлять в 512 ячеек. а не 1024, ибо это оптимизированнее, и много всего ещё весёлого, от чего потом долгое время избавлялись на этом форуме). Не всегда "крупное" означает "хорошо написанное". Смотреть нужно не на написанные моды, а на теорию, в которой объясняется принцип работы. И уже исходя из этого делать выводы). А тебя я хочу поздравить с тем, что ты потратил в 3 раза больше памяти (ну или сколько у тебя массивов) и получил из этого ровным счётом ни-че-го хорошего. Ну кроме упоения своей лени.
    Какие к черту в 3 раза больше памяти? Добавление памяти напрямую в сегмент данных, эквивалентно добавлению памяти к стэку. Я не потрачу лишней памяти. Лишняя память будет уходить в твоем случае (по скольку память придется выделять под каждую новую букву). А память из стэка будет более рациональна использована.
    Какие к черту "старые моды"? В старых модах, наоборот таки, использовался твой вариант с локальным массивом на все случае жизни, только они, как правило, ничего не считали и выделяли везде 256 ячеек. Я говорю про современные моды, сегодняшних гигантов, открой исходники гамбита и что мы там увидим? Мой вариант, который я предлагал выше:

    PHP код:
    new 
        
    g_small_string                    256 ],
        
    g_string                        1024 ], 
        
    g_big_string                    2048 ]; 
    Конечно, тут абсурдная трата памяти, но чем не вариант.

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Серьёзно. Ты тут не на сервер поиграть зашёл, а пишешь скрипты. И "тяп-ляп" делать не получится. Очень многое в программировании придумано для того, чтоб тебя обезопасить от лишних ошибок. Тот же Pawn, на котором ты пишешь, для того и был придуман.
    И никто не называет это главным плюсом. Используя локальные массивы, ты, как минимум:
    1) Не тратишь лишнюю память в сегменте данных (а стэк, я напомню, является лишь частью этого сегмента данных и выделенная под стэк память никуда не исчезнет, если вы не будете его использовать)
    2) Делаешь код логичнее и читабельнее (по инициализации видно, что дальше в коде используется массив на такое-то количество ячеек)
    3) Как я уже писал ранее, избавляешься от возможности допустить ошибку (мной описанный случай - не единственный. Так же можно не обнулить массив, например, где-нибудь в цикле, в котором идёт форматирование и на выходе получить кашу из текста при многократном использовании кода). В перспективе это сэкономит в разы больше времени, нежели если ты будешь тратить на подсчёт и объявление этого массива
    Не буду говорить лишних слов, просто прокомментирую "плюсы" которые ты назвал:

    1) А стэк не находится в сегменте данных? Ты тратишь такую же память сегмента данных, только выделенную под стэк, при этом потратишь еще больше, добавляя памяти в стэк. И кажется, я уже об этом говорил. На всякий случае повторю, что способ с локальных массивами в итоге потратит намного больше памяти, чем 2 - 3 массива на все случае. Думаю говорить почему не нужно, да?
    2) Когда код засорен инициализацией нового массива при каждом формате - такая себе логичность и читабельность. А если у тебя есть выделенный под формат отдельный массив, и назван подобающе - ты сразу понимаешь почему и зачем. И для этого не нужно овер999 массивов в одном участке кода.
    3) Если ты единственный разработчик геймплея - еще один сомнительный "плюс", если разработчиков много - я говорил выше, что в таких модах нужно писать автономные участки кода, что бы скриптеру не приходилось собирать одну систему из всего мода. Но таких модов нет, ведь все моды пишутся "для себя", как правило, одним человеком.

    Цитата Сообщение от DeimoS Посмотреть сообщение
    А теперь прочти тему до конца, если не понимаешь как работают эти самые массивы, и пойми, что если ты не создашь однажды массив в 4к ячеек, ничто не "захлебнётся". Хотя, если судить по написанному тобой, складывается впечатление, что ты не очень сильно паришься по поводу того, как написан твой код и какова его структура. С таким подходом да, у тебя там всё рано или поздно захлебнётся.
    Да и повторю ещё раз: стэк - тот же глобальный массив. От того, что ты увеличишь его, ничего не изменится и хуже не станет. Уж лучше прибавить немного к стэку и использовать прошлые 4к ячеек, что были в нём, чем создавать ещё один массив, выделяя дополнительные 4к ячеек.
    На минуту отвлекусь и замечу, что здесь ты все правильно сказал, что разницы про использование методов не будет, а дальше ты говорил абсурдные вещи. Довольно странно. Но опять же, замечу в третий раз, что твой способ в итоге потратит больше памяти, нежели мой. причем разница будет существенная, но сейчас не об этом. "захлебнеться" я сказал потому, что в таком моде через каждую строчку будет инициализироваться очередной массив, чтобы, например, отправить в чат "Приветствую тебя на моей сервера ...".

  2. #12
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от 123 Посмотреть сообщение
    А с каких ты решаешь "как правильно"? Есть два варианта способных на жизнь, и какой из них "правильный" - каждый решает для себя сам. Ты сейчас утверждаешь "как тебе удобнее" - поэтому твои слова, ничем не отличаются от моих слов.
    Решаю не я, а документация и логика, которую вложили в реализацию стэка и кучи. Тебе уже дали глобальный массив и позволили удобно резервировать отдельные его части под свои нужды, а ты берёшь и лепишь ещё один массив, делая всё то же самое, только вручную, решая все проблемы, что за тебя уже решили, прописав логику стэка. Вот отсюда и выходит, что мой способ является "правильным", не?
    А то, что вариант с глобальными переменными имеет право на жизнь и поддерживается определённым числом людей, не говорит о том, что он правильный.




    Лолчто?
    Цитата Сообщение от 123 Посмотреть сообщение
    Какие к черту в 3 раза больше памяти? Добавление памяти напрямую в сегмент данных, эквивалентно добавлению памяти к стэку.
    Только вот в случае со стеком ты сначала должен заполнить выделенную память (что в реалиях сампа сделать не очень-то легко, если ты осмысленно пишешь код), а уже потом речь пойдёт про выделение новой. В твоём же случае ты и стэк оставляешь, и выделяешь новую память для своих нужд, за которой потом придётся присматривать, дабы вовремя обнулять и тому подобное.

    Цитата Сообщение от 123 Посмотреть сообщение
    Я не потрачу лишней памяти.
    Ну вот скинь результаты компиляции твоего скрипта. И посмотрим сколько стэка у тебя весит мёртвым грузом

    Цитата Сообщение от 123 Посмотреть сообщение
    Лишняя память будет уходить в твоем случае (по скольку память придется выделять под каждую новую букву). А память из стэка будет более рациональна использована.
    Под какую каждую новую букву?
    Ну а про рациональное использование я выше написал: скинь результат компиляции своего скрипта и посмотрим как рационально ты используешь её.




    Цитата Сообщение от 123 Посмотреть сообщение
    Какие к черту "старые моды"? В старых модах, наоборот таки, использовался твой вариант с локальным массивом на все случае жизни, только они, как правило, ничего не считали и выделяли везде 256 ячеек. Я говорю про современные моды, сегодняшних гигантов, открой исходники гамбита и что мы там увидим? Мой вариант, который я предлагал выше:

    PHP код:
    new 
        
    g_small_string                    256 ],
        
    g_string                        1024 ], 
        
    g_big_string                    2048 ]; 
    Конечно, тут абсурдная трата памяти, но чем не вариант.
    Эмм, а что, твой гамбит был на прошлой неделе написан за пару часов? -_-
    И ты лишь подтвердил мои слова


    Цитата Сообщение от 123 Посмотреть сообщение
    1) А стэк не находится в сегменте данных? Ты тратишь такую же память сегмента данных, только выделенную под стэк
    Разница лишь в том, что:
    1) Память под стэк в любом случае будет выделена: используешь ты её или нет (можно, конечно, уменьшить размер стэка, но... перейдём ко второму пункту)
    2) В стэке уже заложена логика обработки данных (очищение памяти после использования, например) и исправлено множество проблем (зона видимости переменных)
    Создавая глобальные массивы, ты создаёшь тот же самый стэк, только перекладываешь на свою голову контроль за содержимым массивов. Что ты этим выиграешь?
    Чуть меньше символов нужно будет писать? Да. Только взамен тебе придётся самостоятельно следить за собой, дабы не допустить те ошибки, что я в предыдущих сообщениях описывал. И потом отлавливать баги.
    Твой вариант удобен только при оценке на короткий промежуток времени. В перспективе твой вариант лишь больше проблем создаст и не более того.

    Цитата Сообщение от 123 Посмотреть сообщение
    при этом потратишь еще больше, добавляя памяти в стэк
    Да что ты привязался к этому добавлению? Ты сначала заполни стэк, а потом уже добавляй. Да и каким боком я потрачу больше-то? Иди и разберись как работает стэк, прежде чем писать такой бред.

    Цитата Сообщение от 123 Посмотреть сообщение
    И кажется, я уже об этом говорил. На всякий случае повторю, что способ с локальных массивами в итоге потратит намного больше памяти, чем 2 - 3 массива на все случае. Думаю говорить почему не нужно, да?
    Кажется, нет. А вот я, кажется, выше уже показывал пример того, как стэк обрабатывает 3 массива по 1000 ячеек, которые расположены в разных блоках кода. Почитай, просвятись.

    Цитата Сообщение от 123 Посмотреть сообщение
    2) Когда код засорен инициализацией нового массива при каждом формате - такая себе логичность и читабельность. А если у тебя есть выделенный под формат отдельный массив, и назван подобающе - ты сразу понимаешь почему и зачем. И для этого не нужно овер999 массивов в одном участке кода.
    Как раз таки тебе сразу видно что и откуда идёт. И если тебе нужно будет вырезать какой-то кусок кода, ты можешь вырезать его здесь и сейчас, а не выискивать его куски по всему скрипту.
    Да и я выше уже описывал проблему, которая связана с твоим одиночным глобальным массивом. И эта проблема связана не с тем, что над скриптом работает много людей, а из-за банальной человеческой невнимательности.



    Цитата Сообщение от 123 Посмотреть сообщение
    На минуту отвлекусь и замечу, что здесь ты все правильно сказал, что разницы про использование методов не будет, а дальше ты говорил абсурдные вещи. Довольно странно. Но опять же, замечу в третий раз, что твой способ в итоге потратит больше памяти, нежели мой. причем разница будет существенная, но сейчас не об этом. "захлебнеться" я сказал потому, что в таком моде через каждую строчку будет инициализироваться очередной массив, чтобы, например, отправить в чат "Приветствую тебя на моей сервера ...".
    О каком существенном потреблении памяти идёт речь? -_- Ты что курил? Для начала изучи то, как работает стэк (хотя в первых сообщениях я и так всё описывал. И даже из тех моих объяснений становится понятно, что ты пишешь чушь), прежде чем писать подобный бред. Или же покажи что именно ты имеешь ввиду и посмотрим насколько твои суждения верны
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #13
    Аватар для encoder
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.01.2018
    Сообщений
    2
    Репутация:
    0 ±
    Цитата Сообщение от 123 Посмотреть сообщение
    Какие к черту в 3 раза больше памяти? Добавление памяти напрямую в сегмент данных, эквивалентно добавлению памяти к стэку. Я не потрачу лишней памяти. Лишняя память будет уходить в твоем случае (по скольку память придется выделять под каждую новую букву). А память из стэка будет более рациональна использована.
    Какие к черту "старые моды"? В старых модах, наоборот таки, использовался твой вариант с локальным массивом на все случае жизни, только они, как правило, ничего не считали и выделяли везде 256 ячеек. Я говорю про современные моды, сегодняшних гигантов, открой исходники гамбита и что мы там увидим? Мой вариант, который я предлагал выше:

    PHP код:
    new 
        
    g_small_string                    256 ],
        
    g_string                        1024 ], 
        
    g_big_string                    2048 ]; 
    Конечно, тут абсурдная трата памяти, но чем не вариант.
    Мод Гамбита, конечно, функционален, но он далек от совершенства. Не стоит брать с него пример, ибо это было далеко не лучшее решение использовать глобальные переменные. Парадокс в том, что ты не можешь избавиться от выделенной памяти кучи. Следовательно, если ты не используешь её, то она никуда от этого не исчезнет, а сегмент данных, из-за переменных выше, попросту расширится.
    Последний раз редактировалось encoder; 29.07.2018 в 15:19.

 

 
Страница 2 из 2 ПерваяПервая 1 2

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

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