为什么选择 Zephir?

今天的 php 应用程序必须平衡许多问题, 包括稳定性、性能和功能。 每个 php 应用程序都基于一组公共组件, 这些组件也是许多其他应用程序的基础。

这些常见组件是库、框架或两者的组合。 一旦安装, 框架很少改变, 并且作为应用程序的基础, 它们必须具有很高的功能, 而且速度也非常快。

获得快速和可靠的库可能会很复杂, 因为通常在它们上实现了高水平的抽象。 考虑到基础库或框架很少更改的限制, 可以利用编译来提高性能和资源消耗, 构建提供此功能的扩展。

使用 Zephir, 您可以实现可从 php 使用的面向对象的库/框架/应用程序, 使您的应用程序更快, 同时改善用户体验。

如果你是一个 php 程序员...

PHP是web应用程序开发中最流行的语言之一。 像PHP这样的动态类型和解释语言由于其灵活性提供了非常高的生产力。

由于是第4版,PHP基于Zend引擎实现。 这是一个虚拟机,它通过字节码表示来执行PHP代码。 Zend 引擎几乎出现在世界上所有PHP安装中。 使用Zephir,您可以为在Zend引擎下运行的PHP创建扩展。

PHP是Zephir的宿主,显然它们有很多相似之处; 然而,它们有重要的区别,使得Zephir有了自己的个性。 例如,Zephir更加严格,由于编译步骤的原因,它可能使您的生产率低于PHP。

如果你是一个 C 程序员..。

C语言是有史以来最强大、最流行的语言之一。 实际上,PHP是用C编写的,这也是PHP扩展可用的原因之一。 C允许您自由地管理内存,使用低级类型,甚至内联程序集例程。

然而,与PHP或Zephir相比,在C中开发大型应用程序所花费的时间要比预期的长得多,而且如果您不是经验丰富的开发人员,有些错误可能很难发现。

Zephir是为了安全而设计的,因此它不实现指针或手动内存管理,因此如果您是C程序员,您会觉得Zephir不如C程序员强大,但比C程序员更友好。

编译 vs 解释

编译通常会减慢开发速度; 在运行代码之前,您需要更多的耐心来编译代码。 另一方面,解释倾向于降低代码性能,以提高开发人员的工作效率。 也就是说,在某些情况下,解释代码和编译代码的速度没有明显的区别。

Zephir需要编译您的代码,但其功能是从PHP中使用的,PHP是经过解释的。

一旦编译了代码,就不需要再这样做了。 每次运行解释代码时都会对其进行解释。 开发人员可以决定其应用程序的哪些部分应位于 Zephir 中, 而哪些部分不应该在 Zephir 中。

静态类型化 vs 动态类型化的语言

一般来说, 在静态类型化语言中, 变量在其生存期内绑定到特定类型。 它的类型不能更改, 它只能引用与类型兼容的实例和操作。 使用了类似 c/c ++ 等语言的方案:

int a = 0;
a = "hello"; // not allowed

在动态类型中, 类型绑定到值, 而不是变量。 因此,一个变量可以引用一个类型的值,然后被重新分配到一个不相关类型的值。 Javascript/PHP 是一个动态类型语言的例子:

var a = 0;
a = "hello"; // allowed

尽管动态语言具有生产率优势,但它可能不是所有应用程序的最佳选择,尤其是对于非常大的代码库和高性能应用程序。

优化动态语言(如PHP) 的性能比优化静态语言(如c) 更具有挑战性。在静态语言中,优化器可以利用附加在变量本身上的类型信息来做出决策。 在动态语言中, 优化器可用的此类线索较少, 因此优化选择更加困难。

虽然最近在动态语言优化方面取得的进展很有希望 (如 jit 编译), 但它们落后于静态语言的最新发展。 因此, 如果您需要非常高性能, 静态语言可能是更安全的选择。

静态语言的另一个小好处是编译器执行的额外检查。 编译器找不到逻辑错误, 这些错误的重要性要大得多, 但编译器可以提前找到仅在运行时动态语言中才能找到的错误。

Zephir 是静态和动态类型化的, 允许您在可能的情况下利用这两种方法。

编译方案

Zephir提供本机代码生成(目前通过编译到C)。 像gcc/clang/vc++这样的编译器会优化并将代码编译成机器代码。 下图显示了该过程的工作原理:

编译方案

除了Zephir提供的优化之外,随着时间的推移,编译器已经实现并成熟了许多优化,这些优化可以提高编译应用程序的性能:

代码保护

在某些情况下,编译不会显著提高性能。 这可能是因为瓶颈位于应用程序的I/O绑定部分(很可能),而不是计算/内存绑定。 然而,编译代码也可以为您的应用程序带来一定程度的知识保护。 使用Zephir,生成本地二进制文件,您还可以将原始代码“隐藏”给用户或客户。

结语

Zephir的创建不是为了替代PHP或C. 相反,我们认为它是对它们的补充,允许PHP开发人员尝试进行代码编译和静态类型。 Zephir试图将C和PHP世界的优点结合起来,寻找使应用程序更快的机会。