polarphp 專案介紹
polarphp
是一個全新的PHP
語言的執行時環境,基於目前最新的zend virtual machine
進行打造,支援最新的語言規範,同時提供了自己的執行時標準庫 (libpdk
)。
簡單來說polarphp
之於PHP
語言的關係跟NodeJS
之於Javascript
語言一樣,NodeJS
在v8
引擎基礎之上進行打造,為Javascript
提供了一個在服務端執行的環境。同樣polarphp
也在zend engine
的基礎上進行打造,實現了一個除Web
開發之外的一個全新的執行環境。
專案官網庫:
歡迎小夥伴們多多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 介紹
libpdk
的定位是polarphp
語言環境中的標準庫,PDK
是PHP Development Kit
幾個單詞的縮寫。在設計上參考Java
的JDK
的模組組織風格,為PHP
提供一套嚴謹並且功能強大的執行時標準庫,讓實現服務端高效程式設計成為可能,比如使用PHP
實現類似Netty
那樣的事件驅動的網路框架,或者CoreDNS
那樣的應用專案成為可能。同時也可以讓開發終端程式比如npm
,Cargo
和PM2
等等類似的程式更加便捷。在Web
領域,libpdk
讓polarphp
能夠脫離SAPI
直接像go
那樣自己對埠進行監聽,從而實現gin
那樣的輕量級的服務框架更加方便,底層基於事件迴圈模型和多執行緒模型。
專案庫地址: github.com/polarphp/li…
PDK
計劃瞭如下幾個模組
-
Base module (基礎模組,實現最基本的功能,比如輸入輸出,檔案系統,程式與執行緒,事件模型等等)
-
Network module(網路模組,在基礎模組之上,實現一套高效能的網路框架,讓編寫服務端系統更加便捷)
-
Web module (Web模組,實現常見的
Http
協議,提供一個型別Serlet
的Web
執行時容器) -
GUI module (使用者介面模組,未來實現,讓
PHP
具備編寫常見的客戶端系統,基於openGL
實現)
polarphp 的開發計劃
因為開發資源有限,開發計劃暫定如下:
-
使用
cmake
對zend VM
進行編譯,生成polarphp
定製版的PHP
語言虛擬機器。 -
語言支援專案,語言測試框架,移植
LLVM
專案的lit
測試框架。 -
實現
polarphp
驅動程式,實現從命令列執行PHP程式碼。 -
對
polarphp
虛擬機器進行迴歸測試,暫定跑通PHP的語言虛擬機器相關回歸測試。 -
實現
polarphp
的內建函式。 -
釋出核心虛擬機器的
docker
映象。 -
整合
libpdk
執行時框架。 -
實現人性化安裝,儘量以最少的步驟進行
polarphp
的安裝。 -
實現包管理器。
-
實現語言配套小工具,比如文件生成工具等等。
polarphp 優先支援的作業系統
-
debain
-
centos
-
ubuntu
-
openSUSE
-
macOS
未來打算原生支援Windows
作業系統,目前正在進行知識儲備。
polarphp 目前的現狀
目前專案處於一個非常前期的階段,通過docker
映象來實現專案的迭代釋出,目前主要是我一個人在業餘時間進行開發,歡迎大家一起玩。2019年一個重要的任務就是完善polarphp
標準庫libpdk
,以及實現在主流的Linux
作業系統上穩定的執行。
如何參與
目前我們暫時只針對中國的使用者,所以採用了微信和QQ群的交流方式,下面是二維碼,有興趣的同學可以掃碼加入:(推薦使用微信^ _ ^)
目前有以下工作組
-
語言核心團隊
-
標準庫團隊
-
生態鏈專案團隊
-
文件團隊
-
官方網站維護團隊