R 的 switch 语句不是一种特殊形式,所以它很慢吗?

J. *_*ini 5 performance r switch-statement

在大多数带有switch语句的语言中,它switch是一种特殊的形式,旨在延迟评估可能性,并且编译器知道如何根据给定的输入优化语句的选择。R,大多已经很懒了,不需要其中的一些。然而,R 的switch语句仍然是一个函数调用,而不是任何一种特殊的形式。这是否意味着 R 的switch语句比它是一种特殊形式时要慢?或者 R 的解释器是否知道优化它,好像它是一种特殊形式?

Wal*_*ldi 6

如果您查看switch文件src/main/builtin.c中的内部代码,您可以阅读第 1009-1025 行:

这是一个 SPECIALSXP,因此需要根据需要评估参数。

SPECIALSXP 意思是

no  SEXPTYPE    Description
7   SPECIALSXP  special functions
Run Code Online (Sandbox Code Playgroud)

Soswitch实际上是一个特殊的函数,它将未计算的参数传递给内部函数。

进一步阅读从第 1030 行到第 1104 行的源代码表明,如 中所述?switch,该函数要么处理character要么number以简单且未完全优化的方式处理。

这可能解释了为什么switch在例如需要二进制搜索的情况下不是特别快。

  • 没有敲打我刚刚投票的答案,但这种同义反复让我微笑:“论点需要根据需要进行评估。” (3认同)