導入

Fabric Engine エクステンションとは?

extension とは Fabric Engine へ機能を追加する一連のファイル郡です。サードパーティライブラリから Fabric Engine アプリへと機能を公開することによく使います。あるいは C++ and/or KL で記述されたカスタムコードライブラリの提供にも使用します。

Extension の類型

このガイドで記述するエクステンションにはまず2つの主要な類型があります:

ネイティブコード・エクステンション
ネイティブコード・エクステンションとは、KLオペレータで使用可能なコンパイルされたネイティブコードを含みます。これには、型, メソッド, 関数の名前を提供する KLコードを含む必要があります。C++ で記述し、コマンドラインユーティリティ kl2edk によって生成されるヘッダファイルを使います。
KLオンリー・エクステンション
KLオンリー・エクステンションは、型, メソッド, 関数を含みます。ネイティブコードはありません。KLオンリー・エクステンションとしてパッケージにまとめることは KLの型や関数のライブラリを提供するエレガント方法です。

ネイティブコード・エクステンションも、KLオンリー・エクステンションも根本的には同じものです。実際既に提供されているエクステンションは、双方の任意の混合物であります。

制限

Fabric Engine のエクステンションメカニズムは KL言語に外部の機能を取り込む非常に強力な方法です。とはいえエクステンションを使用する際には気をつけなければならない制限がいくつかあります。

ネイティブコードにより供される機能は、ネイティブコード自体がもつ制限がエクステンションにも適用されます。つまり:

  • KL のエラーからのプログラム保護機構(例えば配列の境界外アクセス)はネイティブコードには利きません。ネイティブコードをただす、エクステンション作者の責任です。とくにメモリ管理 ――オブジェクトのアロケーションと開放については細心の注意をはらってください。
  • ネイティブコードは KLの最適化がかかりません。つまりネイティブコードの関数(ちょっとしたことをする小さい関数)を提供すると、関数の呼び出しにかかるオーバヘッドを発生させてしまいます。このような小さい関数であればネイティブコードではなく KLで書き直すほうがよいでしょう。可能な限りの最適化がかかります。
  • ネイティブコードは GPUでは実行『不可能』です。あるエクステンション中のネイティブコードの呼びだしは、GPUからCPUフォールバックし実行されてしまいます。GPUでそのまま実行されるのと比し重大なパフォーマンス低下を引き起こします。