自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么選擇Zephir給PHP編寫動態(tài)擴展庫?

開發(fā) 前端
Zephir不是用來取代PHP或C的。相反,我們認為它是對它們的補充,允許PHP開發(fā)人員冒險進行代碼編譯和靜態(tài)類型。Zephir試圖將C和PHP世界的好東西結(jié)合起來,尋找機會使應(yīng)用程序更快。

介紹

歡迎使用Zephir,這是一種開源的、高級的/特定于域的語言,旨在促進PHP擴展的創(chuàng)建和可維護性,重點關(guān)注類型和內(nèi)存安全。

Zephir是一種語言,它滿足了PHP開發(fā)人員試圖編寫和編譯可由PHP執(zhí)行的代碼的主要需求。它支持動態(tài)和靜態(tài)類型,并且它的一些特性對于PHP開發(fā)人員來說是熟悉的。

Zephir這個名字是Z(end)E(ngine)/PH(P)/I(nte)r(mediate)的縮寫。雖然這表明發(fā)音應(yīng)該是zephyr,但Zephir的創(chuàng)造者實際上將其發(fā)音為zaefire。

為什么是Zephir?

今天的PHP應(yīng)用程序必須平衡許多關(guān)注點,包括穩(wěn)定性、性能和功能。每個PHP應(yīng)用程序都基于一組通用組件,這些組件也是許多其他應(yīng)用程序的基礎(chǔ)。

這些通用組件是庫、框架或兩者的組合。一旦安裝,框架很少改變,作為應(yīng)用程序的基礎(chǔ),它們必須功能強大,而且速度非??臁?/p>

得快速和健壯的庫可能很復(fù)雜,因為它們通常實現(xiàn)了高級別的抽象。在基本庫或框架很少更改的情況下,有機會構(gòu)建提供此功能的擴展,利用編譯提高性能和資源消耗。

使用Zephir,您可以實現(xiàn)可從PHP使用的面向?qū)ο蟮膸?框架/應(yīng)用程序,從而獲得重要的時間,使您的應(yīng)用程序更快,同時改善用戶體驗。

如果您是一名PHP程序員

PHP是用于開發(fā)Web應(yīng)用程序的最流行的語言之一。像PHP這樣的動態(tài)類型和解釋語言由于其靈活性而提供了非常高的生產(chǎn)力。

從版本4開始,PHP基于Zend Engine實現(xiàn)。這是一個虛擬機,它從字節(jié)碼表示中執(zhí)行PHP代碼。Zend Engine幾乎存在于世界上所有的PHP安裝中。使用Zephir,您可以為在Zend Engine下運行的PHP創(chuàng)建擴展。

PHP是Zephir的宿主,所以它們顯然有很多相似之處;然而,它們也有重要的差異,這些差異賦予了Zephir自己的個性。例如,Zephir更嚴(yán)格,由于編譯步驟,與PHP相比,它可能會使您的生產(chǎn)力降低。

如果你是C程序員

C是有史以來最強大和最流行的語言之一。事實上,PHP是用C編寫的,這也是PHP擴展可用于它的原因之一。C為您提供了管理內(nèi)存、使用低級類型甚至內(nèi)聯(lián)匯編例程的自由。

然而,與PHP或Zephir相比,用C開發(fā)大型應(yīng)用程序可能需要比預(yù)期更長的時間,如果您不是經(jīng)驗豐富的開發(fā)人員,則可能很難找到一些錯誤。

Zephir的設(shè)計是安全的,所以它不實現(xiàn)指針或手動內(nèi)存管理,所以如果你是一個C程序員,你會覺得Zephir不如C強大,但更友好。

編譯VS解釋

編譯通常會減慢開發(fā)速度,在運行代碼之前,您需要更多的耐心來編譯代碼。另一方面,解釋往往會降低代碼性能,從而有利于開發(fā)人員的生產(chǎn)力。也就是說,在某些情況下,解釋和編譯代碼的速度之間沒有任何明顯的差異。

Zephir需要編譯你的代碼,但功能是從PHP中使用的,它是解釋的。

一旦代碼被編譯,就沒有必要再這樣做了。解釋的代碼在每次運行時都被解釋。開發(fā)人員可以決定他們的應(yīng)用程序的哪些部分應(yīng)該在Zephir中,哪些不應(yīng)該。

靜態(tài)類型語言與動態(tài)類型語言

一般來說,在靜態(tài)類型語言中,變量在其生存期內(nèi)綁定到特定類型。它的類型不能更改,只能引用類型兼容的實例和操作。像C/C++這樣的語言是用這個方案實現(xiàn)的:

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

在動態(tài)類型中,類型綁定到值,而不是變量。因此,一個變量可能引用一個類型的值,然后稍后被重新分配給一個不相關(guān)類型的值。JavaScript/PHP是動態(tài)類型語言的例子:

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

盡管動態(tài)語言具有生產(chǎn)力優(yōu)勢,但它可能不是所有應(yīng)用程序的最佳選擇,特別是對于非常大的代碼庫和高性能應(yīng)用程序。

優(yōu)化PHP等動態(tài)語言的性能比C等靜態(tài)語言更具挑戰(zhàn)性。在靜態(tài)語言中,優(yōu)化器可以利用附加到變量本身的類型信息來做出決策。在動態(tài)語言中,可供優(yōu)化器使用的此類線索較少,這使得優(yōu)化選擇更加困難。

雖然動態(tài)語言優(yōu)化的最新進展很有希望(如JIT編譯),但它們落后于靜態(tài)語言的最新技術(shù)水平。因此,如果你需要非常高的性能,靜態(tài)語言可能是一個更安全的選擇。

靜態(tài)語言的另一個小好處是編譯器執(zhí)行的額外檢查。編譯器不能發(fā)現(xiàn)邏輯錯誤,這是更重要的,但編譯器可以提前發(fā)現(xiàn)錯誤,在動態(tài)語言中只能在運行時發(fā)現(xiàn)。

Zephir同時具有靜態(tài)和動態(tài)類型,允許您盡可能地利用這兩種方法。

編譯方案

Zephir提供原生代碼生成(目前通過編譯成C)。像gcc/clang/vc++這樣的編譯器會優(yōu)化代碼并將其編譯成機器碼。下圖顯示了該過程的工作原理:

圖片圖片

除了Zephir提供的那些,隨著時間的推移,編譯器已經(jīng)實現(xiàn)并成熟了許多優(yōu)化,這些優(yōu)化可以提高編譯應(yīng)用程序的性能:

  • GCC優(yōu)化:https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Optimize-Options.html
  • LLVM通過:https://llvm.org/docs/Passes.html
  • Visual C/C++優(yōu)化:https://msdn.microsoft.com/en-us/library/k1ack8f1.aspx

代碼保護

在某些情況下,編譯不會顯著提高性能。這可能是因為瓶頸位于應(yīng)用程序的I/O綁定部分(很可能),而不是計算/內(nèi)存綁定。但是,編譯代碼也可以為您的應(yīng)用程序帶來某種程度的知識保護。使用Zephir,生成本地二進制文件,您還可以向用戶或客戶“隱藏”原始代碼。

結(jié)論

Zephir不是用來取代PHP或C的。相反,我們認為它是對它們的補充,允許PHP開發(fā)人員冒險進行代碼編譯和靜態(tài)類型。Zephir試圖將C和PHP世界的好東西結(jié)合起來,尋找機會使應(yīng)用程序更快。

責(zé)任編輯:武曉燕 來源: 開源技術(shù)小棧
相關(guān)推薦

2024-08-06 12:22:42

ZephirPHP源代碼

2009-11-25 10:16:49

linuxphpizePHP

2024-01-15 00:42:55

Go語言應(yīng)用程序

2009-12-14 17:56:25

Linux操作系統(tǒng)

2011-11-28 10:21:52

Nginx特性

2016-01-06 09:57:23

編寫PHP擴展

2012-02-28 09:11:51

語言Lua

2009-12-21 17:11:38

Linux認證

2009-06-25 15:09:34

選擇JSFESRI

2009-11-27 10:32:35

2015-08-27 16:48:11

FirefoxChrome

2015-03-17 09:24:15

NoSQL數(shù)據(jù)庫使用NoSQL

2023-02-26 01:25:23

Sanic框架工具

2020-06-10 09:06:48

MongoDB架構(gòu)高可用

2013-10-22 15:18:19

2012-11-14 20:55:07

容錯服務(wù)器選型CIO

2017-02-27 15:19:04

2016-08-19 16:27:52

數(shù)據(jù)庫Mongo DB開發(fā)

2020-07-23 08:21:25

PHP開發(fā)人員MVC

2020-06-15 10:11:05

PHP語言框架
點贊
收藏

51CTO技術(shù)棧公眾號