FunctionCompile
根据纯函数生成编译好的代码函数.
FunctionCompile[{f1,f2,…}]
根据一系列纯函数生成一系列编译好的代码函数.
FunctionCompile[k1f1,k2f2,…]
根据 Wolfram 语言函数关联生成已编译的代码函数关联.
FunctionCompile[defs,fspec]
使用本地辅助定义 defs.
更多信息和选项
- 函数 f 通常被指定为 Function 纯函数. 通常用 Typed 来注释 Function 对象中的变量.
- FunctionCompile 生成的 CompiledCodeFunction 对象可以像未编译的函数一样应用于合适的参数.
- 在 f 中,KernelFunction 可用于表示应直接使用 Wolfram Engine 而不是编译为低级代码的函数.
- 在 f 内部,DownValuesFunction 可以用来编译添加在一个符号上的定义.
- 函数 f 可以纯粹指定为在编译器环境中作为声明存在的一个函数的名称.
- 在 FunctionCompile[defs,fspec] 中,fspec 可以调用本地辅助定义 defs. 只在调用 FunctionCompile 时才使用这些定义.
- 也可以通过给出 CompilerEnvironment 选项来提供 fspec 中使用的辅助定义.
- 可以通过 FunctionCompileExportLibrary 和相关函数输出 CompiledCodeFunction 对象中的代码,以便用在外部程序中.
- 当用选项 TargetSystem 来指定其他架构时,这样会有助于在不同平台之间转移输出,而无需再次运行编译.
- 可给出以下选项:
-
CompilerEnvironment Automatic 编译的环境定义 CompilerOptions Automatic 编译管道的详细选项 CompilerRuntimeErrorAction Automatic 当执行低级代码时出现无法恢复的错误时的行为 ProgressReporting Automatic 如何报告编译工作的进展情况 TargetSystem Inherited 用于代码生成的机器架构 UseEmbeddedLibrary False 为该架构创建并嵌入一个共享库 - TargetSystem 的可能设置有:
-
Automatic 为重要的机器架构生成额外的代码 All 为所有的机器架构生成额外的代码 trg 为机器架构 trg 生成额外的代码 {trg1,trg2,…} 为机器架构 {trg1,trg2,…} 生成额外的代码 - CompilerRuntimeErrorAction 的可能值是:
-
Automatic 如果可以避免编译器特定代码,则在 Wolfram 引擎中重新运行计算 "Evaluate" 总是在 Wolfram 引擎中重新运行计算 None 返回表示错误的失败对象 fun 对失败对象应用 fun 并返回结果
范例
打开所有单元关闭所有单元基本范例 (5)
把 Function 编译成编译代码函数:
CompiledCodeFunction 计算带有正确类型的参数:
Information 可以提取 CompiledCodeFunction 签名:
可用 FunctionCompile 编译多个函数:
可用 FunctionDeclaration 给出辅助定义:
可使用 TypeDeclaration 来添加新类型:
FunctionCompile 将根据编译器环境中的声明名称创建一个函数:
范围 (11)
可以使用 KernelFunction 调用 Wolfram Engine. 以下定义 Wolfram Engine 中的函数:
使用 KernelFunction 从编译代码中调用用户定义的函数:
Print 可用于查看计算内部:
CompiledCodeFunction 可作为参数传递给其他 CompiledCodeFunction 表达式.
应用使用 := 为其声明设置 DownValues 的函数:
FunctionDeclaration 为函数提供名称和类型,并声明该执行来自 DownValues:
CompiledCodeFunction 包含允许在相同架构的机器上进行序列化和反序列化的低级代码:
选项 (6)
CompilerRuntimeErrorAction (1)
执行底层代码时的错误行为受 CompilerRuntimeErrorAction 控制:
如果设置为 "Evaluate",则总是在评估器中重新运行:
如果设置为 None,则评估器中永远不会重新运行:
ProgressReporting (1)
可以通过将 ProgressReporting 选项设置为 False 来禁止该功能.
ProgressReporting 的默认值是 Automatic,即使用全局设置 $ProgressReporting. 如果设置为 False,则不会进行进度报告.
TargetSystem (2)
创建一个编译好的代码函数,该函数可以在当前架构之外的机器架构上运行:
创建一个可以在所有可能的机器架构平台上运行的编译好的代码函数:
可将编译后的代码函数迁移到具有 $SystemID 设置的机器上,并且无需对原始代码重新进行编译即可运行.
请注意,CreateCompilerEnvironment 可用于生成多个目标系统,这可以减少交叉编译的时间.
UseEmbeddedLibrary (1)
可能存在的问题 (4)
Errors (3)
如果在使用底层代码计算函数时出现错误,如果避免使用编译器特定代码,计算将在 Wolfram 引擎中运行:
运行该函数时出错. 计算终止,发出消息并使用 Wolfram Engine 计算结果:
使用 Typed 指定特殊的类型:
不支持从 CompiledCodeFunction 返回函数:
嵌套在 CompiledCodeFunction 内部的函数可以返回函数:
Creating Functions (1)
如果有一个以上的声明,FunctionCompile 就无法创建函数:
若使用 Typed,则可使用编译:
如果有一个多态声明,则 FunctionCompile 无法创建函数:
若使用 Typed,则可用编译:
巧妙范例 (2)
引用符号的 FunctionDeclaration:
文本
Wolfram Research (2019),FunctionCompile,Wolfram 语言函数,https://reference.wolfram.com/language/ref/FunctionCompile.html (更新于 2021 年).
CMS
Wolfram 语言. 2019. "FunctionCompile." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2021. https://reference.wolfram.com/language/ref/FunctionCompile.html.
APA
Wolfram 语言. (2019). FunctionCompile. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/FunctionCompile.html 年