7

ハードウェアアクセスを行うC言語のコードがあります。このコードは準備ができており、十分にテストされています。ここで、このハードウェアを制御するための Web インターフェイスを実装したいと考えています。そこで私は、Zephir を使用した PHP 拡張機能の開発に取り組みました。

私の質問は、「Zephir に外部ライブラリ resp を含めることは可能ですか?」です。それに対してリンクしますか?

4

1 に答える 1

9

はい、可能です。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

于 2014-10-13T00:05:44.643 に答える