開發了一年多的PHP編譯器BPC初見成效,發一些測試程式給大家看看

heguangyu5發表於2022-01-04

寫在最前面

如果你一看到”編譯器”這個詞,想到的就是效能,請丟掉這個想法,BPC不是為效能而生的.

先上鍊接

www.ourats.com/bpc/ 可直接下載單個檔案,但速度有限

caiyun.139.com/m/i?155CGKRBnInH0 提取碼:dqnO 和彩雲網盤,需要註冊才能下載,速度快

這些程式僅在 Ubuntu 18.04 amd64 上測試通過,其它平臺不保證.

BPC的特點

1. 100%原始碼保護

BPC發揚了RoadSend PHP的編譯思路,將PHP編譯為Bigloo Scheme,後者再編譯為C,最終生成可執行檔案.

因此做到了100%的原始碼保護.

2. 和PHP高度相容

PHP的 run-tests.php 指令碼支援通過環境變數 TEST_PHP_EXECUTABLE 設定要測試的 php executable.

TEST_PHP_EXECUTABLE 設為bpc,然後對phpt測試進行有限的修改(白名單,畢竟是編譯,不能做到完全一樣),BPC在已經支援的特性上通過了phpt測試.

當前BPC的實現對應PHP版本7.2.19.

3. 擴充套件開發極其容易

得益於Bigloo Scheme和C的互動非常便利,甚至能夠混合程式設計,所以為BPC新增擴充套件函式和類非常容易.

4. 在原始碼保護和高度相容的前提下,才會考慮效能和記憶體佔用

5. 編譯器本身內建軟體授權機制

開發進度

目前語言核心已經通過了 php-7.2.19/tests php-7.2.19/Zend/tests 的phpt測試.

標準庫已經通過了 php-7.2.19/ext/standard/tests 的phpt測試.

其它通過測試的擴充套件有:

1. ext/date

2. ext/pcre

3. ext/mbstring

4. ext/posix

其它說明

1. BPC是什麼的縮寫?

BPC就是Bob PHP Compiler的意思,Bob是我的英文名.

2. 為什麼要開發BPC?

兩個目的:一是想做到真正的PHP原始碼保護,二是簡化擴充套件開發.

關於PHP原始碼保護,參看這裡. (這個文章可能觸發了v2的什麼關鍵詞,不能在v2釋出)

正是由於擴充套件開發足夠簡單,所以BPC才有可能重新實現PHP眾多的函式和類,僅實現一個PHP到Scheme的Translator沒有足夠的實用價值.

3. BPC離真正可用還有多遠?

對於現代PHP程式來說,還需時日.

BPC當前不支援namespace,closure,generators,traits等現代PHP特性,近期也不打算支援.

4. 平臺支援

BPC不支援Windows、Mac,不支援32位CPU.

BPC理論上支援Linux+64位CPU,但僅在 Ubuntu 18.04 amd64 上跑通測試,其他平臺未嘗試.

這些測試程式的PHP原始碼在哪裡?

github在此:

github.com/heguangyu5/bpc-php-7.2....

按照目錄和名稱一一對應即可.比如

bpc/ext/standard/tests/strings/htmlspecialchars

對應PHP原始碼

master/ext/standard/tests/strings/htmlspecialchars.phpt

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章