當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。