开发了一年多的 PHP 编译器 BPC 初见成效,发一些测试程序给大家看看 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
heguangyu5
V2EX    PHP

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

  •  
  •   heguangyu5 2022-01-04 17:22:41 +08:00 3534 次点击
    这是一个创建于 1379 天前的主题,其中的信息可能已经有所发展或是发生改变。

    写在最前面

    如果你一看到"编译器"这个词,想到的就是性能,请丢掉这个想法,BPC 不是为性能而生的.

    先上链接

    https://www.ourats.com/bpc/ 可直接下载单个文,但速度有限

    https://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 在此:

    https://github.com/heguangyu5/bpc-php-7.2.19-tests

    按照目录和名称一一对应即可.比如

    https://www.ourats.com/bpc/ext/standard/tests/strings/htmlspecialchars

    对应 PHP 源码

    https://github.com/heguangyu5/bpc-php-7.2.19-tests/blob/master/ext/standard/tests/strings/htmlspecialchars.phpt

    8 条回复    2022-01-27 17:32:32 +08:00
    dusu
        1
    dusu  
       2022-01-04 19:22:00 +08:00 via iPhone
    用来写点玩具还行
    考虑性能、代码安全
    为啥不用 go/rust/vlang
    除非是老项目
    而以现有的 php 生态和环境来看
    就算做出来也没有多少用武之地了
    楼主 保重~
    ferock
        2
    ferock  
    PRO
       2022-01-04 20:34:51 +08:00
    楼主 保重~
    Rache1
        3
    Rache1  
       2022-01-04 21:09:03 +08:00   3
    > BPC 当前不支持 namespace,closure,generators,traits 等现代 PHP 特性,近期也不打算支持.

    这不跟扯淡一样的吗……
    Felldeadbird
        4
    Felldeadbird  
       2022-01-04 21:27:32 +08:00
    不支持 namespace,closure,generators,traits 在现在看来算是自废武功啊。
    sagaxu
        5
    sagaxu  
       2022-01-04 21:39:06 +08:00 via Android
    just for fun ,自娱自乐就好,有没有用武之地都不重要
    mokeyjay
        6
    mokeyjay  
       2022-01-04 21:41:59 +08:00
    @Rache1 我看到这句人都傻了,这分明是写了个玩具
    akagishigeru
        7
    akagishigeru  
       2022-01-06 09:45:58 +08:00
    @mokeyjay 请使用 PHP <= 5.2 版本
    9JmbXR73QBOZ44el
        8
    9JmbXR73QBOZ44el  
       2022-01-27 17:32:32 +08:00
    虽然不大懂,但是,
    lz 牛皮,加油
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3498 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 04:40 PVG 12:40 LAX 21:40 JFK 00:40
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86