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

    Статус
    Оффлайн
    Регистрация
    30.12.2015
    Сообщений
    24
    Репутация:
    2 ±

    Работа с большими строками

    Доброго дня.Вопрос следующий:
    PHP код:
    stock ShowDialogRegister(playerid)
    {
        static const 
    text_box_register[] =
            
    "{ffffff}Добро пожаловать на сервер Atlant Role Play!\n"\
            
    "{ffffff}Ваш аккаунт %s не найден в нашей базей данных\n\n"\
            
    "Пройдите процесс регистрации\n"\
            
    "Введите пароль\n\n"\
                    
    "Максимальная длина пароля - 15 символов";
        new 
    string[sizeof(text_box_register) - MAX_PLAYER_NAME 1];
        
    format(stringsizeof(string), text_box_registerPlayerInfo[playerid][Name]);
        
    ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT, !"{1976D2}Регистрация"string, !"Далее", !"Отмена");

    как можно оптимизировать этот код?Да и в целом, как работать с большими строками?

  2. #2
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Никак. Что, Вы тут собрались оптимизировать?
    Гонцы за макросекундами.

    Если строка будет не вмешаться (Около 500 символов вмещает компилятор. Точного значение не скажу.)
    Воспользуйтесь методом от Daniel Cortez
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  3. 2 пользователя(ей) сказали cпасибо:
    Desulaid (05.01.2016) InCorrect (05.01.2016)
  4. #3
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Если функция вызывается один раз, то лучше код напрямую брать (не stock)

  5. #4
    Аватар для InCorrect
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.12.2015
    Сообщений
    24
    Репутация:
    2 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Никак. Что, Вы тут собрались оптимизировать?
    Гонцы за макросекундами.

    Если строка будет не вмешаться (Около 500 символов вмещает компилятор. Точного значение не скажу.)
    Воспользуйтесь методом от Daniel Cortez
    А можно ли как-то сократить размер выделяемой памяти?На вызов функции выделяется порядком 740 байт, если учесть планку в 16384 байт, то значение весьма впечатляет.

    Цитата Сообщение от Untonyst Посмотреть сообщение
    Если функция вызывается один раз, то лучше код напрямую брать (не stock)
    Функция вызывается порядком 5-ти раз

    - - - Добавлено - - -

    И следом вопрос
    А, что будет если попытаться обойти баг формата во время сжатия строчек?По результатам компиляции - памяти выделяется на треть меньше.Да и в игре вроде бы все работает на отлично

    PHP код:
        new string[55], two_string[MAX_PLAYER_NAME];
            
    // размер был взят произвольно
        
    string = !"{ffffff}Добро пожаловать на сервер Atlant Role Play!\n";
        
    strcat(string"{ffffff}Ваш аккаунт {64dd17} ");
        
    format(two_stringsizeof(two_string), "%s"PlayerInfo[playerid][Name]);
        
    strcat(stringtwo_string);
        
    strcat(string"{ffffff} не найден в нашей базей данных\n\n");
        
    strcat(string"Пройдите процесс регистрации\n");
        
    strcat(string"Введите пароль\n\n");
        
    strcat(string"Максимальная длина пароля - 15 символов");
        
    ShowPlayerDialog(playerid0DIALOG_STYLE_INPUT, !"{1976D2}Авторизация"string"Вход""Отмена"); 
    Функции format и printf не умеют правильно работать с упакованными строками (как в форматной строке, так и в форматируемых параметрах).
    Что не так уж и удивительно, если учесть, что к этим функциям прикасался куй.

  6. #5
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    1. Более ваш код оптимизировать нельзя, но, однако можно «химичить» с ассемблером, но это вряд ли что-то изменит.
    2. Второй предложенный вариант действительно меньше занимает памяти, ведь функция strcat превращает строку в «упакованный» вид, но, однако вы вызываете большое количество функций, что не очень рационально.

    Вывод: Ваш первый вариант будет на много производительнее, чем второй.

  7. Пользователь сказал cпасибо:
    InCorrect (05.01.2016)
  8. #6
    Аватар для InCorrect
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.12.2015
    Сообщений
    24
    Репутация:
    2 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    1. Более ваш код оптимизировать нельзя, но, однако можно «химичить» с ассемблером, но это вряд ли что-то изменит.
    2. Второй предложенный вариант действительно меньше занимает памяти, ведь функция strcat превращает строку в «упакованный» вид, но, однако вы вызываете большое количество функций, что не очень рационально.

    Вывод: Ваш первый вариант будет на много производительнее, чем второй.
    А как вообще подсчитывается размер стэка?
    Заметил, что не всегда при создание нового массива изменяется размер стэка.
    Вот например если создавать массив в отдельно выведенном стоке, то размер стэка увеличивается.А если же массив объявить в команде, (dc_cmd) то размер стэка остается не изменным (но опять таки: раз на раз не приходиться.Один раз изменяется, один раз нет


    - - - Добавлено - - -

    Цитата Сообщение от VVWVV Посмотреть сообщение
    1. Второй предложенный вариант действительно меньше занимает памяти, ведь функция strcat превращает строку в «упакованный» вид, но, однако вы вызываете большое количество функций, что не очень рационально.

    Вывод: Ваш первый вариант будет на много производительнее, чем второй.
    А если уменьшить кол-во вызовов функции strcat?

    PHP код:
    new string[55], two_string[MAX_PLAYER_NAME];
            
    // размер был взят произвольно
        
    string = !"{ffffff}Добро пожаловать на сервер Atlant Role Play!\n";
        
    strcat(string"{ffffff}Ваш аккаунт {64dd17} ");
        
    format(two_stringsizeof(two_string), "%s"PlayerInfo[playerid][Name]);
        
    strcat(stringtwo_string);
        
    strcat(string"{ffffff} не найден в нашей базей данных\n\nПройдите процесс регистрации\nВведите пароль\n\nМаксимальная длина пароля - 15 символов");
        
    ShowPlayerDialog(playerid0DIALOG_STYLE_INPUT, !"{1976D2}Авторизация"string"Вход""Отмена"); 

    Я так понимаю, что это ничего не изменит, и продуктивней все также будет первый вариант

  9. #7
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Если вы создаёте сток и не пользуетесь им, то он не «определяется» компилятором (можно посмотреть в ассемблерном листинге), но, однако если вы создаёте паблик (командный процессор состоит из пабликов), то он все равно будет, даже если вы его не будете использовать (также вы можете посмотреть в ассемблерном листинге).



    Цитата Сообщение от InCorrect Посмотреть сообщение
    Я так понимаю, что это ничего не изменит, и продуктивней все также будет первый вариант
    Для того, чтобы ваш вариант был более производительнее вам необходимо «химичить» с ассемблером.
    Последний раз редактировалось VVWVV; 05.01.2016 в 02:31.

  10. Пользователь сказал cпасибо:
    InCorrect (05.01.2016)
  11. #8
    Аватар для InCorrect
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.12.2015
    Сообщений
    24
    Репутация:
    2 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Если вы создаёте сток и не пользуетесь им, то он не «определяется» компилятором (можно посмотреть в ассемблерном листинге), но, однако если вы создаёте паблик (командный процессор состоит из пабликов), то он все равно будет, даже если вы его не будете использовать (также вы можете посмотреть в ассемблерном листинге).

    Большое спасибо.И заключающий вопросик (хоть и не совсем по этой теме), листая форум pro-pawn, частенько замечаю непонятные для себя аббревиатуры. (даже вот взять предыдущий пост с прикрепленным к нему скриншотом) для меня он был во все не понятен; набор буковок да циферок на картинке и таких примеров целая туча (особенно если начать вчитываться в ответы знающих людей).Так вот, собственно вопрос таков: какие бы Вы посоветовали языки программирования (может какую-то литературу для прочтения) что бы можно было элементарно понимать как работает тот же самый компилятор, как лучше реализовать ту или иную функцию, какой код будет более продуктивней и т.д (Проще говоря вывести свои знания на новый уровень)
    P.S Pawn - мой первый язык программирования

    - - - Добавлено - - -

    Парочку таких примеров
    Первый
    Второй
    Третий
    ... и эту цепочку можно продолжать до бесконечности

  12. #9
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Как минимум, большинство таких аббревиатур вы можете разгадать, используя поисковую систему Goggle. Для того, чтобы вывести свои знания на новый уровень требуется знания английского, ибо все нормальные учебники для pawn только на нём. Я бы посоветовал вам прочитать учебники: «Pawn_Implementer_Guide», «Pawn_Language_Guide». Также, посещать разные темы на официальном форуме сампа.

  13. 3 пользователя(ей) сказали cпасибо:
    $continue$ (05.01.2016) InCorrect (05.01.2016) Osetin (05.01.2016)
  14. #10
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Искал я себе книгу: "Чарльз Петцольд: Код. Тайный язык информатики" в бумажном варианте, так и не нашел.
    Хорошая, книга. Но, вряд ли там есть описание работы компиляторов.

    Так же я бы посоветовал: Совершенный код - Стив Макконнелл
    Книга, очень хорошая. Описано большинство алгоритмов. Работа циклов, операторов, etc...



    Pawn - не лучший язык программирования. Изучая его Вы изучаете плохую практику программирования. В Pawn используется методы Си89 (около того).
    Если ради увлечения - то можно изучать Pawn. Если Вы хотите продолжить свою жизнь с "компьютером" - то стоит выбрать, что то потяжелее. Я бы на этот случий посоветовал: Lua, Squirrel, Python, node.js

    И на всем этом можно программировать под SA-MP, конечно надо знать как работает Pawn Virtual Machine (PVM)

    Lua in SA-MP [plugins]

    Squirrel in SA-MP [plugins]
    Жаль, то что под Linux поддержки нет.

    Python in SA-MP [plugins]

    node.js in SA-MP [plugins]



    Но при это всем, надо понимать, что поддержку плагинов вряд ли введут. В случии обновлении серверной части (Обновление SA-MP от разработчиков), Вам придется самостоятельно добавлять функции, который были анонсированы.

    На счёт скринов, циферок, букв: Это assembler. На ранних стадиях разработки - Вам это будет не нужно. Сейчас мало кто пишет assembler, но листинг знать желательно. Почти, все программы переводятся в assembler

    P.S: Читать будет трудно "многабукф"
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  15. 2 пользователя(ей) сказали cпасибо:
    InCorrect (05.01.2016) VVWVV (05.01.2016)
 

 
Страница 1 из 3 1 2 3 ПоследняяПоследняя

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

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

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

Ваши права

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