Каковы издержки обработки length () в REXX? - PullRequest
1 голос
/ 15 декабря 2008

Как затраты на обработку функции length () в REXX изменяются в зависимости от длины строки?


Обновление: я использую:

  • uni-REXX (R) Версия 297t
  • Open-REXX (TM) Авторское право (C) iX Corporation 1989-2002. Все права защищены.

Ответы [ 5 ]

3 голосов
/ 28 января 2009

Служебная нагрузка равна 0. Длина сохраняется в дескрипторе.

Нил Милстед Автор uni-REXX (без шуток).

3 голосов
/ 15 декабря 2008

Это полностью зависит от реализации. Вы имеете в виду REXX для OS / 2, REXX для z / VM, REXX для z / OS, OOREXX для Windows, REXX / 400 или Regina?

Ничто в спецификации языка REXX из IBM не указывает, как эта функция реализована под прикрытием, это может быть O (N), если вы сканируете строку, или O (1), если длина хранится где-либо со строкой. 1003 *

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

2 голосов
/ 15 декабря 2008

Я не уверен. Я написал несколько Rexx в свои дни, но у меня никогда не было проблем с производительностью с функцией length (). Способ масштабирования, вероятно, зависит даже от вашей реализации анализатора Rexx.

Я бы написал скрипт Rexx, который умножит 10.000 вызовов «length ()» на 10-символьную строку, затем на 100-символьную строку, а затем на 1000-символьную строку.

Построение результирующего времени на графике даст вам приблизительное представление о том, как снижается производительность.

Сказав все это, я предполагаю, что снижение производительности максимально линейно, как в O (n). (См. http://en.wikipedia.org/wiki/Big_O_notation)

1 голос
/ 28 сентября 2009

Я могу говорить о версиях IBM Mainframe, версии Classic Rexx для OS / 2 и любых реализациях Object Rexx. Длина хранится в дескрипторе строки, поэтому накладные расходы не зависят от длины строки.

1 голос
/ 15 декабря 2008

Это зависит от конкретной языковой реализации. Прошло много времени с тех пор, как я написал REXX, фактически я написал AREXX (реализация Amiga), и это было 15 лет назад. : -)

Вы можете написать свою собственную процедуру тестирования. Генерируйте строки увеличивающейся длины и измерьте время, необходимое для получения length (), используя высокопроизводительный таймер. Если вы храните время и длину строки в таблице, разделенной запятыми в текстовом файле, вы можете построить ее, используя gnuplot . И тогда вы очень четко увидите, как оно масштабируется.

Редактировать: Я должен был сначала проверить ответ Рольфа, так как он написал более или менее то же самое. : -)

...