polarphp – 一個新的 PHP 語言運行時環境

polarphp是一個全新的PHP語言的運行時環境,基於目前最新的zend virtual machine進行打造,支持最新的語言規范,同時提供了自己的運行時標準庫 (libpdk)。簡單來說polarphp之於PHP語言的關系跟NodeJS之於Javascript語言一樣,NodeJSv8引擎基礎之上進行打造,為Javascript提供了一個在服務端運行的環境。

同樣polarphp也在zend engine的基礎上進行打造,實現了一個除Web開發之外的一個全新的運行環境。

項目官網庫:

https://gitee.com/polarphp/polarphp

https://github.com/polarphp/polarphp

歡迎大家們多多star ^ _ ^

為什麼發起 polarphp 項目

隨着GoNodeJS的強勢崛起,PHP的市場份額逐漸被蠶食,而PHP官方仍然堅守在Web編程領域,有些東西越是想守住就越守不住。polarphp借鑒NodeJSGo的相關特性對zendVM重新封裝,去掉PHP一些古老棄用的特性和強Web屬性,通過實現一套新的運行時框架libpdk,將PHP語言打造成為一門真正的通用性腳本語言,賦能PHP,讓其擁有異步編程,協程,線程,內置的unicode支持,標準的文件IO等等特性,讓PHP程序員不僅僅能做web應用,也能從容面對真正的服務端應用。

polarphp 提供的基礎設施

  1. 直接面向終端,去掉SAPI從而更好的實現服務端環境。

  2. 規范化OPCODE形成規范,從而提供一種類似pyc文件的預編譯機制。

  3. 提供原生多線程支持,借鑒Java在多線程方面的編程範式。

  4. 提供原生異步IO支持。

  5. 提供針對字符串的unicode支持。

  6. 提供一種全新的包組織方式,內置包依賴管理工具,類似Cargonpm

  7. 提供內置的API文檔生成工具。

polarphp 大致架構

項目主要由三部分構成,主要有如下三個子模塊

  1. polarvm

  2. zendAPI

  3. libpdk

這個模塊大致的關系如下:

polarvm zendAPI libpdk

polarvm 介紹

現階段實現對zend engine的封裝,實現最基本的PHP執行環境,比如實現:

  1. 語言解析,OPCODE的執行。

  2. 實現基礎運行環境,實現變量操作,數組操作,類加載機制,語言反射等等。

  3. zend engine的初始化,實現語言引擎與終端的鏈接,實現語言引擎對標準輸入輸出的直接控制。

  4. 實現語言引擎與標準庫之間的回調機制。

zendAPI 介紹

做過PHP擴展的朋友應該知道,在我們開發擴展的時候,zend engine的很多接口都是通過宏調用的方式提供的,類型不安全,出錯了不好調試,而且有些宏還長的特別像,同時操作數組的時候特別繁瑣。zend enginegc是通過引用計數實現的,同時C語言又沒有什麼從語言層面幫我們管理計數的機制,從而我們在寫擴展的時候管理記憶體不僅很繁瑣而且一不小心就會造成記憶體泄露。特別是將寫時復制和PHP變量之間的引用一起使用的時候,非常讓能頭痛。

如果我們的標準庫如果直接基於原生的zend engine的接口,勢必擴展性,可維護性會受到嚴重影響,特別是目前polarvm是基於zend engine二次開發的可觀情況下。所以在語言引擎和標準庫之間實現一個屏蔽層,對下實現對zend engine原生接口的封裝,對上提供一套相對穩定且簡單的面向對象的CPP編程接口。

zendAPI 提供如下的特性:

  1. 完全面向對象,對Zend Engine API進行二次定義

  2. 使用現代的C++11語法進行開發,便於維護

  3. 最大化屏蔽PHP版本對擴展開發的影響,zendAPI將對Zend Engine API不同版本帶來的差異屏蔽掉

  4. 高覆蓋的單元測試,保證代碼質量

  5. 在封裝的時候,盡最大能力保證性能

  6. 致力於項目庫的二進制兼容

libpdk 介紹polarphp 的開發計畫

因為開發資源有限,開發計畫暫定如下:

  1. 使用cmakezend VM進行編譯,生成polarphp定製版的PHP語言虛擬機。

  2. 語言支持項目,語言測試框架,移植LLVM項目的lit測試框架。

  3. 實現polarphp驅動程序,實現從命令行執行PHP代碼。

  4. polarphp虛擬機進行回歸測試,暫定跑通PHP的語言虛擬機相關回歸測試。

  5. 實現polarphp的內置函數。

  6. 發佈核心虛擬機的docker鏡像。

  7. 整合libpdk運行時框架。

  8. 實現人性化安裝,儘量以最少的步驟進行polarphp的安裝。

  9. 實現包管理器。

  10. 實現語言配套小工具,比如文檔生成工具等等。

polarphp 目前的現狀

目前項目處於一個非常前期的階段,通過docker鏡像來實現項目的迭代發佈,目前主要是我一個人在業余時間進行開發,歡迎大家一起玩。2019年一個重要的任務就是完善polarphp標準庫libpdk,以及實現在主流的Linux操作系統上穩定的運行。

如何參與

目前我們暫時只針對中國的用戶,所以採用了微信和QQ群的交流方式,下面是二維碼,有興趣的同學可以掃碼加入:

polarphp - 一個新的 PHP 語言運行時環境 

polarphp - 一個新的 PHP 語言運行時環境

目前有以下工作組

  1. 語言核心團隊

  2. 標準庫團隊

  3. 生態鏈項目團隊

  4. 文檔團隊

  5. 官方網站維護團隊

來源:cnBeta