CompilerCallback["name"]
コンパイラ環境で定義された場合には自動的にWolfram Compilerによって呼び出される関数である.
CompilerCallback
CompilerCallback["name"]
コンパイラ環境で定義された場合には自動的にWolfram Compilerによって呼び出される関数である.
詳細
- 以下のコールバックが指定の型でサポートされている.
-
"OnFree" {t}->"Null" 解放されようとしているときに t 型のメモリ管理されたオブジェクトで呼び出される "SerializeToExpression" {t}->"InertExpression" コンパイルされたコードと解釈されたコードを接続するときに t 型のオブジェクトを式に変換するために呼び出される. "DeserializeFromExpression" {"InertExpression"}->t コンパイルされたコードと解釈されたコードを接続するときに式を t 型のオブジェクトに変換するために呼び出される "DeserializableFromExpressionQ" {"InertExpression","TypeSpecifier"::[t]}->"Boolean" 式が t 型のオブジェクトとして非直列化できる形式かどうかを調べるために呼び出される - CompilerCallback["OnFree"]を定義して手動のデコンストラクションが必要なメモリ管理型用のカスタムのデコンストラクタを指定することができる.
- 式の直列化コールバックを定義して,コンパイルされたコードと解釈されたコードを接続するときに型をどのように式に変換するか(あるいはその逆)が定義できる.
例題
すべて開く すべて閉じる例 (1)
解放された際に実行するメモリ管理型とコールバック関数を宣言する:
decs = {
TypeDeclaration["Product", "myProduct", <||>],
FunctionDeclaration[CompilerCallback["OnFree"],
Typed[{"myProduct"} -> "Null"]@
Function[prod, Echo["Object freed!"];]]
};cf = FunctionCompile[decs, Function[{}, CreateTypeInstance["myProduct", <||>];]]コンパイルされた関数を実行し,オブジェクトがスコープ外に出た場合にコールバックを実行する:
cf[]スコープ (1)
CompilerCallbackを使ってコンパイルされた型と式の間の変換方法が指定できる.製品型を定義する:
tyDec = TypeDeclaration["Product", "myProduct", <|"f1" -> "Real64", "f2" -> "Integer64"|>];myProductオブジェクトをf[{f1},f2]の形の式に変換するコールバック関数を定義する:
serializeDec = FunctionDeclaration[CompilerCallback["SerializeToExpression"],
Typed[{"myProduct"} -> "InertExpression"]@
Function[prod,
Construct[InertExpression[f],
Construct[InertExpression[List],
Cast[prod["f1"], "InertExpression"]
],
Cast[prod["f2"], "InertExpression"]
]
]
];式がmyProductオブジェクトに変換するのに適切な形式であるかどうかを識別するコールバック関数を定義する:
deserializableDec = FunctionDeclaration[
CompilerCallback["DeserializableFromExpressionQ"],
Typed[{"InertExpression", "TypeSpecifier"::["myProduct"]} -> "Boolean"]@
Function[{expr, ty},
Head[expr] === InertExpression[f] &&
Length[expr] === 2 &&
Head[expr[[1]]] === InertExpression[List] &&
Length[expr[[1]]] === 1
]
];式をmyProductオブジェクトに変換するコールバック関数を定義する:
deserializeDec = FunctionDeclaration[
CompilerCallback["DeserializeFromExpression"],
Typed[{"InertExpression"} -> "myProduct"]@
Function[expr,
CreateTypeInstance["myProduct", <|
"f1" -> Cast[expr[[1]][[1]], "Real64"],
"f2" -> Cast[expr[[2]], "Integer64"]
|>]
]
];myProductオブジェクトを取って返す(オブジェクトと式の間の変換を行う)関数をコンパイルする:
cf = FunctionCompile[{tyDec, serializeDec, deserializableDec, deserializeDec}, Function[Typed[obj, "myProduct"], obj]]cf[f[{3.141}, 42]]cf[g[1, 2]]特性と関係 (1)
CompiledExpressionDeclarationは自動的に式のシリアル化コールバックを定義する.f[_Real,_Integer]の形の式のためにコンパイルされた式の型を宣言する:
tyDec = CompiledExpressionDeclaration[f, {"Real64", "Integer64"}];この型を取って返す(この型と式の間の変換を行う)関数をコンパイルする:
cf = FunctionCompile[tyDec, Function[Typed[obj, "f"], obj]]cf[f[3.141, 42]]cf[g[1, 2]]テキスト
Wolfram Research (2022), CompilerCallback, Wolfram言語関数, https://reference.wolfram.com/language/ref/CompilerCallback.html.
CMS
Wolfram Language. 2022. "CompilerCallback." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/CompilerCallback.html.
APA
Wolfram Language. (2022). CompilerCallback. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/CompilerCallback.html
BibTeX
@misc{reference.wolfram_2026_compilercallback, author="Wolfram Research", title="{CompilerCallback}", year="2022", howpublished="\url{https://reference.wolfram.com/language/ref/CompilerCallback.html}", note=[Accessed: 10-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_compilercallback, organization={Wolfram Research}, title={CompilerCallback}, year={2022}, url={https://reference.wolfram.com/language/ref/CompilerCallback.html}, note=[Accessed: 10-September-2026]}