polarphp 0.0.1 alpha 發布:全新 PHP 運行時環境

2021-01-08 開源中國
polarphp 項目介紹

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 介紹

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

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

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群的交流方式,下面是二維碼,有興趣的同學可以掃碼加入:(推薦使用微信^ _ ^)

   

目前有以下工作組

語言核心團隊

標準庫團隊

生態鏈項目團隊

文檔團隊

官方網站維護團隊

相關焦點

  • PHP 框架 QueryPHP 1.0.3 發布,兼容 PHP 8.0 和 PHP 8.1
    1.0.3 是 1.0. 最後一次主要更新,未來僅僅做安全補丁,不再繼續維護,這也是最後一個支持 PHP 7.4 的版本。 1.1.* 版本將以 PHP 8.0 作為最低版本,已經發布 1.1.0-alpha.1 版本。
  • Hyperf 發布 v1.1.0 版本,企業級的 PHP 微服務雲原生協程框架
    過去的3個半月從 6月20日 Hyperf 1.0 發布以來,Hyperf 受到了非常多的關注,也獲得了非常多的建議和幫助,截止至今
  • PHP 二進位打包工具 phiwrapper 發布 1.0 版本
    phiwrapper 是一個用於打包胖「二進位」的工具phiwrapper可以通過batsh使得同一文件包含不同平臺的二進位,可以在不同平臺運行:例如,使用phiwrapper打包 Windows 的 PHP PE 二進位和,linux的ELF二進位以及php代碼,在Windows下可以雙擊運行file.bat文件開啟服務,linux下可以用sh .
  • PHP實例——PHP創建動態圖像
    如果要使用與JPEG有關的圖像創建函數,還需要安裝jpeg-6b,如果要在圖像中使用Type 1型字體,則必須安裝t1lib。      在建立圖像創建環境之前,還需要做一些準備工作。首先,安裝t1lib接著安裝jpeg-6b,然後再安裝GD庫文件。在安裝時一定要按這裡給定的順序進行安裝,因為在編譯GD入庫時會用到jpeg-6b,如果沒有安裝jpeg-6b,在編譯時就會出錯。
  • Php常見問題總結
    1:為什麼我得不到變量我在一網頁向另一網頁POST數據name,為什麼輸出$name時卻得不到任何值?2:調試你的程序在運行時必須知道某個變量為何值。我是這樣做的,建立一文件debug.php,其內容如下: <?
  • DVBBS php轉換工具使用教程
    首先需要架好PHP程序運行環境。目前轉換程序只有四種,即:1、動網的ASP7.1 AC 轉到 動網PHP1.02、動網的ASP7.1 MSSQL 轉到 動網PHP1.03、DISCUZ4.1 轉到 動網PHP1.04、DISCUZ5.0 轉到 動網PHP1.0一、說明:1、訪問你的轉換路徑,各文件對應的轉換說明如下2、asp71ac-to-php10
  • php中函數禁用繞過的原理與利用
    >LD_PRELOAD喜聞樂見的LD_PRELOAD,這是我學習web時遇到的第一個bypass disable的方式,個人覺得很有意思。原理LD_PRELOAD是Linux系統的一個環境變量,它可以影響程序的運行時的連結(Runtime linker),它允許你定義在程序運行前優先加載的動態連結庫。
  • windows 檢查php版本專題及常見問題 - CSDN
    phpstudy下安裝NGOOS2.0(Windows7版本)說明:Phpstudy配置僅在windows7 X64環境下測試運行成功,本配置針對於php7.0非線程安全(NTS)及ngoos2.0的安裝。
  • Apache SkyWalking(Incubating) 5.0.0-alpha 發布
    Apache SkyWalking (Incubating) 5.0.0-alpha 發 布。
  • DVBBS ASP7.1 AC到PHP1.0升級教程
    1、要先說明,你的空間要支持PHP和MYSQL。2、下載轉換程序3、下載原程序4、把下載的原程序壓縮包解壓上傳到空間目錄,如我的:PHP目錄下。5、傳完安裝,運行:install/install.php。
  • PHP框架 Solar 1.1.2發布!
    solar PHP發布1.1.2版本,並更新手冊2章(Command-line tools及Mail),請移步英文官方站查看:http://solarphp.com/ ,中文文檔和windows版會儘快跟進。。。順便說一句,在xp下使用solar已經不是問題,請繼續關注,謝謝!
  • 關於PHP 5.4 你所需要知道的
    有時,你開發時用不上需要配置httpd.conf的apache大殺器,而只需要一個可以在命令行中使用的超小型Webserver. 感謝PHP(先感謝國家),PHP 5.4這次內建了CLI Web server。
  • PHP文件包含漏洞利用思路與Bypass總結手冊(二)
    包含日誌訪問日誌利用條件:1、需要知道伺服器日誌的存儲路徑2、日誌文件可讀利用姿勢:很多時候,web伺服器會將請求寫入到日誌文件中,比如說apache。在用戶發起請求時,會將請求寫入access.log,當發生錯誤時將錯誤寫入error.log。
  • PHPStudy V8.0 內測版發布
    php中文網旗下公益軟體:phpStudy V8.0 內測版上線了!第一時間邀請廣大網友進行內測,搶先體驗新功能!
  • php基礎大通關——十分鐘了解php基礎知識點之二
    本節我們繼續通過練習題的方式來熟悉php的基礎知識點。1. echo 和 print 有什麼區別?php常用函數3. Joomla 在 PHP 中是什麼? 可以 不行解析:php是腳本語言,不能生成.exe或者DLL文件。6. 用戶 IP 地址存儲在哪個變量中? $_SERVER['DOMAIN'] $GLOBALS $_ENV $_SERVER['REMOTE_ADDR']解析:使用 $_SERVER[『REMOTE_ADDR』] 獲取客戶端 IP。7. 可以同時運行多個版本的 PHP 嗎?
  • 怎麼理解php中的數組?php的數組創建和使用方法是什麼?
    php數組的定義數組就是值類型相同的變量的集合,在PHP中的一種常用的複合數據類型,數據可以存放很多的數據,可以存儲任何類型的數據。我們可以把變量當做一個包含值得盒子,那麼可以把數組當做當成一個帶有隔層的盒子,每一層都可以存放一個值。
  • PHP實現簡單線性回歸之數學庫的重要性
    在當前環境下,通過選擇實例變量來表示計算得到的中間值和匯總結果,從而實施了該原則。實例變量當對統計測試或過程進行建模時,您需要指出聲明哪些實例變量。實例變量的選擇可以通過說明由分析過程生成的中間值和匯總值來確定。每個中間值和匯總值都可以有一個相應的實例變量,將變量的值作為對象屬性。我採用這樣的分析來確定為清單1中的SimpleLinearRegression類聲明哪些變量。
  • php基礎通關大挑戰,看看你能過幾關!
    繼續上一節的內容,通過試題的方式查缺補漏,看看你的php基礎知識還有哪些漏洞!1.在php中,以下代碼列印的結果是?<?php$RESULT =11+011+0x11;echo "$RESULT";?
  • php常量是什麼?它和變量有什麼區別?
    為了能讓更多的人學好php,小編結合自己的理解和自學時所做的筆記,整合了一些知識點,並藉助百家號這個大平臺分享給大家,希望對大家有所幫助!今天小編將分享的是php常量,以及它和變量的區別。二、php常量1、什麼是php常量?所謂常量就是不能改變的量,php常量一旦被定義,就不能被改變或取消定義。這是官方的解釋,也是最權威的解釋。
  • 鳥哥:讓你的 PHP 7 更快之 Hugepage
    作者: Laruence (鳥哥)( )  開源中國ID: @Laruence 本文地址: http://www.laruence.com/2015/10/02/3069.html   轉載請註明出處PHP 7 剛剛發布了