dev.to | 📄 原文链接 | 2026-08-09 收录

为什么我用 C23 而不是 C++ 重写 PHP 扩展

来源:dev.to — 2026-08-09

📋 概述

作者 fork 了 DataStax Cassandra 驱动(它在 PHP 8 上无法编译、维护者大多已离开)。他第一反应是用 C++ 重写新部分:写了 Zend 包装类、全程 RAII、用智能指针包裹 zval——整套现代方案,结果引入了花了好几天才追查到的内存 bug,却没得到有意义的回报。于是驱动改用 C23 重写。作者强调这不是说 C++ 是坏语言:在你能掌控分配器、错误模型和对象生命周期的应用里,std::vector 和 std::unique_ptr 物有所值。但 PHP 扩展不同——Zend 引擎拥有这些规则,而它的规则是用 C 写的。每个抽象都得被"教会" PHP 的生命周期规则,这段教学代码往往比它想简化的活儿还复杂。文章列出四个让他付出真实调试时间的痛点:PHP 拥有分配器(emalloc/efree 体系)、请求级内存模型等。

🔑 核心要点

💡 金句

在能掌控分配器、错误模型和对象生命周期的应用里,std::vector 和 std::unique_ptr 物有所值;但 PHP 扩展不是这种应用——Zend 引擎拥有那些规则,而它的规则是用 C 写的。
← 返回 dev.to 首页