1. 程式人生 > 其它 >zephir-(1)開篇介紹

zephir-(1)開篇介紹

#zephir-開篇介紹#

##前言## 先在這裡感謝各位zephir開源技術提供者

筆者在學習phalcon的過程中瞭解到,phalcon2.x版本通過了zephir重寫,第一感覺是zephir這麼牛逼?筆者趕緊嘗試了一下,果不其然非常簡單的就能寫出一個C擴充套件的helloword,github上面有1000+個Star,緊接著我去搜索了一系列中文資料,但是比較失望,官方也沒有提供中文文件,也沒有中文社群,這麼好東西這麼好的技術,筆者覺得不能讓他埋沒,今天來開個坑,第一是對於官網的文件的一個譯文工作,其次是結合自己的理解進行補充,希望大家喜歡!

注:筆者水平有限,說的不正確的地方希望大家多多指正,一同交流技術

附上:

喵了個咪的部落格:w-blog.cn

zephir官網地址:http://zephir-lang.com/

github地址:https://github.com/phalcon/zephir

##1. zephir介紹##

那麼今天的目的是什麼,今天的目的不是告訴大家怎麼用zephir編寫PHP拓展,也不是zephir語法寫那要寫,中國有句老話千里之行始於足下我們先來簡單的瞭解一下zephir他的特點和特性.

###1.1 簡單易於開發###

相信大家和我有一樣的經歷,看到了yaf和phalcon在想為什麼C語言的拓展框架可以這麼的快,我自己能不能寫一個出來呢,然後屁顛屁顛的跑去找資料找大神瞭解,大神說你去看一下**"PHP擴充套件開發及核心應用"**,結果大家都知道醉了,

主要原因是需要對C相對的熟悉並且對PHP核心API也要很熟悉,我覺得這已經不是門檻的問題了是太平洋的距離,就草草結束了研究.

當遇到zephir首先了解的就是複雜程度,結果花了10分鐘就跟著流程做了一個小DEMO,就這點看來就開發效率這點看來無可厚非的的高效快速,大家感受一下:

namespace Kenny;

 class Kenny
 {
     public static function hello()
     {
         echo  "hello world";
     }
 }

編譯之後引入到php.ini裡面,使用方式如下:

use KennryKennry;

echo Kennry::hello(), "/n";

zephir是一個直譯器語言和PHP非常近似,通過zephir的機制編譯成C語言,然後通過C編譯出PHP拓展提供使用,把中間過程高度封裝很大程度讓PHP拓展開發簡單了很多.

"PHP擴充套件開發及核心應用"地址:http://www.walu.cc/phpbook/

###1.2 zephir特性###

1.zephir是靜態動態結合語言,在zephir內可以使用傳統靜態變數,也可以使用動態變數,靈活度高

2.記憶體安全,熟悉C程式的童鞋都知道C可以控制記憶體指標,其實用的不好是一件很危險的事情,zephir它不允許你使用指標,它提供了一個task-local垃圾收集器,以避免記憶體洩漏。

3.編譯模式,zephir能狗編譯主流系統Liunx/OSX/Windows能夠識別的拓展程式

4.開發原始碼的高階語言,以面向物件為基礎,編寫拓展都需要基於面向物件

###1.3 感受一下###

下面是官方提供的一個讓大家感受一下的小例子作用是過濾變數返回字母字元

namespace MyLibrary;

class Filter
{
    public function alpha(string str)
    {
        char ch; string filtered = "";
        for ch in str {
           if (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') {
              let filtered .= ch;
           }
        }
        return filtered;
    }
}

從PHP類可以使用如下:

<?php

$filter = new MyLibraryFilter();
echo $filter->alpha("01he#l.lo?/1"); // 結果輸出 hello

##2 為什麼是Zephir##

今天的PHP應用程式必須平衡一系列問題包括穩定性、效能和功能。

每一個PHP應用程式是基於一組常見的元件或者說框架,這些公共元件是庫/框架或它們的組合。一旦安裝後很少改變,作為應用程式的基礎,他們必須是有非常快的,

快速和強大的庫會很複雜,由於高水平的抽象,一般的做法是約定基礎庫或框架很少改變,才有機會來改善效能和資源消耗

Zephir,您可以實現面向物件庫/框架/應用程式,使您的應用程式速度提高,改善使用者體驗。

###2.1 如果你是一個PHP程式設計師…… ###

PHP是在使用的Web應用程式開發中最流行的語言之一。像PHP動態型別和解釋語言,由於其靈活性,提供非常高的效率。

由於4,然後第5版,PHP是基於Zend引擎的實現。這是執行從位元組碼錶示的PHP程式碼的虛擬機器。Zend引擎是世界上每一個PHP的安裝幾乎目前,隨著ZEPHIR,您可以建立在Zend引擎執行PHP擴充套件。

PHP託管ZEPHIR,所以他們顯然有很多相似的地方,但是,他們有給ZEPHIR自己的個性的重要差異。例如,ZEPHIR更加嚴格,它可以讓你減少編譯步驟。

###2.2 如果你是一個C程式設計師…… ###

C是有史以來最強大的和流行的語言之一。 事實上,PHP是用C編寫的, 這是PHP擴充套件的原因之一是可用的。 給你的自由 管理記憶體,使用低級別型別甚至內聯彙編程式。

然而,用C開發大型應用程式可以把PHP或Zephir相比比預期的要長很多 一些錯誤是很難找到如果你不是一個有經驗的開發人員。

Zephir設計是安全的,所以它沒有實現指標或手動記憶體管理, 如果你是一個C程式設計師,你會覺得Zephir強大但更友好比C。

###2.3 編譯VS解讀###

編譯通常會減慢下來的發展; 你需要多一點耐心,使你的程式碼編譯執行它之前。此外,該解釋趨於降低有利於生產率的效能

為了更高的效率,Zephir需要編譯你的程式碼,但是他不會影響高生產效率,開發人員可以決定哪些應用程式的部分應當在ZEPHIR,哪些不是。

###2.4 靜態型別和動態型別語言###

一般來說,在靜態型別語言中,變數是繫結到一個特定型別的一生。 其型別不能改變,只能參考例項和相容操作。 像C / c++語言實現的方案:

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

在動態型別,繫結到型別的值,而不是變數。 所以,一個變數可能引用 值的型別,然後重新分配後的值型別無關。 Javascript / PHP的例子 動態型別語言:

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

儘管動態型別有著生產力的優勢,但是動態語言並不能成為所有應用的選擇,特別是對於非常大型程式碼庫和高效能的應用程式

優化效能的動態語言像PHP是更具挑戰性的比靜態語言(如C)。 在靜態語言中,優化器可以利用型別資訊做出決策。 在動態語言中, 只有很有限的資訊是可用的,這使得優化器的選擇更加困難。

如果你需要非常高的效能, 靜態語言可能是一個更安全的選擇。

靜態語言的另一個好處是編譯器執行額外的檢查。 編譯器無法發現邏輯錯誤,這更重要, 但是編譯器可以提前發現錯誤,動態語言只能在執行提示報錯資訊。

Zephir是靜態和動態型別都允許使用的。

###2.5 程式碼保護###

在某些情況下,編譯不顯著提高效能,這可能是因為瓶頸所在 在應用程式的I / O(很有可能),而不是計算/記憶體限制。 然而,編譯程式碼也可能帶來某種程度的intelectual保護您的應用程式。 Zephir,產生本地二進位制檔案,你也有能力“隱藏”使用者或客戶的原始程式碼。

##3. 總結##

Zephir不是用來取代PHP或C,相反,我們認為這是一個補充,允許開發者進入程式碼編譯和靜態型別.Zephir正是試圖加入從C和PHP的世界,美好的事物 尋找機會使他們的應用程式更快!,如果你喜歡PHP,如果你渴望執行效率,那就別猶豫趕快嘗試一下zephir吧!

注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!

zephir技術交流:246348908 歡迎大家的加入!

感謝zephir開發人員: