TypePHP 编译器 https://swoole.com/aot/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

2.0 KiB

快速开始

本章给出一个最小可编译示例,以及常用命令。完整的用户手册在独立的 aot/docs 仓库,这里聚焦「能在 5 分钟内跑起来」。

Sources: docs/QUICKSTART.md · README.md

安装依赖

composer install              # 安装 nikic/php-parser, phpx 等
php bin/tpc.php --help        # 验证安装

Linux 还需高精度数学库:sudo apt install libgmp-dev libmpfr-dev libmpdec-dev

Sources: README.md

写一个最小程序

可执行代码必须放在 main() 里,类/函数/常量可在全局定义:

<?php
class Calculator {
    public function add(int $a, int $b): int { return $a + $b; }
}
function main(): void {
    $c = new Calculator();
    echo $c->add(5, 3) . PHP_EOL;
}

编译并运行:

php bin/tpc.php main.php -o myapp
./myapp          # 输出 8

Sources: docs/QUICKSTART.md · docs/QUICKSTART.md

常用命令

命令 作用
php bin/tpc.php hello.php -O2 指定优化级别编译
php bin/tpc.php src/ -o app -j4 目录编译 + 4 路并行
php bin/tpc.php src/ --dry --build-dir /tmp/b 只生成 C++ 不编译(调试用)
php bin/tpc.php app.php -r -O2 -- --flag1 v1 编译后直接运行,并传参
php bin/tpc.php project.yml project.yml 配置编译

Sources: src/Translator.php · docs/QUICKSTART.md

调试中间产物

--dry 会把生成的 .cc / _arginfo.h 写入 --build-dir 指定的目录,便于检查翻译结果;--no-progress 则逐文件打印进度。

Sources: src/Translator.php

下一步

  • 了解产物形态差异 → 编译模式
  • 理解 project.yml 字段 → 见仓库根 project.ymldocs/COMPILER_CLI.md
  • 排查「Not implemented」→ 不支持的 PHP 特性