当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R compile 字节码编译器


R语言 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

要使用的工作区格式版本。NULL指定当前默认格式 (3)。版本 1 是默认版本R0.99.0 至R1.3.1 和版本 2R1.4.0 至 3.5.0。支持版本 3R3.5.0。

envir

评估加载表达式的环境。

chdir

逻辑性;评估前更改目录?

code

字节码表达式或编译闭包

e

要编译的表达式。

level

整数;要使用的 JIT 级别( 03 ,或返回负值)。

enable

逻辑性;如果 TRUE 则启用编译包。

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指定优化级别,一个整数03(当前out-of-the-box默认为2)。suppressAll应该是标量逻辑;如果TRUE不会显示任何消息(这是默认设置)。suppressUndefinedTRUE抑制有关未定义变量的所有消息,或者它可以是不应显示消息的变量名称的字符向量。suppressNoSuperAssignVarTRUE抑制有关对编译时没有可见绑定的变量进行超级赋值的消息。在编译包的过程中,suppressAll目前FALSE,suppressUndefinedTRUEsuppressNoSuperAssignVarTRUE.

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-devel大神的英文原创作品 Byte Code Compiler。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。