compile
位于 compiler
包(package)。 说明
这些函数为字节码编译器提供了接口R.
用法
cmpfun(f, options = NULL)
compile(e, env = .GlobalEnv, options = NULL, srcref = NULL)
cmpfile(infile, outfile, ascii = FALSE, env = .GlobalEnv,
verbose = FALSE, options = NULL, version = NULL)
loadcmp(file, envir = .GlobalEnv, chdir = FALSE)
disassemble(code)
enableJIT(level)
compilePKGS(enable)
getCompilerOption(name, options)
setCompilerOptions(...)
参数
f |
一个关闭。 |
options |
命名编译器选项列表:请参阅“详细信息”。 |
env |
编译的顶层环境。 |
srcref |
表达式的初始源参考。 |
file,infile,outfile |
路径名; outfile 默认为带有 ‘.Rc' 扩展代替任何现有扩展。 |
ascii |
逻辑性;编译后的文件应该保存为ascii格式吗? |
verbose |
逻辑性;编译器应该显示正在编译的内容吗? |
version |
要使用的工作区格式版本。 |
envir |
评估加载表达式的环境。 |
chdir |
逻辑性;评估前更改目录? |
code |
字节码表达式或编译闭包 |
e |
要编译的表达式。 |
level |
整数;要使用的 JIT 级别( |
enable |
逻辑性;如果 |
name |
字符串;要返回的选项的名称。 |
... |
要设置的命名编译器选项。 |
细节
函数 cmpfun
编译闭包的主体并返回一个具有相同形式的新闭包,并且主体被编译后的主体表达式替换。
compile
将表达式编译为字节码对象;然后可以使用 eval
评估该对象。
cmpfile
解析 infile
中的表达式,编译它们,并将编译后的表达式写入 outfile
。如果未提供outfile
,则它是通过替换或附加.Rc
后缀从infile
形成的。
loadcmp
用于加载编译后的文件。它与 sys.source
类似,只不过它的默认加载环境是全局环境而不是基础环境。
disassemble
生成代码的打印表示,这可能有助于提示正在发生的情况。
enableJIT
启用或禁用just-in-time (JIT) 编译。如果参数为 0,则禁用 JIT。如果level
是 1 则较大的闭包在首次使用之前被编译。如果level
是2,那么一些小闭包在第二次使用之前也会被编译。如果level
如果是 3,则所有顶层循环在执行之前都会被编译。 JIT 级别 3 需要编译器选项optimize
为 2 或 3。 JIT 级别也可以通过启动来选择R与环境变量R_ENABLE_JIT
设置为这些值之一。调用enableJIT
如果参数为负,则返回当前的 JIT 级别。默认 JIT 级别是3
.
compilePKGS
安装包时启用或禁用编译包。这要求包在将函数写入延迟加载数据库时进行编译时使用延迟加载。这也可以通过启动来启用R与环境变量_R_COMPILE_PKGS_
设置为正整数值。不应在包安装之外启用此函数,因为它会导致编译任何序列化函数,这会带来时间和空间开销。R_COMPILE_PKGS
相反,可以用来指示INSTALL
在安装过程中启用/禁用软件包编译。
目前编译器会发出各种警告。它通过使用 cat
打印消息来实现此目的。最终这应该使用条件处理机制。
options
参数可用于控制编译器操作。目前有四种选择:optimize
,suppressAll
,suppressUndefined
, 和suppressNoSuperAssignVar
.optimize
指定优化级别,一个整数0
到3
(当前out-of-the-box默认为2
)。suppressAll
应该是标量逻辑;如果TRUE
不会显示任何消息(这是默认设置)。suppressUndefined
可TRUE
抑制有关未定义变量的所有消息,或者它可以是不应显示消息的变量名称的字符向量。suppressNoSuperAssignVar
可TRUE
抑制有关对编译时没有可见绑定的变量进行超级赋值的消息。在编译包的过程中,suppressAll
目前FALSE
,suppressUndefined
是TRUE
和suppressNoSuperAssignVar
是TRUE
.
getCompilerOption
返回指定选项的值。除非在 options
参数中提供了值,否则返回默认值; options
参数主要供内部使用。 setCompilerOption
设置默认选项值。要设置的选项由参数名称标识,例如setCompilerOptions(suppressAll = TRUE, optimize = 3)
。它返回先前值的命名列表。
将编译器称为字节码编译器实际上有点用词不当:代码对象的外部表示当前使用 int
操作数,而当使用 gcc
编译时,内部表示实际上是线程代码而不是字节代码。
例子
oldJIT <- enableJIT(0)
# a simple example
f <- function(x) x+1
fc <- cmpfun(f)
fc(2)
disassemble(fc)
# old R version of lapply
la1 <- function(X, FUN, ...) {
FUN <- match.fun(FUN)
if (!is.list(X))
X <- as.list(X)
rval <- vector("list", length(X))
for(i in seq_along(X))
rval[i] <- list(FUN(X[[i]], ...))
names(rval) <- names(X) # keep `names' !
return(rval)
}
# a small variation
la2 <- function(X, FUN, ...) {
FUN <- match.fun(FUN)
if (!is.list(X))
X <- as.list(X)
rval <- vector("list", length(X))
for(i in seq_along(X)) {
v <- FUN(X[[i]], ...)
if (is.null(v)) rval[i] <- list(v)
else rval[[i]] <- v
}
names(rval) <- names(X) # keep `names' !
return(rval)
}
# Compiled versions
la1c <- cmpfun(la1)
la2c <- cmpfun(la2)
# some timings
x <- 1:10
y <- 1:100
system.time(for (i in 1:10000) lapply(x, is.null))
system.time(for (i in 1:10000) la1(x, is.null))
system.time(for (i in 1:10000) la1c(x, is.null))
system.time(for (i in 1:10000) la2(x, is.null))
system.time(for (i in 1:10000) la2c(x, is.null))
system.time(for (i in 1:1000) lapply(y, is.null))
system.time(for (i in 1:1000) la1(y, is.null))
system.time(for (i in 1:1000) la1c(y, is.null))
system.time(for (i in 1:1000) la2(y, is.null))
system.time(for (i in 1:1000) la2c(y, is.null))
enableJIT(oldJIT)
作者
Luke Tierney
相关用法
- R findGlobals 查找闭包使用的全局函数和变量
- R SparkR count用法及代码示例
- R SparkR column用法及代码示例
- R SparkR columns用法及代码示例
- R checkUsage 检查 R 代码是否存在可能的问题
- R SparkR corr用法及代码示例
- R showTree R 表达式的打印 Lisp 风格表示
- R SparkR cov用法及代码示例
- R SparkR collect用法及代码示例
- R codetools R 低级代码分析工具
- R SparkR coltypes用法及代码示例
- R SparkR coalesce用法及代码示例
- R lvq1 学习矢量量化1
- R lvq2 学习矢量量化2.1
- R summary.clara “clara”对象的摘要方法
- R diana 分裂分析聚类
- R pluton 钚同位素成分批次
- R votes.repub 总统选举中共和党候选人的投票
- R agnes 凝聚嵌套(层次聚类)
- R print.mona MONA 对象的打印方法
- R print.clara CLARA 对象的打印方法
- R mona 二元变量的单论分析聚类
- R plot.diana 分裂层次聚类图
- R plot.mona 一元分裂层次聚类的旗帜
- R bannerplot 绘图横幅(层次聚类)
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Byte Code Compiler。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。