为什么有些原语有字节码,而有些则没有?

丰富的雕刻

我注意到,当我叫args一些的基本功能,字节码显示为好。但是在其他原语上,没有字节码出现。例如

args(length)
# function (x) 
# NULL
args(list)
# function (...) 
# NULL
# <bytecode: 0x44a0f38>

这是为什么?

起初,我认为这可能与该...论点有关,但以下观点反驳了该理论。

args(dim)
# function (x) 
# NULL
args(unclass)
# function (x) 
# NULL
# <bytecode: 0x44a0450>

令我困惑的是,字节码仅在其中一些中显示,而在其他一些中则不显示。我一直给人的印象是,所有基元都是特殊的,并且它们都共享相同的“属性”(因为缺少更好的词,而不是实际的R属性)。

里奇棉花

正如研究表明的那样,这与args打印事物的方式有关。也就是说,args在输出中是否包含字节码行并不可靠地表明该函数是否已字节编译。相比:

args(writeLines)
## function (text, con = stdout(), sep = "\n", useBytes = FALSE) 
##   NULL

writeLines
## function (text, con = stdout(), sep = "\n", useBytes = FALSE) 
## {
##   if (is.character(con)) {
##     con <- file(con, "w")
##     on.exit(close(con))
##   }
##   .Internal(writeLines(text, con, sep, useBytes))
## }
## <bytecode: 0x000000001bf3aeb0>

我们可以将字节码行的args打印与标准功能打印进行比较。

arg_shows_bytecode <- function(fn)
{
  output <- capture.output(args(fn))
  grepl("^<bytecode", output[length(output)])
}

printing_shows_bytecode <- function(fn)
{
  output <- capture.output(print(fn))
  length(output) > 1 && grepl("^<bytecode", output[length(output) - 1])   
}

base_fns <- Filter(is.function, mget(ls(baseenv()), baseenv()))
yn_args <- vapply(base_fns, arg_shows_bytecode, logical(1))
yn_print <- vapply(base_fns, printing_shows_bytecode, logical(1))

值得注意的是,args显示字节码信息的所有函数都是基元。

head(base_fns[yn_args])
## $`%*%`
## function (x, y)  .Primitive("%*%")
## 
## $as.call
## function (x)  .Primitive("as.call")
## 
## $attr
## function (x, which, exact = FALSE)  .Primitive("attr")
## 
## $`attr<-`
## function (x, which, value)  .Primitive("attr<-")
## 
## $attributes
## function (obj)  .Primitive("attributes")
## 
## $`attributes<-`
## function (obj, value)  .Primitive("attributes<-")

反之则不正确:一些args不显示字节码信息的基本函数是基元;其他不是。

yn_prim <- vapply(base_fns, is.primitive, logical(1))
table(yn_args, yn_print, yn_prim)
## , , yn_prim = FALSE
## 
##        yn_print
## yn_args FALSE TRUE
## FALSE       0  988
## TRUE        0    0
## 
## , , yn_prim = TRUE
## 
##        yn_print
## yn_args FALSE TRUE
## FALSE     119    0
## TRUE       63    0

因此,基本软件包中的非原始函数都已编译,但未args提及。原始函数在打印时不显示字节码消息,仅在用args调用时有时显示字节码消息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么有些算术指令有有符号/无符号变体,而有些则没有

来自分类Dev

为什么我的一些圈子消失了,而有些则没有?

来自分类Dev

为什么有些UWP项目有project.json而有些却没有?

来自分类Dev

简介:一些游戏物体在移动,而有些则没有

来自分类Dev

为什么有些信号被束缚而另一些则没有束缚?

来自分类Dev

为什么有些Java setter方法自动成为Kotlin属性,而有些却没有?

来自分类Dev

为什么有些对象没有在这个 .splice() 中被移除而有些是?

来自分类Dev

为什么有些电子邮件ID被接受而有些却没有PHP

来自分类Dev

为什么有些 Angular 模块会导入而有些却不会?

来自分类Dev

为什么有些库需要嵌入而有些则不需要?

来自分类Dev

为什么有些函数参数存储在堆栈上而有些存储在堆上?

来自分类Dev

为什么有些快照很快,而有些快照那么慢?

来自分类Dev

为什么有些行可以插入而有些行不能?

来自分类Dev

为什么有些文本在WPF中会消失,而有些则不会

来自分类Dev

为什么有些Jupyter Notebook输出单元格带有输出提示(即Out [4] :),而有些却没有?

来自分类Dev

为什么有些Micro-USB插头的一侧有这两个狭缝/弹簧,而有些却没有?

来自分类Dev

为什么/为什么有些类需要每个可能的参数,而有些则不需要?

来自分类Dev

为什么有些终端从终端运行时使用“&”关闭了某些程序,而有些终端却没有呢?

来自分类Dev

为什么有些简短的条件语句在python中起作用而有些却没有呢?

来自分类Dev

为什么有些网站免费提供字体,而有些网站让您付费购买相同的字体?

来自分类Dev

为什么有些 URL 被“禁止”而有些不在我的 Web 应用程序中

来自分类Dev

为什么有些非root程序可以双击执行而有些则不能?

来自分类Dev

为什么有些引用类型的变量可以绑定右值而有些不能呢?

来自分类Dev

为什么有些数组值会被覆盖,而有些则不会呢?的PHP

来自分类Dev

为什么有些C#api方法需要[HttpPost]而有些则不需要?

来自分类Dev

为什么有些架构没有MOV?

来自分类Dev

为什么有些宝石没有gemspec

来自分类Dev

Angular UI Router-在路由中传递某些参数状态,而有些则没有?

来自分类Dev

为什么有些 AT 命令很慢?

Related 相关文章

  1. 1

    为什么有些算术指令有有符号/无符号变体,而有些则没有

  2. 2

    为什么我的一些圈子消失了,而有些则没有?

  3. 3

    为什么有些UWP项目有project.json而有些却没有?

  4. 4

    简介:一些游戏物体在移动,而有些则没有

  5. 5

    为什么有些信号被束缚而另一些则没有束缚?

  6. 6

    为什么有些Java setter方法自动成为Kotlin属性,而有些却没有?

  7. 7

    为什么有些对象没有在这个 .splice() 中被移除而有些是?

  8. 8

    为什么有些电子邮件ID被接受而有些却没有PHP

  9. 9

    为什么有些 Angular 模块会导入而有些却不会?

  10. 10

    为什么有些库需要嵌入而有些则不需要?

  11. 11

    为什么有些函数参数存储在堆栈上而有些存储在堆上?

  12. 12

    为什么有些快照很快,而有些快照那么慢?

  13. 13

    为什么有些行可以插入而有些行不能?

  14. 14

    为什么有些文本在WPF中会消失,而有些则不会

  15. 15

    为什么有些Jupyter Notebook输出单元格带有输出提示(即Out [4] :),而有些却没有?

  16. 16

    为什么有些Micro-USB插头的一侧有这两个狭缝/弹簧,而有些却没有?

  17. 17

    为什么/为什么有些类需要每个可能的参数,而有些则不需要?

  18. 18

    为什么有些终端从终端运行时使用“&”关闭了某些程序,而有些终端却没有呢?

  19. 19

    为什么有些简短的条件语句在python中起作用而有些却没有呢?

  20. 20

    为什么有些网站免费提供字体,而有些网站让您付费购买相同的字体?

  21. 21

    为什么有些 URL 被“禁止”而有些不在我的 Web 应用程序中

  22. 22

    为什么有些非root程序可以双击执行而有些则不能?

  23. 23

    为什么有些引用类型的变量可以绑定右值而有些不能呢?

  24. 24

    为什么有些数组值会被覆盖,而有些则不会呢?的PHP

  25. 25

    为什么有些C#api方法需要[HttpPost]而有些则不需要?

  26. 26

    为什么有些架构没有MOV?

  27. 27

    为什么有些宝石没有gemspec

  28. 28

    Angular UI Router-在路由中传递某些参数状态,而有些则没有?

  29. 29

    为什么有些 AT 命令很慢?

热门标签

归档