polarphp – 一個新的PHP 語言運行時環境
polarphp
是一個全新的PHP
語言的運行時環境,基於目前最新的zend virtual machine
進行打造,支持最新的語言規範,同時提供了自己的運行時標準庫( libpdk
)。簡單來說polarphp
之於PHP
語言的關係跟NodeJS
之於Javascript
語言一樣,NodeJS
在v8
引擎基礎之上進行打造,為Javascript
提供了一個在服務端運行的環境。
同樣polarphp
也在zend engine
的基礎上進行打造,實現了一個除Web
開發之外的一個全新的運行環境。
項目官網庫:
https://gitee.com/polarphp/polarphp
https://github.com/polarphp/polarphp
歡迎小伙伴們多多star ^ _ ^
為什麼發起polarphp 項目
隨著Go
和NodeJS
的強勢崛起,PHP
的市場份額逐漸被蠶食,而PHP
官方仍然堅守在Web
編程領域,有些東西越是想守住就越守不住。polarphp
借鑒NodeJS
和Go
的相關特性對zendVM
重新封裝,去掉PHP
一些古老棄用的特性和強Web
屬性,通過實現一套新的運行時框架libpdk
,將PHP
語言打造成為一門真正的通用性腳本語言,賦能PHP
,讓其擁有異步編程,協程,線程,內置的unicode
支持,標準的文件IO
等等特性,讓PHP
程序員不僅僅能做web
應用,也能從容面對真正的服務端應用。
polarphp 提供的基礎設施
- 直接面向終端,去掉
SAPI
從而更好的實現服務端環境。 - 規範化
OPCODE
形成規範,從而提供一種類似pyc
文件的預編譯機制。 - 提供原生多線程支持,借鑒
Java
在多線程方面的編程範式。 - 提供原生異步
IO
支持。 - 提供針對字符串的
unicode
支持。 - 提供一種全新的包組織方式,內置包依賴管理工具,類似
Cargo
和npm
。 - 提供內置的
API
文檔生成工具。
polarphp 大致架構
項目主要由三部分構成,主要有如下三個子模塊
- polarvm
- zendAPI
- libpdk
這個模塊大致的關係如下:
polarvm <=> zendAPI <=> libpdk
polarvm 介紹
現階段實現對zend engine
的封裝,實現最基本的PHP
執行環境,比如實現:
- 語言解析,
OPCODE
的執行。 - 實現基礎運行環境,實現變量操作,數組操作,類加載機制,語言反射等等。
zend engine
的初始化,實現語言引擎與終端的鏈接,實現語言引擎對標準輸入輸出的直接控制。- 實現語言引擎與標準庫之間的回調機制。
zendAPI 介紹
做過PHP
擴展的朋友應該知道,在我們開發擴展的時候,zend engine
的很多接口都是通過宏調用的方式提供的,類型不安全,出錯了不好調試,而且有些宏還長的特別像,同時操作數組的時候特別繁瑣。zend engine
的gc
是通過引用計數實現的,同時C
語言又沒有什麼從語言層面幫我們管理計數的機制,從而我們在寫擴展的時候管理內存不僅很繁瑣而且一不小心就會造成內存洩露。特別是將寫時復制和PHP
變量之間的引用一起使用的時候,非常讓能頭痛。
如果我們的標準庫如果直接基於原生的zend engine
的接口,勢必擴展性,可維護性會受到嚴重影響,特別是目前polarvm
是基於zend engine
二次開發的可觀情況下。所以在語言引擎和標準庫之間實現一個屏蔽層,對下實現對zend engine
原生接口的封裝,對上提供一套相對穩定且簡單的面向對象的CPP
編程接口。
zendAPI 提供如下的特性:
- 完全面向對象,對
Zend Engine API
進行二次定義 - 使用現代的
C++11
語法進行開發,便於維護 - 最大化屏蔽
PHP
版本對擴展開發的影響,zendAPI
將對Zend Engine API
不同版本帶來的差異屏蔽掉 - 高覆蓋的單元測試,保證代碼質量
- 在封裝的時候,盡最大能力保證性能
- 致力於項目庫的二進制兼容
libpdk 介紹polarphp 的開發計劃
因為開發資源有限,開發計劃暫定如下:
- 使用
cmake
對zend VM
進行編譯,生成polarphp
定製版的PHP
語言虛擬機。 - 語言支持項目,語言測試框架,移植
LLVM
項目的lit
測試框架。 - 實現
polarphp
驅動程序,實現從命令行執行PHP代碼。 - 對
polarphp
虛擬機進行回歸測試,暫定跑通PHP的語言虛擬機相關回歸測試。 - 實現
polarphp
的內置函數。 - 發布核心虛擬機的
docker
鏡像。 - 整合
libpdk
運行時框架。 - 實現人性化安裝,盡量以最少的步驟進行
polarphp
的安裝。 - 實現包管理器。
- 實現語言配套小工具,比如文檔生成工具等等。
polarphp 目前的現狀
目前項目處於一個非常前期的階段,通過docker
鏡像來實現項目的迭代發布,目前主要是我一個人在業餘時間進行開發,歡迎大家一起玩。2019年一個重要的任務就是完善polarphp
標準庫libpdk
,以及實現在主流的Linux
操作系統上穩定的運行。
如何參與
目前我們暫時只針對中國的用戶,所以採用了微信和QQ群的交流方式,下面是二維碼,有興趣的同學可以掃碼加入:
目前有以下工作組
- 語言核心團隊
- 標準庫團隊
- 生態鏈項目團隊
- 文檔團隊
- 官方維護團隊