polarphp 0.0.1 alpha 釋出:全新 PHP 執行時環境

NiZerin發表於2019-04-27

https://user-gold-cdn.xitu.io/2019/4/27/16a5ca44358e52ec?w=800&h=168&f=png&s=5005

polarphp 專案介紹

polarphp是一個全新的PHP語言的執行時環境,基於目前最新的zend virtual machine進行打造,支援最新的語言規範,同時提供了自己的執行時標準庫 (libpdk)。

簡單來說polarphp之於PHP語言的關係跟NodeJS之於Javascript語言一樣,NodeJSv8引擎基礎之上進行打造,為Javascript提供了一個在服務端執行的環境。同樣polarphp也在zend engine的基礎上進行打造,實現了一個除Web開發之外的一個全新的執行環境。

專案官網庫:

github.com/polarphp/po…

gitee.com/polarphp/po…

歡迎小夥伴們多多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 介紹

libpdk 的定位是polarphp語言環境中的標準庫,PDKPHP Development Kit幾個單詞的縮寫。在設計上參考JavaJDK的模組組織風格,為PHP提供一套嚴謹並且功能強大的執行時標準庫,讓實現服務端高效程式設計成為可能,比如使用PHP實現類似Netty那樣的事件驅動的網路框架,或者CoreDNS那樣的應用專案成為可能。同時也可以讓開發終端程式比如npmCargoPM2等等類似的程式更加便捷。在Web領域,libpdkpolarphp能夠脫離SAPI直接像go那樣自己對埠進行監聽,從而實現gin那樣的輕量級的服務框架更加方便,底層基於事件迴圈模型和多執行緒模型。

專案庫地址: github.com/polarphp/li…

PDK計劃瞭如下幾個模組

  • Base module (基礎模組,實現最基本的功能,比如輸入輸出,檔案系統,程式與執行緒,事件模型等等)

  • Network module(網路模組,在基礎模組之上,實現一套高效能的網路框架,讓編寫服務端系統更加便捷)

  • Web module (Web模組,實現常見的Http協議,提供一個型別SerletWeb執行時容器)

  • GUI module (使用者介面模組,未來實現,讓PHP具備編寫常見的客戶端系統,基於openGL實現)

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 優先支援的作業系統

  • debain

  • centos

  • ubuntu

  • openSUSE

  • macOS

未來打算原生支援Windows作業系統,目前正在進行知識儲備。

polarphp 目前的現狀

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

如何參與

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

polarphp 0.0.1 alpha 釋出:全新 PHP 執行時環境
   
polarphp 0.0.1 alpha 釋出:全新 PHP 執行時環境

目前有以下工作組

  1. 語言核心團隊

  2. 標準庫團隊

  3. 生態鏈專案團隊

  4. 文件團隊

  5. 官方網站維護團隊

相關連結

相關文章