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

PHP 也能和 go 一样编译成单独的二进制可执行文件了

  •  
  •   zjsxwc ·
    zjsxwc · 2021-11-25 10:32:25 +08:00 · 1140 次点击
    这是一个创建于 855 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/VKCOM/kphp

    kphp 是 php 语言的一个子集,

    它用的是 php 的子集,需要能够从 php 代码中自动推导出变量类型,或者用 phpdoc 中 /** @var type */显式地标出变量类型才行,没有 gc ,使用 c++ raii 来保证内存安全问题 ,kphp 是先把这种带类型的 php 代码编译到 c++,再编译成二进制可执行文件的,而不是直接编译成 llvm 代码。

    作者给了一个用 kphp 调用 sdl 图形库写游戏的例子 https://github.com/quasilyte/kphp-game

    第 1 条附言  ·  2021-11-25 17:37:15 +08:00
    可能用 kphp 直接写业务的不多,但可以用 kphp 把有代码加密需求的 php 脚本编译成 so 库,来保护代码
    zjsxwc
        1
    zjsxwc  
    OP
       2021-11-25 17:00:06 +08:00
    我编译运行了这个游戏,生成的二进制可执行文件有 111M

    <img src="https://gitee.com/zjsxwc/image-bed/raw/master/v2ex/kphp-game.png" />
    askfilm
        2
    askfilm  
       2021-11-25 17:08:10 +08:00
    有意思
    zjsxwc
        3
    zjsxwc  
    OP
       2021-11-26 08:36:07 +08:00
    之前比较帖子《 php7 怎么比 Java 还快?》 里 php 耗时 20 秒, https://www.v2ex.com/t/603272

    使用 kphp 把 php 编译成独立二进制可执行文件,在同一台机器上算质数,耗时 5 秒,比 golang 快,比 rust 4.8 秒稍微慢一点。

    root@caaa15c3621c:/tmp/dev# ./kphp_out/cli
    第 300000 个素数的值是:4256233 耗时 5351 毫秒 root@caaa15c3621c:/tmp/dev# ls PN.php pnmain.php
    PN.php pnmain.php
    不过编译生成的./kphp_out/cli 有 63M 大。
    zjsxwc
        4
    zjsxwc  
    OP
       2021-11-26 08:39:53 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5358 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:28 · PVG 15:28 · LAX 00:28 · JFK 03:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.