写在最前面
如果你一看到"编译器"这个词,想到的就是性能,请丢掉这个想法,BPC 不是为性能而生的.
先上链接
https://www.ourats.com/bpc/ 可直接下载单个文件,但速度有限
https://caiyun.139.com/m/i?155CGKRBnInH0 提取码:dqnO 和彩云网盘,需要注册才能下载,速度快
这些程序仅在 Ubuntu 18.04 amd64 上测试通过,其它平台不保证.
BPC 的特点
-
100%源码保护
BPC 发扬了 RoadSend PHP 的编译思路,将 PHP 编译为 Bigloo Scheme,后者再编译为 C,最终生成可执行文件.
因此做到了 100%的源码保护.
-
和 PHP 高度兼容
PHP 的
run-tests.php脚本支持通过环境变量TEST_PHP_EXECUTABLE设定要测试的 php executable.将
TEST_PHP_EXECUTABLE设为 bpc,然后对 phpt 测试进行有限的修改(白名单,毕竟是编译,不能做到完全一样),BPC 在已经支持的特性上通过了 phpt 测试.当前 BPC 的实现对应 PHP 版本 7.2.19.
-
扩展开发极其容易
得益于 Bigloo Scheme 和 C 的交互非常便利,甚至能够混合编程,所以为 BPC 添加扩展函数和类非常容易.
-
在源码保护和高度兼容的前提下,才会考虑性能和内存占用
-
编译器本身内置软件授权机制
开发进度
目前语言核心已经通过了 php-7.2.19/tests php-7.2.19/Zend/tests 的 phpt 测试.
标准库已经通过了 php-7.2.19/ext/standard/tests 的 phpt 测试.
其它通过测试的扩展有:
- ext/date
- ext/pcre
- ext/mbstring
- ext/posix
其它说明
-
BPC 是什么的缩写?
BPC 就是 Bob PHP Compiler 的意思,Bob 是我的英文名.
-
为什么要开发 BPC?
两个目的:一是想做到真正的 PHP 源码保护,二是简化扩展开发.
关于 PHP 源码保护,参看这里. (这个文章可能触发了 v2 的什么关键词,不能在 v2 发布)
正是由于扩展开发足够简单,所以 BPC 才有可能重新实现 PHP 众多的函数和类,仅实现一个 PHP 到 Scheme 的 Translator 没有足够的实用价值.
-
BPC 离真正可用还有多远?
对于现代 PHP 程序来说,还需时日.
BPC 当前不支持 namespace,closure,generators,traits 等现代 PHP 特性,近期也不打算支持.
-
平台支持
BPC 不支持 Windows 、Mac,不支持 32 位 CPU.
BPC 理论上支持 Linux+64 位 CPU,但仅在 Ubuntu 18.04 amd64 上跑通测试,其他平台未尝试.
这些测试程序的 PHP 源码在哪里?
github 在此:
https://github.com/heguangyu5/bpc-php-7.2.19-tests
按照目录和名称一一对应即可.比如
https://www.ourats.com/bpc/ext/standard/tests/strings/htmlspecialchars
对应 PHP 源码
