Библиотеки: Библиотека JSON для LLM - страница 4

 

Предполагаю, что в MQL5, из-за принудительной проверки на выход за границы массива, это условие будет выполняться медленнее, чем следующее.

} else if (((с ^ '0') <= 9) || (c == '-')) {
 
Привет @fxsaber,

Чувак, это фантастические предложения. Я очень ценю, что вы нашли время покопаться в исходном коде и указать, где мы могли бы выжать больше производительности.

Ты был абсолютно прав насчет накладных расходов на проверку границ массива в MQL5. Несмотря на то, что g_cc работает быстро, проверки компилятора на безопасность увеличиваются в узком цикле. Я отказался от поиска цифр в таблице и реализовал вашу побитовую проверку ALU (c ^ '0') <= 9 . Это чище и определенно быстрее.

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

Кроме того, я изменил порядок ветвей главного цикла, отдав приоритет строкам ( " ) и числам, что должно помочь в предсказании ветвей процессора, поскольку это самые распространенные лексемы.

Еще раз спасибо за помощь. Библиотека стала значительно лучше благодаря вашему вкладу!

🔗 v3.5.0 уже в продаже: GitHub/Forge

 
Ускорение парсинга на ~10%.
Файлы:
fast_json2.mqh  40 kb
fast_json3.mqh  40 kb