Функция upper в cutils.pas компилятора
 Добавлено: 30.05.2022 10:55:56
Добавлено: 30.05.2022 10:55:56Заглянул внутрь исходников компилятора из git и многое там поисследовал/изменил.  Из всего многого пока увидел несколько однозначных моментов.
Только ли на моей машине замена функций преобразования регистра на такие работает быстрее ? Если не только можно на них заменить.
В оригинале там ряд функций в основе ктоторых лежит предзаполненный массив из которого затем выбирается готовое значение.
Для вариантов функций с одним символом выигрышен текущий вариант с предзаполенным массивом, но используются ли эти варианты функций по факту ?
Если нет можно удалить их вообще и переменные/функции предзаполнения.
Однозначнее другое: если не использовать эти функии вообще - совсем быстро. И это там тоже есть.
Несколько массивов можно заранее перевести в верхний регистр и при загрузке компилятора не переводить всякий раз.
Также было использование одного .inc файла даажды в разные пременные первую из которых можно просто удалить.
			Только ли на моей машине замена функций преобразования регистра на такие работает быстрее ? Если не только можно на них заменить.
В оригинале там ряд функций в основе ктоторых лежит предзаполненный массив из которого затем выбирается готовое значение.
Для вариантов функций с одним символом выигрышен текущий вариант с предзаполенным массивом, но используются ли эти варианты функций по факту ?
Если нет можно удалить их вообще и переменные/функции предзаполнения.
Однозначнее другое: если не использовать эти функии вообще - совсем быстро. И это там тоже есть.
Несколько массивов можно заранее перевести в верхний регистр и при загрузке компилятора не переводить всякий раз.
Также было использование одного .inc файла даажды в разные пременные первую из которых можно просто удалить.
- Код: Выделить всё
- function upper(const s : string) : string;
 var
 i : longint;
 begin
 upper := s;
 for i:=1 to length(upper) do
 if (byte(upper[i]) > 96) and (byte(upper[i]) < 123) then Dec(upper[i],32);
 end;
 
 procedure uppervar(var s : string);
 var
 i : longint;
 begin
 for i:=1 to length(s) do
 if (byte(s[i]) > 96) and (byte(s[i]) < 123) then Dec(s[i],32);
 end;
 function lower(const s : string) : string;
 var
 i : longint;
 begin
 lower := s;
 for i:=1 to length(lower) do
 if (byte(lower[i]) > 64) and (byte(lower[i]) < 91) then Inc(lower[i],32);
 end;
