Skip to content

v0.2.0-beta.4

Choose a tag to compare

@KingBes KingBes released this 23 Jul 14:47
· 85 commits to main since this release

v0.2.0-beta.4

重点关注:内存安全(数组引用计数系统性修复)、编译器兼容性(gcc/clang 全平台通过)、PDO MySQL 驱动。

新增

  • PDO MySQL 驱动:在 SQLite 驱动基础上新增 MySQL 驱动,实现 PDO 驱动抽象层。CodeGenerator 自动注入驱动注册代码,PDO::__construct("mysql:...") 开箱即用。CI 已覆盖 Linux/Windows/macOS 三平台 MySQL 集成测试。
  • 字符串函数strrpos / stripos / strripos 三个查找函数。
  • stream_context_create:占位实现,接收 options 数组参数保持签名兼容。

修复

  • 数组元素引用计数系统性修复arr_push / arr_set_int / arr_set_str 存储数组/对象值时未 retain,导致 PDOStatement::fetchAllresult[] = row 后 row 被重赋值 free,result 残留悬垂指针(use-after-free)。
  • 对象唯一 ID 机制t_object 新增独立 id 字段(全局递增计数器),替代 refcount & 0xFFFFvar_dump 输出符合标准 PHP 行为。
  • 数组重赋值双重释放$result = func(..., $result, ...) 时函数内部 realloc 了旧指针,guard 再次 free 导致堆损坏。新增 exprIsCallWithVarArg 检测跳过此类释放。
  • gcc/clang 编译兼容性:修复多处 static inline 前向声明缺失导致的 implicit declaration / conflicting types 错误(array.h / pcre.c / iconv 等),三平台 gcc/clang/tcc 全部 222 测试通过
  • 闭包 $this 捕获:闭包内使用 $this 时自动捕获 self 指针并增加引用计数。
  • 继承类结构体:子类不再重复 _obj 字段,修复 upcast 指针偏移错误。
  • 注解 newInstance() 类型推断foreach (ROUTE as $v) 遍历注解数组时正确推导返回类型,修复 Call to undefined method 转译错误。
  • stream_socket_accept 错误处理:真正错误抛异常(可 try-catch),超时/EAGAIN 返回 -1,符合 AOT 错误处理原则。
  • runtime 错误处理:所有公共函数/对象方法改用 tp_throw 抛异常,消除静默错误处理。
  • Windows stream_isatty:用 GetFileType 替代 _isatty 避免崩溃。
  • $obj->prop[] = value 语法:Parser 支持属性数组 push 赋值。
  • 命名空间兼容性:类前向声明、静态属性方法调用、拓扑排序等命名空间场景修复。
  • macOS -framework 链接:TCC 透传 -framework X 给系统 ld。
  • #2

变更

  • PDO 驱动注册自动化:CodeGenerator 自动注入驱动初始化代码到 main(),无需手动注册。

Full Changelog: v0.2.0-beta.3...v0.2.0-beta.4