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

PHP 编译器 BPC 6.5 发布,支持 gmp 扩展,实现 SplObjectStorage

  •  
  •   heguangyu5 · 187 天前 · 768 次点击
    这是一个创建于 187 天前的主题,其中的信息可能已经有所发展或是发生改变。

    BPC 是一个 PHP Native Compiler,可以将 PHP 源码最终转译成 C 语言,然后编译成动态链接库或可执行程序.

    BPC 还内置软件授权机制,最终可实现源码保护、软件授权、二进制打包三合一!

    彻底解决 PHP 项目的交付问题.

    How BPC Works

    1. 官网 bpc.dev
    2. 安装使用文档
    3. Try BPC with Docker
    4. Run BPC Compiled Program with Docker
    5. BPC 编译入门示例: Tiny File Manager

    BPC 6.5 主要有两项改进:

    1. 支持 gmp 扩展,支持 Object 运算符重载

    gmp 扩展在第一个层面是 GNU MP library 的简单封装.

    另一个层面是借由 gmp 扩展,BPC Runtime 支持了 PHP Object 的 do_operation handler,这也意味着不只 GMP 扩展,以后其它扩展如果有需要,都可以轻松 实现运算符重载, BPC 和 PHP 的兼容性又进了一步.

    什么是运算符重载?

    $a = gmp_init(42);
    $b = gmp_init(17); // $a $b 都是 GMP Object
    
    var_dump($a + $b);
    var_dump($a & $b);
    var_dump($a << $b); // Object 可以直接进行加减乘除,取余,位运算等操作,无需调用扩展函数
    

    2. 实现 SplObjectStorage

    BPC 6.5 实现了 SplObjectStorage 的常见用法,之前编译 webman-framework 时对 src/Context.php 临时性 hack 已经 rollback 了.

    4 条回复    2023-10-24 09:42:50 +08:00
    nuk
        1
    nuk  
       186 天前
    直接编译 php 吗,性能会损失多少?
    happy32199
        2
    happy32199  
       186 天前 via iPhone
    厉害👍 webman 已经全支持了吗
    heguangyu5
        3
    heguangyu5  
    OP
       186 天前
    @nuk 性能还是有很大损失的,PHP8.0 的性能大约是 BPC 的 4 倍,详见: https://www.workerman.net/a/1576 **10.关于性能**部分
    heguangyu5
        4
    heguangyu5  
    OP
       186 天前
    @happy32199 webman 自身已经成功编译了,但依赖注入不支持. 详见: https://www.workerman.net/a/1576 **4. 关于 webman 代码调整的说明**部分.

    基于 webman 的项目要想成功编译还要等一等,如果 webman-admin 也成功编译了,那离实用就不远了.
    当然这也看项目情况,如果没用到 trait 特性,那现在就可以编译了.
    我看 webman-admin 的一堆依赖用到了 trait,如果 BPC 不支持 trait,就需要改动很多代码,所以下一步就把 trait 的实现提上日程了.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3025 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 13:36 · PVG 21:36 · LAX 06:36 · JFK 09:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.