Как затраты на обработку функции length() в REXX меняются в зависимости от длины строки?
Обновление: я использую:
- uni-REXX (R) Версия 297t
- Open-REXX (TM) Copyright (C) iX Corporation 1989-2002. Все права защищены.
Как затраты на обработку функции length() в REXX меняются в зависимости от длины строки?
Обновление: я использую:
Накладные расходы равны 0. Длина хранится в дескрипторе.
Нил Милстед Автор uni-REXX (без шуток).
Это полностью зависит от реализации. Вы имеете в виду REXX для OS/2, REXX для z/VM, REXX для z/OS, OOREXX для Windows, REXX/400 или Regina?
Ничто в спецификациях языка REXX от IBM не определяет, как функция реализована под обложками, это может быть O (N), если вы сканируете строку, или O (1), если длина хранится где-то вместе со строкой.
Если это действительно важно, лучше всего проверить с помощью тестового кода, чтобы увидеть, имеет ли значение длина.
Я не уверен. В свое время я написал несколько Rexx, но у меня никогда не было проблем с производительностью функции length(). То, как это масштабируется, вероятно, даже зависит от вашей реализации парсера Rexx.
Я бы написал сценарий Rexx, который умножает 10 000 вызовов «length()» на 10-символьную строку, затем на 100-символьную строку, а затем на 1000-символьную строку.
Нанесение полученных результатов на график даст вам приблизительное представление о том, как снижается производительность.
Сказав все это, я предполагаю, что снижение производительности не более чем линейно, как в O (n). (См. http://en.wikipedia.org/wiki/Big_O_notation)
Это зависит от языковой реализации. Прошло много времени с тех пор, как я написал REXX, на самом деле я написал AREXX (реализация Amiga), и это было 15 лет назад. :-)
Вы можете написать свою собственную тестовую процедуру. Создавайте строки возрастающей длины и измеряйте время, необходимое для получения length(), с помощью высокопроизводительного таймера. Если вы храните время и длину строк в текстовом файле, разделенном запятыми, вы можете построить его с помощью gnuplot. . И тогда вы очень четко увидите, как он масштабируется.
Редактировать: я должен был сначала проверить ответ Рольфа, так как он написал более или менее то же самое. :-)
Я могу говорить о версиях IBM Mainframe, версии Classic Rexx для OS/2 и любых реализациях Object Rexx. Длина хранится в дескрипторе строки, поэтому накладные расходы не зависят от длины строки.