首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zephir有可能包括一个外部图书馆吗?

Zephir有可能包括一个外部图书馆吗?
EN

Stack Overflow用户
提问于 2014-09-11 21:35:43
回答 1查看 2.8K关注 0票数 8

我在C中有一些代码,它可以进行一些硬件访问。这段代码已经准备就绪,并且经过了良好的测试。现在我想实现一个网络接口来控制这个硬件。所以我开始用Zephir开发PHP扩展。

我的问题是,“Zephir是否有可能包括一个外部图书馆。如果有可能的话,我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-13 00:05:44

是的,这是可能的,使用C代码有两种方法。

在中封装C-代码的方法

您可以在标记中嵌入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

代码语言:javascript
复制
%{
    // 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);
    }

}%

看起来有点丑,但很有效)更优雅,但工作量也更多,是自定义优化器:

通过编写自定义优化器

“优化器”的工作方式类似于函数调用的拦截器。一个‘优化器’用直接的C-调用来代替PHP用户名中函数的调用,这种调用速度更快,开销更低,提高了性能。

可以使用干净的接口编写优化器,这样Zephir就可以知道传递给C函数的参数类型和返回的数据类型。

手册:https://docs.zephir-lang.com/en/latest/optimizers.html

示例(调用fibonacci c-func):https://github.com/phalcon/zephir/pull/21#issuecomment-26178522

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25797337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档