寫在最前面
如果你一看到”編譯器”這個詞,想到的就是效能,請丟掉這個想法,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 協議》,轉載必須註明作者和本文連結