开发了一年多的PHP编译器BPC初见成效,发一些测试程序给大家看看

写在最前面

如果你一看到”编译器”这个词,想到的就是性能,请丢掉这个想法,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 协议》,转载必须注明作者和本文链接
本帖由系统于 2年前 自动加精
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!