ハードウェアアクセスを行うC言語のコードがあります。このコードは準備ができており、十分にテストされています。ここで、このハードウェアを制御するための Web インターフェイスを実装したいと考えています。そこで私は、Zephir を使用した PHP 拡張機能の開発に取り組みました。
私の質問は、「Zephir に外部ライブラリ resp を含めることは可能ですか?」です。それに対してリンクしますか?
はい、可能です。C コードを操作するには 2 つの方法があります。
C コードを CBLOCK でラップする
次のように、C コードをタグに埋め込むことができます%{ // c-code }%
。
この機能は文書化されていませんが、テストには存在します。
https://github.com/phalcon/zephir/blob/master/test/cblock.zep https://github.com/phalcon/zephir/blob/c47ebdb71b18f7d8b182f4da4a9c77f734ee9a71/test/cblock.zep#L16 https://github. com/phalcon/zephir/blob/c47ebdb71b18f7d8b182f4da4a9c77f734ee9a71/ext/test/cblock.c
%{
// include a header
#include "headers/functions.h"
// c implementation of fibonacci
static long fibonacci(long n) {
if (n < 2) return n;
else return fibonacci(n - 2) + fibonacci(n - 1);
}
}%
少し見栄えは悪いですが、機能します。) もう少しエレガントですが、より多くの作業を行うのが、カスタム オプティマイザーです。
カスタムオプティマイザを書くことによって
「オプティマイザー」は、関数呼び出しのインターセプターのように機能します。「オプティマイザー」は、PHP ユーザーランドでの関数の呼び出しを、より高速でオーバーヘッドが少ない直接の C 呼び出しに置き換えて、パフォーマンスを向上させます。
クリーンなインターフェースを備えたオプティマイザーを作成して、Zephir が C 関数に渡されるパラメーターの型と返されるデータ型を認識できるようにすることができます。
マニュアル: https://docs.zephir-lang.com/en/latest/optimizers.html
例 (fibonacci c-func への呼び出し): https://github.com/phalcon/zephir/pull/21#issuecomment-26178522