V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
heguangyu5
V2EX  ›  PHP

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

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

    写在最前面

    如果你一看到"编译器"这个词,想到的就是性能,请丢掉这个想法,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  
       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 我看到这句人都傻了,这分明是写了个玩具
    JaguarJack
        7
    JaguarJack  
       2022-01-06 09:45:58 +08:00
    @mokeyjay 请使用 PHP <= 5.2 版本
    student33
        8
    student33  
       2022-01-27 17:32:32 +08:00
    虽然不大懂,但是,
    lz 牛皮,加油
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1449 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:15 · PVG 01:15 · LAX 09:15 · JFK 12:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.