Skip to content

v0.2.0-beta.7

Choose a tag to compare

@KingBes KingBes released this 29 Jul 14:24
· 58 commits to main since this release
d39ba1a

What's Changed

新特性

cURL 扩展 (ext/curl/)

  • 纯 phpc 实现 HTTP/HTTPS 客户端,不依赖 libcurl C 库
  • 35 个函数 + 690 个常量 + 6 个类(CurlHandle/CURLFile 等)
  • 复用 ext/openssl(mbedTLS)和 ext/stream 的 socket 抽象
  • 支持 multipart 文件上传、chunked 解码、FOLLOWLOCATION 重定向

GD 扩展 (ext/gd/)

  • 纯 phpc 实现图像处理,不依赖 libgd/libpng/libjpeg
  • ~90 个函数 + 89 个常量 + 2 个类(GdImage/GdFont)
  • 支持 PNG/GIF/BMP/GD/GD2/WBMP/XBM/TGA 共 8 种编解码
  • 不支持格式(JPEG/WebP 等)调用时抛 RuntimeException 明确报错

array 泛型数组类型系统

  • array 编译期单态化为独立 C 类型(t_arr_int/t_arr_str 等)
  • 元素紧凑存储(array 比 array 节省 67% 内存)
  • 协变转换机制 + 元素类型追踪 + 特化排序/洗牌

修复

异常处理机制 (include/object/try.h)

  • TP_SETJMP 宏:MinGW x86_64 SEH + GCC -O2 下使用 _setjmp(buf, NULL)
    跳过 RtlUnwindEx,修复 longjmp 跨函数跳转时 ACCESS_VIOLATION
  • _tp_do_longjmp noinline 辅助函数:隔离 longjmp 调用,防止 GCC 内联
    优化破坏 SEH unwind 表
  • TP_FINALLY 不再吞掉未处理异常:新增 _tp_need_rethrow 标志和保存变量,
    TP_END_TRY 据此重抛,修复 try { throw } finally { ... } catch 语义

其他修复

  • 对象唯一 ID 机制(t_object 新增 id 字段,替代 refcount & 0xFFFF)
  • 数组元素引用计数系统性修复(fetchAll 悬垂指针 use-after-free)
  • 数组重赋值自赋值 guard 双重释放
  • stream_socket_accept 错误处理契约(真错误抛异常,EAGAIN 返回 -1)
  • macOS -framework 链接支持(TCC 不识别 -framework X 语法)
  • gcc/clang 下特化排序/洗牌函数指针类型不兼容
  • isset/empty 返回类型推导缺失
  • mbedTLS 相关:声明顺序、参数类型、aesni.c 源文件缺失
  • gcc/clang 静态库归档命令不兼容(改用系统 ar)