Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Проект переведён на аккаунт группы pawn-lang, которой на данный момент управляют 3 человека: Zeex, Y_Less и YashasSamaga. Также, судя по одному из проектов в группе, в скором времени возможно введение в строй сайта pawn-lang.org.
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Перешел с 3.10.3 на версию от кортеза 3.10.5.
Компиляция было: 8.1 сек.
Компиляция стало: 1.6 сек.
Честно признаться, я в шоке :)
Это ещё не предел, на подходе PR #255 - ускорение компиляции массивов с неоднородными начальными значениями. Лучше всего эффект заметен на больших массивах. Как уже написано в комментарии к тому PR, для инклуда modelsizes.inc время компиляции удалось уменьшить с 13.7 до 0.95 секунд.
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
DeimoS (24.02.2018)
Вышла новая версия 3.10.7.
Скачать: https://github.com/Zeex/pawn/releases/tag/v3.10.7
Изменения:
- Нововведения и багфиксы для оператора emit (#279).
- В варнинг о неиспользуемом идентификаторе добавлена информация о том, где идентификатор объявлен (#252).
Раньше варнинг отображался на самой последней строке в скрипте, из-за чего приходилось самостоятельно искать место объявления переменной.
Пример:
#include <a_samp> new g_var; // test.pwn(3) : warning 203: symbol is never used: "g_var" main(){}- Добавлено больше информации в варнинг о несовпадении тегов (#265).
Пример:
#include <a_samp> PrintInt(x) main() { PrintInt(0.0); // warning 213: tag mismatch: expected tag none ("_"), but found "Float" }- Добавлен новый варнинг для бессмыссленных комбинаций спецификаторов класса (#246).
Примеры:
#include <a_samp> // Знак "..." означает произвольное количество аргументов (например, как в printf()). // Аргументы, передаваемые таким образом, недоступны для изменения стандартными // способами, поэтому спецификатор класса const для них не имеет смысла. PrintInt(const ...) {} main() { // warning 238: meaningless combination of class specifiers (const variable arguments) PrintInt(0); }
#include <a_samp> // "&" означает, что аргумент "x" передаётся по ссылке и функция может косвенно // вернуть значение через этот аргумент, однако атрибут const не позволит // изменить значение переменной, поэтому передача по ссылке бессмысленна. PrintInt(const &x) main() { new val = 0; // warning 238: meaningless combination of class specifiers (const reference) PrintInt(val); }- Улучшена кодогенерация для функций с атрибутом naked (#271).
- Оптимизации для более быстрой компиляции (#255, #269).
Изменения заметны при использовании больших массивов, инициализированных неоднородными значениями. Например, для инклуда modelsizes.inc время компиляции удалось уменьшить с 13.7 до 0.95 секунд.
- Изменена реализация хеш-таблицы из-за проблем с лицензией в предыдущей реализации (#240).
- Версия библиотеки времени выполнения Visual C++ сменена обратно на 2010, что позволит запускать компилятор на более широком спектре систем на базе Windows без требования установки дополнительных библиотек.
В предыдущих версиях добавление хеш-таблицы потребовало перехода на VC++ Runtime 2012, однако с новой реализацией хеш-таблицы (см. выше) данное требование пропало.
- Исправлено необоснованное использование 128 Мб ОЗУ под хеш-таблицу для глобальных символов, кол-во слотов при запуске снижено с 16'777'216 до 16384.
- Исправлены баги, связанные с работой оператора tagof (#245, #274).
Один из кейсов уже обсуждался здесь.
- Исправлены баги, связанные с работой деструкторов (#260).
Да, в Pawn, оказывается, есть деструкторы.
- Исправлены некорректные значения констант __compat и debug при использовании #pragma option (#253).
- Исправлено падение компилятора при вызове функции с более чем 128 аргументами (#298).
- Исправлено падение при использовании #pragma deprecated без указания текста сообщения.
- Исправлено неправильное декодирование аргумента инструкции switch в листингах, выдаваемых дизассемблером (pawndisasm) (#236).
- Исправлен баг в инициализации многомерных массивов, вызывавший падение компилятора в некоторых случаях (#220).
- Исправлено форматирование многострочных сообщений от директив #pragma в выводе компилятора.
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Вышел релиз 3.10.8, состоящий из багфиксов и отмены изменений из предыдущего релиза, нарушаюших совместимость.
Скачать: https://github.com/pawn-lang/compile...es/tag/v3.10.8
Изменения:
- Исправлена обработка пробелов при продолжении строк.
Например, эта строка
new str[] = "Hello \ there";
снова понимается компилятором как "Hello there", а не "Hello there".
- Убрано продолжение строк в однострочных комментариях.
К примеру, следующий код снова будет выдавать ошибку:
// Это комментарий\ и это тоже
- Добавлено исключение к приведённому выше правилу.
Компилятор не выдаст ошибку, если после знака переноса "\" следующая строка начинается с "//".
// Это комментарий\ // и это тоже
Это исключение упрощает комментирование кода, использующего продолжение строк (пример: макросы).
- В варнинг о несовпадении тегов добавлено больше информации.
Вывод компилятора:
Код:warning 213: tag mismatch: expected tags "Float", or none ("_"); but found "File"- Исправлена обработка продолжения строк в препроцессорных сообщениях.
#pragma deprecated Please\ use\ something\ else Func() {} main() { Func(); }
Вывод:
Обратите внимание: в отличие от строк, которым для совместимости было возвращено старое поведение при переносе, здесь знаки переноса заменяются на пробелы.Код:warning 234: function is deprecated (symbol "Func") Please use something else
- Исправлена обработка продолжений в макросах (возвращено старое поведение).
Следующий пример больше не объявляет макрос с названием "MACRO5", а создаёт макрос "MACRO" со значением "5".
#define MACRO\ 5
Последний раз редактировалось DeimoS; 02.07.2018 в 01:50.
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Вышла версия 3.10.9. Как и в прошлый раз, нынешний релиз состоит в основном из багфиксов, но на этот раз есть и пара примечательных нововведений.
Скачать: https://github.com/pawn-lang/compile...es/tag/v3.10.9
Изменения:
- Добавлены подсказки для случаев, когда пользователь сделал опечатку в названии переменных, функций и т.д.
Пример:
new var = 1;
Обратите внимание: после сообщения о необъявленном названии появилось "did you mean "var"?" (пер.: "вы имели в виду "var"?").
Подобные подсказки работают для переменных, констант, функций, меток, автоматонов и состояний, у которых длина названия не меньше 2 символов.
- Добавлена выдача варнингов 214 и 239, связанных с ошибками const-корректности, которые выдаются, когда объявленная на месте использования строка передаётся в функцию, но аргумент-массив не объявлен как const.
#include <a_samp> PrintString(str[]) // warning 214: possibly a "const" array argument was intended: "str" { } main() { // Строка "test" по сути является неизменяемым массивом, но аргумент str // в функции PrintString объявлен без атрибута const. PrintString("test"); // warning 239: literal array/string passed to a non-const parameter }
Чтобы в данном примере компилятор не выдавал варнинг, следует исправить заголовок функции
PrintString(str[])
PrintString(const str[])
Данные предупреждения работают для всех типов функций, кроме public и native, т.к. много варнингов 214 и 239 выдаётся из-за некорректных заголовков функций в инклудах SA-MP (разработчики компилятора выбрали самый простой вариант и отключили варнинги для public и native, ибо глупо надеяться, что Kalcor исправит те баги).
- Исправлено неправильное вычисление результата в цепочках константных (вычисляемых на этапе компиляции) выражений.
Пример:
const SOME_VALUE = 20; if (10 < SOME_VALUE < 30) // Условие никогда не выполнялось, хоть и должно выдавать true- Исправлено падение компилятора при указании необъявленной константы в качестве размера массива.
new arr[10][unk][10]; // Здесь "unk" - название константы, которую забыли объявить- Исправлена ошибка, из-за которой компилятор пытался сгенерировать вызов несуществующего деструктора.
forward operator~(Error:right[], size); // Деструктор объявлен, но не реализован main() { new Error:e; // При уничтожении переменной "e" компилятор сделает вызов несуществующего деструктора }- Дизассемблер (pawndisasm) больше не выводит лишние пробелы после инструкций, не имеющих параметров.
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
bullplex (30.09.2018)
После обновления компилятора до версии 3.10.9, вылезло миллион варнингов типа 214 и 239. Ладно в моем моде, но и в сторонних инклудах типа foreach. И зачем этого было делать? Полезности это не несет.
Эту тему просматривают: 5 (пользователей: 0 , гостей: 5)