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

圖片描述

polarphp 項目介紹

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

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

爲何發起 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 大體架構

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

  1. polarvm
  2. zendAPI
  3. libpdk

這個模塊大體的關係以下:web

polarvm <=> zendAPI <=> libpdk

polarvm 介紹

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

  1. 語言解析,OPCODE的執行。
  2. 實現基礎運行環境,實現變量操做,數組操做,類加載機制,語言反射等等。
  3. zend engine的初始化,實現語言引擎與終端的連接,實現語言引擎對標準輸入輸出的直接控制。
  4. 實現語言引擎與標準庫之間的回調機制。

zendAPI 介紹

作過PHP擴展的朋友應該知道,在咱們開發擴展的時候,zend engine的不少接口都是經過宏調用的方式提供的,類型不安全,出錯了很差調試,並且有些宏還長的特別像,同時操做數組的時候特別繁瑣。zend enginegc是經過引用計數實現的,同時C語言又沒有什麼從語言層面幫咱們管理計數的機制,從而咱們在寫擴展的時候管理內存不只很繁瑣並且一不當心就會形成內存泄露。特別是將寫時複製和PHP變量之間的引用一塊兒使用的時候,很是讓能頭痛。npm

若是咱們的標準庫若是直接基於原生的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那樣的輕量級的服務框架更加方便,底層基於事件循環模型和多線程模型。ubuntu

項目庫地址: https://github.com/polarphp/l...centos

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操做系統上穩定的運行。

如何參與

目前咱們暫時只針對中國的用戶,因此採用了微信羣的交流方式:
微信號:zzu_xiuxiu

目前有如下工做組

  1. 語言核心團隊
  2. 標準庫團隊
  3. 生態鏈項目團隊
  4. 文檔團隊
  5. 官方網站維護團隊
相關文章
相關標籤/搜索