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