1

REXX中length()函数的处理开销如何随字符串的长度变化?


更新:我正在使用:

  • uni-REXX (R) 版本 297t
  • Open-REXX (TM) 版权所有 (C) iX Corporation 1989-2002。版权所有。
4

5 回答 5

3

这完全取决于实施。您是指 OS/2 的 REXX、z/VM 的 REXX、z/OS 的 REXX、Windows 的 OOREXX、REXX/400 还是 Regina?

IBM 的 REXX 语言规范中没有任何内容规定该函数是如何在幕后实现的,如果您扫描字符串,则可能是 O(N),如果长度与字符串一起存储在某处,则可能是 O(1)。

如果它真的很重要,最好用基准代码进行测试,看看长度是否有影响。

于 2008-12-15T11:09:06.780 回答
3

开销为 0。长度存储在描述符中。

Neil Milsted uni-REXX 的作者(不开玩笑)。

于 2009-01-28T03:09:25.963 回答
2

我不知道。我在我的日子里写过一些 Rexx,但我从来没有遇到过 length() 函数的性能问题。这种扩展方式甚至可能取决于您对 Rexx 解析器的实现。

我会编写一个 Rexx 脚本,在 10 个字符的字符串上对“length()”调用 10.000 次,然后是 100 个字符的字符串,然后是 1000 个字符的字符串。

在图表中绘制结果时间将为您提供关于性能如何下降的近似值。

说了这么多,我的猜测是性能下降最多是线性的,就像在 O(n) 中一样。(见http://en.wikipedia.org/wiki/Big_O_notation

于 2008-12-15T10:51:54.910 回答
1

它是特定于语言实现的。我现在已经很久没有写任何 REXX 了,事实上我写了 AREXX(Amiga 实现),那是 15 年前的事了。:-)

您可以编写自己的测试例程。生成长度增加的字符串,并使用高性能计时器测量获取 length() 所需的时间。如果您将时间和字符串长度存储在基于文本文件的逗号分隔表中,则可以使用gnuplot绘制它。然后你会非常清楚地看到它是如何扩展的。

编辑:我应该先检查罗尔夫的答案,因为他或多或少写了相同的东西。:-)

于 2008-12-15T11:36:23.933 回答
1

我可以代表 IBM Mainframe 版本、OS/2 的 Classic Rexx 版本以及任何 Object Rexx 实现。长度存储在字符串描述符中,因此开销与字符串长度无关。

于 2009-09-27T22:56:51.973 回答