spcat

Нужная штука?

  • Мне это не нужно

    Голосов: 10 43.5%
  • Мне это нужно

    Голосов: 10 43.5%
  • Может быть когда-нибудь возможно если Марс будет в Венере

    Голосов: 3 13.0%

  • Всего проголосовало
    23

DeathScore13

пирожок. пирожочек.
Сообщения
734
Реакции
403
Думаю, можно догадаться из названия что я пытаюсь впарить модифицированный SourcePawn компилятор.

Этот проект уже разрабатывался ранее, но для узкого круга пользователей и особо нигде не пиарился. Был заброшен из-за отсутствия времени на исправление краша при оптимизации многомерных массивов с предопределёнными ячейками, из-за чего обновление с добавлением многих вкусных фич так и не было выпущено.

Некоторые из фич что были реализованы не будут добавлены, поскольку не имеют смысла (например переводы, мне кажется ими вообще никто кроме меня не пользовался)
1. Поддержка #emit (справочник: [Справочник] Байт-код SourcePawn);
2. Отсутствие мусора в инклудах (по типу необязательных `SetNTVOptional`, структур динамической загрузки расширений, которые загружает см по умолчанию и проч.);
3. Добавлена возможность перевода ошибок, предупреждений, фатальных ошибок, примечаний и других некоторых сообщений. Параметр -L;
4. Оптимизация: меньше инструкций, мусора в ОЗУ и изменён порядок секций (так, чтобы было ближе прыгать к данным). Параметр -O3;
5. Добавлена возможность сломать lysis, web disassembler, smxviewer, decompressor и другие анализаторы smx (возможно не все). Параметр -B (-O3 автоматически);
6. Исправлен захват директив без # (например #define elseif else if заменял #elseif на #else if);
7. Добавлена возможность суммирования значений из #pragma dynamic <значение>. Параметр -d;
8. Расширенные возможности операций с массивами;
9. Расширенные возможности операций с памятью, выделенной под плагин (доступ в любой байт, который может прочесть/записать плагин). Также можно с помощью этих "смещений" сделать что-то типа указателей. Или зашифровать строки из .data секции. В общем, это предоставляет много возможностей (memory.inc);
10. Добавлено изменение глобального символа: #pragma pubchar '@';
11. Исправлена генерация .lst файла. К сожалению, разрабы очень зарукожопили это, поэтому возможно исправлены не все моменты;
12. Добавлено отключение всех предупреждений (-w 0);
13. Добавлены примечания (#note) и отключение примечаний по номеру и всех (параметр -n);
14. Точка с запятой в конце выражений по умолчанию включена;
15. Переработан параметр -v (тихий режим включает в себя отображение только ошибок и результата компиляции);
16. Если предупреждение отключено и использован параметр -E, то предупреждение не станет ошибкой и проигнорируется;
17. Максимальное количество ошибок в одной строке можно изменить параметром -r;
18. Новое отображение (вдохновлено gcc). Можно отключить параметром -N;
19. Добавлены цвета. Можно отключить параметром -c;
20. Исправлен параметр -h;
21. Убрана директория include по умолчанию, т.к. рассчитано на использование параметра -i;
22. Добавлено описание параметра `-x` (почему-то разрабы не заметили его отсутствия);
23. Добавлено расширение директив через #define. Например: #define #ifndef #if !defined. Можно отключить параметром -f;
24. Добавлено магическое преобразование имён из "pubchar + имя" в "имя" (параметр -m). Например: const int @MaxClients; эквивалентен public const int MaxClients; и в коде читается как @MaxClients или MaxClients;
25. Добавлена видимость this для sizeof;
26. Добавлен self для вызова статических методов внутри методмапа без указания имени методмапа;
27. Для Windows, после выполнения spcomp_mod.exe, приложение ставится на паузу (можно отключить параметром -P).
1. Оптимизация многомерных массивов с предопределёнными ячейками (-O3);
2. Оптимизация высвобождения памяти (-O3);
3. Некоторые мелкие оптимизации (-O3);
4. Добавлен оператор goto (о том как он работает можно почитать в goto.sp);
5. Добавлен break для конструкции switch;
6. В case теперь необязательно использовать составной блок для указания нескольких выражений;
7. Добавлена #pragma syntax <old/middle/new> для регулирования модифицированного синтаксиса (аналог: -s);
8. Убран return 0, если возвращаемое значение не было указано (можно вернуть через -R);
9. Убрана автоматическая инициализация переменных как 0 (параметр -Z);
10. Убран автоматический break в конце case (параметр -S);
11. default в switch можно использовать не только в конце;
12. Добавлены объявления нового стиля без автоматической инициализации: decl int var1;;
13. Добавлены объявления старого стиля для methodmap, enum struct и struct;
14. Убрано высвобождение стека и кучи после break (не выполняемый код);
15. Исправлена работа assert() и exit() (подробнее в features.sp);
16. Оптимизированы прыжки в switch (-O3);
17. Добавлен cast_to(<переменная>, <тип>);, который меняет тип переменной на указанный до следующей смены типа;
18. Добавлен markusage(<переменная>);, который помечает переменную как используемую;
19. Можно использовать ; как пустое выражение (кроме глобальной области);
20. Добавлена #pragma warning(<спецификатор>: <номер>[+/-]; ...) с поддержкой disable, default, error и once (Предупреждение pragma). Код 0 включает в себя все коды предупреждений. Не поддерживает составные блоки (т.е. изменения будут применяться глобально);
21. Добавлено комбинирование спецификаторов stock и public;
22. Добавлен спецификатор stock для methodmap и enum struct;
23. Добавлен оператор ... для элементов switch (case 0...10:).

Модификация основана на версии 1.10, но инклуды предоставляются 1.10+ (include_1.10, include_1.11, include_1.12, ...), для выбора которых необходим параметр -i.
Поскольку в этот раз проект нацелен на большую аудиторию, то будет разрабатываться только под Windows для более высокой скорости разработки, к тому же с привязкой к 1 пк.

Также планируется сделать шифрование байт-кода и smx для усложнения взлома/декомпиляции плапгенов.

Прошу обратить внимание на то, что компилятор по умолчанию собирает код практически как дефолтный spcomp, поэтому без параметров им можно пользоваться как обычным. Скорее всего будут добавлены старые объявления прототипов каллбек функций (SourcePawn Transitional Syntax - AlliedModders Wiki) и больше не придётся править старые инклуды для их нормальной работы.

Ценник: 1000 рос. руб.

Пожалуйста, ознакомьтесь с описанием и проголосуйте в опросе, поскольку желание есть, но я не буду тратить на это время, если оно не принесёт никакого профита. Минимальное количество желающих для моих бессонных ночей перед пк: 10.
 
Последнее редактирование:

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Добавь в опрос третий, не столь однозначный вариант, возможно ты более взвешенно примешь решение о разработке, исходя не только из гарантированного дохода, но и потенциально возможного. Меня, например, очень заинтересовало, но больше хотелось бы 1.11, да и вообще сначала увидеть уже готовый продукт.
Но чтоб не было никакого негатива в случае отказа от покупки, проголосовал, что не нужно.
 

DeathScore13

пирожок. пирожочек.
Сообщения
734
Реакции
403
Добавь в опрос третий, не столь однозначный вариант, возможно ты более взвешенно примешь решение о разработке, исходя не только из гарантированного дохода, но и потенциально возможного.
добавил
Меня, например, очень заинтересовало, но больше хотелось бы 1.11
что в 1.11 завезли такого, чего нет в 1.10? лично я вижу урезанный функционал и новые опкоды. ну максимум завезли sizeof для enum struct, вот только я это реализовал ещё когда его не было в 1.11, поэтому он гарантированно будет присутствовать
да и вообще сначала увидеть уже готовый продукт
к сожалению, я отношусь к типу людей что сначала удаляют из дс архив со старой версией перед тем как залить новую, потом обнаруживают что компилятор крашится при сборке chatmodern, палят в монитор 100500 лет с gdb и недоумением на лице, потом в жизни появляется работа, проблемы, на проект, который ничего не приносит, нет ни сил, ни времени, которое не хочется тратить, поскольку за каждый час ты мог бы заработать где-нибудь в другом месте, чтобы похавать и съехать наконец-то из хостела в квартиру (что произошло только спустя 7 месяцев, но текущими темпами я скорее всего буду вынужден вернуться туда). вопщем как ты наверно уже понял, стабильной версии у меня не осталось. сорсы на пк до которого ехать на автобусе 21 час, да и не хочется возиться с истыканным 100500 раз бельмом, убирая всю ненужную лабуду

а ещё я попытаюсь развеить твои сомнения по поводу малого количества добавленного функционала. если не ошибаюсь, @HolyHender когда-то просил добавить оператор ... для case, что и было сделано. предложения здесь всегда приветствуются

и ещё дс для меня стал не тем местом, где хочется сидеть. поэтому обновления и поддержка будут в телеграме
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
что в 1.11 завезли такого, чего нет в 1.10?
Как минимум переписали компилятор, который стал заметно быстрее (и попутно создали проблем с кодом, который ещё в 1.10 нормально компилился и работал)
Ну и добавился модуль для работы с голосовым чатом (обработка включения/выключения микрофона и ещё, что-то), емнип.
 

DeathScore13

пирожок. пирожочек.
Сообщения
734
Реакции
403
Уточню по поводу шифрования smx и байт-кода. Это 100% будет реализовано, т.к. я уже нашёл способ сделать это в лучшем виде. Не думаю что такое уже когда-либо использовалось или используется, и оно значительно усложняет декомпиляцию (выживут только сильнейшие).
И как бы мне не хотелось обезопасить конечного потребителя, у меня нет времени чтобы проверять ресурсы собранные этим компилятором на бэкдоры, поэтому я принял решение просто отказаться от ответственности.
 
Последнее редактирование:

DeathScore13

пирожок. пирожочек.
Сообщения
734
Реакции
403
Исходя из суммы голосов второго и третьего варианта опроса, я неспеша начинаю заниматься этим проектом. Когда количество голосов за второй вариант достигнет заявленного в первом сообщении, этот проект будет первым в моих приоритетах.

УПД: этот проект теперь в приоритете

Голосование оставлю до релиза, чтобы знать примерное количество пользователей
 
Последнее редактирование:

DeathScore13

пирожок. пирожочек.
Сообщения
734
Реакции
403
Было принято решение не использовать разные папки для инклудов, т.к. это не удобно + не хочется лишних папок, поэтому инклуды взяты из 1.12 и модифицированы под версионность сборки (EvilCryDie чат)
Пример:
SmOsqxu3Byk.jpg
 
Сверху Снизу