Добавлен , опубликован
Программы
Предназначение:
Прочее
Ускоренная версия интерпретатора байт-кода для виртуальной машины JASS'а.
С ним скорость доступа к переменным, функция и нативкам более не зависит от длинны их имен или от их количества.
Также, теперь виртуальная машина следит за всеми ссылками на строки, в том числе и в регистрах со стэком, что позволяет уничтожать ненужные строки.
В будущем, можно также начать удалять неиспользуемые хэндлы, да и их содержимое (точки, группы). Правда, это приведет к несовместимости с оригинальным клиентом и десинхронизациям, если только не использовать мод лишь в одиночной игре или установить его для всех игроков в сетевой игре.
Я не реализовал событие изменения значения переменной, так что карты использующие его несовместимы с этим модом.
Список изменений
  • 2023.04.02
    • Добавил совместимость с модом RedirectCalls.
  • 2023.03.29
    • Оптимизировал работу со стэком, теперь время сортировки упало с 60-ти секунд до 54-ех.
  • 2023.03.28
    • Теперь нативки получают копии строк из аргументов, так что, в случае перевыделения таблицы строк, указатели не сломаются.
    • Теперь алгоритм склеивания строк аналогичен таковому у игры.
    • Исправлены ошибки связанные с нулевыми строками.
    • Теперь система подсчета ссылок учитывает значения в регистрах и стеке. Благодаря этому строки больше не утекают, но производительность просела: время сортировки поднялось с 40-ка секунд до 60-ти.
    • Исправлена моя ошибка, из-за которой локальные переменные не удалялись.
    • Теперь между вызовами функций инициализации глобалок проводится очистка потока, чтобы предыдущие вызовы не мешали следующим.

Замеры производительности

Для оценки скорости сравнивалось время, затраченное на сортировку массива длинною 8192 элемента методом пузырька, содержимое которого было предварительно отсортировано наоборот.
Как видно по таблице, новый интерпретатор справился почти в два раза быстрее, и его скорость не зависит от длинны имен.
К сожалению, после добавления учета ссылок в регистрах и стэке производительность упала.
Быть может, стоит поискать другой способ устранения утечек.
Возможно, падение было бы не столь заметным, если бы игра генерировала более эффективный байт-код.
Стоит подумать над тем, чтобы добавить возможность загрузки заранее скомпилированных инструкций и тогда, если появится альтернативный компилятор, можно будет воспользоваться его работой.
Длинна именВремя без модаВремя с модом
1 символ7836653765
Без изменений8752653947
4 символа9179853799
Время указано в миллисекундах.

Тестовая карта

Можете скачать карту и повторить тест на своих компьютерах.
Для её запуска требуется мод (исходники), добавляющий новые нативки для получения текущего времени и для отключения лимита операций, так как иначе игра прервет поток из-за большого количества выполненых действий.
Смените его расширение на ".mix" и киньте в папку с игрой или воспользуйтесь инжектором.
В свою очередь, мод нуждается в библиотеке для регистрации нативок, она тоже должна присутствовать в папке игры.
Мод с нативками не способен повлиять на новый интерпретатор, так что для тестов воспользуйтесь этой версией, в которой изначально отключены проверки на количество операций.
Список добавляемых нативок
native GetTickCount takes nothing returns integer
native SetOperationLimitEnabled takes boolean state returns nothing
native IsOperationLimitEnabled takes nothing returns boolean
Когда карта загрузится, наберите в чат "-start" и начнется сортировка.
Игра зависнет и то, на сколько это продлится, будет зависеть от силы ядра вашего процессора.

Логические переменные со знаком

При использовании этого мода может произойти десинхронизация.
Я долго не мог найти ошибку в своем интерпретаторе, что не удивительно, ведь искал я совсем не там.
В итоге выяснилось, что нативные функции SaveBoolean и StoreBoolean считают положительные числа истинными, а отрицательные и ноль - ложными.
У оригинальных разработчиков логические переменные равны либо 0 либо 1, а у меня - либо 0 либо -1.
Из-за этого, вышеупомянутые нативки всегда воспринимали мои значения как false, что и приводило к неправильной работе и десинхронизации.
Я сделал небольшой мод (исходники), исправляющий эту ошибку.
Смените расширение файла на ".mix" и киньте его в папку с игрой, после чего можете играть с другими игроками по сети.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
14
11 месяцев назад
Отредактирован IceFog
0
Те, кто уже успел скачать, лучше перекачайте, так как кнопка "скачать" ссылалась на архив с версией без лимита операций (JassAcceleratorLimitless.zip), которая может привести к десинхронизации при игре в картах, в которых поток выполнения jass-скрипта обрывается из-за, например, бесконечных циклов. Разработчик мог не заметить ошибки, а вас выбросит из игры.
5
32
11 месяцев назад
5
IceFog, все продолжаешь делать апграйды вара, с анрайзом что-ли скопирируйтесь и сделайте нам новый сервер для игры в варик со всеми плюшками =)
2
14
11 месяцев назад
2
У меня были мысли о создании проэкта для совместного реверсинга варкрафта, как у майнкрафта есть MCP. Только нужно придумать как это всё оформить.
1
10
10 месяцев назад
1
Автор занимается очень интересными вещами, я думаю им определенно нужно придать больший охват, чтобы они не остались "в столе".
0
9
5 месяцев назад
0
Я сделал небольшой мод (исходники), исправляющий эту ошибку.
Обе ссылки выдают 404 ошибку.
0
14
5 месяцев назад
0
Обе ссылки выдают 404 ошибку.
Поправил, теперь должно скачиваться.
2
14
1 месяц назад
2
Последние новости!
Теперь исходный код доступен для скачивания.
2
22
1 месяц назад
2
IceFog, Спасибо за открытый код, будет интересно потыкаться, да и доверия таким проектам больше!
Чтобы оставить комментарий, пожалуйста, войдите на сайт.