Вверх ↑
Разработчик
Ответов: 4697
Рейтинг: 426
#1: 2014-06-23 21:26:51 ЛС | профиль | цитата
Galkov, мне кажется, что выжимать максимум производительности из MathParseEx не стоит, все же когда нужен максимум, тогда уже есть готовый FastMathParse (если, конечно, не зайдет речь о замене FastMathParse на MathParseEx). Поэтому склоняюсь к текущему варианту, где программа и стек реализованы отдельными классами. Фактически, если я буду переписывать классы на переменные и ручную работу с ними, то я начну заниматься микрооптимизациями, которые на практике вообще за меня будет решать компилятор (заинлайниванием вызовов функций).
А вот расширить классы для оптимизации отдельных операций (например, не гонять переменную со стека и обратно) - это можно.
Galkov писал(а):
НО, использовать два функциональных вызова, плюс мухобойный Move, чтобы прочитать в Run-Time всего ОДЫН байт -- это же полный беспредел

Это, пожалуй, верная мысль Read/WriteBinary оставить на случай строк, а остальные R/W переписать на прямую работу с указателями на конкретные значения. И тогда Move не потребуется.
По поводу алгоритма - так до конца и не получилось понять, где мы резервируем, где режем лишнее, поэтому пришла следующая мысль: если операнду слева пришла константа, то он сразу резервирует в программе место под CmdPush, а потом, в конце, когда уже понятно, константное ли выражение, либо оставлять все, как есть (код записан в TProgram правильно), либо смещать позицию в программе обратно, тем самым как бы стирая CmdPush (и следующей записью перезаписывая его окончательно).
карма: 10
0