DeathScore13
пирожок. пирожочек.
- Сообщения
- 734
- Реакции
- 403
Думаю, можно догадаться из названия что я пытаюсь впарить модифицированный SourcePawn компилятор.
Этот проект уже разрабатывался ранее, но для узкого круга пользователей и особо нигде не пиарился. Был заброшен из-за отсутствия времени на исправление краша при оптимизации многомерных массивов с предопределёнными ячейками, из-за чего обновление с добавлением многих вкусных фич так и не было выпущено.
Некоторые из фич что были реализованы не будут добавлены, поскольку не имеют смысла (например переводы, мне кажется ими вообще никто кроме меня не пользовался)
Модификация основана на версии 1.10, но инклуды предоставляются 1.10+ (include_1.10, include_1.11, include_1.12, ...), для выбора которых необходим параметр
Поскольку в этот раз проект нацелен на большую аудиторию, то будет разрабатываться только под Windows для более высокой скорости разработки, к тому же с привязкой к 1 пк.
Также планируется сделать шифрование байт-кода и smx для усложнения взлома/декомпиляции плапгенов.
Прошу обратить внимание на то, что компилятор по умолчанию собирает код практически как дефолтный spcomp, поэтому без параметров им можно пользоваться как обычным. Скорее всего будут добавлены старые объявления прототипов каллбек функций (SourcePawn Transitional Syntax - AlliedModders Wiki) и больше не придётся править старые инклуды для их нормальной работы.
Ценник: 1000 рос. руб.
Пожалуйста, ознакомьтесь с описанием и проголосуйте в опросе, поскольку желание есть, но я не буду тратить на это время, если оно не принесёт никакого профита. Минимальное количество желающих для моих бессонных ночей перед пк: 10.
Этот проект уже разрабатывался ранее, но для узкого круга пользователей и особо нигде не пиарился. Был заброшен из-за отсутствия времени на исправление краша при оптимизации многомерных массивов с предопределёнными ячейками, из-за чего обновление с добавлением многих вкусных фич так и не было выпущено.
Некоторые из фич что были реализованы не будут добавлены, поскольку не имеют смысла (например переводы, мне кажется ими вообще никто кроме меня не пользовался)
1. Поддержка
2. Отсутствие мусора в инклудах (по типу необязательных `SetNTVOptional`, структур динамической загрузки расширений, которые загружает см по умолчанию и проч.);
3. Добавлена возможность перевода ошибок, предупреждений, фатальных ошибок, примечаний и других некоторых сообщений. Параметр
4. Оптимизация: меньше инструкций, мусора в ОЗУ и изменён порядок секций (так, чтобы было ближе прыгать к данным). Параметр
5. Добавлена возможность сломать lysis, web disassembler, smxviewer, decompressor и другие анализаторы smx (возможно не все). Параметр
6. Исправлен захват директив без
7. Добавлена возможность суммирования значений из
8. Расширенные возможности операций с массивами;
9. Расширенные возможности операций с памятью, выделенной под плагин (доступ в любой байт, который может прочесть/записать плагин). Также можно с помощью этих "смещений" сделать что-то типа указателей. Или зашифровать строки из
10. Добавлено изменение глобального символа:
11. Исправлена генерация
12. Добавлено отключение всех предупреждений (
13. Добавлены примечания (
14. Точка с запятой в конце выражений по умолчанию включена;
15. Переработан параметр
16. Если предупреждение отключено и использован параметр
17. Максимальное количество ошибок в одной строке можно изменить параметром
18. Новое отображение (вдохновлено gcc). Можно отключить параметром
19. Добавлены цвета. Можно отключить параметром
20. Исправлен параметр
21. Убрана директория
22. Добавлено описание параметра `-x` (почему-то разрабы не заметили его отсутствия);
23. Добавлено расширение директив через
24. Добавлено магическое преобразование имён из "pubchar + имя" в "имя" (параметр
25. Добавлена видимость
26. Добавлен
27. Для Windows, после выполнения spcomp_mod.exe, приложение ставится на паузу (можно отключить параметром
#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. Оптимизация многомерных массивов с предопределёнными ячейками (
2. Оптимизация высвобождения памяти (
3. Некоторые мелкие оптимизации (
4. Добавлен оператор
5. Добавлен
6. В
7. Добавлена
8. Убран
9. Убрана автоматическая инициализация переменных как
10. Убран автоматический
11.
12. Добавлены объявления нового стиля без автоматической инициализации:
13. Добавлены объявления старого стиля для
14. Убрано высвобождение стека и кучи после
15. Исправлена работа
16. Оптимизированы прыжки в
17. Добавлен
18. Добавлен
19. Можно использовать
20. Добавлена
21. Добавлено комбинирование спецификаторов
22. Добавлен спецификатор
23. Добавлен оператор
-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.
Последнее редактирование: