REXX 中 length() 的处理开销是多少?
-
21-08-2019 - |
题
REXX中length()函数的处理开销如何随字符串长度变化?
更新:我在用着:
- uni-REXX (R) 版本 297t
- Open-Rexx(TM)版权所有(C)IX Corporation 1989-2002。版权所有。
解决方案
开销为0。长度存储在描述符中。
Uni-Rexx的尼尔·米尔斯特(Neil Milsted)作者(无开玩笑)。
其他提示
这完全取决于实施。您是指 REXX for OS/2、REXX for z/VM、REXX for z/OS、OOREXX for Windows、REXX/400 或 Regina?
IBM 的 REXX 语言规范中没有任何内容规定该函数是如何在幕后实现的,如果扫描字符串,则可能是 O(N);如果长度与字符串一起存储在某处,则可能是 O(1)。
如果它是 真的 重要的是,最好使用基准测试代码进行测试,看看长度是否有影响。
我不知道。我曾经写过一些 Rexx,但我从未遇到过 length() 函数的性能问题。这种扩展方式甚至可能取决于您对 Rexx 解析器的实现。
我会编写一个 Rexx 脚本,在 10 个字符的字符串上对“length()”进行 10.000 次调用,然后在 100 个字符的字符串上,然后在 1000 个字符的字符串上进行 10.000 次调用。
在图表中绘制结果时间将为您提供性能下降情况的近似值。
说了这么多,我的猜测是性能下降最多是线性的,如 O(n) 所示。(看 http://en.wikipedia.org/wiki/Big_O_notation)
这是特定于语言实现的。我已经很久没有写 REXX 了,事实上我写了 AREXX(Amiga 实现),那是 15 年前的事了。:-)
您可以编写自己的测试例程。生成长度不断增加的字符串,并使用高性能计时器测量获取 length() 所需的时间。如果您将时间和字符串长度存储在基于逗号分隔表的文本文件中,则可以使用以下命令绘制它 gnuplot. 。然后你会非常清楚地看到它是如何扩展的。
编辑:我应该先检查罗尔夫的答案,因为他或多或少写了同样的东西。:-)
我可以谈论 IBM Mainframe 版本、OS/2 的 Classic Rexx 版本以及任何 Object Rexx 实现。长度存储在字符串描述符中,因此开销与字符串长度无关。