Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7
  1. #1
    Аватар для Paradox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.06.2015
    Адрес
    Запорожье
    Сообщений
    117
    Репутация:
    1 ±

    Проверка из dc_kickfix

    Доброго времени суток, в общем в inc dc_kickfix заметил такую вот проверку..
    PHP код:
    if(== IsPlayerConnected(playerid))
        return 
    0
    И почему не написать так:
    PHP код:
    if(!IsPlayerConnected(playerid))
            return 
    0
    в общем в чем разница и почему ровняется именно нулю?

  2. #2
    Аватар для 20th century
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.11.2019
    Адрес
    St. Petersburg
    Сообщений
    12
    Репутация:
    2 ±
    Разницы никакой нет, проверка в обоих случаях одинакова. Скорее у автора свой стиль написания кода.

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

    Статус
    Оффлайн
    Регистрация
    08.06.2015
    Адрес
    Запорожье
    Сообщений
    117
    Репутация:
    1 ±
    Цитата Сообщение от 20th century Посмотреть сообщение
    Разницы никакой нет, проверка в обоих случаях одинакова. Скорее у автора свой стиль написания кода.
    Понял, спасибо большое

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

    Статус
    Оффлайн
    Регистрация
    01.09.2019
    Сообщений
    121
    Репутация:
    26 ±
    есть небольшая разница, если вызывать отрицания, то генерируется на одну инструкцию больше:

    PHP код:
        // отрицание
        
    load.s.pri fffffffc
        not
        jzer 0

        
    // простое сравнение с нулем
        
    load.s.pri fffffffc
        jnz 0 
    а, равняется нулю, потому что проверка идет на не подключенного игрока
    Последний раз редактировалось tnc; 30.01.2021 в 04:40.

  5. 2 пользователя(ей) сказали cпасибо:
    oukibt (11.02.2021) Paradox (30.01.2021)
  6. #5
    Аватар для Paradox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.06.2015
    Адрес
    Запорожье
    Сообщений
    117
    Репутация:
    1 ±
    Цитата Сообщение от tnc Посмотреть сообщение
    есть небольшая разница, если вызывать отрицания, то генерируется на одну инструкцию больше:

    PHP код:
        // отрицание
        
    load.s.pri fffffffc
        not
        jzer 0

        
    // простое сравнение с нулем
        
    load.s.pri fffffffc
        jnz 0 
    а, равняется нулю, потому что проверка идет на не подключенного игрока
    Спасибо за ответ, а как можно проверять подобный код, есть мануал?

  7. #6
    Аватар для 20th century
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.11.2019
    Адрес
    St. Petersburg
    Сообщений
    12
    Репутация:
    2 ±
    В pawn.cfg добавить ключ -a и скомпилировать .pwn. В папке появится файл с расширением .asm.

  8. #7
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от Paradox Посмотреть сообщение
    Спасибо за ответ, а как можно проверять подобный код, есть мануал?
    Если об этом и есть какие-то материалы на форумах, то разве что самые минимальные, и это не просто так.

    Цитата Сообщение от 20th century Посмотреть сообщение
    В pawn.cfg добавить ключ -a и скомпилировать .pwn. В папке появится файл с расширением .asm.
    Вот только нельзя судить о производительности кода по одному лишь количеству инструкций, есть и другие факторы (например, наличие лишних переходов, которых можно избежать, даже если ценой большего числа инструкций).

    Это микрооптимизации, которые, во-первых, требуют специфических знаний, и, во-вторых, обычно идут в ущерб читаемости кода. Для их применения нужно иметь базовые представления о внутреннем устройстве интерпретатора (или об архитектуре ЭВМ, ибо интерпретатор AMX - по сути тот же "виртуальный" процессор, максимально приближенный к реальной архитектуре).
    То есть, если, к примеру, есть большое желание сделать что-нибудь необычное, чего нельзя реализовать на простом Pawn (например, как в switchrand()) и до этого вы проходили архитектуру ЭВМ в вузе или технаре - возможно, есть смысл изучить встроенный ассемблер Pawn. Если же нужно просто сэкономить пару инструкций там и тут - это пустая трата времени, на практике разница будет заметна только если код выполняется в цикле на несколько сотен или даже тысяч итераций. Собственно, я использую микрооптимизации в своих инклудах только потому, что делаю эти инклуды не только для себя, но и для других, а потому хочу чтобы мой код добавлял как можно меньше накладных расходов к пользовательскому коду. Естественно, в коде, не предназначенном для паблика, я не стану тратить время на что-то подобное.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  9. Пользователь сказал cпасибо:
    oukibt (11.02.2021)
 

 

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

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

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

Ваши права

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