関連テクノロジー
Wolfram言語からコード生成する場合には,Wolfram言語で書かれたプログラムを別の言語に変換してから,そのプログラムが実行できるようにサポートする必要がある.Wolframシステムのコンパイラは,C言語でのコード生成を行うシステムを提供する.
このセクションでは,コード生成に関係するテクノロジーについて説明する.
Wolframシステムコンパイラ
Wolframシステムのコンパイラは,Wolfram言語計算を高速化し使用することができる方法である.これは計算についての仮定を取り,これをより効率的な方法で書き直すことによって行う.
Wolframシステムのコンパイラを使う重要な方法は関数Compileを使う方法である.
cFun = Compile[ {x}, x^2 + Sin[x^2]]コンパイルされた関数は別のWolfram言語の関数がそれに実数の入力を渡す方法と同じ方法で使用することができる.
cFun[ 10.5]しかし,コンパイルされた関数に実数ではない入力が渡されると,エラーメッセージが返される.それでもWolfram言語は結果を返すが,コンパイラは使わない.
cFun[ sym]これについての詳細はコンパイラのドキュメントに記載されている.
SymbolicC
SymbolicCはWolfram言語のCコード生成システムの重要な位置を占めるものである.これは,ExportあるいはExportStringがCコードに使われると,自動的に使用されるものであり,Wolfram言語式としてのCコードの階層的ビューを提供する.このため,Cコードを作成,操作,最適化するのに大変適している.
SymbolicCは,自分のコード生成に使うことができる.またWolfram言語のコード生成ツールとしても広く使用されている.
SymbolicCを使用するには,まずパッケージをロードしなければならない.
Needs["SymbolicC`"]これでCプログラムの要素を構築し始めることができる.以下は変数の宣言を表す.
dec = CDeclare[ double, "a"]SymbolicC式の重要な機能にこれらの式は不活性であるということがある.つまり,これらの式は自らの未評価形式に評価される.
asgn = CAssign["a", "x"];
fun = CFunction[void, "fun", {{double, x}}, CBlock[{dec, asgn}]];関数は,式としてとどめておくことも,Cコードを示す文字列に変換することもできる.
ToCCodeString[fun]これについての詳細はSymbolicCのドキュメントに記載されている.
CCompilerDriver
CCompilerDriverは,使用コンピュータにインストールされているCコンパイラにインターフェースを与えるWolfram言語パッケージである.これは共有ライブラリ,実行ファイル,オブジェクトファイルを構築することができる.Wolfram言語に統合されているので,Cコードを作成し,例えばコードを検証する便利な方法を提供する等,コードをWolfram言語にリンクさせ直すのに,このパッケージを簡単に使用することができる.
もちろん自分のプロジェクトやメイクファイルを設定し,C Compiler Driverツールは使用しないということも可能である.
Needs["CCompilerDriver`"]demoFile = FileNameJoin[ {$CCompilerDirectory, "SystemFiles", "CSource", "createDLL_demo.c"}];lib = CreateLibrary[{demoFile}, "testDLL"]適切なCコンパイラがないという場合には,コンパイルは失敗に終り,メッセージが生成される.
サンプルのソースファイルはWolfram Libraryとして使用し,DLLFunctionLoadと一緒にロードすることができる.
libFun = Compile`DLLFunctionLoad[lib, "incrementInteger", {{_Integer}}, _Integer]ライブラリ関数をWolfram言語から呼び出すことができる.
libFun[10]これについての詳細はCCompilerDriverのドキュメントに記載されている.