首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >通用表达式语言 CEL-PHP 2.0.0 发布!

通用表达式语言 CEL-PHP 2.0.0 发布!

作者头像
Tinywan
发布2026-07-08 15:39:24
发布2026-07-08 15:39:24
10
举报
文章被收录于专栏:开源技术小栈开源技术小栈

CEL-PHP 2.0.0 发布

CEL-PHP 2.0 是一个重大版本更新,与 CEL 规范和 cel-go 实现对齐。亮点包括:数值比较与空值相等(proposal 210)、可选值(proposal 246)、双变量推导(comprehensions)、时间戳/时长算术、matches()、Protobuf 知名类型以及限定名称解析(qualified-name resolution),此外还有溢出检查的整数数学和修正的时间戳、转换、映射键语义。

CEL(Common Expression Language)是一种简单、安全的表达式语言,可在对性能要求较高的应用中快速、可移植且安全地执行。CEL 旨在嵌入应用中,具有特定于应用的扩展,并且非常适合扩展应用可能已经在使用的声明式配置。类似于 JavaScript 的子集,但更注重可移植性和性能。它不支持循环或递归,避免了无限计算的风险,非常适合嵌入式场景,如 API 授权、数据验证或配置驱动的逻辑。

✨ 新特性(Features)

语言层(Language)

  • 数值比较与空值相等:CEL proposal 210,支持总序和跨类型 == / != / ordering。 (#113)
  • 可选值:实现 CEL proposal 246(optional.of / none / ofNonZeroValue、orValue、可选字段选择、has())。 (#105)
  • 双变量推导:all / exists / existsOne(i, v, p)、transformList / transformMap,支持错误吸收。 (#47990f9)
  • 限定名称解析:最长前缀名称解析和前导点引用(.foo)。 (#bb3ea8b)
  • 列表索引:通过 uint 或整型 double 索引列表;has() 会穿透可选值。 (#dd34c62)

类型层(Types)

  • dyn 和类型值:一等类型值、dyn() 身份转换、规范对齐的转换。 (#021f97f)
  • 标签化映射键:支持 distinct bool/int/uint/string 键,无碰撞,uint 支持超过 PHP_INT_MAX。 (#d041fd8)
  • 知名类型:构造 google.protobuf 标量包装器和 Value。 (#5d9ec16)

标准库(Standard Library)

  • **matches()**:正则表达式字符串函数,支持 Unicode 部分匹配(unanchored)。 (#98a9c6b)
  • 时间戳/时长算术:六种 + / - 重载,并进行范围检查。 (#ef087df)

扩展(Extensions)

  • ext-decimal 2.0:Decimal 扩展已与 ext-decimal 2.0 兼容。 (#9a34cf6)

🐛 错误修复(Bug Fixes)

数字(Numbers)

  • int64 溢出:整数 +、-、* 和取负现在在溢出时抛出异常,而不是包装。 (#018d4c5)
  • 转换溢出:int(double)、unsigned +/* 以及时间戳/时长拒绝超出范围的值。 (#00130ad)
  • 大 uint 字面量:保留超出带符号 64 位范围的 uint 字面量。 (#7177b37)

类型(Types)

  • 无符号整数类型:将无符号值类型化为 int|numeric-string。 (#442967f)
  • 时间戳/时长类型名称:type() 报告 google.protobuf.Timestamp 和 Duration。 (#a7c728b)

解析器(Parser)

  • 基数前缀字面量:解析 0x、0o 和 0b 整数字面量时使用真实基数(以前是 0)。 (#2f1c904)
  • RFC3339 解析:在 proleptic Gregorian 日历上解析时间戳。 (#2469ff3)

日期与时间(Date & Time)

  • 时间戳访问器:修正 CEL 语义的 day、date、millisecond 和时区访问器。 (#a2a4445)
  • string(timestamp) :以 RFC 3339 格式输出,仅包含有效小数位。 (#c152f1d)

📖 文档(Documentation)

  • 升级指南:新增 UPGRADE-2.0.md,覆盖自 1.2.1 以来的每项破坏性变更和行为变更。 (#baf3840)

🏗️ 内部改进(Internal)

  • 依赖项:删除捆绑的 Psl 组件,将 php-standard-library 拆分为独立包,并使用 ext-mbstring。 (#0885373、其他)
  • API 表面:为每个符号标注 @api 或 @internal,只抛出项目异常。 (#13f9265、其他)
  • 质量:使用 Mago 和 Infection 达到 100% 变异分数,并收紧分析器配置。 (#b038374、其他)
  • 打包:加强打包、CI 和发布工具。 (#e40ef2c)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CEL-PHP 2.0.0 发布
  • ✨ 新特性(Features)
    • 语言层(Language)
    • 类型层(Types)
    • 标准库(Standard Library)
    • 扩展(Extensions)
  • 🐛 错误修复(Bug Fixes)
    • 数字(Numbers)
    • 类型(Types)
    • 解析器(Parser)
    • 日期与时间(Date & Time)
  • 📖 文档(Documentation)
  • 🏗️ 内部改进(Internal)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档