Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 20
  1. #1
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,610
    Репутация:
    2103 ±

    Pawn compiler (3.10)

    Модифицированная версия компилятора Pawn с исправлением множества багов.

    Наиболее примечательные баги, которые были исправлены:
    • Ошибка на строках кода длиннее 511 символов (лимит увеличен до 4095).
    • Падение компилятора при использовании #emit sysreq.c, если указанная функция не использовалась ранее (с некоторых пор баг снова стал проявляться, однако новый патч #157 уже ждёт принятия).
    • Ошибка при использовании строк в тернарных выражениях.
    • Падение компилятора при использовании #emit call.
    • Падение компилятора из-за неправильного названия инструкции в #emit.
    • Условная компиляция (#if/#elseif/#else/#endif) не работала с директивой #emit.
    • Ошибка при передаче глобальной переменной в функцию до определения функции, из-за которой компилятор принимал переменную за неиспользуемую и удалял её из файла .amx (#131).


    Нововведения:
    • Добавлен ключ командной строки "-R", использование которого включает отображение отчёта о находящихся рекурсиях в скрипте (#121).

    • Добавлена поддержка отрицательных чисел и чисел с плавающей запятой в #emit (#128, #133).

    • Реализована возможность ограничивать видимость перечисления в пределах одного файла (удобно при создании инклудов).
      Пример:
      PHP код:
      static enum eMyEnum
      {
          
      myEnumFieldA,
          
      myEnumFieldB,
          
      myEnumFieldC
      }; 
    • Убрана автоматическая защита от повторного подключения включаемых файлов. Это было сделано из-за различий в работе такой защиты на разных ОС.
      Данную защиту можно включить, активировав режим совместимости с помощью флага "-Z" или директивы #pragma compat.

    • Новые встроенные константы:
      • __line - номер текущей строки в исходном файле;
      • __PawnBuild - номер текущего билда компилятора;
      • __compat - флаг режима совместимости: 1, если включена компиляция в режиме совместимости (с ключом -Z), иначе 0;
      • __file - содержит строку с названием текущего исходного файла (например, "main.pwn" или "my_include.inc");
      • __date, __time - содержат дату и время компиляции соответственно (время запуска компилятора).


    • Директива #pragma compat позволяет активировать режим совместимости, в котором включена автоматическая защита от повторного подключения файлов.

    • Добавлена возможность показывать предупреждающие сообщения с помощью директивы #warning, по аналогии с уже существующей директивой #error, но без прерывания компиляции:
      Пример:
      PHP код:
      #warning Эта строка будет выведена в отчёте компилятора 
      Результат:
      warning 237: user warning: Эта строка будет выведена в отчёте компилятора

    • Также реализована многофункциональная директива #pragma warning, с помощью которой можно отключать предупреждения компилятора (#pragma warning disable <номер>), а также запоминать/восстанавливать состояние активации предупреждений (#pragma warning push/pop).
      Пример:
      PHP код:
      #warning Эта строка будет выведена в отчёте компилятора

      #pragma warning push // Запоминаем состояние предупреждений
      #pragma warning disable 237 // Отключаем все пользовательские предупреждения (код 237)
      #warning Эта строка выведена не будет
      #pragma warning pop  // Восстанавливаем прежнее состояние

      #warning Эта строка тоже будет выведена 
      Результат:
      warning 237: user warning: Эта строка будет выведена в отчёте компилятора
      warning 237: user warning: Эта строка тоже будет выведена

    • Директива #pragma naked отключает предупреждения вида "function must return a value". Отличие от #pragma warning disable в том, что #pragma naked действует только в пределах одного файла.
      Данная возможность может пригодиться при использовании #emit retn. Добавление return 1 в таких случаях тоже скроет предупреждение, но приведёт к генерации неиспользуемого (недостижимого) байткода.

    • Добавлена прогрессивная инициализация для двухмерных массивов.
      Пример (взято отсюда):
      PHP код:
      new a[5][10] = {{012, ...}, {024, ...}, ...}; 
      В полной записи данный массив будет выглядеть так:
      PHP код:
      new a[5][10] = {
          {
      012,  3,  4,  5,  6,  7,  8,  9},
          {
      024,  6,  8,  1012141618},
          {
      036,  9,  121518212427},
          {
      048,  12162024283236},
          {
      051015202530354045}
      }; 
    • Также реализована возможность объявления четырёхмерных массивов (ранее был лимит в 3 измерения).
      Пример:
      PHP код:
      new arr[3][1][2][3] =
      {
          { { {  
      1,  2,  }, {  4,  5,  } } },
          { { {  
      7,  8,  }, { 101112 } } },
          { { { 
      131415 }, { 161718 } } }
      }; 

    Скачать: https://github.com/Zeex/pawn/releases
    Исходный код на GitHub: https://github.com/Zeex/pawn

    Над модификациями работали: Zeex, YashasSamaga, VVWVV, ziggi, Slice, Misiur
    Источники информации: What's new, Known compiler bugs
    Статью подготовил: Daniel_Cortez

    Отдельная благодарность ziggi за описания некоторых ошибок и нововведений.

    Специально для Pro-Pawn.ru
    Копирование данной статьи на других порталах без разрешения автора запрещено!
    Последний раз редактировалось Daniel_Cortez; 24.05.2013 в 20:15.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  2. 4 пользователя(ей) сказали cпасибо:
    HarrWe (15.07.2016)Osetin (24.05.2013)Ruskadance (23.06.2013)vovandolg (24.03.2017)
  3. #2
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    984
    Репутация:
    668 ±
    v3.10.1
    Build 1

    Начиная с этого релиза, в версии компилятора располагается номер сборки вместо даты, то есть "1" в "3.10.1" означает "build 1". Номер сборки будет увеличиваться с каждым релизом.

    Изменения относительно предыдущей версии:
    • Исправлена ошибка при передаче глобальной переменной в функцию до определения функции, что вызывало удаление переменной из AMX файла как неиспользуемую (#131)
    • Добавлена опция -R использование которой включает отображение отчёта о находящихся рекурсиях в скрипте (#121)
    • Добавлена поддержка отрицательных чисел и чисел с плавающей запятой в #emit (#128, #133)
    • Добавлена константа __PawnBuild которая содержит номер сборки текущей версии компилятора (#132)


    https://github.com/Zeex/pawn/releases

  4. #3
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,610
    Репутация:
    2103 ±
    Ещё с прошлой недели понемногу готовлю обновление для сей статьи - сегодня-завтра собираюсь закончить, благо появилось свободное время. Не против, если использую часть твоего текста?

    UPD: Буквально пару минут назад внесён коммит, добавляющий константы __file, __date и __time.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  5. #4
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    984
    Репутация:
    668 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Не против, если использую часть твоего текста?
    Конечно не против.

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    UPD: Буквально пару минут назад внесён коммит, добавляющий константы __file, __date и __time.
    О, это довольно полезно.

  6. #5
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,610
    Репутация:
    2103 ±
    Обновил статью. Знаю, что обещал ещё месяц назад; личные обстоятельства внесли свои коррективы.
    По поводу самой статьи - вполне возможно, что упустил что-нибудь, особенно на фоне того, что у меня сейчас 2 часа ночи. Дайте знать, если заметили какой-нибудь недочёт или ошибку.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  7. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,763
    Репутация:
    1456 ±
    Добавлена возможность выводить пользовательские ошибки с помощью директивы #error.
    Так это же, вроде, и в "дэфолтном" компиляторе есть, не?
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

  8. #7
    Аватар для Alpano
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.02.2017
    Сообщений
    101
    Репутация:
    13 ±
    recursion detected: function 40000004!=40000004 directly calls itself
    recursion detected: function 40000004/0 directly calls itself
    recursion detected: function 40000004*0 indirectly calls itself:
    40000004*0 <- AntySH <- 40000004*0
    recursion detected: function -40000004 indirectly calls itself:
    -40000004 <- GetCoordBonnetVehicleEx <- -40000004
    recursion detected: function AddOshive indirectly calls itself:
    AddOshive <- UpdDBM <- AddOshive
    ...
    И как понять где рекурсия?)
    p.s. и ещё, функции AddOshive и UpdDBM ОБСАЛЮТНО не связаны... почему на них может ругаться?
    Код:
    contact's -  (IfSkype)?(Alpano.):(vk.com/alpano)
    MyProject:
    Drift.or.Die

    Ленивые всё делают быстро, чтобы поскорее избавиться от работы.
    И делают качественно, чтобы потом не переделывать.

  9. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,763
    Репутация:
    1456 ±
    Забавно...
    Должно быть что-то типа такого:
      Открыть/закрыть
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

  10. #9
    Аватар для VVWVV
    Проверенный

    Статус
    Онлайн
    Регистрация
    09.07.2015
    Сообщений
    589
    Репутация:
    281 ±
    Падение компилятора при использовании #emit sysreq.c, если указанная функция не использовалась ранее.
    Она до сих по не исправлена (я тестировал версию из мастер-ветки), поэтому буквально десять дней назад я отправил PR с исправлением, который до сих пор не приняли.

  11. #10
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    984
    Репутация:
    668 ±
    Цитата Сообщение от Alpano Посмотреть сообщение
    И как понять где рекурсия?)
    p.s. и ещё, функции AddOshive и UpdDBM ОБСАЛЮТНО не связаны... почему на них может ругаться?
    Покажи код.

 

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

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

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

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

Метки этой темы

Ваши права

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