You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Можно оптимизировать интерпретатор в значительной мере. Сейчас мы парсим бинарный байт код каждый раз перед выполнением (по сути, парсим каждую строку). Нужно делать это один раз (первый и после каждого изменения кода) причем допарсывать можно только ту строку, которая была изменена. Разпарсанная версия будет сохранятся в еще один исполняемый байткод. Он будет состоять из обычного массива той же длины, что и оригинальный байт код, только его элементами будут функции исполнения. Например: 0x0213ffff -> if(v0 < v1) goto 255. Внутри onCondition() мы берем Num.getVarX(), Num.getBits() и т.д. Нужно заранее иметь все варианты onCondition() со всеми вариантами переменных внутри. Варианты можно сгенерировать при старте программы с помощью шаблонов и eval(). Например код:
В результате будет выполнятся скомпилированный шаблон. Он будет значительно быстрее.
Еще можно оптимизировать выполнение кода передав классу Operators ссылки на world, positions и organisms. Тогда, не нужно будет генерировать событие во вне (в Organisms плагин), можно все делать прямо на месте (внутри класса Operators)
Можно оптимизировать интерпретатор в значительной мере. Сейчас мы парсим бинарный байт код каждый раз перед выполнением (по сути, парсим каждую строку). Нужно делать это один раз (первый и после каждого изменения кода) причем допарсывать можно только ту строку, которая была изменена. Разпарсанная версия будет сохранятся в еще один исполняемый байткод. Он будет состоять из обычного массива той же длины, что и оригинальный байт код, только его элементами будут функции исполнения. Например:
0x0213ffff
->if(v0 < v1) goto 255
. ВнутриonCondition()
мы беремNum.getVarX()
,Num.getBits()
и т.д. Нужно заранее иметь все вариантыonCondition()
со всеми вариантами переменных внутри. Варианты можно сгенерировать при старте программы с помощью шаблонов и eval(). Например код:можно заменить на шаблон:
В результате будет выполнятся скомпилированный шаблон. Он будет значительно быстрее.
Еще можно оптимизировать выполнение кода передав классу Operators ссылки на world, positions и organisms. Тогда, не нужно будет генерировать событие во вне (в Organisms плагин), можно все делать прямо на месте (внутри класса Operators)
связано с #135 #90 #92 #67
The text was updated successfully, but these errors were encountered: